去年给一个厂区的物流通道做门禁改造,我把整套基于PLC的控制程序写好、上电,读卡器正常亮灯,继电器也有吸合声,可那扇自动门就是纹丝不动。折腾了一个下午,最后发现是输出公共端接错了一根线。这个经历让我意识到,好多在做门禁控制的人不缺“写程序”的能力,缺的是把电气控制和梯形图逻辑串起来的整体思路。
这篇文章想分享的就是这套东西:基于PLC技术的门禁系统电气控制设计到底怎么搭,自动门禁梯形图程序怎么一步步写出来,以及现场调试时哪些地方最容易翻车。适合正在搞电气自动化、刚接触PLC编程的工程师,也适合想用PLC替代专用门禁控制器的项目负责人参考。
1. 为什么选PLC做门禁控制器——三条技术路线的取舍
1.1 门禁系统的三种实现路线横向对比
市面上做门禁控制,基本绕不开三条技术路线。第一种是单片机/嵌入式方案,用一块控制板加C语言或者Python写逻辑,成本确实低,但开发周期长,硬件电路要自己画,产品化之后出了问题还要对着示波器找原因。第二种是专用门禁控制器,功能齐全,读卡、电锁、密码、闸机都给你集成好了,部署最快,但控制逻辑是一个封闭的黑盒,想改一个开锁延时都得看厂家脸色,更不用说跟消防联动、和产线设备握手。第三种就是PLC方案,也就是这篇博文要重点讲的路子。
把三条路线摆在一起看,结论其实很清晰。单片机适合大批量定型产品,专用控制器适合标准化考勤门禁点位,而只要项目里有“自定义控制逻辑”“与第三方设备联锁”“工业级可靠性”里的任何一个要求,PLC都是最稳妥的选择。我见过不少项目,一开始用专用控制器,后期要加自动化联锁,最后又回过头来用PLC把逻辑重写一遍,反而多花了两倍的人工。
| 对比维度 | 单片机方案 | 专用门禁控制器 | PLC方案 |
|---|---|---|---|
| 开发难度 | 高,软硬件都要做 | 低,开箱即用 | 中等,熟悉梯形图后很快 |
| 逻辑定制性 | 强,但改代码成本高 | 弱,受限于固件 | 强,程序在线可改 |
| 抗干扰能力 | 需自行设计 | 一般 | 强,适合工业现场 |
| 维护门槛 | 需要专业开发人员 | 依赖厂家 | 电工可看梯形图排查 |
| 联动扩展 | 较难 | 很难 | 很容易,DI/DO点多 |
1.2 PLC方案的三个真正优势
很多人觉得门禁就一个锁和一个读卡器,用PLC是不是杀鸡用牛刀。但从实际项目看,PLC方案有三个优势是专用控制器比不了的。
第一个优势是电气隔离和抗干扰。工厂车间里变频器、电机、电焊机到处都是,电磁环境相当恶劣。专用门禁控制器在这种环境里偶尔会出现读卡后不动作、锁体误开的情况,而PLC的输入输出电路本身就有光电隔离,抗扰度标准比民用设备高一个级别,故障率会低很多。
第二个优势是逻辑透明、方便维护。梯形图不像单片机代码那样需要从头读一遍才能理解,一个中等水平的电工看着梯形图就能判断出门为什么不开、锁为什么不落。哪怕PLC厂家不同,只要会看梯形图,换一台设备也能很快上手。
第三个优势是联动能力。消防系统给一个无源干接点信号,PLC程序里把这个信号放在最高优先级,无论当前处于什么状态,直接强制开门。门禁和生产线互锁也同理,用一根信号线加一行梯形图逻辑就解决了。这种需求在专用门禁控制器上往往需要额外加模块、做二次开发,在PLC这边只是程序里多加一个触点的事。
2. 门禁电气控制架构与硬件选型
2.1 I/O点表:从控制需求倒推硬件配置
做电气控制设计的第一步不是画原理图,而是先列I/O点表。把每个输入信号、输出动作想清楚,再去选PLC的型号,这样才能避免点位不够用或大量浪费的情况。
以一个典型单门自动门禁项目为例,我通常按下面这张表来分配点位。输入侧:读卡器合法信号(脉冲型)、进门侧开门按钮、出门侧开门按钮、开门到位限位、关门到位限位、防夹光电传感器、手动/自动模式开关、故障复位按钮。输出侧:开门输出(驱动门机或磁力锁)、关门输出、故障报警灯、门状态指示灯。
| 编号 | I/O类型 | 信号名称 | 说明 |
|---|---|---|---|
| X0 | 输入 | 读卡合法信号 | 读卡器输出脉冲,卡合法时导通 |
| X1 | 输入 | 进门按钮 | 门内侧安装,无源常开触点 |
| X2 | 输入 | 出门按钮 | 门外侧安装,无源常开触点 |
| X3 | 输入 | 开门到位限位 | 门完全打开时导通 |
| X4 | 输入 | 关门到位限位 | 门完全关闭时导通 |
| X5 | 输入 | 防夹光电 | 检测区有遮挡时输出ON |
| X6 | 输入 | 自动/手动切换 | ON为自动,OFF为手动 |
| X7 | 输入 | 故障复位 | 每次按下清除故障锁存 |
| Y0 | 输出 | 开门指令 | 驱动门机开门方向/锁体开锁 |
| Y1 | 输出 | 关门指令 | 驱动门机关门方向/锁体落锁 |
| Y2 | 输出 | 故障报警灯 | 超时、故障时点亮 |
| Y3 | 输出 | 门状态指示 | 开门时点亮,关门时熄灭 |
列完点表要立刻做的事,是核对每一路信号的工作制式。读卡器输出是干接点还是集电极开路,光电传感器是常开还是常闭,这些直接影响输入公共端的接法和梯形图里触点的常态。点位充裕的PLC宁可富余四五个点位,也不要把输入输出用到满,后期加一个信号就得换主机,那个成本远超当初多花几百块选大一号的CPU。
2.2 锁体与执行机构的配合
门禁系统的执行机构主要分两类。一类是电磁锁/电插锁,PLC输出只控制锁的“吸合”和“释放”;另一类是自动门机,PLC输出给门机控制器发开关门指令,门机自己带电机和限位。很多项目实际上是两者结合——自动门负责物理开关,磁力锁负责门到位后的锁紧。
选型时有个重要原则:锁体是断电开门还是断电关门。消防要求高的场所,电磁锁必须选断电开门,停电时人员可以推门疏散;财务室、机房这种安防等级高的场所,则选断电关门,防止停电期间门被打开。这个逻辑决定了PLC输出继电器是通电吸合还是断电释放,也决定了中间继电器要不要加。我做过一个项目,甲方前期没提这个需求,等我全部接线完成才说要做断电开门,等于把输出回路全部返工,教训相当深刻。
电源容量也容易漏算。PLC本体功耗、传感器供电、读卡器供电、锁体工作电流要全部加起来,再留30%余量。以一套普通系统举例:磁力锁工作电流0.6A,PLC本体0.5A,读卡器和光电传感器合计0.2A,总电流大约1.3A,24V直流电源要选2A以上的规格。有人图便宜按1.5A配电源,锁体启动瞬间电压跌落,直接导致读卡后锁不动作,排查起来非常迷惑。
2.3 接线中的公共端与保护器件
接线是电气控制设计里最容易被轻视、也最容易出事故的环节。第一个要不了命但很磨人的问题是NPN/PNP混用。大多数PLC输入端口支持切换公共端接法,NPN型传感器公共端接24V正极,PNP型传感器公共端接0V。如果项目里既有NPN光电又有PNP接近开关,接线时必须分批分组,不能全拧在同一个公共端上,否则传感器输出逻辑会错乱,梯形图里看到的信号完全不是现场的真实状态。
第二个问题是感性负载的续流保护。磁力锁、继电器线圈都是感性负载,断开瞬间会产生反向电动势,电压可能冲到上百伏。PLC继电器输出触点如果没有并联续流二极管或压敏电阻,用不了多久触点就会烧黑。我见过一台PLC的Y0输出点无故损坏,换上去一个新的又坏,最后拆开端子排才发现是电锁两端没加续流二极管。这个问题在设计阶段就应解决,不该等到现场烧了触点才想起补救。
第三个问题是中间继电器的使用边界。PLC继电器输出触点允许的电流通常在2A左右,驱动小型电锁没问题;但如果门机的电机功率较大,或者锁体电流超过1A,稳妥的做法是让PLC输出只驱动中间继电器线圈,再由中间继电器触点去控制门机/锁体。这样做的好处是即便执行机构发生短路或过载,损坏的也只是几十块钱的中间继电器,而不是几千块的PLC输出模块。
3. 自动门禁梯形图程序详解
3.1 程序运行状态划分
写梯形图之前要先在脑子里把控制逻辑分成几个状态,否则一段程序写到后面,线圈互锁乱成一锅粥。自动门禁的运行状态通常划分为:待机、开门、保持、关门、故障,一共五个。待机状态门在关到位位置,所有输出复位;收到合法开锁信号后进入开门状态,输出开门指令;开门到位后进入保持状态,门停留一段时间供人员通过;保持时间到进入关门状态,输出关门指令;关门到位后回到待机。任何状态下检测到超时或安全异常,跳转到故障状态,报警灯点亮,并禁止所有输出动作,直到人工按复位按钮清除。
| 状态 | 转移条件 | 进入后的动作 |
|---|---|---|
| 待机 | 关门到位,无故障 | 所有输出复位 |
| 开门 | 读卡合法/按钮按下,且无遮挡 | Y0输出ON |
| 保持 | 开门到位X3=ON | T1定时器计时,门保持打开 |
| 关门 | 保持时间到,且无遮挡 | Y1输出ON |
| 故障 | 开/关门超时,或模式切换异常 | Y2报警,输出全封锁 |
状态划分完成之后,程序的结构就清晰了,剩下的工作是把这个状态机翻译成梯形图。我在实际项目中习惯用辅助继电器M元件表示状态标志,每个状态都对应一个M线圈,状态转移就是辅助继电器之间的置位和复位。这样写出的程序,维护人员看M元件的ON/OFF状态,立刻就能判断门处于哪个阶段,比一堆输出线圈硬凑逻辑好排查得多。
3.2 开门逻辑:置位、复位与定时
核心的开门逻辑可以用指令表来表述,下面是精简版,不同PLC品牌的指令名称略有差别,但梯形图结构是通用的。
LD X0 // 读卡合法信号 OR X1 // 进门按钮 OR X2 // 出门按钮 AND X5_OFF // 防夹光电无遮挡 AND X4 // 门处于关到位 AND M21 // 自动模式 SET M0 // 置位开门请求 LD M0 OUT Y0 // 开门输出 LD X3 // 开门到位 RST M0 // 清除开门请求这段逻辑有三个关键点。第一,开门条件必须加上“门处于关到位”这个X4触点。如果门正在关闭途中,读卡信号不应该让门瞬间反向打开,否则容易造成机械冲击;但防夹光电触发的反向开门不受这个限制,那是安全逻辑,优先级更高。第二,使用置位指令而不是普通输出线圈,是为了让开门请求具备记忆功能。读卡器给出的合法信号通常是一个几百毫秒的脉冲,如果直接接输出线圈,脉冲结束输出就掉电了,门根本来不及完全打开。第三,开门到位后要及时复位M0,让开门输出Y0停止,避免门机长时间通电。
保持时间由定时器实现。从M0复位开始,T1定时器开始计时,K值可以按现场人流通行节奏调整,我一般先设5秒,测试时再逐秒加减。定时时间到,置位关门请求M2,程序转向关门逻辑。
LD M0 AND X3 // 开门到位 OUT T1 K50 // 保持开门5秒 LD T1 AND X4_OFF // 门未关到位 AND X5_OFF // 防夹无遮挡 SET M2 // 置位关门请求3.3 关门与防夹逻辑
关门逻辑同样用置位/复位方式处理。M2置位后,Y1输出关门指令,门机开始关门;关门到位限位X4导通,复位M2,Y1掉电,等待下一个开门循环。
LD M2 OUT Y1 // 关门输出 LD X4 // 关门到位 RST M2 // 清除关门请求防夹逻辑必须单独对待,不能和普通开关门混在一起。这里要约定一个输入常态:防夹光电传感器选用常开型,检测区没有遮挡时输出OFF,有遮挡时输出ON。那么在梯形图里,X5(防夹光电)的常闭触点是“安全条件”,常开触点是“触发条件”,两个都要用。
关门过程中,如果检测到X5变成ON,说明有人或物体正在通过门区,程序要立即停止关门,反向开门一段时间后再次尝试关门。消防法规要求自动门必须防止夹人,这个逻辑不是锦上添花,是安全底线。
LD M2 // 正在关门 AND X5 // 防夹触发 SET M3 // 置位防夹开门请求 RST M2 // 取消关门请求 LD M3 OUT Y0 // 反向开门 OUT T2 K30 // 持续3秒 LD T2 RST M3 // 3秒后结束防夹开门这里有个容易被忽略的细节:防夹触发后不能立刻重新关门,必须让门在打开位置停留一段时间。我用T2定时器延时3秒,目的是给被夹住的人或物足够的避让时间。如果延时太短,门会反复夹到同一个人,现场人员会对这套系统完全失去信任。
4. 可靠性与故障处理逻辑设计
4.1 防夹与安全边界的双重冗余
门禁系统的安全性不能只靠一个光电传感器撑着,尤其对于大型自动门,我建议采用“限位开关+光电传感器”的双重冗余方案。关门到位限位开关负责确认门体是否完全关闭,光电传感器负责保护门运行区间内的人员。两者本身的安装位置要错开:限位开关装在门框顶部或侧面,光电传感器装在离地面30厘米和60厘米两个高度,这样既能检测成人躯干,也能检测儿童或低矮障碍物。
安全逻辑的优先级要明确:防夹信号 > 手动开门 > 自动开门 > 关门。在梯形图里,防夹触点要放在所有控制逻辑的最前端,也就是说任何输出动作之前,都要过一遍防夹条件。可以实现为:
LD M0 // 任意开门条件 AND X5_OFF // 防夹条件 SET M0_SAFE // 安全开门请求这样即使开关门指令同时出现,只要防夹触发,所有动作都会停下,转去执行防夹开门逻辑。我在多个项目里都坚持把这个安全网放在程序最外层,宁可多写几行逻辑,也不依赖单一开关来保护人员安全。
4.2 手动/自动/常开模式切换
门禁系统不能只有全自动一种工作模式。检修、应急、物业保洁这些场景都需要人工干预,所以现场增加了X6手动/自动切换开关。自动模式(M21=ON)按读卡和按钮信号联动;手动模式(M21=OFF)下,开门按钮和关门按钮变成点动控制,按下动作、松开停止,方便维修人员单步测试门机机构。
梯形图里的切换逻辑不复杂,用M21触点实现分支即可。关键在于手动模式下要绕过延时关门和读卡验证这些环节,直接接通输出。同时,手动模式下防夹保护和超时报警依然生效,不能因为“手动”就关掉安全措施,这是我在一次调试时被人问“手动模式是不是可以强行关门”之后才明确下来的原则——手动只是选择信号来源,不是绕过安全性。
常开模式一般用在商场和写字楼的营业期间,门保持敞开状态,不自动关门。它在程序里是自动模式的一个子状态,通过另一个拨码或触摸屏按钮置位,逻辑上等价于保持开门请求一直有效,直到退出常开模式。这个模式不单独占用输出,只是把定时器关门条件置为无效,在梯形图里用M22辅助继电器控制T1的触发条件即可。
4.3 故障锁存与报警排查
设备机龄增长之后,限位开关失效、门机皮带打滑等问题会逐渐暴露。这类故障的特点是不一定会立刻让系统停机,但会表现为开关门不到位。所以程序设计里加了两个超时故障判断:开门超时和关门超时。开门请求发出之后10秒内没有收到开门到位信号,或者关门请求发出之后15秒内没有收到关门到位信号,都会触发故障锁存。
LD M0 OUT T10 K100 // 开门超时10秒 LD T10 ANI X3 // 开门到位未导通 SET M20 // 开门超时故障 LD M20 OUT Y2 // 点亮报警灯故障锁存后要做两件事:一是把输出全部封锁,防止门机在异常状态下继续动作造成损伤;二是让故障状态在报警灯上明确显示。有条件接触摸屏的项目,我建议把故障原因细化成代码,M20对应“开门超时”、M21对应“关门超时”、M22对应“模式切换异常”,这样维护人员到场后看一眼报警代码就能直奔故障部位,不用抱着万用表逐一查点。没有触摸屏也没关系,用报警灯闪烁频率区分故障类型,同样能达到目的。
故障复位按钮X7要放在人工可达且不易误触的位置。它的作用是清除M20/M21等故障锁存,并复位所有状态标志,让系统回到待机状态。注意复位逻辑必须有明确的先后顺序:先复位故障标志,再复位开门/关门请求,最后解除输出封锁。顺序反了会出现复位瞬间门机突然动作一下的诡异现象。
5. 现场调试避坑实录与排查思路
5.1 我遇到的三个典型坑
做过的门禁项目多了,总会遇到一些教科书上不讲、写程序时也想不到的问题。第一个坑是刷卡后门开一半就停。当时限位开关装在门体轨道尽头,调试时用手推门能压到位,实际运行却总差两厘米。后来量了限位开关的安装位置才发现,门机在高速运行惯性下会过冲,机械限位块把开关压得死死的时候还好,一旦门机速度调低,惯性变小,门体正好停在开关动作临界位置,信号时通时断。解决方案是把限位开关往门体行程中间方向挪了5毫米,同时调低门机末段速度。这类问题靠调时间参数很难根治,必须让安装师傅配合调机械位置。
第二个坑是门明明关上了,系统却一直报门未关。排查了很久才发现是关门到位限位使用了磁簧开关,门体每次关到位时撞击力会造成磁簧瞬间抖动,抖动产生的脉冲被PLC当成了一次新的开门信号。这不是硬件坏了,而是信号没有做滤波。后来在输入回路里加了RC滤波,或者利用PLC输入端自带的滤波时间设定,把输入滤波从默认的几毫秒调到20毫秒,问题就消失了。
第三个坑是夜间待机时PLC输出点莫名烧毁。这个在前面接线部分提过,就是电锁这种感性负载没有加续流二极管。启动瞬间的反向电动势像一个小型高压脉冲,反复冲击输出继电器触点,最终把触点烧黑。烧一个输出点换一个输出点的成本还可以承受,但如果是半夜门禁失灵,值班人员被锁在外面,这就不是换一个继电器能解决的问题了。所以输出回路的保护器件必须在设计阶段就画进图纸,绝不能省。
5.2 调试顺序与时间参数整定
门禁系统的现场调试不要一上来就拿着读卡器反复刷,那样根本无法定位问题。我习惯的调试顺序是先空载、再带载、最后全流程模拟。空载阶段把门机/锁体电源断开,强制输出测试Y0和Y1,确认PLC输出点与接线端口的对应关系没有接错。这个阶段能发现最愚蠢但最致命的错误——点表写的是Y0实际接的是Y1的端子。
带载阶段接上门机和锁体,用手动模式点动开关门,观察门机动作方向是否正确、限位开关是否能在正确的物理位置触发。确认没问题后再切换到自动模式,用读卡器触发整个状态流。时间参数整定以“慢而不拖、快而不冲”为目标:开门保持时间一般从5秒起步,根据人员平均通过速度调整;关门超时报警时间要大于正常关门时间再加上2到3秒的余量,否则正常关门时就会频繁误报警。
所有动作测试通过后,别忘了做故障模拟。人为挡住防夹光电,确认门会停止并反向;人为按住限位开关让门机无法到位,确认超时报警能正常触发。这些安全功能的验证不能省,因为真正遇到事故时系统是不会有第二次机会的。
最后再分享一个实际项目里养成的小习惯:梯形图里的所有辅助继电器M元件,我都会在程序开头放一个注释块,说明每个M编号对应的含义,比如M0开门请求、M2关门请求、M20开门超时故障,并在程序顶部维护一个版本号和修改日期。后期维护人员翻程序时一目了然,不用把整个梯形图读一遍才猜得出设计意图。这个习惯花不了几分钟,但能省掉后面无数个加班的晚上。