Browse Source

异常报警时间长度可远程设置的功能,范围覆盖目前的卸油阀,人孔盖总线

xuy 3 years ago
parent
commit
441dd1425e
5 changed files with 55 additions and 9 deletions
  1. 2 1
      Core/Inc/cang.h
  2. 1 0
      Core/Inc/config.h
  3. 8 1
      Core/Inc/main.h
  4. 29 1
      Core/Src/kzq.c
  5. 15 6
      Core/Src/main.c

+ 2 - 1
Core/Inc/cang.h

@@ -32,7 +32,8 @@ uint16_t CRC2;
 /**************************单独传感器**************************************/		
 uint16_t  Angle;										//0: 无姿态传感器,1:单轴姿态传感器,2:双轴姿态传感器...
 uint16_t  YQHS;										//0: 无油气回收阀,1:有油气回收阀
-	
+
+uint16_t sensorBusMaxReTry; //xy, 去向传感器总线读取数据时,如遇无回应,则参照这个标定的重试最大值来获取异常
 }Cang_Inf;
 
 extern Cang_Inf cang_inf;

+ 1 - 0
Core/Inc/config.h

@@ -26,6 +26,7 @@
 #define ADDR_YQHS_TYPE       	         0x0807F038                             //油气回收阀配置,2字节:00 00,无油气回收阀,00 01:有油气回收阀(默认无)
 
 #define ADDR_LEVEL_TYPE       	       0x0807F040                             //液位传感器配置,2字节:00 00,无液位传感器,00 01:磁致伸缩传感器,00 02:雷达传感器,前一字节表示带几点测温(默认无)
+#define ADDR_SENSOR_BUS_MAX_RETRY      0x0807F044                             //xy,2字节,存放传感器总线读取的最大重试次数,默认值为3
 #define ADDR_TEM_TYPE       	         0x0807F048                             //温度传感器配置,2字节:00 00,无温度传感器,00 03:前一字节00:集成指令,01:单独指令,后一字节:测温点数(默认无)
 #define ADDR_ANGLE_TYPE       	       0x0807F050                             //姿态传感器配置,2字节:00 00,无姿态传感器,00 03:前一字节00:集成指令,01:单独指令,后一字节:姿态轴数(默认无)
 

+ 8 - 1
Core/Inc/main.h

@@ -33,8 +33,14 @@ extern "C" {
 /* Private includes ----------------------------------------------------------*/
 /* USER CODE BEGIN Includes */
 
+//#define DEBUG
+#ifdef DEBUG
+	#define WatchDogOn   0   //是否打开看门狗 
+#else
+	#define WatchDogOn   1   //是否打开看门狗
+#endif
 //0----关闭看门狗SP706   1----打开看门狗SP706--------------必须配置的参数1/3
-#define WatchDogOn   1   //是否打开看门狗 
+//#define WatchDogOn   1   //是否打开看门狗 
 //#define WatchDogOn   0   //是否打开看门狗 
 
 /* USER CODE END Includes */
@@ -116,6 +122,7 @@ typedef union{
 }
 #endif
 
+extern uint32_t Version_Soft[8];
 #endif /* __MAIN_H */
 
 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 29 - 1
Core/Src/kzq.c

@@ -3789,6 +3789,34 @@ uint16_t Level_SetType(uint8_t* pTx)
 	else
 		return 0;
 }
+
+// 去向传感器总线读取数据时,如遇无回应,则参照这个标定的重试最大值来获取异常
+uint16_t RW_SensorBusMaxRetry(uint8_t* pTx)
+{
+	Cang_Inf* pcang = &cang_inf;
+	KZQ_Inf* pkzq = &kzq_inf;
+	uint16_t Flash_buf[20] = {0};
+
+	// [7]为03,表示读取,06表示设置
+	// [16,17]在设置时有效,表示设置值
+	Flash_buf[0] = pkzq->data_buf[16]<<8|pkzq->data_buf[17];
+	if(pkzq->data_buf[7] == 0x06) {
+		Flash_WriteBytes(Flash_buf,ADDR_SENSOR_BUS_MAX_RETRY,1);
+	}
+	Flash_ReadBytes(Flash_buf,ADDR_SENSOR_BUS_MAX_RETRY,1);
+	
+	pTx[16] = Flash_buf[0]>>8;
+	pTx[17] = Flash_buf[0]&0xFF;
+	
+	if(Flash_buf[0] != 0xFFFF)
+		pcang->sensorBusMaxReTry = Flash_buf[0];
+	
+	if((pTx[16] == pkzq->data_buf[16])&&(pTx[17] == pkzq->data_buf[17])&&(pkzq->data_buf[7] == 0x06))
+		return 1;
+	else
+		return 0;
+}
+
 	typedef union{
    float Ldcal_zero_temp1;   
    uint8_t arr1[4];
@@ -3882,7 +3910,7 @@ uint16_t Tem_SetType(uint8_t* pTx)
 	else
 		return 0;
 }
-uint32_t Version_Soft[8] = {2, 2, 3, 13, 1, 1, 0, 20220531};
+uint32_t Version_Soft[8] = {2, 2, 3, 13, 1, 1, 0, 20220729};
 uint16_t Read_SoftVersion(uint8_t *pTx)
 {
 	int i;

+ 15 - 6
Core/Src/main.c

@@ -735,6 +735,13 @@ void Cang_Init(void)
 		pcang->Level = 2;           //默认磁致伸缩液位传感器   slm
 	else
 		pcang->Level = Flash_buff[0];
+
+	Flash_ReadBytes(Flash_buff,ADDR_SENSOR_BUS_MAX_RETRY,1);
+	if(Flash_buff[0] == 0xffff)
+		pcang->sensorBusMaxReTry = 3;
+	else
+		pcang->sensorBusMaxReTry = Flash_buff[0];
+	if(pcang->sensorBusMaxReTry > 1000) pcang->sensorBusMaxReTry = 1000; // 设置硬上限
 	
 	Flash_ReadBytes(Flash_buff,CANG1_LEVEL_CAL,8);
 	if(Flash_buff[0] == 0xffff)
@@ -897,8 +904,8 @@ int main(void)
 	HAL_GPIO_WritePin(con03_uart2_kongzhiqi_GPIO_Port,con03_uart2_kongzhiqi_Pin,GPIO_PIN_RESET);//切换为接收模式
 	
 	HAL_Delay(2);
-	memset(bufMain,0,32);
-	spr000=sprintf((char*)bufMain,"sysytem reset...%5d",5);
+	memset(bufMain,0,128);
+	spr000=sprintf((char*)bufMain,"sysytem reset...%5d, watchDogOn=%d, version:%d",5,WatchDogOn,Version_Soft[7]);
 	//HAL_UART_Transmit(&huart1,bufMain,32,300);
 	HAL_UART_Transmit(&huart2,bufMain,spr000,300);
 	//HAL_UART_Transmit(&huart3,bufMain,32,300);
@@ -2054,9 +2061,9 @@ void StartTask02(void *argument)				 															//卸
 					i = CMD_XYF[0] - 0x11;
 				}
 				pxyf[i].XYF_ErrorCnt++;
-				if (pxyf[i].XYF_ErrorCnt > 3)
+				if (pxyf[i].XYF_ErrorCnt > pcang->sensorBusMaxReTry)
 				{
-					pxyf[i].XYF_ErrorCnt = 11;
+					pxyf[i].XYF_ErrorCnt = pcang->sensorBusMaxReTry + 1;
 					pxyf[i].XYF_Error = 1;
 				}
 			}
@@ -2778,9 +2785,9 @@ void StartTask03(void *argument)															//
 				}
 				
 				prkg[i].RKDG_ErrorCnt++;
-				if (prkg[i].RKDG_ErrorCnt > 3)
+				if (prkg[i].RKDG_ErrorCnt > pcang->sensorBusMaxReTry)
 				{
-					prkg[i].RKDG_ErrorCnt = 11;
+					prkg[i].RKDG_ErrorCnt = pcang->sensorBusMaxReTry + 1;
 					prkg[i].RKDG_Error = 1;
 				}
 			}
@@ -3035,6 +3042,8 @@ void StartTask04(void *argument)                                    //
 			    case 0x7e: HDF_Reset(ptx);										                        //设置智能海底阀放大倍数
 										 Flash_Change = 1;		 
 						break;	
+				case 0x80: SetSuccess = RW_SensorBusMaxRetry(ptx);										//传感器总线重试最大值来获取异常
+						break;
 			    case 0x017e: TOUCHUAN_UART_NUM(ptx);										              //设置智能海底阀放大倍数
 										 Flash_Change = 1;		 
 						break;