RS485 を介して ModBus ネットワークで通信をリッスンするプログラムを作成する必要があります。RS485 <> USB ドングルでネットワークに接続しています。
SerialPort.DataReceived イベントを使用して一部のデータを読み取ることができますが、奇妙な結果が得られます。多くの場合、データは 1 つにまとめられるべきときに分割されます。(Modbus マスターは 100ms ごとに送信します)。
class Serial
{
private SerialPort port;
Queue<byte[]> buffer;
public Serial()
{
buffer = new Queue<byte[]>();
port = new SerialPort("COM3", 19200, Parity.Even, 8, StopBits.One);
port.DataReceived += port_DataReceived;
}
public void Open()
{
if (port.IsOpen)
{
port.Close();
}
port.Open();
}
void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte[] buff = new byte[port.BytesToRead];
port.Read(buff, 0, port.BytesToRead);
buffer.Enqueue(buff);
}
}
送信開始のサインがありません。フレーム間の遅延は最小です。3.5 文字、文字間の最大遅延は 1.5 文字です。