WinAC 的使用可参考前面一篇文章《在 VMWare 环境使用 WinAC 做西门子 PLC 开发测试》,本文重点描述一下 “ModbusTCP 通信” 中需要注意的一些设置。
本文使用场景是 WinAC 作为客户端去连接另一个 ModbusTCP 服务器。
一、背景
从 STEP7 V13 (TIA Portal) 起,可使用 MODBUSPN 指令。MODBUSPN 指令允许在带有集成 PN 接口的 CPU 和支持 Modbus/TCP 协议的伙伴之间进行通信。 支持功能代码 1、2、3、4、5、6、15 和 16。根据参数分配,该指令可用作客户端(S7 为客户端),也可用作服务器(S7 为服务器)。 使用 MODBUSPN 指令在通信伙伴之间建立连接以传送数据并控制连接终止。
MODBUSPN 指令基于 Modbus Application Protocol Specification V1.1b3, April 26, 2012 – 请参见 Modbus 主页 http://www.modbus.org/ 。
不过,需要注意的一点是 MODBUSPN 并不是免费的,需要根据硬件申请授权码,不然CPU会一直重复报错 A090 ,但是,即使没有授权码也是可以进行 Modbus通信的,这就是 OB121 在例程中的作用。
二、组态和程序块编写
参考西门子官方文档即可。文档里的步骤已经很清楚了,按照做就可以完成。
- How do you configure communication via Modbus/TCP with WinAC RTX (F) in TIA Portal V13 SP1?
https://support.industry.siemens.com/cs/ru/en/view/109482560
当然,也可以下载已经组态好的项目文件:WinAC_VM_ModbusTCP_TIA.zip
三、DB块设置
程序块有三个DB块需要设置
1. DATA_AREA_1
此DB块( 号码为11,后面要用到 )用于存放 Modbus 数据。在例程中,创建了一个500个Word类型的数组 Holding_Register。原例子中,定义索引是 1..500,有误,需要更改成 Array[0..499] of Word
2. MODBUS_PARAM
此DB块用于连接和Modbus参数。详细参考 TIA 帮助文件 “MODBUSPN: 作为 Modbus/TCP 客户端或 Modbus/TCP-Server 进行通信” 一节。
a. Connection settings
在此结构中定义连接特定的参数,如通信伙伴的本地硬件接口和IP地址。TCON 和 TDISCON 使用这些参数。
- id: 每一个逻辑连接分配一个新ID,用于 TCON/TSEND/TRCV/TDISCON
- connection_type : 取决于CPU类型。 WinAC 是 16#11
- active_est : 作为客户端是主动连接,而服务端是被动连接。本例是客户端。
- local_device_id : 定义所用 PN CPU 的 IE 接口。WinAC IF1 为 16#1
- rem_staddr_len : 定义通信伙伴的IP地址长度。 16#4
- rem_tsap_id_len : 定义远程通信伙伴的端口号的长度。主动连接为2个字节
- rem_staddr : 在字节数组中设置远端通信伙伴的IP地址。本例为 192.168.23.180
- rem_tsap_id : 设置远端通信伙伴的端口。因CPU类型不同而connection_type不同而高低字节不同。本例 connection_type 是 16#11,所以是 rem_tsap_id[1] 是高字节,rem_tsap_id[2] 是低字节。端口 502 十六进制为 01 F6
b. Modbus settings
在此结构中存储操作模式和地址引用所需要的数据。
- server_client : S7作为服务端,为 TRUE;S7作为客户端,为 FALSE
- single_write : 在S7作为客户端时,如果参数 single_write = TRUE ,则功能代码 5 和 6 用于执行长度为 1 的写入作业。如果 single_write = FALSE,则功能代码 15 和 16 用于所有写入作业。
- connect_at_startup : 指定连接建立的时间。如果将 connect_at_startup 设置为 TRUE,将在 CPU 重新启动后立即建立连接。 这种情况下,只有正确建立连接 (CONN_ESTABLISHED = TRUE) 才能传送数据作业,否则将在 ERROR 和 STATUS_CONN 中显示相应的错误。
FALSE:通过设置 ENQ_ENR 建立连接
TRUE: 重新启动后立即建立连接 - data_type : Modbus 功能码。1:线圈 2:输入 3:保持寄存器 4:输入寄存器
- db : 存储modbus数据的DB块的号码,本例为 11
- start : 指定 DB 的数据字 0 中映射的第一个 Modbus 地址,本例为 0
- end : 定义最后一个 MODBUS 地址 ,本例为 499
3. CONTROL_DAT
此DB块用于设置控制参数
四、测试通信
通过设置 ENQ_ENR 上升沿进行数据通信。
延伸阅读
- How do you program and parameterize Modbus/TCP communication between S7-1500 CPUs and S7-1200 CPUs?
https://support.industry.siemens.com/cs/ww/en/view/102020340