PLC 通讯 · 上位机对接 · 学习专题

品牌 PLC 上位机对接专题

工业现场 PLC 品牌众多,西门子、三菱、汇川、欧姆龙、AB、台达……每个品牌的通讯协议都不一样,上位机对接方式也不同。 本专题按 「认知 → 西门子 → 三菱 → 汇川/国产 → 其他品牌 → 工程化」 逐个品牌打通,不堆协议手册,只讲现场真正踩过的坑和最实用的对接方法。

6 篇实战教程 3 个在线工具 19 款相关软件 持续更新 · 丁丁智造

一条路径走完品牌 PLC 对接(六个阶段)

  1. 01

    先建立整体认知:主流 PLC 品牌格局、上位机对接方式全景、协议怎么选

    工业现场 PLC 品牌众多,西门子、三菱、汇川、欧姆龙、AB、台达、信捷……每个品牌的通讯协议都不一样,上位机对接方式也不同。先搞清楚品牌格局、对接方式和协议选择,后面逐个品牌打通才有方向。

    • 主流 PLC 品牌格局:① 西门子(Siemens)——国内市场份额最高,S7-200 SMART/S7-1200/S7-1500/S7-300/S7-400,中大型项目首选,TIA Portal(博途)编程;② 三菱(Mitsubishi)——FX 系列(小型)、Q/L 系列(中型)、R 系列(高端),日系代表,GX Works 编程;③ 汇川(Inovance)——国产 PLC 龙头,H3U/H5U(小型,兼容三菱)、AM400/AM600(中型,CODESYS 平台)、AC 系列,国产替代首选;④ 欧姆龙(Omron)——CP/CJ/CS/NJ 系列,FINS/Host Link 协议;⑤ AB(罗克韦尔)——ControlLogix/CompactLogix,EtherNet/IP 协议,美系代表;⑥ 台达/信捷/禾川/永宏——国产中小品牌,多支持 Modbus,部分兼容三菱指令
    • 上位机对接 PLC 的三种方式:① 直连——上位机程序直接通过协议库(HslCommunication/Sharp7/libmodbus)和 PLC 通讯,适合设备少、协议简单的场景,开发简单但耦合度高;② OPC UA 服务器——PLC 或第三方 OPC 服务器(KEPServerEX/Matrikon)把 PLC 数据暴露成 OPC UA,上位机通过 OPC UA 客户端读取,适合多品牌、多设备、需要标准化的场景,解耦但需要部署 OPC 服务器;③ 边缘网关——Neuron/ThingsGateway 等边缘网关采集多品牌 PLC 数据,转换成 MQTT/OPC UA 上报,上位机从网关获取数据,适合大规模、多协议、需要边缘计算的场景,解耦最彻底但架构最复杂
    • 协议选择决策:① 西门子 S7-1200/1500——首选 S7 协议(原生,效率高),或 OPC UA(标准化),Modbus TCP 需要在 PLC 端配置;② 西门子 S7-200 SMART——S7 协议(旧版)或 Modbus TCP(PLC 作为 Modbus 服务器);③ 三菱 Q/L/R——MC 协议(原生,3E 帧,效率高),或 OPC UA;④ 三菱 FX——MC 协议(1E 帧,简单)或 Modbus RTU/TCP;⑤ 汇川 H3U/H5U——Modbus TCP(默认,兼容三菱),或 MC 协议(部分型号支持);⑥ 汇川 AM400/AM600——Modbus TCP、EtherNet/IP、OPC UA(CODESYS 平台);⑦ 欧姆龙——FINS(以太网)或 Host Link(串口);⑧ AB——EtherNet/IP(CIP 协议);⑨ 台达/信捷/禾川——Modbus TCP/RTU(最常用)
    • 对接前的准备工作:① 确认 PLC 型号和固件版本——不同型号支持的协议不同;② 确认 PLC 的 IP 地址和端口——S7 协议用 102 端口,Modbus TCP 用 502 端口,MC 协议用 5002 端口;③ 配置 PLC 通讯参数——IP/子网/网关,确保和上位机在同一网段(或路由可达);④ 配置 PLC 通讯允许——西门子 S7-1200/1500 需要在博途中勾选「允许来自远程对象的 PUT/GET 通讯」,否则连不上;⑤ 确认数据地址——DB 块号/偏移量(西门子)、软元件地址(三菱 D/M/X/Y)、寄存器地址(Modbus 4x/3x);⑥ 网络测试——ping 通 IP,telnet 测试端口是否开放
  2. 02

    西门子 S7 系列:S7-1200/1500/300/400 上位机对接,S7 协议原理与实践

    西门子是国内市场份额最高的 PLC 品牌,S7 协议是西门子 PLC 的原生通讯协议,上位机对接西门子 PLC 最常用的方式。S7-1200/1500 是新一代,S7-300/400 是老一代,两者的 S7 协议有细微差别,对接时要注意。搞清楚 S7 协议原理和配置要点,西门子 PLC 对接就不难了。

    • S7 协议原理:S7 协议是西门子专用的应用层协议,基于 ISO-on-TCP(RFC1006),端口 102。通讯过程:① 建立 TCP 连接(102 端口);② COTP 连接请求(CR)和确认(CC);③ S7 通讯设置(Setup);④ 读写数据(Read/Write Request/Response)。S7 协议支持:读/写位(M/I/Q)、读/写字节/字/双字(DB块)、读/写计数器/定时器、块控制(启动/停止)、时钟同步等
    • S7-1200/1500 对接要点:① 博途配置——在设备配置中,PLC 属性 → 防护与安全 → 连接机制,勾选「允许来自远程对象的 PUT/GET 通讯访问」,这是最常见的连不上原因!② DB 块配置——优化的块访问(默认)和非优化的块访问。优化的块访问只能用符号寻址(需要 TIA Portal Openness),非优化的块访问可以用绝对地址(DB号.偏移量)。上位机直连建议用非优化的块访问(取消勾选「优化的块访问」),这样可以直接用 DB1.DBX0.0、DB1.DBW2 等地址读写;③ 数据类型——S7-1200/1500 支持 Bool/Byte/Word/DWord/Int/DInt/Real/LReal/String/Array/Struct,注意字节序是大端(Big-Endian),浮点数是 IEEE754;④ 机架号和槽号——S7-1200 机架 0 槽 1,S7-1500 机架 0 槽 1,S7-300 机架 0 槽 2,S7-400 机架 0 槽 2或3
    • S7-300/400 对接要点:① Step7 配置——在 NetPro 中配置连接,或直接用 S7 协议通讯;② DB 块——S7-300/400 的 DB 块默认是非优化的,可以直接用绝对地址;③ 机架号和槽号——S7-300 CPU 在机架 0 槽 2,S7-400 CPU 在机架 0 槽 2或3(取决于型号);④ 老型号 S7-200——用 PPI(串口)或 S7 协议(以太网模块 CP243-1),S7-200 SMART 用 S7 协议(以太网口)或 Modbus TCP
    • C# 对接西门子 PLC:① HslCommunication——首选,支持 S7-200/S7-200 SMART/S7-1200/S7-1500/S7-300/S7-400,API 简洁:SiemensS7Client client = new SiemensS7Client(SiemensPLCS.S1200, "192.168.1.10"); client.ConnectServer(); var result = client.ReadInt16("DB1.2"); 几行代码搞定;② Sharp7——S7 协议的 C# 开源实现,轻量、跨平台,API 偏底层,适合需要深入控制的场景;③ S7.Net——另一个 S7 协议 C# 库,简单易用,但更新较慢;④ 通讯注意——批量读取(一次读多个连续地址)、断线重连(指数退避)、连接池(不要频繁创建销毁连接)、异常处理(所有通讯操作 try-catch)
    • 其他语言对接:① Python——python-snap7(Snap7 的 Python 封装)、python-opcua(OPC UA);② C++——Snap7(开源 S7 协议库,跨平台)、libnodave(老库);③ Java——CommLayer、S7 协议库;④ Node.js——nodes7(Node-RED 的 S7 节点底层)、node-snap7
  3. 03

    三菱 Q/L/FX 系列:MC 协议(3E/1E 帧)原理与上位机对接实践

    三菱是日系 PLC 的代表,国内市场份额仅次于西门子。MC 协议(MELSEC Communication Protocol)是三菱 PLC 的原生通讯协议,上位机对接三菱 PLC 最常用的方式。Q/L/R 系列用 3E 帧(以太网,功能强),FX 系列用 1E 帧(简单)或 Modbus。搞清楚 MC 协议帧格式和软元件地址,三菱 PLC 对接就不难了。

    • MC 协议概述:MC 协议是三菱专用的通讯协议,支持串口(1E/2C/3C 帧)和以太网(3E/4E 帧)。① 1E 帧——最简单,适用于 FX 系列,ASCII 格式,单报文读写少量数据;② 3E 帧——Q/L/R 系列以太网默认,二进制格式(也支持 ASCII),功能完整,支持批量读写、随机读写、块启动/停止等;③ 4E 帧——新一代,增强安全性,支持登录认证。上位机对接最常用的是 3E 帧(二进制)
    • 3E 帧格式(二进制):请求报文 = 副头部(4字节:5000 00FF FF03 0000) + 头部(6字节:访问路径 3字节 + 监视定时器 2字节 + 数据长 2字节) + 数据部(指令 + 子指令 + 数据)。响应报文 = 副头部(4字节) + 头部(4字节:访问路径 3字节 + 数据长 2字节) + 数据部(结束代码 2字节 + 数据)。关键:① 网络号(0xFF=本机)、PC号(0xFF=本机)、请求目标模块IO(0x03FF=CPU)、请求目标模块站号(0x00);② 监视定时器(0x0000=无限,或 0x0010=10秒);③ 结束代码(0x0000=成功,其他=错误码)
    • 三菱软元件地址:① 位元件——X(输入)、Y(输出)、M(中间继电器)、L(锁存继电器)、F(报警器)、B(链接继电器)、S(步进继电器);② 字元件——D(数据寄存器)、W(链接寄存器)、R(文件寄存器)、Z(变址寄存器);③ 定时器——T(触点/线圈/当前值)、计数器——C;④ 地址格式——10进制(如 D100、M10)或16进制(如 D0x64),MC 协议默认10进制;⑤ 位地址和字地址——读位用 0x01 指令(位读取),读字用 0x04 指令(字读取),注意单位不同
    • Q/L/R 系列对接要点:① 以太网配置——在 GX Works3 中配置 PLC 的 IP 地址,确保和上位机同网段;② 通讯配置——默认开启 MC 协议(3E 帧二进制,端口 5002),不需要额外配置;③ 软元件范围——Q/L 系列 D 寄存器默认 12288 点(D0-D12287),M 继电器默认 8192 点;④ 批量读取——MC 协议 3E 帧支持批量读取(一次最多 960 字),效率高;⑤ 随机读写——支持随机读写(指定多个不连续地址),但效率低于批量
    • FX 系列对接要点:① FX5U——新一代,支持以太网 MC 协议(3E 帧),和 Q/L 系列类似;② FX3U/3G/1N——老型号,需要加以太网模块(FX3U-ENET-ADP)或用串口(RS485);③ 1E 帧——FX 系列串口用 1E 帧,ASCII 格式,简单但功能有限(一次最多读 64 字);④ Modbus——FX3U 可以配置为 Modbus RTU 从站,上位机用 Modbus 通讯,比 1E 帧更通用;⑤ 编程口——FX 系列编程口是 RS422,用 SC-09 编程电缆连接,协议是专用的,不推荐上位机直接用
    • C# 对接三菱 PLC:① HslCommunication——首选,支持三菱 Q/L/R/FX 全系列,MC 协议 3E/1E 帧都支持,API 简洁:MelsecMcClient client = new MelsecMcClient("192.168.1.20", 5002); client.ConnectServer(); var result = client.ReadInt16("D100"); 几行代码搞定;② 也支持三菱 A 系列、FX 串口;③ 通讯注意——批量读取、断线重连、连接池、异常处理,和西门子类似
  4. 04

    汇川/国产 PLC:H3U/H5U/AM400/AM600 对接,Modbus TCP 与国产替代

    汇川是国产 PLC 龙头,在国产替代的大背景下,越来越多的项目用汇川替代西门子/三菱。汇川 PLC 分两条技术路线:H3U/H5U(小型,兼容三菱,Modbus TCP)和 AM400/AM600(中型,CODESYS 平台,多协议)。对接方式不同,要注意区分。其他国产 PLC(台达/信捷/禾川/永宏)大多支持 Modbus,对接方式类似。

    • 汇川 H3U/H5U 对接要点:① 协议——H3U/H5U 默认支持 Modbus TCP(端口 502),作为 Modbus TCP 服务器,上位机作为客户端读写;也支持 MC 协议(兼容三菱,部分功能);② 编程软件——AutoShop(汇川自研,类似三菱 GX Works);③ 软元件——兼容三菱体系,D(数据寄存器)、M(中间继电器)、X(输入)、Y(输出)、T(定时器)、C(计数器);④ Modbus 地址映射——D 寄存器映射到 Modbus 4x 保持寄存器(40001 起),M 继电器映射到 0x 线圈(00001 起),X 输入映射到 1x 离散输入,Y 输出映射到 0x 线圈;⑤ 配置——在 AutoShop 中配置 PLC 的 IP 地址,确保 Modbus TCP 功能开启(默认开启),设置从站地址(默认 1)
    • 汇川 AM400/AM600 对接要点:① 平台——基于 CODESYS V3,和贝加莱、WAGO 等同一平台,功能强大;② 编程软件——InoProShop(汇川定制的 CODESYS);③ 协议支持——Modbus TCP/RTU、EtherNet/IP、OPC UA、CANopen、PROFINET(部分型号),协议支持比 H3U 丰富;④ 变量访问——CODESYS 平台用变量名访问,不是地址访问,上位机通过 OPC UA 或 Modbus 映射访问变量;⑤ Modbus 映射——在 CODESYS 中配置 Modbus 映射,把变量映射到 Modbus 寄存器地址;⑥ OPC UA——AM 系列内置 OPC UA 服务器,上位机可以直接用 OPC UA 客户端读取变量,更标准化
    • Modbus TCP 对接通用要点:① 报文格式——MBAP 头(7字节:事务ID 2字节 + 协议ID 2字节 + 长度 2字节 + 单元ID 1字节) + PDU(功能码 1字节 + 数据);② 常用功能码——0x01(读线圈)、0x02(读离散输入)、0x03(读保持寄存器)、0x04(读输入寄存器)、0x05(写单线圈)、0x06(写单寄存器)、0x0F(写多线圈)、0x10(写多寄存器);③ 地址——Modbus 地址从 0 开始,上位机库通常从 1 开始(40001=地址0),注意偏移;④ 字节序——Modbus 协议本身不规定字节序,不同 PLC 可能不同!汇川/三菱是大端,西门子 Modbus 也是大端,但有些设备是小端,浮点数尤其要注意,用 IEEE754 工具验证;⑤ 批量读取——功能码 0x03 一次最多读 125 个寄存器(256 字节限制),大批量数据要分批读
    • 其他国产 PLC 对接:① 台达(Delta)——DVP/AS/AH 系列,支持 Modbus TCP/RTU(最常用),也有专用协议;DVP 系列用 WPLSoft,AS/AH 用 ISPSoft;② 信捷(Xinje)——XC/XD/XE 系列,支持 Modbus,部分兼容三菱指令;编程软件 XCPPro;③ 禾川(HCFA)——HCA 系列,支持 Modbus,兼容三菱;编程软件 HCPWorks;④ 永宏(Fatek)——FBS 系列,支持 Modbus 和永宏专用协议(FBs Protocol);编程软件 WinProLadder;⑤ 通用建议——国产 PLC 优先用 Modbus TCP(最通用),如果 Modbus 不满足需求再考虑专用协议;对接前先确认 PLC 的 Modbus 寄存器映射表(不同品牌地址映射不同)
    • C# 对接国产 PLC(Modbus):① HslCommunication——首选,Modbus 客户端支持 Modbus TCP/RTU/ASCII,API 简洁:ModbusTcpClient client = new ModbusTcpClient("192.168.1.30", 502); client.ConnectServer(); var result = client.ReadInt16("40001"); 注意地址格式;② 也支持 Modbus RTU(串口)、Modbus ASCII;③ 字节序设置——HslCommunication 可以设置字节序(BigEndian/LittleEndian)和浮点格式(ABCD/CDAB/BADC/DCBA),对接不同 PLC 时要调整;④ 验证——先用 Modbus 调试工具(QModMaster/Modbus Poll)验证通讯通了、数据对了,再写代码
  5. 05

    欧姆龙 / AB / 台达等其他品牌:FINS / EtherNet/IP / Modbus 对接要点

    除了西门子、三菱、汇川,工业现场还常见欧姆龙、AB(罗克韦尔)、台达等品牌。每个品牌的协议不同,但对接思路是相通的——确认协议、配置 PLC、用协议库或网关对接。这里把常见品牌的对接要点逐个讲清楚,遇到哪个品牌都能快速上手。

    • 欧姆龙(Omron)对接:① 协议——FINS(Factory Interface Network Service,以太网,端口 9600)、Host Link(串口,RS232/485)、EtherNet/IP(NJ/NX 系列支持)、OPC UA(NJ/NX 系列支持);② FINS 协议——欧姆龙专用协议,基于 UDP 或 TCP,报文包含 FINS 头(ICF/RSN/GCT/DNA/DA1/DA2/SNA/SA1/SA2/SID) + 命令码 + 数据;③ 软元件——CIO(输入输出继电器)、W(内部辅助继电器)、H(保持继电器)、A(特殊辅助继电器)、D(数据寄存器)、DM(数据内存)、TIM(定时器)、CNT(计数器);④ C# 对接——HslCommunication 支持欧姆龙 FINS 协议(OmronFinsClient),也支持 Host Link;⑤ 配置——在 CX-Programmer 或 Sysmac Studio 中配置 IP,确保 FINS 功能开启,设置 FINS 节点号(通常和 IP 最后一段相同)
    • AB(罗克韦尔)对接:① 协议——EtherNet/IP(CIP 协议,Common Industrial Protocol,端口 44818)、OPC UA(ControlLogix/CompactLogix 支持)、Modbus(需要模块);② EtherNet/IP——AB 的原生以太网协议,基于 CIP,支持显式报文(点对点读写)和隐式报文(I/O 周期性通讯);③ 标签寻址——AB PLC 用标签名(Tag)寻址,不是地址寻址,上位机通过标签名读写变量,需要知道标签名和数据类型;④ C# 对接——HslCommunication 支持 AB EtherNet/IP(AllenBradleyClient),可以通过标签名读写;也可以用 RSI Linx(AB 官方 OPC 服务器);⑤ 配置——在 Studio 5000 中配置控制器 IP,确保 EtherNet/IP 模块正常,设置标签为外部可访问
    • 台达(Delta)对接:① 协议——Modbus TCP/RTU(最常用,端口 502)、台达专用协议(ASCII/RTU)、EtherNet/IP(AS/AH 系列支持)、OPC UA(AS/AH 系列支持);② DVP 系列——小型 PLC,用 Modbus 或台达专用协议,编程软件 WPLSoft;③ AS 系列——中型 PLC,基于 CODESYS,支持多协议,编程软件 ISPSoft;④ AH 系列——大型 PLC,模块化,支持多协议;⑤ Modbus 地址映射——DVP 系列 D 寄存器映射到 4x 保持寄存器,M 继电器映射到 0x 线圈,注意台达的 Modbus 地址偏移(有些型号从 0 开始,有些从 1 开始);⑥ C# 对接——HslCommunication 支持台达 Modbus 和台达专用协议(DeltaClient)
    • 信捷/禾川/永宏对接:① 信捷(Xinje)——XC/XD/XE 系列,Modbus TCP/RTU,部分兼容三菱 MC 协议,编程软件 XCPPro;② 禾川(HCFA)——HCA 系列,Modbus,兼容三菱,编程软件 HCPWorks;③ 永宏(Fatek)——FBS 系列,Modbus 和永宏专用协议(FBs Protocol,功能比 Modbus 强),编程软件 WinProLadder;④ 通用建议——这些品牌优先用 Modbus(最通用),如果 Modbus 不满足需求(如需要读写特殊软元件)再考虑专用协议;对接前一定要找厂家要 Modbus 地址映射表和通讯手册
    • 多品牌统一接入的三种方案:① 协议库直连——上位机用 HslCommunication 等支持多协议的库,分别对接不同品牌 PLC,适合设备少(10台以内)、品牌少(2-3种)的场景,开发简单但耦合度高;② OPC UA 标准化——每个品牌 PLC 用各自的 OPC 服务器(KEPServerEX 支持几乎所有品牌),统一暴露成 OPC UA,上位机只需要一个 OPC UA 客户端,适合多品牌、多设备、需要标准化的场景,解耦但需要部署 OPC 服务器(KEPServerEX 商业授权贵);③ 边缘网关——Neuron/ThingsGateway 等边缘网关支持多协议采集,统一转换成 MQTT/OPC UA 上报,上位机从网关获取数据,适合大规模、多协议、需要边缘计算的场景,解耦最彻底但架构最复杂
  6. 06

    工程化落地:多品牌统一架构、断线重连、批量读取优化、通讯状态监控

    从「单个 PLC 通讯跑通」到「多品牌多设备长期稳定运行」,要解决几个工程问题:多品牌怎么统一接入?断线了怎么自动重连?批量读取怎么优化?通讯状态怎么监控?数据异常怎么发现?这是上位机对接从「能跑」到「稳定跑」的关键,也是很多工程师容易忽略的部分。

    • 多品牌统一接入架构:① 抽象通讯接口——定义统一的 IPlcClient 接口(Connect/Disconnect/ReadBool/ReadInt16/ReadFloat/Write...),每个品牌实现一个具体类(SiemensClient/MitsubishiClient/ModbusClient),上位机只依赖接口,不依赖具体实现;② 配置化驱动——PLC 型号、IP、端口、协议、点位表都写在配置文件(JSON/XML/SQLite),程序启动时根据配置创建对应的客户端实例,加新设备不用改代码,只改配置;③ 工厂模式——用工厂模式根据配置中的协议类型创建对应的客户端实例,符合开闭原则;④ 统一数据模型——不管什么品牌,读上来的数据都转换成统一的格式(点位名、值、质量戳、时间戳),上层应用不关心数据来自哪个品牌
    • 断线重连机制:① 连接状态监控——定期(如 5 秒)发送心跳包或读取一个已知地址,判断连接是否正常;② 自动重连——检测到断线后,自动尝试重连,用指数退避策略(第1次等1秒,第2次等2秒,第3次等4秒...最大等30秒),避免频繁重连打满 PLC 连接数;③ 重连成功后恢复——重连成功后,恢复订阅(如果有)、同步时间、继续采集;④ 断线期间数据——断线期间的数据会丢失(除非 PLC 有缓存),要在界面上显示通讯中断状态,报警提示,不要显示旧数据误导用户;⑤ 重连日志——记录每次断线和重连的时间、原因,方便排查问题
    • 批量读取优化:① 为什么要批量——逐个读寄存器效率极低(每个请求都有网络往返),100 个点位逐个读可能要 10 秒,批量读可能只要 100ms;② 连续地址合并——把连续的寄存器地址合并成一次批量读取(Modbus 0x03 一次最多 125 个寄存器,S7 协议一次最多 1920 字节,MC 协议一次最多 960 字);③ 不连续地址分组——把不连续的地址按连续区间分组,每个区间一次批量读,减少请求次数;④ 按采集频率分组——不同点位采集频率不同(如温度 1 秒、状态 100ms、产量 1 分钟),按频率分组,高频组多读,低频组少读,减少不必要的通讯;⑤ 读取缓存——同一周期内多次读取同一地址时,从缓存取,不要重复发请求
    • 通讯状态监控:① 连接状态——每个 PLC 的连接状态(已连接/未连接/重连中),界面上用颜色标识(绿/红/黄);② 通讯质量——最近 N 次读取的成功率、平均响应时间、超时次数,评估通讯质量;③ 数据质量戳——每个数据点带质量戳(Good/Uncertain/Bad),Bad 数据(通讯中断/地址错误/超范围)在界面上特殊显示(灰色/问号),不要当成正常数据;④ 异常检测——数据长时间不变(可能传感器坏了)、数据跳变(可能干扰)、数据超范围(可能传感器故障),自动检测并报警;⑤ 监控面板——做一个通讯状态监控面板,显示所有 PLC 的状态、通讯质量、最近异常,方便运维人员快速定位问题
    • 性能优化与资源管理:① 连接池——不要频繁创建和销毁连接,用连接池复用连接,每个 PLC 保持一个长连接;② 多线程——多 PLC 时用多线程/异步并发采集,不要串行(一个 PLC 通讯慢会阻塞所有),但要控制并发数(不要超过 PLC 的连接数限制);③ 异步编程——用 async/await 异步通讯,不阻塞 UI 线程,界面保持流畅;④ 内存管理——大量数据时用结构体数组或内存池,避免频繁 GC;⑤ 限流——控制通讯频率,不要把 PLC 通讯打满(PLC 通讯处理能力有限,太频繁会导致 PLC 扫描周期变长);⑥ 优雅关闭——程序退出时正常断开连接、保存数据、停止线程,不要直接杀进程
    • 项目落地经验:① 先调通一个——先选一个品牌一个 PLC 调通通讯(用调试工具验证),再写代码,不要上来就写一堆代码;② 标准化——点位命名规范(车间_产线_设备_点位)、数据类型统一、地址表文档化,方便后期维护;③ 文档——每个 PLC 的型号、IP、端口、协议、点位表、通讯参数都要有文档,交接给运维;④ 测试——充分测试断线重连、网络抖动、PLC 重启、大数据量等异常场景,不要只在正常情况下测试;⑤ 渐进式——先接几个关键设备验证方案,稳定后再批量接入,不要一次性把所有设备都接上

边学边用:PLC 对接调试工具

PLC 对接最常遇到的问题:Modbus 报文、浮点字节序、状态字解析。纯浏览器本地计算,不上传数据。

品牌 PLC 对接相关软件选型(按用途分组)

更多 PLC 编程软件见 PLC 编程软件分类,通讯协议库见 工业通讯分类,可用 软件对比正面对比。

品牌 PLC 对接常见问题

上位机和 PLC 通讯有哪些方式?直连、OPC UA、边缘网关怎么选?

上位机和 PLC 通讯主要有三种方式,各有适用场景:① 直连——上位机程序直接通过协议库(HslCommunication/Sharp7/libmodbus)和 PLC 通讯,适合设备少(10台以内)、协议少(2-3种)、项目简单的场景。优点是开发简单、架构简单、成本低;缺点是耦合度高(上位机和 PLC 直接绑定)、加新设备要改代码、多品牌时代码复杂。② OPC UA 标准化——PLC 或第三方 OPC 服务器(KEPServerEX/Matrikon)把 PLC 数据暴露成 OPC UA,上位机通过 OPC UA 客户端读取,适合多品牌、多设备、需要标准化、和其他系统集成的场景。优点是解耦(上位机不关心 PLC 品牌)、标准化(OPC UA 是工业标准)、安全性好(证书认证+加密);缺点是需要部署 OPC 服务器(KEPServerEX 商业授权贵,开源 OPC 服务器功能有限)、多一层延迟。③ 边缘网关——Neuron/ThingsGateway 等边缘网关采集多品牌 PLC 数据,转换成 MQTT/OPC UA 上报,上位机从网关获取数据,适合大规模(50台以上)、多协议、需要边缘计算(数据预处理/断网缓存/本地报警)的场景。优点是解耦最彻底、支持边缘计算、断网不丢数据、可扩展;缺点是架构最复杂、需要部署和维护网关、成本高(网关硬件+软件)。选型决策:① 小项目、设备少——直连,简单直接;② 中项目、多品牌、要标准化——OPC UA;③ 大项目、多协议、要边缘计算——边缘网关;④ 混合方案——关键设备直连(实时性要求高)、普通设备走 OPC UA 或网关,根据实际需求组合。实际项目中,越来越多的中大型项目采用 OPC UA 或边缘网关,直连只在小项目中使用。

西门子 S7-1200/1500 上位机通讯连不上,最常见的原因是什么?

西门子 S7-1200/1500 上位机通讯连不上,90% 是以下几个原因:① 没有勾选「允许 PUT/GET 通讯」——这是最常见的原因!S7-1200/1500 默认不允许远程对象的 PUT/GET 通讯,需要在博途中配置:PLC 属性 → 防护与安全 → 连接机制 → 勾选「允许来自远程对象的 PUT/GET 通讯访问」。不勾选的话,上位机发 S7 协议请求会被 PLC 拒绝。② DB 块用了优化的块访问——S7-1200/1500 的 DB 块默认是「优化的块访问」,这种模式下只能用符号寻址(需要 TIA Portal Openness),不能用绝对地址(DB1.DBX0.0)。上位机直连建议用非优化的块访问:在博途中双击 DB 块 → 属性 → 取消勾选「优化的块访问」,重新编译下载。③ IP 地址和网段不对——确保上位机和 PLC 在同一网段(或有路由),ping 一下 PLC 的 IP 看通不通。④ 防火墙——Windows 防火墙或网络防火墙阻止了 102 端口(S7 协议端口),临时关闭防火墙测试,或添加 102 端口入站规则。⑤ 机架号和槽号不对——S7-1200/1500 机架 0 槽 1,S7-300 机架 0 槽 2,S7-400 机架 0 槽 2或3。槽号错了也连不上。⑥ PLC 处于 STOP 状态——STOP 状态下有些 PLC 不响应通讯,切到 RUN 试试。⑦ 连接数满了——S7-1200 最多 8 个连接,S7-1500 最多 32 个(取决于型号),连接数满了新连接会被拒绝,检查是否有未关闭的连接。排查步骤:① ping IP → ② telnet 102 端口 → ③ 检查 PUT/GET 设置 → ④ 检查 DB 块优化设置 → ⑤ 检查机架槽号 → ⑥ 用 S7 调试工具(如 S7Client、PLC-ANALYZER)验证。用 HslCommunication 时,注意设置正确的 PLC 型号(SiemensPLCS.S1200/S1500/S300/S400/S200Smart),型号错了也可能连不上。

三菱 MC 协议 3E 帧和 1E 帧有什么区别?怎么选?

MC 协议(MELSEC Communication Protocol)是三菱 PLC 的原生通讯协议,有多种帧格式,3E 帧和 1E 帧是最常用的两种,区别很大:① 适用型号——3E 帧适用于 Q/L/R 系列(中大型)和 FX5U(新一代小型),以太网通讯;1E 帧适用于 FX 系列(老型号 FX3U/3G/1N),串口(RS232/485)或以太网(加模块)。② 帧格式——3E 帧是二进制格式(也支持 ASCII),有副头部(4字节)+头部(6字节)+数据部,结构复杂但功能强;1E 帧是 ASCII 格式,结构简单(ENQ+命令+数据+校验和),但功能有限。③ 功能——3E 帧支持批量读写(一次最多 960 字)、随机读写、块启动/停止、时钟读写、远程操作等,功能完整;1E 帧只支持简单的批量读写(一次最多 64 字),功能简单。④ 效率——3E 帧二进制格式,传输效率高,适合大数据量;1E 帧 ASCII 格式,传输效率低(每个字节用两个 ASCII 字符表示),适合小数据量。⑤ 端口——3E 帧以太网默认端口 5002(也可以配置);1E 帧串口用 RS232/485,以太网模块用端口 5002 或 5003(取决于模块)。选型建议:① Q/L/R/FX5U 系列——必须用 3E 帧(这些型号不支持 1E 帧以太网);② FX3U/3G/1N 串口——用 1E 帧(简单)或 Modbus RTU(更通用);③ FX3U 加以太网模块——可以用 1E 帧(模块支持)或 Modbus TCP(推荐,更通用);④ 新项目——优先选 Q/L/R 或 FX5U,用 3E 帧,功能强效率高。用 HslCommunication 对接三菱时,MelsecMcClient 默认用 3E 帧二进制,对接 Q/L/R 直接用;对接 FX 老型号用 MelsecA1EAsciiClient(1E 帧 ASCII)。注意:3E 帧的访问路径(网络号/PC号/IO号/站号)要设置正确,本机访问通常网络号 0xFF、PC号 0xFF、IO号 0x03FF、站号 0x00。

汇川 PLC 支持什么协议?和三菱兼容吗?上位机怎么对接?

汇川是国产 PLC 龙头,产品分两条技术路线,协议支持不同:① H3U/H5U 系列(小型 PLC)——基于自研平台,兼容三菱 FX 系列的指令体系,支持的协议:Modbus TCP(默认,端口 502,作为 Modbus 服务器)、Modbus RTU(串口)、MC 协议(兼容三菱 3E/1E 帧,部分功能)、CANopen、EtherCAT(运动控制)。编程软件是 AutoShop(汇川自研,界面类似三菱 GX Works)。② AM400/AM600 系列(中型 PLC)——基于 CODESYS V3 平台,和贝加莱、WAGO 同一平台,功能强大,支持的协议:Modbus TCP/RTU、EtherNet/IP、OPC UA(内置 OPC UA 服务器)、CANopen、PROFINET(部分型号)、EtherCAT、POWERLINK。编程软件是 InoProShop(汇川定制的 CODESYS)。和三菱的兼容性:① H3U/H5U 的指令系统兼容三菱 FX(梯形图指令、软元件体系都类似),三菱的程序可以比较容易地移植到汇川 H3U/H5U;② 但 H3U/H5U 的 MC 协议不是 100% 兼容三菱,有些功能可能不支持,建议优先用 Modbus TCP(最稳定最通用);③ AM400/AM600 是 CODESYS 平台,和三菱不兼容,是完全不同的体系。上位机对接方式:① H3U/H5U——首选 Modbus TCP,上位机作为 Modbus 客户端,读写 PLC 的保持寄存器(4x)和线圈(0x)。D 寄存器映射到 40001 起,M 继电器映射到 00001 起。用 HslCommunication 的 ModbusTcpClient,注意设置正确的字节序(汇川默认大端)和浮点格式;② AM400/AM600——首选 OPC UA(内置 OPC UA 服务器,标准化,用变量名访问),或 Modbus TCP(需要在 CODESYS 中配置 Modbus 映射)。OPC UA 用 HslCommunication 的 OpcUaClient 或 OPCFoundation .NET Standard 库。对接前的准备:① 确认 PLC 型号(H3U/H5U 还是 AM400/AM600);② 在 AutoShop 或 InoProShop 中配置 PLC 的 IP 地址;③ 确认 Modbus 功能开启(默认开启)和从站地址(默认 1);④ 找汇川要 Modbus 地址映射表(确认 D/M/X/Y 对应的 Modbus 地址);⑤ 先用 Modbus 调试工具(QModMaster/Modbus Poll)验证通讯通了、数据对了,再写代码。汇川作为国产替代,性价比高,服务响应快,在中小型项目中是西门子/三菱的有力替代。

多品牌 PLC 怎么统一接入?用什么架构比较好?

多品牌 PLC 统一接入是中大型项目的常见需求,有三种主流架构,各有优缺点:① 协议库直连(多客户端)——上位机用 HslCommunication 等支持多协议的库,为每个品牌 PLC 创建一个客户端实例,分别通讯。架构:上位机 → SiemensClient(西门子) + MitsubishiClient(三菱) + ModbusClient(汇川/台达) → 各 PLC。优点是架构简单、成本低、延迟低;缺点是耦合度高(上位机代码和每个品牌绑定)、加新品牌要改代码、多品牌时代码复杂、连接管理麻烦。适合设备少(10台以内)、品牌少(2-3种)的小项目。② OPC UA 标准化——每个品牌 PLC 用各自的 OPC 服务器(KEPServerEX 支持几乎所有品牌,是最常用的),统一暴露成 OPC UA,上位机只需要一个 OPC UA 客户端,从 OPC 服务器读取所有品牌的数据。架构:各 PLC → KEPServerEX(协议转换) → OPC UA → 上位机。优点是解耦彻底(上位机只认 OPC UA,不关心 PLC 品牌)、标准化(OPC UA 是工业标准)、安全性好、可扩展(加新品牌只在 KEPServerEX 中配置,上位机不用改);缺点是需要部署 OPC 服务器(KEPServerEX 商业授权贵,按驱动/高级插件套件收费,整体投入可达几十万)、多一层延迟、多一个故障点(OPC 服务器挂了所有数据都断)。适合多品牌、多设备、需要标准化、和其他系统(MES/ERP)集成的中大型项目。③ 边缘网关——Neuron/ThingsGateway 等边缘网关部署在车间,采集多品牌 PLC 数据,转换成 MQTT/OPC UA 上报到中心,上位机从中心获取数据。架构:各 PLC → 边缘网关(Neuron/ThingsGateway,多协议采集+数据预处理+断网缓存) → MQTT Broker(EMQX) → 上位机/时序库。优点是解耦最彻底、支持边缘计算(数据预处理/本地报警/断网补传)、分布式部署(每个车间一个网关)、可扩展、断网不丢数据;缺点是架构最复杂、需要部署和维护网关(硬件+软件)、成本高、延迟比直连高。适合大规模(50台以上)、多协议、分布式(多车间)、需要边缘计算的大型项目。选型决策:① 小项目(<10台,<3品牌)——协议库直连,简单直接;② 中项目(10-50台,多品牌)——OPC UA(KEPServerEX),标准化解耦;③ 大项目(>50台,分布式,要边缘计算)——边缘网关;④ 混合方案——关键设备直连(实时性要求高)、普通设备走 OPC UA 或网关,根据实际需求组合。实际项目中,还要考虑预算(KEPServerEX 授权费)、团队技术能力(边缘网关运维复杂)、未来扩展性(是否会加新品牌新设备)等因素。对于工控软件.com 的用户,建议中小项目用 HslCommunication 直连(开源免费),中大型项目考虑 OPC UA 或边缘网关(Neuron 开源免费)。

上位机读 PLC 数据慢怎么办?怎么优化批量读取?

上位机读 PLC 数据慢是常见问题,主要原因是逐个读取(每个点位一个请求),优化的核心是批量读取和合理规划。具体优化方法:① 连续地址合并——把连续的寄存器地址合并成一次批量读取。例如要读 D100-D199(100个寄存器),不要发 100 次读单个寄存器的请求,而是发 1 次读 100 个连续寄存器的请求,性能提升 100 倍!Modbus 功能码 0x03 一次最多读 125 个寄存器(256 字节限制),S7 协议一次最多 1920 字节,MC 协议 3E 帧一次最多 960 字。② 不连续地址分组——如果地址不连续,按连续区间分组,每个区间一次批量读。例如要读 D100、D101、D200、D201、D300,分成三组(D100-D101、D200-D201、D300),发 3 次请求而不是 5 次。③ 按采集频率分组——不同点位采集频率不同,按频率分组:高频组(如状态 100ms)、中频组(如温度 1s)、低频组(如产量 1min)。高频组多读,低频组少读,减少不必要的通讯。不要所有点位都用最高频率。④ 读取缓存——同一采集周期内,多次读取同一地址时从缓存取,不要重复发请求。例如界面显示和报警判断都需要同一个数据,只发一次请求,两个地方都用缓存数据。⑤ 异步并发——多 PLC 时用异步/多线程并发采集,不要串行。串行时一个 PLC 通讯慢(如超时 3 秒)会阻塞所有 PLC;并发时多个 PLC 同时通讯,总时间是最慢的那个而不是总和。但要控制并发数,不要超过 PLC 的连接数限制。⑥ 合理的超时和重试——设置合理的超时时间(如 2-3 秒),不要太长(超时了等太久)也不要太短(网络稍微抖动就超时)。失败后重试 1-2 次,不要无限重试(PLC 真的断了重试也没用,还会阻塞)。⑦ 减少写操作——写操作比读操作慢(PLC 需要处理写入),不要频繁写同一个地址,批量写(一次写多个连续地址)。⑧ 用高效的协议库——HslCommunication 等成熟的协议库内部已经做了很多优化(连接池、批量处理、异步),比自己写裸协议高效。⑨ 监控通讯性能——记录每个 PLC 的读取时间、成功率、超时次数,发现慢的 PLC 针对性优化(可能是网络问题、PLC 性能问题、地址规划问题)。经验值:① 100 个连续寄存器,Modbus TCP 批量读约 10-50ms(取决于网络);② 100 个不连续地址,逐个读约 1-5 秒,分组批量读约 50-200ms;③ 优化后性能提升 10-100 倍是常态。practice-modbus-batch-read 教程有详细的批量读取实践,建议参考。

PLC 断线重连怎么实现?通讯状态怎么监控和显示?

PLC 断线重连和通讯状态监控是上位机开发的必备功能,工业现场网络不稳定(网线松动、交换机故障、PLC 重启)是常态,没有断线重连的上位机在生产环境会频繁出问题。断线重连实现:① 连接状态检测——定期(如 3-5 秒)发送心跳包(读一个已知地址或专用心跳寄存器),如果连续 2-3 次失败,判定为断线。不要用 TCP 连接状态判断(网线断了 TCP 可能还显示已连接,因为没有 FIN/RST),必须用应用层心跳。② 自动重连——检测到断线后,自动尝试重连,用指数退避策略:第 1 次等 1 秒,第 2 次等 2 秒,第 3 次等 4 秒,第 4 次等 8 秒...最大等 30 秒。避免频繁重连打满 PLC 连接数(PLC 连接数有限,频繁重连可能导致其他客户端连不上)。③ 重连成功后恢复——重连成功后,恢复订阅(如果有)、同步 PLC 时间、重新读取初始数据、继续正常采集。④ 断线期间处理——断线期间:① 停止发请求(不要一直发,浪费资源);② 界面显示通讯中断状态(红色/灰色),不要显示旧数据误导用户;③ 数据质量戳设为 Bad;④ 记录断线时间和原因到日志;⑤ 如果有本地缓存(边缘网关),数据存在本地,恢复后补传(上位机直连模式下断线期间数据会丢失,因为 PLC 一般不缓存)。⑤ 重连日志——记录每次断线(时间、原因、最后一次成功通讯时间)和重连(时间、重试次数、是否成功),方便运维排查问题。通讯状态监控:① 连接状态——每个 PLC 的连接状态:已连接(绿)、未连接(红)、重连中(黄),界面上用颜色和文字明确标识。② 通讯质量指标——最近 N 次(如 100 次)读取的:成功率(成功次数/总次数)、平均响应时间、最大响应时间、超时次数、连续失败次数。这些指标可以评估通讯质量,成功率低于 95% 或平均响应时间超过 500ms 就要告警。③ 数据质量戳——每个数据点带质量戳:Good(正常,绿色)、Uncertain(不确定,如值超范围,黄色)、Bad(坏数据,如通讯中断/地址错误,灰色/问号)。界面上 Bad 数据不要显示数值,显示「---」或「?」,避免用户把旧数据当成实时数据。④ 异常检测——自动检测数据异常:① 数据长时间不变(如温度 1 小时不变,可能传感器坏了或通讯卡死);② 数据跳变(如温度从 25℃ 跳到 200℃,可能干扰或传感器故障);③ 数据超范围(如压力超过传感器量程);④ 通讯频繁中断(1 小时内断线超过 3 次)。检测到异常自动报警(弹窗/声音/日志/短信)。⑤ 通讯状态监控面板——做一个专门的监控面板,显示所有 PLC 的:连接状态、IP、协议、最后通讯时间、最近 1 小时成功率、平均响应时间、当前采集点位、最近异常。运维人员打开这个面板就能一眼看到所有 PLC 的通讯状况,快速定位问题。⑥ 告警通知——严重异常(PLC 断线超过 5 分钟、通讯成功率低于 90%)通过短信/微信/邮件通知运维人员,不要只在界面上显示(运维人员可能没看界面)。实现建议:① 用单例模式管理每个 PLC 的通讯状态和重连逻辑;② 用事件/回调通知界面更新状态(不要用定时器轮询,效率低);③ 状态变化时记录日志(状态机:Connected → Disconnected → Reconnecting → Connected);④ 充分测试:拔网线、关 PLC、网络抖动、PLC 重启等场景都要测,确保断线重连可靠。

继续往深走

项目里要对接多品牌 PLC,不确定用什么方案?可以在「技术咨询」描述你的 PLC 品牌型号、数量、点位和对接需求; 也可以到软件库按六维评分挑选合适的协议库和采集网关。

先看 HslCommunication 多协议通讯库 返回技术专题列表