You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

230 lines
7.6 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. #include "device_io_control_service.hpp"
  2. using namespace iflytop;
  3. using namespace std;
  4. #if 0
  5. ID ID
  6. - 3 PC2 0
  7. - 3 PC3 1
  8. - 3 PC4 2
  9. - 3 PC5 3
  10. - 3 PC6 4
  11. - 3 PC7 5
  12. #endif
  13. DeviceIoControlService::DeviceIoControlService() {}
  14. void DeviceIoControlService::initialize() { GET_TO_SERVICE(m_zcanHost); }
  15. void DeviceIoControlService::startScan() {
  16. m_workThread.reset(new Thread("DeviceIoControlService", [this]() {
  17. ThisThread thisThread;
  18. uint32_t i = 0;
  19. int readpressuresensor_id = 1;
  20. while (!thisThread.getExitFlag()) {
  21. /* code */
  22. thisThread.sleepForMs(1);
  23. i++;
  24. if (i % 1000 == 0) {
  25. m_zcanHost->readadc(0, m_adc_0);
  26. m_zcanHost->readadc(1, m_adc_1);
  27. m_zcanHost->readadc(2, m_adc_2);
  28. // m_zcanHost->readadc(3, m_adc_3);
  29. // m_zcanHost->readadc(4, m_adc_4);
  30. // m_zcanHost->readadc(5, m_adc_5);
  31. }
  32. if (i % 3000 == 0) {
  33. // m_hpp272_data_1
  34. m_zcanHost->hpp272_read_c1000(1, m_hpp272_data_1);
  35. }
  36. if (i % 300 == 0) {
  37. if (readpressuresensor_id == 5) {
  38. readpressuresensor_id = 1;
  39. }
  40. m_zcanHost->huacheng_pressure_sensor_read_c1005(readpressuresensor_id, m_pressure_sensor_data[readpressuresensor_id]);
  41. readpressuresensor_id++;
  42. }
  43. if (i % 100 == 0) {
  44. // m_zcanHost->readio(1, m_waterImmersionSensor1);
  45. // m_zcanHost->readio(2, m_waterImmersionSensor2);
  46. }
  47. }
  48. }));
  49. }
  50. void DeviceIoControlService::airCompressor_setState(bool val) {
  51. logger->info("airCompressor_setState:{}", val);
  52. if (val) {
  53. m_zcanHost->writeio(0, 1);
  54. usleep(500 * 100);
  55. m_zcanHost->writeio(1, 1);
  56. } else {
  57. m_zcanHost->writeio(1, 0);
  58. usleep(500 * 100);
  59. m_zcanHost->writeio(0, 0);
  60. }
  61. }
  62. int DeviceIoControlService::getAirCompressor_io1() { return m_zcanHost->read_writeio_state_cache(1); }
  63. int DeviceIoControlService::getAirCompressor_io2() { return m_zcanHost->read_writeio_state_cache(2); }
  64. int DeviceIoControlService::getAirCompressor_currentValue() { return m_adc_0 * 0.00167 - 1.25; }
  65. int DeviceIoControlService::getAirBlower_io1() { return m_zcanHost->read_writeio_state_cache(3); }
  66. int DeviceIoControlService::getAirBlower_io2() { return m_zcanHost->read_writeio_state_cache(4); }
  67. int DeviceIoControlService::getAirBlower_currentValue() { return m_adc_1 * 0.00167 - 1.25; }
  68. int DeviceIoControlService::AirBlower_setState(bool val) {
  69. logger->info("AirBlower_setState:{}", val);
  70. if (val) {
  71. m_zcanHost->writeio(2, 1);
  72. usleep(500 * 100);
  73. m_zcanHost->writeio(3, 1);
  74. } else {
  75. m_zcanHost->writeio(3, 0);
  76. usleep(500 * 100);
  77. m_zcanHost->writeio(2, 0);
  78. }
  79. return 0;
  80. }
  81. // heatingStrip
  82. int DeviceIoControlService::getHeatingStrip_io1() { return m_zcanHost->read_writeio_state_cache(5); }
  83. int DeviceIoControlService::getHeatingStrip_io2() { return m_zcanHost->read_writeio_state_cache(6); }
  84. int DeviceIoControlService::getHeatingStrip_currentValue() { return m_adc_2 * 0.00336 - 2.5; }
  85. void DeviceIoControlService::heartingPlate_setPower(bool val) {
  86. logger->info("heartingPlate_setPower:{}", val);
  87. if (val) {
  88. m_zcanHost->writeio(4, 1);
  89. usleep(500 * 100);
  90. m_zcanHost->writeio(5, 1);
  91. } else {
  92. m_zcanHost->writeio(5, 0);
  93. usleep(500 * 100);
  94. m_zcanHost->writeio(4, 0);
  95. }
  96. }
  97. int DeviceIoControlService::getSprinkler_PumpRPM() { return m_zcanHost->pumpctrl_c1004_get_speed_cache(2); }
  98. int DeviceIoControlService::getChargingPump_PumpRPM() { return m_zcanHost->pumpctrl_c1004_get_speed_cache(1); }
  99. void DeviceIoControlService::drainingPump_open() {
  100. logger->info("drainingPump_open");
  101. m_zcanHost->pumpctrl_c1004(1, 100, -300, 1, 20);
  102. }
  103. void DeviceIoControlService::drainingPump_close() {
  104. logger->info("drainingPump_close");
  105. m_zcanHost->pumpctrl_c1004(1, 100, 0, 1, 20);
  106. }
  107. void DeviceIoControlService::replenishingFluidsPump_open() {
  108. logger->info("replenishingFluidsPump_open");
  109. m_zcanHost->pumpctrl_c1004(1, 100, 300, 1, 20);
  110. }
  111. void DeviceIoControlService::replenishingFluidsPump_close() {
  112. logger->info("replenishingFluidsPump_close");
  113. m_zcanHost->pumpctrl_c1004(1, 100, 0, 1, 20);
  114. }
  115. void DeviceIoControlService::sprayLiquidPump_open() {
  116. logger->info("sprayLiquidPump_open");
  117. m_zcanHost->pumpctrl_c1004(2, 100, 200, 1, 15);
  118. }
  119. void DeviceIoControlService::sprayLiquidPump_close() {
  120. logger->info("sprayLiquidPump_close");
  121. m_zcanHost->pumpctrl_c1004(2, 100, 0, 1, 15);
  122. }
  123. int DeviceIoControlService::getDisinfectantVolume_g() {
  124. // kpa;
  125. float kpa = m_pressure_sensor_data[1].value / 1000.0;
  126. int g = 2.11 * kpa * 1000;
  127. if (g < 450) { /*零点*/
  128. return 0;
  129. }
  130. return g;
  131. }
  132. int DeviceIoControlService::getWaterImmersionSensor1() { return m_waterImmersionSensor1 ? 1 : 0; }
  133. int DeviceIoControlService::getWaterImmersionSensor2() { return m_waterImmersionSensor2 ? 1 : 0; }
  134. DeviceIoControlService::h2o2sensor_data_t DeviceIoControlService::getH2O2SenSorData1() {
  135. DeviceIoControlService::h2o2sensor_data_t data;
  136. // int16_t hydrogen_peroxide_volume; // ppm 0x0100 过氧化氢浓度
  137. // int16_t h2o_h2o2_rs; // %RS * 100 0x0101 过氧化氢相对饱和度
  138. // int16_t temperature1; // °C * 100 0x0102 温度
  139. // int16_t relative_humidity; // %RH * 100 0x0103 相对湿度
  140. data.h2o2 = m_hpp272_data_1.hydrogen_peroxide_volume;
  141. data.humid = m_hpp272_data_1.relative_humidity / 100;
  142. data.temp = m_hpp272_data_1.temperature1 / 100;
  143. data.saturation = m_hpp272_data_1.h2o_h2o2_rs / 100;
  144. return data;
  145. }
  146. bool DeviceIoControlService::getAllSensorData(DeviceIoControlService::all_h2o2sensor_data_t& data) {
  147. data = {0};
  148. data.h2o2sensor_data[0] = getH2O2SenSorData1();
  149. data.h2o2sensor_status[0] = true;
  150. data.h2o2sensor_status[1] = true;
  151. data.h2o2sensor_status[2] = true;
  152. /**
  153. * @brief
  154. */
  155. data.min_h2o2 = -1;
  156. for (size_t i = 0; i < ZARRAYSIZE(data.h2o2sensor_data); i++) {
  157. if (data.h2o2sensor_status[i]) {
  158. if (data.min_h2o2 < 0) {
  159. data.min_h2o2 = data.h2o2sensor_data[i].h2o2;
  160. } else if (data.h2o2sensor_data[i].h2o2 < data.min_h2o2) {
  161. data.min_h2o2 = data.h2o2sensor_data[i].h2o2;
  162. }
  163. }
  164. }
  165. data.max_h2o2 = -1;
  166. for (size_t i = 0; i < ZARRAYSIZE(data.h2o2sensor_data); i++) {
  167. if (data.h2o2sensor_status[i]) {
  168. if (data.max_h2o2 < 0) {
  169. data.max_h2o2 = data.h2o2sensor_data[i].h2o2;
  170. } else if (data.h2o2sensor_data[i].h2o2 > data.max_h2o2) {
  171. data.max_h2o2 = data.h2o2sensor_data[i].h2o2;
  172. }
  173. }
  174. }
  175. /**
  176. * @brief
  177. */
  178. data.max_saturation = -1;
  179. for (size_t i = 0; i < ZARRAYSIZE(data.h2o2sensor_data); i++) {
  180. if (data.h2o2sensor_status[i]) {
  181. if (data.max_saturation < 0) {
  182. data.max_saturation = data.h2o2sensor_data[i].saturation;
  183. } else if (data.h2o2sensor_data[i].saturation > data.max_saturation) {
  184. data.max_saturation = data.h2o2sensor_data[i].saturation;
  185. }
  186. }
  187. }
  188. /**
  189. * @brief 湿
  190. */
  191. data.max_humid = -1;
  192. for (size_t i = 0; i < ZARRAYSIZE(data.h2o2sensor_data); i++) {
  193. if (data.h2o2sensor_status[i]) {
  194. if (data.max_humid < 0) {
  195. data.max_humid = data.h2o2sensor_data[i].humid;
  196. } else if (data.h2o2sensor_data[i].humid > data.max_humid) {
  197. data.max_humid = data.h2o2sensor_data[i].humid;
  198. }
  199. }
  200. }
  201. return true;
  202. }