做停车场收费系统,很多人第一反应是“这不就是一台收费电脑加两台车牌识别相机的事吗?”真到了现场调试,你会发现哪怕是再简单的出入口,只要涉及道闸升降、地感检测、防砸车这几个基本动作,就离不开一套可靠的电气控制回路。这套回路的“大脑”通常就是PLC,而值班电脑上那个能看状态、能手动操作、能留记录的界面,则是组态软件在撑场子。把这两个东西组合起来做智能停车场收费系统,是我这几年接过比较多的一类项目,也是我认为最适合用来理解“PLC怎么跟现场设备和上位机协作”的真实案例。
这套系统能解决什么问题,一句话概括就是:把进出车辆的识别、计费、抬杆放行、防砸保护这些环节用一套电气控制逻辑串起来,让现场动作可靠、让收费数据可查,而且电工和维护人员都看得懂、修得了。这篇文章我会从方案选型、电气回路、PLC程序、组态画面到现场故障排查,完整走一遍我自己的实现思路,适合正在做课程设计、刚入行做电气控制、或者想接手停车场改造项目的朋友参考。
1. 系统整体设计与方案选型
1.1 一个停车场出入口到底需要哪些设备
先别急着画电路图,第一步是把现场需要的设备摸清楚。一个标准的智能停车场出入口,硬件上大致是这么几块:
入口方向:车牌识别相机(带补光灯)、道闸、入口地感线圈、车辆检测器、LED显示屏、语音播报模块。出口方向:车牌识别相机、道闸、出口地感线圈、车辆检测器、收费二维码屏(或者集成在相机屏显里)。中间控制层:PLC控制柜、收费岗亭电脑、交换机、电源系统。后台层:收费管理软件、数据库、组态软件运行环境。
这些设备里,真正需要PLC去管的不是相机,也不是收费软件,而是道闸、地感、指示灯、报警器这些“带开关量”的现场设备。相机识别结果和计费逻辑都在上位机里算,但最终执行抬杆还是落杆,必须通过PLC的继电器输出驱动接触器,再由接触器控制道闸电机。这也是很多纯软件背景的人容易忽略的地方——上位机说“开闸”只是一个指令,真正把闸杆抬起来的,是电气回路。
1.2 为什么选PLC而不是继电器或单片机
停车场设备24小时不间断运行,现场环境电磁干扰大、电源波动常见,还要和多种设备通信。继电器逻辑电路也能实现开闸关闸,但一旦要加防砸逻辑、手动自动切换、故障自恢复这些功能,继电器柜的复杂度会直线上升,改一个功能就得重新接线,维护非常痛苦。单片机性价比高,但抗干扰能力、程序可靠性、现场排查门槛都是问题,普通电工看到一块单片机板子根本无从下手。
PLC在这个场景的核心优势是:梯形图逻辑直观,现场联机调试方便,修改程序不需要改动接线,而且I/O点隔离、继电器输出、扩展模块这些特性非常契合停车场这种“开关量为主、模拟量很少”的控制场景。更实际的一点是,停车场系统集成商和甲方电工普遍熟悉PLC,出了问题能自己排查,不会因为一个小问题就让你跨城跑一趟。
1.3 硬件选型与成本控制
我做这类项目用过最多的是西门子S7-200 SMART和三菱FX3U/FX5U,国产的汇川、信捷、台达也用过不少。说实话,停车场系统点位不多,一台小型PLC加一个通信扩展口完全够用。
| 品牌系列 | 通信方式 | 适用场景 | 大致成本区间(仅供参考) |
|---|---|---|---|
| 西门子S7-200 SMART SR20/SR30 | 以太网/Modbus TCP | 上位机走网线通信,调试方便,市场保有量大 | 中 |
| 三菱FX3U/FX5U | 串口/以太网/CC-Link | 出口日系设备多,或甲方指定品牌 | 中高 |
| 台达DVP系列 | 串口/Modbus RTU | 性价比方案,485从站通信成熟 | 低中 |
| 汇川H1U/H3U | 串口/以太网/EtherCAT | 国产性价比高,H3U扩展能力强 | 低中 |
组态软件方面,商业方案可以选昆仑通态MCGS、组态王、力控,开源方案可以选FUXA。我的习惯是:项目小、预算紧就用MCGS嵌入版或者FUXA,界面要求高、要做大量数据报表就用组态王或力控。FUXA的好处是免费、支持网页访问,调试期间坐在家里也能看到现场状态;坏处是资料少,有些坑得自己填。MCGS则非常成熟,网上教程多,电工朋友相对熟悉。
选型的核心思路是:硬件尽量选本地能买到、售后响应快的品牌,软件尽量选自己调试过、知道坑在哪里的平台。停车场系统赚钱不在硬件差价,而在项目交付速度和售后成本,稳定、可维护优先。
2. 电气控制回路设计
2.1 主回路与控制回路划分
电气控制柜里最忌讳把所有线混在一起。我一般把柜内分成两套系统:一套是主回路,负责给道闸电机、显示屏、补光灯供电,电压220V交流;另一套是控制回路,负责给PLC、中间继电器、传感器供电,电压24V直流。220V回路和24V回路在柜内分开走线槽,避免强电干扰PLC的信号采集。
配电设计上,柜内总进线先接一个带漏电保护的断路器,然后分几路:道闸电机回路、相机显示屏回路、PLC开关电源回路、备用回路。PLC侧用一个24V直流开关电源(2A就够,道闸控制信号通常只有几百毫安),中间继电器线圈统一接24V,PLC输出也走24V,这样整个控制回路都是安全电压,调试时手指碰到线也不至于出事。
有一点必须强调:道闸电机不要直接接接触器输出,更不要用PLC继电器输出直驱。PLC的继电器输出触点容量一般只有2A,而道闸电机启动瞬间电流可能达到额定电流的好几倍,长时间直驱很容易烧坏PLC输出点。正确做法是PLC输出24V信号驱动中间继电器,中间继电器触点再驱动接触器线圈,接触器主触点去控制电机。中间继电器和接触器更换成本低、触点容量大,坏了不心疼,这也是工程上的标准做法。
2.2 道闸电机的正反转控制
道闸电机通常是单相交流电机,通过改变电容串接方式或者改变绕组接线来实现正反转。抬杆和落杆对应电机正转和反转,控制核心是两个接触器的互锁逻辑。
一个标准的正反转控制回路里,两个接触器绝对不能同时吸合,否则会造成相间短路。电气回路上我会做两层保护:第一层是接触器本身的机械互锁,第二层是在PLC程序里做软件互锁,也就是输出开闸信号时强制复位关闸输出,输出关闸信号时强制复位开闸输出。最外层再加一个热继电器做过流保护,电机堵转或者卡死时自动切断回路。
闸杆动作时间一般在1到3秒之间,抬杆到达上限位、落杆到达下限位时,限位开关动作,PLC检测到限位信号后立即停止电机输出。这里要注意,限位开关是控制回路里非常重要的一环,不能省。有些便宜的道闸内部已经带了行程开关,但为了安全,我仍然会在外部单独接两个限位点给PLC做状态反馈,这样上位机界面上能真实看到闸杆是开到位、关到位还是在动作中。
2.3 地感检测与限位信号的接入
地感线圈的原理是埋在车道地面下的一个电感线圈,车经过时金属车身会改变线圈的电感量,车辆检测器检测到这个变化后,内部继电器动作,输出一个开关量信号给PLC。这个信号有两个作用:一是触发相机抓拍(通常由检测器直接给相机一个脉冲),二是告诉PLC“当前有车在某个位置”。
接入PLC时,地感检测器输出的都是继电器干接点,不分正负,可以接到PLC输入端子。接线时注意共用一个输入公共端COM,根据PLC型号选漏型或源型接法。我习惯把所有输入点的COM集中接24V正极,使用漏型输入(NPN接法),这样多数品牌PLC默认配置都通用。
限位开关(开到位、关到位)一般接常闭触点,正常状态下是接通状态,闸杆动作到位后顶开限位,信号断开。这种接法的好处是限位线断了也能被检测到——线断了程序会认为闸杆不在位,从而报警,而不是误认为到位后还继续给电机输出,安全逻辑更合理。
2.4 安全保护与手自动切换
电气控制柜的面板上我至少会装三个东西:急停按钮、手动自动转换开关、电源指示灯。急停按钮必须走硬件硬回路,直接串在接触器线圈的供电回路里,按下急停后接触器立刻失电,道闸电机断电抱闸。这个动作不能依赖PLC程序,因为一旦PLC死机或程序跑飞,软件急停就是空的。
手动自动转换开关的作用是给现场维护人员留一条路。自动模式下,PLC根据相机和上位机指令自动开关闸杆;手动模式下,PLC忽略自动开闸指令,操作人员可以通过柜门上的开闸、关闸按钮直接控制道闸。这里有一个我踩过的坑:手动模式下的开闸按钮和自动模式的上位机开闸指令,在程序里必须分开关联,否则自动模式信号串进手动逻辑,现场按了开闸按钮闸杆没反应,查了半天发现是上位机持续给了一个关闸指令把输出互锁住了。
断路器、保险丝、热继电器这些基础保护器件,看似不起眼,但现场电气故障百分之八十是它们默默解决问题。千万别为了省几十块钱省掉热继电器,电机堵转烧掉一台道闸的成本,够买几十个热继电器。
3. PLC程序实现要点
3.1 I/O点表与地址规划
程序动手之前,先要把I/O点表列清楚。我把一个典型双向出入口的PLC点位规划放在下面,以西门子S7-200 SMART的I区Q区为例:
| 地址 | 信号名称 | 方向 | 说明 |
|---|---|---|---|
| I0.0 | 入口地感A(触发识别) | 输入 | 入口相机抓拍触发,车辆到达入口 |
| I0.1 | 入口地感B(防砸/过车) | 输入 | 入口闸杆下方车辆检测 |
| I0.2 | 入口道闸开到位限位 | 输入 | 闸杆完全抬起 |
| I0.3 | 入口道闸关到位限位 | 输入 | 闸杆完全落下 |
| I0.4 | 出口地感C(触发识别) | 输入 | 出口相机抓拍触发,车辆到达出口 |
| I0.5 | 出口地感D(防砸/过车) | 输入 | 出口闸杆下方车辆检测 |
| I0.6 | 出口道闸开到位限位 | 输入 | 出口闸杆完全抬起 |
| I0.7 | 出口道闸关到位限位 | 输入 | 出口闸杆完全落下 |
| I1.0 | 手动开闸按钮(入口) | 输入 | 手动模式开入口闸 |
| I1.1 | 手动关闸按钮(入口) | 输入 | 手动模式关入口闸 |
| I1.2 | 手动开闸按钮(出口) | 输入 | 手动模式开出口闸 |
| I1.3 | 手动关闸按钮(出口) | 输入 | 手动模式关出口闸 |
| I1.4 | 手自动切换开关 | 输入 | 0手动 1自动 |
| Q0.0 | 入口道闸开启输出 | 输出 | 驱动入口闸开接触器 |
| Q0.1 | 入口道闸关闭输出 | 输出 | 驱动入口闸关接触器 |
| Q0.2 | 出口道闸开启输出 | 输出 | 驱动出口闸开接触器 |
| Q0.3 | 出口道闸关闭输出 | 输出 | 驱动出口闸关接触器 |
| Q0.4 | 入口LED指示(绿灯通行) | 输出 | 开闸时亮绿灯 |
| Q0.5 | 出口LED指示(绿灯通行) | 输出 | 开闸时亮绿灯 |
| Q0.6 | 声光报警 | 输出 | 故障或非法闯入时动作 |
这个表不是死的,比如入口可以只用一个地感线圈,靠视频触发相机;但加了防砸地感后系统可靠性明显提升,因为视频识别在雨雾天或逆光时可能漏识别,地感触发更稳定。
3.2 开闸关闸核心逻辑
道闸控制的核心就是两个输出:开闸输出、关闸输出。我用的是置位复位思路,而不是单纯的线圈输出。原因是开闸和关闸都需要“保持”一段持续时间,直到限位信号到位才切断,如果直接用按钮或上位机信号的瞬态驱动线圈,手一松输出就断了,闸杆只能动作一截。
入口气动流程在程序里的逻辑是这样的:车辆压上入口识别地感,相机抓拍并向收费软件请求识别。收费软件判断有效后,通过组态或通信模块向PLC写入一个“允许开入口闸”的变量,比如M0.0。PLC检测到M0.0从0变1,而且当前处于自动模式、道闸不在开到位状态、没有急停信号,就置位Q0.0,开闸输出持续有效。闸杆抬起,碰到开到位限位I0.2,程序复位Q0.0,同时保持闸杆打开状态。
落杆逻辑要复杂一些,因为要防砸。不能一开到位就立刻落杆,也不能车辆还没完全通过就落杆。我的做法是:闸杆开到位后,如果防砸地感没有车辆占用,延时3到5秒触发关闸输出;一旦防砸地感检测到车辆,立即中止关闸输出,重新保持开闸状态,直到车辆完全驶离后再延时落杆。这个延时时间可以在组态画面上做成可调参数,方便现场按实际车速调整。
上位机“允许开闸”信号在PLC里我建议做成脉冲捕捉,也就是上升沿触发,而不是电平触发。否则上位机软件卡住、信号一直为1,会导致闸杆开了又关,关了又开,循环抖动,现场看着像抽风一样。
3.3 防砸逻辑与状态机
把整个道闸控制看成一个状态机会更清晰,状态依次是:待机、识别完成、开闸中、已开到位、车辆通过中、落杆中、已关到位。每个状态只允许特定的转移条件,避免逻辑混乱。
落杆过程中,如果防砸地感检测到车辆,状态直接从“落杆中”跳回“已开到位”,同时复位关闸输出。这个过程我用下降沿和中途信号都可以检测,关键是地感信号的滤波时间要设置好。车辆检测器一般都有灵敏度调节,调太灵敏会把雨点、路面积水也当成车,导致闸杆一天到晚不落;调太迟钝又会砸到车。我的经验是先按中灵敏度,再拿一辆电动车和一辆SUV分别测试,以慢速通过不砸车为标准。
还有一个细节:手动模式下的按钮操作不经过防砸地感逻辑,就是说手动按关闸就是直接关闸,那是操作人员确认过现场情况的紧急操作,不能带防砸判断。自动模式才走完整状态机逻辑。
3.4 手自动切换与掉电恢复
手自动切换在程序里的处理原则是:手动模式下禁止自动开闸指令生效,但自动模式下保留手动按钮的优先级。切换时还要处理一个状态冲突问题——如果自动模式下闸杆开到一半,值班人员突然把转换开关拨到手动,这时PLC应该保持当前输出不变,而不是瞬间复位所有输出。否则闸杆会直接砸下去,非常危险。
我用的方式很简单:读到手自动切换开关状态变化时,先让程序记录当前道闸位置状态,然后在切换瞬间不改变输出状态,只改变后续指令的使能条件。这样手动自动之间是无扰切换,现场体验最顺。
掉电恢复也值得单独说。停车场经常跳闸,恢复供电后PLC如果没有保持性存储,道闸状态会全部归零,闸杆该开没开、该关没关,造成出入口堵塞。所以道闸位置状态、手动自动状态、故障标志这些关键变量,必须放到PLC的断电保持区(西门子S7-200 SMART的V区默认断电保持,三菱的M区通过电池或锁存继电器实现)。恢复上电后,程序先判断限位信号就知道闸杆当前实际位置,再决定是否需要重新执行动作。
4. 组态软件与收费联动
4.1 组态工程搭建与变量绑定
组态软件的工作,简单说就是两块:把PLC里的数据读出来变成肉眼能看懂的图形和数字,把操作人员的点击动作翻译成写给PLC的指令。以MCGS为例,搭建一个停车场监控画面的基本流程是:新建工程,选择设备驱动(MCGS里对应西门子S7-200 SMART的驱动叫“西门子S7-200TCP”),填写PLC的IP地址,然后定义通道。通道包括I区、Q区、M区、V区等,把PLC程序里用到的关键位和寄存器全部建立成组态变量。
建立变量时命名一定要有规矩,我见过太多工程里变量叫“a1”“b2”,过两个月自己都忘了是什么。我的命名规则是:位置_类型_功能,比如IN_OPEN_LIMIT代表入口开到位限位,OUT_CLOSE_BTN代表出口关闸按钮,AUTO_DOORING代表自动落杆延时时间(秒)。命名清晰之后,画面绑定、报表导出、远程排查都会轻松很多。
4.2 收费流程的数据链
组态软件在收费系统里不是替代收费管理软件,而是作为设备层和收费软件之间的桥梁。实际流程是:车牌识别相机抓拍图片,相机内置算法识别车牌号,通过HTTP或SDK把车牌号发给收费管理软件(比如一套商家自己开发的收费系统),收费软件根据车牌查数据库判断这是月卡、免费车还是临时车,再调用通信模块把“允许开闸”信号写给PLC。
我常用的做法是收费软件直接通过Modbus TCP协议读写PLC的M区。S7-200 SMART原生支持Modbus TCP从站,PLC侧调用MBUS_SERVER库,在组态软件里给收费软件留一个192.168.1.x的网段。收费软件只需要把对应的M地址值改成1,PLC程序检测到之后执行开闸动作,这就把收费逻辑和电气控制解耦了。万一收费软件崩了,PLC还能靠手动模式维持基本进出,不会让整个停车场瘫痪。
4.3 画面设计与数据记录
组态画面我一般设计几个页面:主监控页(平面图显示车流状态、道闸状态、相机在线状态)、手动操作页(虚拟按钮替代柜面按钮,方便值班人员在电脑上操作)、参数设置页(自动落杆延时、地感滤波时间、车牌识别宽限期等)、报表页(开关闸记录、异常报警记录)。
动画连接上,道闸图形可以做一个旋转动画,绑定到开到位和关到位两个变量,闸杆是抬还是落一目了然。地感区域可以用颜色填充动画——有车时变红,无车时变绿。这些效果看着简单,但现场值班人员的反馈非常好,比盯着一排指示灯直观得多。
数据记录方面,MCGS和组态王都能把变量变化写进Access或SQL数据库。我会重点记录:每一次开闸的触发来源(手动、自动、上位机)、开闸时间、关闸时间、故障报警时间。这些数据后期做停车流量分析、设备维护计划非常有用。FUXA开源组态则自带InfluxDB集成,适合做历史趋势曲线,不过对普通停车场运维来说有点重,更多用在工业场景。
5. 常见问题与排查技巧实录
5.1 通信时断时续
停车场现场通信故障是最常见的。485串口通信时断时续,先查是否接地和终端电阻。485总线的A、B两端需要分别接120欧终端电阻,特别是在线缆较长的场景。还要确认屏蔽层单端接地,否则现场带电机会产生很大干扰。用网线以太网通信时,最常见的坑是IP地址冲突和网线水晶头压接不良。PLC、相机、收费电脑、交换机,每一台设备的IP都要固定并记录在案,现场经常有人拿着笔记本接进来调试,DHCP一开就可能和PLC抢地址。
组态软件连不上PLC的时候,先用厂商的调试工具(比如西门子S7-200 SMART的编程软件)测一下通信是否正常。如果编程软件能连上,组态软件连不上,那就是驱动配置问题,检查型号、IP、端口号对不对。如果编程软件也连不上,那就是网络物理链路问题,从网线、交换机、端口顺序查起。
5.2 道闸该开不开,该关不关
道闸不动作的排查顺序,我建议从最危险的地方往最安全的地方查:先确认急停按钮有没有被误按复位,再到接触器看有没有吸合,再到中间继电器看触点有没有烧黑,再到PLC输出点有没有电压输出,最后看程序里逻辑是否走到开闸分支。
中间继电器烧触点是我遇到最多的问题。现象是PLC输出信号正常、继电器线圈也吸合,但道闸电机就是不动,拿万用表一量继电器常开触点输出电压是0V,十有八九是触点烧了。原因是道闸电机启停频繁,触点拉弧疲劳。解决办法有两个:一是选择质量好的中间继电器,触点容量选5A以上;二是在触点两端并联RC吸收电路(阻容保护)来抑制拉弧。
5.3 地感线圈误报与雷击
地感线圈误报很大程度是施工工艺问题。线圈埋设要为方形,四角切45度倒角,防止直角处电缆应力过大切断线芯。每圈线要紧密绞合,不能散线。切割深度一般在30到50毫米,线径选择非屏蔽铜芯线。圈数根据检测器要求,一般2到4圈。多台道闸之间地感线圈间距要足够远,否则高频信号会互相串扰,产生误触发。
雷击损坏在露天停车场是常态。地感线圈是室外埋地导线,相当于一根巨大的天线,雷电感应电压会顺着信号线打坏车辆检测器,甚至通过PLC输入点打坏PLC。我的做法是在每个地感检测器输出端加信号防雷器,PLC柜体做好等电位接地,接地电阻尽量小于4欧。虽然不能百分之百防住直击雷,但对感应雷的防护效果非常明显。有条件的情况下,PLC电源输入端可以加隔离变压器,进一步减小雷击浪涌从电源侧窜入的风险。
5.4 几条不容易想到的经验
程序里做变量注释这个习惯,关键时刻能救命。有一次项目做完半年,甲方PLC程序卡在了一个不知道谁改动的位号上,我在远程排查时翻看注释,才想起来这个地址是当年测试阶段留着用的,程序上传下载时被某个工程师不小心恢复成了旧版本。没有注释,这个坑根本无从查起。
断电先于PLC保存程序。S7-200 SMART掉电丢失程序的情况不算多,但一旦发生很痛苦。我现在的习惯是每次现场调试完,必须做两件事:用编程软件上传一份程序存档到笔记本,同时把程序文件备份一份放到项目文件夹里,标注日期和版本。买一个带开关的导轨式端子或者在柜门上贴掉电顺序说明,提示现场电工“先断PLC电源,再断总闸”,成本极低但能避免很多悲剧。
最后再分享一个小技巧:道闸箱和PLC控制柜之间的连接线,不要用一扎多芯电缆直接拉过去,容易因为道闸启停时电机振动导致接线端子松动。线缆每隔一段距离做固定,端子处压冷压端子并打上号码管。第一次做项目时嫌号码管麻烦都没打,结果后面所有调试事故都花在了找线上。号码管一卷几十块钱,省下的时间能抵几十卷,这笔账怎么算都划算。