浏览代码

1.增加卸油阀和人孔盖的I/O类型

zhuzl 3 年之前
父节点
当前提交
9193a3579c
共有 8 个文件被更改,包括 4498 次插入4463 次删除
  1. 1 0
      Core/Inc/kzq.h
  2. 70 9
      Core/Src/hdf.c
  3. 13 3
      Core/Src/kzq.c
  4. 51 67
      Core/Src/main.c
  5. 1 1
      Core/Src/xyf.c
  6. 6 0
      MDK-ARM/RTE/_caijiqiV001/RTE_Components.h
  7. 1 1
      MDK-ARM/caijiqiV001.uvoptx
  8. 4355 4382
      MDK-ARM/caijiqiV001/DZQF-CJB09A0_20220209_Temp1.hex

+ 1 - 0
Core/Inc/kzq.h

@@ -58,6 +58,7 @@ extern uint16_t RKG_SetTypeNum(uint8_t* pTx);
 
 
 extern void Sen_CangState_old(uint8_t* F_STATE);
+uint16_t Read_SoftVersion(uint8_t *pTx);
 
 #endif
 

+ 70 - 9
Core/Src/hdf.c

@@ -9,24 +9,85 @@ uint8_t Get_DFState(uint8_t Cang_Num)    //
 	return !phdf[Cang_Num].HDF_OFData[0];
 }
 
+GPIO_PinState Get_Pin(int Pin_No)
+{
+	GPIO_PinState Pin_sts;
+	switch (Pin_No)
+	{
+	case 0:
+		Pin_sts = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_14);
+		break;
+	case 1:
+		Pin_sts = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_15);
+		break;
+	case 2:
+		Pin_sts = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_6);
+		break;
+	case 3:
+		Pin_sts = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_7);
+		break;
+	case 4:
+		Pin_sts = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_8);
+		break;
+	case 5:
+		Pin_sts = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_9);
+		break;
+	case 6:
+		Pin_sts = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_8);
+		break;
+	case 7:
+		Pin_sts = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_11);
+		break;
+	default:
+		break;
+	}
+	return Pin_sts;
+}
+
+
 void DF_State(uint8_t Cang_Num)         //查询仓底阀状态
 {
 	Cang_Inf* pcang = &cang_inf;
+	XYF_Inf* pxyf = xyf_inf;
+	RKG_Inf* prkg = rkg_inf;
 	HDF_Inf* phdf = hdf_inf;
-  uint8_t i = 0,j = 0,HDF_MAX = 3;
+  	uint8_t i = 0,j = 0,HDF_MAX = 3,PinNo;
 	
 	if(pcang->HDF_Type == 0)         //底阀监测器
 	{
 		if(i < HDF_BUF_DEP)
 		{
-			phdf[1].HDF_OFData[i] = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_14);
-			phdf[2].HDF_OFData[i] = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_15);
-			phdf[3].HDF_OFData[i] = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_6);
-			phdf[4].HDF_OFData[i] = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_7);
-			phdf[5].HDF_OFData[i] = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_8);
-			phdf[6].HDF_OFData[i] = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_9);
-			phdf[7].HDF_OFData[i] = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_8);
-			phdf[8].HDF_OFData[i] = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_11);
+			PinNo = 0;
+			if (pcang->XYF_Type == 2)
+			{
+				for (j = 0, HDF_MAX = 0; j < pcang->Cang_Num; ++j)
+				{
+					HDF_MAX += pcang->XYF_Num[j];
+				}
+				for (j = 0; j < HDF_MAX; ++j)
+				{
+					pxyf[j + 1].XYF_State1 = Get_Pin(PinNo++);
+				}
+			}
+			if (pcang->RKG_Type == 2)
+			{
+				for (j = 0, HDF_MAX = 0; j < pcang->Cang_Num; ++j)
+				{
+					HDF_MAX += pcang->RKG_Num[j];
+				}
+				for (j = 0; j < HDF_MAX; ++j)
+				{
+					prkg[1 + j].RKDG_State = Get_Pin(PinNo++);
+				}
+			}
+			for (j = 0, HDF_MAX = 0; j < pcang->Cang_Num; ++j)
+			{
+				HDF_MAX += pcang->HDF_Num[j];
+			}
+			for (j = 0; j < HDF_MAX; ++j)
+			{
+				phdf[1 + j].HDF_OFData[i] = Get_Pin(PinNo++);
+			}
 			i++;
 		}
 		if(i >= HDF_BUF_DEP)

+ 13 - 3
Core/Src/kzq.c

@@ -3882,6 +3882,16 @@ uint16_t Tem_SetType(uint8_t* pTx)
 	else
 		return 0;
 }
-
-
-
+uint32_t Version_Soft[8] = {2, 1, 3, 9, 1, 1, 0, 20220414};
+uint16_t Read_SoftVersion(uint8_t *pTx)
+{
+	int i;
+	for (i = 0; i < 8; ++i)
+	{
+		pTx[i * 4+16] = (Version_Soft[i] >> 24) & 0xff;
+		pTx[i * 4 + 1+16] = (Version_Soft[i] >> 16) & 0xff;
+		pTx[i * 4 + 2+16] = (Version_Soft[i] >> 8) & 0xff;
+		pTx[i * 4 + 3+16] = (Version_Soft[i] >> 0) & 0xff;
+	}
+	return 1;
+}

+ 51 - 67
Core/Src/main.c

@@ -1710,78 +1710,59 @@ void StartTask02(void *argument)				 															//卸
 
 			if(i001==0)  	//发送卸油阀传感器命令轮询
 			{
-				if(pcang->XYF_INSTALL != 0)
-		    {
+				if ((pcang->XYF_INSTALL != 0) && (pcang->XYF_Type != 2))
+				{
 
-				ModbusCRC = LIB_CRC_MODBUS(CMD_XYF,6);
-				CMD_XYF[6] = ModbusCRC>>8;
-				CMD_XYF[7] = ModbusCRC&0xff;
-				HAL_GPIO_WritePin(GPIOB,con02_uart3_xieyoufa_Pin,GPIO_PIN_RESET);//
-				delay_sys_us(80);
-#if  0																																				
-//				if((pcang->XYF_Type == 1)||(CMD_XYF[0] == 0x11))																			//中化测试用
-			//	if(pcang->XYF_Type == 1)
-			//		HAL_UART_Transmit(&huart3,Data_Head,2,10);																//发送帧头
-				HAL_UART_Transmit(&huart3,CMD_XYF,8,100);
-//				if((pcang->XYF_Type == 1)||(CMD_XYF[0] == 0x11))																			//中化测试用
-			//	if(pcang->XYF_Type == 1)
-			//		HAL_UART_Transmit(&huart3,Data_Head,2,10);																//发送帧尾
-				delay_sys_us(80);
-#else
-				HAL_UART_Transmit_IT(&huart3,CMD_XYF,8);		
-				while (huart3.gState == HAL_UART_STATE_BUSY_TX)
+					ModbusCRC = LIB_CRC_MODBUS(CMD_XYF, 6);
+					CMD_XYF[6] = ModbusCRC >> 8;
+					CMD_XYF[7] = ModbusCRC & 0xff;
+					HAL_GPIO_WritePin(GPIOB, con02_uart3_xieyoufa_Pin, GPIO_PIN_RESET); //
+					delay_sys_us(80);
+					HAL_UART_Transmit_IT(&huart3, CMD_XYF, 8);
+					while (huart3.gState == HAL_UART_STATE_BUSY_TX)
+					{
+						osDelay(1);
+					}
+					HAL_GPIO_WritePin(GPIOB, con02_uart3_xieyoufa_Pin, GPIO_PIN_SET); //
+					pxyf[CMD_XYF[0] - 0x10].RTData_Num++; //每个传感器发送帧累加
+
+					if (CMD_XYF[0] - 0x10 < xyfaddr_max)
+						CMD_XYF[0]++;
+					else
+						CMD_XYF[0] = 0x11;
+				}
+				else
 				{
-					osDelay(1);
+					i001 = 3;
 				}
-#endif				
-				HAL_GPIO_WritePin(GPIOB,con02_uart3_xieyoufa_Pin,GPIO_PIN_SET);//
-#if  0				
-				if(pxyf[CMD_XYF[0]-0x10].RTData_Num > 5)                          //收发数据错误次数RT_ERRORCNT
+			}
+			if (i001 == 3) //发送姿态传感器轮询
+			{
+				if (pcang->Angle) //发送角度传感器命令轮询
 				{
-					pxyf[CMD_XYF[0]-0x10].RTData_Num = RT_ERRORCNT;
-					pxyf[CMD_XYF[0]-0x10].XYF_ErrorCnt = RT_ERRORCNT;
+
+					ModbusCRC = LIB_CRC_MODBUS(CMD_Angle_XY, 6);
+					CMD_Angle_XY[6] = ModbusCRC >> 8;
+					CMD_Angle_XY[7] = ModbusCRC & 0xff;
+					HAL_GPIO_WritePin(GPIOB, con02_uart3_xieyoufa_Pin, GPIO_PIN_RESET);
+					delay_sys_us(80);
+					HAL_UART_Transmit(&huart3, CMD_Angle_XY, 8, 100); //只支持单指令读角度取传感器数据
+					delay_sys_us(80);
+					HAL_GPIO_WritePin(GPIOB, con02_uart3_xieyoufa_Pin, GPIO_PIN_SET);
+
+					if (pangle->RTData_NumX > RT_ERRORCNT)
+					{
+						pangle->RTData_NumX = RT_ERRORCNT;
+						pangle->Angle_ErrorCnt = RT_ERRORCNT;
+					}
+					else
+						pangle->RTData_NumX++;
 				}
 				else
-#endif				 
-					pxyf[CMD_XYF[0]-0x10].RTData_Num++;                 //每个传感器发送帧累加
-				
-				if(CMD_XYF[0] - 0x10 <  xyfaddr_max)
-					CMD_XYF[0]++;
-				else
-					CMD_XYF[0] = 0x11;
-		    }
-		    else
-		    {			
-	      		i001 = 3;	
-		    }				
-		  }
-		  if (i001 == 3) //发送姿态传感器轮询
-		  {
-			  if (pcang->Angle) //发送角度传感器命令轮询
-			  {
-
-				  ModbusCRC = LIB_CRC_MODBUS(CMD_Angle_XY, 6);
-				  CMD_Angle_XY[6] = ModbusCRC >> 8;
-				  CMD_Angle_XY[7] = ModbusCRC & 0xff;
-				  HAL_GPIO_WritePin(GPIOB, con02_uart3_xieyoufa_Pin, GPIO_PIN_RESET);
-				  delay_sys_us(80);
-				  HAL_UART_Transmit(&huart3, CMD_Angle_XY, 8, 100); //只支持单指令读角度取传感器数据
-				  delay_sys_us(80);
-				  HAL_GPIO_WritePin(GPIOB, con02_uart3_xieyoufa_Pin, GPIO_PIN_SET);
-
-				  if (pangle->RTData_NumX > RT_ERRORCNT)
-				  {
-					  pangle->RTData_NumX = RT_ERRORCNT;
-					  pangle->Angle_ErrorCnt = RT_ERRORCNT;
-				  }
-				  else
-					  pangle->RTData_NumX++;
-			  }
-			  else
-			  {
-				  i001 = 6;
-			  }
-		  }
+				{
+					i001 = 6;
+				}
+			}
 
 			if(i001==6)             //发送壁挂油传感器命令轮询
 			{
@@ -2187,7 +2168,7 @@ void StartTask03(void *argument)															//
 		{
 			if(i001==0)  					  //发送人控大盖盖命令轮询
 			{
-				if(pcang->RKG_DG != 0)
+				if((pcang->RKG_DG != 0) && (pcang->RKG_Type!=2))
 				{
 					ModbusCRC = LIB_CRC_MODBUS(CMD_RKG,6);
 					CMD_RKG[6] = ModbusCRC>>8;
@@ -3048,6 +3029,9 @@ void StartTask04(void *argument)                                    //
 					case 0x0122://SetSuccess = Level_SetCalvalue(ptx);														//设置液位计种类
 										  // Flash_Change = 1;										 
 						break;	
+					case 0x0220:
+						SetSuccess=Read_SoftVersion(ptx);
+						break;
 					case 0x1121: 
 						SetSuccess1 = Read_CangSensorData_1to4(ptx);														//读仓1-4传感器
 							 

+ 1 - 1
Core/Src/xyf.c

@@ -48,7 +48,7 @@ void XYF_state(uint16_t CangNum)
 			pxyf[i].XYF_State1 = 0x01;
 			}
 		}
-    if(pxyf[i].XYF_Data1[0] == 0x00)
+    	if(pxyf[i].XYF_Data1[0] == 0x00)
 		{
 			pxyf[i].XYF_StateCnt1=0;			
 			pxyf[i].XYF_StateCnt2++;

+ 6 - 0
MDK-ARM/RTE/_caijiqiV001/RTE_Components.h

@@ -11,5 +11,11 @@
 #define RTE_COMPONENTS_H
 
 
+/*
+ * Define the Device Header File: 
+ */
+#define CMSIS_device_header "stm32f10x.h"
+
+
 
 #endif /* RTE_COMPONENTS_H */

+ 1 - 1
MDK-ARM/caijiqiV001.uvoptx

@@ -405,7 +405,7 @@
       <DebugFlag>
         <trace>0</trace>
         <periodic>1</periodic>
-        <aLwin>0</aLwin>
+        <aLwin>1</aLwin>
         <aCover>0</aCover>
         <aSer1>0</aSer1>
         <aSer2>0</aSer2>

文件差异内容过多而无法显示
+ 4355 - 4382
MDK-ARM/caijiqiV001/DZQF-CJB09A0_20220209_Temp1.hex