[求助]关于Modbus通讯,一主多从,通讯卡顿

问题描述:上位机是C#WINFORM通过485串口用modbus协议和PLC、陀螺仪、以及支架传感器通信。
1.当通讯波特率设置到115200时,就通讯错误了,但是和一个设备用115200是没问题的。
2.只和PLC进行通讯,既有读也有写,正常
3.只和陀螺仪通讯【读取】,也正常
4.和PLC以及陀螺仪同时读取就卡顿了,主UI界面显示的读出数据一跳一跳的,像卡了一样,正常应该是连续的变化的,Timer的TICK设置为50ms或200ms甚至1000ms都一样
5.还没有把3个从站设备都加进去通讯

猜想:
1.Modbus实际应用中是不是不支持同时高速读写多个从站设备?
2.终端加匹配电阻是否有用,实际情况是,这几个设备间隔不超2米,但是网上有人说波特率大了也要加电阻。PS:我用的有源485

希望各位不吝赐教!

try
                {
                    //读取平台6个缸的行程反馈数据
                    if ((argument as ThreadMethodHelper).runningFlag1)
                    {
                        gang_F = master.ReadHoldingRegisters(1, 11, 6);//0-16383
                        (argument as ThreadMethodHelper).returnValue1 = gang_F;
                    }

                    //读取支架六个传感器的反馈数据
                    if ((argument as ThreadMethodHelper).runningFlag2)
                    {
                        gang_F = master.ReadHoldingRegisters(1, 0, 6);//0-16383
                        (argument as ThreadMethodHelper).returnValue2 = gang_F;
                    }

                    //读取陀螺仪数据
                    if ((argument as ThreadMethodHelper).runningFlag3)
                    {
                        GyroParameters = master.ReadHoldingRegisters(0x50, 0x34, 12);
                        (argument as ThreadMethodHelper).returnValue3 = GyroParameters;
                    }

                    if ((argument as ThreadMethodHelper).QDOutput != null)
                    {
                        master.WriteMultipleRegisters(1, 101, (argument as ThreadMethodHelper).QDOutput);
                    }
                    //Thread.Sleep(50);

                }
                catch (Exception ex)
                {
                    //timer.Enabled = false;
                    MessageBox.Show(ex.Message.ToString() + "\r\n请检查通讯");
                    Environment.Exit(0);

                }      

3个回答

解决了。Modbus每一次发送指令后,都要有一个延时来判断数据结束,原来代码里没有延时,现在加入10ms延时OK!

ThreadMethodHelper 再哪里定义的

master.WriteMultipleRegisters这里写寄存器的代码是同步的话,它会造成阻塞,要放入多线程,但是你的线程调用的代码可能不正确,比如过度同步,要看完整的程序

如果两个设备,分别走两个串口,那根本不可能有这种问题,因为肯定是做两个线程分别进行交互的,会出现卡顿那么就是你的线程部分有问题;
如果你是一个串口走两个设备,那么用设备号也可以区分设备,一样不应该有卡顿问题;
你可以具体描述一下你工程的做法,以便进一步分析。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐