技术论坛

 回复:如何使用Modbus轮询速度提高

返回主题列表
作者 主题
心语无量
游侠

经验值:542
发帖数:32
精华帖:0
楼主    2013-08-07 10:24:47
主题:如何使用Modbus轮询速度提高
我现在读和写,用的是1S脉冲,加上计数器,当计数值等于1,的时候,读参数值。当计数值等于2的时候,写参数值。但是这样速度慢,想问下,大家有没有快一点的读写轮询方法,用时间控制的方法效率不是很高,如果要读写多台设备的话,整个周期会延长很多时间
天天开心
芳季
至圣

经验值:72112
发帖数:15504
精华帖:101
6楼    2013-08-07 23:07:02
精华帖  主题:回复:如何使用Modbus轮询速度提高
出错后不用管的。只要下一轮通讯正常的话那个错误标志会自己变0的。
我说的那个贴我自己找不到了。
这个库我说说几个要点。我只用过主机程序,从机的没有用过。
ctrl指令两个触点长期接通就可以了。参数的话看着调吧。
MSG指令的EN位问题比较麻烦。长期接通不是办法,除非只有唯一的一个信息向外发送。多于一个信息的话就要切换开关状态,让出通讯。
要在什么时候断开呢?
当done位由0变1的时候,下一个周期就不要再执行这个MSG了。要把EN断开。是切换的时候了。当然不切换也不会错的,只是一直发送多余的相同的内容罢了。(如果你是从机,你烦不烦啊?一直在唠叨同一个事情)
这个0变1可能伴随着出错编号的产生,你要马上记下出错编号。因为下一个MSG可能使用到相同的出错编号地址。出错不影响你的切换。
first触点。无论如何请只给一个周期的信号就好了。多了只会坏事。如果信息内容变更了,就要把这个触点断开一个周期然后重新接通。还有一个要点。在EN位断开之前的一个周期,first位一定要先断开,这样才会在下次调用MSG子程序的时候可以产生上升缘。否则,又有机会说错了。
几个MSG参数不个别说了。手册都有。我说手册没有的。在first发出了信号之后Done位会在本个周期变0 。表示正在工作。这个0的期间不要更改任何参数,包括最后一个间接寻址里面的值。因为通讯过程中一直要读这些地址内容。一变了的话就会这个错那个错的了。很多人用通讯去修改变频器的速度给定,随时想改就改,未有理会Done位。结果在不该改的时候改了。结果就产生了通讯错。很莫名其妙的错。然而,这个错可能没有检测程序跟踪就溜走了。轮到了下一轮通讯的时候恰好又通讯正常了。结果就掩盖了刚才的错误,表面上看变频器一直都在工作,谁又会怀疑刚才已经发生了错误。最好是在EN位OFF的时候更改。
这个游戏是比较难玩。稍稍一错,就完了。也不知道哪里错。手册也没多说。只能面对着设备沉浸一段时间,否则一出错就打消了使用的念头了。
Zaxife
至圣

经验值:12614
发帖数:2450
精华帖:31
17楼    2013-08-15 03:07:25
精华帖  主题:回复:如何使用Modbus轮询速度提高
quote:[b]以下是引用心语无量在2013-08-14 16:29:06的发言:
额,我知道用时间写是很慢,用Done试过了,但是就像你说的,万一有一台出现故障,那就会无法正常读取和通信了,所以想问下,你的写入时靠什么去出发的,能说详细点,我刚开始用有很多不明白的地方,麻烦了。


写入靠三个条件(1 Done/2通讯错误/3自定义定时器时间到达)任一满足来触发的。
所有设备都正常时,Done可以最快速触发下一条通讯命令;
通讯质量不高时,通讯错误可以最快剔除不安分的从机减少所有设备扫描周期;
自定义定时器超时可以保证通信响应延时或者数据帧比较长时/或者在上面两种情况都无效时重新启动通讯。

一般来说吧,定义一个连续的存储区域来保存通讯数据,最后一个Word就用来保存通讯状态字。
在通讯初始化时把所有从机的通讯状态字都清零;
在读/写设备时有通讯错误就把数值30写入状态字(只要通讯有错误就把从机推迟到30个周期后再检测是再次通讯上);
每秒钟或者每个通讯扫描周期都去判断余下从机的状态字。如果状态字小于等于0则把当前从机通讯指令写入通讯发送缓存;如果状态字大于0则状态字-1。

这种做法,可以保证16台从机在有15台同时通讯中断的情况下,在29个周期内唯一通讯正常的从机都能得到最短的单机扫描周期响应时间。
比如错误重试定义为30秒,超时定义为250ms,那么最糟糕的1:15的情况下每4秒钟都有连续1.5秒的可连续操作时间而不用每次操作都要等待4秒才能响应操作。在1.5秒内任意读写操作都可以立刻得到响应。
如果15台从机不是同时通讯中断而是间隔2个扫描周期的话,那么每400ms左右都可以得到响应。

这种做法是我在PLC多从机通讯应用中能做到的比较折中的方案了。。。

至于中断方式就没必要了,因为没做过运动控制系统。
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。