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

[复制链接]
查看15764 | 回复0 | 2024-8-23 18:29:54 | 显示全部楼层 |阅读模式
先说一下,学习这个例子程序过程是痛苦的。但是我还是挺愿意把这个学习过程再翻出来,因为大部分的事情都是先苦后甜。

      大部分时候,我们主动学习新功能,大概率是因为有实际应用在等待。比如我学习SMART 200 的Modbus_TCP ,是因为实际的项目中经常要用到SMART 200PLC 与SIEMENS WP231 秤模块进行MODBUS TCP 通信。先简单介绍下与秤模块通信的几个简单需求,方便大家了解我后面要干什么

1 读取秤的毛重,净重。

2 读取秤的状态信息。

3 能够对称进行清零操作。

4 能够进行校秤工作。

其他更复杂的功能,我个人认为不是必须的,最起码可以不用做在程序里,调试时完成即可。但清零、校秤这些工作,当调试完成交给客户后,总归是要让客户能通过触摸屏进行操作。总不至于留给客户个秤软件,让客户自己去学习秤软件的使用吧。不要笑,我是见过,有人这么干过。给客户电脑上装了校秤软件SIWATOOL 。

学习是带着目的和需求的,否则没有具体的应用,大概率的要走向从入门到放弃。当然,我也不是从0开始,上述功能,我在2.2版本的时候已经实现了。西门子SMART PLC ,从2.2版本的时候就已经开始支持MODBUS TCP 通信,但软件没有自带库指令,如果需要,需要花钱购买库指令,我大约是花了250RMB ,买了个支持4个客户端的库程序。一经购买,永久免费。软件到了2.4版本之后,软件直接继承了Modbus TCP 库指令。新出的库指令,和购买的库指令版本不一致了。不可能一直用旧的库指令写程序,万一那天新的软件不支持了,咋整。或者人家的新的库指令,功能已经很先进了,你还在守着自己的老爷车,也不现实。况且,我项目上也面临着用2个秤的应用。旧程序也要升级,是在原库上升级,还是新指令库上升级,经过考虑,学习新的库指令,就成了必经之路。

       官方在S7-200 SMART PLUS 里面 和软件的帮助里各有一个例子程序。本来我还懂一点,看完了这两个例子程序,真的有点懵。

先来看第一个例子:





例子程序打开后,只有三行。这个例子程序说实话,只介绍了2点有用的信息,

1,报警故障因为库的原因,要单独另存。

2 ,如果判断连接已经建立,靠的是库存储区中的某个位,不是靠DONE。

关于如何启动,如何循环,如何读写(这其实是我原本想了解的内容)都没有介绍。这个例子太入门了。属于那种收藏到放弃类型的。弄不明白编写文档的专家,是不愿意介绍,还是打算在别的地方详细介绍。

还好又在软件的帮助文档里,找到了个Modbus TCP 的 应用程序。这个例子共7段,太长,无法一次性截图。有条件的自己去帮助文档里面看。

//

以下示例为两个 Modbus TCP 客户端与两个 Modbus TCP 服务器进行通信的项目。唯一的 IP 地址可标识每个服务器。程序逻辑可监视 MBUS_CLIENT 指令的“完成”输出,以确保程序不会中断正在进行的通信请求。该示例程序可执行下列功能:

写入输出位

读取输出位

写入保持寄存器

读取保持寄存器

程序、程序段和符号注释描述了下表中 Modbus TCP 示例程序的功能。

此示例的基本描述:

两个 Modbus 客户端与两个 Modbus 服务器设备建立连接。

Modbus 服务器 01:IP 地址 192.168.2.10,端口 502

Modbus 服务器 02:IP 地址 192.168.2.66,端口 502

当 CPU 输入 0 转换为 TRUE 时,将启动一个序列,在该序列中 Modbus 客户端向两个 Modbus 服务器发送写入和读取请求,CPU 输入 0 设置为 False 时将关闭该序列。

//

刚看到这段介绍的时候,稍微有点疑惑,为啥不介绍一个客户端,为啥是2个客户端的通信。(我的目标是和2个WP231进行通信,与我的需求一致)



看到程序段2的时候(上图),看到 JMP ,真的,想疯。因为之前没有用到这个指令。更疑惑的是2个Done 位为啥是串到一起的。按照以前学习的modbus 通信,一个DONE 位完成后,驱动下一个启动指令。这样保证了同一时刻只有一个读写命令,做到轮训。莫非,现在可以同时读,同时写了?

往下看,也没看出个所以然来。时间大约持续了二个周,也没看懂这个程序在干啥。差不多,这个例子也几乎要被判为垃圾例子。这样的例子程序,如果你无法搭建硬件,无法仿真。特别是遇到不熟悉的指令,更是一头雾水。

deng ,我的WP231模块来了,终于可以测试了。



赶紧连上,建立一个读操作,先确认下链接是否建立,读是否成功。

读成功后,通过程序监控,终于开始明白这个Done 是如何工作的。赶紧回来看看帮助文档,关于DONE 的描述。



当我建立2个客户端,第二个客户端未有效建立连接或者发送请求。监控程序发现第二个客户端的DONE 同第一个客户端的DONE 同时为ON .

我们再来看下面一段话:



这段话的的大体意思,就是发送了请求指令,直到DONE 为1之前,不能改变读写的内容,否则会报错误。错误参数44 。看到这里,是不是开始对例子程序的JMP 指令,感兴趣了。越来越明白它在干啥了。对,就是通过JMP 指令,保证每一个扫描周期,只进行读或者写操作。

说多了,可能有些人会迷糊,有兴趣的同学,可以先看看帮助。或许就什么都明白了。我们下一次再讲如何实现最终的目标,读写双秤(WP231)。可以先贴一个最终效果图:



我们看看真正的照猫画虎:(名画)

本帖子中包含更多资源

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

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

本版积分规则