CollectMaster485.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385
  1. #ifndef __COLLECTMASTER485_H
  2. #define __COLLECTMASTER485_H
  3. #include "stm32f7xx_hal.h"
  4. #include "TerminalSlave485.h"
  5. //////////////////////////////////////////////////////////////////////////////////
  6. //临时定义一下卸尽状态,后续根据485读来的值进行判断
  7. #define EN_Read_Press 1
  8. #define EN_Read_YeWei 1
  9. #define EN_Read_Temperature 1
  10. #define indexHaiDiFa01 18
  11. #define indexXieYouFa01 19
  12. #define indexDaGai01 20
  13. #define indexXiaoGai01 21
  14. #define indexHaiDiFa02 28
  15. #define indexXieYouFa02 29
  16. #define indexDaGai02 20
  17. #define indexXiaoGai02 21
  18. #define indexHaiDiFa03 38
  19. #define indexXieYouFa03 39
  20. #define indexDaGai03 30
  21. #define indexXiaoGai03 31
  22. #define indexHaiDiFa04 48
  23. #define indexXieYouFa04 49
  24. #define indexDaGai04 40
  25. #define indexXiaoGai04 41
  26. #define U32_BIT_00 ((uint32_t)0x00000001U)
  27. #define U32_BIT_01 ((uint32_t)0x00000002U)
  28. #define U32_BIT_02 ((uint32_t)0x00000004U)
  29. #define U32_BIT_03 ((uint32_t)0x00000008U)
  30. #define U32_BIT_04 ((uint32_t)0x00000010U)
  31. #define U32_BIT_05 ((uint32_t)0x00000020U)
  32. #define U32_BIT_06 ((uint32_t)0x00000040U)
  33. #define U32_BIT_07 ((uint32_t)0x00000080U)
  34. #define U32_BIT_08 ((uint32_t)0x00000100U)
  35. #define U32_BIT_09 ((uint32_t)0x00000200U)
  36. #define U32_BIT_10 ((uint32_t)0x00000400U)
  37. #define U32_BIT_11 ((uint32_t)0x00000800U)
  38. #define U32_BIT_12 ((uint32_t)0x00001000U)
  39. #define U32_BIT_13 ((uint32_t)0x00002000U)
  40. #define U32_BIT_14 ((uint32_t)0x00004000U)
  41. #define U32_BIT_15 ((uint32_t)0x00008000U)
  42. #define U32_BIT_16 ((uint32_t)0x00010000U)
  43. #define U32_BIT_17 ((uint32_t)0x00020000U)
  44. #define U32_BIT_18 ((uint32_t)0x00040000U)
  45. #define U32_BIT_19 ((uint32_t)0x00080000U)
  46. #define U32_BIT_20 ((uint32_t)0x00100000U)
  47. #define U32_BIT_21 ((uint32_t)0x00200000U)
  48. #define U32_BIT_22 ((uint32_t)0x00400000U)
  49. #define U32_BIT_23 ((uint32_t)0x00800000U)
  50. #define U32_BIT_24 ((uint32_t)0x01000000U)
  51. #define U32_BIT_25 ((uint32_t)0x02000000U)
  52. #define U32_BIT_26 ((uint32_t)0x04000000U)
  53. #define U32_BIT_27 ((uint32_t)0x08000000U)
  54. #define U32_BIT_28 ((uint32_t)0x10000000U)
  55. #define U32_BIT_29 ((uint32_t)0x20000000U)
  56. #define U32_BIT_30 ((uint32_t)0x40000000U)
  57. #define U32_BIT_31 ((uint32_t)0x80000000U)
  58. //236字节的数组偏移量 16+8=24;接下来为52个浮点数数据=8个整车数据+4个*11个每仓=52
  59. #define MoiLiangFrom_CaijibanOffset 24
  60. #define ALL_SensorData_From_CaijibanOffset 16
  61. #define FloatData_Num_Caijiban 52
  62. #define LengthOfData_From_Caijiban_Cang_1to4 236
  63. #define LengthOfData_From_Caijiban_Cang_01 150 //每仓数据长度长度为帧头16+4*33+crc2=150字节
  64. #define LengthOfData_From_Caijiban_WholeCar 98 //每仓数据长度长度为帧头16+4*20+crc2=98字节
  65. //总长度为33个4字节-----每仓传感器数量
  66. #define ALL_Sensor_Data_Num_Caijiban 33
  67. //总长度为20个4字节-----整车传感器数量
  68. #define ALL_Sensor_Data_Num_WholeCar 20
  69. #define NumOf_WenYouPanduan 300 //是否进行了稳油操作 稳油判断
  70. extern uint8_t Pneumatic_PR1 ;
  71. extern uint8_t Pneumatic_PR2 ;
  72. extern uint8_t Pneumatic_PR3 ;
  73. extern uint8_t Pneumatic_PR4 ;
  74. typedef struct
  75. {
  76. uint8_t ErrorCode_Collect;
  77. uint8_t ValveState_Num1; //1仓阀门开关状态 低四位Bit0:关 Bit1:开 高四位Bit0:正常 Bit1:异常
  78. uint8_t ValveState_Num2; //2仓阀门开关状态 X X X X X X X X
  79. uint8_t ValveState_Num3; //3仓阀门开关状态 | | | | | | | |__________1仓大盖开关状态 0:关 1:开
  80. uint8_t ValveState_Num4; //4仓阀门开关状态 | | | | | | |____________2仓大盖开关状态 0:关 1:开
  81. uint8_t ValveState_Num5; //5仓阀门开关状态 | | | | | |______________3仓大盖开关状态 0:关 1:开
  82. uint8_t ValveState_Num6; //6仓阀门开关状态 | | | | |________________4仓大盖开关状态 0:关 1:开
  83. uint8_t ValveState_Num7; //7仓阀门开关状态 | | | |__________________1仓大盖异常状态 0:正常 1:异常
  84. uint8_t ValveState_Num8; //8仓阀门开关状态 | | |____________________2仓大盖异常状态 0:正常 1:异常
  85. uint8_t UnloadState_Num1; //1仓卸尽传感器状态 | |______________________3仓大盖异常状态 0:正常 1:异常
  86. uint8_t UnloadState_Num2; //2仓卸尽传感器状态 |________________________4仓大盖异常状态 0:正常 1:异常
  87. uint8_t UnloadState_Num3; //3仓卸尽传感器状态
  88. uint8_t UnloadState_Num4; //4仓卸尽传感器状态
  89. uint8_t UnloadState_Num5; //5仓卸尽传感器状态
  90. uint8_t UnloadState_Num6; //6仓卸尽传感器状态
  91. uint8_t UnloadState_Num7; //7仓卸尽传感器状态
  92. uint8_t UnloadState_Num8; //8仓卸尽传感器状态
  93. uint8_t Write_StorNum;
  94. uint8_t Collect_CommError;//采集器通信错误,排除软件设计有误,有错误默认采集器通信不上或者其他原因
  95. }Collect485_TypeDef;
  96. extern Collect485_TypeDef Collect485;
  97. typedef struct
  98. {
  99. uint8_t Stor_ID; //分配的仓号
  100. uint8_t rkgID[3]; //人孔盖ID号
  101. uint8_t stat[2]; //人孔小盖,人孔盖状态
  102. //uint16_t yewei[2]; //液位
  103. int16_t yewei[2]; //液位 20210120-------整形数表示的液位,单位为0.1mm
  104. uint32_t Press; //压力值
  105. uint16_t Volume; //体积
  106. //20210331更改为有符号数据,因为目前的倾角传感器输出为有符号数据 李伟修改
  107. int16_t QingJiao;//倾角数据 角度范围0--360
  108. //uint16_t QingJiao;//倾角数据 角度范围0--360
  109. float QingJiaoFlo;
  110. uint8_t xyf_state;//卸油阀状态
  111. uint8_t hdf_state;//海底阀状态
  112. uint8_t Oil_sate; //装卸油状态
  113. float Temperature;//温度
  114. float yewei_flo[2]; //液位 20210305--浮点数表示的液位,单位为mm
  115. //float GasPressure;//压力
  116. //灌仓温度
  117. }STOR_TypeDef;
  118. extern STOR_TypeDef Stor[8];
  119. typedef struct
  120. {
  121. uint8_t xyf[8]; //卸油阀状态缓存
  122. uint8_t bottm[8] ;//海底阀状态缓存
  123. uint8_t rkgx[8]; //人孔小盖状态缓存
  124. uint8_t rkg[8] ; //人孔盖状态缓存
  125. }STatetemp_TypeDef;
  126. extern STatetemp_TypeDef Statetemp,Fg;
  127. typedef struct
  128. {
  129. uint8_t StartCalibrat_Flag;
  130. uint16_t Threshold_Angle;
  131. uint16_t Times;
  132. uint16_t Reserve_Register;
  133. uint8_t Restart_Controller;
  134. uint8_t Restart_Collect;
  135. uint8_t Restart_ErHeYi;
  136. uint8_t Restart_Encoder;
  137. uint8_t Restart_Function;
  138. uint8_t ReturnData;
  139. uint8_t DeviceNum;
  140. uint8_t FunctionCode;
  141. uint8_t DeviceAddr;
  142. uint8_t SetOilStyleFlag;//在家新增
  143. uint8_t OilStyleStore;//在家新增,油品种类仓号
  144. uint8_t OilStyle;//在家新增
  145. uint8_t ErrorStore;//在家新增,异常仓号
  146. uint8_t ErrorStyle;//在家新增,异常种类
  147. uint8_t ErrorFlag;//异常标志
  148. }Calibrat_TypeDef;
  149. ///////////////新疆样机项目添加,在屏幕上独立显示温度、液位、倾角等参数
  150. //李伟 20201211
  151. typedef union{
  152. float flo_Data;
  153. char farray[4];
  154. uint32_t u32Dat;
  155. } uni_temper;//uni_temper001;//温度参数,浮点数表示
  156. typedef union{
  157. float flo_Data;
  158. char array_u8[4];
  159. uint32_t u32Dat;
  160. } uni_float;//uni_temper001;//4字节浮点数表示
  161. typedef union{
  162. float flo_Data;
  163. uint8_t farray[4];
  164. uint32_t u32Dat;
  165. } uni_OilDensity;//密度参数,浮点数表示
  166. //李伟修改 20210305 以浮点数格式上发给平台温度与液位数据----开始
  167. typedef union{
  168. float flo_Data;
  169. uint8_t farray[4];
  170. uint32_t u32Dat;
  171. } uni_YeweiToPlatForm;//上发至平台的4字节液位数据,浮点数格式
  172. typedef union{
  173. float flo_Data;
  174. uint8_t farray[4];
  175. uint32_t u32Dat;
  176. } uni_TempToPlatForm;//上发至平台的4字节温度数据,浮点数格式
  177. //李伟修改 20210305 以浮点数格式上发给平台温度与液位数据----结束
  178. typedef union{
  179. float flo_Data;
  180. char farray[4];
  181. } uni_QingJiao;//uni_temper001;//倾角参数,浮点数表示
  182. typedef union{
  183. float flo_Data;
  184. char farray[4];
  185. uint32_t u32Dat;
  186. } uni_LiqLev;//uni_LiqLev001;//液位;liquid level
  187. typedef union {
  188. float flo_Data;
  189. char farray[4];
  190. }uni_TankVol_Realtime;//uni_TankVol_Realtime001;//实时换算出的罐容
  191. typedef union {
  192. float flo_Data;
  193. char farray[4];
  194. }uni_TankVol_Tempe20;//uni_TankVol_Tempe20_001;//温度为20时候的罐容
  195. typedef union {
  196. float flo_Data;
  197. char farray[4];
  198. uint32_t u32_Data;
  199. }uni_Float;//浮点数表示为4字节数组
  200. typedef union {
  201. float flo_Data;
  202. char farray[4];
  203. }uni_IncliAngle;//倾角
  204. typedef union {
  205. float flo_Data;
  206. char farray[4];
  207. }uni_GasPressure;//气压
  208. typedef union {
  209. float flo_Data;
  210. char farray[4];
  211. }uni_OilWeight;//重量
  212. typedef union {
  213. float flo_Data;
  214. char farray[4];
  215. }uni_LeiDaYewei;//雷达液位
  216. extern uni_IncliAngle uni_IncliAngle001;
  217. extern uni_TankVol_Tempe20 uni_TankVol_Tempe20_001,uni_TankVol_Tempe20_002,uni_TempRealtime001;
  218. extern uni_TankVol_Realtime uni_TankVol_Realtime001,uni_TankVol_Realtime002,uni_TankVol_Realtime003,uni_TankVol_Realtime004;
  219. extern uni_temper uni_temper001,uni_temper002,uni_temper003,uni_temper004;
  220. extern uni_QingJiao uni_QingJiao001,uni_QingJiao002;
  221. extern uni_LiqLev uni_LiqLev001,uni_LiqLev002,uni_LiqLev003,uni_LiqLev004;//4个仓位的液位高度数据
  222. extern uni_GasPressure uni_GasPressure001;
  223. extern uni_OilWeight uni_OilWeight001;
  224. extern uni_OilDensity uni_OilDensity001;
  225. extern uni_LeiDaYewei uni_LeiDaYewei001;
  226. extern uint8_t CabinetNumForWenYou;
  227. //李伟修改 20210305
  228. extern uni_YeweiToPlatForm uni_YeweiToPlatForm001,uni_YeweiToPlatForm002,uni_YeweiToPlatForm003,uni_YeweiToPlatForm004;
  229. extern uni_TempToPlatForm uni_TempToPlatForm001,uni_TempToPlatForm002;
  230. extern float Zero_Of_LiquidMeter[8];//8个仓的雷达液位计零点参数
  231. extern float Zero_Of_TankCapacity[8];//8个仓的罐容表零点参数
  232. extern uint8_t HaiDiFa001;//8个海底阀的状态
  233. //20210129李伟修改---增加一个全局数组用于保存8个仓的阀门状态(按照平台的位定义协议进行组包)
  234. extern uint8_t Array_Of_Valve[32];
  235. //20210201李伟修改---增加一个全局数组用于上传按下打印键之后的车辆状态
  236. //具体详见<控制器平台通信协议增加20210126李伟修改回传数据格式.xlsx>
  237. extern uint8_t Array_Of_Tank_0x64[68];//
  238. extern float ArrOfTempeSensor_Flo[3];//三点式温度传感器的数据
  239. //extern float ArrYewei[300];
  240. extern float ArrYeweiForWenyou[NumOf_WenYouPanduan+3];//存储300s的液位数据 打印的时候作为是否稳油判断依据
  241. extern float Yewei_max000,Yewei_min000,Yewei_peak000;
  242. extern uint8_t Array_Of_IO_0xA1[64];//
  243. extern uint32_t IO_OnOff_State01,IO_OnOff_State02,IO_OnOff_State03,IO_OnOff_State04;
  244. extern uint32_t IO_Exception_State01,IO_Exception_State02,IO_Exception_State03,IO_Exception_State04;
  245. extern uint32_t IO_OnOff_StateArr[];//
  246. extern uint32_t IO_Exception_StateArr[];
  247. extern uint16_t Usart2_ErrorTimes,chkRetCaiJiBan;
  248. extern uint8_t Array_IO_OnOff_AllStore[];
  249. extern uint8_t Array_IO_Exception_AllStore[];
  250. extern uint8_t ValState01,ValState02,ValState03,ValState04,ValState05,ValState06,ValState07,ValState08;
  251. extern Calibrat_TypeDef PlatformCalibrat;
  252. extern uint8_t StoreNumber,all_Store;
  253. #define Uart2_BUF_SIZE 1024u /*为UART2、3专门开一个DMA接收存储区 2021-4-12 by Daiyf*/
  254. extern uint8_t USART2_RX_BUF_Collector[Uart2_BUF_SIZE];
  255. extern uint8_t ValStateArr_0x13[64],ValStateArr_PoFeng_0x13[64];//破封时的阀门状态
  256. extern uint8_t ValStateArr_0x20[64],ValStateArr_PoFeng_0x20[64];//破封时的阀门状态
  257. extern uint8_t ValStateArr_0x20_Cang01[64],ValStateArr_PoFeng_0x20_Cang01[64];//破封时的阀门状态
  258. extern uint8_t ValStateArr_0x20_Cang02[64],ValStateArr_PoFeng_0x20_Cang02[64];//破封时的阀门状态
  259. extern uint8_t ValStateArr_0x20_Cang03[64],ValStateArr_PoFeng_0x20_Cang03[64];//破封时的阀门状态
  260. extern uint8_t ValStateArr_0x20_Cang04[64],ValStateArr_PoFeng_0x20_Cang04[64];//破封时的阀门状态
  261. //uint8_t CheckInFrame_Collect485(void);
  262. uint16_t CheckInFrame_Collect485(uint16_t LenRx,uint16_t MsgID);
  263. void TestUsart2_Receive(void);
  264. void CollectMaster485_Send_Data(uint8_t *buf,uint16_t len);
  265. void CollectMaster485_TX_Set(uint8_t en);
  266. void ReadAllStoreValue(void);
  267. void ReadCollect_QingJiao_TX(void);
  268. void CollectData_Transform_UsefullData(void);//实时数据转换
  269. void Immediate_Processing_Function(void);//新增
  270. void Send_Yewei_offset_To_Collect(void);//
  271. void ValStateConvertTo91(void);
  272. void UpdateWenYouFifo(void);//稳油数据更新
  273. void Get_All_Moniliang_Data_4Cang(uint16_t GroupNum);
  274. //void ReadCollect_ValveState_64Byte(uint8_t CangNum);
  275. void ReadCollect_ValveState_64Byte(uint16_t para001,uint16_t para002,uint16_t para003,uint16_t para004,uint16_t para005);
  276. void Parse_AllSensor_Data_For_SingleStore(sT2C_ALL_Sensor_Data_Each_Cang* pT2C_ALL_Sensor_Data,uint16_t msgID);
  277. void Parse_AllSensor_Data_For_WholeCar(sT2C_ALL_Sensor_Data_WholeCar* pT2C_ALL_Sensor_Data,uint16_t msgID,uint16_t LenOfPara);
  278. void Parse_0x0020_Data_64Byte(void);
  279. void Parse_0x0013_Data(void);
  280. void Translate_IO_to_U32Bit(void);
  281. void Translate_IO_to_U32Bit_V2(void);
  282. #endif