[西门子] 照猫画虎-----学习SMART 200 V2.4自带的Modbus_TCP例子_2

[复制链接]
查看57662 | 回复0 | 2024-8-23 18:09:28 | 显示全部楼层 |阅读模式
前面一篇文章给大家描述了学习的需求,大体介绍了西门子给出的2个例子。不知道大家有没有看看帮助,大体了解下那2个例子。

关于前文提到的如何启动,如何循环读写,到底是如何实现的呢?

1 如何启动?

  在2.2版本的时候,用了SM0.1 ,去触发一个位,建立连接。当连接建立成功后,ConnectDone 为1 ,利用这个连接建立的信号,去启动读写指令。每一个读写块的Done 为1后,依次启动下一个块,形成循环。

  2.4版本呢?在第一个例子里面,我们看到,外部的管脚,没有ConnectDone ,这个连接成功的标志,在库分配的存储区的V中,也就是说,不分配库存储区,是无法利用这个地址的。对于要封装的程序,这个就难处理。



这个图,我们再贴一次。

Connect 指令用了SM0.0指令,一直为ON。在监控模式下,可以看到,系统上电后,如果客户端与服务器建立了链接,尽管Req指令未触发,Done 为1 。那么这个Done位,用来启动循环。(实际有可能已经断开链接,不是特别的严谨)

2 如何读写操作及循环

循环是逻辑的要点和难点。

例子程序是用JMP 和Done 形成了个循环。上一篇文章的结尾,给大家提醒了JMP 的使用。我们通过例子程序看到,例子程序已经进行了读写处理。但写指令处理的距离实际使用还有一段距离, 例如,我们要执行一个清零动作。我们要保证写清零执行顺利执行,同时又要确保当指令完成后,不再重复执行。我们就在读循环中,做个条件判断,当发现要执行写指令时,程序去进行写指令,写指令执行完毕后,复位标志位,开启读指令。如下图所示:



图中的P3 即写指令的判断条件。当写指令完成后,进行了复位,如图所示

例子程序学习完毕后,我们根据自己的需求,封装成所需的程序块,如下图所示:



这是对于一个秤的读写。那么2个秤呢,或者更多秤呢?一开始想歪了,觉得只要满足自己的需求,就可以了。自己的应用环境里,最多也就2个秤。没有搞定重复调用的问题,即指针在子程序中如何处理。于是2个秤,合并成了一个块,如下图所示:



因为这个事,被万老师一顿熊。

另外,关于循环,我后来又用步程序做了个循环。

小结一下:

1、关于西门子提供的2个例子,我学习了JMP 指令如何使用。

2、在如何封装的问题上,有了深刻的认识。

对于万老师说的垃圾程序举例,我由100%的赞成到30%的赞成再到80%赞成,经历了一个过山车。毕竟不是一点知识没学习到。

原文的链接地址:【万泉河】PLC垃圾程序解读赏析(一)

程序经过万老师的修改,终于实现了重复调用。如下图所示:



上图是模拟测试的。

例子程序的学习,暂时到这。等遇到项目的时候,实际测试和修改。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则