KeySlave485.c 38 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190
  1. #include "KeySlave485.h"
  2. #include "CollectMaster485.h"
  3. #include "TerminalSlave485.h"
  4. #include "usart.h"
  5. #include "spi.h"
  6. #include "Elec_Seal.h"
  7. #include "Dwin.h"
  8. #include <stdio.h>
  9. #include <string.h>
  10. #include "FreeRTOS.h"
  11. #include "task.h"
  12. #include "Data_deal.h"
  13. //#include <absacc.h>
  14. #define __noinit__ __attribute__((zero_init))
  15. #define Max_QingJiao_Print ((float)5.01) //倾角限制,超过该倾角则不允许打印
  16. //////////////////////////////////////////////////////////////////////////////////
  17. /*********此处关于设置参数以及参数设置后赋值处理,后续有更合适的方法时配置代码不应在按键串口里(如在终端里配置)**************/
  18. /*******************油品设置界面BEGIN***********************/
  19. #define Set_92_Oil_Id 40
  20. #define Set_95_Oil_Id 41
  21. #define Set_97_Oil_Id 42
  22. #define Set_98_Oil_Id 43
  23. #define Set_Diesel_Oil_Id 44
  24. #define Set_Other_Oil_Id 45
  25. /*******************油品设置界面END***********************/
  26. #define Calibration_ID 0x81
  27. Config_INFO_TypeDef Config_info_all;
  28. uint8_t Baseval_ID = 1; //采集板ID号
  29. uint8_t Set_CollectPara_Flag = 0;
  30. uint8_t com_name[20] = "Hangzhou jialong"; //公司名称
  31. uint8_t Version_hardware[32] = "V2.0.0 STM32F746VGT6"; //硬件版本
  32. uint8_t product_code[20] = "JL-SIMS-CJ-V2.1"; //产品代码
  33. uint8_t product_ID[20] = "20210730001"; //产品ID
  34. char Version_software[30] = "KZB09A0_20220210_Temp1";
  35. uint32_t Version_Soft[8] = {2,3,3,12,1,2,2,20230131};
  36. uint8_t flag_exitReset = 0; //终止复位命令
  37. uint8_t flag_Uart4_Busy = 0; //表明打印机占用了总线,暂停语音播报
  38. uint8_t flag_Sw_VoicePlay = 1; //表明默认上电时启用语音播报
  39. uint8_t flag_ShowValveRaw = 0; //默认显示打开、关闭、异常等汉字信息
  40. uint8_t flag_Sw_DisplaySensorData = 1; //默认不显示模拟量类传感器信息数据
  41. uint8_t flag_En_BlankSeal = 0; //0表明默认上电禁止空仓施封 1=允许空仓施封
  42. uint8_t flag_Sw_DispSysInfo = 1; //表明默认上电显示系统信息否 1=显示 0=不显示
  43. /******************************************END**********************************************************************/
  44. uint8_t flag_Seal_Break; //破封蜂鸣器报警标志
  45. uint16_t Sleep_Timer_cnt3 = 0; //小屏10分钟没有操作息屏处理标志
  46. uint16_t PrintCnt __attribute__((at(0X20000000))); // =99;// __attribute__((at(0x20000000))); //__attribute__((at(0x1000A000)));//打印流水号
  47. uint16_t tmrForPrinter = 0; //打印机定时——避免死机重启(因为打印机启动瞬间电流非常大,24V供电可达0.7A以上)。一定时间内内只能打印一次
  48. uint32_t tmrForKeyPad = 0; //按键定时器,判断一定时间内是否有按键操作。如果有则强制屏幕进行唤醒
  49. uint32_t tmrForRemoteCali; //远程标定定时器 如果有远程标定命令则封闭一段时间不发送轮训传感器的数据
  50. uint32_t tmrForTemp_ManualInput = 0; //手工输入温度之后开启定时器
  51. float ManualSign = 1.0f; //默认的手工输入温度的符号位。
  52. int16_t input_Arr[5]; //获取用户的按键输入温度
  53. uint32_t input_ArrFunDebugCode[5]; //用于输入功能码----5位功能码,主要用于在屏幕上打印调试信息 9开头,剩下4位为数字
  54. uint32_t FunDebugCode = 0;
  55. //该参数修正液位高度,使得液位高度与真实的量油尺量出的高度一致
  56. int16_t OffsetYewei[8]; //offsetLeiDa004;//修正零点,可以通过按键口进行标定。
  57. //根据罐容反推的液位高度修正误差,可以通过按键口进行标定。
  58. //该参数修正容量(罐容)系统误差,使得计算的罐容与实际发油量或者卸油量一致
  59. //当液位高度超过50mm之后,强制加上此偏移
  60. int16_t OffsetTankCapacity[8]; //1仓罐容零点,两字节定时发给采集器
  61. float ExpansionRatio[8] = {0.0008, 0.0008, 0.0008, 0.0008, 0.0008, 0.0008, 0.0008, 0.0008}; //膨胀比
  62. float Vt_Disp[8], V20_Disp[8]; //[8]
  63. float Tempe_For_V20[8] = {20, 20, 20, 20, 20, 20, 20, 20}; //,V20_Disp[8];//[8]
  64. float Vt_Local[8] = {40000.1, 40000.1, 40000.1, 40000.1, 40000.1, 40000.1, 40000.1, 40000.1};
  65. uint8_t Auto_sealedOK_ID_bak;
  66. float V20_Seal[8],Vt_Seal[8],Ht_Seal[8];
  67. float V20_Break[8],Vt_Break[8],Ht_Break[8];
  68. uint32_t data_Src_To_Disp = 0; //待显示数据源----0-来自采集器,1-来自平台下发
  69. float Vt_Local_Disp, V20_Local_Disp;
  70. float V20_Local[8] = {40005.99, 40005.99, 40005.99, 40005.99, 40005.99, 40005.99, 40005.99, 40005.99}; //控制器计算的结果或者采集器传来的结果
  71. char PrintBuff[64]; //打印机缓存
  72. int LenOfPrint = 0; //打印的字符数
  73. uint8_t dbgArray[8]; //调试状态下是否执行某些命令
  74. //李伟修改 湖南润安项目 新增传感器与报警信息
  75. float AlarmOfTempeThreshold_Upper,AlarmOfTempeThreshold_Lower;
  76. float AlarmOfPressureThreshold_Upper,AlarmOfPressureThreshold_Lower;
  77. float AlarmArrayData[11];
  78. float BiasOfTempe;//温度修正
  79. float PressureWindowsSpan;//压力窗口时长
  80. float PressurePositiveThreshold;//压力正偏门限
  81. float PressureNegativeThreshold;//压力负偏门限
  82. float BiasOfPressure;//压力修正
  83. uint32_t AlgType;//算法类型配置
  84. uint32_t usart_timeout=0,usart_timesec=0;
  85. /*
  86. #define PRINTER_TYPE 0x00
  87. //创鑫公司起始符为 1b 64 01,结束符为1b 64 00;
  88. 济南HOE公司为
  89. //HOE9200-2 打印机分两种模式
  90. 1、无协议,发什么打印什么
  91. 2、带起始字符和结束字符:起始 0355 ;结束 03AA。
  92. */
  93. //默认打印机型号为创鑫公司=0x00;0x01=济南HOE公司;二者通信命令不同,仅在于起始符号与结束符
  94. uint8_t PrinterType = 0x00; //该参数可以通过平台或者串口进行配置
  95. void PrintInfo(void)
  96. {
  97. int i000 = 0;
  98. //20210103打印机打印程序---走纸顺序是反的,所以开始和结束是反的
  99. //HAL_GPIO_TogglePin(GPIOC, DWI_Pin); //看门狗sp706
  100. //HAL_Delay(200);
  101. if (1 == 0) //倾角太大则不打印,直接报警退出
  102. {
  103. if (uni_QingJiao001.flo_Data > Max_QingJiao_Print)
  104. {
  105. for (i000 = 0; i000 < 20; i000++)
  106. {
  107. //HAL_GPIO_TogglePin(GPIOE, BEEP_Pin);
  108. //HAL_Delay(50);
  109. osDelay(50);
  110. //HAL_GPIO_TogglePin(GPIOC, DWI_Pin); //看门狗sp706
  111. }
  112. HAL_GPIO_WritePin(GPIOE, BEEP_Pin, GPIO_PIN_SET);
  113. //return;
  114. }
  115. }
  116. //HAL_Delay(10);
  117. osDelay(10);
  118. KeySlave485_Send_Data((uint8_t *)PrintBuff, 3);
  119. memset(PrintBuff, 0, sizeof(PrintBuff));
  120. if (PrinterType == 0x00)
  121. {
  122. // PrintBuff[0]=0x03;//禁止打印,济南公司
  123. // PrintBuff[1]=0xaa;
  124. // KeySlave485_Send_Data((uint8_t *)PrintBuff,2);
  125. memset(PrintBuff, 0, sizeof(PrintBuff));
  126. HAL_Delay(30);
  127. PrintBuff[0] = 0x1b; //允许打印命令 1b 64 01 创鑫公司
  128. PrintBuff[1] = 0x64;
  129. PrintBuff[2] = 0x01;
  130. KeySlave485_Send_Data((uint8_t *)PrintBuff, 3);
  131. }
  132. else
  133. { //济南打印机HOE公司
  134. PrintBuff[0] = 0x1b; //禁止打印,创鑫公司
  135. PrintBuff[1] = 0x64;
  136. PrintBuff[2] = 0x00;
  137. KeySlave485_Send_Data((uint8_t *)PrintBuff, 3);
  138. memset(PrintBuff, 0, sizeof(PrintBuff));
  139. HAL_Delay(30);
  140. PrintBuff[0] = 0x03; //允许打印命令 1b 64 01 济南公司
  141. PrintBuff[1] = 0x55;
  142. KeySlave485_Send_Data((uint8_t *)PrintBuff, 2);
  143. }
  144. //HAL_GPIO_TogglePin(GPIOC, DWI_Pin); //看门狗sp706
  145. //HAL_Delay(20);
  146. memset(PrintBuff, 0, sizeof(PrintBuff));
  147. LenOfPrint = sprintf(PrintBuff, "-----------%s 结束\r\n", "########");
  148. KeySlave485_Send_Data((uint8_t *)PrintBuff, LenOfPrint);
  149. memset(PrintBuff, 0, sizeof(PrintBuff));
  150. LenOfPrint = sprintf(PrintBuff, "罐车牌号:%s \r\n", CarLicensePlate);
  151. KeySlave485_Send_Data((uint8_t *)PrintBuff, LenOfPrint);
  152. memset(PrintBuff, 0, sizeof(PrintBuff));
  153. LenOfPrint = sprintf(PrintBuff, "罐车仓数:%d \r\n", StoreNumber);
  154. KeySlave485_Send_Data((uint8_t *)PrintBuff, LenOfPrint);
  155. memset(PrintBuff, 0, sizeof(PrintBuff));
  156. for (i000 = 0; i000 < StoreNumber; i000++)
  157. {
  158. LenOfPrint = sprintf(PrintBuff, "Vt:%6.2f. V20: %6.2f.\r\n", Vt_Local[i000], V20_Local[i000]);
  159. KeySlave485_Send_Data((uint8_t *)PrintBuff, LenOfPrint);
  160. memset(PrintBuff, 0, sizeof(PrintBuff));
  161. // HAL_GPIO_TogglePin(GPIOC, DWI_Pin); //看门狗sp706
  162. // HAL_Delay(20);
  163. }
  164. #if (PrintDateTime)
  165. //打印年月日时分秒 打印时间 打印当前时间
  166. LenOfPrint = sprintf(PrintBuff, "时间:%04x-%02x-%02x.%02x:%02x:%02x .\r\n",
  167. pT2C_SetupData->year, pT2C_SetupData->month, pT2C_SetupData->day,
  168. pT2C_SetupData->hour, pT2C_SetupData->minute, pT2C_SetupData->second);
  169. #endif
  170. KeySlave485_Send_Data((uint8_t *)PrintBuff, LenOfPrint);
  171. memset(PrintBuff, 0, sizeof(PrintBuff));
  172. LenOfPrint = sprintf(PrintBuff, "倾角x:%3.2f;倾角y:%3.2f;\r\n", Stor[0].QingJiaoFlo, Stor[1].QingJiaoFlo);
  173. KeySlave485_Send_Data((uint8_t *)PrintBuff, LenOfPrint);
  174. memset(PrintBuff, 0, sizeof(PrintBuff));
  175. HAL_Delay(20);
  176. LenOfPrint = sprintf(PrintBuff, "温度:%3.2f.液位:%3.2f \r\n", uni_temper001.flo_Data, uni_LiqLev001.flo_Data);
  177. KeySlave485_Send_Data((uint8_t *)PrintBuff, LenOfPrint);
  178. memset(PrintBuff, 0, sizeof(PrintBuff));
  179. //打印液位波动数据
  180. //?△▽▲▼
  181. LenOfPrint = sprintf(PrintBuff, "最高:%4.2f;最低:%4.2f;\r\n", Yewei_max000, Yewei_min000);
  182. KeySlave485_Send_Data((uint8_t *)PrintBuff, LenOfPrint);
  183. memset(PrintBuff, 0, sizeof(PrintBuff));
  184. LenOfPrint = sprintf(PrintBuff, "差值△:%4.2f mm\r\n", Yewei_peak000);
  185. KeySlave485_Send_Data((uint8_t *)PrintBuff, LenOfPrint);
  186. memset(PrintBuff, 0, sizeof(PrintBuff));
  187. //HAL_Delay(10);
  188. //HAL_GPIO_TogglePin(GPIOC, DWI_Pin); //看门狗sp706
  189. if (Stor[0].xyf_state)
  190. {
  191. LenOfPrint = sprintf(PrintBuff, "卸油阀1:打开. \r\n");
  192. }
  193. else
  194. {
  195. LenOfPrint = sprintf(PrintBuff, "卸油阀1:关闭. \r\n");
  196. }
  197. HAL_Delay(20);
  198. KeySlave485_Send_Data((uint8_t *)PrintBuff, LenOfPrint);
  199. memset(PrintBuff, 0, sizeof(PrintBuff));
  200. if (Stor[1].xyf_state)
  201. {
  202. LenOfPrint = sprintf(PrintBuff, "卸油阀2:打开. \r\n");
  203. }
  204. else
  205. {
  206. LenOfPrint = sprintf(PrintBuff, "卸油阀2:关闭. \r\n");
  207. }
  208. KeySlave485_Send_Data((uint8_t *)PrintBuff, LenOfPrint);
  209. memset(PrintBuff, 0, sizeof(PrintBuff));
  210. if (Stor[2].xyf_state)
  211. {
  212. LenOfPrint = sprintf(PrintBuff, "卸油阀3:打开. \r\n");
  213. }
  214. else
  215. {
  216. LenOfPrint = sprintf(PrintBuff, "卸油阀3:关闭. \r\n");
  217. }
  218. KeySlave485_Send_Data((uint8_t *)PrintBuff, LenOfPrint);
  219. memset(PrintBuff, 0, sizeof(PrintBuff));
  220. if (Stor[0].hdf_state)
  221. {
  222. LenOfPrint = sprintf(PrintBuff, "海底阀1:打开. \r\n");
  223. }
  224. else
  225. {
  226. LenOfPrint = sprintf(PrintBuff, "海底阀1:关闭. \r\n");
  227. }
  228. KeySlave485_Send_Data((uint8_t *)PrintBuff, LenOfPrint);
  229. memset(PrintBuff, 0, sizeof(PrintBuff));
  230. LenOfPrint = sprintf(PrintBuff, "流水号 :%5d \r\n", PrintCnt);
  231. KeySlave485_Send_Data((uint8_t *)PrintBuff, LenOfPrint);
  232. memset(PrintBuff, 0, sizeof(PrintBuff));
  233. HAL_Delay(10);
  234. // HAL_GPIO_TogglePin(GPIOC, DWI_Pin); //看门狗sp706
  235. LenOfPrint = sprintf(PrintBuff, "开始_____________\r\n");
  236. KeySlave485_Send_Data((uint8_t *)PrintBuff, LenOfPrint);
  237. memset(PrintBuff, 0, sizeof(PrintBuff));
  238. ///*
  239. // DateDwin[0]=USART3_RX_BUF[7];//年月日
  240. // DateDwin[1]=USART3_RX_BUF[8];
  241. // DateDwin[2]=USART3_RX_BUF[9];
  242. // DateDwin[3]=USART3_RX_BUF[10];//星期
  243. // DateDwin[4]=USART3_RX_BUF[11];//时分秒
  244. // DateDwin[5]=USART3_RX_BUF[12];
  245. // DateDwin[6]=USART3_RX_BUF[13];
  246. LenOfPrint = sprintf(PrintBuff, "_____________\r\n");
  247. //LenOfPrint=sprintf(PrintBuff,"20%02d-%02d-%02d;%02d:%02d:%02d\r\n",DateDwin[0],DateDwin[1],DateDwin[2],DateDwin[4],DateDwin[5],DateDwin[6]);
  248. KeySlave485_Send_Data((uint8_t *)PrintBuff, LenOfPrint);
  249. memset(PrintBuff, 0, sizeof(PrintBuff));
  250. //*/
  251. HAL_Delay(20);
  252. // HAL_GPIO_TogglePin(GPIOC, DWI_Pin); //看门狗sp706
  253. LenOfPrint = sprintf(PrintBuff, "_____________\r\n");
  254. KeySlave485_Send_Data((uint8_t *)PrintBuff, LenOfPrint);
  255. memset(PrintBuff, 0, sizeof(PrintBuff));
  256. LenOfPrint = sprintf(PrintBuff, "_____________\r\n");
  257. KeySlave485_Send_Data((uint8_t *)PrintBuff, LenOfPrint);
  258. KeySlave485_Send_Data((uint8_t *)PrintBuff, LenOfPrint);
  259. memset(PrintBuff, 0, sizeof(PrintBuff));
  260. PrintCnt++;
  261. HAL_Delay(10);
  262. pT2C_SetupData_Con2Server->year = pT2C_SetupData->year;
  263. pT2C_SetupData_Con2Server->month = pT2C_SetupData->month;
  264. pT2C_SetupData_Con2Server->day = pT2C_SetupData->day;
  265. pT2C_SetupData_Con2Server->hour = pT2C_SetupData->hour;
  266. pT2C_SetupData_Con2Server->minute = pT2C_SetupData->minute;
  267. pT2C_SetupData_Con2Server->second = pT2C_SetupData->second;
  268. pT2C_SetupData_Con2Server->longitude = pT2C_SetupData->longitude;
  269. pT2C_SetupData_Con2Server->latitude = pT2C_SetupData->latitude;
  270. pT2C_SetupData_Con2Server->Capacity_Vt = pT2C_SetupData->Capacity_Vt;
  271. pT2C_SetupData_Con2Server->Capacity_V20 = pT2C_SetupData->Capacity_V20;
  272. pT2C_SetupData_Con2Server->liquid_level = pT2C_SetupData->liquid_level;
  273. pT2C_SetupData_Con2Server->temperature = pT2C_SetupData->temperature;
  274. pT2C_SetupData_Con2Server->inclination_angle_x = pT2C_SetupData->inclination_angle_x;
  275. pT2C_SetupData_Con2Server->inclination_angle_y = pT2C_SetupData->inclination_angle_y;
  276. pT2C_SetupData_Con2Server->pressure = pT2C_SetupData->pressure;
  277. pT2C_SetupData_Con2Server->density = pT2C_SetupData->density;
  278. pT2C_SetupData_Con2Server->Reserved_parameters_1 = pT2C_SetupData->Reserved_parameters_1;
  279. pT2C_SetupData_Con2Server->Reserved_parameters_2 = pT2C_SetupData->Reserved_parameters_2;
  280. pT2C_SetupData_Con2Server->Reserved_parameters_3 = pT2C_SetupData->Reserved_parameters_3;
  281. pT2C_SetupData_Con2Server->Reserved_parameters_4 = pT2C_SetupData->Reserved_parameters_4;
  282. if (PrinterType == 0x00) //禁止打印命令
  283. { //创鑫公司
  284. PrintBuff[0] = 0x1b; //
  285. PrintBuff[1] = 0x64;
  286. PrintBuff[2] = 0x00;
  287. KeySlave485_Send_Data((uint8_t *)PrintBuff, 3);
  288. }
  289. else
  290. { //济南打印机HOE公司
  291. PrintBuff[0] = 0x03; //
  292. PrintBuff[1] = 0xaa;
  293. KeySlave485_Send_Data((uint8_t *)PrintBuff, 2);
  294. }
  295. memset(PrintBuff, 0, sizeof(PrintBuff));
  296. // HAL_GPIO_TogglePin(GPIOC, DWI_Pin); //看门狗sp706
  297. }
  298. void TestUsart4_Receive(void)
  299. {
  300. if (usart4_rx_flag && UART4_RX_BUF[0] == 0x12)
  301. {
  302. usart4_rx_flag = 0;
  303. uart4RxCounter = 0;
  304. KeySlave485_Send_Data(UART4_RX_BUF, rx4_len);
  305. rx4_len = 0;
  306. }
  307. }
  308. //RS485发送len个字节.
  309. //buf:发送区首地址
  310. //len:发送的字节数(为了和本代码的接收匹配,这里建议不要超过64个字节)
  311. void KeySlave485_Send_Data(uint8_t *buf, uint8_t len)
  312. {
  313. while(1)
  314. {
  315. if(huart4.gState == HAL_UART_STATE_READY)
  316. break;
  317. osDelay(1);
  318. }
  319. KeySlave485_TX_Set(1); //设置为发送模式
  320. //osDelay(1); //阻塞时间
  321. //HAL_UART_Transmit(&huart4, buf, len, 1000); //串口4发送数据
  322. if(HAL_UART_Transmit_IT(&huart4,buf,len)!=HAL_OK)
  323. {
  324. KeySlave485_TX_Set(0); //设置为接收模式
  325. }
  326. }
  327. //RS485模式控制.
  328. //en:0,接收;1,发送.
  329. void KeySlave485_TX_Set(uint8_t en)
  330. {
  331. //int i000 = 0;
  332. if (en == 1)
  333. HAL_GPIO_WritePin(GPIOD, GPIO_PIN_0, GPIO_PIN_RESET);
  334. else
  335. HAL_GPIO_WritePin(GPIOD, GPIO_PIN_0, GPIO_PIN_SET);
  336. /*
  337. while (i000 < 20000)
  338. {
  339. i000++;
  340. __nop();
  341. }*/
  342. }
  343. uint8_t arr_alarm[7] = {0xAA, 0x07, 0xBE, 0xC8, 0x01, 0x0d, 0x0a};
  344. void Send_alarm10S(void)
  345. {
  346. // if(flag_Seal_Break == 1)
  347. // {
  348. KeySlave485_Send_Data(arr_alarm, 7);
  349. // }
  350. }
  351. float f001_uart4;
  352. uni_float uni_flo001_uart4; //标定数据用联合体 float格式存储 但是int16类型传过来
  353. uint16_t FnKey = 0x0000; //组合键
  354. uint8_t Get_keyvalue(void) //获取当前按键值50 81 00 01 04(仓数)00 80 00 00
  355. {
  356. uint8_t ret00 = 0;
  357. if (usart4_rx_flag)
  358. {
  359. usart4_rx_flag = 0;
  360. tmrForKeyPad = SPAN_KeyPress_Time; //记录按键的时间 如果60秒内有按键操作则强制进行屏幕唤醒
  361. //AA 04 A2 1B 01 6B C6 0D 0A ----F1
  362. if ((UART4_RX_BUF[0] == 0xAA) && (UART4_RX_BUF[2] == 0xA2))
  363. {
  364. Run_mode_key_info.key = UART4_RX_BUF[3];
  365. FnKey = ((uint16_t)UART4_RX_BUF[3] << 8) + UART4_RX_BUF[4];
  366. ret00 = UART4_RX_BUF[3]; //
  367. }
  368. //控制器参数标定:大盖、小盖、卸油阀、海底阀数量
  369. else if ((UART4_RX_BUF[0] == 0x50) && (UART4_RX_BUF[1] == 0x81)) //设置控制器参数:buf2
  370. {
  371. Config_info_all.Config_fun_id = UART4_RX_BUF[2]; //功能配置ID
  372. FM25L16B_WriteByte(ADDR_Config_fun_id, Config_info_all.Config_fun_id);
  373. Config_info_all.Collection_id = UART4_RX_BUF[3];
  374. Baseval_ID = Config_info_all.Collection_id; //默认一个初始化
  375. FM25L16B_WriteByte(ADDR_Baseval_ID, Baseval_ID);
  376. Config_info_all.All_number = UART4_RX_BUF[4];
  377. StoreNumber = Config_info_all.All_number;
  378. FM25L16B_WriteByte(ADDR_StoreNumber, StoreNumber);
  379. Config_info_all.ManHole_Big_info = UART4_RX_BUF[5]; //人孔盖信息(大盖)bit7标定大盖有没有 1没有 0有
  380. FM25L16B_WriteByte(ADDR_ManHole_Big_info, Config_info_all.ManHole_Big_info);
  381. Config_info_all.ManHole_small_info = UART4_RX_BUF[6]; //小盖单独标定,bit7标定大盖有没有 1没有 0有
  382. FM25L16B_WriteByte(ADDR_ManHole_small_info, Config_info_all.ManHole_small_info);
  383. Config_info_all.Dump_info = UART4_RX_BUF[7]; //卸油阀标定bit7=0常规一仓一个,bit7=1特殊一仓两个
  384. FM25L16B_WriteByte(ADDR_Dump_info, Config_info_all.Dump_info);
  385. Config_info_all.HaiDiFa_info = UART4_RX_BUF[8]; //底阀标定bit7=0气阀,bit7=1特殊485(日后可能会改)
  386. FM25L16B_WriteByte(ADDR_Foot_info, Config_info_all.HaiDiFa_info);
  387. all_Store = StoreNumber;
  388. Go_homepage(); //回到首页
  389. }
  390. else if ((UART4_RX_BUF[0] == 0x50) && (UART4_RX_BUF[1] == 0x82)) //设置车牌号罐车牌号
  391. { // 50 82 00 01 03 03 03 03 03
  392. //50 82为固定的帧头 第三字节代表省域代码;接下来的6位表示
  393. //新AB0808
  394. //FM25L16B_WriteByte(30,UART4_RX_BUF[2]);
  395. FM25L16B_WriteByte(ADDR_CarPlate_Number, UART4_RX_BUF[2]);
  396. /*
  397. switch (UART4_RX_BUF[2]) //车牌号的省域代码
  398. {
  399. case 00:
  400. break;
  401. default:
  402. break;
  403. }
  404. */
  405. //省域代码,一个汉字2字节
  406. CarLicensePlate[0] = CarLicCodeArray[UART4_RX_BUF[2]][6];
  407. CarLicensePlate[1] = CarLicCodeArray[UART4_RX_BUF[2]][7];
  408. memcpy(&CarLicensePlate[2], &UART4_RX_BUF[3], 6); //6位车牌号
  409. // FM25L16B_WriteByte(31,UART4_RX_BUF[3]);
  410. // FM25L16B_WriteByte(32,UART4_RX_BUF[4]);
  411. // FM25L16B_WriteByte(33,UART4_RX_BUF[5]);
  412. // FM25L16B_WriteByte(34,UART4_RX_BUF[6]);
  413. // FM25L16B_WriteByte(35,UART4_RX_BUF[7]);
  414. // FM25L16B_WriteByte(36,UART4_RX_BUF[8]);
  415. FM25L16B_WriteByte(ADDR_CarPlate_Number + 2, UART4_RX_BUF[3]);
  416. FM25L16B_WriteByte(ADDR_CarPlate_Number + 3, UART4_RX_BUF[4]);
  417. FM25L16B_WriteByte(ADDR_CarPlate_Number + 4, UART4_RX_BUF[5]);
  418. FM25L16B_WriteByte(ADDR_CarPlate_Number + 5, UART4_RX_BUF[6]);
  419. FM25L16B_WriteByte(ADDR_CarPlate_Number + 6, UART4_RX_BUF[7]);
  420. FM25L16B_WriteByte(ADDR_CarPlate_Number + 7, UART4_RX_BUF[8]);
  421. }
  422. else if ((UART4_RX_BUF[0] == 0x50) && (UART4_RX_BUF[1] == 0x83)) //调试状态标记,
  423. { // 50 83 00 01 03 03 03 03 03
  424. //50 83为固定的帧头 接下来7个字节为调试状态位,控制调试信息
  425. // FM25L16B_WriteByte(37,UART4_RX_BUF[2]);
  426. // FM25L16B_WriteByte(38,UART4_RX_BUF[3]);
  427. // FM25L16B_WriteByte(39,UART4_RX_BUF[4]);
  428. // FM25L16B_WriteByte(40,UART4_RX_BUF[5]);
  429. // FM25L16B_WriteByte(41,UART4_RX_BUF[6]);
  430. // FM25L16B_WriteByte(42,UART4_RX_BUF[7]);
  431. // FM25L16B_WriteByte(43,UART4_RX_BUF[8]);
  432. FM25L16B_WriteByte(ADDR_DebugControll + 0, UART4_RX_BUF[2]);
  433. FM25L16B_WriteByte(ADDR_DebugControll + 1, UART4_RX_BUF[3]);
  434. FM25L16B_WriteByte(ADDR_DebugControll + 2, UART4_RX_BUF[4]);
  435. FM25L16B_WriteByte(ADDR_DebugControll + 3, UART4_RX_BUF[5]);
  436. FM25L16B_WriteByte(ADDR_DebugControll + 4, UART4_RX_BUF[6]);
  437. FM25L16B_WriteByte(ADDR_DebugControll + 5, UART4_RX_BUF[7]);
  438. FM25L16B_WriteByte(ADDR_DebugControll + 6, UART4_RX_BUF[8]);
  439. // dbgArray[0]=UART4_RX_BUF[2];
  440. // dbgArray[1]=UART4_RX_BUF[3];
  441. // dbgArray[2]=UART4_RX_BUF[4];
  442. // dbgArray[3]=UART4_RX_BUF[5];
  443. // dbgArray[4]=UART4_RX_BUF[6];
  444. // dbgArray[5]=UART4_RX_BUF[7];
  445. // dbgArray[6]=UART4_RX_BUF[8];
  446. // dbgArray[7]=UART4_RX_BUF[8];
  447. // dbgArray[0]=FM25L16B_ReadByte(37);
  448. // dbgArray[1]=FM25L16B_ReadByte(38);
  449. // dbgArray[2]=FM25L16B_ReadByte(39);
  450. // dbgArray[3]=FM25L16B_ReadByte(40);
  451. // dbgArray[4]=FM25L16B_ReadByte(41);
  452. // dbgArray[5]=FM25L16B_ReadByte(42);
  453. // dbgArray[6]=FM25L16B_ReadByte(43);
  454. // dbgArray[7]=FM25L16B_ReadByte(43);
  455. dbgArray[0] = FM25L16B_ReadByte(ADDR_DebugControll + 0);
  456. dbgArray[1] = FM25L16B_ReadByte(ADDR_DebugControll + 1);
  457. dbgArray[2] = FM25L16B_ReadByte(ADDR_DebugControll + 2);
  458. dbgArray[3] = FM25L16B_ReadByte(ADDR_DebugControll + 3);
  459. dbgArray[4] = FM25L16B_ReadByte(ADDR_DebugControll + 4);
  460. dbgArray[5] = FM25L16B_ReadByte(ADDR_DebugControll + 5);
  461. dbgArray[6] = FM25L16B_ReadByte(ADDR_DebugControll + 6);
  462. dbgArray[7] = FM25L16B_ReadByte(ADDR_DebugControll + 7);
  463. }
  464. //参数标定 雷达液位计偏移 零点参数
  465. else if ((UART4_RX_BUF[0] == 0x50) && (UART4_RX_BUF[1] == 0x84)) //设置雷达液位计偏移
  466. { // 50 84 00 01 03 03 03 03 03
  467. //50 84为固定的帧头 接下来7个字节为调试状态位,控制调试信息
  468. // FM25L16B_WriteByte(44,UART4_RX_BUF[2]);
  469. // FM25L16B_WriteByte(45,UART4_RX_BUF[3]);
  470. // FM25L16B_WriteByte(46,UART4_RX_BUF[4]);
  471. // FM25L16B_WriteByte(47,UART4_RX_BUF[5]);
  472. OffsetYewei[0] = (UART4_RX_BUF[2] << 8) + UART4_RX_BUF[3];
  473. OffsetTankCapacity[0] = (UART4_RX_BUF[4] << 8) + UART4_RX_BUF[5];
  474. f001_uart4 = (1.00000f) * (int16_t)OffsetYewei[0]; //强制转换为浮点数
  475. uni_flo001_uart4.flo_Data = f001_uart4;
  476. __nop();
  477. FM25L16B_WriteByte(ADDR_Zero_Of_LiquidMeter + 0, uni_flo001_uart4.array_u8[0]);
  478. FM25L16B_WriteByte(ADDR_Zero_Of_LiquidMeter + 1, uni_flo001_uart4.array_u8[1]);
  479. FM25L16B_WriteByte(ADDR_Zero_Of_LiquidMeter + 2, uni_flo001_uart4.array_u8[2]);
  480. FM25L16B_WriteByte(ADDR_Zero_Of_LiquidMeter + 3, uni_flo001_uart4.array_u8[3]);
  481. uni_flo001_uart4.flo_Data = (1.000000f) * (int16_t)OffsetTankCapacity[0];
  482. __nop();
  483. FM25L16B_WriteByte(ADDR_Zero_Of_TankCapacity + 0, uni_flo001_uart4.array_u8[0]);
  484. FM25L16B_WriteByte(ADDR_Zero_Of_TankCapacity + 1, uni_flo001_uart4.array_u8[1]);
  485. FM25L16B_WriteByte(ADDR_Zero_Of_TankCapacity + 2, uni_flo001_uart4.array_u8[2]);
  486. FM25L16B_WriteByte(ADDR_Zero_Of_TankCapacity + 3, uni_flo001_uart4.array_u8[3]);
  487. }
  488. else if ((UART4_RX_BUF[0] == 0x50) && (UART4_RX_BUF[1] == 0x85)) //读取雷达液位计偏移
  489. { // 50 85 00 01 03 03 03 03 03 //第一仓的液位计零点,罐容零点数据
  490. //50 85为固定的帧头 接下来7个字节为调试状态位,控制调试信息
  491. // UART4_RX_BUF[2]=FM25L16B_ReadByte(44);
  492. // UART4_RX_BUF[3]=FM25L16B_ReadByte(45);
  493. // UART4_RX_BUF[4]=FM25L16B_ReadByte(46);
  494. // UART4_RX_BUF[5]=FM25L16B_ReadByte(47);
  495. // UART4_RX_BUF[2]=FM25L16B_ReadByte(ADDR_Zero_Of_LiquidMeter+0);
  496. // UART4_RX_BUF[3]=FM25L16B_ReadByte(ADDR_Zero_Of_LiquidMeter+1);
  497. //
  498. UART4_RX_BUF[2] = OffsetYewei[0] >> 8; //FM25L16B_ReadByte(ADDR_Zero_Of_LiquidMeter+0);
  499. UART4_RX_BUF[3] = OffsetYewei[0] & 0x00ff; //FM25L16B_ReadByte(ADDR_Zero_Of_LiquidMeter+1);
  500. // UART4_RX_BUF[4]=FM25L16B_ReadByte(ADDR_Zero_Of_LiquidMeter+2);
  501. // UART4_RX_BUF[5]=FM25L16B_ReadByte(ADDR_Zero_Of_LiquidMeter+3);
  502. UART4_RX_BUF[4] = OffsetTankCapacity[0] >> 8; //FM25L16B_ReadByte(ADDR_Zero_Of_LiquidMeter+0);
  503. UART4_RX_BUF[5] = OffsetTankCapacity[0] & 0x00ff; //FM25L16B_ReadByte(ADDR_Zero_Of_LiquidMeter+1);
  504. //offsetLeiDa004=(UART4_RX_BUF[2]<<8) + UART4_RX_BUF[3];
  505. }
  506. else if ((UART4_RX_BUF[0] == 0x05) && (UART4_RX_BUF[1] == 0x20)) //设置采集器参数(写仓数,写大盖小盖参数,写卸油阀底阀参数)
  507. {
  508. Set_CollectPara_Flag = True;
  509. }
  510. //HAL_Delay(10);
  511. uart4RxCounter = 0;
  512. //扬声器的命令例外,不用回复 语音播报器
  513. if ((UART4_RX_BUF[0] != 0x03) && (rx4_len > 2))
  514. {
  515. KeySlave485_Send_Data(UART4_RX_BUF, rx4_len);
  516. }
  517. rx4_len = 0;
  518. // HAL_Delay(200);
  519. // KeySlave485_Send_Data(UART4_RX_BUF,rx4_len);
  520. }
  521. return ret00;
  522. }
  523. uint8_t SetOilPagePoint = 0;
  524. uint8_t SetStorePagePoint = 0;
  525. uint8_t Input_date[20] = {0};
  526. uint8_t Set_Select_flag = 0; //登录设置或者查询标记 0 默认 1设置 2查询
  527. #include "FreeRTOS.h"
  528. #include "semphr.h"
  529. extern SemaphoreHandle_t xSemaphore_uart4;
  530. extern uint32_t bak_fundebug;
  531. void Mode_key_pageID(void)
  532. {
  533. uint8_t i = 0;
  534. uni_float uni_flo001_init;
  535. if (Run_mode_key_info.key != 0)
  536. { //如果有按键按下--开始
  537. if (Lcd_sleep_flag == 1)
  538. {
  539. Run_mode_key_info.key = 0;
  540. }
  541. else
  542. {
  543. if(HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_4)==GPIO_PIN_RESET)
  544. {
  545. Run_mode_key_info.key = 0;
  546. IO_Date.IO_unload_switch&=~1;
  547. }
  548. }
  549. Sleep_Timer_cnt3 = 0;
  550. Lcd_sleep_flag = 2;
  551. //如果是状态界面,也就是主界面 //主界面判断开始 李伟修改 20210212
  552. if (Run_mode_key_info.current_page == Run_mode_key_info.Main_Page_id)
  553. {
  554. __nop(); //
  555. switch (Run_mode_key_info.key)
  556. {
  557. case 0x1b: //F1
  558. #if 0
  559. if (Full_Oil_allinfo.Start_Decrease_flag == 0)
  560. {
  561. Jump_page_id(Run_mode_key_info.Full_oil_id); //进入装油界面
  562. Full_Oil_allinfo.Start_Full_flag = 1;
  563. }
  564. else //弹出警告,正在卸油
  565. WrDwinCmd16(0x103e, 0x01); //卸油油警告,弹窗
  566. #endif
  567. if (FunDebugCode == DebugFun__Restart_ContBoard01)
  568. {
  569. //停止重启 取消重启
  570. flag_exitReset = 1;
  571. }
  572. break;
  573. case 0x02: //F2
  574. #if 0
  575. //if (Full_Oil_allinfo.Break_sealing_Id > 0)
  576. {
  577. if (((Config_info_all.Config_fun_id & 0x08) == 0x08) || (Full_Oil_allinfo.Break_sealing_Id==0)) //==0x08对应于bit3-----可以重复施封
  578. {
  579. for (i = 0; i < StoreNumber; i++)
  580. {
  581. if (((flag_En_BlankSeal == 0x01) || (IO_Date.IO_unload_switch & (1 << i))))
  582. { //允许空仓施封
  583. //if ((Full_Oil_allinfo.Break_sealing_Id & (1 << i)) == (1 << i))
  584. {
  585. if (((IO_Date.IO_state[0] & (0x0f << (i * 4))) == 0))
  586. {
  587. Full_Oil_allinfo.Break_sealing_Id &= ~(1 << i); //清除本仓破封信息
  588. Full_Oil_allinfo.Auto_sealedOK_ID |= 1 << i; //本仓可以重新施封
  589. Sealing_Data.Sealing_up_datetype = 2; //上报报平台,进行施封
  590. FM25L16B_WriteByte(ADDR_Auto_sealedOK_ID, Full_Oil_allinfo.Auto_sealedOK_ID); //保存施封状态20200428
  591. FM25L16B_WriteByte(ADDR_Break_sealing_Id, (uint8_t)Full_Oil_allinfo.Break_sealing_Id); //保存破封状态20200428
  592. }
  593. }
  594. } //允许空仓施封
  595. #if 0
  596. else
  597. { //不允许空仓施封
  598. if (/*((Full_Oil_allinfo.Break_sealing_Id & (1 << i)) == (1 << i)) &&*/ ())
  599. {
  600. if (((~IO_Date.IO_state[0]) & (0x0f << (i * 4))) == (0x0f << (i * 4)))
  601. {
  602. Full_Oil_allinfo.Break_sealing_Id &= ~(1 << i); //清除本仓破封信息
  603. Full_Oil_allinfo.Auto_sealedOK_ID |= 1 << i; //本仓可以重新施封
  604. Sealing_Data.Sealing_up_datetype = 2; //上报报平台,进行施封
  605. FM25L16B_WriteByte(ADDR_Auto_sealedOK_ID, Full_Oil_allinfo.Auto_sealedOK_ID); //保存施封状态20200428
  606. FM25L16B_WriteByte(ADDR_Break_sealing_Id, (uint8_t)Full_Oil_allinfo.Break_sealing_Id); //保存破封状态20200428
  607. }
  608. }
  609. } //不允许空仓施封
  610. #endif
  611. }
  612. }
  613. }
  614. #endif
  615. break;
  616. case 0x03: //F3 设置
  617. #if 0
  618. tmrForPrinter = 3; //立即取消打印机时间限制,按下打印按键可以立即打印
  619. /*if (1 == 1)
  620. {
  621. uni_TempRealtime001.flo_Data = input_Arr[0] * 10.0f + input_Arr[1];
  622. uni_TempRealtime001.flo_Data = uni_TempRealtime001.flo_Data * (ManualSign);
  623. tmrForTemp_ManualInput = SPAN_Manual_Input_Temp; //手工输入温度定时器为20分钟
  624. }
  625. else*/
  626. {
  627. Set_Select_flag = 1;
  628. Jump_page_id(38); //登录
  629. Dispay_login(0, 0);
  630. }
  631. #else
  632. // Jump_page_id(Run_mode_key_info.Liquid_id); //进入模拟量数据
  633. #endif
  634. break;
  635. case 0x7f: //清除键 键盘的清除键
  636. // uni_TempRealtime001.flo_Data=0.1;
  637. input_Arr[0] = 0; //input_Arr[1];
  638. input_Arr[1] = 0; //Run_mode_key_info.key-0x30;
  639. uni_flo001_init.flo_Data = input_ArrFunDebugCode[0];
  640. uni_flo001_init.flo_Data = uni_flo001_init.flo_Data*10+input_ArrFunDebugCode[1];
  641. uni_flo001_init.flo_Data = uni_flo001_init.flo_Data*10+input_ArrFunDebugCode[2];
  642. uni_flo001_init.flo_Data = uni_flo001_init.flo_Data*10+input_ArrFunDebugCode[3];
  643. uni_flo001_init.flo_Data = uni_flo001_init.flo_Data*10+input_ArrFunDebugCode[4];
  644. switch (bak_fundebug)
  645. {
  646. case Set_Level_Alarm_Sensor001:
  647. Zero_Of_LiquidMeter[0]=uni_flo001_init.flo_Data;
  648. FM25L16B_WriteByte(ADDR_Zero_Of_LiquidMeter,uni_flo001_init.array_u8[3]);
  649. FM25L16B_WriteByte(ADDR_Zero_Of_LiquidMeter+1,uni_flo001_init.array_u8[2]);
  650. FM25L16B_WriteByte(ADDR_Zero_Of_LiquidMeter+2,uni_flo001_init.array_u8[1]);
  651. FM25L16B_WriteByte(ADDR_Zero_Of_LiquidMeter+3,uni_flo001_init.array_u8[0]);
  652. break;
  653. case Set_Level_Alarm_Sensor002:
  654. Zero_Of_LiquidMeter[1]=uni_flo001_init.flo_Data;
  655. FM25L16B_WriteByte(ADDR_Zero_Of_LiquidMeter+4,uni_flo001_init.array_u8[3]);
  656. FM25L16B_WriteByte(ADDR_Zero_Of_LiquidMeter+1+4,uni_flo001_init.array_u8[2]);
  657. FM25L16B_WriteByte(ADDR_Zero_Of_LiquidMeter+2+4,uni_flo001_init.array_u8[1]);
  658. FM25L16B_WriteByte(ADDR_Zero_Of_LiquidMeter+3+4,uni_flo001_init.array_u8[0]);
  659. break;
  660. case Set_Level_Alarm_Sensor011:
  661. OffsetTankCapacity[0]=uni_flo001_init.flo_Data;
  662. FM25L16B_WriteByte(ADDR_Zero_Of_TankCapacity,uni_flo001_init.array_u8[3]);
  663. FM25L16B_WriteByte(ADDR_Zero_Of_TankCapacity+1,uni_flo001_init.array_u8[2]);
  664. FM25L16B_WriteByte(ADDR_Zero_Of_TankCapacity+2,uni_flo001_init.array_u8[1]);
  665. FM25L16B_WriteByte(ADDR_Zero_Of_TankCapacity+3,uni_flo001_init.array_u8[0]);
  666. break;
  667. case Set_Level_Alarm_Sensor012:
  668. OffsetTankCapacity[1]=uni_flo001_init.flo_Data;
  669. FM25L16B_WriteByte(ADDR_Zero_Of_TankCapacity+4,uni_flo001_init.array_u8[3]);
  670. FM25L16B_WriteByte(ADDR_Zero_Of_TankCapacity+1+4,uni_flo001_init.array_u8[2]);
  671. FM25L16B_WriteByte(ADDR_Zero_Of_TankCapacity+2+4,uni_flo001_init.array_u8[1]);
  672. FM25L16B_WriteByte(ADDR_Zero_Of_TankCapacity+3+4,uni_flo001_init.array_u8[0]);
  673. break;
  674. case Set_Level_Alarm_Sensor021:
  675. uni_flo001_init.flo_Data=T2C_ALL_Sensor_Data01.MoniLiang_Data_Every_Cang[0];
  676. case Set_Level_Alarm_Sensor031:
  677. ExpansionRatio[0]=uni_flo001_init.flo_Data;
  678. FM25L16B_WriteByte(ADDR_OiLType_Data,uni_flo001_init.array_u8[3]);
  679. FM25L16B_WriteByte(ADDR_OiLType_Data+1,uni_flo001_init.array_u8[2]);
  680. FM25L16B_WriteByte(ADDR_OiLType_Data+2,uni_flo001_init.array_u8[1]);
  681. FM25L16B_WriteByte(ADDR_OiLType_Data+3,uni_flo001_init.array_u8[0]);
  682. break;
  683. case Set_Level_Alarm_Sensor022:
  684. uni_flo001_init.flo_Data=T2C_ALL_Sensor_Data02.MoniLiang_Data_Every_Cang[0];
  685. case Set_Level_Alarm_Sensor032:
  686. ExpansionRatio[1]=uni_flo001_init.flo_Data;
  687. FM25L16B_WriteByte(ADDR_OiLType_Data+4,uni_flo001_init.array_u8[3]);
  688. FM25L16B_WriteByte(ADDR_OiLType_Data+1+4,uni_flo001_init.array_u8[2]);
  689. FM25L16B_WriteByte(ADDR_OiLType_Data+2+4,uni_flo001_init.array_u8[1]);
  690. FM25L16B_WriteByte(ADDR_OiLType_Data+3+4,uni_flo001_init.array_u8[0]);
  691. break;
  692. default:
  693. break;
  694. }
  695. bak_fundebug=0;
  696. FunDebugCode = 0;
  697. input_ArrFunDebugCode[0] = 0; //input_ArrFunDebugCode[1];
  698. input_ArrFunDebugCode[1] = 0; //input_ArrFunDebugCode[2];
  699. input_ArrFunDebugCode[2] = 0; //input_ArrFunDebugCode[3];
  700. input_ArrFunDebugCode[3] = 0; //input_ArrFunDebugCode[4];
  701. input_ArrFunDebugCode[4] = 0; //input_Arr[1];
  702. uni_TempRealtime001.flo_Data = input_Arr[0] * 10.0f + input_Arr[1];
  703. uni_TempRealtime001.flo_Data = uni_TempRealtime001.flo_Data * (ManualSign);
  704. tmrForTemp_ManualInput = SPAN_Manual_Input_Temp; //手工输入温度定时器为20分钟
  705. //实时温度用户输入显示
  706. // sd000=uni_TempRealtime001.farray[3]<<24 | uni_TempRealtime001.farray[2]<<16 |uni_TempRealtime001.farray[1]<<8 | uni_TempRealtime001.farray[0];
  707. // WrDwinCmd32(0x2080,sd000);
  708. break;
  709. case 0x2e: //键盘的.键码
  710. ManualSign = ManualSign * (-1.0f);
  711. uni_TempRealtime001.flo_Data = input_Arr[0] * 10.0f + input_Arr[1];
  712. uni_TempRealtime001.flo_Data = uni_TempRealtime001.flo_Data * (ManualSign);
  713. tmrForTemp_ManualInput = SPAN_Manual_Input_Temp; //手工输入温度定时器为20分钟
  714. break;
  715. case 0x30: //按下数字键0
  716. case 0x31: //按下数字键1
  717. case 0x32: //按下数字键2
  718. case 0x34: //按下数字键4
  719. case 0x35: //按下数字键5
  720. case 0x36: //按下数字键6
  721. case 0x37: //按下数字键7
  722. case 0x38: //按下数字键8
  723. case 0x39: //按下数字键9
  724. case 0x33: //按下数字键3
  725. input_Arr[0] = input_Arr[1];
  726. input_Arr[1] = Run_mode_key_info.key - 0x30;
  727. uni_TempRealtime001.flo_Data = input_Arr[0] * 10.0f + input_Arr[1];
  728. uni_TempRealtime001.flo_Data = uni_TempRealtime001.flo_Data * (ManualSign);
  729. tmrForPrinter = 3; //立即取消打印机时间限制,按下打印按键可以立即打印
  730. //功能码匹配,类似于手机号码的*#06#;功能码必须为9开头。避开温度输入的区间
  731. input_ArrFunDebugCode[0] = input_ArrFunDebugCode[1];
  732. input_ArrFunDebugCode[1] = input_ArrFunDebugCode[2];
  733. input_ArrFunDebugCode[2] = input_ArrFunDebugCode[3];
  734. input_ArrFunDebugCode[3] = input_ArrFunDebugCode[4];
  735. input_ArrFunDebugCode[4] = input_Arr[1]; //input_ArrFunDebugCode[1];
  736. FunDebugCode = input_ArrFunDebugCode[0] * 10000 + input_ArrFunDebugCode[1] * 1000 + input_ArrFunDebugCode[2] * 100 +
  737. input_ArrFunDebugCode[3] * 10 + input_ArrFunDebugCode[4];
  738. break;
  739. case 0x06: //F4 查询----2020年12月更改为打印功能
  740. if (1) //李伟更改20210109----将F4更改为打印功能,替换掉之前未实现的查询功能
  741. {
  742. //taskENTER_CRITICAL();
  743. if (tmrForPrinter == 0)
  744. {
  745. tmrForPrinter = 15000; //启动定时器,15s内只能打印一次
  746. //xSemaphoreTake( xSemaphore_uart4, portMAX_DELAY );
  747. flag_Uart4_Busy = 1;
  748. #if (Printer_En)
  749. PrintInfo(); //打印相关信息:液位,阀门状态,车牌号,温度等
  750. #endif
  751. flag_Uart4_Busy = 0;
  752. //xSemaphoreGive( xSemaphore_uart4 );
  753. }
  754. //taskEXIT_CRITICAL();
  755. }
  756. else
  757. {
  758. Set_Select_flag = 2;
  759. Jump_page_id(38); //登录
  760. Dispay_login(0, 0);
  761. }
  762. break;
  763. case 0x10: //上
  764. // if()
  765. break;
  766. case 0x11: //下
  767. break;
  768. case 0x12: //确认
  769. if (Full_Oil_allinfo.Auto_sealedOK_ID != 0) //有施封
  770. {
  771. Jump_page_id(40); //选择油品
  772. }
  773. break;
  774. default:
  775. break;
  776. }
  777. } //主界面判断结束 李伟修改 20210212
  778. else if (Run_mode_key_info.current_page == Run_mode_key_info.Full_oil_id)
  779. { //如果是装油界面
  780. if (Run_mode_key_info.key == 0x1b)
  781. {
  782. if (Full_Oil_allinfo.Real_operation_ID == 0) //没有装油操作,标志清零
  783. Full_Oil_allinfo.Start_Full_flag = 0;
  784. Jump_page_id(Run_mode_key_info.Main_Page_id);
  785. }
  786. if (Run_mode_key_info.key == 0x02) //F2按键 F2键
  787. {
  788. if (Full_Oil_allinfo.Real_operation_ID == 0) //没有装油操作,标志清零
  789. Full_Oil_allinfo.Start_Full_flag = 0;
  790. else
  791. Full_Oil_allinfo.Start_Seal_flag = 1; //施封
  792. //20210104强制按下F2键就可以施封 李伟更改
  793. //Full_Oil_allinfo.Start_Seal_flag = 1;
  794. Jump_page_id(Run_mode_key_info.Main_Page_id);
  795. ////==0x08对应于bit3-----可以重复施封
  796. if (((Config_info_all.Config_fun_id & 0x08) == 0x08))
  797. Full_Oil_allinfo.Start_Seal_flag = 1;
  798. }
  799. //李伟修改 装油界面按下F3强制解除20分钟计时
  800. if (Run_mode_key_info.key == 0x03) //F3按键 F3键
  801. {
  802. tmrForTemp_ManualInput = 10; //强制10ms之后采用采集器或者平台下发的温度,而非手工输入的温度
  803. }
  804. }
  805. else if (Run_mode_key_info.current_page == Run_mode_key_info.offLoading_oil_id)
  806. { //卸油界面
  807. if (Run_mode_key_info.key == 0x1b)
  808. {
  809. Jump_page_id(Run_mode_key_info.Main_Page_id);
  810. }
  811. }
  812. else if (Run_mode_key_info.current_page == 40)
  813. {
  814. switch (Run_mode_key_info.key)
  815. {
  816. case 0x10: //上
  817. SetOilPagePoint++;
  818. if (SetOilPagePoint > 5)
  819. SetOilPagePoint = 0;
  820. Jump_page_id(40 + SetOilPagePoint);
  821. break;
  822. case 0x11: //下
  823. SetOilPagePoint--;
  824. if (SetOilPagePoint > 5)
  825. SetOilPagePoint = 0;
  826. Jump_page_id(40 + SetOilPagePoint);
  827. break;
  828. case 0x12: //确认
  829. if (Run_mode_key_info.current_page == 40) //当前界面是油品选择
  830. {
  831. Jump_page_id(46);
  832. }
  833. break;
  834. default:
  835. break;
  836. }
  837. }
  838. else if (Run_mode_key_info.current_page == 46)
  839. {
  840. switch (Run_mode_key_info.key)
  841. {
  842. case 0x10: //上
  843. SetStorePagePoint++;
  844. if (SetStorePagePoint > 7)
  845. SetOilPagePoint = 0;
  846. Jump_page_id(46 + SetStorePagePoint);
  847. break;
  848. case 0x11: //下
  849. SetStorePagePoint--;
  850. if (SetStorePagePoint > 7)
  851. SetStorePagePoint = 0;
  852. Jump_page_id(46 + SetStorePagePoint);
  853. break;
  854. case 0x12: //确认
  855. Jump_page_id(Run_mode_key_info.Main_Page_id);
  856. PlatformCalibrat.SetOilStyleFlag = True;
  857. PlatformCalibrat.OilStyleStore = SetStorePagePoint + 1; //仓号
  858. PlatformCalibrat.OilStyle = SetOilPagePoint + 1; //油品
  859. break;
  860. default:
  861. break;
  862. }
  863. }
  864. else if (Run_mode_key_info.current_page == Run_mode_key_info.Liquid_id)
  865. {
  866. Jump_page_id(Run_mode_key_info.Main_Page_id);
  867. }
  868. else //公用页面
  869. {
  870. switch (Run_mode_key_info.current_page)
  871. {
  872. case 32: //系统设置界面
  873. {
  874. switch (Run_mode_key_info.key)
  875. {
  876. case 0x1b: //F1
  877. memset(Input_date, 0, 20);
  878. Set_Select_flag = 0;
  879. Jump_page_id(Run_mode_key_info.Main_Page_id);
  880. break;
  881. case 0x30:
  882. break;
  883. case 0x31:
  884. memset(Input_date, 0, 20);
  885. Jump_page_id(39); //时间设置
  886. break;
  887. case 0x32:
  888. case 0x33:
  889. case 0x34:
  890. case 0x35:
  891. case 0x36:
  892. case 0x37:
  893. case 0x38:
  894. case 0x39:
  895. break;
  896. default:
  897. break;
  898. }
  899. }
  900. break;
  901. case 38: //用户登录
  902. {
  903. uint8_t i = 0;
  904. switch (Run_mode_key_info.key)
  905. {
  906. case 0x1b: //F1
  907. memset(Input_date, 0, 20);
  908. Set_Select_flag = 0;
  909. Jump_page_id(Run_mode_key_info.Main_Page_id);
  910. break;
  911. case 0x02: //F2 登录 比较密码
  912. {
  913. uint8_t length = 0;
  914. uint8_t pawd[6] = {0x38, 0x35, 0x32, 0x38, 0x37, 0x39}; //852879
  915. length = strlen((char *)Input_date); //
  916. if (memcmp(pawd, Input_date, 6) == 0) //密码一致
  917. {
  918. if (Set_Select_flag == 1) //如果是设置进入设置
  919. {
  920. Set_Select_flag = 0;
  921. Jump_page_id(32); //进入设置界面
  922. }
  923. else if (Set_Select_flag == 2) //否则进入查询
  924. {
  925. Set_Select_flag = 0;
  926. }
  927. memset(Input_date, 0, 20);
  928. }
  929. else //密码不一致,重新输入
  930. {
  931. if (length <= 6)
  932. Dispay_login(1, length);
  933. else
  934. Dispay_login(1, 6);
  935. }
  936. }
  937. break;
  938. case 0x03: //F3
  939. memset(Input_date, 0, 20);
  940. Dispay_login(0, 0);
  941. break;
  942. case 0x7f: //clear (char*)
  943. {
  944. uint8_t length = 0;
  945. length = strlen((char *)Input_date);
  946. if (length > 0)
  947. {
  948. Input_date[length - 1] = 0;
  949. length = length - 1;
  950. Dispay_login(0, length);
  951. }
  952. }
  953. break;
  954. case 0x30:
  955. case 0x31:
  956. case 0x32:
  957. case 0x33:
  958. case 0x34:
  959. case 0x35:
  960. case 0x36:
  961. case 0x37:
  962. case 0x38:
  963. case 0x39:
  964. for (i = 0; i < 6; i++)
  965. {
  966. if (Input_date[i] == 0)
  967. {
  968. Input_date[i] = Run_mode_key_info.key; //,Input_date+i
  969. Dispay_login(0, i + 1);
  970. break;
  971. }
  972. }
  973. break;
  974. default:
  975. break;
  976. }
  977. break;
  978. }
  979. case 39: //时间设置
  980. {
  981. uint8_t i = 0;
  982. switch (Run_mode_key_info.key)
  983. {
  984. case 0x1b: //F1
  985. memset(Input_date, 0, 20);
  986. Jump_page_id(Run_mode_key_info.Main_Page_id);
  987. break;
  988. case 0x02: //F2
  989. Display_input_time(1, Input_date);
  990. break;
  991. case 0x03: //F3
  992. memset(Input_date, 0, 20);
  993. Display_input_time(0, Input_date);
  994. break;
  995. case 0x7f: //clear (char*)
  996. {
  997. uint8_t length = 0;
  998. length = strlen((char *)Input_date);
  999. if (length > 0)
  1000. {
  1001. Input_date[length - 1] = 0;
  1002. Display_input_time(0, Input_date);
  1003. }
  1004. }
  1005. break;
  1006. case 0x30:
  1007. case 0x31:
  1008. case 0x32:
  1009. case 0x33:
  1010. case 0x34:
  1011. case 0x35:
  1012. case 0x36:
  1013. case 0x37:
  1014. case 0x38:
  1015. case 0x39:
  1016. for (i = 0; i < 12; i++)
  1017. {
  1018. if (Input_date[i] == 0)
  1019. {
  1020. Input_date[i] = Run_mode_key_info.key; //,Input_date+i
  1021. Display_input_time(0, Input_date);
  1022. break;
  1023. }
  1024. }
  1025. break;
  1026. default:
  1027. break;
  1028. }
  1029. break;
  1030. }
  1031. default:
  1032. break;
  1033. }
  1034. }
  1035. Run_mode_key_info.key = 0;
  1036. } //如果有按键按下--开始
  1037. //Send_alarm10S();//破封报警发送
  1038. }
  1039. //void About_KeyFunction(void)
  1040. //{
  1041. // Get_keyvalue();
  1042. // Mode_key_pageID();
  1043. //}