C#Modbus RTU读取数据长度不同

时间:2018-06-07 01:11:33

标签: c#

我希望我能解释一下。抱歉,有些文字使用不同的语言,我认为这对于这个问题并不重要。我正在尝试从Modbus RTU模式传感器读取数据。我也创建了一个读取程序和CRC校验。数据成功读取但响应的长度不同,如: - Main page

长度确定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);
        }

1 个答案:

答案 0 :(得分:0)

删除

"concept"
在您的代码中

。这对我有帮助。