update:V1.3
1.修复实时报警索引错误 2.修复历史报警消息跨扇区显示错误 3.修复历史报警满一千条后会误擦除其他有效数据 4.修复TCP写入解析错误
This commit is contained in:
@@ -78,11 +78,11 @@ static void proto_modbus_communication_data_analysis(u8 *pData, u16 len,void *ot
|
||||
/*<2A><><EFBFBD><EFBFBD>modbusЭ<73><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
modbus_analysis_data.id = pData[6];
|
||||
modbus_analysis_data.func = pData[7];
|
||||
modbus_analysis_data.start_addr = pData[8] << 8 | pData[9];
|
||||
modbus_analysis_data.reg_number = pData[10] << 8 | pData[11];
|
||||
modbus_analysis_data.start_addr = (pData[8] << 8) | pData[9];
|
||||
modbus_analysis_data.reg_number = (pData[10] << 8) | pData[11];
|
||||
|
||||
send_buff_index_offset = 6;
|
||||
memcpy(send_struct.send_buffer,pData,send_buff_index_offset);
|
||||
memcpy(send_struct.send_buffer,pData,4);
|
||||
|
||||
error_code = ModbusErrorCode_Success;
|
||||
|
||||
@@ -93,9 +93,7 @@ static void proto_modbus_communication_data_analysis(u8 *pData, u16 len,void *ot
|
||||
ErrorCode = ModbusErrorCode_IllegalAddr;
|
||||
goto Error;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
*/
|
||||
switch (modbus_analysis_data.func)
|
||||
{
|
||||
case 0x03:
|
||||
@@ -113,7 +111,7 @@ static void proto_modbus_communication_data_analysis(u8 *pData, u16 len,void *ot
|
||||
TempAddr++;
|
||||
}
|
||||
send_struct.len =send_buff_index_offset + 3 + send_struct.send_buffer[send_buff_index_offset + 2];
|
||||
}goto Success;
|
||||
}break;
|
||||
/*<2A><><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>*/
|
||||
case 0x41:
|
||||
{
|
||||
@@ -132,16 +130,18 @@ static void proto_modbus_communication_data_analysis(u8 *pData, u16 len,void *ot
|
||||
TempAddr++;
|
||||
}
|
||||
send_struct.len = send_buff_index_offset + 6 + 2 * modbus_analysis_data.reg_number;
|
||||
}goto Success;
|
||||
}break;
|
||||
|
||||
case 0x06:
|
||||
{
|
||||
modbus_analysis_data.write_data_addr[0] = pData[10];
|
||||
modbus_analysis_data.write_data_addr[1] = pData[11];
|
||||
TempAddr = modbus_analysis_data.start_addr;
|
||||
TempData = (modbus_analysis_data.write_data_addr[0] << 8) | modbus_analysis_data.write_data_addr[1];
|
||||
error_code = proto_modbus_data_write(TempAddr, TempData);
|
||||
if (error_code)
|
||||
{
|
||||
goto Error;
|
||||
break;
|
||||
}
|
||||
|
||||
send_struct.len = send_buff_index_offset + 6;
|
||||
@@ -155,6 +155,11 @@ static void proto_modbus_communication_data_analysis(u8 *pData, u16 len,void *ot
|
||||
|
||||
case 0x10:
|
||||
{
|
||||
u8 byte_count = pData[12]; // <20>ֽ<EFBFBD><D6BD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8>Ƶ<EFBFBD> write_data_addr
|
||||
for (u8 i = 0; i < byte_count; i++) {
|
||||
modbus_analysis_data.write_data_addr[i] = pData[13 + i];
|
||||
}
|
||||
TempAddr = modbus_analysis_data.start_addr;
|
||||
for (inx = 0; inx < modbus_analysis_data.reg_number; inx++)
|
||||
{
|
||||
@@ -164,39 +169,43 @@ static void proto_modbus_communication_data_analysis(u8 *pData, u16 len,void *ot
|
||||
TempAddr++;
|
||||
if (error_code)
|
||||
{
|
||||
goto Error;
|
||||
break;
|
||||
}
|
||||
}
|
||||
send_struct.len = send_buff_index_offset + 6;
|
||||
send_struct.send_buffer[0] = modbus_analysis_data.id;
|
||||
send_struct.send_buffer[1] = modbus_analysis_data.func;
|
||||
send_struct.send_buffer[2] = modbus_analysis_data.start_addr >> 8;
|
||||
send_struct.send_buffer[3] = modbus_analysis_data.start_addr & 0xff;
|
||||
send_struct.send_buffer[4] = modbus_analysis_data.reg_number >> 8;
|
||||
send_struct.send_buffer[5] = modbus_analysis_data.reg_number & 0xff;
|
||||
send_struct.send_buffer[send_buff_index_offset + send_buff_index_offset + 0] = modbus_analysis_data.id;
|
||||
send_struct.send_buffer[send_buff_index_offset + send_buff_index_offset + 1] = modbus_analysis_data.func;
|
||||
send_struct.send_buffer[send_buff_index_offset + send_buff_index_offset + 2] = modbus_analysis_data.start_addr >> 8;
|
||||
send_struct.send_buffer[send_buff_index_offset + send_buff_index_offset + 3] = modbus_analysis_data.start_addr & 0xff;
|
||||
send_struct.send_buffer[send_buff_index_offset + send_buff_index_offset + 4] = modbus_analysis_data.reg_number >> 8;
|
||||
send_struct.send_buffer[send_buff_index_offset + send_buff_index_offset + 5] = modbus_analysis_data.reg_number & 0xff;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
error_code = ModbusErrorCode_IllegalFunction;
|
||||
}
|
||||
goto Error;
|
||||
break;
|
||||
}
|
||||
|
||||
Success:
|
||||
send_struct.send_buffer[4] = (send_struct.len - send_buff_index_offset) >> 8;
|
||||
send_struct.send_buffer[5] = (send_struct.len - send_buff_index_offset) & 0x00ff;
|
||||
proto_modbus_communication_data_send(send_struct.send_buffer, send_struct.len);
|
||||
return;
|
||||
|
||||
Error:
|
||||
send_struct.len = send_buff_index_offset + 3;
|
||||
send_struct.send_buffer[0] = modbus_analysis_data.id;
|
||||
send_struct.send_buffer[1] = modbus_analysis_data.func | 0x80;
|
||||
send_struct.send_buffer[2] = error_code;
|
||||
send_struct.send_buffer[4] = (send_struct.len - send_buff_index_offset) >> 8;
|
||||
send_struct.send_buffer[5] = (send_struct.len - send_buff_index_offset) & 0x00ff;
|
||||
proto_modbus_communication_data_send(send_struct.send_buffer, send_struct.len);
|
||||
/*<2A><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ɹ<EFBFBD>*/
|
||||
if(ModbusErrorCode_Success == error_code)
|
||||
{
|
||||
send_struct.send_buffer[4] = (send_struct.len - send_buff_index_offset) >> 8;
|
||||
send_struct.send_buffer[5] = (send_struct.len - send_buff_index_offset) & 0x00ff;
|
||||
proto_modbus_communication_data_send(send_struct.send_buffer, send_struct.len);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
send_struct.len = send_buff_index_offset + 3;
|
||||
send_struct.send_buffer[4] = (send_struct.len - send_buff_index_offset) >> 8;
|
||||
send_struct.send_buffer[5] = (send_struct.len - send_buff_index_offset) & 0x00ff;
|
||||
send_struct.send_buffer[send_buff_index_offset + 0] = modbus_analysis_data.id;
|
||||
send_struct.send_buffer[send_buff_index_offset + 1] = modbus_analysis_data.func | 0x80;
|
||||
send_struct.send_buffer[send_buff_index_offset + 2] = error_code;
|
||||
proto_modbus_communication_data_send(send_struct.send_buffer, send_struct.len);
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************
|
||||
|
||||
Reference in New Issue
Block a user