air.c 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616
  1. // /**
  2. // ************************************************************************************************
  3. // * @file air.c
  4. // * @author 国轩储能
  5. // * @version V1.0
  6. // * @date 2018-11-20
  7. // * @brief 空调通讯
  8. // * @attention
  9. // ************************************************************************************************
  10. // **/
  11. // #include "air.h"
  12. // #include "ModbusRtu.h"
  13. // #include "ff.h"
  14. // #include "i104_addr.h"
  15. // #include "os_my_var.h"
  16. // #include "uart1.h"
  17. // #include <string.h>
  18. // union Data_Air_Union_TypeDef Data_Air[2];
  19. // union Par_Set_Air_Union_TypeDef Par_Set_Air1; // 空调1
  20. // union Par_Set_Air_Union_TypeDef Par_Set_Air2; // 空调2
  21. // // 制冷设定温度 制冷设定灵敏度 高温告警点 低温告警点 加热设定温度 加热设定灵敏度 远程开空调
  22. // const u16 ADDR_CONV_HMI2AIR[ADDR_CONV_COUNT][2] = {{0x1830, 0x8202}, {0x1832, 0x8204}, {0x1834, 0x0E}, {0x1836, 0x10}, {0x1838, 0x820B}, {0x183A, 0x1E}, {0x1840, 0x0202}}; // 空调参数设置,触摸屏、空调485地址转换
  23. // // 制冷设定温度 制冷设定灵敏度 高温告警点 低温告警点 加热设定温度 加热设定灵敏度 远程开空调
  24. // const u16 ADDR_CONV_104IEC2AIR1[ADDR_CONV_COUNT][2] = {{REMOTE_REGULATE_ADDR_COOL_TEMP_AIR1, 0x8202}, {REMOTE_REGULATE_ADDR_COOL_SEN_AIR1, 0x8204}, {0, 0x0E}, {0, 0x10}, {REMOTE_REGULATE_ADDR_HOT_TEMP_AIR1, 0x820B}, {REMOTE_REGULATE_ADDR_HOT_SEN_AIR1, 0x1E}, {24618, 0x0202}}; // 空调参数设置,104地址转空调485地址
  25. // // 制冷设定温度 制冷设定灵敏度 高温告警点 低温告警点 加热设定温度 加热设定灵敏度 远程开空调
  26. // const u16 ADDR_CONV_104IEC2AIR2[ADDR_CONV_COUNT][2] = {{25093, 0x8202}, {25094, 0x8204}, {0, 0x0E}, {0, 0x10}, {25095, 0x820B}, {25096, 0x1E}, {24620, 0x0202}}; // 空调参数设置,104地址转空调485地址
  27. // //// 写单寄存器命令格式: 控制器地址 命令类型 寄存器起始地址H 寄存器起始地址L 数据1H 数据1L CRC-L CRC-H
  28. // // u8 frame_air_set[16] = {0x01, 0x06, 0x00, 0x01, 0x00, 0x00};
  29. // const Modbus_Frame_TypeDef Air_Frame[AIR_FRAME_COUNT] = {{0x1000, 42, 3}, {0xA004, 1, 3}, {0xA013, 1, 3}, {0x0300, 17, 3}, {0x8202, 4, 3}, {0x000e, 4, 3}, {0x820b, 1, 3}, {0x1E, 1, 3}};
  30. // void Air1_HandleFrame_1st(const u8 *p, u16 size);
  31. // void Air1_HandleFrame_2nd(const u8 *p, u16 size);
  32. // void Air1_HandleFrame_3rd(const u8 *p, u16 size);
  33. // void Air1_HandleFrame_4th(const u8 *p, u16 size);
  34. // void Air1_HandleFrame_5th(const u8 *p, u16 size);
  35. // void Air1_HandleFrame_6th(const u8 *p, u16 size);
  36. // void air1_handle_frame_7th(const u8 *p, u16 size);
  37. // void Air1_HandleFrame_8th(const u8 *p, u16 size);
  38. // void (*Func_AirHandleFrame[AIR_FRAME_COUNT])(const u8 *p, u16 size) = {Air1_HandleFrame_1st, Air1_HandleFrame_2nd, Air1_HandleFrame_3rd, Air1_HandleFrame_4th,
  39. // Air1_HandleFrame_5th, Air1_HandleFrame_6th, Air1_HandleFrame_7th, Air1_HandleFrame_8th}; //
  40. // extern os_mbx_declare(uart1_mailbox, 10); // 声明消息邮箱 读取空调数据
  41. // /****************************************************
  42. // * 函 数 名:ReadAirData
  43. // * 函数功能:读取空调数据
  44. // * 入口参数:register_addr 寄存器地址 count 数量 p 缓冲区指针
  45. // * 说 明:无
  46. // *****************************************************/
  47. // void CopyAirData(u16 register_addr, u16 count, u16 *p)
  48. // {
  49. // u16 offset, i;
  50. // offset = register_addr - MODBUS_ADDR_AIR_READ;
  51. // for (i = 0; i < count; i++)
  52. // *p++ = Data_Air[0].data_air_buf_u16[offset + i];
  53. // }
  54. // /****************************************************
  55. // * 函 数 名:CopyAirDataSet
  56. // * 函数功能:读取空调设置参数
  57. // * 入口参数:register_addr 寄存器地址 count 浮点数据数量 p 缓冲区指针
  58. // * 说 明:无
  59. // *****************************************************/
  60. // void CopyAirDataSet(u16 register_addr, u16 count, float *pFloat)
  61. // {
  62. // u16 offset, i;
  63. // u8 *pU8;
  64. // offset = register_addr - MODBUS_ADDR_AIR_WRITE;
  65. // pU8 = (u8 *)pFloat;
  66. // for (i = 0; i < count * 4; i++)
  67. // *pU8++ = Par_Set_Air1.par_buff_u8[4 * offset + i]; // 直接用par_buff_float赋值,硬件故障
  68. // }
  69. // /****************************************************
  70. // * 函 数 名:Air1_HandleFrame_1st
  71. // * 函数功能:处理空调第一帧
  72. // * 入口参数: p 数据指针, size 数据个数
  73. // * 说 明:无
  74. // ****************************************************/
  75. // void Air1_HandleFrame_1st(const u8 *p, u16 size)
  76. // {
  77. // u8 index = 0, slave_id = 0;
  78. // u8 temp1, temp2;
  79. // u16 crc;
  80. // // OS_ERR err;
  81. // // 空调返回命令格式: 控制器地址 命令类型 字节数n 数据1H 数据1L 数据2H 数据2L CRC-L CRC-H
  82. // crc = Count_CRC(p, size - 2);
  83. // if (crc != ((p[size - 1] << 8) + (p[size - 2])))
  84. // return;
  85. // if (*p == 1)
  86. // {
  87. // slave_id = 0;
  88. // }
  89. // else
  90. // {
  91. // slave_id = 1;
  92. // }
  93. // p = p + 3;
  94. // for (index = 0; index < 14; index++) // 设备工作状态、室内风机状态、室外风机状态、压缩机状态 柜内回风温度 水泵状态 柜外温度 冷凝器温度...交流运行电流
  95. // {
  96. // temp1 = *p++;
  97. // temp2 = *p++;
  98. // Data_Air[slave_id].data_air_buf_u16[index] = (temp1 << 8) + temp2;
  99. // p = p + 2;
  100. // }
  101. // // 设备运行时间、压缩机运行时间、内风机运行时间、压缩机运行次数
  102. // for (; index < 22; index++)
  103. // {
  104. // temp1 = *p++;
  105. // temp2 = *p++;
  106. // Data_Air[slave_id].data_air_buf_u16[index++] = (temp1 << 8) + temp2;
  107. // temp1 = *p++;
  108. // temp2 = *p++;
  109. // Data_Air[slave_id].data_air_buf_u16[index] = (temp1 << 8) + temp2;
  110. // p += 4;
  111. // }
  112. // }
  113. // /****************************************************
  114. // * 函 数 名:Air1_HandleFrame_2nd
  115. // * 函数功能:处理空调第一帧
  116. // * 入口参数: p 数据指针, size 数据个数
  117. // * 说 明:无
  118. // ****************************************************/
  119. // void Air1_HandleFrame_2nd(const u8 *p, u16 size)
  120. // {
  121. // u8 temp1, temp2, slave_id = 0;
  122. // u16 crc;
  123. // // 空调返回命令格式: 控制器地址 命令类型 字节数n 数据1H 数据1L 数据2H 数据2L CRC-L CRC-H
  124. // crc = Count_CRC(p, size - 2);
  125. // if (crc != ((p[size - 1] << 8) + (p[size - 2])))
  126. // return;
  127. // if (*p == 1)
  128. // {
  129. // slave_id = 0;
  130. // }
  131. // else
  132. // {
  133. // slave_id = 1;
  134. // }
  135. // p = p + 3;
  136. // temp1 = (*p++);
  137. // temp2 = (*p++);
  138. // Data_Air[slave_id].data_air_buf_u16[22] = (temp1 << 8) + temp2;
  139. // }
  140. // /****************************************************
  141. // * 函 数 名:Air1_HandleFrame_3rd
  142. // * 函数功能:处理空调第一帧
  143. // * 入口参数: p 数据指针, size 数据个数
  144. // * 说 明:无
  145. // ****************************************************/
  146. // void Air1_HandleFrame_3rd(const u8 *p, u16 size)
  147. // {
  148. // u8 temp1, temp2, slave_id = 0;
  149. // u16 crc;
  150. // // 空调返回命令格式: 控制器地址 命令类型 字节数n 数据1H 数据1L 数据2H 数据2L CRC-L CRC-H
  151. // crc = Count_CRC(p, size - 2);
  152. // if (crc != ((p[size - 1] << 8) + (p[size - 2])))
  153. // return;
  154. // if (*p == 1)
  155. // {
  156. // slave_id = 0;
  157. // }
  158. // else
  159. // {
  160. // slave_id = 1;
  161. // }
  162. // p = p + 3;
  163. // temp1 = *p++;
  164. // temp2 = *p++;
  165. // Data_Air[slave_id].data_air_buf_u16[23] = (temp1 << 8) + temp2;
  166. // }
  167. // /****************************************************
  168. // * 函 数 名:Air1_HandleFrame_4th
  169. // * 函数功能:处理空调第一帧
  170. // * 入口参数: p 数据指针, size 数据个数
  171. // * 说 明:无
  172. // ****************************************************/
  173. // void Air1_HandleFrame_4th(const u8 *p, u16 size)
  174. // {
  175. // u8 i, slave_id = 0, temp1 = 0, temp2 = 0;
  176. // u16 crc;
  177. // // 空调返回命令格式: 控制器地址 命令类型 字节数n 数据1H 数据1L 数据2H 数据2L CRC-L CRC-H
  178. // crc = Count_CRC(p, size - 2);
  179. // if (crc != ((p[size - 1] << 8) + (p[size - 2])))
  180. // return;
  181. // if (*p == 1)
  182. // {
  183. // slave_id = 0;
  184. // }
  185. // else
  186. // {
  187. // slave_id = 1;
  188. // }
  189. // p = p + 3;
  190. // for (i = 0; i < 17; i++)
  191. // {
  192. // temp1 = (*p++);
  193. // temp2 = (*p++);
  194. // Data_Air[slave_id].data_air_buf_u16[24 + i] = (temp1 << 8) + temp2;
  195. // if (Data_Air[slave_id].data_air_buf_u16[24 + i] == 0x01)
  196. // {
  197. // Data_Air[slave_id].Data_Air_Union.serious_alarm = TRUE;
  198. // }
  199. // }
  200. // if (Data_Air[slave_id].Data_Air_Union.serious_alarm == TRUE)
  201. // {
  202. // bams_set_air_status(TRUE);
  203. // }
  204. // }
  205. // /****************************************************
  206. // * 函 数 名:Air1_HandleFrame_5th
  207. // * 函数功能:处理空调第一帧
  208. // * 入口参数: p 数据指针, size 数据个数
  209. // * 说 明:无
  210. // ****************************************************/
  211. // void Air1_HandleFrame_5th(const u8 *p, u16 size)
  212. // {
  213. // u8 i;
  214. // u8 temp1, temp2;
  215. // u16 crc;
  216. // union Par_Set_Air_Union_TypeDef *param = NULL;
  217. // // 空调返回命令格式: 控制器地址 命令类型 字节数n 数据1H 数据1L 数据2H 数据2L CRC-L CRC-H
  218. // crc = Count_CRC(p, size - 2);
  219. // if (crc != ((p[size - 1] << 8) + (p[size - 2])))
  220. // return;
  221. // if (*p == 1)
  222. // {
  223. // param = &Par_Set_Air1;
  224. // }
  225. // else
  226. // {
  227. // param = &Par_Set_Air2;
  228. // }
  229. // p = p + 3;
  230. // for (i = 0; i < 2; i++)
  231. // {
  232. // temp1 = *p++;
  233. // temp2 = *p++;
  234. // param->par_buff_float[i] = (float)((temp1 << 8) + temp2) / 10.0f;
  235. // p = p + 2;
  236. // }
  237. // }
  238. // /****************************************************
  239. // * 函 数 名:Air1_HandleFrame_6th
  240. // * 函数功能:处理空调第一帧
  241. // * 入口参数: p 数据指针, size 数据个数
  242. // * 说 明:无
  243. // ****************************************************/
  244. // void Air1_HandleFrame_6th(const u8 *p, u16 size)
  245. // {
  246. // u8 i;
  247. // u8 temp1, temp2;
  248. // u16 crc;
  249. // union Par_Set_Air_Union_TypeDef *param = NULL;
  250. // // 空调返回命令格式: 控制器地址 命令类型 字节数n 数据1H 数据1L 数据2H 数据2L CRC-L CRC-H
  251. // crc = Count_CRC(p, size - 2);
  252. // if (crc != ((p[size - 1] << 8) + (p[size - 2])))
  253. // return;
  254. // if (*p == 1)
  255. // {
  256. // param = &Par_Set_Air1;
  257. // }
  258. // else
  259. // {
  260. // param = &Par_Set_Air2;
  261. // }
  262. // p = p + 3;
  263. // for (i = 0; i < 2; i++)
  264. // {
  265. // temp1 = (*p++);
  266. // temp2 = (*p++);
  267. // param->par_buff_float[i + 2] = (float)((temp1 << 8) + temp2) / 10.0f;
  268. // p = p + 2;
  269. // }
  270. // }
  271. // /****************************************************
  272. // * 函 数 名:air1_handle_frame_7th
  273. // * 函数功能:处理空调第一帧
  274. // * 入口参数: p 数据指针, size 数据个数
  275. // * 说 明:无
  276. // ****************************************************/
  277. // void air1_handle_frame_7th(const u8 *p, u16 size)
  278. // {
  279. // u8 temp1, temp2;
  280. // u16 crc;
  281. // union Par_Set_Air_Union_TypeDef *param = NULL;
  282. // // 空调返回命令格式: 控制器地址 命令类型 字节数n 数据1H 数据1L 数据2H 数据2L CRC-L CRC-H
  283. // crc = Count_CRC(p, size - 2);
  284. // if (crc != ((p[size - 1] << 8) + (p[size - 2])))
  285. // return;
  286. // if (*p == 1)
  287. // {
  288. // param = &Par_Set_Air1;
  289. // }
  290. // else
  291. // {
  292. // param = &Par_Set_Air2;
  293. // }
  294. // p = p + 3;
  295. // temp1 = (*p++);
  296. // temp2 = (*p++);
  297. // param->par_buff_float[4] = ((temp1 << 8) + temp2) / 10.0f;
  298. // }
  299. // /****************************************************
  300. // * 函 数 名:Air1_HandleFrame_7th
  301. // * 函数功能:处理空调第一帧
  302. // * 入口参数: p 数据指针, size 数据个数
  303. // * 说 明:无
  304. // ****************************************************/
  305. // void Air1_HandleFrame_8th(const u8 *p, u16 size)
  306. // {
  307. // u8 temp1, temp2;
  308. // u16 crc;
  309. // union Par_Set_Air_Union_TypeDef *param = NULL;
  310. // // 空调返回命令格式: 控制器地址 命令类型 字节数n 数据1H 数据1L 数据2H 数据2L CRC-L CRC-H
  311. // crc = Count_CRC(p, size - 2);
  312. // if (crc != ((p[size - 1] << 8) + (p[size - 2])))
  313. // return;
  314. // if (*p == 1)
  315. // {
  316. // param = &Par_Set_Air1;
  317. // }
  318. // else
  319. // {
  320. // param = &Par_Set_Air2;
  321. // }
  322. // p = p + 3;
  323. // temp1 = (*p++);
  324. // temp2 = (*p++);
  325. // param->par_buff_float[5] = ((temp1 << 8) + temp2) / 10.0f;
  326. // }
  327. // /****************************************************
  328. // * 函 数 名:SendFrame_SetAirParSingle
  329. // * 函数功能:设置空调运行参数
  330. // * 入口参数:p 数据指针, register_addr 寄存器地址, count 数量
  331. // * 说 明:无
  332. // ****************************************************/
  333. // void SendFrame_SetAirParSingle(float dat_float, u16 register_addr)
  334. // {
  335. // OS_RESULT result;
  336. // UartFrame_TypeDef *pMsg;
  337. // // 写单寄存器命令格式: 控制器地址 命令类型 寄存器起始地址H 寄存器起始地址L 数据1H 数据1L CRC-L CRC-H
  338. // // u8 frame_air_set[16] = {0x01, 0x06, 0x00, 0x01, 0x00, 0x00};
  339. // u16 data = (u16)(dat_float * 10); // 下发给空调参数需放大10倍
  340. // // 写多寄存器命令格式: 控制器地址 命令类型 寄存器起始地址H 寄存器起始地址L 寄存器个数H 寄存器个数L 字节数n 数据1H 数据1L 数据2H 数据2L CRC-L CRC-H
  341. // // 写单寄存器命令格式: 控制器地址 命令类型 寄存器起始地址H 寄存器起始地址L 数据1H 数据1L CRC-L CRC-H
  342. // os_mut_wait(&mutex_uart1, 0xffff); // 永久等待互斥资源
  343. // ModbusRtu_SendFrame06(register_addr, data, Uart1DMA_SendData);
  344. // result = os_mbx_wait(&uart1_mailbox, (void *)&pMsg, TIME_200MS);
  345. // if (result == OS_R_OK || result == OS_R_MBX) // 成功获得消息
  346. // {
  347. // pMsg = pMsg; // 添加该语句,防止if被优化掉
  348. // }
  349. // os_mut_release(&mutex_uart1); // 释放互斥资源
  350. // }
  351. // /****************************************************
  352. // * 函 数 名:ReadAirData
  353. // * 函数功能:读取空调数据数据帧
  354. // * 入口参数:register_addr 寄存器地址 count 数量 frame_style 报文类型
  355. // * 说 明:无
  356. // *****************************************************/
  357. // void ReadAirData(void)
  358. // {
  359. // OS_RESULT result;
  360. // UartFrame_TypeDef *pMsg;
  361. // static u8 air1_index = 0; // 1#空调帧序号
  362. // void (*ModbusSendFrame)(u16 register_addr, u16 count, void (*Func_Send)(const u8 *data, u16 count));
  363. // const Modbus_Frame_TypeDef *air_frame;
  364. // air_frame = &Air_Frame[air1_index];
  365. // ModbusSendFrame = Func_ModbusRtu_SendFrame[air_frame->frame_style]; // 指向具体发送帧函数
  366. // ModbusSendFrame(air_frame->register_addr, air_frame->register_count, Uart1DMA_SendData); // 发送报文
  367. // /* 等待uart1收到数据,不阻塞任务 */
  368. // result = os_mbx_wait(&uart1_mailbox, (void *)&pMsg, TIME_200MS);
  369. // if (result == OS_R_OK || result == OS_R_MBX) // 成功获得消息
  370. // {
  371. // if (pMsg->len > 2)
  372. // {
  373. // Func_AirHandleFrame[air1_index](pMsg->buf, pMsg->len); // 解析报文
  374. // }
  375. // }
  376. // air1_index++;
  377. // if (air1_index >= AIR_FRAME_COUNT)
  378. // air1_index = 0;
  379. // }
  380. // /****************************************************
  381. // * 函 数 名:Air_Find485Addr
  382. // * 函数功能:空调参数设置,触摸屏485地址转换到空调485地址
  383. // * 入口参数:hmi_addr 触摸屏485地址
  384. // * 返回参数:空调485地址
  385. // * 说 明:0 没找到对应空调485地址
  386. // *****************************************************/
  387. // u16 AddrConv_Hmi2Air(u16 hmi_addr)
  388. // {
  389. // u8 i;
  390. // for (i = 0; i < ADDR_CONV_COUNT; i++)
  391. // {
  392. // if (ADDR_CONV_HMI2AIR[i][0] == hmi_addr)
  393. // {
  394. // return ADDR_CONV_HMI2AIR[i][1];
  395. // }
  396. // }
  397. // return FALSE;
  398. // }
  399. // /****************************************************
  400. // * 函 数 名:AddrConv_104IEC2Air1
  401. // * 函数功能:空调1 104地址转换到485地址
  402. // * 入口参数:i104_addr 104地址
  403. // * 返回参数:空调485地址
  404. // * 说 明:0 没找到对应空调485地址
  405. // *****************************************************/
  406. // u16 AddrConv_104IEC2Air1(u16 i104_addr)
  407. // {
  408. // u8 i;
  409. // for (i = 0; i < ADDR_CONV_COUNT; i++)
  410. // {
  411. // if (ADDR_CONV_104IEC2AIR1[i][0] == i104_addr)
  412. // {
  413. // return ADDR_CONV_104IEC2AIR1[i][1];
  414. // }
  415. // }
  416. // return FALSE;
  417. // }
  418. // /****************************************************
  419. // * 函 数 名:AddrConv_104IEC2Air2
  420. // * 函数功能:空调2 104地址转换到485地址
  421. // * 入口参数:i104_addr 104地址
  422. // * 返回参数:空调485地址
  423. // * 说 明:0 没找到对应空调485地址
  424. // *****************************************************/
  425. // u16 AddrConv_104IEC2Air2(u16 i104_addr)
  426. // {
  427. // u8 i;
  428. // for (i = 0; i < ADDR_CONV_COUNT; i++)
  429. // {
  430. // if (ADDR_CONV_104IEC2AIR2[i][0] == i104_addr)
  431. // {
  432. // return ADDR_CONV_104IEC2AIR2[i][1];
  433. // }
  434. // }
  435. // return FALSE;
  436. // }
  437. // /****************************************************
  438. // * 函 数 名:HMI_10Frame_ParSetAir
  439. // * 函数功能:HMI 10帧空调参数设置
  440. // * 入口参数:register_addr 寄存器地址 p 缓冲区指针
  441. // * 说 明:一次只能设置一个参数
  442. // *****************************************************/
  443. // void HMI_10Frame_ParSetAir(u16 register_addr, const float *pFloat)
  444. // {
  445. // u16 offset, addr_air;
  446. // offset = (register_addr - MODBUS_ADDR_AIR_WRITE) / 2; // 0x1830 0x1832 0x1834 0x1836
  447. // memcpy((u8 *)&Par_Set_Air1.par_buff_float[offset], (u8 *)pFloat, 4);
  448. // addr_air = AddrConv_Hmi2Air(register_addr);
  449. // if (addr_air != DEF_FALSE)
  450. // SendFrame_SetAirParSingle(Par_Set_Air1.par_buff_float[offset], addr_air);
  451. // }
  452. // /****************************************************
  453. // * 函 数 名:I104_ParSetAir1
  454. // * 函数功能:104设置空调1参数
  455. // * 入口参数:i104_addr: 104地址 data :参数
  456. // * 说 明:无
  457. // *****************************************************/
  458. // void I104_ParSetAir1(u16 i104_addr, float data)
  459. // {
  460. // u16 addr_air;
  461. // addr_air = AddrConv_104IEC2Air1(i104_addr);
  462. // if (addr_air != DEF_FALSE)
  463. // SendFrame_SetAirParSingle(data, addr_air);
  464. // }
  465. // /****************************************************
  466. // * 函 数 名:SendFrame_SwitchAir
  467. // * 函数功能:发送数据帧,开关空调
  468. // * 入口参数:addr_device:空调设备地址 addr_air: 寄存器地址 data: 开关指令
  469. // * 说 明:无
  470. // *****************************************************/
  471. // void SendFrame_SwitchAir(u8 addr_device, u16 addr_air, u16 data)
  472. // {
  473. // OS_RESULT result;
  474. // UartFrame_TypeDef *pMsg;
  475. // //// 写单寄存器命令格式: 控制器地址 命令类型 寄存器起始地址H 寄存器起始地址L 数据1H 数据1L CRC-L CRC-H
  476. // os_mut_wait(&mutex_uart1, 0xffff); // 永久等待互斥资源
  477. // ModbusRtu_SendFrame06(addr_air, data, Uart1DMA_SendData);
  478. // result = os_mbx_wait(&uart1_mailbox, (void *)&pMsg, TIME_200MS);
  479. // if (result == OS_R_OK || result == OS_R_MBX) // 成功获得消息
  480. // {
  481. // pMsg = pMsg; // 添加该语句,防止if被优化掉
  482. // }
  483. // os_mut_release(&mutex_uart1); // 释放互斥资源
  484. // }
  485. // /****************************************************
  486. // * 函 数 名:HMI_10Frame_ParSetAir
  487. // * 函数功能:HMI开关空调
  488. // * 入口参数:register_addr 寄存器地址 data 开关指令
  489. // * 说 明:无
  490. // *****************************************************/
  491. // void HMI_10Frame_SwitchAir(u16 addr_hmi, u16 data)
  492. // {
  493. // u16 addr_air;
  494. // addr_air = AddrConv_Hmi2Air(addr_hmi);
  495. // if (addr_air != DEF_FALSE)
  496. // {
  497. // SendFrame_SwitchAir(1, addr_air, data);
  498. // }
  499. // }
  500. // /****************************************************
  501. // * 函 数 名:I104_SwitchAir1
  502. // * 函数功能:104开关空调1
  503. // * 入口参数:addr_104: 104地址 data: 开关指令
  504. // * 说 明:无
  505. // *****************************************************/
  506. // void I104_SwitchAir1(u16 addr_104, u8 data)
  507. // {
  508. // u16 addr_air;
  509. // addr_air = AddrConv_104IEC2Air1(addr_104);
  510. // if (addr_air != DEF_FALSE)
  511. // {
  512. // SendFrame_SwitchAir(1, addr_air, data);
  513. // }
  514. // }
  515. // /****************************************************
  516. // * 函 数 名:Uart_air_test
  517. // * 函数功能:Uart1通信测试
  518. // * 入口参数:addr_104: 104地址 data: 开关指令
  519. // * 说 明:无
  520. // *****************************************************/
  521. // void Uart_air_test(void)
  522. // {
  523. // OS_RESULT result = OS_R_OK;
  524. // UartFrame_TypeDef *pMsg;
  525. // u8 uart1_test_buf[3] = {0};
  526. // result = os_mbx_wait(&uart1_mailbox, (void *)&pMsg, TIME_1000MS);
  527. // if (result == OS_R_OK || result == OS_R_MBX) // 成功获得消息
  528. // {
  529. // if ((pMsg->buf[0] == 0xAA) && (pMsg->buf[1] == 0xBB))
  530. // {
  531. // uart1_test_buf[0] = 0xBB;
  532. // uart1_test_buf[1] = 0xAA;
  533. // Uart1DMA_SendData(uart1_test_buf, 2);
  534. // }
  535. // else if ((pMsg->buf[0] == 0xAB) && (pMsg->buf[1] == 0xAB))
  536. // {
  537. // uart1_test_buf[0] = 0xBA;
  538. // uart1_test_buf[1] = 0xBA;
  539. // Uart1DMA_SendData(uart1_test_buf, 2);
  540. // bams_set_uart_flag(FALSE);
  541. // }
  542. // else if ((pMsg->buf[0] == 0x01) && (pMsg->buf[1] == 0xAA) && (pMsg->buf[2] == 0xBB))
  543. // {
  544. // uart1_test_buf[0] = 0x01;
  545. // uart1_test_buf[1] = 0xBB;
  546. // uart1_test_buf[2] = 0xAA;
  547. // Uart1DMA_SendData(uart1_test_buf, 3);
  548. // }
  549. // }
  550. // }