ソースを参照

添加压力传感器数据读取,默认支持

guoqiang 2 年 前
コミット
00a48de9ae
共有6 個のファイルを変更した276 個の追加35 個の削除を含む
  1. 2 0
      Core/Inc/cang.h
  2. 35 0
      Core/Inc/pressure.h
  3. 61 6
      Core/Src/main.c
  4. 115 0
      Core/Src/pressure.c
  5. 52 28
      MDK-ARM/caijiqiV001.uvoptx
  6. 11 1
      MDK-ARM/caijiqiV001.uvprojx

+ 2 - 0
Core/Inc/cang.h

@@ -25,6 +25,8 @@ uint16_t RKG_Num[CANG_MAX];							//8
 uint16_t BGY_Num[CANG_MAX];	            //8个仓每仓壁挂油传感器数量
 /**************************非阀门传感器信息**************************************/	
 uint16_t CZSS_Num[CANG_MAX];	          //8个仓每仓磁致伸缩数量	
+uint16_t Pressure_Num[CANG_MAX];	      //8个仓每仓压力传感器数量	
+uint16_t Pressure;  							//0:没有液位,1:FST800-801
 uint16_t Level;                   //0:没有液位,1:磁致伸缩,2:雷达液位...
 uint16_t Temperture;					  	//0: 没有温度传感器,1:1点测温,3:3点测温...
 uint16_t CRC1;

+ 35 - 0
Core/Inc/pressure.h

@@ -0,0 +1,35 @@
+#ifndef  __PRESSURE_H
+#define  __PRESSURE_H
+#include "stdint.h"
+#include "config.h"
+#include "cang.h"
+
+#define PRESSURE_BUF_DEP 8
+#define PRESSURE_STARTADDR  (0x91)
+
+typedef enum{
+	Pressure_NONE = 0,
+	Pressure_FST800_801
+}Pressure_Tpye;
+
+
+typedef struct{
+float pressure;										//液位数据
+float zero;	
+uint16_t ErrorCnt;								//液位错误计数	
+uint16_t Error;										//错误状态		
+uint16_t StateKeepNum;						//判断次数
+uint16_t RTData_Num;
+}Pressure_Inf;
+
+
+extern Pressure_Inf pressure_inf[SENSOR_DEEP];
+extern void Pressure_state(uint16_t CangNum);
+extern void Pressure_Init(void);
+extern uint8_t Prase_Pressure(uint8_t* data, uint16_t data_len);
+extern void Pressure_Error(uint8_t addr);
+
+//extern void Flash_ReadBytes(uint16_t* sorBuf,uint32_t FlashAddr,uint16_t len);
+//extern void Flash_WriteBytes(uint16_t* sorBuf,uint32_t FlashAddr,uint16_t len);
+
+#endif

+ 61 - 6
Core/Src/main.c

@@ -40,6 +40,7 @@
 #include "hdf.h"
 #include "bgy.h"
 #include "yqhs.h"
+#include "pressure.h"
 #include "iap.h"
 /* USER CODE END Includes */
 #if 0
@@ -121,12 +122,16 @@ uint8_t CMD_Angle_XY[] = {0x71,0x03,0x00,0x3d,0x00,0x03,0x00,0x00};
 uint8_t CMD_Biguayou[] = {0x81,0x03,0x00,0x00,0x00,0x01,0x9B,0xCA};
 //uint8_t CMD_Angle_X[] = {0xE0,0x03,0x00,0x02,0x00,0x02,0x00,0x00};   
 //uint8_t CMD_Angle_Y[] = {0xE1,0x03,0x00,0x02,0x00,0x02,0x00,0x00};
+
 uint8_t CMD_LDYW[8]={0x51,0x04,0x0a,0x0f,0x00,0x02};//设备地址,功能码,地址4字节   反回:设备地址,功能码,数据长度,数据4字节
+
 uint8_t CMD_GetTempAndYewei[8]={0x51, 0x04, 00, 00, 00, 0x10, 0x03 ,0xae};//读取编号为04地址的温度传感器数据
 //61-6f 03 00 04 00 01 C6 8A----读取华天传感器的第1个温度点,地址为x10;最接近电子仓的温度点
 uint8_t CMD_GetTempHuaTian[8]={0x61, 0x03, 00, 04, 00, 01,0,0};//读取华天传感器的第一个温度点
 
-uint8_t CMD_Pressure[8]={0x91, 0x03, 00, 00, 00, 02,0,0}; //FST800-801 读取压力数据, 没有标零指令
+
+
+uint8_t CMD_Pressure[8]={PRESSURE_STARTADDR, 0x03, 0x00, 0x00, 0x00, 0x02,0,0}; //FST800-801 读取压力数据, 没有标零指令
 
 
 
@@ -883,6 +888,7 @@ int main(void)
 	RKG_Init();
 	XYF_Init();
 	BGY_Init();
+	Pressure_Init();
   /* USER CODE END Init */
 
   /* Configure the system clock */
@@ -1722,6 +1728,8 @@ void StartTask02(void *argument)				 															//卸
 	XYF_Inf* pxyf = xyf_inf;
 	Cang_Inf* pcang = &cang_inf;
 	Angle_Inf* pangle = &angle_inf;
+	Pressure_Inf* pPressure = pressure_inf;
+	uint8_t pressureaddr_max = 0;
 	
 	xyfaddr_max=0;
 	hdfaddr_max=0;
@@ -1729,6 +1737,8 @@ void StartTask02(void *argument)				 															//卸
 	{
 		xyfaddr_max += pcang->XYF_Num[i];
 		hdfaddr_max += pcang->HDF_Num[i];
+		
+		pressureaddr_max += pcang->Pressure_Num[i];
 	}
 	i = 0;
 	
@@ -1752,10 +1762,12 @@ void StartTask02(void *argument)				 															//卸
 		{
 			xyfaddr_max = 0;
 			hdfaddr_max = 0;
+			pressureaddr_max = 0;
 			for(i = 0;i < pcang->Cang_Num;i++)
 			{
 				xyfaddr_max += pcang->XYF_Num[i];
 				hdfaddr_max += pcang->HDF_Num[i];
+				pressureaddr_max += pcang->Pressure_Num[i];
 			}
 			Flash_Change = 0;
 		}
@@ -1884,10 +1896,36 @@ void StartTask02(void *argument)				 															//卸
 					}
 					else
 					{
-							i001=0;
-							continue;
+							i001=15;
 					}
-			}					
+			}
+			
+			if(i001 == 15){
+				
+				if(pcang->Pressure){
+					
+					ModbusCRC = LIB_CRC_MODBUS(CMD_Pressure, 6);
+					CMD_Pressure[6] = ModbusCRC >> 8;
+					CMD_Pressure[7] = ModbusCRC & 0xff;
+					HAL_GPIO_WritePin(GPIOB, con02_uart3_xieyoufa_Pin, GPIO_PIN_RESET);
+					delay_sys_us(80);
+					HAL_UART_Transmit(&huart3, CMD_Pressure, 8, 100); //只支持单指令读角度取传感器数据
+					delay_sys_us(80);
+					HAL_GPIO_WritePin(GPIOB, con02_uart3_xieyoufa_Pin, GPIO_PIN_SET);
+
+					pPressure[CMD_Pressure[0] - PRESSURE_STARTADDR].RTData_Num++; //每个传感器发送帧累加
+
+					if (CMD_Pressure[0] - PRESSURE_STARTADDR +1 < pressureaddr_max)
+						CMD_Pressure[0]++;
+					else
+						CMD_Pressure[0] = PRESSURE_STARTADDR;
+					
+				}else{
+					i001=0;
+					continue;
+				}
+			
+			}
 		}
 		else											//平台通过卸油阀总线直接操作传感器
 		{
@@ -2064,21 +2102,36 @@ void StartTask02(void *argument)				 															//卸
 						//整理卸油阀协议后添加
 					
 					}
+					
+					i001=6;
+					continue;
 				}
 			}
 			else if(USART3_RX_BUF002[0] >= 0x20 && USART3_RX_BUF002[0] <= 0x2F )  //智能海底阀数据
 			{
 				
 				Get_ZN_hdf_data();
+				i001 = 12;
+				  continue;
 			
 			}
 			else if(USART3_RX_BUF002[0] == 0xe4)                                  //油气回收数据
 			{
 			  Get_Yqhuishou_data();
+				i001 = 15;
+				  continue;
 			}
 			else if(USART3_RX_BUF002[0] >= 0x81 && USART3_RX_BUF002[0] <= 0x8F)   //壁挂油数据
 			{
-				Get_Biguayou_data();       
+				  Get_Biguayou_data();  
+					i001 = 9;
+				  continue;
+			}else if(USART3_RX_BUF002[0] >= 0x91 && USART3_RX_BUF002[0] <= 0x9F)
+			{
+				if(0 == Prase_Pressure(USART3_RX_BUF002, 9)){
+					i001 = 0;
+					continue;
+				}
 			}
 
 
@@ -2105,7 +2158,9 @@ void StartTask02(void *argument)				 															//卸
 				}
 			}
 		}
-		if(i001<15)
+		
+		
+		if(i001<18)
 			i001++;
 		else
 			i001 = 0;

+ 115 - 0
Core/Src/pressure.c

@@ -0,0 +1,115 @@
+#include "pressure.h"
+#include "main.h"
+#include "usart.h"
+
+Pressure_Inf pressure_inf[SENSOR_DEEP];
+uint8_t Pressure_Max = 0;
+
+void Pressure_state(uint16_t CangNum)
+{
+
+}
+
+void Pressure_Init(void)
+{
+	Cang_Inf* pcang = &cang_inf;
+	uint8_t i = 0;
+	
+	pcang->Pressure = Pressure_FST800_801;
+	
+
+	for(i = 0;i < pcang->Cang_Num;i++)
+	{
+			pcang->Pressure_Num[i] = 1;
+	}
+	
+	Pressure_Max = 0;
+	
+	for(i = 0;i < pcang->Cang_Num;i++)
+	 Pressure_Max +=pcang->Pressure_Num[i];
+	
+	if(Pressure_Max > SENSOR_DEEP){
+		Pressure_Max = SENSOR_DEEP;
+	}
+	
+	
+}
+
+uint8_t Prase_Pressure(uint8_t* data, uint16_t data_len)
+{
+	uint16_t ModbusCRC;
+	uint8_t receive_error = 0;
+	uint8_t id = 0;
+	
+	typedef union{
+   float value;
+   uint8_t arr[4];
+  }Hex_to_float;
+	
+	static Hex_to_float hex_to_float;
+	
+	
+	ModbusCRC = data[7]<<8;
+	ModbusCRC |= data[8];
+	
+	if(data[1]!=0x03&&data[1]!=0x06)              //校验读写属性
+	{
+		receive_error = 1;
+	}
+	else if(data[2] != 0x04)			//校验数据长度
+	{
+		receive_error = 1;
+	}
+	else if(ModbusCRC != LIB_CRC_MODBUS(data,7))		//校验CRC
+	{
+		receive_error = 1;
+	}
+	
+	id = data[0]-PRESSURE_STARTADDR;
+	if(id >= SENSOR_DEEP){
+		receive_error = 1;
+	}
+	
+	if(receive_error == 0){
+		
+		pressure_inf[id].ErrorCnt = 0;
+		pressure_inf[id].Error = 0;
+		
+		if(data[1] == 0x03){
+			
+						hex_to_float.arr[0] = data[4];
+					  hex_to_float.arr[1] = data[3];
+					  hex_to_float.arr[2] = data[6];
+					  hex_to_float.arr[3] = data[5];					
+						pressure_inf[id].pressure = hex_to_float.value;
+		}
+		
+		return 0;
+	
+	}else{
+	
+		Pressure_Error(data[0]);
+		
+		return 1;
+	}
+				
+}
+
+void Pressure_Error(uint8_t addr)
+{
+	uint8_t id =0;
+	Cang_Inf* pcang = &cang_inf;
+	
+	id = addr-PRESSURE_STARTADDR;
+	if(id >= SENSOR_DEEP){
+		return ;
+	}
+	
+	pressure_inf[id].ErrorCnt++;
+	
+	if (pressure_inf[id].ErrorCnt > pcang->sensorBusMaxReTry)
+	{
+		pressure_inf[id].ErrorCnt = pcang->sensorBusMaxReTry + 1;
+		pressure_inf[id].Error = 1;
+	}
+}

+ 52 - 28
MDK-ARM/caijiqiV001.uvoptx

@@ -545,6 +545,30 @@
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
+    <File>
+      <GroupNumber>2</GroupNumber>
+      <FileNumber>21</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Core\Src\pressure.c</PathWithFileName>
+      <FilenameWithoutPath>pressure.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>2</GroupNumber>
+      <FileNumber>22</FileNumber>
+      <FileType>5</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Core\Inc\pressure.h</PathWithFileName>
+      <FilenameWithoutPath>pressure.h</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
   </Group>
 
   <Group>
@@ -555,7 +579,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>21</FileNumber>
+      <FileNumber>23</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -575,7 +599,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>22</FileNumber>
+      <FileNumber>24</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -587,7 +611,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>23</FileNumber>
+      <FileNumber>25</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -599,7 +623,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>24</FileNumber>
+      <FileNumber>26</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -611,7 +635,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>25</FileNumber>
+      <FileNumber>27</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -623,7 +647,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>26</FileNumber>
+      <FileNumber>28</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -635,7 +659,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>27</FileNumber>
+      <FileNumber>29</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -647,7 +671,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>28</FileNumber>
+      <FileNumber>30</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -659,7 +683,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>29</FileNumber>
+      <FileNumber>31</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -671,7 +695,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>30</FileNumber>
+      <FileNumber>32</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -683,7 +707,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>31</FileNumber>
+      <FileNumber>33</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -695,7 +719,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>32</FileNumber>
+      <FileNumber>34</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -707,7 +731,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>33</FileNumber>
+      <FileNumber>35</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -719,7 +743,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>34</FileNumber>
+      <FileNumber>36</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -731,7 +755,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>35</FileNumber>
+      <FileNumber>37</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -743,7 +767,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>36</FileNumber>
+      <FileNumber>38</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -755,7 +779,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>37</FileNumber>
+      <FileNumber>39</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -767,7 +791,7 @@
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>38</FileNumber>
+      <FileNumber>40</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -787,7 +811,7 @@
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>39</FileNumber>
+      <FileNumber>41</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -799,7 +823,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>40</FileNumber>
+      <FileNumber>42</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -811,7 +835,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>41</FileNumber>
+      <FileNumber>43</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -823,7 +847,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>42</FileNumber>
+      <FileNumber>44</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -835,7 +859,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>43</FileNumber>
+      <FileNumber>45</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -847,7 +871,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>44</FileNumber>
+      <FileNumber>46</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -859,7 +883,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>45</FileNumber>
+      <FileNumber>47</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -871,7 +895,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>46</FileNumber>
+      <FileNumber>48</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -883,7 +907,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>47</FileNumber>
+      <FileNumber>49</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -895,7 +919,7 @@
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>48</FileNumber>
+      <FileNumber>50</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>

+ 11 - 1
MDK-ARM/caijiqiV001.uvprojx

@@ -16,7 +16,7 @@
         <TargetCommonOption>
           <Device>STM32F103RE</Device>
           <Vendor>STMicroelectronics</Vendor>
-          <PackID>Keil.STM32F1xx_DFP.2.1.0</PackID>
+          <PackID>Keil.STM32F1xx_DFP.2.3.0</PackID>
           <PackURL>http://www.keil.com/pack/</PackURL>
           <Cpu>IRAM(0x20000000-0x2000FFFF) IROM(0x8000000-0x807FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") TZ</Cpu>
           <FlashUtilSpec></FlashUtilSpec>
@@ -488,6 +488,16 @@
               <FileType>1</FileType>
               <FilePath>..\Core\Src\md5c.c</FilePath>
             </File>
+            <File>
+              <FileName>pressure.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Core\Src\pressure.c</FilePath>
+            </File>
+            <File>
+              <FileName>pressure.h</FileName>
+              <FileType>5</FileType>
+              <FilePath>..\Core\Inc\pressure.h</FilePath>
+            </File>
           </Files>
         </Group>
         <Group>