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.

379 lines
19 KiB

1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
9 months ago
1 year ago
9 months ago
1 year ago
9 months ago
1 year ago
1 year ago
9 months ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
9 months ago
9 months ago
1 year ago
  1. #include "tabbuilder.hpp"
  2. #include "../dep.hpp"
  3. using namespace iflytop;
  4. using namespace app_transmit_disinfection;
  5. using namespace transmit_disfection_protocol;
  6. #define CAN_MASTER TransmitDisinfectionCanMaster::ins()
  7. static void readBoardInfo(int deviceId) {
  8. ack_read_board_info_data_t ack = CAN_MASTER->readboardinfo(deviceId);
  9. ISHOW("boardType :%s(%d)", BoardTypeId2Str(ack.boardType), ack.boardType);
  10. ISHOW("projectId :%s(%d)", ProjectIDToString(ack.projectId), ack.projectId);
  11. ISHOW("protcol_version :%d", ack.protcol_version);
  12. ISHOW("software_version :%d", ack.software_version);
  13. ISHOW("hardware_version :%d", ack.hardware_version);
  14. }
  15. static void readSysInfo(int deviceId) {
  16. //
  17. ack_sysinfo_t ack = CAN_MASTER->readsysinfo(deviceId);
  18. ask_taskinfo_t task[20];
  19. for (int i = 0; i < ack.taskNum; i++) {
  20. task[i] = CAN_MASTER->readtaskinfo(deviceId, i);
  21. }
  22. ISHOW("=========================== sys info ===========================");
  23. ISHOW("total_heap_size :%d", ack.total_heap_size);
  24. ISHOW("free_heap_size :%d", ack.free_heap_size);
  25. ISHOW("free_sys_heap_size :%d", ack.free_sys_heap_size);
  26. ISHOW("sysHasRun :%d", ack.sysHasRun);
  27. ISHOW("=");
  28. ISHOW("=========================== task info ===========================");
  29. ISHOW("taskoff name state stackRemainSize priority");
  30. for (int i = 0; i < ack.taskNum; i++) {
  31. ISHOW("%d %10s %c %d %d", i, task[i].taskName, task[i].state, task[i].stackRemindSize, task[i].priority);
  32. }
  33. ISHOW("=");
  34. }
  35. ZQVTabPage *TabBuilder::getTab(const char *tabname) {
  36. if (tabMap.find(tabname) == tabMap.end()) {
  37. ZQVTabPage *tab = new ZQVTabPage(fathertab, tabname);
  38. tabMap[tabname] = tab;
  39. }
  40. return tabMap[tabname];
  41. }
  42. // int blowserIsOpen(int boardid) {}
  43. // int airCompressorIsOpen(int boardid) {}
  44. // int airTightnessTestACIsOpen(int boardid) {}
  45. // int heaterIsOpen(int boardid) {}
  46. // extChSelectorGetCh
  47. // int airTightnessTestIsCutoff(int boardid) { return m_com->callcmd0(boardid, kfn_air_tightness_test_is_cutoff, DEFUALT_OVERTIME)->getContent(0); }
  48. // void warningLightReadState(int boardid, int *r, int *g, int *b, int *warning);
  49. void TabBuilder::buildBoardBasicCtrl(const char *tabname, int boardid) { //
  50. ZQVTabPage *tab = getTab(tabname);
  51. ZQFunctionListBox *box = new ZQFunctionListBox(tab, "通用", 4);
  52. box->newSubButton("PingAll", [this, boardid](int argn, const char **args) { CAN_MASTER->pingAllBoard(); });
  53. box->newSubButtonEnd();
  54. if (boardid >= 0) {
  55. box->newSubButton("读取板卡信息", [this, boardid](int argn, const char **args) { readBoardInfo(boardid); });
  56. box->newSubButton("读取系统信息", [this, boardid](int argn, const char **args) { readSysInfo(boardid); });
  57. box->newSubButtonEnd();
  58. box->newSubButton("清除复位标识", [this, boardid](int argn, const char **args) { CAN_MASTER->clearResetFlag(boardid); });
  59. // enableReport
  60. box->newSubButtonEnd();
  61. box->newSubButton("使能上报", [this, boardid](int argn, const char **args) { CAN_MASTER->enableReport(boardid, 1); });
  62. box->newSubButton("失能上报", [this, boardid](int argn, const char **args) { CAN_MASTER->enableReport(boardid, 0); });
  63. box->newSubButtonEnd();
  64. box->newSubButton("复位板卡", [this, boardid](int argn, const char **args) { CAN_MASTER->resetBoard(boardid); });
  65. } else {
  66. box->newFunc("读取板卡信息", {"boardid"}, [this](int argn, const char **args) { readBoardInfo(atoi(args[0])); });
  67. box->newFunc("读取系统信息", {"boardid"}, [this](int argn, const char **args) { readSysInfo(atoi(args[0])); });
  68. box->newFunc("清除复位标识", {"boardid"}, [this](int argn, const char **args) { CAN_MASTER->clearResetFlag(atoi(args[0])); });
  69. box->newFunc("使能上报", {"boardid"}, [this](int argn, const char **args) { CAN_MASTER->enableReport(atoi(args[0]), 1); });
  70. box->newFunc("失能上报", {"boardid"}, [this](int argn, const char **args) { CAN_MASTER->enableReport(atoi(args[0]), 0); });
  71. box->newFunc("复位板卡", {"boardid"}, [this](int argn, const char **args) { CAN_MASTER->resetBoard(atoi(args[0])); });
  72. }
  73. }
  74. void TabBuilder::buildFnPumpCtrl(const char *tabname, int boardid) {
  75. ZQVTabPage *tab = getTab(tabname);
  76. ZQFunctionListBox *box = new ZQFunctionListBox(tab, "泵机控制(0:加液泵, 1:喷液泵)", 6);
  77. box->newFunc("pumpRotate", {"subid", "rpm"}, [](int argn, const char **args) { //
  78. CAN_MASTER->pumpRotate(kFixBoardId_LiquidCtrl, atoi(args[0]), atoi(args[1]));
  79. });
  80. box->newFunc("pumpStop", {"subid"}, [](int argn, const char **args) { //
  81. CAN_MASTER->pumpStop(kFixBoardId_LiquidCtrl, atoi(args[0]));
  82. });
  83. box->newFunc("pumpSetIholdIrunIdelay", {"subid", "ihold", "irun", "idelay"}, [](int argn, const char **args) { //
  84. CAN_MASTER->pumpSetIholdIrunIdelay(kFixBoardId_LiquidCtrl, atoi(args[0]), atoi(args[1]), atoi(args[2]), atoi(args[3]));
  85. });
  86. // pumpSetTzw
  87. box->newFunc("pumpSetTzw", {"subid", "tzw"}, [](int argn, const char **args) { //
  88. CAN_MASTER->pumpSetTzw(kFixBoardId_LiquidCtrl, atoi(args[0]), atoi(args[1]));
  89. });
  90. box->newFunc("pumpSetRamp", {"subid", "vs", "a1", "amx", "v1"}, [](int argn, const char **args) { //
  91. CAN_MASTER->pumpSetRamp(kFixBoardId_LiquidCtrl, atoi(args[0]), atoi(args[1]), atoi(args[2]), atoi(args[3]), atoi(args[4]));
  92. });
  93. box->newFunc("pumpSetSubicReg", {"subid", "regadd", "val"}, [](int argn, const char **args) { //
  94. CAN_MASTER->pumpSetSubicReg(kFixBoardId_LiquidCtrl, atoi(args[0]), atoi(args[1]), atoi(args[2]));
  95. });
  96. box->newFunc("pumpGetSubicReg", {"subid", "regadd"}, [](int argn, const char **args) { //
  97. int val = CAN_MASTER->pumpGetSubicReg(kFixBoardId_LiquidCtrl, atoi(args[0]), atoi(args[1]));
  98. ISHOW("val:%x", val);
  99. });
  100. box->newFunc("pumpIsRun", {"subid"}, [](int argn, const char **args) { //
  101. int val = CAN_MASTER->pumpIsRun(kFixBoardId_LiquidCtrl, atoi(args[0]));
  102. ISHOW("val:%d", val);
  103. });
  104. }
  105. void TabBuilder::buildHearterTab(const char *tabname, int boardid) {
  106. ZQVTabPage *tab = getTab(tabname);
  107. ZQFunctionListBox *box = new ZQFunctionListBox(tab, "加热器", 4);
  108. box->newSubButton("加热打开", [this, boardid](int argn, const char **args) { CAN_MASTER->heaterCtrl(boardid, 1); });
  109. box->newSubButton("加热关闭", [this, boardid](int argn, const char **args) { CAN_MASTER->heaterCtrl(boardid, 0); });
  110. box->newSubButtonEnd();
  111. box->newSubButton("加热安全阀打开", [this, boardid](int argn, const char **args) { CAN_MASTER->heaterCtrlSafeValve(boardid, 1); });
  112. box->newSubButton("加热安全阀关闭", [this, boardid](int argn, const char **args) { CAN_MASTER->heaterCtrlSafeValve(boardid, 0); });
  113. box->newSubButtonEnd();
  114. box->newSubButton("读取电流", [this, boardid](int argn, const char **args) {
  115. int val = CAN_MASTER->heaterReadEI(boardid);
  116. ISHOW("val:%d", val);
  117. });
  118. box->newSubButton("读取温度", [this, boardid](int argn, const char **args) {
  119. int val = CAN_MASTER->heaterReadTemperature(boardid);
  120. ISHOW("val:%d", val);
  121. });
  122. box->newSubButton("读取电流ADC", [this, boardid](int argn, const char **args) {
  123. int val = CAN_MASTER->heaterReadEIAdcRaw(boardid);
  124. ISHOW("val:%d", val);
  125. });
  126. box->newSubButton("读取温度Adc", [this, boardid](int argn, const char **args) {
  127. int val = CAN_MASTER->heaterReadTemperatureAdcRaw(boardid);
  128. ISHOW("val:%d", val);
  129. });
  130. box->newSubButton("是否运行", [this, boardid](int argn, const char **args) {
  131. bool val = CAN_MASTER->heaterIsOpen(boardid);
  132. ISHOW("val:%d", val);
  133. });
  134. }
  135. void TabBuilder::buildH2O2SensorTab(const char *tabname, int boardid) {
  136. ZQVTabPage *tab = getTab(tabname);
  137. ZQFunctionListBox *box = new ZQFunctionListBox(tab, "H2O2", 4);
  138. if (boardid >= 0) {
  139. box->newFunc("H2O2传感器读取校准日期", {}, [boardid](int argn, const char **args) {
  140. int32_t year, month, day;
  141. CAN_MASTER->h2o2SensorReadCalibrationDate(boardid, &year, &month, &day);
  142. ISHOW("year:%d,month:%d,day:%d", year, month, day);
  143. });
  144. box->newFunc("H2O2传感器读取IC错误码", {}, [boardid](int argn, const char **args) {
  145. int val = CAN_MASTER->h2o2SensorReadSubIcErrorcode(boardid);
  146. ISHOW("val:%d", val);
  147. });
  148. box->newFunc("H2O2传感器读取IC寄存器", {"reg", "num"}, [boardid](int argn, const char **args) {
  149. uint8_t *val = CAN_MASTER->h2o2SensorReadSubIcReg(boardid, atoi(args[0]), atoi(args[1]));
  150. ISHOW("val:%s", zhex2str(val, atoi(args[1]) * 2).c_str());
  151. });
  152. } else {
  153. box->newFunc("H2O2传感器读取校准日期", {"boardid"}, [this](int argn, const char **args) {
  154. int32_t year, month, day;
  155. CAN_MASTER->h2o2SensorReadCalibrationDate(atoi(args[0]), &year, &month, &day);
  156. ISHOW("year:%d,month:%d,day:%d", year, month, day);
  157. });
  158. box->newFunc("H2O2传感器读取IC错误码", {"boardid"}, [this](int argn, const char **args) {
  159. int val = CAN_MASTER->h2o2SensorReadSubIcErrorcode(atoi(args[0]));
  160. ISHOW("val:%d", val);
  161. });
  162. box->newFunc("H2O2传感器读取IC寄存器", {"boardid", "reg", "num"}, [this](int argn, const char **args) {
  163. uint8_t *val = CAN_MASTER->h2o2SensorReadSubIcReg(atoi(args[0]), atoi(args[1]), atoi(args[2]));
  164. ISHOW("val:%s", zhex2str(val, atoi(args[2]) * 2).c_str());
  165. });
  166. }
  167. }
  168. void TabBuilder::buildTripleWarningLightTab(const char *tabname, int boardid) {
  169. ZQVTabPage *tab = getTab(tabname);
  170. ZQFunctionListBox *box = new ZQFunctionListBox(tab, "三色警报灯", 4);
  171. box->newFunc("三色指示灯控制", {"r", "g", "b", "warning"}, [this, boardid](int argn, const char **args) { //
  172. CAN_MASTER->warningLightSetState(boardid, atoi(args[0]), atoi(args[1]), atoi(args[2]), atoi(args[3]));
  173. });
  174. box->newFunc("读取三色指示灯状态", {}, [this, boardid](int argn, const char **args) {
  175. int r, g, b, warning;
  176. CAN_MASTER->warningLightReadState(boardid, &r, &g, &b, &warning);
  177. ISHOW("r:%d,g:%d,b:%d,warning:%d", r, g, b, warning);
  178. });
  179. }
  180. void TabBuilder::buildWaterSensorTab(const char *tabname, int boardid) {
  181. ZQVTabPage *tab = getTab(tabname);
  182. ZQFunctionListBox *box = new ZQFunctionListBox(tab, "水浸", 4);
  183. box->newSubButton("读取-蒸发桶水浸传感器-状态", [this, boardid](int argn, const char **args) {
  184. int state = CAN_MASTER->evaporationTankWSReadState(boardid);
  185. ISHOW("state:%d", state);
  186. });
  187. box->newSubButton("读取-设备底部水浸传感器-状态", [this, boardid](int argn, const char **args) {
  188. int state = CAN_MASTER->bottomWSReadState(boardid);
  189. ISHOW("state:%d", state);
  190. });
  191. }
  192. void TabBuilder::buildBlowerTab(const char *tabname, int boardid) {
  193. ZQVTabPage *tab = getTab(tabname);
  194. ZQFunctionListBox *box = new ZQFunctionListBox(tab, "风机", 4);
  195. box->newSubButton("风机打开", [this, boardid](int argn, const char **args) { CAN_MASTER->blowerCtrl(boardid, 1); });
  196. box->newSubButton("风机关闭", [this, boardid](int argn, const char **args) { CAN_MASTER->blowerCtrl(boardid, 0); });
  197. box->newSubButtonEnd();
  198. box->newSubButton("风机安全阀打开", [this, boardid](int argn, const char **args) { CAN_MASTER->blowerCtrlSafeValve(boardid, 1); });
  199. box->newSubButton("风机安全阀关闭", [this, boardid](int argn, const char **args) { CAN_MASTER->blowerCtrlSafeValve(boardid, 0); });
  200. box->newSubButtonEnd();
  201. box->newSubButton("风机读取电流", [this, boardid](int argn, const char **args) {
  202. int val = CAN_MASTER->blowerReadEI(boardid);
  203. ISHOW("val:%d", val);
  204. });
  205. box->newSubButton("风机读取电流ADC", [this, boardid](int argn, const char **args) {
  206. int val = CAN_MASTER->blowerReadEIAdcRaw(boardid);
  207. ISHOW("val:%d", val);
  208. });
  209. box->newSubButtonEnd();
  210. box->newSubButton("风机是否错误", [this, boardid](int argn, const char **args) {
  211. bool val = CAN_MASTER->blowerReadElectricIsError(boardid);
  212. ISHOW("val:%d", val);
  213. });
  214. box->newSubButton("风机是否打开", [this, boardid](int argn, const char **args) {
  215. bool val = CAN_MASTER->blowserIsOpen(boardid);
  216. ISHOW("val:%d", val);
  217. });
  218. }
  219. void TabBuilder::buildAirCompressorTab(const char *tabname, int boardid) {
  220. ZQVTabPage *tab = getTab(tabname);
  221. ZQFunctionListBox *box = new ZQFunctionListBox(tab, "空压机", 4);
  222. box->newSubButton("空压机打开", [this, boardid](int argn, const char **args) { CAN_MASTER->airCompressorCtrl(boardid, 1); });
  223. box->newSubButton("空压机关闭", [this, boardid](int argn, const char **args) { CAN_MASTER->airCompressorCtrl(boardid, 0); });
  224. box->newSubButtonEnd();
  225. // box->newFunc("空压机安全阀控制", {"valve_state"}, [this, boardid](int argn, const char **args) { CAN_MASTER->airCompressorCtrlSafeValve(boardid, atoi(args[0])); });
  226. box->newSubButton("空压机安全阀打开", [this, boardid](int argn, const char **args) { CAN_MASTER->airCompressorCtrlSafeValve(boardid, 1); });
  227. box->newSubButton("空压机安全阀关闭", [this, boardid](int argn, const char **args) { CAN_MASTER->airCompressorCtrlSafeValve(boardid, 0); });
  228. box->newSubButtonEnd();
  229. box->newFunc("空压机读取电流", {}, [this, boardid](int argn, const char **args) {
  230. int val = CAN_MASTER->airCompressorReadEI(boardid);
  231. ISHOW("val:%d", val);
  232. });
  233. box->newFunc("空压机读取电流ADC", {}, [this, boardid](int argn, const char **args) {
  234. int val = CAN_MASTER->airCompressorReadEIAdcRaw(boardid);
  235. ISHOW("val:%d", val);
  236. });
  237. box->newFunc("空压机是否打开", {}, [this, boardid](int argn, const char **args) {
  238. bool val = CAN_MASTER->airCompressorIsOpen(boardid);
  239. ISHOW("val:%d", val);
  240. });
  241. }
  242. void TabBuilder::buildAirTightnessTestACTab(const char *tabname, int boardid) {
  243. ZQVTabPage *tab = getTab(tabname);
  244. ZQFunctionListBox *box = new ZQFunctionListBox(tab, "气密性测试空压机", 4);
  245. box->newSubButton("打开", [this, boardid](int argn, const char **args) { CAN_MASTER->airTightnessTestACCtrl(boardid, 1); });
  246. box->newSubButton("关闭", [this, boardid](int argn, const char **args) { CAN_MASTER->airTightnessTestACCtrl(boardid, 0); });
  247. box->newSubButtonEnd();
  248. box->newSubButton("是否打开", [this, boardid](int argn, const char **args) {
  249. bool val = CAN_MASTER->airTightnessTestACIsOpen(boardid);
  250. ISHOW("val:%d", val);
  251. });
  252. }
  253. void TabBuilder::buildPSBusTab(const char *tabname, int boardid) {
  254. ZQVTabPage *tab = getTab(tabname);
  255. ZQFunctionListBox *box = new ZQFunctionListBox(tab, "PSBus", 4);
  256. box->newFunc("读数据", {"subid"}, [this, boardid](int argn, const char **args) {
  257. int32_t val = CAN_MASTER->psBusReadData(boardid, atoi(args[0]));
  258. ISHOW("val:%d", val);
  259. });
  260. box->newSubButton("读取扫描结果", [this, boardid](int argn, const char **args) {
  261. auto result = CAN_MASTER->psBusScan(boardid);
  262. for (int i = 0; i < 10; i++) {
  263. if (result.sensor[i].isOnline) {
  264. ISHOW("id %d, subid %d, ptype %s, uint %s, precision %d, zero %d, full %d", //
  265. i, result.sensor[i].subid, PSType2Str(result.sensor[i].ptype), p100uint2Str(result.sensor[i].uint), result.sensor[i].precision, result.sensor[i].zero, result.sensor[i].full);
  266. } else {
  267. ISHOW("id %d, offline", i);
  268. }
  269. }
  270. });
  271. box->newSubButtonEnd();
  272. box->newSubButton("开始上报", [this, boardid](int argn, const char **args) { CAN_MASTER->psBusStartReport(boardid, 1000); });
  273. box->newSubButton("停止上报", [this, boardid](int argn, const char **args) { CAN_MASTER->psBusStopReport(boardid); });
  274. }
  275. void TabBuilder::buildProportionalTab(const char *tabname, int boardid) {
  276. ZQVTabPage *tab = getTab(tabname);
  277. ZQFunctionListBox *box = new ZQFunctionListBox(tab, "比例阀", 4);
  278. box->newFunc("设置比例阀", {"valveId(1->255)", "valveValue(0->255)"}, [this, boardid](int argn, const char **args) { //
  279. CAN_MASTER->proportionalSetValve(boardid, atoi(args[0]), atoi(args[1]));
  280. });
  281. box->newFunc("读取比例阀位置", {}, [this, boardid](int argn, const char **args) { //
  282. int32_t val = CAN_MASTER->proportionalReadPos(boardid);
  283. ISHOW("val:%d", val);
  284. });
  285. box->newFunc("比例阀是否忙", {}, [this, boardid](int argn, const char **args) { //
  286. int32_t val = CAN_MASTER->proportionalIsBusy(boardid);
  287. ISHOW("val:%d", val);
  288. });
  289. }
  290. void TabBuilder::buildAirTightnessTestTab(const char *tabname, int boardid) {
  291. ZQVTabPage *tab = getTab(tabname);
  292. ZQFunctionListBox *box = new ZQFunctionListBox(tab, "气密性测试", 4);
  293. box->newSubButton("消毒模式", [this, boardid](int argn, const char **args) { //
  294. CAN_MASTER->getCanProtocolCom()->callcmd1(boardid, kfn_air_leak_test_set_mode, 0, DEFUALT_OVERTIME);
  295. });
  296. box->newSubButton("打气模式", [this, boardid](int argn, const char **args) { //
  297. CAN_MASTER->getCanProtocolCom()->callcmd1(boardid, kfn_air_leak_test_set_mode, 1, DEFUALT_OVERTIME);
  298. });
  299. box->newSubButton("气压测试模式", [this, boardid](int argn, const char **args) { //
  300. CAN_MASTER->getCanProtocolCom()->callcmd1(boardid, kfn_air_leak_test_set_mode, 2, DEFUALT_OVERTIME);
  301. });
  302. box->newSubButtonEnd();
  303. box->newSubButton("读取模式(0:消毒,1:打气,2:气压测试)", [this, boardid](int argn, const char **args) { //
  304. shared_ptr<Receipt> receipt = CAN_MASTER->getCanProtocolCom()->callcmd0(boardid, kfn_air_leak_test_get_mode, DEFUALT_OVERTIME);
  305. ISHOW("val:%d", receipt->getContent(0));
  306. });
  307. }
  308. void TabBuilder::buildExtChSelectorTab(const char *tabname, int boardid) {
  309. ZQVTabPage *tab = getTab(tabname);
  310. ZQFunctionListBox *box = new ZQFunctionListBox(tab, "外部通道选择", 4);
  311. box->newFunc("设置外部通道(0:消毒 1:降解 2:除湿)", {"ch"}, [this, boardid](int argn, const char **args) { //
  312. CAN_MASTER->extChSelectorSetCh(boardid, atoi(args[0]));
  313. });
  314. box->newFunc("读取外部通道", {}, [this, boardid](int argn, const char **args) { //
  315. int val = CAN_MASTER->extChSelectorGetCh(boardid);
  316. ISHOW("val:%d", val);
  317. });
  318. }
  319. void TabBuilder::buildValveCtrlTab(const char *tabname, int boardid) {
  320. ZQVTabPage *tab = getTab(tabname);
  321. ZQFunctionListBox *box = new ZQFunctionListBox(tab, "电磁阀", 4);
  322. box->newFunc("加液进气电磁阀(打开,可以正常加液排液,关闭后加液泵倒转可以排空管路)", {"open(1)/cloce(0)"}, [this, boardid](int argn, const char **args) { //
  323. CAN_MASTER->getCanProtocolCom()->callcmd1(boardid, kfn_set_add_fluid_channel_selector_valve, atoi(args[0]), DEFUALT_OVERTIME);
  324. });
  325. }
  326. // void TabBuilder::buildValveCtrlTab(const char *tabname, int boardid) {
  327. // ZQVTabPage *tab = getTab(tabname);
  328. // ZQFunctionListBox *box = new ZQFunctionListBox(tab, "电磁阀", 4);
  329. // box->newFunc("加液进气电磁阀(打开,可以正常加液排液,关闭后加液泵倒转可以排空管路)", {"open(1)/cloce(0)"}, [this, boardid](int argn, const char **args) { //
  330. // CAN_MASTER->getCanProtocolCom()->callcmd1(boardid, kfn_set_add_fluid_channel_selector_valve, atoi(args[0]), DEFUALT_OVERTIME);
  331. // });
  332. // }
  333. void TabBuilder::buildLiquidLevelStateReaderTab(const char *tabname, int boardid) {
  334. ZQVTabPage *tab = getTab(tabname);
  335. ZQFunctionListBox *box = new ZQFunctionListBox(tab, "液位(IO版)状态读取", 4);
  336. box->newFunc("读取状态(如果是IO0:低液位,IO1:中液位,IO2:高液位)", {}, [this, boardid](int argn, const char **args) { //
  337. shared_ptr<Receipt> receipt = CAN_MASTER->getCanProtocolCom()->callcmd0(boardid, kfn_liquid_level_read_io_state, DEFUALT_OVERTIME);
  338. ISHOW("IO0:%d", receipt->getContent(0) & 0x01);
  339. ISHOW("IO1:%d", (receipt->getContent(0) >> 1) & 0x01);
  340. ISHOW("IO2:%d", (receipt->getContent(0) >> 2) & 0x01);
  341. });
  342. }
  343. void TabBuilder::buildEnd() {
  344. for (auto &it : tabMap) {
  345. it.second->addSpacer();
  346. }
  347. }