NJ并不支持ModbusTCP协议,库文件是在socket的基础上开发出来的功能块。库文件共有8个功能块,根据不同的功能块实现不同的modbusTCP的功能。
8个功能块分别为客户端使用7个功能块,客户端连接、读线圈、读输入寄存器、读保持寄存器、写单个线圈、写单个保持寄存器、写多寄存器;和服务器使用一个功能块。
![3e3d8e9da7d0936a3918cfab420df31e.png](https://i-blog.csdnimg.cn/blog_migrate/2cc5cd58396b30c83a26961881b90f23.jpeg)
![f075cac4bd79ac270852d0a4e4c85efb.png](https://i-blog.csdnimg.cn/blog_migrate/7b7ea723dd9f39ddef0d26dfdce50059.jpeg)
2、客户端连接
取其中一个功能块为例,进行测试。
添加客户端连接功能块,写入对方IP、端口号、连接信号变量;功能块使能后,置位connect。输出部分,可以看到错误和错误代码。
添加读保持寄存器功能块,写入从设备地址、起始地址、字节长度,connect功能块中的输出TCP_socket需要和读写功能块输入的TCP_socket为同一变量;建立好输出变量,send_request置位即可读取。
接收数据为Word,如果需要转为其他数据类型,可以使用数据转换指令。
![8e0cff47c580ea421e38a2424f97dabe.png](https://i-blog.csdnimg.cn/blog_migrate/c418786f5730066ddb15654ea2e69374.jpeg)
![591b7bcfcc932dfd4af92954db383273.png](https://i-blog.csdnimg.cn/blog_migrate/12407d1eef6ae1565cb62dc77d5a9df7.jpeg)
3、服务器连接
添加功能块,在输入中分别填入需要发送的寄存器和线圈数据;上位进行连接后,将会显示对方IP和端口。
由于modbus的固定端口为502,因此调试工具或者其他上位需要将连接端口设置为502;否则无法进行通讯。
注:以太网通讯中,部分端口号为固定用途,例如网页打开的默认端口为80,在使用中会自动省略;modbus端口为502.
连接成功后,发送Modbus功能码进行通讯。
![ce84eed57d5adf276f4ebec4ec16d8af.png](https://i-blog.csdnimg.cn/blog_migrate/4fdc9beab6e554bee0440f12e017f466.jpeg)
![d766d41391d52acfbba79f07c6797cfd.png](https://i-blog.csdnimg.cn/blog_migrate/02f41c9d4cf3d8a9dcabf5214605e86e.jpeg)
![7a799836d53bd62d082c14aebde53957.png](https://i-blog.csdnimg.cn/blog_migrate/bfa182a2eff0ef9448ac96fd5bb661db.jpeg)
![9512a5cdddfbd34ad81720727c3ebf8e.png](https://i-blog.csdnimg.cn/blog_migrate/6d9c713187b938699f1bce7bb7718f28.jpeg)
4、服务器连多个客户端
在实际使用中,会遇到连多个客户端的情况,由于功能块是使用socket方式开发,因此,可以使用多个端口连接。但是,如果对方是标准的modbusTCP,无法更改端口的话,那么将无法进行多个客户端连接。
先将功能块里的内容复制出来,然后再将端口号的改为变量的方式,这样就可以进行多客户端连接。经测试,通讯没有问题。
![9f8f6fa3f5c6b9e93c0eee10fc366d4f.png](https://i-blog.csdnimg.cn/blog_migrate/dab0859ab12a12ff918fa6e213907a99.jpeg)
![0ac148f3b53e99ff1da009437de973ad.png](https://i-blog.csdnimg.cn/blog_migrate/eeb28579390894c0dca11455c90d6532.jpeg)
![8b719d8e7609c887af4d7cd7f8d6599a.png](https://i-blog.csdnimg.cn/blog_migrate/fe129725ee0fff61058117c492246d55.jpeg)