浏览代码

A1协议变长处理的代码合并 (来源于张工)

xuy 3 年之前
父节点
当前提交
aba95049ac
共有 1 个文件被更改,包括 33 次插入2 次删除
  1. 33 2
      Src/TerminalSlave485.c

+ 33 - 2
Src/TerminalSlave485.c

@@ -948,13 +948,14 @@ extern uint8_t  Cang08_IO[64];
 uint32_t overflow_cnt_bak=0;
 extern uint32_t overflow_cnt;
 unsigned char overflow_flag_bak;
-void Send_A1_Cmd()
+void Send_A1_Cmd(unsigned char scrAddr, unsigned char funCode, unsigned char scrLength)
 {
 	int send_pos=0;
 	unsigned char emergy=0;
 	unsigned char Lrc_temp;
 	unsigned char overflow_flag=0;
 	int i,j;
+	unsigned char temp_i = 0x00;
 	USART1_TX_BUF[send_pos++]=':';
 	sprintf(USART1_TX_BUF+send_pos,"%02X",0xA1);
 	send_pos+=2;
@@ -1067,12 +1068,42 @@ void Send_A1_Cmd()
 		sprintf(USART1_TX_BUF+send_pos,"%02X",0);
 		send_pos+=2;
 	}
+	//**********************************************
+	
+	if(0x3C < scrLength)
+	{
+		scrLength = 0x3C;
+	}
+	temp_i = scrLength<<1;
+	//sprintf(USART1_TX_BUF+5,"%02X",temp_i);
+	USART1_TX_BUF[5] = (temp_i>>4) + '0';
+	if('9' < USART1_TX_BUF[5])
+	{
+		USART1_TX_BUF[5] += 7;
+	}
+	USART1_TX_BUF[6] = (temp_i & 0xF) + '0';
+	if('9' < USART1_TX_BUF[6])
+	{
+		USART1_TX_BUF[6] += 7;
+	}
+	
+	temp_i <<= 1;
+	
+	Lrc_temp = MODBUS_ASCII_GetLrc(USART1_TX_BUF+1, temp_i + 6);
+	sprintf(USART1_TX_BUF + temp_i + 7, "%02X", Lrc_temp);
+	USART1_TX_BUF[temp_i + 9]  = 0x0D;
+	USART1_TX_BUF[temp_i + 10] = 0x0A;
+	TerminalSlave485_Send_Data(USART1_TX_BUF, temp_i + 11);
+	
+	//***********************************************
+	/*
 	Lrc_temp = MODBUS_ASCII_GetLrc(USART1_TX_BUF+1,send_pos-1);
 	sprintf(USART1_TX_BUF+send_pos,"%02X",Lrc_temp);
 	send_pos += 2;
 	USART1_TX_BUF[send_pos++] =0x0D;
 	USART1_TX_BUF[send_pos++] = 0x0A;
 	TerminalSlave485_Send_Data(USART1_TX_BUF,send_pos);
+	*/
 }
 
 
@@ -1513,7 +1544,7 @@ void Data_analysis(void)
 							}
 							else if(data_frame.Frame_addr==0xA1)
 							{
-								Send_A1_Cmd();
+								Send_A1_Cmd(data_frame.Frame_addr, data_frame.Frame_funcode, data_frame.Frame_length);
 							}