我希望我能解释一下。抱歉,有些文字使用不同的语言,我认为这对于这个问题并不重要。我正在尝试从Modbus RTU模式传感器读取数据。我也创建了一个读取程序和CRC校验。数据成功读取但响应的长度不同,如: -
长度确定REC的第5和第6个值如上: - (1E)或(1A)。
我的代码就像
public bool RsTransmitRec(string msg)
{
bool result = false;
string outmsg = msg;
spExec = true;
try
{
sp.DiscardInBuffer();
sp.DiscardOutBuffer();
sp.Write(globalFrame, 0, globalFrame.Length);
result = true;
MainLogTextDisp("TR<" + outmsg + ">", Color.Blue); //TR command
result = ResRecieve();
}
catch (Exception)
{
result = false;
spExec = false;
}
spExec = true;
return (result);
}
以上代码用于传输,以下代码用于响应
public bool ResRecieve()
{
bool result = false;
tOutRec.TimeOutSet(0x100000); //Start timeout monitoring
while (true)
{
try
{
if (sp.BytesToRead > 5)//If I change number here when I try to read holding register it will be the small length
{
byte[] bufferReceiver = new byte[this.sp.BytesToRead];
sp.Read(bufferReceiver, 0, sp.BytesToRead);
MainLogTextDisp("REC<" + dterr_chk.Display(bufferReceiver) + ">", Color.Blue);
sp.DiscardInBuffer();
sp.DiscardOutBuffer();
_recDoubleBuffer = dterr_chk.Display(bufferReceiver);
result = true;
break;
}
tOutRec.TimerInc();
if (tOutRec.TimeOutCheck() == true)
{
MainLogTextDisp("受信タイムアウト", Color.Red);
result = false;
break;
}
}
catch (Exception ex)
{
//何かエラーが起きたら
MainLogTextDisp(ex.Message, Color.Red);
EventAction(REC_ERROR);
}
}
return (result);
}
答案 0 :(得分:0)
删除
"concept"
在您的代码中。这对我有帮助。