两台PLCModbusTCP主从站连接,一主站,一从站

ModbusTcp_server块详解

一台PLC为Modbus TCP Server服务器,从站

块参数

DISCONNECT

  • 断开连接控制

  • Flase:允许客户端连接True:

  • 强制断开当前 Modbus 客户端

  • 常用于异常、复位、切换模式

    MB_HOLD_REG

  • 保持寄存器缓存区指针(最重要)

  • 指向一块数据区(通常是 DB)

  • Modbus 客户端访问的 4xxxx 保持寄存器 就映射在这里

    CONNECT

  • 连接参数

  • 一般连接一个 TCON_IP_v4 结构

  • 用来指定:

    • 本机 IP

    • 端口(默认 502)

  • 服务器模式下通常上电给一次即可

寄存器区域DB

我们创建一个DB块用于存放Modbus TCP的保持寄存器区域,也就是(Holding Register)

1 个保持寄存器 = 16 bit = 2 字节,也就是说一个word = 一个保持寄存器位。我们创建10个保持存期,为了方便记忆,我将名称改成了40001开头的十个寄存器

鼠标右键DB块,关闭优化块的访问

编译DB块之后会出现每个寄存器的偏移量

TCON_IP_V4参数和详解

我们现在新建一个DB块用于存放IP TCON_IP_V4的参数

InterfaceId = 64

也就是使用 CPU 自带的 PN / IE 网口, 64 是该网口的 硬件 ID

ID = 1(CONN_OUC)

  • 含义:连接编号

  • 每个通信连接要唯一

ConnectionType

十六进制 十进制 含义 是否常用
16#11 17 TCP(面向连接) Modbus TCP 必须用
16#03 3 UDP ❌ Modbus 不用
16#01 1 ISO on TCP(S7 通信) ❌ 不是 Modbus
16#02 2 ISO Transport ❌
16#04 4 TCP / RFC1006 ❌

ActiveEstablished

ActiveEstablished 为false 是被动连接,我们这里用的服务器是让主站主动来连接。所以是被动连接。

RemoteAddress

这里写的的是IP地址,我们为Server 从站,所以这里填0.0.0.0的意识是所有设备都可以连接

RemotePort

服务器模式下不用指定对方端口

LocalPort

含义:PLC 本地监听端口

将参数填入进入块参数

我们这里用P#来直接指向我们的数据

这样就算是配置完毕了

服务器IP是多少呢?

这时候的服务器的IP是我们的PLCip,他会在本地启用了一个端口为502的占用,如果你的PLC地址是192.168.0.1 端口为502,那么就是在本地开启了一个监听器。我们下载程序进去看一下

下载程序看服务端现象

下载进去显示7002,说明服务端配置成功,7002是没有设备连接状态

外部Modbus poll调试

我们用外部的外部Modbus poll调试来看一下是否能成功连接

配置一下参数,选择connect

这里选择Modbus tcp,IP就选择我们组态里面的IP

没显示报错说明连接成功

进入setup配置一下

ID就是我们的服务器ID就是我们刚刚填入的IP,Function的是选择我们的保持寄存器

然后起始地址是0,长度为10。点击OK,然后进去写一下参数比如2026113。

plc成功显示值,说明写入成功。

ModbusTCP_C

我们依旧先进去配置好DB块和我们的TCON

客户端TCON_IP_V4配置

ActiveEstablished 为true 为主动连接

记住,服务为从,客户为主。

然后这里的ip填写服务器的IP和远程的端口,RemotePort为远程端口为服务端的端口。

数据保持和服务端一样,否则数据会有问题

我们启用一下plc自带时钟,用自带的时钟去读取

块参数连接

用Clock_1HZ来触发读取

DISCONNECT

  • 断开连接

  • TRUE:主动断开 TCP

  • 正常通信时保持 FALSE

MB_MODE

值 功能
0 读保持寄存器(FC03)
1 写单个保持寄存器(FC06)
2 写多个保持寄存器(FC16)
3 读线圈(FC01)

MB_DATA_ADDR

  • Modbus 起始地址

  • 40001 → 第一个保持寄存器

MB_DATA_LEN

  • 数据长度

  • 单位:寄存器个数

  • 10 → 读 10 个保持寄存器

MB_DATA_PTR

  • 数据缓存区指针

  • 指向 PLC 内存,用来存读到 / 要写的数据

CONNECT

  • 连接参数

  • 指向 TCON_IP_v4 结构

分配PLC1和PLC2的IP

下载程序查看一下状态

现在显示Done成功,说明我们连接上了。

两边写一下值看看能不能联通

客户端显示的值都会到服务器里,通信成功!

下载源程序连接
MODBUS tcp连接 点击下载!

相关推荐
无奈笑天下2 小时前
银河麒麟上nproc命令教程详解
linux·运维·服务器
火云代理6 小时前
更换网络后为什么会退出登录?分清 IP、Cookie 与会话的关系
服务器·网络·网络协议·tcp/ip·php·ip
威嵌神州6 小时前
嵌入式排故实录:高并发下串口数据“超时丢包”的根因剖析与架构优化
运维·服务器·嵌入式硬件·缓存
Decay__7 小时前
SQLServer 索引与 SQL 优化 —— 聚集索引、非聚集索引、覆盖索引、碎片维护与执行计划
运维·数据库·sql·mysql·架构
java_logo7 小时前
Docker 部署 DeepSeek Harness(moelin):轻松搭建带登录的本地 AI Agent 平台
运维·docker·容器·ai agent·deepseek·harness·轩辕镜像
火云代理9 小时前
同一个网站,有的网络能打开、有的打不开?认识 IPv4 与 IPv6 的访问差异
服务器·网络·网络协议·tcp/ip·测试工具·php·状态模式
坤坤子吖10 小时前
Linux网络编程:TCP 粘包与半包问题,如何正确处理 TCP 流式数据?
linux·服务器·网络·笔记·网络协议·学习
星恒随风12 小时前
MySQL 从零入门(六):复合查询详解——多表查询、自连接、子查询与 UNION
linux·服务器·数据库·mysql
无足鸟ICT12 小时前
【RHCA+】IO调度算法
linux·服务器
打工仔折腾 AI13 小时前
Changedetection.io 网页变动监控:Docker 部署、通知配置与公网暴露实践
运维·人工智能·后端·python·docker·容器·性能优化