
做过产线改造的朋友应该都有这种体会一条完整的设备线因为工艺要求被分成好几段每段用一台PLC单独控制但段与段之间又必须实时交换状态——前段料到位了要告诉后段后段忙完了要放行前段。这时候如果只靠开关量接线线缆一大堆不说以后想加个联锁信号还得重新布线改起来非常痛苦。其实欧姆龙PLC早就提供了一个专门干这事的方案串行链接Serial Link模式。它能让多台PLC通过串口自动共享一块数据区不需要写任何通信程序设置好之后各站直接读写公共地址就能互相通信。这篇文章我就把串行链接模式从原理、硬件接线、软件配置到程序样例完整走一遍最后再分享几个实际项目里踩过的坑。不管你是刚接触多PLC联动的新手还是已经在用串行通信但被各种问题卡住的老手照着这篇文章里的思路做基本都能跑通。1. 串行链接模式到底是个什么机制1.1 一句话讲透PLC之间的自动数据共享区串行链接说白了就是让多台欧姆龙PLC通过串行通信口连成一串然后由系统自动完成数据交换。你可以把它理解成车间里的一条共享传送带每台PLC把自己要给别人看的东西放在自己对应的格子里其他PLC不用打招呼就能直接拿。这个“格子”在欧姆龙PLC里叫链接继电器区LR区它是专门为多台PLC数据共享设计的一块存储区域。在正常工作状态下主站会按照固定的时序轮询各从站把每个站写入LR区的数据统一汇总并广播回去。整个过程由PLC的系统程序在后台自动处理不占用用户程序的扫描逻辑也不需要你用RS指令去拼帧、算校验、做超时处理。你只需要在硬件设置里把通信模式选成串行PLC链接给每台PLC分配一个节点号确定好链接字数剩下的数据同步工作系统就替你完成了。这个机制最大的特点是“透明”。程序里访问LR区就跟访问W区、D区一样简单LD、OUT、MOV这些指令都能直接用。主站往LR0写一个数从站在同一扫描周期或者下一个扫描周期就能读到完全不需要关心底层通信协议。这也是很多老工程师愿意用它的原因——调试速度快程序易读后期维护的人不用去翻一堆通信报文。1.2 为什么选它核心优势与适用边界串行链接在欧姆龙自家PLC之间通信的方案里属于性价比非常高的选择。先说优点。第一是省成本。它只用串行口和普通通信电缆RS-232C两根线就能跑起来RS-422A也就是四根线加终端电阻不需要买专门的通信模块或网络单元。第二是免编程。不用像无协议通信那样用TXD/RXD指令去拼报文也不用做CRC校验这些系统都封装好了。第三是实时性有保障。链接数据的刷新是周期性的跟PLC扫描周期绑定只要波特率和链接字数选得合理几个字的数据在十几毫秒内就能从一台PLC到另一台PLC这个速度对大多数设备联锁、状态传递场景完全够用。不过它也有明确的适用范围别拿它硬扛大数据量。串行链接的数据区容量有限毕竟依赖串口带宽你要是想一次传几十个字甚至上百个字刷新周期会变得很长实时性就谈不上了。它最适合的场景是几台PLC之间传启停指令、完成信号、故障标志、计数值这类小数据量信息。如果项目里有触摸屏、上位机或者第三方设备需要通信串口被串行链接占掉了还得另想办法。这些边界条件在选型时要提前想清楚不然做到一半发现方案不合适返工成本挺高的。2. 硬件与拓扑动手前先把这些搞明白2.1 支持的PLC型号、通信口与连接关系串行链接在欧姆龙的CP1系列、CJ系列、CS系列上都有支持。常见的做法是直接用CPU本体的内置RS-232C口或者RS-422A/485口来组网。像CP1H这类小PLC自带一个RS-232C口两台PLC之间可以直接点对点连接要是超过两台就需要通过RS-232C转RS-422A的适配器比如欧姆龙的CP1W-CIF11把通信口转换一下再接成1:N的拓扑。CJ2M或CJ1系列的配置方式类似可以通过串行通信单元如CJ1W-SCU31-V1、SCU41-V1来扩展RS-422A/485口用这种专用单元组串行链接的话站点数和通信稳定性都会更好一些。CS1系列也可以配置路径基本一致。所有的站里必须有一个主站节点号固定为0负责发起链接时序。从站节点号从1开始排最多可以接8台从站也就是说整个串行链接网络最多由9台PLC组成。主站和从站的硬件并没有本质区别哪个PLC当主站完全取决于你在设置里填的节点号。我自己的习惯是把生产线中承担总协调逻辑的那台PLC设为主站比如总控启动、总急停、联锁判断都放在主站里这样从站逻辑可以做得简单一点只管自己的工序。2.2 典型接线RS-232C点对点与RS-422A多站先看最简单的两站情况。两台CP1H都用自带的RS-232C口连接买一根欧姆龙串口线或者自己按标准做一根交叉线就行。RS-232C的交叉接法是把一台的发送端接到另一台的接收端地线直连具体针脚定义以CPU硬件手册为准。自己压线的时候务必反复核对针脚号我见过不少项目最后通信不通排查了半天发现就是2脚和3脚焊反了。超过两台之后就要转RS-422A。连接方式是手拉手的菊花链主站适配器的发送端接到第一台从站适配器的接收端主站适配器的接收端接到第一台从站适配器的发送端然后第一台从站再往后接第二台依此类推。线路末端要并一个终端电阻阻值一般是120Ω用来消除信号反射。从站适配器上的终端电阻开关除了链路最末端那台要打到ON其他站都要保持在OFF。这个细节特别容易漏漏了之后的表现就是通信时好时坏或者离主站越远的站越不稳定。还有一点通信电缆一定用屏蔽双绞线屏蔽层在主机架侧单端接地。走线尽量避开变频器输出线、伺服动力线这些强干扰源至少保持20厘米以上的距离条件实在不允许的话交叉走线时也要保持垂直交叉别平行捆扎。通信距离方面RS-232C一般别超过15米RS-422A在9600波特率下可以达到500米左右够大多数产线用了。2.3 选型对比串行链接 vs 其他常见通信方式经常有人问串行链接和无协议通信、Host Link、Controller Link、以太网之间到底怎么选。我直接给一个对比表项目上可以对着选。通信方式适用场景数据量是否需编程最大站点数成本串行PLC链接欧姆龙PLC之间小数据量联动小几十字以内否设置即可9台低无协议通信与自定义协议设备通信小到中是TXD/RXD拼帧由硬件决定低Modbus-RTU变频器、仪表、触摸屏等第三方设备中是但库函数多由硬件决定低Host Link上位机组态软件、触摸屏读取PLC中否协议固定一主多从低Controller Link大数据量、多站点、高速数据共享大否62节点高EtherNet/IP全厂信息化、跨平台集成大部分需要几乎无限中高选型时我一般遵循几个原则如果只是几台欧姆龙PLC之间做联锁和小数据交换优先串行链接因为它最省事如果通信对象里混着变频器、仪表这种非欧姆龙设备那就老老实实用Modbus-RTU如果数据量大或者以后要接MES系统直接考虑EtherNet/IP。Controller Link现在新项目选得少了除非是老旧产线改造、备件和原有拓扑都要求沿用否则不太建议新上。记住方案不是越高级越好能用一个星期调完上线的方案才是好方案。3. 软件配置实操从新建工程到参数生效3.1 第一步确定主站与从站节点号软件配置用CX-Programmer新版的Sysmac Studio也可以只是菜单名称略有差异逻辑是一样的。我以CP1H配CX-Programmer为例说一下完整的设置流程。打开软件新建工程选好实际的PLC型号先在左侧工程树里找到“设置”图标双击打开PLC设置对话框。接下来要配置的是通信模式、节点号和串口参数。节点号分配这件事需要在动手前就定好主站固定是0从站依次是1、2、3……不能重复也不能跳过之后出现两个相同的号。我建议在项目文档里专门画一张节点分配表标明哪台PLC放在哪个柜子、IP地址或者节点号是多少、LR区占用哪一段避免设备多了以后自己都分不清主站从站。节点号分配还有一个原则尽量把频繁交互数据的站排得靠近一些。串行链接的数据刷新是按节点顺序轮询的节点号靠前的站数据先刷新靠后的站会稍微滞后一点点。虽然这个时间差很小但在要求严格同步的设备上还是能感觉出来的。我自己做三站以上的项目都会把交互最频繁的两个从站排在主站后面让它们的数据更新尽量快。3.2 第二步设置通信模式、波特率与链接字数在PLC设置对话框里找到内置RS-232C对应的选项卡把通信模式改成“串行PLC链接”Serial PLC Link然后设置节点号。主站填0从站填各自的编号。接着设置波特率、数据位、停止位、校验方式这一组参数所有站必须完全一致否则根本握不上手。常用波特率是9600、57600、115200距离短、干扰小的话可以选115200刷新会快不少现场环境恶劣或者距离远保守起见用9600更稳。链接字数是接下来最关键的参数。它决定每个站占用LR区的多少个字以及整个链接的数据刷新周期。链接字数不是越多越好够用就行——你需要在LR区里传10个点状态和1个计数值的话分配2个字就绰绰有余了没必要选8个字白白增加刷新负担。我的经验是先从最小档开始把业务逻辑需要的变量列一个清单按16位一组的规则往上凑最后留一点余量即可。设置好之后所有站的软件侧配置流程都一样区别只在节点号不同。主站和从站的链接字数要一致这个也是容易踩坑的地方主站分配2个字、从站分配4个字系统运行状态会不正常。这里提醒一下串行PLC链接的参数通常在PLC重新上电后才会生效不是传完参数立即在线就有效果。3.3 第三步写入PLC并重新上电验证配置完成后在CX-Programmer里把设置传送到PLC。传送完成之后一定要对PLC执行断电再上电让新的通信参数真正加载。很多第一次用的人在这一步栽跟头参数填得都对就是忘了重新上电结果通信就是没反应。上电之后怎么验证通没通最直接的办法是在CX-Programmer里建立在线连接用内存监视功能查看本机LR区的内容。如果是主站可以手动往自己的某个LR字里写一个测试值然后在从站的监控窗口里看同样的地址如果能看到相同的值说明链路已经通了。这个测试一定要做而且我建议在正式写业务逻辑之前做别急着把联锁程序都写完再验证通信到时候出了问题很难分清是通信的锅还是程序的锅。还有一个细节串行链接模式下串口被占用不能同时用来连触摸屏或上位机。调试时如果非要在线监控CP1H可以用USB口连电脑把RS-232C口留给PLC之间的链接如果USB口也被占了那就得临时改通信模式调试完再改回来操作比较麻烦所以串口资源规划在选型阶段就要想清楚。4. 程序编写与数据映射实战4.1 LR区地址分配规则三台PLC配置示例配置完成之后真正考验程序设计的环节就是LR地址的分配。LR区是所有站共享的主站写的数据从站能读从站写的数据主站和其他从站也能读所以每台PLC到底占哪一段地址必须在项目开始前定好运行之后不要随意改动。举个例子。假设一条自动装配线有三台PLC1号PLC负责上料段2号PLC负责装配段3号PLC负责收料段。三台PLC做串行链接每站分配2个字的链接字那么地址分配就是这样主站节点0占用LR0到LR12号站节点1占用LR2到LR33号站节点2占用LR4到LR5。每个站只能写自己那一段的LR地址但可以读取全部六七个地址。这个约束必须严格遵守你要是往别的站占用区里写数据会导致数据冲突对方的数据会被覆盖查错能查到你怀疑人生。LR地址既要按站分区也要按功能定义位。我习惯把每台PLC的2个字这样规划第一个字的低8位定义为状态位比如0.00是有料信号、0.01是完成信号、0.02是故障信号第二个字用来传数值比如当前产量、节拍时间、计数值或者配方号。这个规则在项目文档里写清楚然后程序里加注释基本上后期维护的人看一遍就能上手改。4.2 梯形图示例状态传递与指令下发程序编写这块我先展示一个最简单的位信号传递。1号站检测到料到位置位LR0.00通知2号站可以开始装配。1号站程序里写LD 0.00 // 上料到位传感器 OUT LR0.00 // 通过串行链接发送给2号站2号站那边读到LR0.00为ON同时本机处于空闲状态就启动装配电机LD LR0.00 // 读取主站发来的“有料”信号 AND W0.00 // 本机空闲标志 OUT 100.00 // 启动装配电机装配完成后2号站把LR2.00置ON告诉主站和3号站“装配完成”LD 0.02 // 装配完成传感器 OUT LR2.00 // 发送“装配完成”信号主站看到LR2.00为ON就把上料段往前送料开始下一次循环LD LR2.00 // 读取2号站“装配完成” OUT 100.10 // 上料段启动放行字数据的传递也非常简单。比如1号站想把当前计数D100传到链接区供其他站显示或处理MOV D100 LR1 // 把本机计数值写到主站第2个链接字2号站读取这个数值MOV LR1 D200 // 把主站传来的计数存到本机D200有没有发现不管是位还是字操作起来和本机数据区完全一样这就是串行链接最大的便利。不过要记住数据写到LR区不是瞬时完成对外广播的它要等下一个刷新周期才被其他站读到所以程序逻辑里不要假设“这一刻写进去另一台PLC这一刻就一定能读到”关键联锁最好加一个延时确认或者连续几个扫描周期确认机制。4.3 刷新周期与性能评估串行链接的刷新周期直接影响联锁响应速度。这个周期不是固定的它跟波特率、链接字数、站点数量都有关系。波特率越高单位时间能传的数据越多刷新就越快链接字数越少每轮要传的数据越少刷新也越快。大致估算的话9600波特率、每站2个字、三五个站的配置刷新周期在几十毫秒量级把波特率提到115200可以做到几毫秒到十几毫秒。怎么实测刷新周期我用的方法是写一个简单的回路测试程序主站把LR0.00置ON然后启动一个定时器开始计时从站检测到LR0.00变化后把自己的某个LR位也置ON主站检测到这个回传位后停止定时器。这时候定时器的值就是一次往返通信的时间除以2就接近单向刷新周期。这个实测值比任何理论计算都准而且很直观地反映了当前配置下通信的实时性。如果实测刷新周期比预期大很多优先检查链接字数是不是分配太多了然后是波特率是不是设低了最后看站点是不是排得太多。这三个因素导致的通信变慢逻辑是显而易见的。另外要注意从站程序里如果有一些很耗时的指令块比如大量浮点运算、通信指令会拖长本机扫描周期进而影响整个链接的刷新节奏。所以从站程序尽量写得精炼别搞一堆没必要的复杂运算。5. 常见问题排查与经验避坑5.1 通信连不上的高频原因我整理了一个串行链接通信失败的高频原因排查表按出现频率从高到低排现场排查时照着这个顺序往下查效率最高。排查点说明解决方式参数一致性波特率、数据位、停止位、校验方式不一致所有站统一参数节点号冲突有重复节点号或主站不是0重新分配节点号接线错误RS-232C交叉接反RS-422A收发接反按手册核对针脚终端电阻多站链路末端没接终端电阻或接了多个只在末端并120Ω电阻未重新上电参数传送后没断电重启重新上电生效距离过远RS-232C超过15米换RS-422A方式干扰严重通信线与动力线走同一线槽重新布线或加磁环通信完全连不上大概率是前四项里的某一种。如果通信时好时坏、离主站远的站丢数据严重优先怀疑终端电阻和干扰问题。我遇到过一个项目现场反映3号站经常掉线后来排查发现是RS-422A的链路末端那台从站没把终端电阻开关拨上去信号反射造成的偶发通信故障拨上之后一个月都没再犯过。5.2 数据不更新和掉站的坑串行链接最让人头疼的现象是接口正常、参数也正常但某台PLC的数据就是不更新一直停在开机时的初值。碰到这种情况先别怀疑参数大概率是那台PLC掉电或者程序里没往LR区写过数据。LR区数据在站掉线后会保持最后一次的值不会自动清零如果业务逻辑里没做在线判断别的站就会把这个陈旧数据当成有效数据用那是相当危险的。应对办法是在协议层之外做一层“心跳机制”。每个站用定时器每100毫秒把自己的某个计数器加1写到LR区专门占用一个链接字里。其他站在程序里检查这个字的变化情况比如在500毫秒内这个值没变过就判定对方掉线然后把相关的联锁信号清零设备停下来或者报警。心跳机制虽然简单但在多PLC联动项目里是保命的逻辑尤其是涉及安全联锁的时候一定要加。还有一个容易忽略的坑从站程序如果没有把LR区的某个位OUT出来只是单纯地LD这个位去驱动别的内部位那从站掉线后这个驱动状态可能一直保持。程序上要养成习惯涉及外部链接的数据最终都要经过在线判断标志做置位和复位别让它旷野状态下自由输出。5.3 我的几点实操心得做串行链接项目这几年我自己总结了几条比较实用的心得不一定写在手册里但实战中特别好使。链接字数宁少勿多。很多人在配置时习惯把链接字数选大想着反正有空间以后能用上。实际上链接字数越大刷新周期越长实时性越差。我自己一般是先按最小需求选后面确认需要扩再改改一次也不麻烦但要记着所有站同步改。LR地址分配表一定要做成文档。这个表不光给自己看还要在程序里用注释写清楚。串行链接项目调试时最浪费时间的就是地址对不上主站往LR3写的是速度从站在LR3读的却是温度这种理解偏差在多人协作项目里尤其常见一张清晰的分区表能省大量扯皮的功夫。调试顺序从两站开始。别一上来就9台全接先把主站和最近的一台从站点对点调通然后再逐一接入其他从站。这样每增加一个站点验证的东西都有明确的边界出了新问题一定是新增站点相关的不会把矛盾激化到整个链路去排除。这个原则听起来很简单但能坚持的人不多大部分人都是图省事直接全接上结果出问题后排查范围爆炸。最后说一个我习惯用的小技巧正式联调前我会先在每台PLC里放一段很简单的自检程序——每个站把自己的扫描计数写到固定的链接字然后在主站里监控这些字的变化速率。只要这段能跑起来说明物理链路、参数设置和LR分配全都没问题再往上叠加业务逻辑就只是时间问题了。串行链接模式虽然看起来不如以太网高级但胜在简单、可靠、成本低对小规模多机联动项目来说它至今仍然是我第一个会考虑的方案。