我发出NModBus呼叫(将寄存器设置为1)到传感器,然后通过串口触发从传感器传输二进制数据。
只要我只通过NModBus读/写寄存器,一切正常,但是当我想读取这个返回的字节流时,它就不起作用了。
我尝试过几种不同的方法:
根据方法,我可能会读取4(4)个字节,但我认为它们是写入寄存器调用的ModBus答案。无法检索流的其余部分(几百个字节)。并且是,如果你想知道,我通过一个单独的工具验证确实传输了这样的流。 :-P
我已经通过串口在其他程序中交换信息而没有特别的问题所以我想知道我是否使用NModBus 然后标准串口操作端口正在引起关注?
代码 - 应该是非常基本的 - 看起来像:
using (SerialPort serialForModBus = new SerialPort(Port))
{
// Basic serial port settings
Open(serialForModBus);
// Create ModBus RTU master
IModbusSerialMaster master = CreateMaster(serialForModBus);
// Write register to trigger reading...
master.WriteMultipleRegisters(SLAVE_ID, SensorModBusRegisters.COMMAND_SEND_LOGS, new ushort[] { (ushort)1 });
}
// Now read...
using (SerialPort serialToReadLogs = new SerialPort(Port))
{
Open(serialToReadLogs);
serialToReadLogs.ReadTimeout = 10000;
// Externalize reading to separate class (that will also do the parsing..)
SensorLogSerialReader logReader = new SensorLogSerialReader();
serialToReadLogs.DataReceived += logReader.SerialPortDataReceived;
}
// In SensorLogSerialReader
public void SerialPortDataReceived(object senderSerialPort, SerialDataReceivedEventArgs e)
{
SerialPort sender = (SerialPort)senderSerialPort;
List<byte> bytes = new List<byte>();
try
{
bool moreToRead = (sender.BytesToRead != 0);
int cur;
while (moreToRead)
{
cur = sender.ReadByte();
bytes.Add((byte)cur);
moreToRead = (sender.BytesToRead != 0);
}
Done = true;
}
catch (...)
}
有什么想法吗?我错过了什么&#34;明显&#34;?
谢谢!
注意:我看到post可能相似但仍未得到答案