上位机和PLC之间的数据交互,是设备控制系统最底层也最容易踩坑的一环。很多刚入行的工程师把"通信"想得很神秘,其实PLC通信的本质非常朴素,真正的难点在于不同品牌各搞一套地址体系和协议,西门子、三菱、欧姆龙的术语互不相通,再叠加串口、字节序、报文细节,项目常常卡在"就是连不上"。这篇文章把PLC通信从物理层到应用层讲透,对比Modbus、S7、MC/SLMP、FINS和OPC UA的用法、地址映射规则和抓包调试方法,作为选型和现场排故的速查参考。
一、先理解本质:PLC通信就是读写它的内存
PLC扫描程序时,输入、输出、中间继电器、数据寄存器全部映射在固定的存储区里。通信协议做的事情只有两类:读——上位机告诉PLC"把某存储区从某地址开始的N个字节给我",PLC回数据;写——上位机把数值打包发给PLC"请放到某地址"。无论协议多复杂,剥掉外壳都是这两个动作,所谓点位采集,本质就是周期性地批量读地址;所谓下发参数和远程操作,本质就是写地址。
理解这一点有三个实际意义。第一,通信效率取决于"一次读多大一片连续地址",把点位按地址连续性排布在PLC数据块里,一次请求读回几十个点,远比一个点一个请求快。第二,安全边界要设在PLC侧:上位机写控制字必须经过PLC程序里的联锁校验,绝不能让软件直接写物理输出区,通信出错或上位机崩溃时设备才能保持安全。第三,通信内容要双方约定:电气工程师在PLC里规划数据交换区(状态区、参数区、控制区),上位机按点表读写,各取所需而不是随便读内部软元件,这是规范项目的通用做法。
二、物理层:RS-485串口与以太网怎么选
老设备和仪表上常见RS-485串口,特点是双线差分、抗干扰强、总线型布线,一条485链路可以挂多个从站(靠站地址区分),成本极低,温控表、变频器、电表几乎都带485口。代价是速度和效率:常用9600或115200波特率,靠主站轮询从站应答,链路长、从站多时轮询周期拉长,且参数多——波特率、数据位、停止位、校验、站地址必须完全一致,错一个就连不上。485布线要走手拉手拓扑、两端和末端加终端电阻、A/B线接反是现场最高发的故障。
以太网是新设备的主流:100M带宽、星型组网经交换机扩展、多主站可同时访问,自带TCP/UDP的可靠性和路由能力,车间拉网线或走现有网络即可。选型原则很直接:新PLC、多上位机、数据点多、要远程,用以太网;只有485口的老设备和仪表,走串口,或用串口服务器、协议采集网关把485转成以太网,再由上位机统一采集。注意串口服务器只是透传,上位机软件仍然要讲对应串口协议;而协议网关可以直接把Modbus RTU转成Modbus TCP甚至OPC UA,能替上位机分担轮询,是改造项目的常用件。
三、Modbus RTU/TCP:工业界的通用语
Modbus是1979年为控制器设计的公开协议,因为简单开放成了仪表和国产设备的事实标准。Modbus RTU跑在串口上,报文是二进制紧凑帧加CRC校验;Modbus TCP把报文装进TCP数据包(默认端口502),加了7字节MBAP报头并用IP区分从站,不再需要站地址和CRC,由TCP保证传输。两者的应用层模型一致,核心是四类数据区和功能码:01读线圈(DO,位读写)、02读离散输入(DI,位只读)、03读保持寄存器(4x区,字读写,最常用)、04读输入寄存器(3x区,字只读),写对应05/0F写线圈、06/10写寄存器。
寄存器是16位无符号整数,实际工程值要靠工程约定解释:温度可能要除以10,32位浮点数占用两个连续寄存器,32位整数(DINT)同样占两个寄存器,而高低字的先后顺序、浮点数字节序各厂家并不统一,拿到设备后第一件事就是用一个已知值验证解析方式,这是Modbus项目最常见的数据错乱根源。使用Modbus还要注意两点:一是轮询节奏,主站发完必须等从站应答或超时才能发下一帧,多从站要串行轮询,新手常因并发发送导致全链路报错;二是写操作要有写使能和心跳设计,上位机定时写心跳字,PLC发现心跳停止就判定通信中断并进入安全态。
四、西门子S7协议:DB块、I/Q/M区与PUT/GET
西门子S7-200 SMART、S7-1200/1500/300/400系列普遍用以太网S7协议通信(端口102),上位机用Sharp7、Snap7或OPC方式接入。S7的地址体系是初学者的第一道坎:I区是物理输入(I0.0按位、IB0按字节、IW0按字、ID0按双字),Q区是物理输出,M区是位存储器(中间变量),DB区是数据块,相当于用户自定义的结构化内存,DB1.DBX0.0是位、DB1.DBB0是字节、DB1.DBW0是字、DB1.DBD0是双字。规范项目通常把要交互的数据集中在一个专门的通信DB块里,连续排列便于整段读写。
S7-1200/1500出厂有两个安全限制必须在博途里放开:一是CPU属性里勾选"允许来自远程伙伴的PUT/GET通信访问",否则上位机连得上却读不到数据;二是优化的块访问会取消绝对地址,通信DB块要取消"优化的块访问"勾选,上位机才能按DB1.DBD0这样的偏移访问。另外DB块要注意不要勾选"仅存储在装载内存",下载后要确认数据实际在线。S7-1500还支持OPC UA Server,新项目上位机直接走OPC UA比手写S7协议更稳、更安全;老设备和成本敏感的场景,Sharp7这类轻量库依然是主力。
五、三菱MC协议与SLMP:软元件批量读写
三菱Q、L、iQ-R、FX5U系列网口通信走MC协议(MELSEC Communication),其以太网格式也称SLMP(Seamless Message Protocol),默认端口可在PLC参数里配置(常见5007、5562等,FX5U为5007)。三菱的地址体系叫软元件:M是辅助继电器(位)、X/Y是输入输出、D是数据寄存器(字)、W是链接寄存器、R/ZR是文件寄存器。MC协议报文支持随机读写和批量读写两种格式,上位机指定软元件类型、起始编号和个数即可,例如读D100开始的10个寄存器,比逐点请求高效得多。
用MC协议有三个工程要点。第一,FX5U、iQ-R等机型要在以太网参数里打开对应端口并设置通信对象,允许外部SLMP连接,有些机型还要配置"在线数据操作"许可。第二,软元件编号在报文里是十六进制ASCII或二进制形式,不同系列支持的软元件代码不同(如D的代码是A8、M是90),开发前务必对照对应机型的SLMP参考手册,网上通用样例直接套到Q系列和FX5U上经常不通。第三,32位数据同样存在双字高低位顺序问题,长整型和浮点建议先在PLC里填已知数验证。如果不想自己拼报文,也可以用MX Component这个官方组件,上位机调用控件即可访问,但部署要装运行环境,轻量项目里裸协议反而更省事。
六、欧姆龙FINS与HostLink:DM/CIO区的访问方式
欧姆龙CP1E/1H、CJ/CS、NJ/NX系列常见两条路:串口走HostLink(端口模式RS-232/485,帧头@加站号、FCS校验),以太网走FINS(Factory Interface Network Service,UDP默认9600端口或TCP)。FINS的地址概念是区码加通道号:CIO区(位和字,相当于输入输出与工作位区)、DM区(D数据存储器,最常用的字区)、H保持区、W工作区、T/C定时器计数器区,每个区有对应的存储区代码,报文中按"区码+通道号"定位,例如DM100就是D区100通道。
FINS工程配置上要注意三件事:一是PLC以太网模块要设IP、子网和FINS网络号、节点号(节点号通常约定取IP末段),上位机也要用FINS配置工具或报文头里的源/目标节点寻址,节点对不上是连不通的首要原因;二是FINS默认走UDP,报文短、实现简单但不保证可靠,关键控制场景建议用TCP模式并在上位机做超时重发;三是NJ/NX新一代控制器主推EtherNet/IP标签通信和OPC UA,按变量名而非地址访问,老项目维护用FINS,新项目优先评估标签方式。和其它品牌一样,正式项目应在PLC里划定通信区,用DM区连续通道作为数据交换接口,而不是让上位机零散访问内部通道。
七、多品牌混线:OPC UA、协议网关与统一架构
真实车间往往是西门子、三菱、欧姆龙、仪表混在一起,上位机为每家写一套驱动维护成本高。这时有两条收敛路径。其一是协议网关/边缘采集盒:硬件网关内置各品牌驱动,下挂PLC和485仪表,统一向上提供Modbus TCP或OPC UA,上位机只对接一个协议,网关负责轮询、缓存和断线补数,几十到上百点的车间用得很普遍。其二是OPC UA:跨平台的统一工业通信标准,按节点和变量名组织数据,自带类型描述、订阅推送、安全证书和权限,新一代PLC(S7-1500、NJ/NX)和高端设备可直接做UA Server,上位机做Client订阅数据,变化才上报,比轮询高效且语义清晰。
选型建议按场景分层:单台设备、点位少、成本敏感,直接用品牌专属协议或Modbus,最轻;多品牌车间采集与看板,用网关收口成Modbus TCP/OPC UA;集团级平台、要跨车间集成、重视信息安全和语义标准化,直接上OPC UA体系。需要泼一盆冷水:协议统一解决的是"怎么传",点表、命名规范、数据类型、单位量程这些"传什么"的标准化仍然要人来做,很多工厂上了昂贵平台效果一般,问题恰恰出在没有先治点表。
八、点表映射与报文抓包:把"连不上"变成十分钟定位
规范的PLC通信项目,交付物里一定有一张点表,每一行包含:点名、含义、PLC区与绝对地址、数据类型、缩放比例、单位、读写属性、采集周期、安全等级。点表是电气工程师和软件工程师的合同,地址变更必须双方签字更新。软件侧建议做地址映射层:界面和业务逻辑只认点名(如Tank1_Temp),底层驱动按点表翻译成协议地址,换PLC型号时只改映射不动业务代码,这是多品牌混线项目能维护下去的关键设计。
现场排故按四层从上往下查最快。物理层:网线灯亮不亮、485的A/B有没有接反、终端电阻、Ping得通吗;传输层:端口对不对(502/102/9600/自定义)、防火墙放没放行、服务器连接数有没有满;协议层:用Wireshark抓包是终极手段,Modbus TCP过滤tcp.port==502,能看到请求报文和从站异常码(02非法地址、03非法数据值最常见),S7、FINS、SLMP同样可以抓到握手和读写报文,对比协议手册逐字节看,地址区码错、数据长度错、功能码错一目了然;应用层:读到了值但解析不对,基本就是数据类型、缩放和字节序问题,填已知值交叉验证即可。通信稳定性设计上,断线自动重连、请求超时分级、心跳监视、写操作二次确认这些手段要在框架里做齐。PLC通信没有玄学,报文抓出来,问题就解决了一半。如果你的设备混线连不上、点表混乱或需要从零搭一套稳定的上位机通信框架,欢迎联系:免费咨询,或致电 13761638786。


