我需要编写一个程序,它将通过 RS485 监听 ModBus 网络中的通信。我使用 RS485 <> USB 加密狗连接到网络。
我可以使用 SerialPort.DataReceived 事件读取一些数据,但它会给出奇怪的结果。数据通常是拆分的,但它应该是一体的。(Modbus 主站每 100 毫秒传输一次)。
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 个字符。