解决校验位错误重复回复数据帧BUG
This commit is contained in:
parent
adbd7818d0
commit
bdd3979064
Binary file not shown.
|
@ -156,45 +156,48 @@ static err_t tcpecho_recv_control(void *arg, struct tcp_pcb *tpcb, struct pbuf *
|
|||
communication_exception(tcp_tx_data, tcp_rx_data, CHECK_ERROR);
|
||||
tcp_write(tpcb, tcp_tx_data, tx_data_len, 1);
|
||||
}
|
||||
memcpy(communication_data.data, tcp_rx_data + 5, tcp_rx_data[4]);
|
||||
if (tcp_rx_data[3] == 0x00) // 读模拟量指令
|
||||
{
|
||||
/*读操作,从寄存器读取数据,组包返回*/
|
||||
tx_data_len = COM_AI_DATA_SIZE;
|
||||
user_communication_ai = &communication_data.ai_data;
|
||||
communication_get_ai(user_communication_ai, tcp_tx_data, tcp_rx_data);
|
||||
tcp_write(tpcb, tcp_tx_data, tx_data_len, 1);
|
||||
}
|
||||
else if (tcp_rx_data[3] == 0x01) // 写模拟量指令
|
||||
{
|
||||
/*写操作,将数据写入寄存器,组包返回*/
|
||||
tcp_echo_flags_control = 1;
|
||||
user_communication_ao = &communication_data.ao_data;
|
||||
communication_set_ao(user_communication_ao);
|
||||
tcp_write(tpcb, tcp_rx_data, rx_data_len, 1);
|
||||
}
|
||||
else if (tcp_rx_data[3] == 0x02) // 读数字量指令
|
||||
{
|
||||
/*读操作,从寄存器读取数据,组包返回*/
|
||||
|
||||
user_communication_di = &communication_data.di_data;
|
||||
tx_data_len = 7 + user_communication_di->num;
|
||||
user_read_gpio(user_communication_di, tcp_tx_data, tcp_rx_data);
|
||||
tcp_write(tpcb, tcp_tx_data, tx_data_len, 1);
|
||||
}
|
||||
else if (tcp_rx_data[3] == 0x03) // 写数字量指令
|
||||
{
|
||||
/*写操作,将数据写入寄存器,组包返回*/
|
||||
user_communication_do = &communication_data.do_data;
|
||||
user_write_gpio(user_communication_do);
|
||||
tcp_write(tpcb, tcp_rx_data, rx_data_len, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 返回命令号错误
|
||||
tx_data_len = COM_ERROR_CODE_SIZE;
|
||||
communication_exception(tcp_tx_data, tcp_rx_data, COMMAND_ERROR);
|
||||
tcp_write(tpcb, tcp_tx_data, tx_data_len, 1);
|
||||
memcpy(communication_data.data, tcp_rx_data + 5, tcp_rx_data[4]);
|
||||
if (tcp_rx_data[3] == 0x00) // 读模拟量指令
|
||||
{
|
||||
/*读操作,从寄存器读取数据,组包返回*/
|
||||
tx_data_len = COM_AI_DATA_SIZE;
|
||||
user_communication_ai = &communication_data.ai_data;
|
||||
communication_get_ai(user_communication_ai, tcp_tx_data, tcp_rx_data);
|
||||
tcp_write(tpcb, tcp_tx_data, tx_data_len, 1);
|
||||
}
|
||||
else if (tcp_rx_data[3] == 0x01) // 写模拟量指令
|
||||
{
|
||||
/*写操作,将数据写入寄存器,组包返回*/
|
||||
tcp_echo_flags_control = 1;
|
||||
user_communication_ao = &communication_data.ao_data;
|
||||
communication_set_ao(user_communication_ao);
|
||||
tcp_write(tpcb, tcp_rx_data, rx_data_len, 1);
|
||||
}
|
||||
else if (tcp_rx_data[3] == 0x02) // 读数字量指令
|
||||
{
|
||||
/*读操作,从寄存器读取数据,组包返回*/
|
||||
|
||||
user_communication_di = &communication_data.di_data;
|
||||
tx_data_len = 7 + user_communication_di->num;
|
||||
user_read_gpio(user_communication_di, tcp_tx_data, tcp_rx_data);
|
||||
tcp_write(tpcb, tcp_tx_data, tx_data_len, 1);
|
||||
}
|
||||
else if (tcp_rx_data[3] == 0x03) // 写数字量指令
|
||||
{
|
||||
/*写操作,将数据写入寄存器,组包返回*/
|
||||
user_communication_do = &communication_data.do_data;
|
||||
user_write_gpio(user_communication_do);
|
||||
tcp_write(tpcb, tcp_rx_data, rx_data_len, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 返回命令号错误
|
||||
tx_data_len = COM_ERROR_CODE_SIZE;
|
||||
communication_exception(tcp_tx_data, tcp_rx_data, COMMAND_ERROR);
|
||||
tcp_write(tpcb, tcp_tx_data, tx_data_len, 1);
|
||||
}
|
||||
}
|
||||
|
||||
/*2. 判断所要执行的操作 读或写指令*/
|
||||
|
|
Loading…
Reference in New Issue