基于PLC和组态软件的智能停车场收费系统停车场电气控制停车场入口的ETC识别杆刚抬起后车司机已经不耐烦地按起了喇叭。这种场景每天都在传统停车场重复上演而我们要搞的智能收费系统就是来治这个路怒症的。整套系统用西门子S7-1200 PLC当大脑搭配WinCC组态软件做交互界面咱们今天就来拆解这个自动化停车场的神经脉络。先看硬件接线。地感线圈的信号线接入PLC的DI模块时常会遇到信号抖动问题。这时候在梯形图里加个延时滤波才是正解NETWORK 1 LD I0.0 // 地感线圈输入 TON T37, 50 // 50ms延时 AN T37 // 取反 OUT Q0.0 // 稳定输出信号这个定时器就像个尽职的保安把那些探头误触发的假车牌都拦在门外。调试时要是发现道闸反应慢半拍记得把T37的时间参数往下调建议从20ms开始试。收费逻辑这块最烧脑。我们的算法要根据停车时长玩阶梯价用SCL语言写起来比梯形图更带劲FUNCTION_BLOCK ParkingFee VAR_INPUT enterTime : DT; exitTime : DT; END_VAR VAR_OUTPUT totalFee : REAL; END_VAR VAR duration : TIME; hours : REAL; END_VAR duration : exitTime - enterTime; hours : T_CONV(duration, REAL) / 3600.0; IF hours 0.5 THEN totalFee : 0; // 半小时免费 ELSIF hours 2 THEN totalFee : 5.0; ELSIF hours 8 THEN totalFee : 5.0 (hours - 2) * 2.0; ELSE totalFee : 20.0; // 封顶价 END_IF;这个函数块在OB1里每秒钟执行一次实时计算费用。调试时发现个坑——PLC的DT类型是西门子特有的DATEANDTIME格式和WinCC的时间戳对接时要记得做格式转换不然会算出负数停车时长。基于PLC和组态软件的智能停车场收费系统停车场电气控制组态界面才是门面担当。WinCC的画面编辑器里我给每个车位都做了动态颜色标记。当车位被占用时对应的矩形框会从绿色渐变到红色这个效果用VBS脚本实现Sub Rectangle_Color() Dim occupancy occupancy GetTagValue(ParkingSpace1) If occupancy 1 Then RGBFrom RGB(0, 255, 0) RGBTo RGB(255, 0, 0) Else RGBFrom RGB(200, 200, 200) RGBTo RGB(150, 150, 150) End If Object.BackColorGradient RGBFrom Object.BackColorGradient2 RGBTo End Sub调试这个功能时WinCC的运行系统差点被我搞崩——颜色渐变效果别用在超过50个动态对象上不然工控机的显卡可能比收费员的脸色还难看。系统联调那天最刺激。当第一辆车压上地感线圈时PLC的DI灯疯狂闪烁但道闸死活不抬杆。掏出万用表一量发现24V电源被接到常闭点了。这告诉我们干自动化这行永远别相信接线工的颜值带电验线才是保命符。现在这系统在城南商业区跑了半年收费误差率从人工时的8%降到了0.3%。不过上周有个BUG挺有意思——某辆特斯拉的自动驾驶非要跟我们的车位指示灯较劲摄像头把闪烁的LED误认成交通信号灯了。最后在PLC程序里加了随机延时闪烁才搞定果然再智能的系统也斗不过玄学。