描述了 S7 1200/1500 的 MODBUS TCP 服务器的写法。
关于 MODBUS TCP V4.0 使用 (一)服务器端
下面开始说一下 MODBUS TCP 客户端的写法。
可能有些网友已经有注意到在服务器的 OB1 中有个 SEL 选择开关。这实际上是留给客户端写入的一个控制字(WORD9)。
实际上,可以用它来控制服务器的动作。(例如:用于切换服务器;切换需要读写的数据;控制服务器的运行方式等等。)
除此之外,为检查传输,再做一个低频正弦信号,发送给 MODBUS TCP 服务器。
首先,再添加一个 S7 1200(最便宜的 1211 V4.1)
组态:
在其属性-常规中设置 IP 地址(169.254.1.70);设备名称( )
对于都是西门子的装置(PLC/MODBUS TCP 模块),可以加入到 PN/IE 子网;对于第三方的 MODBUS TCP 模块,可能不需要在项目
中做组态,直接使用该模块的说明去设置 IP 地址,然后用客户端身份去访问。(通常 MODBUS TCP 传感器模块为服务器端,使用 TCP/IP
WEB 设置,MODBUS TCP 访问。)
图 1
为了测试,先做个低频正弦波信号。
图 2a
拖过一个预先做好的 DB(SIN_MOD), 它就是个简单数组 ARRAY(1-50) OF INT;预先写好了 50 个正弦值。
图 2
插入一个循环中断,间隔时间 500 毫秒;每次中断改变一次,形成 0.1Hz 正弦波输出。
图 3
重要声明:
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
帖子链接:http://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1314543&b_id=50&b_sid=0&s_id=0&num=2
相关推荐
【分享】关于 MODBUS TCP V4.0 使用(三)实际传输测试
【分享】关于 MODBUS TCP V4.0 的使用(一) MB 服务器
【求助】S7-1200 支持 Modbus TCP/IP 协议吗?
【求助】1200 做为 modbus TCP 客户端与笫三方进行通讯,通讯不上
【求助】两台 S7-1200 之间通过 Modbus TCP 指令通讯
【探讨】S7-1200 Modbus tcp 客户机与服务器读写的技巧问题探讨
yming
至圣
经验值: 64187
发帖数: 15193
精华帖: 545
客户端使用方法:
楼主 1 楼 2016-08-02 01:10:50
做好上述准备后,与服务器端相同。新建个 FC 功能;从右侧拖入两个 MB_CLIENT 客户端功能块。
图 4
要为客户端功能块准备一个标准(非优化的)DB 保持寄存器数据块。(我这里直接复制了服务器的那个寄存器 DB)
其中,WORD9 用于服务器的控制字; WORD10 用于发送给服务器 正弦信号(INT)。
图 5
与服务器端相同,对于 MB_CLIENT 功能块的状态输出,建立个 DB,集中处理。(自己做个数据类型好了。)
图 6
与服务器端一样;新建一个连接 DB(CONNECT_DB);每一个 MB_CLIENT 需要用一个连接参数。(数据类型栏直接敲入哦。)
(也可以从已经编写好的服务器端的程序中,直接拷贝过来,修改即可。)
图 7
接口 ID(interfaceid)如前帖,要查一下 PLC 组态的网络端口硬件标识符。
连接 ID 选用没有被用到的 ID。每个客户端用不同的连接 ID。(反正就要用个没被占用的即可,号在范围内随你。)
连接类型 只能是 11(16#0B)
主动连接(ActiveEstabilished)必须为真(客户端当然是主动去访问服务器啦。)
远程地址 就填写 上贴那个 服务器的 IP 地址(169.254.1.71)
远程端口号:完全根据服务器侧的要求。就是说,要看服务器(MODBUS TCP 传感器)的说明。这里的服务器是自己“做”的。所以“读”
服务器的用 502 端口号,“写”服务器用 503 端口号。
本地端口 不需要=0 (这是客户端,没人能来访问。)
以上完成后,就是 拖拽放 把 FC 写完。
图 8
注意: 数据地址;读和写服务器的两个客户端的 MB_DATA_ADDR 地址都是 40001;这是因为(前帖)的服务器的写寄存器的指针是
DBX16.0;所以,第一个字就是用 40001 即可。(这就是一定要看服务器说明的原因。)
最后写一下主程序 MAIN (OB1)
图 9
编译,保存。这就完成了 MB_CLIENT 客户端 PLC 的程序。
yming
至圣
经验值: 64187
发帖数: 15193
精华帖: 545
客户端仿真模拟测试
楼主 2 楼 2016-08-02 01:12:54
编译没问题后,可以启动 PLC SIM 仿真。
启动仿真,下载运行程序。
首先建立个监控表。将需要监控的变量分别从 M 变量表、DB 中拖入。
在线。检查 客户端状态码。
同时,检查准备发送给服务器的“正弦波”信号是否正常。
图 10
MB 客户端没有问题后,再启动 MB 服务器端 PLC 的仿真(两个 PLC 同时仿真)
启动客户端连接请求 (监控表 MBREQ=1)
在监控表中,检查 读到的 MB 服务器值。
图 11
最后,将 MB 服务器 PLC 在线。检查是否接收到来自客户端的“正弦波”信号。
图 12
以上,就完成了 MODBUS TCP 服务器-客户端的仿真模拟。
是不是很容易呀?
先做个 MODBUS TCP 服务器。服务器在这里相当于从站。它响应来自客户端的访问。
(我觉得不要再使用主站-从站的概念了。这里就是服务器-客户端的连接,是非常自由的。一台 PLC 既可以是服务器,也可以同时作为客
户端;既可以“安装”一个服务器,也可以“安装”多个服务器;可以通过以客户端身份汇总;以服务器身份响应转发给任意客户端。)
首先,插入一个新 PLC(我用个最便宜的 S7 1211 V4.1;新的固件)
图 1
设置 IP 地址和路由网关。
图 2
为了测试传输性能,启用时钟字节。因为这里没有用到掉电保持,选用 MB0。用它来模拟数字端口的变化。
图 3
在这个 PLC 上做两个服务器,一个用于客户端读取;一个用于客户端写入。
首先,插入个 FC(取个名字,MB_Read1),然后从右侧指令树通讯-其他拖入 MB_SERVER.
图 4
其次准备好 MB_SERVER 功能的一些数据块。
1、连接数据快 CONNECT DB。注:新版将所有要用到的连接数据参数都整合在一起了,可以方便地集中修改。
建立个 DB(优化的)取名 CONNECT_RWDB;为客户端读做个连接 1.(取名 ReadCon1,在数据类型中直接输入 TCON_IP_v4,回车)
图 5
连接 ID 选一个没有被使用的连接号,
连接类型固定为 11(16#0B)
主动连接 ActiveEstabilished=false(服务器总是等着客户端连接)