ARTICLE DETAIL

资讯详情

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

PLC+组态软件打造智能停车场收费系统:从选型到调试

PLC+组态软件打造智能停车场收费系统:从选型到调试 去年接了一个老客户的小型地下停车场改造项目120个车位一个入口一个出口。原来全靠人工开单、手工对账早晚高峰堵得一塌糊涂月底账目还能对出好几千的窟窿。客户提的需求很直接自动识别车牌、自动计时收费、道闸自动起落、岗亭能看实时状态、财务要能拉报表。我最后交付的就是一套以PLC做现场控制核心、组态软件做收费管理平台的方案——基于PLC和组态软件的智能停车场收费系统。这篇文章我把选型逻辑、硬件配置、PLC程序思路、组态画面开发、通信调试和踩坑记录从头到尾捋一遍适合做自动化项目或准备入行停车场系统集成的朋友参考停车场运营方也可以拿这套文章对照自己场子的需求。1. 项目为什么用PLC加组态软件这套方案1.1 传统人工停车场的三个老大难很多小型停车场至今还是最原始的人工模式入口保安发一张手写小票出口保安照着票面时间估算收费车主扫码或现金支付月底财务拿一沓票据对账。这种模式有三个普遍痛点。第一是收费漏洞。口头协商价格的“人情杆”、内部车不登记、临时车出场时司机说“进来不到半小时”而保安懒得核对每天都在发生。客户自己估算过人工收费状态下每个月流失的停车费少说有两三千块。第二是高峰拥堵。一个出口只有一个人操作扫码、找零、开闸全串在一起早晚上下班高峰期出口排长队是常态。车主一按喇叭保安一着急甚至会出现“先抬杆后收费”的情况。第三是数据不透明。收入多少、车流量多少、月卡到期名单全在保安和老板的脑子里。老板想查某一天的收入明细翻半天票据也凑不齐。运营者真正需要的是一套能自动记录、自动计费、自动生成报表的系统。1.2 为什么不是纯云平台或纯单片机方案有人会问现在市面上不是有大量“微信小程序云后台”的停车场系统吗价格还不高。确实纯云平台方案很方便但它的致命问题在断网。停车场道闸、地感这些设备属于现场控制层必须本地实时闭环一旦网络抖动、云端接口暂不可用整个停车场就瘫在门口了。用单片机方案确实也能实现抬杆落杆但单片机系统在稳定性、抗干扰能力、扩展性上明显不足地感线圈和道闸电机都是强干扰源单片机系统很容易误动作而且停车场要对接车牌识别相机、LED屏、语音模块、支付网关单片机做这种多设备协调开发量巨大。PLC加组态软件的组合恰好补上了这些短板。PLC是工业级产品适应恶劣环境抗干扰强输出直接驱动继电器稳定可靠组态软件跑在本地工控机上负责界面显示和数据管理即便外部网络断了基本收费流程依然能走通只是扫码支付这类依赖外部服务的功能暂时不可用。这套架构最大优势就是本地闭环、异常兜底、可扩展。1.3 PLC和组态软件的核心分工这套系统里PLC和组态软件各管一摊职责非常清晰。PLC负责所有现场逻辑采集地感信号、道闸限位、红外防砸信号控制道闸电机、红绿信号灯、语音模块做车位计数、防砸保护、手动紧急开闸。这些逻辑要求毫秒级响应必须由PLC本地完成。组态软件负责商务逻辑和交互收费计算、月卡查验、车牌库管理、停车记录查询、财务报表、设备状态监控。组态软件也承担了和车牌识别相机、支付网关、数据库对接的工作。一句话概括PLC是现场管家组态软件是办公室经理。管家保证现场不出事经手保证账目算清楚。两者通过以太网或者串口通信把现场状态和商务数据实时同步。这个分工也决定了后续硬件选型和程序设计的方向。2. 硬件选型与系统架构2.1 PLC选型30点以内中小型PLC足够动手之前先把现场IO点数盘清楚。这个项目两个通道每个通道的设备构成基本对称数字量输入这边每通道有入口地感、出口地感、道闸开到位限位、道闸关到位限位、防砸红外对射一共5个点两通道10个点再加岗亭紧急按钮、PLC柜门开关等预留点按12到14个输入算。数字量输出这边每通道有开闸信号、关闸信号或由开闸信号和限位配合实现、红绿灯控制两个灯算两个点、语音播报触发一共5个点两通道10个点再加声光报警器、预留备用点按12个输出算。总计数字量约26点加上20%的余量30点以内的中小型PLC完全够用。如果后面要扩展读卡器、地磁检测器再考虑加通信模块或扩展IO。实际选型时我对比了三款主流PLC。PLC型号IO扩展能力通信接口编程环境适合场景西门子S7-200 SMART最多扩展6个模块标配以太网口支持RS485Step 7 Micro/WIN SMART中小型系统首选生态成熟三菱FX3U最多扩展8个模块需另配通信模块GX Works2日系设备多、老用户升级汇川H5U本体IO丰富多网口支持Modbus TCPInoProShop支持Codesys风格国产化项目、成本敏感这个项目最终选了西门子S7-200 SMART的SR40继电器输出型。理由很实际自带以太网口组态王有官方S7-TCP驱动通信配置简单开发软件官方免费不需要额外买授权用户后续如果找第三方维护会西门子的人远多于会其他品牌的。继电器输出型还方便直接驱动道闸控制箱里的继电器不用像晶体管输出那样必须外接中间继电器虽然我建议都加中间继电器做隔离后面讲。2.2 外围设备车牌识别相机、道闸、地感、防砸红外硬件选型里PLC只是核心外围设备的选型同样关键。车牌识别相机是这套系统的眼睛。现在的一体化车牌识别相机基本都是摄像机加补光灯加识别算法集成识别结果通过TCP协议或者RS485输出有的型号还带IO输出。选型时要注意三点识别率是否支持新能源绿牌、是否有补光灯控制接口、输出协议是否方便二次开发。这个项目用的是支持TCP JSON输出的款式组态软件直接通过Socket读取识别结果不经过PLC尽量减少PLC的负担。道闸是执行机构核心参数是起落杆时间和杆长。停车场的直杆道闸起落杆时间常见1.5秒到3秒杆长约3米到4米。道闸控制箱里一般有开闸、关闸、遇阻反弹接口我们只需要把PLC输出点接到控制箱的干接点端子上通过继电器闭合来触发抬杆和落杆电气隔离由中间继电器完成安全可靠。地感线圈负责感知车辆位置原理是埋在地面下的线圈电感变化。入口地感、出口地感分别用来触发车牌抓拍和判断车辆是否通过。道闸下方还会各埋一组防砸地感当落杆过程中防砸地感被触发PLC必须立即停止落杆并抬杆这就是最基础的防砸保护。防砸红外对射作为地感的补充从道闸两侧对射检测落杆区域是否有人或障碍物。它和防砸地感形成双保险尤其能保护行人、骑电动车的人群因为地感线圈对金属物体敏感而人本身不产生足够大的电感变化。2.3 通信架构PLC、组态软件、相机之间怎么连这个项目的通信结构分三层。第一层是现场感知层地感、限位、红外信号通过硬接线接到PLC的输入端这部分不涉及协议就是开关量。第二层是设备控制层PLC的输出通过中间继电器控制道闸、信号灯、语音模块。硬接线的优点是实时性高、不怕协议不兼容。第三层是信息监控层PLC和组态软件走以太网使用西门子S7-TCP协议车牌识别相机也走以太网按TCP JSON协议把识别结果推送到组态软件组态软件再对接支付网关和本地数据库。这一层是数据交换的核心。再往大一点说如果停车场规模更大有多台PLC、多套出入口设备或者要对接第三方传感器、数控机床之类的设备就需要考虑用Modbus TCP统一采集或者通过OPC UA网关汇拢数据。Modbus和OPC UA是目前工业数据采集最常见的两种协议Modbus简单直接适合单台PLC和小系统OPC UA能跨平台、带安全认证、支持复杂信息模型适合中型以上系统做数据平台。这套停车场项目的初始版本还用不到OPC UA但我在组态软件里预留了OPC服务器接口后续扩展设备时不用推翻重来。3. PLC程序设计与收费逻辑实现3.1 停车场状态机设计停车场控制逻辑本质上是一个状态机。每个通道都处于某个状态当输入信号变化时按规则跳到下一个状态同时改变输出。入场流程是这样的车辆压到入口地感PLC收到地感信号同时车牌识别相机抓拍把识别出的车牌号发送给组态软件。组态软件查询车辆档案判断是临时车、月卡车还是内部车给出“允许入场”或“禁止入场”指令。PLC收到允许指令后输出开闸信号道闸电机抬杆。道闸抬到开到位位置开到位限位反馈。车辆向前行驶压过道闸内侧的另一组地感或者通过防砸地感区域PLC进行计数加一。车辆完全离开后道闸自动落杆关到位限位反馈入场通道回到待机状态。出场流程类似但多了一步收费车辆压到出口地感抓拍识别组态软件查询入场记录计算停车时长和费用。车主扫码支付或者岗亭现金收费。确认支付后组态软件下发放行指令PLC抬杆车辆通过后落杆。程序设计的关键是每个状态都要带超时保护。比如地感信号保持30秒以上说明车辆可能停在道闸下方不动了这时PLC要联动语音播放提示如果道闸抬杆后5分钟没检测到车辆通过说明可能是误触发PLC要把道闸状态复位防止一直抬着杆造成安全隐患。状态机写好后后面无论怎么改收费规则都只需要改组态软件那一侧PLC逻辑基本不动。3.2 道闸控制与防砸车保护道闸控制是整套系统里逻辑最敏感的部分因为涉及安全问题。道闸的启停不是简单的一开一关必须有多层保护。开闸条件这样定义组态软件下发允许开闸信号M区变量置位道闸当前不在开到位位置防砸红外没有被触发防砸地感没有被触发急停按钮没有被按下以上全部满足PLC输出开闸。落杆条件是车辆通过防砸区域并且道闸在开到位状态延时一定时间后开始落杆。防砸保护是重中之重。道闸落杆过程中如果防砸地感再次被触发或者红外对射被遮挡PLC必须立即执行两个动作停止落杆输出、反向抬杆到开到位。同时输出报警信号到组态软件让岗亭人员知道发生了异常阻挡。这套逻辑在现场调试时一定要反复验证不能省。梯形图思路用一句话描述就是置位一个“道闸开”内部继电器条件是开闸允许且无故障复位这个继电器的条件是有防砸信号或者收到落杆允许信号。防砸信号要用最高优先级直接强制输出抬杆不能只靠常规开闸条件里的“无防砸报警”否则在异常瞬间可能逻辑打架。3.3 车位计数与掉电保持车位计数的赋值逻辑看起来简单实际上有坑。如果只在道闸开闸的时候计数加一那么车辆倒车重新进场就会重复计数如果只依赖地感触发沿地感抖动也会造成误计数。我采用的做法是入口道闸处于“开到位”状态并且入口内侧地感检测到车辆通过两者同时满足才计数加一。出口同理。这样车辆在道闸下倒车再进不会产生新的一次计数。整个项目调试下来128个车位一天的计数误差控制在两三次以内对于显示剩余车位来说完全够用。掉电保持是停车场PLC经常被忽略的问题。车位数、当前的收费费率、月卡缓存这类关键数据断电后不能丢。西门子S7-200 SMART的V区在断电后默认保持所以我把车位数放在VW100把费率系数放在VW104。如果用三菱FX3U要注意D0到D8属于普通寄存器默认断电不保持必须在PLC参数里把这些地址设为锁存范围否则早上停电下午来电车位数直接清零入口会显示还有128个车位实际上可能早就满了。3.4 信号灯与语音联动入口信号灯的逻辑是车位数大于0且系统正常运行时绿灯亮红灯灭车位数等于0或者道闸故障时红灯亮绿灯灭。出口信号灯比较简单一般只做状态指示不参与收费逻辑。语音播报我分了两路一路在入口车辆识别成功后播报“欢迎光临”或“车牌识别成功”另一路在出口岗亭组态软件计算完费用后通过电脑音频播报“应收XX元”方便岗亭收费员操作。语音模块的触发我选择由组态软件直接控制因为播报内容跟收费金额强相关PLC那边拿到金额再转语音太绕了。方式上就是在组态里调用语音模块的动态链接库设置好文本内容组态软件直接播。4. 组态软件开发与收费界面实战4.1 组态软件选型为什么选组态王主流组态软件我常用三款组态王、西门子WinCC、昆仑通态MCGS。组态软件价格驱动丰富度报表能力适合场景组态王中等单机版不贵支持几乎所有主流PLC自带报表控件能导出Excel中小型项目性价比高西门子WinCC较贵授权复杂西门子设备通信最稳报表、归档、审计全面西门子大型产线或市政项目昆仑通态MCGS较低常见PLC都能支持触摸屏一体机方案成熟无人值守触摸屏终端这个项目用的组态王6.55。理由很直接价格合适S7-200 SMART驱动完善自带的命令语言和报表功能正好满足停车收费这个场景操作员、管理员两级权限也够用。WinCC当然更强大但对这种规模的停车场属于杀鸡用牛刀而且一台工控机一套授权的成本甲方不一定愿意出。4.2 组态与PLC变量对接的关键点组态王和PLC通信核心工作是在数据词典里建变量。以西门子S7-200 SMART为例通信驱动选择“S7-200 TCP”在设备配置里填入PLC的IP地址建议固定为192.168.1.10工控机网卡设为同一网段。变量定义要遵循一个原则PLC负责把状态写到固定的M区或V区组态软件从这些地址读取组态软件要下发的指令写到另一段M区PLC程序从这些M区读取并执行。两边都通过M区做命令中转不要直接从组态软件写Q区去控制道闸输出否则PLC程序和组态软件同时对输出点操作很容易出现竞争状态比如PLC刚把道闸置为开组态又发一个关指令逻辑就乱了。变量名类型连接设备地址读写方向注释入口允许开闸位M0.0PLC读组态写PLC扫描执行入口地感状态位I0.0组态读实时状态显示入口道闸开到位位I0.2组态读显示道闸姿态剩余车位数字VW100组态读PLC维护组态显示当前费率系数字VW104组态读PLC临时存储组态可改出口已出场信号位M1.0组态读供组态刷新车辆档案还有一个常见坑是变量类型不匹配。PLC侧VW100是字变量组态软件里如果定义成实数虽然驱动能收到数据但数值解释完全错乱。S7-200 SMART的V区是按字和字节组织的组态里读整数要用字变量读小数要用浮点变量还要确认PLC侧写的是整数还是浮点两边必须一致。4.3 收费界面与计费脚本收费岗亭的界面我做了四个主画面实时监控画面展示两个通道的道闸状态、地感状态、信号灯状态、剩余车位、今日进出车流量。值班人员一抬眼就能知道现场是否正常。收费操作画面这是核心操作页。车辆出场时组态软件从车牌识别相机拿到车牌号后自动查数据库在界面显示车牌号、入场时间、出场时间、停车时长、应收金额、支付方式选择按钮扫码支付/现金/月卡/免费。收费员确认后点击“确认放行”组态软件下发指令给PLC道闸抬杆。月卡管理画面维护车辆档案支持新增月卡车牌、设置有效期、续费充值、挂失黑名单。月卡车入场出场时组态软件自动识别并直接放行不产生费用。报表中心画面按日、按月统计收入包括临时车收费总额、月卡充值总额、免费放行次数、车流量曲线。组态王自带报表控件可以导出Excel财务月底对账直接从界面操作。收费计费逻辑我用组态王命令语言写在“确认收费”按钮里// 停车场收费计算示例 long t; // 停车时长单位秒 long hours; // 向上取整的小时数 float fee; // 应收金额 long days; t \\本站点\出场时刻 - \\本站点\入场时刻; if (t 1800) { // 30分钟内免费 fee 0; } else if (t 86400) { // 24小时内按小时计费每小时2元封顶30元 hours (t - 1800 3599) / 3600; fee hours * 2; if (fee 30) fee 30; } else { // 超过24小时按天计费 days t / 86400; fee days * 30; t t % 86400; if (t 1800) { hours (t - 1800 3599) / 3600; fee fee hours * 2; if (fee (days 1) * 30) fee (days 1) * 30; } } \\本站点\应收金额 fee;这里用整数运算实现向上取整不依赖外部函数兼容性好。实际费率参数我从PLC的VW104读过来方便客户以后自己改单价不用重新编译组态项目。4.4 月卡、白名单与免费策略配置车牌档案我放在组态王自带的SQL访问功能里背后是本地Access数据库。车辆档案表至少要有这几个字段车牌号、车辆类型临时/月卡/内部/黑名单、月卡有效期起始时间、月卡有效期结束时间、车主手机号、备注。组态软件每收到一个识别结果就查一次档案表。判断逻辑是车牌号在黑名单下发禁止开闸指令同时岗亭弹窗报警车牌号是月卡且有效期未过直接放行不计算费用车牌号是内部白名单直接放行不计算费用其他情况按临时车流程先计费再放行免费策略要特别谨慎。项目里有内部车和军警车免费的需求我建议不要在计费脚本里写死免费条件而是维护一张免费白名单表运营方自己可以增删。否则免费条件写死在程序里以后换人了改起来麻烦。5. 常见问题与调试实录5.1 Modscan能读串口数据但组态软件读不到调试串口通信时我遇到过一个很典型的场景用Modscan调试工具读取PLC串口数据完全正常寄存器地址、数据类型都对得上但同样的参数填到组态软件里信息窗口一直报错数据永远是零。这个问题单独拿出来讲是因为它几乎每个用Modbus串口做采集的人都会碰到。原因往往不在PLC侧而在组态软件的驱动设置上。第一种情况是串口参数不一致。Modscan默认用9600、8数据位、1停止位、无校验但PLC从站侧可能配置成19200甚至38400或者偶校验。Modscan能连上是因为Modscan侧自动适应了参数有些版本支持但组态软件驱动是严格按照你填的参数去连接的参数不对就建立不了通信。第二种情况是从站地址填错。Modscan调试时填的是从站地址1但组态软件设备配置里如果填成2要么连不上要么读到的寄存器是另一台设备的多从站总线场景。这个往往被忽略因为组态软件报错信息往往只显示“通信超时”不提示地址错误。第三种情况是寄存器功能码不匹配。Modscan读保持寄存器用的功能码03但组态软件里如果变量挂在输入寄存器功能码04下面恰好PLC侧的映射只有保持寄存器那组态软件自然读不到数据。最直接的排查方法在Modscan里分别尝试03、04、01、02四个功能码看哪个能读出预期数值然后到组态软件里把变量地址改成对应的寄存器类型。现象可能原因快速解决Modscan能读组态读不到串口波特率/校验不一致逐项核对串口参数组态信息窗口报“无响应”从站地址填错确认从站地址和PLC侧一致数据读出但全是0功能码或寄存器类型不匹配用Modscan交叉验证功能码偶尔能读频繁超时通信线过长或干扰降低波特率检查屏蔽双绞线接地如果是西门子S7-200 SMART这类原生PPI协议的PLC要特别注意PLC的编程口默认走PPI协议如果组态软件里选了Modbus驱动而PLC侧没有运行Modbus从站库Modscan能读到的数据往往是接在PLC扩展串口上的第三方Modbus网关设备而不是PLC本身。这就解释了为什么Modscan读得欢组态软件读自己的PLC却失败。5.2 道闸不动作、乱动作道闸不动作最常见的是接线问题。S7-200 SMART继电器输出型相对简单输出点一端接公共端COM一端接道闸控制箱的开闸端子。但很多人忽略了继电器输出点只能带小电流直接接道闸控制箱的强电回路线圈会把PLC输出触点烧掉。规范做法是先经过中间继电器中间继电器的触点再去控制道闸控制箱内的信号回路。道闸乱动作则多半出在防砸信号误触发。红外对射安装位置如果不平行或者道闸杆在落杆过程中反光会造成误遮挡PLC收到虚假防砸信号道闸就反复抬杆落杆。调试时我用组态软件把防砸红外状态做成实时监控画面专门观察几分钟内信号有没有抖动如果有抖动就先调对射角度和灵敏度再谈防砸逻辑。地感线圈的铺设也有讲究。线圈太小或匝数不够车辆高速通过时可能检不到线圈太大邻道车辆经过也会触发。这个项目里的入口地感我们做了两次测试第一次匝数绕了4圈结果摩托车经过时没有反应后来改成6圈才稳定。5.3 断电重启后状态错乱停车场最怕半夜断电。断电后PLC停止运行道闸可能停在半空来电后PLC重新上电如果程序里没有初始状态处理道闸会保持断电前的输出状态继续动作非常危险。我的做法是PLC上电时做初始化强制道闸输出复位让道闸回到默认状态入口信号灯设为绿灯但显示“系统启动中”等组态软件连接后下发确认信号PLC再切换到正常运行模式。组态软件也设成开机自启动工控机一开机自动加载工程自动连接PLC。收费数据断电丢失是另一个隐患。组态软件里的收费记录不能攒到一个小时后统一写数据库必须每完成一笔收费立即写SQL这样即使断电数据库里已有的记录都在。PLC侧的车位数放在掉电保持区来电后自动恢复。5.4 车牌识别不准车牌识别不准会直接导致收费争议。识别率不高的原因通常是夜间补光灯角度不对、车道位置导致抓拍角度过大、以及识别置信度阈值设置过高。夜间灯光问题最难排查。我遇到过识别率从白天98%掉到晚上70%的情况最后发现是补光灯正对车牌反光严重白牌过曝导致字符模糊。解决办法是调整补光灯角度让光线斜打在车牌上并且降低补光灯亮度。车牌识别相机安装高度在1.2米到1.5米俯仰角度在15到25度之间效果比较好。关于识别置信度阈值我的经验是宁可设低一点、多识别也不要设太高、漏识别。识别错了岗亭至少能看到画面人工核对漏识别则车辆完全出不了场耽误时间还容易引发投诉。项目上线初期我在组态软件里做了一个“人工二次核验”弹窗置信度低于设定值的车牌系统自动转到人工确认队列收费员看图片后手动修正车牌号再继续计费。5.5 组态软件和PLC时间不同步停车计费以时长为依据时间必须准确。组态软件跑在工控机上时间一般没问题但PLC内部时钟如果主板电池没电重启后可能回到2000年导致道闸逻辑里所有基于时间的判断全部混乱。对策是组态软件在每次启动后自动把工控机的当前时间写入PLC的时钟区。S7-200 SMART有读写时钟指令库组态软件通过写V区触发PLC执行同步指令几分钟内完成。这也提醒了一个问题PLC程序里尽量不要依赖自身时钟做收费计算计时以组态软件记录的时间戳为准PLC时钟只做辅助。最后再补充几句这套系统做完之后我的体会是PLC编程、组态画面开发、车牌识别相机调试单拎出来每一项都不算难真正花时间的是把三个环节完整咬合在一起。整个项目调试周期大概两周其中现场信号调试占了几乎一半——地感、限位、防砸红外这些最底层的信号只要一个不干净上面所有的收费逻辑都白搭。如果新手想复刻这套系统我建议先做一件事在组态软件里连PLC仿真器把入场、出场、收费、防砸这几条主流程全部走一遍确认状态机没有死锁再进现场接线。仿真阶段发现逻辑问题改程序只要几秒到现场才发现问题改一次逻辑配合测试至少半天。这套系统跑顺以后后续加反向寻车、车位引导、电子发票这些功能都是在现有架构上做加法。PLC的通信接口和组态软件的数据库接口都预留好了扩展起来很省事。停车场的智能化说到底不是堆设备而是先把道闸、地感、计费这些基本功练扎实再往上层叠加服务。
返回列表