ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

欧姆龙PLC与MCGS组态的5层电梯控制系统完整方案

欧姆龙PLC与MCGS组态的5层电梯控制系统完整方案 做这套5层电梯控制系统其实起因很朴素学校实训室需要一套能稳定演示电梯运行逻辑的微型装置而我又想完整跑一遍 Omron 欧姆龙 PLC 和 MCGS 组态从选型、接线到联调刷机的全流程。项目做完后回头看真正有门槛的并不是梯形图本身而是控制策略的梳理和 PLC 与触摸屏之间的数据映射。这篇文章就把我从需求拆解、硬件选型、程序框架、组态画面到调试排错的过程全部摊开来讲给准备做 PLC 毕设、课程设计或第一次接触 PLC 触摸屏组态的同行一个可以直接参考的完整案例。1. 项目需求拆解与方案选型1.1 5层电梯控制到底要解决哪些问题电梯控制系统听起来简单无非是“按一下呼叫然后电梯过去开门、关门、继续跑”但真把它拆成 PLC 能识别的逻辑就会发现它至少包含五个子问题。第一是位置检测。电梯怎么知道自己现在在哪一层常见方案是在每层平层位置装一个接近开关或者光电传感器轿厢上的挡片触发哪一层的开关PLC 就知道当前楼层。第二是呼叫登记。轿厢内选层按钮、各楼层厅外上/下呼梯按钮按下之后必须“记住”这个需求不是按完就丢这就是呼叫寄存。第三是方向决策。同一时间可能有多个楼层在呼梯电梯是往上走还是往下走目标楼层选哪个需要一套明确的规则。第四是平层停车与开关门。到目标楼层后要减速、停稳、开门、延时关门还要保证门没关好时绝对不能启动。第五是状态指示。当前楼层、运行方向、开门状态这些信息要能显示出来方便操作员和维护人员观察。这套 5 层电梯系统我的设计目标是把它做成一个“行为接近真实电梯”的教学模型单部电梯5 层站内外呼齐全有运行方向逻辑有平层停车有开关门互锁还能通过触摸屏实时监视和下发指令。至于群控、消防联动、困人救援这些高级功能暂时不纳入。1.2 为什么用 Omron PLC MCGS 组态而不选其他方案很多人会问电梯控制用单片机不行吗用继电器行不行PLC 是不是贵了点我的观点是如果目标是“做一个能稳定运行的工业级控制模型”PLC 组态是目前性价比最高、最接近真实项目的组合。单片机方案最大的问题是可靠性。电梯这种涉及安全互锁的设备程序跑飞、I/O 抖动、抗干扰差都是不可接受的。PLC 的扫描机制、硬件看门狗和成熟的输入滤波天然适合这类逻辑密集的场合。继电器方案虽然在简单电梯中可以工作但 5 层电梯的呼叫寄存、方向判断、顺向截车逻辑继电器柜会复杂到令人崩溃改一个逻辑就要重新接线。PLC 的方案则把这些逻辑全部放进程序里调整策略不碰硬件项目后期维护友好。选择 Omron一方面是因为 Omron 的 CP1E 系列在小型 PLC 里性价比很突出自带高速计数、丰富的定时器/计数器指令系统清晰CX-Programmer 编程软件上手快另一方面Omron 的 Host Link 通信协议在 MCGS 组态软件里有现成驱动不需要自己写报文能省下大量调试时间。MCGS 嵌入版组态软件则负责“让数据可见”做一个触摸屏监控界面电梯位置、呼梯状态、运行方向一目了然人机交互比单纯的指示灯加按钮舒服太多。2. 硬件选型与电气接线要点2.1 PLC、触摸屏、传感器选型与基本参数这套系统我用的是 Omron CP1E-N40DR-A40 点 PLC24 点输入、16 点继电器输出。选继电器输出而非晶体管输出是因为电梯模型里有接触器、继电器线圈继电器输出可以直接驱动中小负载不用额外加中间继电器转接教学演示更直接。触摸屏选了 MCGS TPC1062Ti10.2 寸串口和以太网口都有后续想改成网络版也方便。位置传感器选 NPN 常开型电感式接近开关工作电压 DC24V检测距离 4mm 左右。每层装一个共 5 个安装在井道对应楼层平层位置。轿厢侧焊接一块金属挡片当挡片进入传感器检测范围时对应输入点导通。按钮和指示灯全部选 DC24V 自复位式内呼 5 个、外呼 8 个、开门/关门按钮各 1 个。电机驱动部分我用了两台小功率直流减速电机分别模拟曳引电机和开关门电机PLC 通过继电器控制电机正反转。曳引电机上加装了一个上限位开关和下限位开关作为硬件极限保护防止程序逻辑出错时冲顶或蹲底。下面是实际用到的 I/O 分配表这张表在项目一开始就必须定死后面写程序、做组态都围绕它展开PLC 地址功能类型0.001 层平层开关输入0.012 层平层开关输入0.023 层平层开关输入0.034 层平层开关输入0.045 层平层开关输入0.051 层上行外呼按钮输入0.062 层上行外呼按钮输入0.072 层下行外呼按钮输入0.083 层上行外呼按钮输入0.093 层下行外呼按钮输入0.104 层上行外呼按钮输入0.114 层下行外呼按钮输入0.125 层下行外呼按钮输入1.00轿厢内呼 1 层按钮输入1.01轿厢内呼 2 层按钮输入1.02轿厢内呼 3 层按钮输入1.03轿厢内呼 4 层按钮输入1.04轿厢内呼 5 层按钮输入1.05开门按钮输入1.06关门按钮输入1.07门开到位限位开关输入1.08门关到位限位开关输入1.09上下极限保护开关输入100.00上行接触器控制输出输出100.01下行接触器控制输出输出100.02开门继电器控制输出输出100.03关门继电器控制输出输出100.04运行状态指示灯输出100.05开门到位指示灯输出100.06关门到位指示灯输出100.07蜂鸣器/到站提示输出这组 I/O 点数刚好在 CP1E-N40 的范围内不需要扩展模块硬件成本可控。如果你选的是 Omron CP1H 或 NJ 系列地址会略有变化但逻辑思路完全一样。2.2 主回路与控制回路接线思路教学模型的接线不需要照搬真实电梯的主回路但控制逻辑和安全互锁一定要保留。我的做法是PLC 输出 100.00 控制上行接触器100.01 控制下行接触器两个接触器的常闭触点相互串联在对方线圈回路里形成硬件互锁。这个互锁极其重要即使程序里写错上下行接触器也绝不会同时吸合否则曳引电机可能直接短路烧毁。门电机控制同理开门和关门继电器输出 100.02、100.03两个方向互锁。门开到位和门关到位限位开关接入 PLC 输入程序里只有检测到“门关到位”后才能允许启动电梯电机。实际接线时NPN 传感器输入端要接 PLC 输入公共端 DC24V 的负极PLC 输出端线圈负载的一端接输出公共端另一端接负载后再回到开关电源负极接线前一定要确认 PLC 输入点是漏型还是源型别接反。2.3 接线实操中的防坑细节第一次接线最容易踩的坑有三个。第一传感器线序。NPN 接近开关一般是棕电源正、蓝电源负、黑信号输出三根线信号线接 PLC 输入点。如果接了 PNP 型传感器输出高电平和 PLC 漏型输入不匹配会一直不动作或者损坏输入点。第二按钮抖动。机械按钮按下和松开的瞬间触点会产生毫秒级的抖动PLC 扫描周期本身可以滤掉一部分但我在程序里仍然用了 10ms 左右的延时滤波防止呼叫信号误触发。第三公共端接线混乱。Omron CP1E 的输入公共端和输出公共端是分开的不要把 DC24V 电源的负极同时接到输入公共端和输出公共端后还不加核对。输出公共端根据继电器输出类型接相应电源接错轻则点不亮重则烧板子。3. PLC 控制程序设计与核心逻辑实现3.1 数据区规划与符号表设计写梯形图之前我先做了一张数据区分配表。这一步很多人会跳过直接开始写触点线圈做到后面逻辑越堆越乱。我的习惯是先把所有“记忆状态”规划好用符号表起好名字梯形图里只调用符号不直接写裸地址。内呼记忆放在 H0 区H0.00 到 H0.04 分别对应 1 至 5 层的内呼信号。外呼记忆放在 H1 区H1.00 到 H1.07 分别对应 1 层上行、2 层上行、2 层下行、3 层上行、3 层下行、4 层上行、4 层下行、5 层下行。选择 H 区而不是普通 W 区是因为 H 区在断电后依然保持程序跑飞或意外断电后呼梯信息不会丢失这也是真实电梯的基本要求。当前楼层、运行方向、目标楼层这些“实时计算数据”放在 D 区比如 D100 存放当前楼层D101 存放运行方向0 停止、1 上行、2 下行D102 存放当前目标楼层。D120 和 D121 用作 MCGS 组态的映射寄存器。D120 的低 5 位对应内呼状态D121 的低 8 位对应外呼状态PLC 每扫描周期把 H 区呼叫状态镜像到 D120/D121。这样触摸屏读取时只读 D 区字变量比直接读 H 区位变量稳定得多也避免了 Host Link 通信中对位地址格式的争议。3.2 电梯运行控制逻辑的梯形图思路整个程序的核心我拆成了四个功能块楼层检测与当前楼层更新、呼叫登记与保持、方向判断与目标楼层决策、平层停车与开关门控制。楼层检测比较简单。5 个平层开关分别接入输入点当某一层开关导通时用比较指令把 D100 更新成对应楼层号。为了防止轿厢停在两层之间时平层信号不稳定我加了一个 50ms 的输入滤波确认信号持续有效后才更新楼层。呼叫登记逻辑是经典的置位复位电路。每个内呼按钮或外呼按钮的上升沿把对应 H 区位置位当电梯到达该层并完成开门后再对该位复位。这里要注意外呼是分方向的。2 层既有上行外呼又有下行外呼两个按钮必须分开登记、分开清除不能图省事合并成一个“2 层有人呼叫”。如果合并了电梯上行时在 2 层停了实际上那个人想去 1 层就会白白浪费一次运行。方向判断是整个程序中最值得反复推敲的地方。我采用的是“顺向截车、最远反向”原则电梯当前静止时从当前楼层向上找最近的呼叫层找到则方向设为上行向上找不到再从当前楼层向下找最近的呼叫层找到则方向设为下行。电梯上行期间优先响应当前层以上的所有呼叫包括上行外呼和内呼。如果上行到某一层时当前层有同向呼叫或内呼就执行平层停车。上行过程中如果上方已经没有呼叫但下方还有呼叫则在完成当前层任务后换向开始下行。下行逻辑与上行完全对称。这个逻辑用梯形图实现时我没有逐个楼层写死比较而是用了一个循环扫描的思路。D110 到 D114 这 5 个寄存器分别对应 1 至 5 层“是否有任何有效呼叫”的标志位程序每 100ms 扫描一次结合当前楼层 D100 和方向 D101把“下一个要停的楼层”写进 D102。这样四层、五层、十层电梯程序结构都一样只是数据寄存器数量增加而已。下面给出方向判断的简化伪代码帮助理解梯形图的思路IF D101 0 THEN // 静止状态 FOR floor D1001 TO 5 IF D110floor 有呼叫 THEN D102 floor D101 1 EXIT END_IF END_FOR IF D101 0 THEN FOR floor D100-1 TO 1 IF D110floor 有呼叫 THEN D102 floor D101 2 EXIT END_IF END_FOR END_IF END_IF真实梯形图里我会用多个比较指令判断 D110 到 D114 的位状态也可以用传送指令把呼叫层数直接传给 D102。这个逻辑不追求最简但求可读性和可维护性。3.3 关键程序段讲解与参数计算平层停车判断是很容易犯错的地方。我的规则是电梯上行时只有目标楼层和当前楼层相等或者当前层存在同向呼叫上行外呼或内呼且当前层号大于等于目标楼层时才停车。听起来绕实际翻译成梯形图就是一组比较与位检测的串联。停车后的开门逻辑我也做了延时参数化。D130 存放开门延时时间单位 0.1 秒默认值 30也就是开门后 3 秒自动关门。D131 存放关门超时时间默认值 10关门动作持续 1 秒没到位就报警并停止关门防止门卡住后电机一直堵转。这两个参数我特意放到数据寄存器里而不是把定时器号写死在程序里这样调试时可以在线修改不重新下装程序。电机启动时还要考虑启动瞬间的电流和机械冲击。我在程序里加了 0.3 秒的启动保持时间确保门关到位、接触器吸合稳定后才正式进入方向运行判断。停车时则先断方向输出再延时 0.5 秒才输出开门信号模拟电梯完全停稳后再开门的动作。这些延时不是随便拍的需要根据电机的机械响应时间调整。我在调试时发现 0.3 秒启动保持太短接触器还没完全吸合电梯就开始判断位置会出现瞬间抖动后来调成 0.5 秒才稳定。安全互锁方面梯形图里必须做到上行输出和下行输出互锁梯形图中两个线圈串联对方的常闭触点。开门输出和运行输出互锁运行状态下开门输出强制断开。急停/极限保护开关输入为 ON 时不管程序状态如何切断所有电机输出只保留蜂鸣器报警。4. MCGS 组态画面搭建与通信配置4.1 组态工程搭建与设备通信配置MCGS 组态分为“设备窗口、实时数据库、用户窗口、运行策略”几个核心部分。设备窗口负责和 PLC 通信实时数据库存放变量用户窗口画界面运行策略处理脚本逻辑。我的建议是严格按照这个顺序搭工程先把设备通信搞定再画画面否则画面做得再漂亮变量连不上也是白搭。打开 MCGS 嵌入版组态软件新建工程后选择触摸屏型号 TPC1062Ti。进入设备窗口先从设备工具箱添加“通用串口父设备”再添加“欧姆龙 Host Link”子设备。Host Link 通信参数要和 PLC 侧保持一致我设的是波特率 9600数据位 7偶校验停止位 2PLC 站号 0。这里有个容易忽略的点PLC 本体默认的通信口可能是外设口而不是 RS232C 串口必须在 CX-Programmer 的 PLC 系统设定里把外设口/串口工作模式改成 Host Link否则触摸屏发指令 PLC 不会回应。设备属性里我添加了如下通道D100 只读对应实时数据库变量“当前楼层”D101 只读对应“运行方向”D120 只读对应“内呼状态字”D121 只读对应“外呼状态字”D140 只写对应 MCGS 按钮面板的“呼梯请求”PLC 侧每 100ms 读取一次D140 这个写通道是触摸屏主动向 PLC 发送指令的入口。比如触摸屏界面上按了“3 层内呼”按钮脚本就把 D140 写成 3PLC 检测到 D140 数值变化后自动置位 H0.02 并清零 D140。这里不直接让触摸屏去写 H 区位变量而是通过一个请求寄存器中转调试时只要盯住 D140 就能知道触摸屏到底有没有把指令发出来非常方便。4.2 变量连接与画面对象设计实时数据库里我建立了“当前楼层”“运行方向”“内呼状态字”“外呼状态字”“呼梯请求”“开门状态”“关门状态”等变量。这些变量全部绑定到设备通道上PLC 一扫描触摸屏上的数值就会刷新。用户窗口我画了两个页面一个叫“主监控”一个叫“运行数据”。主监控页面参考真实电梯的“轿厢位置示意图”竖着画 5 条水平线代表楼层每条线旁边放一个楼层号标签。轿厢用一个矩形图元表示但在 MCGS 里做连续的“平滑移动”比较麻烦我采用的技巧是画 5 个轿厢矩形分别设置“可见度”动画表达式分别是“当前楼层1”、“当前楼层2”……这样电梯到哪一层就显示哪一层的轿厢图形效果直观组态工作量也小。运行方向箭头用两个箭头标签做可见度切换。上行时显示向上箭头下行时显示向下箭头停止时两个箭头都隐藏。每层的外呼按钮和内呼按钮都是真实按钮对象按下后执行脚本把楼层编号写入 D140 请求寄存器。门区状态用两个指示灯开门灯和一个关门灯分别连接门开到位和门关到位的位状态。这里要注意MCGS 脚本中访问设备通道时最好用“设备通道名”而不是直接写地址这样后期改 PLC 地址不会影响画面脚本。我的按钮脚本大致是!SetDevice(设备0, 呼梯请求, 3)含义是把设备 0 的“呼梯请求”通道写入数值 3。因为 PLC 侧会把这个请求值转换成对应的楼层呼梯置位所以触摸屏脚本里不需要关心 H 区地址把逻辑闭环放在 PLC 端维护更清晰。4.3 报警与数据记录功能除了实时监控MCGS 的数据记录和报警功能特别好用。我在工程里建立了一个“运行记录”数据对象把当前楼层、运行方向、呼梯请求每隔 1 秒写入历史数据库。调试时打开历史的曲线能很清楚地看到电梯从 1 层到 5 层的完整动作序列比对着指示灯猜靠谱得多。报警这块我做了两个触发条件一是关门超时也就是开关门到位后 10 秒内没能关到位报警弹窗二是急停按钮被按下报警并记录时间。报警显示控件放在“运行数据”页面方便现场维护人员直接查看。5. 系统联调、故障排查与常见问题5.1 通信连不上的排查思路这是整个项目里我耗时最多的一关。PLC 程序已经能通过 CX-Programmer 在线监控了但 MCGS 触摸屏始终显示“设备连接失败”。我排查的顺序是这样的第一查通讯参数。CX-Programmer 在线监控的是 USB 口而触摸屏走的是 RS232 串口两个口不是一回事。要在 PLC 系统设定里确认串口的工作模式是 Host Link并且波特率、奇偶校验、停止位和 MCGS 设备配置完全一致。这里最容易踩的坑是通讯参数默认值不一致PLC 那边默认可能是 9600 8 N 1MCGS 驱动默认是 9600 7 E 2改到一致才能通。第二查接线和地电位。触摸屏的 COM 口和 PLC 串口之间是交叉线还是直连线不能凭感觉。一般 PLC 串口和触摸屏都是 DTE 设备需要 2-3、3-2、5-5 交叉连接。如果接成直连通信肯定失败。另外两台设备最好共地否则串口通信会偶发丢数据。第三查站号。Omron Host Link 协议的指令帧里带有 PLC 单元号MCGS 驱动里默认单元号是 0PLC 实际站号如果是 1必须改一致。站号对不上PLC 会对指令不响应。如果以上都排查了还连不上把触摸屏改到“在线调试”状态看设备通道的读取数值是否变化。我遇到过一种诡异情况USB 转串口线供电不足导致触摸屏偶尔能找到设备但数据全部为 0换一根带磁环的线就解决了。5.2 电梯运行逻辑异常的经典问题通信通了之后真正磨人的是逻辑类问题。我记录了几个典型故障这里直接列成表方便以后复现排查。故障现象可能原因排查方法电梯到站不停楼层信号抖动或停车条件判断错误用组态监控当前楼层和平层开关状态降低滤波时间检查目标楼层是否被正确写入呼叫按钮按下后无反应呼叫寄存器未置位或 H 区地址冲突用 CX-Programmer 在线监控对应 H 位检查按钮接线和 NPN 传感器极性电梯上下方向反复切换方向判断逻辑里没有“同向优先”检查是否把同向呼叫和反向呼叫混在一起处理按本文 3.2 的原则重写判断开门后立即自动关门门开到位信号没反馈到 PLC检查门开到位限位开关位置确认到位信号为常开且能可靠触发关门过程中电梯突然启动门联锁失效检查梯形图中“门关到位”触点是否串联在电机启动回路且关门输出和运行输出互锁其中我印象最深的是“呼叫消不掉”的问题。2 层外呼按钮按下后电梯确实到 2 层停了门也开了但关门后外呼指示灯仍然亮着电梯又跑了一圈才消除。原因是我当时复位外呼时只清除了“2 层下行呼叫”这一个位没有清除“2 层上行呼叫”。实际电梯里如果轿厢是上行方向到达 2 层并且用户按的是下行外呼那么电梯在 2 层停车让用户进入之后用户进入轿厢还会按目的楼层此时“2 层下行呼叫”已经不再有意义必须立即清除。这个细节才是电梯控制逻辑的灵魂比单纯写几十个触点难得多。5.3 一个 PLC 接两个触摸屏的扩展问题项目做完后有同学问能不能用一块 CP1E 同时带两块 MCGS 触摸屏。答案是可以但要看通信方式。如果两块屏都通过串口 Host Link 和 PLC 相连当成两个 Host Link 主站串口一主一从的协议就不允许两个主站同时挂一条总线通信会互相干扰。稳妥的做法是 PLC 换成带以太网口的机型或者加一个以太网模块两块屏都走 TCP/IP 通道分别作为独立客户端访问 PLC。用 MCGS 的话设备窗口里选择“以太网父设备”和对应的欧姆龙 TCP 驱动IP 地址和端口配置好两块屏可以同时监控。这个思路同样适用于以后想接上位机组态软件或者数据采集服务器的场景提前把 PLC 的通信接口留足能省很多事。6. 项目复盘与下一步可做的扩展6.1 整个调试过程中最值得记住的三件事这个项目让我最受益的不是最后跑通了而是中途反复折腾时沉淀下来的三条经验。第一I/O 表和地址分配表一定要在动手前定死。我在项目刚开始时想着“边写程序边改地址”结果程序写了三分之一发现外呼地址分配不合理前前后后改了一个晚上。定死之后接线、程序、组态三件事各自并行推进互不干扰效率翻倍。第二梯形图里尽量用“符号”和“状态寄存器”不要到处裸写触点。我所有楼层呼叫状态都集中映射到 D120/D121好处是组态和上位机读取数据时只面对两个字变量不需要理解几十个位地址。后面扩展触摸屏功能时我就靠这两个字变量做页面逻辑少走了很多弯路。第三安全逻辑宁可冗余也不要精简。上行和下行接触器互锁、门联锁、急停切断任何一个都别省。教学模型可以允许性能差一点、响应慢一点但不能出现上下行同时吸合或者门没关好电梯就走的危险情况。这是做自动化设备最基本的底线。6.2 后续功能扩展变频器、物联网和数字孪生这套系统目前用的是直流电机直接正反转控制逻辑和真实电梯已经非常接近了。如果想进一步贴近工业现场下一步我建议把电机驱动换成变频器PLC 输出运行方向和速度给定信号变频器驱动三相异步电机这样能实现加减速平滑还能通过模拟量给定多段速更接近真实电梯的运行曲线。另一个我打算做的扩展是加装 OPC UA 服务。Omron 较新的 NJ 系列 PLC 自带 OPC UA ServerCP1E 可以通过串口网关或者上位机中转把当前楼层、运行方向、呼梯状态这些数据发布出去。配合物联网网关就能在电脑端做一个 Web 组态界面远程查看电梯状态和统计运行次数。这类需求在非标设备的远程运维场景里非常常见会了这套电梯项目再做其他设备的 Web 组态监控思路几乎可以平移。回想这套系统第一次正常把轿厢从 1 层送到 5 层时我在触摸屏前反复点了几次才确认不是偶发。这个项目最大的收获不是写了几百行梯形图而是逼着我把“电梯会怎么动”这个问题拆成了一个个可检测、可控制的状态机。后面你如果遇到类似的物流分拣、立体车库、小型升降机项目这套框架完全可以平移过去通用的不是代码而是把复杂动作拆成“位置检测、请求登记、方向决策、安全互锁”这套设计方法。
返回列表