技术论坛

【分享】关于MODBUS TCP V4.0的使用(一) MB 服务器

作者 主题
至圣

经验值: 127317
发帖数: 22001
精华帖: 824
主题:【分享】关于MODBUS TCP V4.0的使用(一) MB 服务器
精华帖精华帖星级5级 推荐帖 推荐帖


只看楼主 只看精华 楼主 2016-07-31 17:00:27

MODBUS TCP

S7 1200/1500支持 MODBUS TCP 连接。什么是MODBUS TCP?其实就是MODBUS报文格式;用TCP协议打包在网际间传输。

这对于建立在 TCP/IP基础上的ProfiNet是非常合适的;它省去了通讯模块;降低了成本。因此有许多传感器模块提供MODBUS TCP连接协议。使其能够远程通过网际(可以路由)连接。

如何在S7 1200/1500使用MODBUS TCP呢?

新版的S7 PLC其功能 MODBUS TCP使用了T块作为通讯基础,在使用上更为简单。

下面,以新版MODBUS TCP功能块为基础,做一下实验;说一下具体的使用:

首先,了解一点MODBUS协议。

MODBUS协议是一个标准协议,它可以读/写远程的IO点状态(位读写);也可以读远程模拟量值(读字);也可以读写字串(寄存器内容)


通过上表可以知道:

读写是由MB_MODE=0(读)=1(写);

读写的目标类型由MB_DATA_ADDR(地址范围):1-9999(远程输出位类型,如DQ);10001-19999(远程输入位类型,如DI);30001-39999(远程输入字类型;如模拟量AW);40001-49999(远程保持寄存器字类型)



学而时习之,不亦说乎?温故而知新,不亦乐乎?
推荐帖推荐理由: 帮助我们更好的了解1200 (推荐人:keybord)
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1314268&b_id=50&b_sid=0&s_id=0&num=4

至圣

经验值: 127317
发帖数: 22001
精华帖: 824
回复:【分享】关于MODBUS TCP V4.0的使用


只看楼主 只看精华 楼主 1楼 2016-07-31 17:02:01

实验基本要求:

TIA V13SP1 Upd7

S7-PLCSIM V13SP1 Upd1(用于仿真)

(没有硬件的基本要求)

对于直接读写远程IO没啥好说的,由读写地址范围决定。(当然,你不能去写远程的输入点。)

这里就针对远程的数据(寄存器内容)做一下实验。



学而时习之,不亦说乎?温故而知新,不亦乐乎?
以下网友喜欢您的帖子:

  
至圣

经验值: 127317
发帖数: 22001
精华帖: 824
MODBUS TCP服务器
推荐帖


只看楼主 只看精华 楼主 2楼 2016-07-31 17:13:36

首先做个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(服务器总是等着客户端连接)

远程连接地址IP,如果你要指定固定的客户端来访问,就输入它的IP地址,我这里全为零,就是服务器会响应任意客户端连接访问。

远程端口号RemotePort: 作为服务器不需要这个参数=0既可

本地端口LocalPort:标准的;预留给ModBus 的端口号是502。但是,如果你没有使用WEB(80端口);没有使用Mail(25端口)没有使用S7等通讯,所有端口号都是可以使用的。所以,下一个添加的MB服务器就使用503;以此类推。这样,当客户端要访问这个读服务器就是IP地址:502;要连接写服务器就是IP地址:503;所有服务器都是可以并发(被同时)连接的。

其中,interfaceid要看一下接口的硬件标识符

图6

2、建立一个用于读写的保持寄存器DB,因为用到指针,该DB要求是(非优化的)标准DB。

你可以将读写数据分别放在不同的DB中,也可以放在一起。



图7

3、建立一个用于功能块输出的DB。可以自己建立个数据类型"MB_OutSta"



图8

4、将参数拖到功能块的IO位置,如图:



图9


5、最后简单地写一下主程序,调用MB_Read1(FC1)


至此,MODBUS TCP服务器就写完了。



学而时习之,不亦说乎?温故而知新,不亦乐乎?
以下网友喜欢您的帖子:

  
至圣

经验值: 127317
发帖数: 22001
精华帖: 824
MODBUS TCP V4.0的仿真


只看楼主 只看精华 楼主 3楼 2016-07-31 17:17:56

启动仿真测试。

图11

点击《全部覆盖》下载。

图12

选择全部启动;完成。

图13

Main OB1在线,观察时钟动作。


打开 MB服务器(FC1)在线,检查状态。如果Status是7002(正在等待Modbus客户端连接);则服务器程序正常运行了。

以上就是服务器侧的使用方法。






学而时习之,不亦说乎?温故而知新,不亦乐乎?
以下网友喜欢您的帖子:

  
至圣

经验值: 127317
发帖数: 22001
精华帖: 824
MODBUS TCP V4.0的客户端使用


只看楼主 只看精华 楼主 4楼 2016-07-31 17:19:47

这样,就用了一个几百元的S7 1211完成了一个 MODBUS TCP功能。

注意哦:它是自带有2路0-10V模拟量输入的。还有6个DI数字量输入和4个DQ数字量输出。

它也可以同时用PN报文去控制G120变频器哦。

所以,你完全可以把它看作是一个多功能,高效的MODBUS TCP模块。

来看看上述程序它所占用工作空间与循环周期。



下面是客户端侧的方法。


关于MODBUS TCP V4.0 ( 二 ) 客户端



学而时习之,不亦说乎?温故而知新,不亦乐乎?
以下网友喜欢您的帖子:

  
侠圣

经验值: 3461
发帖数: 1845
精华帖: 6
回复:【分享】关于MODBUS TCP V4.0的使用(一) MB 服务器


只看楼主 只看精华 5楼 2016-08-04 10:41:05

 

非常给力的帖子


Better and More !
以下网友喜欢您的帖子:

  
侠士

经验值: 1045
发帖数: 190
精华帖: 1
回复:【分享】关于MODBUS TCP V4.0的使用(一) MB 服务器


只看楼主 只看精华 6楼 2016-08-08 10:41:33

感谢分享,学以致用,谢谢Y版


希望多年以后看看自己会发现如今的努力没有白费。
以下网友喜欢您的帖子:

  
奇侠

经验值: 7132
发帖数: 1022
精华帖: 2
回复:【分享】关于MODBUS TCP V4.0的使用(一) MB 服务器


只看楼主 只看精华 7楼 2016-08-19 04:57:03
太感谢了,写的太详细了
心有多远路就有多远
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
【分享】关于MODBUS TCP V4.0的使用(一) MB 服务器
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。