This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我们使用 lwip Stack 在 TCP 上实现了 Modbus 协议、而不使用任何 RTOS。 我们的控制每1秒发送一次 Modbus 查询0x03 (读取保持寄存器)和0x10 (写入多个寄存器)。
为了进行测试、我们使用 Modbustools.com 上的 PLC 从 Modbus 仿真器并进行控制。
在卤素模式下、在 EMAC 选项卡下、我们将"接收数据包缓冲区的数量"配置为10。 我们还通过将缓冲区设置为15和30进行了测试、在这两种情况下、控制卡在接收中断中的时间都不到20秒。
我们观察到控制器正常工作几秒钟(反复观察到的控制器工作大约 22秒),然后控制器 在 Rx_Interrupt 处理程序循环中永久挂起,是否有人可以帮助解决此问题?
下面附上了查询和响应日志。 下面的日志中突出显示了最后的查询和响应
QJ、
感谢您的回复。
之前,我们用于将本地缓冲区填充到 Rx ISR 中,并将该数据处理到 Modbus 应用程序代码中。 我们已在主循环中移动了该处理函数、并缩短了 EMAC Rx ISR 时间。
但我们仍然观察到相同的结果(在 hdkif_rx_inthandler() 函数中发生22秒控制挂起后)。 再观察一下、一旦它卡在 Rx ISR 循环 控制中、开始使 RXDMA 和 RXOver 递增运行 EMAC 寄存器。 请在下面找到捕获的快照。
我们已检查工具响应时间、并将其设置为10msec。 此外、我们还使用两种不同的工具进行了测试、并观察到相同的行为。
您好 QJ、
我限制了 Modbus 侧的吞吐量。 现在、控制在200ms 后发送查询、Modbus 工具响应时间也从10ms 增加到100ms。
但我们仍然观察到同样的结果。 控制卡在 Rx ISR 循环中、如上一个线程中所述。
您好 QJ、
请提供您的输入。
此致、
Pramod Gaikwad
是否有任何 LWIP 专家可以评论上述 Modbus over TCP 问题? 我被卡住了
我已经解决了这个问题、
接收回调函数中的代码错误是我没有释放 pubf 指针。
在设置以下条件后、
静态 ERR_t ModbusTCPrecv (void *arg、struct tcp_pcb、struct pbuf *ptrModbusResBuf、err_t errMDRcvtcp)
{
if (ptrModbusResBuf)
{
//将接收到的数据从 MOBUS TCP 从器件复制到本地缓冲区
pbuf_free (ptrModbusResBuf);/*添加此条件以解决问题*/
}
}
感谢 QJ 提供的友好支持。