无法在同一TCP连接上发送多个Modbus请求



我正在使用POCO C++库进行套接字和TCP连接。

当我为每个请求打开和关闭连接时,一切正常:

Poco::Net::SocketAddress sa("192.168.2.55", 502);
Poco::Net::StreamSocket socket;
socket.connect(sa);
socket.sendBytes(/*set coil 5 to 1*/, 12);
socket.close();
socket.connect(sa);
socket.sendBytes(/*set coil 6 to 1*/, 12);
socket.close();
socket.connect(sa);
socket.sendBytes(/*set coil 7 to 1*/, 12);
socket.close();

线圈5、6和7通常设置为1。

但是,当我通过同一个TCP连接发送这3个请求时,只会收到第一个请求:

Poco::Net::SocketAddress sa("192.168.2.55", 502);
Poco::Net::StreamSocket socket;
socket.connect(sa);
socket.sendBytes(/*set coil 5 to 1*/, 12);
socket.sendBytes(/*set coil 6 to 1*/, 12);
socket.sendBytes(/*set coil 7 to 1*/, 12);
socket.close();

只有线圈编号5设置为1。

哪一个更好?我能做些什么才能让第二个发挥作用?

根据评论,在发送进一步请求之前处理设备响应是值得的。规范规定:

服务器接受的请求数量取决于其资源数量和TCP窗口大小方面的容量。同样,客户端同时初始化的事务数量也取决于其资源容量。这个实现参数被称为";NumberMaxOfClientTransaction";并且必须被描述为MODBUS客户端特征之一。根据设备类型的不同,此参数可以取1到16之间的值。

因此,某些设备可能只支持多个同时请求。

不管以上情况如何,都值得处理响应,因为设备可能正在以错误进行响应。

注意:虽然您可以自己实现Modbus协议(这是一个相当简单的协议(,但您可能会发现许多可用的有益库之一(例如macchina.io、EasyModbusTCP.NET(。

最新更新