
1. 为什么需要多PLC串行链接1.1 现场场景设备分散、数据要集中两三年前我在现场调试一条小型包装联动线三个工位各挂了一台欧姆龙PLC分别控制送料、封口、贴标。单看每一台都正常工作可一旦要求三台按顺序联动问题就来了后面的封口机必须知道送料机什么时候给出“料到位”信号贴标机出故障时前面的送料机不能继续往里面送料而车间中控触摸屏还得同时看到三台设备的状态和产量。这种“设备分散、数据要集中”的需求在中小型产线上太常见了。多数人第一反应是上以太网可现场就三台PLC为了传几十个字去配交换机、配IP、写通信程序成本有点不值。我当时的选择是欧姆龙多PLC串行链接模式用PLC自带的串行口把三台机器连起来整个系统没有增加一块通信模块数据共享的问题就解决了。串行链接是欧姆龙PLC提供的一种串行通信方式它最吸引人的地方在于只要在PLC设置里配好参数系统会自动在主站和从站之间交换数据梯形图里不需要写任何通信指令。这篇文章就围绕这个功能把原理、硬件接线、软件配置、实际案例和常见的坑一次讲清楚给正在做多PLC联动项目的朋友一个可以直接参考的落地方案。1.2 和其他通信方式怎么取舍先说明一点串行链接不是万能的它只是多PLC互联的一种选择。我平常接到这种需求一般先问三个问题现场有几台PLC距离多远要交换多少数据答案不同方案完全不一样。如果站点就两到四台距离在几十米以内交换的只是状态、产量、故障这类几十个字的数据那串行链接基本是性价比最高的选择。它不需要额外通信模块不需要编制通信协议配置时间和调试成本都很低。如果站点很多比如超过七八台或者距离超过五百米那就要认真考虑RS-422A/485组网甚至工业以太网。如果数据量很大比如要对伺服做实时位置同步那更不能用串行链接它的刷新周期在那摆着硬上只会让现场出问题。通信方式硬件成本编程工作量适用场景串行链接低用自带串口低设置即用中小型产线多台PLC联动、数据共享上位机链接Host Link低中等需写协议PLC与HMI/PC集中监控协议宏中高需自定义帧与非欧姆龙设备通信Controller Link高需专用单元低中大型网络节点多、容量大EtherNet/IP中高中高速、大数据、信息化产线我的经验是项目规划阶段就把通信方式定下来比现场改方案省事太多。串行链接适合的场合硬上工业以太网是浪费而站点和距离注定超标的场合非要省成本用串行链接后期维护会很难受。做技术选型眼睛要盯住项目未来三五年的扩展需求。2. 串行链接的核心原理与运行机制2.1 主从架构与链接单元号串行链接采用典型的主从轮询结构。主站负责发起通信它按照从站的单元号顺序一个一个问从站收到询问后把数据传回来主站再把汇总后的数据发出去。我在现场经常用一个生活化的比喻解释这套机制主站就像班主任点名手里拿着名单从一号开始喊喊到谁谁就站起来报数全班都点完一圈这一轮通信才算结束。既然是点名就要求每台PLC有一个唯一的“学号”在串行链接里叫链接单元号通常主站固定为0号从站从1号开始分配。这个编号不能重复也不能随手乱编。有些系列对编号连续性还有要求比如从站编号必须从1开始连续递增你非要跳着写主站点名时会一直等一个不存在的站整个轮询周期被拖慢看起来就是“通信很卡、数据半天才刷新一次”。单元号的设置位置随系列不同有差异但逻辑都一样。我的习惯是先画一张节点拓扑图把每台PLC的角色、单元号、型号、端口写在图上再动手到软件里配置。多点几次鼠标不累真正累的是现场好几台PLC已经装好结果发现单元号冲突一台一台重新插线改设置。2.2 数据映射区看到的就是PLC存储区串行链接最省心的地方是数据映射机制。主站和每个从站各自划出一块数据区作为发送区链接启动后每个站点发送区里的内容会自动复制到其他站点的接收区接收区的地址按照单元号排列好。也就是说一旦配置完成任意一个站点写自己的发送区其他站点就能在对应地址上实时读到这个值。我遇到过不少初学者问那我在程序里到底怎么用这些数据答案就是直接当普通存储区用。比如约定主站把“启动允许”写到D100的第0位从站1的程序里只需要用一条常开指令读取D100.0判断它是否为ON就行。这跟你读自己PLC里的数据没有区别唯一的区别是这个数据是别的PLC写进来的。数据交换区的大小和起始地址需要提前约定好。常见的做法是每个站点划一块区域比如主站用D100~D119从站1用D200~D219从站2用D300~D319这样互不干扰。配置之前要把这个地址分配表写清楚尤其是几台PLC的程序不是同一个人写的时候没有约定就很容易出现两台PLC操作同一个地址、互相覆盖数据的情况。2.3 刷新机制与实时性权衡串行链接的数据交换是周期性的不是越实时越好也不是所有信号都适合走这条路径。主站按单元号逐台轮询一轮下来需要的时间跟从站数量、交换数据字数、通信波特率都有关系。站点少、数据少、波特率高刷新就快反之刷新就慢。如果某台从站突然掉线或者通信异常主站还会重试整个刷新周期会被明显拉长。我在一个项目里给三台PLC各分配了20个字的数据区波特率设成115200实际测试下来一轮整体刷新时间在几十毫秒的量级做状态监控和联动信号完全够用。但如果要做伺服轴的同步控制或者要求两台设备之间的响应时间在几毫秒以内那串行链接肯定不能满足这种场合得考虑EtherNet/IP或者脉冲、模拟量的硬接线。“实时性够不够”这个问题建议在设计阶段就明确。就拿我做过的包装线举例产量信号晚几百毫秒刷新完全无感但如果是安全急停信号走串行链接我绝对不敢这么做。现场安全类的信号永远用硬接线通信只做常规监控和联动数据。3. 硬件准备与接线实操3.1 选型端口、线缆与转换器动手配置以前得先把手上的硬件理清楚。欧姆龙PLC的串行端口大致有几类内置RS-232C口、外设口、以及通过选件板或通信单元扩展出来的RS-422A/485口。CP1H、CJ系列这类常见机型一般都有内置的RS-232C口点对点两台PLC直接就能用。如果超过两台就需要考虑用RS-422A/485方式组网这时往往要加选件板或者外置的转换器。线缆方面RS-232C推荐用屏蔽电缆距离短的话成品交叉线也能用但一定要先确认引脚定义。RS-422A/485则用屏蔽双绞线一组信号至少两芯线径不要太细。现场如果是变频器、伺服驱动器密集的环境线缆要走独立的线槽尽量远离动力电缆交叉的地方最好垂直走线不然干扰会让你排查到怀疑人生。选型时还有一个容易忽略的点有些PLC的同一串口既可以当编程口也可以当串行链接口。配置成串行链接以后这个口就不能同时用来连接电脑在线监控了。调试阶段想在线看程序要么用另一个口要么先把模式切回上位机链接调试完再切回来。这点一定提前想清楚不然到现场发现没法在线监视会有点被动。3.2 RS-232C点对点接线与RS-422A/485组网点对点两台PLC用RS-232C连接时一般是交叉接线A的TXD接B的RXDB的TXD接A的RXD信号地SG直接相连。有些PLC的RS-232C口还有RTS、CTS、DTR、DSR这些握手信号多数情况下需要按手册要求在本地短接否则PLC判断不了对方状态通信会不稳定。强烈建议做线之前先把手册里的引脚图翻出来对着图画一遍线序不要凭记忆做。三台以上组网时RS-232C就无能为力了需要上RS-422A/485。四线制下每个节点有TDA/TDB发送和RDA/RDB接收两组线接线时把主站的发送对从站的接收主站的接收对从站的发送。两线制则只有A、B两根线收发共用。不管哪种方式A和B一旦接反链路就会异常表现为发送方正常但接收方收不到数据或者偶尔收到乱码。组网拓扑上欧姆龙官方多数推荐菊花链也就是从主站到最近从站再从最近从站到下一个从站依次串下去。星型接线在RS-485里不是不能用但对线路质量和终端电阻的要求高得多现场条件不好的时候很容易出问题。我个人的做法是能菊花链就菊花链尽量不去创新接线拓扑。3.3 终端电阻、接地与干扰防护RS-422A/485组网必须重视终端电阻。规则很简单在链路物理两端的设备上各接一个终端电阻中间节点一律不接。电阻值通常取120Ω左右有的PLC通信板上已经内置了终端电阻开关拨码打开就行没有内置的就要在端子上并接电阻。接地方面我见过很多通信不稳定的现场最后查出来是地线问题。屏蔽层应该单端接地也就是在主站一侧接地不要两头都接否则会形成地环路反而把干扰引进来。PLC的电源地、信号地也要规范处理特别是和变频器共用电源的场合地线上的压差足以把RS-485信号打成乱码。还有一个经常被忽视的坑RS-485的A/B端子不同厂家的命名可能相反有的叫A/B有的叫D/D-还有的叫T/-和R/-。接线时不能光看端子名字要结合手册里的信号定义。我在现场吃过这个亏两台设备按名字接的线结果怎么调都不通最后用万用表量出来两个端子的电平定义是反的。所以硬件接完先别急着上电配置用万用表确认一下线序和电平能省一个下午。4. CX-Programmer中的串行链接配置4.1 进入PLC设置并选择串行链接模式软件配置以CX-Programmer操作CP1H为例老一点的CJ系列和CP系列流程基本一致。打开工程找到“PLC设置”在串行端口的选项卡里把端口模式从默认的“上位机链接”改成“串行PLC链接”。如果你用的是NJ/NX系列对应编程软件是Sysmac Studio界面虽然完全不同但串行链接的设置思路是相通的理解这一套以后上手也不难。修改端口模式有一个前提条件容易被忽略修改PLC设置时PLC必须处于编程模式而且修改完以后必须把设置传输到PLC再断电重启设置才会真正生效。我见过不止一个同行配置完保存了工程以为就下载到PLC了结果现场通信完全没反应。原因就是设置不是跟程序一起传下去的需要在CX-Programmer里手动执行设置传输的操作。建议养成一个好习惯修改PLC设置后最终把“程序设置符号”一整套都传一遍避免遗漏。新模式配置完PLC的串口引导程序在启动时会根据设置自动进入串行链接模式。这时可以观察PLC的通信指示灯正常链接的情况下灯会规律闪烁。如果指示灯完全不亮或者常亮不闪大概率是设置没有生效或者通信参数不一致这时候先别查接线把设置状态确认一遍再说。4.2 主站与从站的参数项逐项说明串行链接的参数项不算多但每一项都关键。我按实际配置顺序整理了一张表参数主站设置从站设置说明端口模式串行PLC链接串行PLC链接所有站必须一致链接单元号01、2、3…全网唯一主站固定0参与链接单元数量按实际从站数按实际从站数有的系列叫最大单元号波特率9600/19200/38400/115200与主站一致全部站点一致数据格式数据位、校验、停止位与主站一致全部站点一致交换区起始地址按约定按约定不能重叠冲突交换区字数按数据量设定按数据量设定每站独立指定参数里最容易出问题的一是单元号没有唯一性二是波特率和数据格式各站不一致。我习惯在配置前先在纸上画一张通信参数表把每台PLC的角色、单元号、波特率、数据格式、交换区地址写清楚然后照着这张表逐台填写。这样看起来多花了几分钟实际上避免了大量返工。交换区地址的选择也有讲究。有的系列只能用特定的数据区比如某些老机型用LR区新机型可以指定CIO、W、D区。选区的时候要注意避开程序里已经在用的地址尤其是存放配方、计数器当前值、报警记录这些重要数据的区域免得通信数据把业务数据覆盖掉。4.3 配置数据交换区并下载到PLC配置完成以后下载这步要把细节落实。我的标准流程是先把PLC切到编程模式在CX-Programmer里保存工程然后执行传送操作把PLC设置和程序一并下载提示完成后断电重启PLC。重启之后从站的通信指示灯应该开始有规律地闪烁表示进入了串行链接工作状态。上电顺序上多台PLC组网我一般建议先给从站上电等从站全部起来以后再给主站上电。这样主站启动后第一次轮询就能找到所有从站数据同步会更快。如果顺序反过来主站先启动它轮询时发现部分从站还没起来会把它们标记为掉线虽然多数情况下后续会自动恢复但现场的报警或数据异常可能会吓到操作员。数据交换区配好以后我还会做一步验证动作在主站里写一个小程序用一个定时器每秒钟把交换区里的某个字加1然后在从站里监控对应的映射地址看数值是否跟着变。这个验证虽然简单但能快速确认整个链路、数据区、映射关系都是对的比一次性接完所有业务逻辑再找问题高效得多。5. 梯形图里的使用数据共享与控制逻辑5.1 主站读写从站数据的梯形图实现串行链接配好之后梯形图里的使用比我预想的还要简单说白了就是直接读写数据区。以三台PLC的包装线为例我们约定每台PLC各用一块数据区做交换区主站用D100~D119从站1用D200~D219从站2用D300~D319。从站1的程序里如果想让主站知道自己的运行状态就可以写类似这样的指令LD 1.00 // 从站1自身运行中信号 OUT D200.0 // 写入链接区第0位主站这边只需要监控D200.0就能知道从站1是否在运行。反过来主站发给从站1的“启动允许”信号可以写LD 0.00 // 中控启动命令 OUT D100.0 // 写入主站交换区从站1的程序里用D100.0做联锁条件判断为ON才允许启动本机电机。整个过程看起来就是两台PLC在读写同一块内存实际上数据是通过串行链接自动同步的。对电气工程师来说不用理解底层帧结构也不用写串口接收解析程序这个体验是非常友好的。5.2 状态标志、故障监控与安全保护用串行链接做数据交换通信本身也会有异常状况梯形图里必须考虑通信中断的情况。欧姆龙在系统存储区安排了不少通信状态标志用来表示串行链接是否正常、从站是否在线。这些标志在不同系列里位置不一样但用法是相通的以这些标志的ON/OFF作为判断条件可以在通信断开的瞬间让程序做出响应。我实际项目里是这样做的中控触摸屏上要显示三台PLC的通信状态如果某台从站掉线主站就把对应的状态字位置1触摸屏立刻弹出报警窗口。同时在从站的梯形图里也把“通信正常”作为允许输出工作的条件之一当通信异常时强制停止对执行机构的输出避免设备在没有上位指令的情况下继续运行。这里有个很多人忽略的细节通信断开再恢复以后主站里保留的还是断开前最后收到的旧数据。如果你不做处理程序就会用这些旧数据继续运算造成误动作。我的办法是在检测到通信错误时把对应的数据区清零当通信恢复后从站重新写入实时数据这样逻辑上就安全得多。总之串行链接的梯形图编程确实简单但安全保护不能省。6. 常见问题与排查经验6.1 通信建立不起来的几个原因串行链接最常见的坑就是“配好了就是不通信”排查思路要按顺序来否则会浪费很多时间。首先要确认设置真的传到PLC并生效了。我前面说过很多人改了PLC设置就以为万事大吉实际上设置没传到PLC或者传了但没断电重启都会导致端口还停留在默认模式。这一步确认不了后面的线缆、参数排查都白搭。其次是参数一致性。波特率、数据位、校验位、停止位随便哪一台跟主站不一致通信就起不来。记住多台PLC之间的所有通信参数必须完全一致包括主站自己。我曾遇到过一台从站被上一个项目改了波特率这次直接接进新项目结果整个链路就卡在这一台上。接着检查单元号。重复的单元号会让主站判定从站身份冲突链接建立不起来编号跳过太多也会影响轮询效率。检查时不用一台一台开盖看在CX-Programmer里把每台PLC的链接单元号读出来对比就行。最后才是线缆问题。RXD/TXD有没有接反RS-422A/485的A/B有没有接反屏蔽层有没有接好终端电阻位置对不对。这些硬件问题用万用表可以量出来但如果前面软件设置没查完就动线缆往往会把问题搞复杂。6.2 数据对不上、刷新慢、偶尔乱码的处理数据“对不上”这个词在不同项目里含义不一样。如果是值没有更新多半是交换区地址在源端和目的端对应错了比如主站写在D100从站却从D110开始读那自然读不到。如果是值被意外修改大概率是交换区重叠了两台PLC分别操作了同一片区域互相覆盖数据。我遇到这种情况会把每台PLC的交换区起始地址和字数全部列出来画成一张内存地图重叠冲突一眼就能看出来。数据刷新慢的问题先算一笔账如果从站多、数据字数大、波特率低一轮轮询自然慢。我测试时一般会先把波特率提到115200其他参数不动观察刷新速度是否有明显改善。如果改善明显说明当前瓶颈就在波特率如果改善不明显就要考虑是不是有从站掉线导致主站在反复重试这时候优先处理掉线的站点。偶尔出现的乱码多半是干扰问题。重点检查屏蔽层是否单端接地、通信线是否远离动力线、终端电阻是否正确。这里补一句如果现场变频器多给通信端口加磁环、改用质量更好的双绞屏蔽线通常能解决大部分干扰问题。若乱码集中在电机启动、变频器加减速的瞬间几乎可以断定是电磁干扰不是通信参数问题。6.3 使用中发现的坑与避坑建议串行链接用了几年我总结出几条比较实在的经验。第一条是不要用串行链接走安全信号和急停信号这类信号必须硬接线。通信链路再稳定也有断线、延迟、数据错误和恢复后的旧数据问题安全场合绝对不能指望它。第二条是调试节奏贪快是大忌。多台组网时先只接主站和一台从站确认这一台通了再接第二台、第三台。一次把所有从站全接上万一通信失败故障范围太大排查起来很吃力。先把一台调到能通信后面再往上加是最稳的办法。第三条是项目文档里把串行链接的参数表保留好。单元号是谁、交换区用了哪些地址、波特率多少、数据格式是什么全都落成文字。这个项目过一年半年要改造时翻文档比重新摸黑测试快得多。没有这张表后面接手的同事只能在现场一边看程序一边猜踩坑成本很高。还有一条一般性的程序架构建议。在梯形图里集中做一个“通信管理”段所有交换区数据的读写、错误标志的处理、数据清零逻辑都放到这一段里不要散落在各个程序段。这样做的好处是沟通时只需要看这一段就能知道整个串行链接的数据流和异常处理逻辑维护起来非常直观。说实话欧姆龙多PLC串行链接这个功能技术门槛不高但它解决了实际产线里非常普遍的一个问题设备分散、数据要集中、成本还不想太高。只要把架构、参数、数据区分配这些基础工作做扎实现场一次通过率真的很高。我的体会是这类看似简单的功能最考验人的反而不是技术而是你有没有把约定写清楚、把检查做在前面。下次再碰到两三台PLC联动的需求不妨先把串行链接这个方案放进选项里多数时候它比花哨的工业以太网更务实、更省心。