Ver código fonte

* 与控制板间的通讯波特率由38400调整为器件的标定值19200
* 原处理来自控制板的通讯报文时未采用校验码,需要实装校验,并为了兼容现状或保险起见,校验码的高位在前或在后,都能支持兼容匹配
* 采集板通讯回应的及时性有时会有50ms的空窗期,此期太长、不太合理, 修正后的效果空窗期调整为2ms之内
* v20220809-3

以上改动,作用于最近几天的高温通讯异常的攻关实验

xuy 3 anos atrás
pai
commit
ce5e029f65
2 arquivos alterados com 9 adições e 7 exclusões
  1. 1 1
      Core/Src/kzq.c
  2. 8 6
      Core/Src/main.c

+ 1 - 1
Core/Src/kzq.c

@@ -3910,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, 20220803};
+uint32_t Version_Soft[8] = {2, 2, 3, 3, 1, 1, 0, 20220809};
 uint16_t Read_SoftVersion(uint8_t *pTx)
 {
 	int i;

+ 8 - 6
Core/Src/main.c

@@ -933,7 +933,7 @@ int main(void)
 	
 	HAL_Delay(2);
 	memset(bufMain,0,128);
-	spr000=sprintf((char*)bufMain,"sysytem reset...%5d, watchDogOn=%d, version:%d",5,WatchDogOn,Version_Soft[7]);
+	spr000=sprintf((char*)bufMain,"sysytem reset...%5d, watchDogOn=%d, version:%d-%d",5,WatchDogOn,Version_Soft[7],Version_Soft[3]);
 	//HAL_UART_Transmit(&huart1,bufMain,32,300);
 	HAL_UART_Transmit(&huart2,bufMain,spr000,300);
 	//HAL_UART_Transmit(&huart3,bufMain,32,300);
@@ -1489,7 +1489,7 @@ static void MX_USART2_UART_Init(void)
 
   /* USER CODE END USART2_Init 1 */
   huart2.Instance = USART2;
-  huart2.Init.BaudRate = 38400;//19200
+  huart2.Init.BaudRate = 19200;//19200
   huart2.Init.WordLength = UART_WORDLENGTH_8B;
   huart2.Init.StopBits = UART_STOPBITS_1;
   huart2.Init.Parity = UART_PARITY_NONE;
@@ -2864,7 +2864,7 @@ void StartTask04(void *argument)                                    //
   /* USER CODE BEGIN StartTask04 */
   /* Infinite loop */
 	uint8_t* ptx = CMD_KZQ;   
-	uint16_t ModbusCRC = 0,SetSuccess = 0,ModbusCRC1 = 0,SetSuccess1 = 0,SetSuccess2=0,SetSuccess3=0;                 
+	uint16_t ModbusCRC_lsb = 0,ModbusCRC = 0,SetSuccess = 0,ModbusCRC1 = 0,SetSuccess1 = 0,SetSuccess2=0,SetSuccess3=0;                 
 	static uint16_t i = 0;
 	int i000;
 	uint8_t* send_ptr;
@@ -2880,7 +2880,7 @@ void StartTask04(void *argument)                                    //
   /* Infinite loop */
   for(;;)
   {
-    osDelay(50);    																								  //以ms为单位
+    osDelay(2);    																								  //以ms为单位
 	//	HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_0);
 
 	HAL_GPIO_TogglePin(WDI_sp706_kanmemgou_GPIO_Port, WDI_sp706_kanmemgou_Pin);
@@ -2919,6 +2919,8 @@ void StartTask04(void *argument)                                    //
 			continue;
 		ModbusCRC = USART2_RX_BUF002[data_lengthU2 - 1] << 8;
 		ModbusCRC |= USART2_RX_BUF002[data_lengthU2 - 2];
+		ModbusCRC_lsb = USART2_RX_BUF002[data_lengthU2 - 2] << 8;
+		ModbusCRC_lsb |= USART2_RX_BUF002[data_lengthU2 - 1];
 		ModbusCRC1 = LIB_CRC_MODBUS(USART2_RX_BUF002, data_lengthU2 - 2);
 
 		if ((USART2_RX_BUF002[0] != 0x39) && (USART2_RX_BUF002[1] <= 0x01) && (USART2_RX_BUF002[2] <= 0x95) && (USART2_RX_BUF002[3] <= 0x50)) //判断帧头
@@ -2936,11 +2938,11 @@ void StartTask04(void *argument)                                    //
 			pkzq->KZQ_Error++;
 			KZQ_RTerror = 1;
 		}
-		/*else if(ModbusCRC != ModbusCRC1)		//校验CRC
+		else if(ModbusCRC != ModbusCRC1 && ModbusCRC_lsb != ModbusCRC1)		//校验CRC
 		{
 			pkzq->KZQ_Error++;
 			KZQ_RTerror = 1;
-		}*/
+		}
 		else
 		{
 			pkzq->KZQ_Error = 0;