作者 | 主题 |
---|---|
doubaoning 游民 经验值:127 发帖数:21 精华帖:0 |
楼主 2019-12-30 11:59:17
主题:求一个能用的modbus rtu主站轮询程序 最近按照西门子官方例程里写了个程序,完成位或故障位做轮询条件的程序,程序开始跑着没问题,轮询非常块,某时就卡死不发指令了,指示灯也不闪了。求一个现场测试没问题的 modbus rtu主站轮询程序,谢谢,发我邮箱: dou_baoning@163.com |
yming 至圣 经验值:127287 发帖数:21996 精华帖:825 |
1楼 2019-12-30 13:50:27
主题:回复:求一个能用的modbus rtu主站轮询程序 必须按异步方式(按完成位或故障位做轮询条件的程序)。其他的方法都有隐患。 Modbus RTU是通过CM485模块进行的。要找出卡住的原因。 检查程序:注意Done、Error仅存在一个扫描周期。你是否使用了其他中断?
学而时习之,不亦说乎?温故而知新,不亦乐乎?
|
'Razor 至圣 经验值:20113 发帖数:2773 精华帖:23 |
3楼 2019-12-30 21:45:29
主题:回复:求一个能用的modbus rtu主站轮询程序 可以试试版主Zane的程序
Less is more……
|
454565806 游士 经验值:206 发帖数:13 精华帖:0 |
6楼 2020-02-13 22:21:28
主题:回复:求一个能用的modbus rtu主站轮询程序 我发一个485轮询通信架构你看下。由于带的设备少此程序不是很全。程序修改一下可以做到按需要轮询,深入了解可以问我。此程序架构所有PLC都可以实现,单站速度3毫秒轮询。此程序是读取485继电器板用的 |
Zane 版主 经验值:76319 发帖数:19347 精华帖:378 |
7楼 2020-02-13 23:47:51
主题:回复:求一个能用的modbus rtu主站轮询程序 脱离了工况与使用环境的性能指标只能是吹牛皮! 3毫秒轮询? 9600波特率,一次刷2个存储器单元,你试试!? 莫不是把扫描周期当成轮询时间了吧?!
Zane
注册自动化系统工程师
Always save before download
|
454565806 游士 经验值:206 发帖数:13 精华帖:0 |
9楼 2020-02-14 02:58:30
主题:回复:求一个能用的modbus rtu主站轮询程序 我看了你一篇MODBUS RTU的一篇帖子,你形容的很好,轮询有高速,有低速。我第一做RTU通信的时候做出的架构就是和你说的差不多功能,以上发的附件不完整。完整的你应该会认可的。我的指令是定制的,不能用标准MODBUS库。所以我都是用自由口写的。没事不要那么大火气。我一个西门子项目没做过的,能在这里和你讨论。对我来说已经学了很多。同时也敬佩了你们的专业知识。其实很多时候我的野路子也能给你们启发。我从来不吹牛,没有数据或不能实现的东西不能乱说。S7-200SMART我按我的架构写了轮询程序。1200的我也写了轮询架构。松下,三菱都用了很多台机器,一种方法而已。 |
Zane 版主 经验值:76319 发帖数:19347 精华帖:378 |
10楼 2020-02-14 14:19:17
主题:回复:求一个能用的modbus rtu主站轮询程序 我对野路子没有兴趣,奉劝你也别热衷于野路子,这只会毁了你的技术前程! 工控是一个理论与实践紧密结合的行业, 希望你在能够好好学习,论坛也能给予你应有的帮助,如果还像上两个帖子一样插大葱装象,那只能是贻笑大方了。
Zane
注册自动化系统工程师
Always save before download
|
Zane 版主 经验值:76319 发帖数:19347 精华帖:378 |
11楼 2020-02-14 14:36:20
主题:回复:求一个能用的modbus rtu主站轮询程序 有存在即合理一说,但我认为很多不合理的事情依旧存在是因为还有很多人自以为是。
Zane
注册自动化系统工程师
Always save before download
|
一串奇怪的数字 侠士 经验值:1326 发帖数:114 精华帖:4 |
12楼 2020-06-01 14:09:23
主题:回复:求一个能用的modbus rtu主站轮询程序 1.时间+DONE双保险,时间可以大一些,举个例子假定正常读次需要20ms,我们可以把时间轮询设到50ms.即50ms未收到Done、Error,就指向下一个。
人生没有边界,一切皆有可能。
|
Zane 版主 经验值:76319 发帖数:19347 精华帖:378 |
13楼 2020-06-01 23:23:09
主题:回复:求一个能用的modbus rtu主站轮询程序 也是个没脑子的,设置超时时间的依据是什么呀?
Zane
注册自动化系统工程师
Always save before download
|
一串奇怪的数字 侠士 经验值:1326 发帖数:114 精华帖:4 |
14楼 2020-06-02 09:27:37
主题:回复:求一个能用的modbus rtu主站轮询程序 如果看过西门子库的原码,你就会知道这个timeout 是干嘛的, 也就会理解为什么有时候明明设置的timeout ,这个超时的错误就是出不来,也就会发生done 和error都出不来时候。
人生没有边界,一切皆有可能。
|
kenshinguo 侠圣 经验值:2627 发帖数:736 精华帖:3 |
15楼 2020-06-02 10:38:06
主题:回复:求一个能用的modbus rtu主站轮询程序 自己加超时检测,强行切换通信进程还是要注意的。各品牌PLC的通信功能块自己都有超时检测的,默认时间大部分都是1s,如果自己超时检测短于这个时间的话,碰到一个有问题的站,往往轮询就会出问题了。如果自己超时检测大于这个时间的话,其实还不等你超时时间到,error信号就有了。 |
一串奇怪的数字 侠士 经验值:1326 发帖数:114 精华帖:4 |
16楼 2020-06-02 11:28:33
主题:回复:求一个能用的modbus rtu主站轮询程序 西门子库最大问题就是会卡在第4步 0 = 空闲 1 = 等待发送 2 = 等待发送完成 3 =等待接收第一个字符 4 = 等待接收完成 5 =接收完成 一旦走到第4步后,这个timeout是给不出来的。
人生没有边界,一切皆有可能。
|
Zane 版主 经验值:76319 发帖数:19347 精华帖:378 |
17楼 2020-06-02 23:01:59
主题:回复:求一个能用的modbus rtu主站轮询程序 现在的源代码你看过吗? 明确告诉你,不判断ERROR与DONE信号,靠所谓的超时来重新触发轮询通信任务,更会雪上加霜,导致你所谓的通信卡顿现象。 另外,RTU接口是在主机还是在分布式IO站上,处理的方式也有不同,好好看看手册。 没用好就没用好,别动不动就说官方的库有问题,你也太小瞧西门子了。
Zane
注册自动化系统工程师
Always save before download
|
Zane 版主 经验值:76319 发帖数:19347 精华帖:378 |
19楼 2020-06-03 00:03:38
主题:回复:求一个能用的modbus rtu主站轮询程序 Modbus_Master 通信规则 ● 必须先执行 Modbus_Comm_Load 组态端口,然后 Modbus_Master 指令才能与该端口通信。 ● 如果要将某个端口用于初始化 Modbus 主站请求,则 Modbus_Slave 不应使用该端口。Modbus_Master 执行的一个或多个实例可使用该端口,但是对于该端口,所有Modbus_Master 执行都必须使用同一个Modbus_Master 背景数据块。 ● Modbus 指令不使用通信中断事件来控制通信过程。用户程序必须轮询 Modbus_Master指令以了解传送和接收的完成情况。 ● 对于给定的端口,从程序循环 OB 中调用所有 Modbus_Master 执行。Modbus_Master 指令只能在一个程序循环或循环/延时执行等级执行。它们不能同时在两种执行优先级中执行。如果一个Modbus_Master 指令被另一个执行优先级更高的 Modbus_Master 取代,将导致不正确的操作。Modbus_Master 指令不能在启动、诊断或时间错误执行优先级执行。 ● Modbus_Master 指令启动传输后,必须连续执行已启用 EN 输入的该实例,直到返回状态 DONE=1 或状态 ERROR=1 为止。在这两个事件其中之一发生前,一个特殊的Modbus_Master 实例被视为已激活。原始实例激活后,调用已启用 REQ 输入的其它任何实例都将导致错误。如果原始实例的连续执行过程停止,则请求状态保持激活一段时间,该时间由静态变量“Blocked_Proc_Timeout”指定。一旦超出该时间段,则下一个使用激活的 REQ 输入调用的 Modbus_Master 指令成为激活实例。这可以防止单个 Modbus_Master 指令独占或锁定对端口的访问。如果在由静态变量“Blocked_Proc_Timeout”指定的时间段内没有启用原始激活的实例,则下次执行此实例(未设置 REQ)时将清除激活状态。如果设置了REQ,则此次执行将启动新的Modbus_Master 请求,如同其它实例未曾激活一样。
Zane
注册自动化系统工程师
Always save before download
|
一串奇怪的数字 侠士 经验值:1326 发帖数:114 精华帖:4 |
20楼 2020-06-03 10:16:03
主题:回复:求一个能用的modbus rtu主站轮询程序 1:回到本帖的楼主遇到的问题,通讯就是卡死了,真的是没有用好吗? 2.必须先执行 Modbus_Comm_Load 组态端口,然后 Modbus_Master 指令才能与该端口通信 3. Modbus_Comm_Load把MODE藏在静态变量里,坑了多少新手?把这个MODE放到接口处就那么难吗? 4:曾经有个需求,一个串口又要做主站,又要做从站?(200PLC )难道说用户的这个需求就一定有问题,必须换PLC?
人生没有边界,一切皆有可能。
|
一串奇怪的数字 侠士 经验值:1326 发帖数:114 精华帖:4 |
21楼 2020-06-03 19:38:15
主题:回复:求一个能用的modbus rtu主站轮询程序 另外,我仔细拜读过Zane 版主的程序,写的真的非常好。
人生没有边界,一切皆有可能。
|
一串奇怪的数字 侠士 经验值:1326 发帖数:114 精华帖:4 |
22楼 2020-06-04 08:42:59
主题:回复:求一个能用的modbus rtu主站轮询程序 最后说一点,标准化编程好归好,但是它是以牺牲内存和计算效率为代价的。以Zane版主的程序为例,就一个MODBUS 轮询就占了多少内存?
人生没有边界,一切皆有可能。
|
Zane 版主 经验值:76319 发帖数:19347 精华帖:378 |
23楼 2020-06-04 22:24:50
主题:回复:求一个能用的modbus rtu主站轮询程序 枉费我一番苦心,我就是要错开一个扫描周期,另外我可以得以实现通信轮询任务的自激启动,第三让总线得以平静,提高通信的可靠性
Zane
注册自动化系统工程师
Always save before download
|
芳季 至圣 经验值:67465 发帖数:14768 精华帖:100 |
24楼 2020-06-04 22:45:05
主题:回复:求一个能用的modbus rtu主站轮询程序 绝对可以省。但后面的工作真的不必时就是省下的。 我先读一个驱动器的报警字节,如果发现驱动器根本上就离线了,后面的读什么写什么都是不必的了。直接跳到下一站驱动器。如果读到有报警那么余下的驱动指令都是不必的了。只留复位在候命。 |
Zane 版主 经验值:76319 发帖数:19347 精华帖:378 |
25楼 2020-06-04 22:53:29
主题:回复:求一个能用的modbus rtu主站轮询程序
Zane
注册自动化系统工程师
Always save before download
|
Zane 版主 经验值:76319 发帖数:19347 精华帖:378 |
26楼 2020-06-04 23:01:56
主题:回复:求一个能用的modbus rtu主站轮询程序 芳侠你讲的问题,超出了我的例程所包含功能的范围,我的例程是基于任务的轮询通信,不是基于站点的轮询通信,若是后者,每个站的任务中只要一个出错,后续的任务就不必再执行下去了。
Zane
注册自动化系统工程师
Always save before download
|
Zane 版主 经验值:76319 发帖数:19347 精华帖:378 |
27楼 2020-06-05 00:53:45
主题:回复:求一个能用的modbus rtu主站轮询程序 这是经过平衡取舍的,有所为而有所不为,程序在S7-1200经历了若干个版本的修改,使最终用了较多的数据存储区,但程序量是十分精简的,执行的效率是比较高的。 另外,使用全优化的编程模式,即使对于保持数据区域的使用也是可以根据实际需求调节的
Zane
注册自动化系统工程师
Always save before download
|