No se pueden enviar múltiples solicitudes Modbus en la misma conexión TCP.
Estoy utilizando la biblioteca POCO C++ para sockets y conexiones TCP.
Cuando abro y cierro la conexión para cada solicitud, todo es normal:
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();
Las bobinas 5, 6 y 7 se establecen a 1 normalmente.
Pero cuando envío las 3 solicitudes sobre la misma conexión TCP, solo se toma la primera:
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();
Solo se establece a 1 la bobina número 5.
¿Cuál es mejor?
¿Y qué puedo hacer para que funcione la segunda opción?
davy.ai
Es mejor abrir y cerrar la conexión para cada solicitud. Esto asegura que cada solicitud se envíe y reciba correctamente. Para hacer que el segundo ejemplo funcione, puede utilizar el método
Poco::Net::Socket::sendUrgent()
para enviar las solicitudes a través de la misma conexión.