首先做个MODBUS TCP服务器。服务器在这里相当于从站。它响应来自客户端的访问。

(我觉得不要再使用主站-从站的概念了。这里就是服务器-客户端的连接,是非常自由的。一台PLC既可以是服务器,也可以同时作为客户端;既可以“安装”一个服务器,也可以“安装”多个服务器;可以通过以客户端身份汇总;以服务器身份响应转发给任意客户端。)

首先,插入一个新PLC(我用个最便宜的S7 1211 V4.1;新的固件)

java 编写modbusTcp 服务端与客户端 modbus tcp客户端和服务器_服务器

图1

设置IP地址和路由网关。

java 编写modbusTcp 服务端与客户端 modbus tcp客户端和服务器_服务器_02

图2

为了测试传输性能,启用时钟字节。因为这里没有用到掉电保持,选用MB0。用它来模拟数字端口的变化。

java 编写modbusTcp 服务端与客户端 modbus tcp客户端和服务器_modbus 在线服务器_03

图3

在这个PLC上做两个服务器,一个用于客户端读取;一个用于客户端写入。

首先,插入个FC(取个名字,MB_Read1),然后从右侧指令树通讯-其他拖入MB_SERVER.

java 编写modbusTcp 服务端与客户端 modbus tcp客户端和服务器_服务器_04

图4

其次准备好MB_SERVER功能的一些数据块。

1、连接数据快CONNECT DB。注:新版将所有要用到的连接数据参数都整合在一起了,可以方便地集中修改。

建立个DB(优化的)取名CONNECT_RWDB;为客户端读做个连接1.(取名ReadCon1,在数据类型中直接输入TCON_IP_v4,回车)

java 编写modbusTcp 服务端与客户端 modbus tcp客户端和服务器_服务器_05

图 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要看一下接口的硬件标识符

java 编写modbusTcp 服务端与客户端 modbus tcp客户端和服务器_其他_06

图6

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

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

java 编写modbusTcp 服务端与客户端 modbus tcp客户端和服务器_IP_07

图7

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

java 编写modbusTcp 服务端与客户端 modbus tcp客户端和服务器_IP_08

图8

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

java 编写modbusTcp 服务端与客户端 modbus tcp客户端和服务器_服务器_09

图9

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

java 编写modbusTcp 服务端与客户端 modbus tcp客户端和服务器_客户端_10

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