首页 >> 案例中心 >> Modbus协议IO模块应用案例
西门子S7-1200的modbus tcp客户端编程
1. 网络拓扑图
客户端:CPU 1211C
软件:Portal V16
服务器:ZM14-8RTD-11(网口型8路三线热电阻温度采集器)
2. 新建工程,硬件设置
添加新设备
设置PLC的IP地址,子网在此应用上可以不用添加。
系统和时钟存储器勾选,地位我们分别定义在MB50和MB51,后面编程会用到。
3. MB_Client指令使用方法
先去了解MB_Client指令使用方法,这里就不再介绍其用法了。
4. 添加必用的全局数据区
添加2个数据区:1个用于MB_Client指令CONNECT指针指向的数据区(在此为了区分命名为MB_TCP连接数据区_1),1个用于客户端与服务器的数据收发区域。
3.1 建立TCON_IP_v4系统数据并初始化参数
在“MB_TCP连接数据区_1”里面建立一个TCON_IP_v4,这个是系统数据类型,不是用户数据类型,所以需要自己输入,也可以COPY进去。
上图上我们初始值键入interfaceld 64(16#40),需要与PN口硬件号一致。
ID号根据需求填写,每使用1个MB_Client指令,ID号需要不一样,ConnectionType保持默认16#0B,ActiveEstablished初始化必须为1,否则启用时会出错,填写需要访问的服务器IP,192.168.0.200,远程端口号502,本地端口号0
3.2 在交换数据区建立对应的变量
ZM14-8RTD-11是8路三线制PT100热电阻温度采集模块,温度范围-100℃~600℃,显示-1000~6000的数据,所以我们需要建立8个有符号整型数据,变量名AI,数据类型Array[0..7]of Int即8个有符号整形数据。
5. 建立客户端访问单个服务器程序段
4.1. 调用MB_Client指令
4.2. 背景区
自动生成数据背景区DB1即可,也可自定义其它号的DB。
4.3. REQ、DISCONNET、MB_MODE、MB_DATA_ADDR、MB_DATA_LEN的使用
这里使用系统时钟指令M51.0,10HZ即100mS一个上升沿来触发REQ,DISCONNET需要设置为FALSE,功能码、地址 、长度根据ZM14-8RTD的相关参数设置,具体参考下表
PLC地址 | Modbus地址 | 数据类容 | 功能码 (16#) | 长度(INT) |
30001 | 0X 00 | 第1 路热电阻温度×10 | 04(读) | 1 |
30002 | 0X 01 | 第2 路热电阻温度×10 | 04(读) | 1 |
30003 | 0X 02 | 第3 路热电阻温度×10 | 04(读) | 1 |
…… | …… | …… | …… | …… |
30008 | 0X 07 | 第8 路热电阻温度×10 | 04(读) | 1 |
我们使用功能号104,地址0,数据长度8
4.4. MB_DATA_PTR的使用
MB_DATA_PTR指向上面已建立的数据收发区,注意:指针不要指向具体的一个变量,比如变量AI[0],如果这样会造成MB_Client通讯状态的ERROR标志置1,STATUS状态代码16#8383。应该需要指向AI变量的地址指针,而不是数据首地址,如下图,应选择无。
选择“无”后显示下图
若数据交换区建立的数据变量只建立了一个数组变量,指针也可以指向DB区的首地址指针,如下图
选择“无”后显示为下图
4.5. CONNECT的使用
CONNECT指向建立的系统数据区的首地址即可,同MB_DATA_PTR的使用一样,也不要指向内部具体的一个数据地址,选“无”即可。
4.6. DONE、BUSY、ERROR、STATUS
这几个是MB_Client指令的输出状态,在监视状态可查看其值来判断有没有错误信息,对编程很有帮助。
6. MB_Client背景数据区参数设置
其中的MB_UNIT_ID的设置尤为重要,西门子默认是16#FF,但实际运用中会根据作为服务器的扩展IO模块的实际通讯站地址来设置。
以ZM14-8RTD-11,通讯站地址为01即拨码开关前7位设置为“1000000”,则MB_UNIT_ID需要初始化设置成01;
也可将拨码开关前7位都拨到OFF状态“0000000”,即通讯站地址16#FF,这里的MB_UNIT_ID就可以不需要改变了。
7. 编译、下载、查看状态
编译组态及程序,然后下载。
在监视状态下查看DONE、BUSY、ERROR、STATUS状态,DONE、BUSY的状态是TRUE、FALSE之间变换,而ERROR的状态没有TRUE,STATUS状态输出字是16#7004、7005、7006来回变化,证明通讯成功。
不足的是我们用的系统时钟指令M51.0,定时100mS来触发REQ的,因为这种触发没有在乎主、从通讯是否已经完成,只要100mS时间段一到就会触发下一条指令,这个只适用于单个服务器的使用。
需要客户端访问单个服务器(单指令、多指令)、多个服务器示例程序,
请联系技术顾问:朱经理15983845957微信同号。
上一篇:Modbus协议介绍
下一篇:没有了!