MB_RTU_deal_task.c 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. #include "MB_RTU_deal_task.h"
  2. #include "MB_RTU_task.h"
  3. #include "All_define.h"
  4. #include "modbus.h"
  5. #include "protocol.h"
  6. static void Modbus_write_sendbuf_10(u8 addr, u8 size, u8 *buf, UART_msg *ptrmsg)
  7. {
  8. ptrmsg->data[0] = dis_page_param.face_plate_param.Device_Slave_addr;
  9. ptrmsg->data[1] = 0x10;
  10. ptrmsg->data[2] = 0;
  11. ptrmsg->data[3] = addr;
  12. ptrmsg->data[4] = 0;
  13. ptrmsg->data[5] = size;
  14. ptrmsg->data[6] = 2*size;
  15. ptrmsg->len = 7 + 2*size + 2;
  16. for(uint8_t i = 0; i < 2*size;i++)
  17. {
  18. ptrmsg->data[7+i] = *(buf + i);
  19. }
  20. u16 CRCA;
  21. u8 CRCH;
  22. u8 CRCL;
  23. CRCA = GetCRC16(ptrmsg->data,ptrmsg->len-2);
  24. CRCH = CRCA>>8;
  25. CRCL = (u8)CRCA;
  26. ptrmsg->data[ptrmsg->len-2] = CRCH;
  27. ptrmsg->data[ptrmsg->len-1] = CRCL;
  28. }
  29. static void Modbus_write_sendbuf_06(u8 addr, u8 *buf,UART_msg *ptrmsg)
  30. {
  31. ptrmsg->data[0] = dis_page_param.face_plate_param.Device_Slave_addr;
  32. ptrmsg->data[1] = 0x06;
  33. ptrmsg->data[2] = 0;
  34. ptrmsg->data[3] = addr;
  35. ptrmsg->data[4] = *buf;
  36. ptrmsg->data[5] = *(buf + 1);
  37. ptrmsg->len = 8;
  38. u16 CRCA;
  39. u8 CRCH;
  40. u8 CRCL;
  41. CRCA = GetCRC16(ptrmsg->data,ptrmsg->len-2);
  42. CRCH = CRCA>>8;
  43. CRCL = (u8)CRCA;
  44. // printf("111 0x%x 0x%x",CRCH,CRCL);
  45. ptrmsg->data[ptrmsg->len-2] = CRCH;
  46. ptrmsg->data[ptrmsg->len-1] = CRCL;
  47. }
  48. void Air_Open_data_Send(void)
  49. {
  50. if(dis_page_param.face_plate_param.Data_send == 0x01)
  51. return ;
  52. UART_msg ptrmsg;
  53. if(dis_page_param.face_plate_param.Open_device_mode == 0x00)
  54. {
  55. uint8_t buf[8] = {0};
  56. buf[0] = 0;
  57. buf[1] = dis_page_param.face_plate_param.Air_condition_switch;
  58. buf[2] = 0;
  59. buf[3] = dis_page_param.face_plate_param.Air_condition_mode;
  60. buf[4] = (uint8_t)((dis_page_param.face_plate_param.Air_wind_speed >>8)&0xff);
  61. buf[5] = (uint8_t)((dis_page_param.face_plate_param.Air_wind_speed >>0)&0xff);
  62. buf[6] = 0;
  63. buf[7] = (uint8_t)dis_page_param.face_plate_param.Air_set_temp;
  64. Modbus_write_sendbuf_10(0x01,0x04,buf,&ptrmsg);
  65. xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
  66. }
  67. else if(dis_page_param.face_plate_param.Open_device_mode == 0x01)
  68. {
  69. for(uint8_t i = 1; i < 5; i++)
  70. {
  71. uint8_t buf[2] = {0};
  72. switch(i)
  73. {
  74. case 1:
  75. buf[0] = 0;
  76. buf[1] = dis_page_param.face_plate_param.Air_condition_switch;
  77. break;
  78. case 2:
  79. buf[0] = 0;
  80. buf[1] = dis_page_param.face_plate_param.Air_condition_mode;
  81. break;
  82. case 3:
  83. buf[0] = (uint8_t)((dis_page_param.face_plate_param.Air_wind_speed >>8)&0xff);;
  84. buf[1] = (uint8_t)((dis_page_param.face_plate_param.Air_wind_speed >>0)&0xff);
  85. break;
  86. case 4:
  87. buf[0] = 0;
  88. buf[1] = (uint8_t)dis_page_param.face_plate_param.Air_set_temp;
  89. break;
  90. default:
  91. break;
  92. }
  93. Modbus_write_sendbuf_06(i,buf,&ptrmsg);
  94. xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
  95. }
  96. }
  97. }
  98. void Air_Close_data_Send(void)
  99. {
  100. if(dis_page_param.face_plate_param.Data_send == 0x01)
  101. return ;
  102. UART_msg ptrmsg;
  103. uint8_t buf[2] = {0};
  104. buf[0] = 0;
  105. buf[1] = dis_page_param.face_plate_param.Air_condition_switch;
  106. Modbus_write_sendbuf_06(0x01,buf,&ptrmsg);
  107. xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
  108. }
  109. void Air_Mode_data_Send(void)
  110. {
  111. if(dis_page_param.face_plate_param.Data_send == 0x01)
  112. return ;
  113. UART_msg ptrmsg;
  114. uint8_t buf[2] = {0};
  115. buf[0] = 0;
  116. buf[1] = (uint8_t)((dis_page_param.face_plate_param.Air_condition_mode >>0) &0x0f);
  117. Modbus_write_sendbuf_06(0x02,buf,&ptrmsg);
  118. xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
  119. }
  120. void Air_speed_data_Send(void)
  121. {
  122. if(dis_page_param.face_plate_param.Data_send == 0x01)
  123. return ;
  124. uint8_t speed = 0;
  125. uint8_t low = 0;
  126. uint8_t hight = 0;
  127. if(struct_realy.speed_type.fs1 == 1)
  128. {
  129. speed = 1;
  130. }
  131. else if(struct_realy.speed_type.fs2 == 1)
  132. {
  133. speed = 1;
  134. }
  135. else if(struct_realy.speed_type.fs3 == 1)
  136. {
  137. speed = 1;
  138. }
  139. else
  140. {
  141. speed = 0;
  142. }
  143. hight = (u8)(dis_page_param.face_plate_param.Air_wind_speed >>8);
  144. low = (u8) ( ( (dis_page_param.face_plate_param.Air_wind_speed >>0) &0x0f) + \
  145. ((speed << 4) &0xf0 ) );
  146. if( ( dis_page_param.face_plate_param.Air_wind_speed &0x0100 )!= 0)
  147. {
  148. if(speed == 0)
  149. {
  150. low = 0x00;
  151. }
  152. else if (speed == 1)
  153. {
  154. low = 0x10;
  155. }
  156. }
  157. UART_msg ptrmsg;
  158. uint8_t buf[2] = {0};
  159. buf[0] = hight;
  160. buf[1] = low;
  161. Modbus_write_sendbuf_06(0x03,buf,&ptrmsg);
  162. xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
  163. }
  164. void Air_speed_data_Sendtemp(uint8_t hight,uint8_t low)
  165. {
  166. if(dis_page_param.face_plate_param.Data_send == 0x01)
  167. return ;
  168. UART_msg ptrmsg;
  169. uint8_t buf[2] = {0};
  170. buf[0] = hight;
  171. buf[1] = low;
  172. Modbus_write_sendbuf_06(0x03,buf,&ptrmsg);
  173. xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
  174. }
  175. void Air_set_temp_data_Send(void)
  176. {
  177. if(dis_page_param.face_plate_param.Data_send == 0x01)
  178. return ;
  179. UART_msg ptrmsg;
  180. uint8_t buf[2] = {0};
  181. buf[0] = 0;
  182. buf[1] = dis_page_param.face_plate_param.Air_set_temp;
  183. Modbus_write_sendbuf_06(0x04,buf,&ptrmsg);
  184. xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
  185. }
  186. void Floor_heating_Open_data_Send(void)
  187. {
  188. if(dis_page_param.face_plate_param.Data_send == 0x01)
  189. return ;
  190. UART_msg ptrmsg;
  191. uint8_t buf[2] = {0};
  192. buf[0] = 0;
  193. buf[1] = dis_page_param.face_plate_param.Floor_heating_switch;
  194. Modbus_write_sendbuf_06(0x06,buf,&ptrmsg);
  195. xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
  196. }
  197. void Floor_heating_set_temp_data_Send(void)
  198. {
  199. if(dis_page_param.face_plate_param.Data_send == 0x01)
  200. return ;
  201. UART_msg ptrmsg;
  202. uint8_t buf[2] = {0};
  203. buf[0] = 0;
  204. buf[1] = dis_page_param.face_plate_param.Floor_heating_set_temp;
  205. Modbus_write_sendbuf_06(0x07,buf,&ptrmsg);
  206. xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
  207. }
  208. void Fresh_air_Open_data_Send(void)
  209. {
  210. if(dis_page_param.face_plate_param.Data_send == 0x01)
  211. return ;
  212. UART_msg ptrmsg;
  213. uint8_t buf[2] = {0};
  214. buf[0] = 0;
  215. buf[1] = dis_page_param.face_plate_param.Fresh_air_switch;
  216. Modbus_write_sendbuf_06(0x09,buf,&ptrmsg);
  217. xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
  218. }
  219. void Fresh_air_speed_data_Send(void)
  220. {
  221. //printf("111\r\n");
  222. if(dis_page_param.face_plate_param.Data_send == 0x01)
  223. return ;
  224. UART_msg ptrmsg;
  225. uint8_t buf[2] = {0};
  226. buf[0] = 0;
  227. buf[1] = dis_page_param.face_plate_param.Fresh_air_speed;
  228. Modbus_write_sendbuf_06(0x0B,buf,&ptrmsg);
  229. xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
  230. }
  231. void Fresh_air_speed_data_Sendtemp(uint8_t hight,uint8_t low)
  232. {
  233. //printf("2222\r\n");
  234. if(dis_page_param.face_plate_param.Data_send == 0x01)
  235. return ;
  236. UART_msg ptrmsg;
  237. uint8_t buf[2] = {0};
  238. buf[0] = hight;
  239. buf[1] = low;
  240. Modbus_write_sendbuf_06(0x0B,buf,&ptrmsg);
  241. xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
  242. }
  243. void Real_Temp_data_Send(void)
  244. {
  245. if(dis_page_param.face_plate_param.Data_send == 0x01)
  246. return ;
  247. UART_msg ptrmsg;
  248. uint8_t buf[2] = {0};
  249. buf[0] = (u8)(dis_page_param.face_plate_param.Real_time_Temp >>8);
  250. buf[1] = (u8)(dis_page_param.face_plate_param.Real_time_Temp >>0);
  251. Modbus_write_sendbuf_06(0x0D,buf,&ptrmsg);
  252. xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
  253. }
  254. void Real_humi_data_Send(void)
  255. {
  256. if(dis_page_param.face_plate_param.Data_send == 0x01)
  257. return ;
  258. UART_msg ptrmsg;
  259. uint8_t buf[2] = {0};
  260. buf[0] = 0;
  261. buf[1] = dis_page_param.face_plate_param.Real_time_Humi;
  262. Modbus_write_sendbuf_06(0x0E,buf,&ptrmsg);
  263. xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
  264. }
  265. void mb_rtu_deal_task(void *pvParameters)
  266. {
  267. UART_msg ptrmsg;
  268. while(1)
  269. {
  270. if(MB_RTU_Tx_Queue != NULL)
  271. {
  272. if(xQueueReceive(MB_RTU_Tx_Queue,&ptrmsg,portMAX_DELAY))
  273. {
  274. // printf("wqw\r\n");
  275. while(eRcvState != STATE_RX_IDLE)
  276. {
  277. vTaskDelay(1);
  278. }
  279. for(u8 i = 0;i <ptrmsg.len;i++)
  280. {
  281. ucRTU_TBuf[i] = ptrmsg.data[i];
  282. }
  283. usRcv_TBufferPos = ptrmsg.len;
  284. eSndState = STATE_TX_XMIT;
  285. eMBRTUStart_Tx();
  286. //prvvUARTTxReadyISR();
  287. while(eSndState != STATE_TX_IDLE)
  288. {
  289. vTaskDelay(1);
  290. }
  291. eMBRTUStart_Rx();
  292. all_data_update();
  293. vTaskDelay(90);
  294. }
  295. }
  296. vTaskDelay(1);
  297. }
  298. }