- 各位大神,请教大家一个问题,我这边想用MCGS的触摸屏用tcpip的协议通讯 ab 1766系列plc,读取数据! 试了好几个协议都不行,通讯不了,读取不出来! 大神们有好的建议给指导下吗
- 各位大师傅想问一下我一个永磁电供水突然停电,水泵反转会不会烧坏变频器,或电机谢谢
- 2800转和1400转电机配安川变频器参数有哪些不同 这个电箱,我用1400转的电机,一点问题都没有,很正常 但是换成 电机 如图后 就不行 设置是50hz, 实际上只有hz17
- 三菱FX5U报错代码:H21A0 文件指定异常, 初始化内存,清除PLC数据 都不行
- 请教5000中一个INT数据如何拆分成两个SINT?仪表需要把采集到的INT数据的高低字节分开,网上搜可以使用.H或.L,试了下不行,大家都怎么处理这种情况的?
unity 模拟器连不上?报错如下,This isn't a valid PLC Address, or PLC is busy, or media is off.这个怎么解决
联系人:16501511627923
电话/手机:联系客服
发布时间:2025-10-05 15:17
浏览:224次



















































直译就是:地址不合法 / PLC 忙 / 通信介质断开。它常见于 HMI/驱动(如 AdvancedHMI、某些 OPC/驱动组件)在连“PLC 或 PLC 模拟器”时。下面给你一份从易到难的排查清单,基本能把问题定位出来。
0. 先快速三连
能否 Ping 通:ping <你的PLC/模拟器IP>(若是本机模拟器,试 127.0.0.1 / 本机IP)。不通=网络/防火墙问题。
模拟器是否在 RUN/Online:很多模拟器默认只“仿真程序”,未开启外部通讯。要在仿真配置里勾选“允许外部连接/以太网通信/Modbus TCP 服务器”等。
防火墙/端口:临时关闭系统防火墙试一下;Modbus TCP 默认 502,S7 驱动(Snap7/Sharp7)默认 102,CIP(AB)相关 44818 等端口需要放行。
1. 大概率是“地址语法不对”
不同 PLC/协议地址写法完全不同,驱动不认识就会直接报这条错误。对照你用的协议把地址改对:
A) Modbus TCP(最常见)
保持寄存器(Holding Register):很多驱动写法是:
40001 或 400001(不同厂商“是否从 0 还是从 1 开始”有差),也有写 4x0001 的。
线圈:00001 / 1x;输入寄存器:30001 / 3x;离散输入:10001 / 1x(驱动差异很大)。
Unity/Control Expert(施耐德)里 %MW 映射到 Modbus:
常见映射:%MW0 → 40001(或 → 400001),%MW1 → 40002 ……
如果你在 HMI 里填了 %MW0,Modbus 驱动是看不懂的,要填 40001(或 400001)。
偏移从 0 还是从 1:如果读 %MW0 总是错,试把地址整体 ±1 试验(40001 ↔ 40000)。
B) 西门子 S7(Snap7/Sharp7/OPC-UA)
绝对地址法:DB1.DBW0(字),DB1.DBD0(双字),DB1.DBB0(字节),或 M0.0(位)等。
PLCSIM 与外部通讯:普通 PLCSIM 多半不支持外部软件直连以太网;要用 PLCSIM Advanced 并启用虚拟网卡/路由,或用 OPC Server。
C) AB(Allen-Bradley)
SLC/MicroLogix:N7:0、B3:0/0
Control/CompactLogix:直接 Tag 名称(区分大小写&作用域)。
CIP/EtherNet-IP 端口 44818,确保没被防火墙拦。
结论:先把你使用的驱动/协议搞清(Modbus?S7?CIP?),再把地址改成该协议能识别的语法。
2. 模拟器侧设置(很多人会忽略)
施耐德 Unity/Control Expert 模拟器
只仿真逻辑并不等于开放以太网。
如果你打算用 Modbus TCP 读写:项目里要启用 Modbus TCP 服务器(在以太网模块或 DTM 里配置),给寄存器分配区间;仿真时保持 RUN + 通信就绪。
另一条路:用 Schneider OFS/OPC 连接模拟器(地址类似 S:SIM 等),再让上位从 OPC 读。
西门子 PLCSIM(S7-1200/1500)
普通版 PLCSIM 无法被外部软件直接通过 102 端口访问,要用 PLCSIM Advanced 并配置仿真网络。
三菱/欧姆龙仿真器
也有“仅本机/本工程可见”的限制;若要外部软件连,要启用相应通信服务或选 OPC Server。
3. “PLC busy / media off”的典型根因
通讯口被占用/未启动:仿真没开服务器;真正 PLC 的端口被别的工具占用。
多客户端并发超限:有的设备默认只允许 1~2 个并发连接。
IP/端口错误:本机模拟器却填了真实 PLC 的 IP,或者把 502 写成 503。
线缆/网段:不同网段、掩码错误、交换机隔离/VLAN。
扫描周期阻塞:有些驱动默认轮询太快(比如 20ms),把设备打“忙”,把轮询周期改慢(100~500ms)试试。
大小端/数据类型:虽不至于报这个错,但会读出全 0/全 FFFF;确认寄存器长度(1/2/4 字节)与大小端。
4. 一个“最小化可行”验证法(以 Modbus TCP + Unity 模拟器为例)
在仿真工程开启 Modbus TCP 服务器(或在真实 PLC 上),确认 IP、端口=502。
在变量里把 %MW0 放一个已知值(比如 1234)。
用 Modbus Poll/Modbus Slave 或 QModMaster 读 Holding Register 40001(或 400001)。
读到 1234 → 协议/地址 OK;
读不到 → 先解决仿真/端口/防火墙。
你的程序(Unity/上位/HMI/AdvancedHMI)里,同样地址 配置 40001(或 400001),轮询周期 200 ms,再试。
5. 若你在用 AdvancedHMI(常见这条英文报错)
IPAddress:填对目标 IP(模拟器就本机 IP/127.0.0.1 或真实 PLC IP)。
ComComponent:别让多个画面/控件重复创建驱动实例。
PLCAddressXXX:严格按驱动语法填写(ModbusDriver 就 4xxxx;S7Driver 就 DB1.DBW0…)。
PollRate:设成 200~500ms 测试连通性;再慢慢加快。
看 ComErrorReceived 事件日志,能看到更细的异常原因。
6. 你可以把这三样发我,我给你“对号改好”
你用的协议/驱动名称(Modbus / S7 / CIP / OPC?以及用的哪个库或软件)。
你的目标地址写法(比如你现在填的是 %MW0 或 40001 或 DB1.DBW0)。
网络/模拟器截图(仿真是否启用外部通讯、IP/端口、防火墙状态)。
我会直接给出“应该写的正确地址格式”、需要勾选的仿真开关,以及端口/轮询周期的建议,保证能连上