Browse Source

41新透传的远程标定链路处理

xuy 3 years ago
parent
commit
951b0ff3bc
4 changed files with 48 additions and 29 deletions
  1. 4 2
      Inc/CollectMaster485.h
  2. 1 1
      Src/CollectMaster485.c
  3. 22 5
      Src/TerminalSlave485.c
  4. 21 21
      Src/freertos.c

+ 4 - 2
Inc/CollectMaster485.h

@@ -285,7 +285,9 @@ typedef struct
 	uint8_t nstep; // 上报周期,是step的倍数
 	uint8_t cmd_num;  // 命令数据的总数
 	uint8_t cmd_arr[12] ;  // 挨个具体存放命令代号
-}SensorScanParam_TypeDef; 
+
+	uint8_t rx_buf[5]; // 通过41串口透传uart口接收头部内容的缓存区
+}Pass41SensorScanParam_TypeDef; 
 
 
 
@@ -360,7 +362,7 @@ extern uint8_t ValStateArr_0x20_Cang02[64],ValStateArr_PoFeng_0x20_Cang02[64];//
 extern uint8_t ValStateArr_0x20_Cang03[64],ValStateArr_PoFeng_0x20_Cang03[64];//破封时的阀门状态
 extern uint8_t ValStateArr_0x20_Cang04[64],ValStateArr_PoFeng_0x20_Cang04[64];//破封时的阀门状态
 
-extern SensorScanParam_TypeDef SensorScanParam;
+extern Pass41SensorScanParam_TypeDef Pass41SensorScanParam;
 
 
 //uint8_t CheckInFrame_Collect485(void);

+ 1 - 1
Src/CollectMaster485.c

@@ -135,7 +135,7 @@ uni_TempToPlatForm uni_TempToPlatForm001,uni_TempToPlatForm002;
 float ArrYeweiForWenyou[NumOf_WenYouPanduan+3];//存储300s的液位数据    打印的时候作为是否稳油判断依据
 float Yewei_max000,Yewei_min000,Yewei_peak000;
 
-SensorScanParam_TypeDef SensorScanParam; 
+Pass41SensorScanParam_TypeDef Pass41SensorScanParam; 
 	 
 void TestUsart2_Receive(void)
 {

+ 22 - 5
Src/TerminalSlave485.c

@@ -561,7 +561,16 @@ void TerminalSlave485_Send_Data(uint8_t *buf,uint16_t len)
 	TerminalSlave485_TX_Set(1);			//设置为发送模式
   	//HAL_UART_Transmit(&huart1,buf,len,1000);//串口1发送数据  
 //	TerminalSlave485_TX_Set(0);			//设置为接收模式	
-	memcpy(terminal_buf,buf,len);
+	if(Pass41SensorScanParam.rx_buf[0] > 0){
+		memcpy(terminal_buf,Pass41SensorScanParam.rx_buf,5);
+		terminal_buf[2] = len;
+		memcpy(terminal_buf+5,buf,len);
+		len += 5;
+		Pass41SensorScanParam.rx_buf[0] = 0;
+	}else{
+		memcpy(terminal_buf,buf,len);
+	}
+
 	if(HAL_UART_Transmit_IT(&huart1,terminal_buf,len)!=HAL_OK)
 	{
 		TerminalSlave485_TX_Set(0);			//设置为接收模式	
@@ -1335,9 +1344,9 @@ void DoInternalSensorScanAndPost()
 	static int nstep = 0;
 	static uint32_t flowID = 0;
 
-	if(++step % SensorScanParam.step == 0){	
-		for(int n=0; n<SensorScanParam.cmd_num; n++) {
-			switch (SensorScanParam.cmd_arr[n]){
+	if(++step % Pass41SensorScanParam.step == 0){	
+		for(int n=0; n<Pass41SensorScanParam.cmd_num; n++) {
+			switch (Pass41SensorScanParam.cmd_arr[n]){
 			case 0x40:
 				xlen = BuildSealTxCmd(pSendBuf, emergy?NULL:&emergy);
 				pSendBuf += xlen;
@@ -1364,7 +1373,7 @@ void DoInternalSensorScanAndPost()
 			emergy = 0;
 			flowID++;
 		} else {
-			if(++nstep % SensorScanParam.nstep == 0) {
+			if(++nstep % Pass41SensorScanParam.nstep == 0) {
 				TerminalSlave485_Send_Data(USART1_TX_BUF,ylen);
 				flowID++;
 			}
@@ -1385,6 +1394,14 @@ void Data_analysis(void)
 		usart1_rx_flag=0;
 		usart_timesec=0;
 		f3_flag=0;
+
+		// xy,匹配到0x0139的头,表示是41串口透传下行的数据
+		if( (USART1_RX_BUF[0]==0x01) && (USART1_RX_BUF[1]==0x39)){
+			memcpy(Pass41SensorScanParam.rx_buf,USART1_RX_BUF,5);
+			memcpy(USART1_RX_BUF,USART1_RX_BUF+5,rx1_len-5);
+			rx1_len -=5;
+		}
+		
 		if((USART1_RX_BUF[0]==':') && (USART1_RX_BUF[1]==0xa5) && (USART1_RX_BUF[1]==0xa5))
 		{
 			memcpy(USART1_RX_BUF,USART1_RX_BUF+1,rx1_len-5);

+ 21 - 21
Src/freertos.c

@@ -151,34 +151,34 @@ void InitSensorScanParam(void)
 	FM25L16B_Read_N_Bytes(ADDR_Sensor_Scan_Param, data, 16);
 	if(data[0] == 0x5A){
 		uint8_t *buf = data+1;
-		SensorScanParam.enable = 1;
+		Pass41SensorScanParam.enable = 1;
 		if(buf[0] > 1 && buf[1] > 0){
-			SensorScanParam.step = buf[0];
-			SensorScanParam.nstep = buf[1];
+			Pass41SensorScanParam.step = buf[0];
+			Pass41SensorScanParam.nstep = buf[1];
 			if(buf[2] > 0 && buf[2] <= 8){
-				SensorScanParam.cmd_num = buf[2];
-				for (int n = 0; n < SensorScanParam.cmd_num; n++){
-					SensorScanParam.cmd_arr[n] = buf[3+n];
+				Pass41SensorScanParam.cmd_num = buf[2];
+				for (int n = 0; n < Pass41SensorScanParam.cmd_num; n++){
+					Pass41SensorScanParam.cmd_arr[n] = buf[3+n];
 				}
 			}else{
-				SensorScanParam.cmd_num = 2;
-				SensorScanParam.cmd_arr[0] = 0x40;
-				SensorScanParam.cmd_arr[1] = 0x91;
+				Pass41SensorScanParam.cmd_num = 2;
+				Pass41SensorScanParam.cmd_arr[0] = 0x40;
+				Pass41SensorScanParam.cmd_arr[1] = 0x91;
 			}	
 		}else{
-			SensorScanParam.step = 5;
-			SensorScanParam.nstep = 6;
-			SensorScanParam.cmd_num = 2;
-			SensorScanParam.cmd_arr[0] = 0x40;
-			SensorScanParam.cmd_arr[1] = 0x91;
+			Pass41SensorScanParam.step = 5;
+			Pass41SensorScanParam.nstep = 6;
+			Pass41SensorScanParam.cmd_num = 2;
+			Pass41SensorScanParam.cmd_arr[0] = 0x40;
+			Pass41SensorScanParam.cmd_arr[1] = 0x91;
 		}
 	}else{
-		SensorScanParam.enable = 0;
-		SensorScanParam.step = 5;
-		SensorScanParam.nstep = 6;
-		SensorScanParam.cmd_num = 2;
-		SensorScanParam.cmd_arr[0] = 0x40;
-		SensorScanParam.cmd_arr[1] = 0x91;
+		Pass41SensorScanParam.enable = 0;
+		Pass41SensorScanParam.step = 5;
+		Pass41SensorScanParam.nstep = 6;
+		Pass41SensorScanParam.cmd_num = 2;
+		Pass41SensorScanParam.cmd_arr[0] = 0x40;
+		Pass41SensorScanParam.cmd_arr[1] = 0x91;
 	}
 }
 
@@ -1008,7 +1008,7 @@ void Task_Usart1_Terminal(void const *argument)
 		osDelay(10); //阻塞延时,根据情况调节------保证每秒钟可以接收4帧数据,50*Nms休眠时间
 
 		// xy,新透传,41串口透传,模拟F3轮询传感器,构建数据
-		if(SensorScanParam.enable && i_task01 % 100 == 99) 
+		if(Pass41SensorScanParam.enable && i_task01 % 100 == 99) 
 		{
 			DoInternalSensorScanAndPost();
 		}