签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
如题,当有 多个modbus从站时,PLC读写每个从站的指令不能同时用,上一个指令执行完毕后,下一个指令才能执行,即使每个从站只有一条读指令,如果我有100个从站,每个站的读取完毕的平均时间按20ms计算,那么轮询一遍(假设每个站通讯都正常)的周期也有 20*100=2000ms;而实际应用中从站读写的周期恐怕都比20ms大很多,导致轮询周期太长,PLC采集到的数据时间差比较大。
我做过16个从站数据的读取,超时时间设置为80ms,一个从站无响应的情况下,轮询周期已经达2秒左右。
如果从站中有个别通讯故障,每个轮询周期时间还要加上故障从站的超时时间,轮询周期甚至翻上几倍。
我个人感觉从程序方面提高轮询速度基本上没有什么好办法了,论坛里各位大侠,谁有从硬件方面提高轮询速度的办法呢?
比如有没有modbus多串口的代理智能硬件,每个串口作为一个虚拟主站读写与之连接的从站,这样一个10串口的智能硬件,每个串口同时工作,就可同时读取10个从站的数据,数据存储在智能硬件的存储器中。
智能硬件与PLC连接的串口设置成一个虚拟从站,PLC通过一个指令便可读取10个从站的所有数据。
不知如此方案能否实现?
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1409729&b_id=64&s_id=0&num=26
我们可否交换这个很多从站的程序互相了解一下?
modbus是以信息数量和信息长度算时间的。不是按站数算的。
努力做到必要读取的时候才读,有数据变化时才写,才是争取时间的主动做法。
全体信息顺序轮询绝对是不必的。
没有运行的驱动器读它的当前电流,是多余的。
正在报警的驱动器只有写复位位才具有意义。
正在运行的驱动器不断地写旋转指令,纯粹白费心机。
策略很重要,成功实施同样重要。对于这个话题,你实施过有何种策略?
你说的这些多余的命令,也要先读取当前从站状态才行呀。
不然怎么知道驱动器在运行、还是报警、难道这些要通过外部端子来判断吗?
你不写入运行,它会运行吗?
它已经运行了,还要再给运行吗?
读取当前状态是最常用的,大概时刻都可以在读。不过,已经停稳了的驱动器,真的有必要继续读吗?那这是你的策略。
反正宗旨是能不通讯就不通讯,能少读写一个字节就少读写一个。
精简到最后一定一定要留有仅仅的唯一一条读指令在线路上填空。否则线路一但空闲,驱动器的离线检测会报警。(所有驱动器都会检测任何的信息,以证实自己在线)
看来应用场合不同,在软件上提升轮询速度的方法也不一样啊,机械运动控制、过程控制、数据采集等场合还有区别的。
我应用的场合仅限于数据采集,大多数是传感器数据,根据采集的数据进行数据记录和报警提示,可以说只有读取,没有写入,所以才有此一问。
对于变化缓慢的数据采集间隔时间长些,可以忽略轮询周期的影响;
对于变化较快的数据采集间隔短些,避免一些数据遗漏,从站少还好,从站多了受限于轮询速度。
每个从站数据量也不大。所以轮询速度几乎只受到站点数量的影响。
其实,传感器数据也可已通过PLC开关量、模拟量模块采集,但是数量有限,成本高;而用modbus总线最难的就是数据延迟问题的解决。
如果要求实时性高的MODBUS就不是很合适了。MODBUS虽然通用性强,成本低,但是实时性不高。如果要求高只能考虑DP/PN之类的总线了
以前做的16个从站采集方案时考虑过,经过选件询价,最后算了一下,成本不是一般的高,支持DP/PN的传感器价格比模拟信号或modbus的高出很多,最后还是放弃了。用的modbus总线,凑合用,但是总感觉还能再提高。
引用2楼详细内容:
很好,很好。
说出了我们之间的行业不同造成基本的区别。
用于传感器数据采集的,非常注重采集时间的影响。如果采集频率接近轮训的周期,例如采集周期需要500毫秒,而轮训周期在350到550毫秒之间的话,那么有可能相邻的两次采集相差了两次轮训或者1次轮训。这样的差别采集到的数据是有明显的区别的。
这种情况实在很难解决。只能用其他高性能系统控制了。
如果把采集周期定得很大,可以减少上述差异带来的影响,以致相差一两个轮训周期都不会产生影响。但是就本身采集周期过大已经是一种影响了。如果不想放弃200系统,设计人员需要慎重考虑两种周期的互相影响做好相应的调整。
smart 200,加一个485通讯模块,也不贵。
可以一个接口负责允许响应慢的从站。
另一个接口负责需要响应快的从站。
你这个做法就像银行vip提款都要排队的节奏。还是优先级比较实际。
我是从银行排队这里悟出来的。当时有4个vip进来取款,但是就没有一般客户在场,那么vip也可以在普通窗口取钱吧,这样是不是快一点?你开两个通讯口就相当于开两个服务窗口吧。
如果当时相反,全场都是一般客户,那么vip窗口干嘛好呢?也可以开放给一般客户吧?此时又vip到了。就让他插队到最快的一个窗口办理了。
道理都是相近的,你开了两个通讯口,就等于是把从站分成两批,各自还是遵守vip插队的原则最好。
策略问题,策略问题。
用串口服务器,比如说8个com口,一个网口,在电脑上虚拟出8个串口,相当提升8倍速率
串口转以太网网关没有测试过,不好说
我曾经做过抄表的,一个com口带30~40个设备,轮询一次20S下去了,不过记录交采表数据对实时性要求不高
半秒钟一个!太慢点的吧?
一方面是那个串口网关硬件配置太次,响应慢,另一方面是一个设备n条指令
楼主你的线路长吗?用多少速度?
从站的回复时间有分类吗?
从站的波特率要有分组吗?
你把它们当作是一班学生,要有方法分别对应尖子生,普通生和后进生。不能用统一的一个方法进行通讯。特别是一种波特率,不可取。活活握杀了一些强大高性能的优点。明明16毫秒以经可以获取到32个字节的数据。偏偏要用上40多毫秒。
主站和从站必须匹配才能做到高效率。
我的成绩:
modbus从站、主站都是我写的,波特率19.2K。每次读写数据量在10个字(保持寄存器)左右,主站可与1-15个从站通讯,可动态加站进来,撤站出去,平均每次通讯的时间约为50ms。也就是任何情况下,可保证1秒内轮询一周。当然主站采用中断方式处理,不受扫描周期影响。
但是如果从站不是你写的,你就得留足够的时间余量给从站,速度自然也就下来了。
这是一个很好的办法,可以尝试一下。对于工控机可以多扩展几个串口,每个串口用不同的波特率;PLC的话,不知道一条总线上,能不能动态切换多个波特率来实现,值得实验一下
大侠,你有点误解我的意思了。如果有多个口的话,那是土豪,土豪根本不是事。钱能解决的问题就没有问题。
我说的是一个串口。
试验我真的没有做过。但是你在调通讯的时候不是也试过波特率不同是不能通信的吗。而modbus的ctrl上留有波特率参数管脚,是可以修改的,但是我们通常都写上常数9600。留有mode管脚是可以off的,但我们通常都用sm0.0填上了。作者的用意从这里应该可以猜到。我没猜对也有99%。假如1%都猜不对的话,那么就是被作者套路了。
我使用的驱动器(从站)都可以达到38400。有一种可以达到115200 。我一般选择38400,所以没有这么试过。
如果从站波特率跨度大,真的有必要使用两种波特率进行通讯。(两种波特率意味着可以挂几个从站?想想而已)
分享
扫码分享好友 任选多种好礼
收藏
有帮助
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录