MB_RTU_task.c 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416
  1. #include "MB_RTU_task.h"
  2. #include "All_define.h"
  3. #include "modbus.h"
  4. #include <SIM_EEPROM.h>
  5. #include "key_operate.h"
  6. #include "protocol.h"
  7. static uint8_t Reset_CNT = 0;
  8. void eMBFuncReadHoldingRegister(UART_msg *ptrmsg)
  9. {
  10. UART_msg msg;
  11. u8 ii= 0;
  12. u8 i =0;
  13. u8 num = ptrmsg->data[5];
  14. msg.len = 5 + num;
  15. msg.data[ii++] = ptrmsg->data[0];
  16. msg.data[ii++] = 3;
  17. msg.data[ii++] = 2 * num;
  18. for(i = 0;i < num;i++)
  19. {
  20. switch(ptrmsg->data[3]) {
  21. case 1:
  22. {
  23. msg.data[ii++] = 0;
  24. uint8_t relay = 0;
  25. if((dis_page_param.face_plate_param.Air_condition_Relay & 0x01) != 0 \
  26. ||(dis_page_param.face_plate_param.Air_condition_Relay & 0x02) == 0)
  27. {
  28. if(struct_realy.relay_ck == 1)
  29. {
  30. relay = 1;
  31. }
  32. else
  33. {
  34. relay = 0;
  35. }
  36. }
  37. else if((dis_page_param.face_plate_param.Air_condition_Relay & 0x03) != 0 )
  38. {
  39. if(struct_realy.relay_hk == 1)
  40. {
  41. relay = 1;
  42. }
  43. else
  44. {
  45. relay = 0;
  46. }
  47. }
  48. msg.data[ii++] = (dis_page_param.face_plate_param.Air_condition_switch & 0x0f) +\
  49. ( (relay <<4) & 0xf0 ) ;
  50. }
  51. break;
  52. case 2:
  53. msg.data[ii++] = 0;
  54. msg.data[ii++] = dis_page_param.face_plate_param.Air_condition_mode;
  55. break;
  56. case 3:
  57. {
  58. uint8_t speed = 0;
  59. uint8_t low = 0;
  60. uint8_t hight = 0;
  61. if(struct_realy.speed_type.fs1 == 1)
  62. {
  63. speed = 1;
  64. }
  65. else if(struct_realy.speed_type.fs2 == 1)
  66. {
  67. speed = 1;
  68. }
  69. else if(struct_realy.speed_type.fs3 == 1)
  70. {
  71. speed = 1;
  72. }
  73. else
  74. {
  75. speed = 0;
  76. }
  77. hight = (u8)(dis_page_param.face_plate_param.Air_wind_speed >>8);
  78. low = (u8) ( ( (dis_page_param.face_plate_param.Air_wind_speed >>0) &0x0f) + \
  79. ((speed << 4) &0xf0 ) );
  80. if( ( dis_page_param.face_plate_param.Air_wind_speed &0x0100 )!= 0)
  81. {
  82. if(speed == 0)
  83. {
  84. low = 0x00;
  85. }
  86. else if (speed == 1)
  87. {
  88. low = 0x10;
  89. }
  90. }
  91. msg.data[ii++] = hight;
  92. msg.data[ii++] = low;
  93. }
  94. break;
  95. case 4:
  96. msg.data[ii++] = 0;
  97. msg.data[ii++] = dis_page_param.face_plate_param.Air_set_temp;
  98. break;
  99. case 5:
  100. msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Air_relay_switch >>8);
  101. msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Air_relay_switch >>0);
  102. break;
  103. case 6:
  104. {
  105. uint8_t relay = 0;
  106. if((dis_page_param.face_plate_param.Floor_heating_Relay & 0x01) != 0 )
  107. {
  108. if(struct_realy.relay_hk == 1)
  109. {
  110. relay = 1;
  111. }
  112. else
  113. {
  114. relay = 0;
  115. }
  116. }
  117. else if((dis_page_param.face_plate_param.Floor_heating_Relay & 0x02) != 0 )
  118. {
  119. if(struct_realy.relay_ck == 1)
  120. {
  121. relay = 1;
  122. }
  123. else
  124. {
  125. relay = 0;
  126. }
  127. }
  128. msg.data[ii++] = 0;
  129. msg.data[ii++] = (dis_page_param.face_plate_param.Floor_heating_switch & 0x0f) +\
  130. ( (relay <<4) & 0xf0 ) ;
  131. }
  132. break;
  133. case 7:
  134. msg.data[ii++] = 0;
  135. msg.data[ii++] = dis_page_param.face_plate_param.Floor_heating_set_temp;
  136. break;
  137. case 8:
  138. msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Floor_relay_switch >>8);
  139. msg.data[ii++] = (u8) (dis_page_param.face_plate_param.Floor_relay_switch >>0);
  140. break;
  141. case 9:
  142. msg.data[ii++] = 0;
  143. msg.data[ii++] = dis_page_param.face_plate_param.Fresh_air_switch;
  144. break;
  145. case 11:
  146. {
  147. uint8_t speed = 0;
  148. if(dis_page_param.face_plate_param.Fresh_air_Relay == 0x0001)
  149. {
  150. if(struct_realy.speed_type.fs1 == 1)
  151. {
  152. speed = 1;
  153. }
  154. else if(struct_realy.speed_type.fs2 == 1)
  155. {
  156. speed = 1;
  157. }
  158. else if(struct_realy.speed_type.fs3 == 1)
  159. {
  160. speed = 1;
  161. }
  162. else
  163. {
  164. speed = 0;
  165. }
  166. }
  167. msg.data[ii++] = 0;
  168. msg.data[ii++] = (u8) ( ( (dis_page_param.face_plate_param.Fresh_air_speed >>0) &0x0f) + \
  169. ((speed << 4) &0xf0 ) );
  170. }
  171. break;
  172. case 12:
  173. msg.data[ii++] = 0;
  174. msg.data[ii++] = dis_page_param.face_plate_param.Compensates_temp;
  175. break;
  176. case 13:
  177. msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Real_time_Temp >>8);
  178. msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Real_time_Temp >>0);
  179. break;
  180. case 14:
  181. msg.data[ii++] = 0;
  182. msg.data[ii++] = dis_page_param.face_plate_param.Real_time_Humi;
  183. break;
  184. case 16:
  185. msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Air_condition_Relay >>8);
  186. msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Air_condition_Relay >>0);
  187. break;
  188. case 17:
  189. msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Floor_heating_Relay >>8);
  190. msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Floor_heating_Relay >>0);
  191. break;
  192. case 18:
  193. msg.data[ii++] = 0;
  194. msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Fresh_air_Relay >>0);
  195. break;
  196. case 19:
  197. msg.data[ii++] = 0;
  198. msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Ltemp_Protection_valve >>0);
  199. break;
  200. case 20:
  201. msg.data[ii++] = 0;
  202. msg.data[ii++] = dis_page_param.face_plate_param.Lock_screen;
  203. break;
  204. case 21:
  205. msg.data[ii++] = 0;
  206. msg.data[ii++] = dis_page_param.face_plate_param.Full_Half_Lock;
  207. break;
  208. case 22:
  209. msg.data[ii++] = 0;
  210. msg.data[ii++] = dis_page_param.face_plate_param.Data_send;
  211. break;
  212. case 23:
  213. msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Led_Brightness >>8);;
  214. msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Led_Brightness >>0);
  215. break;
  216. case 25:
  217. msg.data[ii++] = 0;
  218. msg.data[ii++] = dis_page_param.face_plate_param.Sleep_time_addr;
  219. break;
  220. case 26:
  221. msg.data[ii++] = 0;
  222. msg.data[ii++] = dis_page_param.face_plate_param.Code_Version;
  223. break;
  224. case 100:
  225. msg.data[ii++] = (uint8_t)((dis_page_param.face_plate_param.Device_BaudRate >> 8) &0xff );
  226. msg.data[ii++] = (uint8_t)((dis_page_param.face_plate_param.Device_BaudRate >> 0) &0xff );
  227. break;
  228. case 101:
  229. msg.data[ii++] = (uint8_t)((dis_page_param.face_plate_param.TempHumi_UpdateMode >> 8) &0xff );
  230. msg.data[ii++] = (uint8_t)((dis_page_param.face_plate_param.TempHumi_UpdateMode >> 0) &0xff );
  231. break;
  232. case 102:
  233. msg.data[ii++] = 0;
  234. msg.data[ii++] = dis_page_param.face_plate_param.Open_device_mode;
  235. break;
  236. case 109:
  237. msg.data[ii++] = 0;
  238. msg.data[ii++] = dis_page_param.face_plate_param.Parm_SaveFlag;
  239. break;
  240. case 110:
  241. msg.data[ii++] = 0;
  242. msg.data[ii++] = dis_page_param.face_plate_param.Panel_Shield;
  243. break;
  244. case 111:
  245. msg.data[ii++] = 0;
  246. msg.data[ii++] = dis_page_param.face_plate_param.HTemp_Limit;
  247. break;
  248. case 112:
  249. msg.data[ii++] = 0;
  250. msg.data[ii++] = dis_page_param.face_plate_param.LTemp_Limit;
  251. break;
  252. case 0:
  253. msg.data[ii++] = 0;
  254. if(dis_page_param.face_plate_param.Reset_Flag == 1)
  255. {
  256. if(Reset_CNT > 0)
  257. {
  258. Reset_CNT--;
  259. }
  260. else
  261. {
  262. dis_page_param.face_plate_param.Reset_Flag = 0;
  263. }
  264. }
  265. msg.data[ii++] = dis_page_param.face_plate_param.Reset_Flag;
  266. break;
  267. default:
  268. msg.data[ii++] = 0;
  269. msg.data[ii++] = 0;
  270. break;
  271. }
  272. ptrmsg->data[3] += 1;
  273. }
  274. u16 CRCA;
  275. u8 CRCH;
  276. u8 CRCL;
  277. CRCA = GetCRC16(msg.data,ii);
  278. CRCH = CRCA>>8;
  279. CRCL = (u8)CRCA;
  280. msg.data[ii++] = CRCH;
  281. msg.data[ii++] = CRCL;
  282. msg.len = ii;
  283. memcpy(ptrmsg,&msg,sizeof(UART_msg));
  284. }
  285. void PullOutOf_SleepPage(void)
  286. {
  287. if(dis_page_num.Dis_air_Conditioning == dis_air_Conditioning_sleep)
  288. {
  289. dis_page_num.Dis_air_Conditioning = dis_air_Conditioning_open;
  290. }
  291. if(dis_page_num.Dis_floor_heating == dis_floor_heating_sleep)
  292. {
  293. dis_page_num.Dis_floor_heating = dis_floor_heating_open;
  294. }
  295. if(dis_page_num.Dis_fresh_air == dis_fresh_air_sleep)
  296. {
  297. dis_page_num.Dis_fresh_air = dis_fresh_air_open;
  298. }
  299. dis_page_param.advanced_setting_time = 0;
  300. dis_page_param.sleep_times = 0;
  301. }
  302. void Control_Save(uint8_t * Data_need_write)
  303. {
  304. printf("Parm_Save %d\r\n",Parm_Save);
  305. if(Parm_Save)
  306. {
  307. (*Data_need_write)++;
  308. }
  309. }
  310. uint8_t AirCondition_Sheiled_Set(void)
  311. {
  312. if(AirCondition_Sheiled == 0)
  313. {
  314. return 1;
  315. }
  316. else
  317. {
  318. return 0;
  319. }
  320. }
  321. uint8_t FloorHeating_Sheiled_Set(void)
  322. {
  323. if(FloorHeating_Sheiled == 0)
  324. {
  325. return 1;
  326. }
  327. else
  328. {
  329. return 0;
  330. }
  331. }
  332. uint8_t AirFresh_Sheiled_Set(void)
  333. {
  334. if(AirFresh_Sheiled == 0)
  335. {
  336. return 1;
  337. }
  338. else
  339. {
  340. return 0;
  341. }
  342. }
  343. uint8_t eMBFuncWriteHoldingRegister_do(uint8_t *data_H,uint8_t *data_L, uint16_t addr,uint8_t *Data_need_write)
  344. {
  345. uint8_t error_code = 0;
  346. switch(addr)
  347. {
  348. case 1:
  349. if(AirCondition_Sheiled_Set())
  350. {
  351. return 0;
  352. }
  353. if(*data_H == 0)
  354. {
  355. if(*data_L == 0x01)
  356. {
  357. dis_page_param.face_plate_param.Air_condition_switch = 1;
  358. dis_page_num.display_page = dis_air_Conditioning;
  359. dis_page_num.Dis_air_Conditioning = dis_air_Conditioning_open;
  360. Control_Save(Data_need_write);
  361. }
  362. else if (*data_L == 0x00)
  363. {
  364. dis_page_param.face_plate_param.Air_condition_switch = 0;
  365. dis_page_num.display_page = dis_air_Conditioning;
  366. dis_page_num.Dis_air_Conditioning = dis_air_Conditioning_close;
  367. Control_Save(Data_need_write);
  368. }
  369. else
  370. {
  371. error_code += 1;
  372. }
  373. }
  374. else
  375. {
  376. error_code += 1;
  377. }
  378. break;
  379. case 2:
  380. if(AirCondition_Sheiled_Set())
  381. {
  382. return 0;
  383. }
  384. if(*data_H == 0)
  385. {
  386. if(dis_page_param.face_plate_param.Air_condition_switch == 1)
  387. {
  388. if(*data_L == 0 || *data_L == 1 || *data_L == 2 || *data_L == 3)
  389. {
  390. dis_page_num.display_page = dis_air_Conditioning;
  391. dis_page_param.face_plate_param.Air_condition_mode = *data_L ;
  392. Control_Save(Data_need_write);
  393. }
  394. else
  395. {
  396. error_code += 1;
  397. }
  398. }
  399. else
  400. {
  401. error_code += 1;
  402. }
  403. }
  404. else
  405. {
  406. error_code += 1;
  407. }
  408. break;
  409. case 3:
  410. if(AirCondition_Sheiled_Set())
  411. {
  412. return 0;
  413. }
  414. if(*data_H == 0)
  415. {
  416. if(dis_page_param.face_plate_param.Air_condition_switch == 1)
  417. {
  418. if(*data_L == 1 || *data_L == 2 || *data_L == 3)
  419. {
  420. dis_page_num.display_page = dis_air_Conditioning;
  421. dis_page_param.face_plate_param.Air_wind_speed = ((uint16_t)*data_H << 8)| ((uint16_t)*data_L <<0);
  422. Control_Save(Data_need_write);
  423. }
  424. else
  425. {
  426. error_code += 1;
  427. }
  428. }
  429. else
  430. {
  431. error_code += 1;
  432. }
  433. }
  434. else if(*data_H == 1)
  435. {
  436. if(dis_page_param.face_plate_param.Air_condition_switch == 1)
  437. {
  438. if(*data_L == 0)
  439. {
  440. dis_page_num.display_page = dis_air_Conditioning;
  441. dis_page_param.face_plate_param.Air_wind_speed = 0x0100;
  442. Control_Save(Data_need_write);
  443. }
  444. else
  445. {
  446. error_code += 1;
  447. }
  448. }
  449. else
  450. {
  451. error_code += 1;
  452. }
  453. }
  454. else
  455. {
  456. error_code += 1;
  457. }
  458. break;
  459. case 4:
  460. if(AirCondition_Sheiled_Set())
  461. {
  462. return 0;
  463. }
  464. if(*data_H == 0)
  465. {
  466. if(dis_page_param.face_plate_param.Air_condition_switch == 1)
  467. {
  468. if(*data_L >= Air_set_temp_Down_limit && *data_L <= Air_set_temp_up_limit)
  469. {
  470. dis_page_num.display_page = dis_air_Conditioning;
  471. dis_page_param.face_plate_param.Air_set_temp = *data_L;
  472. Control_Save(Data_need_write);
  473. }
  474. else
  475. {
  476. error_code += 1;
  477. }
  478. }
  479. else
  480. {
  481. error_code += 1;
  482. }
  483. }
  484. else
  485. {
  486. error_code += 1;
  487. }
  488. break;
  489. case 5:
  490. {
  491. if(AirCondition_Sheiled_Set())
  492. {
  493. return 0;
  494. }
  495. if(dis_page_param.face_plate_param.Air_condition_switch == 1)
  496. {
  497. if((dis_page_param.face_plate_param.Air_condition_Relay &0xff00) == 0x0200)
  498. {
  499. if((dis_page_param.face_plate_param.Air_condition_Relay &0x00ff) == 0x0001)
  500. {
  501. if(*data_H == 0x01)
  502. {
  503. if(*data_L == 0x01 || *data_L == 0x00)
  504. {
  505. dis_page_param.face_plate_param.Air_relay_switch = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
  506. Control_Save(Data_need_write);
  507. }
  508. else
  509. {
  510. error_code += 1;
  511. }
  512. }
  513. else
  514. {
  515. error_code += 1;
  516. }
  517. }
  518. else if((dis_page_param.face_plate_param.Air_condition_Relay &0x00ff) == 0x0002)
  519. {
  520. if(*data_H == 0x02)
  521. {
  522. if(*data_L == 0x01 || *data_L == 0x00)
  523. {
  524. dis_page_param.face_plate_param.Air_relay_switch = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
  525. Control_Save(Data_need_write);
  526. }
  527. else
  528. {
  529. error_code += 1;
  530. }
  531. }
  532. else
  533. {
  534. error_code += 1;
  535. }
  536. }
  537. else if((dis_page_param.face_plate_param.Air_condition_Relay &0x00ff) == 0x0003)
  538. {
  539. if(*data_H == 0x03)
  540. {
  541. if(*data_L == 0x00 || *data_L == 0x01 || *data_L == 0x02 || *data_L == 0x03)
  542. {
  543. dis_page_param.face_plate_param.Air_relay_switch = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
  544. Control_Save(Data_need_write);
  545. }
  546. else
  547. {
  548. error_code += 1;
  549. }
  550. }
  551. else
  552. {
  553. error_code += 1;
  554. }
  555. }
  556. else
  557. {
  558. error_code += 1;
  559. }
  560. }
  561. else
  562. {
  563. error_code += 1;
  564. }
  565. }
  566. else
  567. {
  568. error_code += 1;
  569. }
  570. }
  571. break;
  572. case 6:
  573. if(FloorHeating_Sheiled_Set())
  574. {
  575. return 0;
  576. }
  577. if(*data_H == 0)
  578. {
  579. if(*data_L == 0x01)
  580. {
  581. dis_page_param.face_plate_param.Floor_heating_switch = 1;
  582. dis_page_num.display_page = dis_floor_heating;
  583. dis_page_num.Dis_floor_heating = dis_floor_heating_open;
  584. Control_Save(Data_need_write);
  585. }
  586. else if (*data_L == 0x00)
  587. {
  588. dis_page_param.face_plate_param.Floor_heating_switch = 0;
  589. dis_page_num.display_page = dis_floor_heating;
  590. dis_page_num.Dis_floor_heating = dis_floor_heating_close;
  591. Control_Save(Data_need_write);
  592. }
  593. else
  594. {
  595. error_code += 1;
  596. }
  597. }
  598. else
  599. {
  600. error_code += 1;
  601. }
  602. break;
  603. case 7:
  604. if(FloorHeating_Sheiled_Set())
  605. {
  606. return 0;
  607. }
  608. if(*data_H == 0)
  609. {
  610. if(dis_page_param.face_plate_param.Floor_heating_switch == 1)
  611. {
  612. if(*data_L >= Air_set_temp_Down_limit && *data_L <= Air_set_temp_up_limit)
  613. {
  614. dis_page_num.display_page = dis_floor_heating;
  615. dis_page_param.face_plate_param.Floor_heating_set_temp = *data_L;
  616. Control_Save(Data_need_write);
  617. }
  618. else
  619. {
  620. error_code += 1;
  621. }
  622. }
  623. else
  624. {
  625. error_code += 1;
  626. }
  627. }
  628. else
  629. {
  630. error_code += 1;
  631. }
  632. break;
  633. case 8:
  634. {
  635. if(FloorHeating_Sheiled_Set())
  636. {
  637. return 0;
  638. }
  639. if(dis_page_param.face_plate_param.Floor_heating_switch == 1)
  640. {
  641. if((dis_page_param.face_plate_param.Floor_heating_Relay &0xff00) == 0x0200)
  642. {
  643. if((dis_page_param.face_plate_param.Floor_heating_Relay &0x00ff) == 0x0001)
  644. {
  645. if(*data_H == 0x01)
  646. {
  647. if(*data_L == 0x01 || *data_L == 0x00)
  648. {
  649. dis_page_param.face_plate_param.Floor_relay_switch = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
  650. Control_Save(Data_need_write);
  651. }
  652. else
  653. {
  654. error_code += 1;
  655. }
  656. }
  657. else
  658. {
  659. error_code += 1;
  660. }
  661. }
  662. else if((dis_page_param.face_plate_param.Floor_heating_Relay &0x00ff) == 0x0002)
  663. {
  664. if(*data_H == 0x02)
  665. {
  666. if(*data_L == 0x01 || *data_L == 0x00)
  667. {
  668. dis_page_param.face_plate_param.Floor_relay_switch = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
  669. Control_Save(Data_need_write);
  670. }
  671. else
  672. {
  673. error_code += 1;
  674. }
  675. }
  676. else
  677. {
  678. error_code += 1;
  679. }
  680. }
  681. else
  682. {
  683. error_code += 1;
  684. }
  685. }
  686. else
  687. {
  688. error_code += 1;
  689. }
  690. }
  691. else
  692. {
  693. error_code += 1;
  694. }
  695. }
  696. break;
  697. case 9:
  698. if(AirFresh_Sheiled_Set())
  699. {
  700. return 0;
  701. }
  702. if(*data_H == 0)
  703. {
  704. if(*data_L == 0x01)
  705. {
  706. dis_page_param.face_plate_param.Fresh_air_switch = 1;
  707. dis_page_num.display_page = dis_fresh_air;
  708. dis_page_num.Dis_fresh_air = dis_fresh_air_open;
  709. Control_Save(Data_need_write);
  710. }
  711. else if (*data_L == 0x00)
  712. {
  713. dis_page_param.face_plate_param.Fresh_air_switch = 0;
  714. dis_page_num.display_page = dis_fresh_air;
  715. dis_page_num.Dis_fresh_air = dis_fresh_air_close;
  716. Control_Save(Data_need_write);
  717. }
  718. else
  719. {
  720. error_code += 1;
  721. }
  722. }
  723. else
  724. {
  725. error_code += 1;
  726. }
  727. break;
  728. case 11:
  729. if(AirFresh_Sheiled_Set())
  730. {
  731. return 0;
  732. }
  733. if(*data_H == 0)
  734. {
  735. if(dis_page_param.face_plate_param.Fresh_air_switch == 1)
  736. {
  737. if(*data_L == 0x01 || *data_L == 0x02 ||*data_L == 0x03)
  738. {
  739. dis_page_param.face_plate_param.Fresh_air_speed = *data_L;
  740. dis_page_num.display_page = dis_fresh_air;
  741. Control_Save(Data_need_write);
  742. }
  743. else
  744. {
  745. error_code += 1;
  746. }
  747. }
  748. else
  749. {
  750. error_code += 1;
  751. }
  752. }
  753. else
  754. {
  755. error_code += 1;
  756. }
  757. break;
  758. case 12:
  759. if(*data_H == 0)
  760. {
  761. if((*data_L & 0xf0) == 0xf0)
  762. {
  763. if((*data_L & 0x0f) >= 0x07 && (*data_L & 0x0f) <=0x0F)
  764. {
  765. *Data_need_write = 1;
  766. dis_page_param.face_plate_param.Compensates_temp = *data_L;
  767. }
  768. else
  769. {
  770. error_code += 1;
  771. }
  772. }
  773. else if((*data_L & 0xf0) == 0x00)
  774. {
  775. if((*data_L & 0x0f) >= 0x00 && (*data_L & 0x0f) <=0x09)
  776. {
  777. *Data_need_write = 1;
  778. dis_page_param.face_plate_param.Compensates_temp = *data_L ;
  779. }
  780. else
  781. {
  782. error_code += 1;
  783. }
  784. }
  785. else
  786. {
  787. error_code += 1;
  788. }
  789. }
  790. else
  791. {
  792. error_code += 1;
  793. }
  794. break;
  795. case 16:
  796. {
  797. if(AirCondition_Sheiled_Set())
  798. {
  799. return 0;
  800. }
  801. if(*data_H == 0)
  802. {
  803. if(*data_L == 0)
  804. {
  805. *Data_need_write = 1;
  806. dis_page_param.face_plate_param.Air_condition_Relay = 0x0000;
  807. dis_page_param.face_plate_param.Air_relay_switch = 0x0000;
  808. }
  809. else
  810. {
  811. error_code += 1;
  812. }
  813. }
  814. else if(*data_H == 0x01 || *data_H == 0x02)
  815. {
  816. if(*data_L == 0x01)
  817. {
  818. if(dis_page_param.face_plate_param.Fresh_air_Relay == 0x0000)
  819. {
  820. *Data_need_write = 1;
  821. dis_page_param.face_plate_param.Air_condition_Relay = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
  822. dis_page_param.face_plate_param.Air_relay_switch &= 0xff00;
  823. dis_page_param.face_plate_param.Air_relay_switch |= ( (*data_L) <<8);
  824. }
  825. else
  826. {
  827. error_code += 1;
  828. }
  829. }
  830. else if(*data_L == 0x02 || *data_L == 0x03)
  831. {
  832. if(dis_page_param.face_plate_param.Fresh_air_Relay == 0x0000 && dis_page_param.face_plate_param.Floor_heating_Relay == 0x0000)
  833. {
  834. *Data_need_write = 1;
  835. dis_page_param.face_plate_param.Air_condition_Relay = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
  836. dis_page_param.face_plate_param.Air_relay_switch &= 0xff00;
  837. dis_page_param.face_plate_param.Air_relay_switch |= ( (*data_L) <<8);
  838. }
  839. else
  840. {
  841. error_code += 1;
  842. }
  843. }
  844. else
  845. {
  846. error_code += 1;
  847. }
  848. }
  849. else
  850. {
  851. error_code += 1;
  852. }
  853. }
  854. break;
  855. case 17:
  856. if(FloorHeating_Sheiled_Set())
  857. {
  858. return 0;
  859. }
  860. if(*data_H == 0x00)
  861. {
  862. if(*data_L == 0)
  863. {
  864. *Data_need_write = 1;
  865. dis_page_param.face_plate_param.Floor_heating_Relay = 0x0000;
  866. dis_page_param.face_plate_param.Floor_relay_switch = 0x0000;
  867. }
  868. else
  869. {
  870. error_code += 1;
  871. }
  872. }
  873. else if(*data_H == 0x02 || *data_H == 0x01)
  874. {
  875. if(*data_L == 0x01)
  876. {
  877. if(dis_page_param.face_plate_param.Air_condition_Relay == 0x0000 || dis_page_param.face_plate_param.Air_condition_Relay == 0x0101 || \
  878. dis_page_param.face_plate_param.Air_condition_Relay == 0x0201)
  879. {
  880. *Data_need_write = 1;
  881. dis_page_param.face_plate_param.Floor_heating_Relay = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
  882. dis_page_param.face_plate_param.Floor_relay_switch &= 0xff00;
  883. dis_page_param.face_plate_param.Floor_relay_switch |= ( (*data_L) <<8);
  884. }
  885. else
  886. {
  887. error_code += 1;
  888. }
  889. }
  890. else if(*data_L == 0x02)
  891. {
  892. if(dis_page_param.face_plate_param.Air_condition_Relay == 0x0000)
  893. {
  894. *Data_need_write = 1;
  895. dis_page_param.face_plate_param.Floor_heating_Relay = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
  896. dis_page_param.face_plate_param.Floor_relay_switch &= 0xff00;
  897. dis_page_param.face_plate_param.Floor_relay_switch |= ( (*data_L) <<8);
  898. }
  899. else
  900. {
  901. error_code += 1;
  902. }
  903. }
  904. else
  905. {
  906. error_code += 1;
  907. }
  908. }
  909. else
  910. {
  911. error_code += 1;
  912. }
  913. break;
  914. case 18:
  915. if(AirFresh_Sheiled_Set())
  916. {
  917. return 0;
  918. }
  919. if(*data_H == 0x00)
  920. {
  921. if(*data_L == 0x00)
  922. {
  923. *Data_need_write = 1;
  924. dis_page_param.face_plate_param.Fresh_air_Relay = 0x0000;
  925. }
  926. else if(*data_L == 0x01)
  927. {
  928. if(dis_page_param.face_plate_param.Air_condition_Relay == 0x0000)
  929. {
  930. *Data_need_write = 1;
  931. dis_page_param.face_plate_param.Fresh_air_Relay = 0x0001;
  932. }
  933. else
  934. {
  935. error_code += 1;
  936. }
  937. }
  938. else
  939. {
  940. error_code += 1;
  941. }
  942. }
  943. else
  944. {
  945. error_code += 1;
  946. }
  947. break;
  948. case 19:
  949. if(*data_H == 0x00)
  950. {
  951. if((*data_L <= 0X05) || (*data_L == 0X0F))
  952. {
  953. *Data_need_write = 1;
  954. dis_page_param.face_plate_param.Ltemp_Protection_valve = *data_L;
  955. }
  956. else
  957. {
  958. error_code += 1;
  959. }
  960. }
  961. else
  962. {
  963. error_code += 1;
  964. }
  965. break;
  966. case 20:
  967. if(*data_H == 0x00)
  968. {
  969. if((*data_L == 0X00) || (*data_L == 0X01))
  970. {
  971. *Data_need_write = 1;
  972. dis_page_param.face_plate_param.Lock_screen = *data_L;
  973. }
  974. else
  975. {
  976. error_code += 1;
  977. }
  978. }
  979. else
  980. {
  981. error_code += 1;
  982. }
  983. break;
  984. case 21:
  985. if(*data_H == 0x00)
  986. {
  987. if((*data_L == 0X00) || (*data_L == 0X01))
  988. {
  989. *Data_need_write = 1;
  990. dis_page_param.face_plate_param.Full_Half_Lock = *data_L;
  991. }
  992. else
  993. {
  994. error_code += 1;
  995. }
  996. }
  997. else
  998. {
  999. error_code += 1;
  1000. }
  1001. break;
  1002. case 22:
  1003. if(*data_H == 0x00)
  1004. {
  1005. if((*data_L == 0X00) || (*data_L == 0X01))
  1006. {
  1007. *Data_need_write = 1;
  1008. dis_page_param.face_plate_param.Data_send = *data_L;
  1009. }
  1010. else
  1011. {
  1012. error_code += 1;
  1013. }
  1014. }
  1015. else
  1016. {
  1017. error_code += 1;
  1018. }
  1019. break;
  1020. case 23:
  1021. if(*data_H == 0x00 || *data_H == 0x01)
  1022. {
  1023. if( (*data_L >= 0x01) && (*data_L <= 0x06))
  1024. {
  1025. *Data_need_write = 1;
  1026. dis_page_param.face_plate_param.Led_Brightness = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
  1027. }
  1028. else
  1029. {
  1030. error_code += 1;
  1031. }
  1032. }
  1033. else
  1034. {
  1035. error_code += 1;
  1036. }
  1037. break;
  1038. case 25:
  1039. if(*data_H == 0x00)
  1040. {
  1041. if(*data_L <= 0x05 || *data_L == 0x0f)
  1042. {
  1043. *Data_need_write = 1;
  1044. dis_page_param.face_plate_param.Sleep_time_addr = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
  1045. }
  1046. else
  1047. {
  1048. error_code += 1;
  1049. }
  1050. }
  1051. else
  1052. {
  1053. error_code += 1;
  1054. }
  1055. break;
  1056. case 100:
  1057. {
  1058. u16 baudrate_now = ((uint16_t)*data_H << 8)| ((uint16_t)*data_L <<0);
  1059. const uint16_t baudrate[7] = {0x01e0,0x03c0,0x05a0,0x0780,0x0f00,0x15e0,0x0000};
  1060. uint8_t i = 0;
  1061. for( i = 0; i < 7; i++)
  1062. {
  1063. if(baudrate_now == baudrate[i])
  1064. {
  1065. break;
  1066. }
  1067. }
  1068. if(i == 7)
  1069. {
  1070. error_code += 1;
  1071. }
  1072. else
  1073. {
  1074. if(baudrate_now != dis_page_param.face_plate_param.Device_BaudRate)
  1075. {
  1076. *Data_need_write = 1;
  1077. dis_page_param.face_plate_param.Device_BaudRate = baudrate_now;
  1078. xTaskNotify((TaskHandle_t )LEDTask_Handler,
  1079. (uint32_t )Change_baud,
  1080. (eNotifyAction )eSetBits);
  1081. }
  1082. }
  1083. }
  1084. break;
  1085. case 101 :
  1086. if(*data_H == 0x00)
  1087. {
  1088. if(*data_L == 0x00)
  1089. {
  1090. *Data_need_write = 1;
  1091. dis_page_param.face_plate_param.TempHumi_UpdateMode = 0x0000;
  1092. }
  1093. else
  1094. {
  1095. error_code += 1;
  1096. }
  1097. }
  1098. else if(*data_H == 0x01 ||*data_H == 0x02 || *data_H == 0x03 )
  1099. {
  1100. if(*data_L >= 0x01 && *data_L <= 0x0C )
  1101. {
  1102. *Data_need_write = 1;
  1103. dis_page_param.face_plate_param.TempHumi_UpdateMode = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
  1104. }
  1105. else
  1106. {
  1107. error_code += 1;
  1108. }
  1109. }
  1110. else
  1111. {
  1112. error_code += 1;
  1113. }
  1114. break;
  1115. case 102:
  1116. if(*data_H == 0x00)
  1117. {
  1118. if(*data_L == 0x00 || *data_L == 0x01)
  1119. {
  1120. *Data_need_write = 1;
  1121. dis_page_param.face_plate_param.Open_device_mode = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
  1122. }
  1123. else
  1124. {
  1125. error_code += 1;
  1126. }
  1127. }
  1128. else
  1129. {
  1130. error_code += 1;
  1131. }
  1132. break;
  1133. case 109:
  1134. if(*data_H == 0x00)
  1135. {
  1136. if(*data_L == 0x00 || *data_L == 0x01)
  1137. {
  1138. *Data_need_write = 1;
  1139. dis_page_param.face_plate_param.Parm_SaveFlag = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
  1140. }
  1141. else
  1142. {
  1143. error_code += 1;
  1144. }
  1145. }
  1146. else
  1147. {
  1148. error_code += 1;
  1149. }
  1150. break;
  1151. case 110:
  1152. if(*data_H == 0x00)
  1153. {
  1154. if(*data_L <= 0x07 && (*data_L) != 0)
  1155. {
  1156. *Data_need_write = 1;
  1157. dis_page_param.face_plate_param.Panel_Shield = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
  1158. if(AirCondition_Sheiled == 0)
  1159. {
  1160. dis_page_param.face_plate_param.Air_condition_switch = 0;
  1161. dis_page_num.Dis_air_Conditioning = dis_air_Conditioning_close;
  1162. }
  1163. if(FloorHeating_Sheiled == 0)
  1164. {
  1165. dis_page_param.face_plate_param.Floor_heating_switch = 0;
  1166. dis_page_num.Dis_floor_heating = dis_floor_heating_close;
  1167. }
  1168. if(AirFresh_Sheiled == 0)
  1169. {
  1170. dis_page_param.face_plate_param.Fresh_air_switch = 0;
  1171. dis_page_num.Dis_fresh_air = dis_fresh_air_close;
  1172. }
  1173. display_page_t *page;
  1174. if(dis_page_num.display_page == dis_advanced_set || dis_page_num.display_page == dis_message_read)
  1175. {
  1176. page = &dis_page_param.Last_device_page_num;
  1177. }
  1178. else
  1179. {
  1180. page = &dis_page_num.display_page;
  1181. }
  1182. if((*page) == dis_air_Conditioning)
  1183. {
  1184. if(AirCondition_Sheiled == 0)
  1185. {
  1186. if(FloorHeating_Sheiled == 0)
  1187. {
  1188. (*page) = dis_fresh_air;
  1189. }
  1190. else
  1191. {
  1192. (*page) = dis_floor_heating;
  1193. }
  1194. }
  1195. }
  1196. if((*page) == dis_floor_heating)
  1197. {
  1198. if(FloorHeating_Sheiled == 0)
  1199. {
  1200. if(AirCondition_Sheiled == 0)
  1201. {
  1202. (*page) = dis_fresh_air;
  1203. }
  1204. else
  1205. {
  1206. (*page) = dis_air_Conditioning;
  1207. }
  1208. }
  1209. }
  1210. if((*page) == dis_fresh_air)
  1211. {
  1212. if(AirFresh_Sheiled == 0)
  1213. {
  1214. if(AirCondition_Sheiled == 0)
  1215. {
  1216. (*page) = dis_floor_heating;
  1217. }
  1218. else
  1219. {
  1220. (*page) = dis_air_Conditioning;
  1221. }
  1222. }
  1223. }
  1224. }
  1225. else
  1226. {
  1227. error_code += 1;
  1228. }
  1229. }
  1230. else
  1231. {
  1232. error_code += 1;
  1233. }
  1234. break;
  1235. case 111:
  1236. if(*data_H == 0x00)
  1237. {
  1238. if( (*data_L >= 10) && (*data_L <= 32) )
  1239. {
  1240. if(*data_L > dis_page_param.face_plate_param.LTemp_Limit)
  1241. {
  1242. dis_page_param.face_plate_param.HTemp_Limit = *data_L;
  1243. *Data_need_write = 1;
  1244. }
  1245. else
  1246. {
  1247. error_code += 1;
  1248. }
  1249. }
  1250. else
  1251. {
  1252. error_code += 1;
  1253. }
  1254. }
  1255. else
  1256. {
  1257. error_code += 1;
  1258. }
  1259. break;
  1260. case 112:
  1261. if(*data_H == 0x00)
  1262. {
  1263. if( (*data_L >= 10) && (*data_L <= 32) )
  1264. {
  1265. if(*data_L < dis_page_param.face_plate_param.HTemp_Limit)
  1266. {
  1267. dis_page_param.face_plate_param.LTemp_Limit = *data_L;
  1268. *Data_need_write = 1;
  1269. }
  1270. else
  1271. {
  1272. error_code += 1;
  1273. }
  1274. }
  1275. else
  1276. {
  1277. error_code += 1;
  1278. }
  1279. }
  1280. else
  1281. {
  1282. error_code += 1;
  1283. }
  1284. break;
  1285. case 0:
  1286. if(*data_H == 0x00)
  1287. {
  1288. if(*data_L == 0x01)
  1289. {
  1290. MemData_Reset();
  1291. dis_page_param.face_plate_param.Reset_Flag = 1;
  1292. Reset_CNT = 3;
  1293. }
  1294. else if(*data_L == 0x00)
  1295. {
  1296. dis_page_param.face_plate_param.Reset_Flag = 0;
  1297. Reset_CNT = 0;
  1298. }
  1299. else
  1300. {
  1301. error_code += 1;
  1302. }
  1303. }
  1304. else
  1305. {
  1306. error_code += 1;
  1307. }
  1308. break;
  1309. default:
  1310. break;
  1311. }
  1312. if(error_code != 0)
  1313. {
  1314. return 0;
  1315. }
  1316. else
  1317. {
  1318. return 1;
  1319. }
  1320. }
  1321. void eMBFuncWriteHoldingRegister(UART_msg *ptrmsg)
  1322. {
  1323. uint16_t addr = (uint16_t)(ptrmsg->data[2] <<8) + (uint16_t)(ptrmsg->data[3]);
  1324. u8 Data_need_write = 0;
  1325. if(eMBFuncWriteHoldingRegister_do(&ptrmsg->data[4],&ptrmsg->data[5],addr,&Data_need_write) == 0)
  1326. {
  1327. ptrmsg->data[1] |= 0x80;
  1328. }
  1329. u16 CRCA;
  1330. u8 CRCH;
  1331. u8 CRCL;
  1332. CRCA = GetCRC16(ptrmsg->data,ptrmsg->len-2);
  1333. CRCH = CRCA>>8;
  1334. CRCL = (u8)CRCA;
  1335. ptrmsg->data[ptrmsg->len-2] = CRCH;
  1336. ptrmsg->data[ptrmsg->len-1] = CRCL;
  1337. if(Data_need_write >= 1)
  1338. {
  1339. xTaskNotify((TaskHandle_t )LEDTask_Handler,
  1340. (uint32_t )Need_Write,
  1341. (eNotifyAction )eSetBits);
  1342. }
  1343. xTaskNotify((TaskHandle_t )LEDTask_Handler,
  1344. (uint32_t )Wake_up,
  1345. (eNotifyAction )eSetBits);
  1346. }
  1347. void eMBFuncWriteMultipleHoldingRegister(UART_msg *ptrmsg)
  1348. {
  1349. uint16_t addr = (uint16_t)(ptrmsg->data[2] <<8) + (uint16_t)(ptrmsg->data[3]);
  1350. if(addr > 0xff) return;
  1351. uint16_t num = (uint16_t)(ptrmsg->data[5]) + (uint16_t)(ptrmsg->data[4] << 8);
  1352. if(num > 255 || 2 *num != ptrmsg->data[6] ) return ;
  1353. u8 Data_need_write = 0;
  1354. for(uint8_t i = 0;i < num;i++)
  1355. {
  1356. addr = (uint16_t)(ptrmsg->data[2] <<8) + (uint16_t)(ptrmsg->data[3]) + i;
  1357. if(eMBFuncWriteHoldingRegister_do(&ptrmsg->data[7 + 2*i],&ptrmsg->data[8 + 2*i],addr,&Data_need_write) == 0)
  1358. {
  1359. ptrmsg->data[1] |= 0x80;
  1360. }
  1361. }
  1362. u16 CRCA;
  1363. u8 CRCH;
  1364. u8 CRCL;
  1365. CRCA = GetCRC16(ptrmsg->data,ptrmsg->len-2);
  1366. CRCH = CRCA>>8;
  1367. CRCL = (u8)CRCA;
  1368. ptrmsg->data[ptrmsg->len-2] = CRCH;
  1369. ptrmsg->data[ptrmsg->len-1] = CRCL;
  1370. if(Data_need_write >= 1)
  1371. {
  1372. xTaskNotify((TaskHandle_t)LEDTask_Handler,
  1373. (uint32_t)Need_Write,
  1374. (eNotifyAction)eSetBits);
  1375. }
  1376. xTaskNotify((TaskHandle_t)LEDTask_Handler,
  1377. (uint32_t)Wake_up,
  1378. (eNotifyAction)eSetBits);
  1379. }
  1380. void mb_rtu_task(void *pvParameters)
  1381. {
  1382. UART_msg ptrmsg;
  1383. while(1)
  1384. {
  1385. //vTaskDelay(20);
  1386. xQueueReceive(MB_RTU_Rx_Queue,&ptrmsg,portMAX_DELAY);
  1387. //for(int i=0;i<ptrmsg.len;i++)
  1388. //printf("///0x%x %d///",ptrmsg.data[i],ptrmsg.len);
  1389. if(!Slave_Addr_check(ptrmsg.data[0]))
  1390. continue;
  1391. if(!CRC_Check(ptrmsg.data,ptrmsg.len))
  1392. continue;
  1393. zigbee_cmd.Is_From_485=1;
  1394. switch(ptrmsg.data[1])
  1395. {
  1396. case 3:
  1397. eMBFuncReadHoldingRegister(&ptrmsg);
  1398. xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
  1399. break;
  1400. case 6:
  1401. eMBFuncWriteHoldingRegister(&ptrmsg);
  1402. PullOutOf_SleepPage();
  1403. xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
  1404. break;
  1405. case 0x10:
  1406. eMBFuncWriteMultipleHoldingRegister(&ptrmsg);
  1407. PullOutOf_SleepPage();
  1408. xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
  1409. break;
  1410. default:
  1411. break;
  1412. }
  1413. all_data_update();
  1414. //vTaskDelay(20);
  1415. }
  1416. }