現在、Modbus/TCP を使用して PLC と通信しようとしていますが、PLC によって送信された Modbus フレームを読み取ることができると思っていても、Modbus 応答をポート 502 に送信し、使用するストリームを PLC が使用するポートに送信する必要があります。フレームを送ります。受信と送信に 2 つのストリームを使用しようとしましたが、最初のストリームを閉じると、PLC はそれをタイムアウト通信として取得し、2 番目の接続を拒否します。それがあなたを助けることができるなら、私が使用するコードはここにありますが、今のところ、接続をテストできるようにする以外はほとんど何もしません.
#define _WIN32_WINNT 0x0501
#include <iostream>
#include <boost/asio.hpp>
#include <boost/system/config.hpp>
#include <string>
using namespace std;
using boost::asio::ip::tcp;
int main()
{
boost::asio::io_service io_service;
tcp::endpoint endpoint(tcp::v4(), 502);
tcp::acceptor acceptor(io_service, endpoint);
while (1)
{
int i =0;
string buff;
char buf[30];
tcp::iostream stream;
tcp::iostream s("192.168.10.150", "502");
acceptor.accept(*stream.rdbuf());
getline(stream, buff);
cout<<buff<<endl;
s <<buff;
}
}
何か提案があれば。