返回
unity 模拟器连不上?报错如下,This isn't a valid PLC Address, or PLC is busy, or media is off.这个怎么解决
发布

unity 模拟器连不上?报错如下,This isn't a valid PLC Address, or PLC is busy, or media is off.这个怎么解决

243阅读 1 回复 2025-10-05 15:17发布
关注Ta

16501511627923普通会员楼主

电话/手机:联系客服


以下内容回复后可见

优质评论内容

  • 明扬工控技术客服

    明扬工控技术客服2025-10-05 15:19:18

    亲,这个报错信息:“This isn't a valid PLC Address, or PLC is busy, or media is off.”
    直译就是:地址不合法 / 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/端口、防火墙状态)。

    我会直接给出“应该写的正确地址格式”、需要勾选的仿真开关,以及端口/轮询周期的建议,保证能连上