技术论坛

提高modbus多从站轮询速度的方法都有哪些?

作者 主题
侠圣

经验值: 4521
发帖数: 554
精华帖: 4
主题:【探讨】提高modbus多从站轮询速度的方法都有哪些?
推荐帖


只看楼主 楼主 2017-07-18 16:44:08

如题,当有 多个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

至圣

经验值: 67543
发帖数: 14782
精华帖: 100
回复:提高modbus多从站轮询速度的方法都有哪些?


只看楼主 1楼 2017-07-18 20:20:56

我们可否交换这个很多从站的程序互相了解一下?


 
以下网友喜欢您的帖子:

  
至圣

经验值: 67543
发帖数: 14782
精华帖: 100
回复:提高modbus多从站轮询速度的方法都有哪些?
推荐帖


只看楼主 2楼 2017-07-18 20:36:55

modbus是以信息数量和信息长度算时间的。不是按站数算的。

努力做到必要读取的时候才读,有数据变化时才写,才是争取时间的主动做法。

全体信息顺序轮询绝对是不必的。

没有运行的驱动器读它的当前电流,是多余的。

正在报警的驱动器只有写复位位才具有意义。

正在运行的驱动器不断地写旋转指令,纯粹白费心机。

策略很重要,成功实施同样重要。对于这个话题,你实施过有何种策略?


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 3425
发帖数: 473
精华帖: 1
回复:提高modbus多从站轮询速度的方法都有哪些?
推荐帖


只看楼主 3楼 2017-07-18 20:57:18
以下是引用芳季在2017-07-18 20:36:55的发言 >2楼

modbus是以信息数量和信息长度算时间的。不是按站数算的。

努力做到必要读取的时候才读,有数据变化时才写,才是争取时间的主动做法。

全体信息顺序轮询绝对是不必的。

没有运行的驱动器读它的当前电流,是多余的。

正在报警的驱动器只有写复位位才具有意义。

正在运行的驱动器不断地写旋转指令,纯粹白费心机。

策略很重要,成功实施同样重要。对于这个话题,你实施过有何种策略?

你说的这些多余的命令,也要先读取当前从站状态才行呀。

不然怎么知道驱动器在运行、还是报警、难道这些要通过外部端子来判断吗?


 
以下网友喜欢您的帖子:

  
至圣

经验值: 67543
发帖数: 14782
精华帖: 100
回复:提高modbus多从站轮询速度的方法都有哪些?
推荐帖


只看楼主 4楼 2017-07-18 22:35:16
以下是引用_领域在2017-07-18 20:57:18的发言 >

你说的这些多余的命令,也要先读取当前从站状态才行呀。

不然怎么知道驱动器在运行、还是报警、难道这些要通过外部端子来判断吗?

你不写入运行,它会运行吗?

它已经运行了,还要再给运行吗?

读取当前状态是最常用的,大概时刻都可以在读。不过,已经停稳了的驱动器,真的有必要继续读吗?那这是你的策略。

反正宗旨是能不通讯就不通讯,能少读写一个字节就少读写一个。

精简到最后一定一定要留有仅仅的唯一一条读指令在线路上填空。否则线路一但空闲,驱动器的离线检测会报警。(所有驱动器都会检测任何的信息,以证实自己在线)


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 4521
发帖数: 554
精华帖: 4
回复:提高modbus多从站轮询速度的方法都有哪些?
推荐帖


只看楼主 楼主 5楼 2017-07-19 09:33:09
以下是引用芳季在2017-07-18 20:36:55的发言 >2楼

modbus是以信息数量和信息长度算时间的。不是按站数算的。

努力做到必要读取的时候才读,有数据变化时才写,才是争取时间的主动做法。

全体信息顺序轮询绝对是不必的。

没有运行的驱动器读它的当前电流,是多余的。

正在报警的驱动器只有写复位位才具有意义。

正在运行的驱动器不断地写旋转指令,纯粹白费心机。

策略很重要,成功实施同样重要。对于这个话题,你实施过有何种策略?

看来应用场合不同,在软件上提升轮询速度的方法也不一样啊,机械运动控制、过程控制、数据采集等场合还有区别的。

我应用的场合仅限于数据采集,大多数是传感器数据,根据采集的数据进行数据记录和报警提示,可以说只有读取,没有写入,所以才有此一问。

对于变化缓慢的数据采集间隔时间长些,可以忽略轮询周期的影响;

对于变化较快的数据采集间隔短些,避免一些数据遗漏,从站少还好,从站多了受限于轮询速度。

每个从站数据量也不大。所以轮询速度几乎只受到站点数量的影响。

其实,传感器数据也可已通过PLC开关量、模拟量模块采集,但是数量有限,成本高;而用modbus总线最难的就是数据延迟问题的解决。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 37446
发帖数: 5133
精华帖: 47
回复:提高modbus多从站轮询速度的方法都有哪些?
推荐帖


只看楼主 6楼 2017-07-19 09:54:27

 如果要求实时性高的MODBUS就不是很合适了。MODBUS虽然通用性强,成本低,但是实时性不高。如果要求高只能考虑DP/PN之类的总线了


工业起重机防摇摆 QQ:404136820 AntiSwayControl
以下网友喜欢您的帖子:

  
侠圣

经验值: 4521
发帖数: 554
精华帖: 4
回复:提高modbus多从站轮询速度的方法都有哪些?
推荐帖


只看楼主 楼主 7楼 2017-07-19 10:49:31
以下是引用威师爷在2017-07-19 09:54:27的发言 >6楼

 如果要求实时性高的MODBUS就不是很合适了。MODBUS虽然通用性强,成本低,但是实时性不高。如果要求高只能考虑DP/PN之类的总线了

以前做的16个从站采集方案时考虑过,经过选件询价,最后算了一下,成本不是一般的高,支持DP/PN的传感器价格比模拟信号或modbus的高出很多,最后还是放弃了。用的modbus总线,凑合用,但是总感觉还能再提高。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 67543
发帖数: 14782
精华帖: 100
回复:提高modbus多从站轮询速度的方法都有哪些?
推荐帖


只看楼主 8楼 2017-07-19 10:59:21
以下是引用kibu在2017-07-19 09:33:09的发言 >5楼

看来应用场合不同,在软件上提升轮询速度的方法也不一样啊,机械运动控制、过程控制、数据采集等场合还有区别的。

我应用的场合仅限于数据采集,大多数是传感器数据,根据采集的数据进行数据记录和报警提示,可以说只有读取,没有写入,所以才有此一问。

对于变化缓慢的数据采集间隔时间长些,可以忽略轮询周期的影响;

对于变化较快的数据采集间隔短些,避免一些数据遗漏,从站少还好,从站多了受限于轮询速度。

每个从站数据量也不大。所以轮询速度几乎只受到站点数量的影响。

其实,传感器数据也可已通过PLC开关量、模拟量模块采集,但是数量有限,成本高;而用modbus总线最难的就是数据延迟问题的解决。

以下是引用芳季在2017-07-18 20:36:55的发言 >2楼:modbus是以信息数量...

引用2楼详细内容:

modbus是以信息数量和信息长度算时间的。不是按站数算的。

努力做到必要读取的时候才读,有数据变化时才写,才是争取时间的主动做法。

全体信息顺序轮询绝对是不必的。

没有运行的驱动器读它的当前电流,是多余的。

正在报警的驱动器只有写复位位才具有意义。

正在运行的驱动器不断地写旋转指令,纯粹白费心机。

策略很重要,成功实施同样重要。对于这个话题,你实施过有何种策略?

很好,很好。

说出了我们之间的行业不同造成基本的区别。

用于传感器数据采集的,非常注重采集时间的影响。如果采集频率接近轮训的周期,例如采集周期需要500毫秒,而轮训周期在350到550毫秒之间的话,那么有可能相邻的两次采集相差了两次轮训或者1次轮训。这样的差别采集到的数据是有明显的区别的。

这种情况实在很难解决。只能用其他高性能系统控制了。

如果把采集周期定得很大,可以减少上述差异带来的影响,以致相差一两个轮训周期都不会产生影响。但是就本身采集周期过大已经是一种影响了。如果不想放弃200系统,设计人员需要慎重考虑两种周期的互相影响做好相应的调整。


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 4030
发帖数: 1259
精华帖: 6
回复:提高modbus多从站轮询速度的方法都有哪些?


只看楼主 9楼 2017-07-19 11:34:44

 

smart 200,加一个485通讯模块,也不贵。

可以一个接口负责允许响应慢的从站。

另一个接口负责需要响应快的从站。


QQ 402550360 TEL 17606539722
以下网友喜欢您的帖子:

  
至圣

经验值: 67543
发帖数: 14782
精华帖: 100
回复:提高modbus多从站轮询速度的方法都有哪些?


只看楼主 10楼 2017-07-19 11:47:04
以下是引用master_mb在2017-07-19 11:34:44的发言 >9楼

 

smart 200,加一个485通讯模块,也不贵。

可以一个接口负责允许响应慢的从站。

另一个接口负责需要响应快的从站。

你这个做法就像银行vip提款都要排队的节奏。还是优先级比较实际。

我是从银行排队这里悟出来的。当时有4个vip进来取款,但是就没有一般客户在场,那么vip也可以在普通窗口取钱吧,这样是不是快一点?你开两个通讯口就相当于开两个服务窗口吧。

如果当时相反,全场都是一般客户,那么vip窗口干嘛好呢?也可以开放给一般客户吧?此时又vip到了。就让他插队到最快的一个窗口办理了。

道理都是相近的,你开了两个通讯口,就等于是把从站分成两批,各自还是遵守vip插队的原则最好。

策略问题,策略问题。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 12573
发帖数: 2503
精华帖: 31
回复:提高modbus多从站轮询速度的方法都有哪些?


只看楼主 11楼 2017-07-19 14:24:49
RS485的Modbus多个传感器采集,想要快,最直接的办法就是提高通讯波特率。
还有就是自己写自由通讯协议了,根据通讯波特率使用定时中断、通讯中断来直接读取从站数据到每个从站独立的数组,主程序直接使用从站数组数据就是了。

不过,SMART速度都很快了,主程序都能控制在10ms内了,那么不用定时中断直接在主程序也可以。

其实,SMART本身有TCP/IP可以考虑连一个ModbusTCP/IP多路串口服务器。串口服务器负责采集所有传感器数据缓存起来,然后PLC只是去读取服务器里面的数据,这样感觉就可以一次线读取全部的传感器数据了。串口服务器尽量选多串口的,比如4个串口,然后每路25个传感器,4路并发采集,每100ms一个设备,3秒内基本上都可以全部采集完100个传感器了。不过,目测串口服务器都不便宜,自己做又很花时间,所以你自己看着办咯。

 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2013
发帖数: 208
精华帖: 0
回复:提高modbus多从站轮询速度的方法都有哪些?


只看楼主 12楼 2017-07-19 19:05:48

用串口服务器,比如说8个com口,一个网口,在电脑上虚拟出8个串口,相当提升8倍速率


串口转以太网网关没有测试过,不好说


我曾经做过抄表的,一个com口带30~40个设备,轮询一次20S下去了,不过记录交采表数据对实时性要求不高


 
以下网友喜欢您的帖子:

  
至圣

经验值: 67543
发帖数: 14782
精华帖: 100
回复:提高modbus多从站轮询速度的方法都有哪些?


只看楼主 13楼 2017-07-19 20:22:30

半秒钟一个!太慢点的吧?


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2013
发帖数: 208
精华帖: 0
回复:提高modbus多从站轮询速度的方法都有哪些?


只看楼主 14楼 2017-07-19 20:24:16
以下是引用芳季在2017-07-19 20:22:30的发言 >13楼

半秒钟一个!太慢点的吧?

一方面是那个串口网关硬件配置太次,响应慢,另一方面是一个设备n条指令


 
以下网友喜欢您的帖子:

  
至圣

经验值: 67543
发帖数: 14782
精华帖: 100
回复:提高modbus多从站轮询速度的方法都有哪些?


只看楼主 15楼 2017-07-20 08:44:19

楼主你的线路长吗?用多少速度?


 
以下网友喜欢您的帖子:

  
至圣

经验值: 67543
发帖数: 14782
精华帖: 100
回复:提高modbus多从站轮询速度的方法都有哪些?


只看楼主 16楼 2017-07-21 10:53:04

从站的回复时间有分类吗?

从站的波特率要有分组吗?

你把它们当作是一班学生,要有方法分别对应尖子生,普通生和后进生。不能用统一的一个方法进行通讯。特别是一种波特率,不可取。活活握杀了一些强大高性能的优点。明明16毫秒以经可以获取到32个字节的数据。偏偏要用上40多毫秒。


 
以下网友喜欢您的帖子:

  
版主

经验值: 25995
发帖数: 11809
精华帖: 43
回复:提高modbus多从站轮询速度的方法都有哪些?


只看楼主 17楼 2017-07-22 21:41:09

主站和从站必须匹配才能做到高效率。

我的成绩:

modbus从站、主站都是我写的,波特率19.2K。每次读写数据量在10个字(保持寄存器)左右,主站可与1-15个从站通讯,可动态加站进来,撤站出去,平均每次通讯的时间约为50ms。也就是任何情况下,可保证1秒内轮询一周。当然主站采用中断方式处理,不受扫描周期影响。


但是如果从站不是你写的,你就得留足够的时间余量给从站,速度自然也就下来了。


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 4521
发帖数: 554
精华帖: 4
回复:提高modbus多从站轮询速度的方法都有哪些?


只看楼主 楼主 18楼 2017-07-23 08:12:05
以下是引用芳季在2017-07-21 10:53:04的发言 >16楼

从站的回复时间有分类吗?

从站的波特率要有分组吗?

你把它们当作是一班学生,要有方法分别对应尖子生,普通生和后进生。不能用统一的一个方法进行通讯。特别是一种波特率,不可取。活活握杀了一些强大高性能的优点。明明16毫秒以经可以获取到32个字节的数据。偏偏要用上40多毫秒。

这是一个很好的办法,可以尝试一下。对于工控机可以多扩展几个串口,每个串口用不同的波特率;PLC的话,不知道一条总线上,能不能动态切换多个波特率来实现,值得实验一下


 
以下网友喜欢您的帖子:

  
至圣

经验值: 67543
发帖数: 14782
精华帖: 100
回复:提高modbus多从站轮询速度的方法都有哪些?


只看楼主 19楼 2017-07-23 08:56:19
以下是引用kibu在2017-07-23 08:12:05的发言 >

这是一个很好的办法,可以尝试一下。对于工控机可以多扩展几个串口,每个串口用不同的波特率;PLC的话,不知道一条总线上,能不能动态切换多个波特率来实现,值得实验一下

大侠,你有点误解我的意思了。如果有多个口的话,那是土豪,土豪根本不是事。钱能解决的问题就没有问题。

我说的是一个串口。

试验我真的没有做过。但是你在调通讯的时候不是也试过波特率不同是不能通信的吗。而modbus的ctrl上留有波特率参数管脚,是可以修改的,但是我们通常都写上常数9600。留有mode管脚是可以off的,但我们通常都用sm0.0填上了。作者的用意从这里应该可以猜到。我没猜对也有99%。假如1%都猜不对的话,那么就是被作者套路了。

我使用的驱动器(从站)都可以达到38400。有一种可以达到115200 。我一般选择38400,所以没有这么试过。

如果从站波特率跨度大,真的有必要使用两种波特率进行通讯。(两种波特率意味着可以挂几个从站?想想而已)


 
以下网友喜欢您的帖子:

  
收起
提高modbus多从站轮询速度的方法都有哪些?
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。