首页 / 资讯中心 / 文章详情

西门子S7-1200博途仿真停车场车位控制系统开发详解

西门子S7-1200博途仿真停车场车位控制系统开发详解 ★ FEATURED ARTICLE
我们做自动化项目的十有八九都绕不过停车位管理这个经典场景。这次用西门子1200配合博途TIA Portal环境把停车场车位控制系统完整做了一遍从PLC程序到HMI画面设计再到仿真联调每一步都踩过坑、填过土。这篇就把整套流程、设计思路、实操细节原原本本分享出来尤其把仿真环境里那些“看着没问题就是不工作”的坑点全部列出来给后面做类似项目的朋友做个参考。先说清楚这套系统是基于S7-1200的博途仿真PLC程序和HMI画面都是虚拟环境里跑的。也就是说你不需要真买一套硬件一台装了博途软件的电脑就能完成全部开发验证。这对学生做课程设计、工程师做方案验证、甚至想入门PLC编程的朋友来说都是成本最低的一条路。HMI画面设计是本项目的重头戏后文会逐页拆解每一个画面的布局、功能、控件配置和背后的设计逻辑。1. 内容整体设计与思路拆解1.1 停车场车位控制的核心需求停车场车位控制系统听着复杂拆开看核心就三个词检测、控制、显示。检测是知道车位有没有车控制是管理进出口和引导指示显示是让用户和管理员都能直观看到状态。具体到本项目车位规模设计为16个编号从1到16。系统需要实现三大功能模块入口控制车辆到达入口检测有车请求判断场内是否有空位有则放行抬杆无则拒绝红灯禁行提示。车位检测与指示每个车位配一个光电/接近传感器实时检测占用状态每个车位上方或入口处设置指示灯空闲绿色、占用红色。HMI监控管理员在触摸屏上实时查看16个车位的状态、进出车辆计数、系统运行状态并能手动干预比如强制抬杆放行紧急车辆。这个需求放在真实停车场里对应的是车位引导系统和出入口道闸联动系统。做这个项目时我建议先别急着写代码把I/O表和系统流程图拉出来这是后面所有工作的基准。1.2 方案选型为什么用西门子1200博途当前市面上PLC家族很多三菱FX系列、汇川AM系列、西门子S7系列都有各自的拥趸。选西门子1200主要是三个原因一是软件生态完整。博途TIA Portal一套软件搞定PLC编程、HMI组态、仿真联调不需要像老方案那样PLC用Step7、触摸屏用WinCC flexible分开搞。特别是博途V16以上版本S7-1200和HMI的仿真可以无缝对接这在教学和方案验证场景里非常香。二是S7-1200性价比高。作为西门子中小型PLC的主力CPU 1214C自带14路DI/10路DO本项目16个车位传感器输入加若干控制输出刚好够用不需要额外扩展模块。即使实际场景车位更多加一个SM1221/1222数字量模块也就解决了。三是仿真能力成熟。博途自带的PLCSIM配合S7-PLCSIM Advanced可以实现PLC程序的离线仿真配合HMI的Simulation功能一台电脑就能完成整个系统的虚拟联调。这套流程做熟了现场调试的时间能压缩一半以上。有人可能会问为什么不用三菱GX Works或Codesys没有贬低谁的意思这类课程设计或方案验证项目选西门子体系自然有教学资源多、社区案例丰富、遇到问题好查资料这些无形优势。对于新手来说遇到报错能找到解决方案比什么都重要。1.3 系统架构与控制流程系统整体架构分三层现场设备层16个车位传感器数字量输入、入口地感传感器、出口地感传感器、入口道闸电机控制、出口道闸电机控制、入口指示灯红/绿、出口指示灯红/绿、16个车位指示灯。控制层S7-1200 PLC完成所有逻辑运算、计数统计、状态判断。监控层HMI触摸屏显示车位状态、统计信息、报警信息支持手动控制。控制流程设计上我遵循“先判断、后动作、再反馈”的闭环思路车辆到达入口 - 入口地感信号ON - PLC判断空闲车位数量是否大于0 - 充足则入口绿灯亮、道闸抬升、车辆进入 - 车辆经过出口地感时计数器加1 - PLC自动分配一个最近空闲车位 - 车位指示灯由绿变红 - 道闸落下定时或车辆通过后延时。出车流程正好相反出口地感检测到车辆 - 道闸抬升放行 - 计数器减1 - 对应车位释放 - 指示灯由红变绿。这里有个设计细节值得说明车位和车辆的绑定关系。简单做法是只统计数量不精确到具体车位。进阶做法是“入口分配车位号”即入口抬杆时HMI和现场指示牌直接显示“请驶入5号车位”这个引导逻辑会让系统体验好很多。本项目采用了进阶做法PLC内部用了一个16位的车位状态字16个BOOL量组成数组程序自动从1号开始搜索第一个空闲车位分配后置ON释放后置OFF。2. 核心细节解析与实操要点2.1 I/O地址分配与变量表规划整个系统能不能顺利跑起来I/O分配是第一个关键点。这个表在纸上画错了后面程序里到处都是隐患。我用的CPU是1214C DC/DC/DCDI地址从I0.0开始DO从Q0.0开始具体分配如下信号类型地址说明数据类型入口地感开关I0.0车辆到达入口信号BOOL出口地感开关I0.1车辆到达出口信号BOOL1-8号车位传感器I0.2-I1.1各车位占用检测BOOL9-16号车位传感器I1.2-I2.1各车位占用检测BOOL入口道闸电机Q0.0抬杆/落杆驱动BOOL出口道闸电机Q0.1抬杆/落杆驱动BOOL入口绿灯Q0.2允许进入指示BOOL入口红灯Q0.3车位已满禁止进入BOOL出口绿灯Q0.4允许驶出指示BOOL车位指示灯1-8Q0.5-Q1.4对应车位状态BOOL车位指示灯9-16Q1.5-Q2.6对应车位状态BOOL在博途里建变量表时建议直接建一个PLC变量表把所有I/O信号用带有语义的名字命名比如Sensor_Car_Position_01代表1号车位传感器Light_Car_Position_01代表1号车位指示灯。千万别用默认的I0.2、Q0.5这种裸地址去写程序那样程序读起来就是天书后期维护看到能哭出来。另外还要规划一组DB块变量用于中间逻辑Available_SpacesINT类型当前空余车位数量。Car_Count_TotalINT类型累计进入车辆总数。Entry_RequestBOOL类型入口请求信号由入口地感和防重复触发逻辑共同决定。Gate_Status_EntryBOOL类型入口道闸状态TRUE抬杆中。这些变量不仅要给PLC程序用还要映射到HMI画面建变量时名称务必和HMI端保持一致减少后面联调的对地址环节。2.2 控制逻辑的程序分段设计写PLC程序最忌一个OB1里堆几百行迷宫逻辑。我的习惯是“按功能分段、用FC封装”把程序拆成几个功能块每个块职责单一调试时可以单独看某个功能是否正常。本项目把程序拆成五个部分2.2.1 车位传感器信号处理FC_Car_Sensor16个车位传感器信号进来后先不做复杂逻辑只做一件事把原始传感器值Sensor_Car_Position_01到_16同步到DB块里的一组中间变量Pos_Occupied[1]到Pos_Occupied[16]中。同时实时统计ON的数量计算出Available_Spaces 16 - ON数量。这里要注意传感器抖动问题。真实场景中光电传感器在车辆到位瞬间会有信号抖动容易导致误判。实操中我用了一个0.2秒的定时器做信号稳定滤波连续0.2秒检测到ON才认为车位被占用配合博途的上升沿指令R_TRIG做边沿检测能有效避免误动作。仿真场景下虽然传感器信号是手动模拟的但程序里滤波逻辑保留着以后移植到真实环境就是直接能用的。2.2.2 车辆进出判断与道闸控制FC_Gate_Control这是系统最核心的逻辑。入口方向处理流程如下读取Entry_Request入口地感I0.0的上升沿触发。判断Available_Spaces 0满足置位入口道闸抬升输出Q0.0入口绿灯Q0.2亮红灯灭。同时调用“车位分配逻辑”见下找出一个空闲车位号把车位号传给HMI显示“请停放X号车位”。不满足入口红灯Q0.3闪烁绿灯灭道闸不动作。车辆通过入口地感进入后地感信号从ON变OFF下降沿触发道闸落杆Q0.0复位。落杆时间我用的是延时断开定时器TONR设置5秒。原理是车辆从车头压到地感到车尾完全通过地感一般需要2-4秒延时5秒保证车身完全通过再落杆避免砸到车顶。2.2.3 车位分配算法FC_Assign_Slot搜索策略采用“始终分配编号最小的空闲车位”。用FOR循环从索引1到16遍历Pos_Occupied[]数组找到第一个FALSE返回该索引作为分配车位号并把这个位置写入变量Assigned_SlotINT类型同时HMI端对应显示。有两点需要说明为什么不设计成“距离入口最近优先”因为实际停车场里车位可能在不同楼层或区域简单按编号最小分配逻辑简单且直观作为教学验证项目完全够用。要做区域引导的话得额外加区域划分变量和优先级表复杂度会明显上升。分配的车位在车辆真正停进去之前只是“预分配”并没有锁定。这意味着如果司机开进去没停到指定位置而是停了另一个空位系统以车位传感器为准更新状态。这个设计是符合停车场实际运行逻辑的毕竟你没法强制司机停哪。2.2.4 系统计数器与统计FC_Statistics计数这块我做了两个统计变量Car_Count_Total入口抬杆放行次数入口请求有效且抬杆动作完成的上升沿计数。Exit_Count_Total出口道闸抬杆次数。系统正常运行时Car_Count_Total - Exit_Count_Total应该等于当前占用车位总数这个值可以和16个车位传感器的占用数量做交叉校验两边的差值大于0就说有计数异常。HMI画面上专门有一块区域展示这个差值并标红报警这个设计是实际调试中发现了“车辆中途驶离未通过出口道闸”这类场景后补上的实用性很高。2.2.5 HMI手动控制接口FC_Manual_Control考虑到紧急车辆放行、设备测试等需求HMI上提供了手动控制模式。手动模式下可以强制抬杆、强制落杆、可以单独控制某个车位指示灯。程序设计上用了“手动优先”原则一旦HMI手动模式开关置ON自动逻辑的道闸控制输出被切断由手动按钮直接联动输出。这个逻辑实现非常简单一个Manual_ModeBOOL开关加几个中间变量然后在输出映射处做选择IF Manual_Mode THEN Q0.0 : Manual_Gate_Up_Entry; // 手动抬杆 Q0.1 : Manual_Gate_Up_Exit; ELSE Q0.0 : Auto_Gate_Up_Entry; Q0.1 : Auto_Gate_Up_Exit; END_IF;2.3 博途仿真环境搭建的预备工作这里必须先说清楚博途仿真分几层很多新手容易迷糊PLCSIMS7-PLCSIM用于S7-1200/1500的纯逻辑仿真就是模拟PLC运行程序你可以强制输入、监控变量但它不带HMI仿真能力。HMI仿真Simulation博途组态好的HMI画面可以直接启动软件仿真画面和控件都能操作但它需要和PLCSIM建立连接才能读到PLC变量。PLCSIM Advanced更高级的仿真器用于S7-1500/1200的仿真通讯比如和外部程序C#、Python通过API通讯或者模拟网络通讯场景。这个对纯HMI联调不是必须的。本项目用PLCSIM配合HMI Simulation就足够了。实操步骤后面第4章详写这里先提一个关键点博途V16以上版本的HMI仿真和PLCSIM之间是自动建立连接关系的前提是你在项目树里把HMI和PLC变量做好关联并且HMI的设备地址和PLC仿真地址在同网段。真实项目中HMI和PLC是通过Profinet网线连接的HMI设备组态时IP要设在PLC的同一个网段比如PLC是192.168.0.1HMI就设192.168.0.2。仿真时这个IP约束不存在但变量连接关系一定要对否则HMI画面上全是“###”或“连接断开”的报错。3. 实操过程与核心环节实现3.1 博途项目新建与硬件组态打开博途V16或更新版本选择“新建项目”命名ParkingLot_Control_System。在项目树里进入“添加设备”选控制器型号SIMATIC S7-1200CPU 1214C DC/DC/DC订货号6ES7214-1HG40-0XB0V4.0以上固件。博途里不同版本固件对指令集有影响建议选最新支持的版本。硬件组态时默认会生成一个Profinet接口设置PLC的IP地址为192.168.0.1子网掩码255.255.255.0。这个IP在后面HMI连接时要用。然后添加HMI设备选“SIMATIC HMI”比如TP700 Comfort或精简系列面板KTP700 Basic。HMI的IP地址设为192.168.0.2。如果用的是精简面板组态时直接选Basic Panel系列即可功能上对画面切换、变量显示、按钮操作完全够用而且画面更简洁适合这个项目。HMI组态完毕后组态里面有个“连接”设置需要在HMI的“设备和网络”视图中新建一条Profinet连接连接对象选PLC_1。通信协议用S7协议Optimized即可博途默认会建好。3.2 用户程序编写实现程序块结构如下程序块类型功能OB1组织块主程序循环调用各FCFC_Status_Monitor函数车位状态刷新与计数FC_Gate_Control函数进出口道闸控制逻辑FC_Slot_Assign函数空闲车位搜索分配FC_Statistics函数进出计数与异常校验FC_Manual_Control函数手动模式切换DB_Global_Data全局数据块共享变量存储OB1里按照采样周期循环调用以上FC。FC之间通过全局DB块交换数据每个FC内部也有局部变量做中间逻辑互相不干扰。这里给出一段核心的车位资源分配代码供参考STL/SCL可互相转换我用SCL写的// FC_Slot_Assign搜索第一个空闲车位 FUNCTION FC_Slot_Assign : INT VAR_TEMP i : INT; END_VAR // 默认返回0表示无空位 FC_Slot_Assign : 0; // 从1到16搜索第一个空闲车位 FOR i : 1 TO 16 DO IF NOT DB_Global_Data.Pos_Occupied[i] THEN FC_Slot_Assign : i; DB_Global_Data.Assigned_Slot : i; EXIT; // 找到即退出循环 END_IF; END_FOR;这段逻辑的核心是EXIT跳出循环避免无谓遍历。如果返回0HMI端就要显示“车位已满”。道闸控制逻辑的SCL写法// 入口控制 IF DB_Global_Data.Entry_Request AND NOT DB_Global_Data.Manual_Mode THEN IF DB_Global_Data.Available_Spaces 0 THEN DB_Global_Data.Auto_Gate_Up_Entry : TRUE; DB_Global_Data.Entry_Red_Light : FALSE; DB_Global_Data.Entry_Green_Light : TRUE; FC_Slot_Assign(); // 触发车位分配 ELSE DB_Global_Data.Auto_Gate_Up_Entry : FALSE; DB_Global_Data.Entry_Red_Light : TRUE; DB_Global_Data.Entry_Green_Light : FALSE; END_IF; END_IF; // 入口地感下降沿 - 延时落杆 IF DB_Global_Data.Entry_Request AND NOT DB_Global_Data.Entry_Request_Prev THEN // 上升沿抬杆 ELSE // 延时5秒后落杆 END_IF;3.3 HMI画面设计全过程HMI画面是整个项目的门面也是本次需求的重中之重。我在TP700面板上设计了4个主画面通过底部导航按钮切换。3.3.1 主监控画面画面编号001主监控画面是系统默认首页布局如下顶部标题栏显示“停车场车位控制系统”下方一行显示当前时间和日期。中间一个4行×4列的16宫格区域每个格子代表一个车位。格子内显示车位编号、车位状态绿色底空闲、红色底占用状态用背景颜色和多边形填充变化实现。这个功能的实现原理是画面放置一个代表车位的矩形对象设置其“背景颜色”属性关联到对应车位变量——Pos_Occupied[i]为TRUE时背景变红FALSE变绿。右侧一个大字体的“剩余车位”显示框关联Available_Spaces变量用“N / 16”的格式显示。底部一排导航按钮分别是“主监控”“手动控制”“报警记录”“运行统计”。关于16宫格的实现技巧不要画16个独立的矩形然后逐个关联变量那样效率太低。更好的办法是做一个“车位显示模板”——画好一个矩形和文字标签后整组选中复制修改每个副本的变量关联属性即可。博途支持对矩形对象的属性做变量关联右键点击矩形在属性-外观-背景颜色里选“变量连接”把变量选到对应的Pos_Occupied[i]。3.3.2 手动控制画面画面编号002这个画面给管理员提供干预能力分三个区域道闸控制区两个按钮“入口抬杆”“入口落杆”两个按钮“出口抬杆”“出口落杆”。按下按钮时置位对应的手动控制中间变量。按钮的“模式”建议选“取消按下的状态”这样不会卡住一直输出避免误操作导致道闸长时间打开。车位指示灯控制区16个小型按钮每个按钮控制一个车位的强制指示灯。其实实际项目里车位灯是和传感器联动的这里手动控制更多是给运维人员测试用。模式切换区一个“手动/自动”切换开关关联Manual_Mode变量。这个开关置ON时自动逻辑的输出连接被切断。为了防止误切换导致现场混乱我在画面里加了一行红色警告文字“手动模式已启用自动逻辑已断开”这行文字通过Visibility属性关联Manual_Mode变量TRUE时可见。3.3.3 报警与事件画面画面编号003报警画面用博途的“报警视图”控件实现配置报警变量和触发条件。报警类型分两种系统诊断报警PLC模块故障、HMI断线仿真时偶尔出现属正常。用户自定义报警车位已满触发条件Available_Spaces等于0、计数异常Car_Count_Total减去Exit_Count_Total不等于16个车位占用总数差值超过2时报警、进出口道闸超时道闸抬杆或落杆动作超过10秒未完成。自定义报警的配置路径在项目树找到HMI设备下的“HMI报警”右键选择“新建报警”。触发条件直接用PLC变量作为触发标签例如“Available_Spaces 0”即可。报警画面上还放了一个“报警确认”按钮作用是把报警状态变为“已确认”方便区分新报警和历史报警。手动控制画面里操作产生的报警比如手动模式启用也在这里记录方便事后审计。3.3.4 运行统计画面画面编号004统计画面用数值显示框和趋势图表构成数值区累计进入车辆数Car_Count_Total、累计驶出车辆数Exit_Count_Total、当前在场车辆数差值计算、系统运行时间用PLC的系统时钟秒值换算成“XX天XX小时”显示在文本框中。趋势区用HMI的“趋势视图”控件画一张折线图横轴是时间纵轴是车位占用率0-100%。趋势显示的数据源是PLC里一个名为Cur_Occupy_Percent的INT变量程序里每10秒把当前占用率写入该变量并启用历史记录功能这样HMI就能读取历史数据画出曲线。做趋势视图时有个坑博途精简面板的“趋势视图”控件有点弱曲线刷新速度慢。实测下来把采样周期从默认的1秒改成10秒画出来的曲线反而更平滑而且CPU占用率更低。这个经验可以类比到所有HMI趋势图设计中——采样过快没实际意义反而造成画面卡顿。3.4 仿真联调全流程操作这台系统的联调步骤我按开发顺序来排每步都验证通过再往下走第一步启动PLCSIM。在博途项目树中右键点击PLC_1选择“仿真-启动”系统会自动编译程序并启动PLCSIM。如果弹出“是否存在多个PLC_1”选项选你要仿真的那台就行。PLCSIM窗口打开后把“模块状态”显示为RUN绿指示灯。这里必须提醒一个常见问题PLCSIM启动后程序默认不是RUN状态如果你不手动点击“RUN”按钮程序不会执行。很多人卡在这一步HMI连上去看到变量全不刷新就是因为PLC仿真停在STOP状态。第二步启动HMI仿真。项目树中右键点击HMI设备选择“仿真-启动”。HMI会自动编译组态并弹出仿真画面。首次启动可能会提示找不到HMI连接或需要选择PLCSIM实例正常情况它会自动关联到已运行的PLCSIM。一个细节HMI仿真窗口弹出后如果画面角落显示“连接中断”或全屏“###”先检查两个东西一是HMI运行系统设置里的“设备地址”是不是192.168.0.2二是PLC的IP是不是192.168.0.1两边不一致连接就不成功。第三步手动模拟输入信号。PLCSIM窗口左侧可以找到“输入变量”表如果没显示在菜单栏“在线工具”里找“监视表”或“强制表”。在监视表里把I0.0入口地感置为TRUE观察HMI画面入口绿灯是否变亮。把I0.21号车位传感器置为TRUE观察1号车位方块变红、剩余车位列表减少1。这一步是整个联调的关键验证点。如果PLC内部逻辑有问题这个环节暴露出来最直接。第四步反复模拟进车/出车全流程。手动按顺序操作监视表I0.0入口地感置TRUE再置FALSE模拟一辆车到达并进入观察HMI画面剩余车位数减少某车位变红累计进入车辆数加1I0.1出口地感置TRUE再置FALSE模拟车辆驶出观察HMI画面剩余车位数恢复对应车位变绿累计驶出车辆数加1。如果出现“车位变红但剩余车位没变化”这种逻辑不一致优先检查FC_Status_Monitor里的统计逻辑——统计和状态显示不能各算各的必须用同一条数据链即Available_Spaces必须是从Pos_Occupied[]数组实时统计出来的而不是独立维护一个加减计数。3.5 HMI画面与PLC的变量连接配置HMI变量连接是HMI开发中最容易翻车的一环说几个经验第一HMI变量要建在“HMI变量表”中类型必须和PLC变量类型一致。比如Available_Spaces在PLC里是INTHMI变量也得是INT差一个字节都可能读不到数据。PLC里的BOOL类型对应HMI的BOOL没问题。INT对应16位整数。博途里还有个“Variant”类型但那个主要用于脚本普通画面不建议混用。第二画面对象的属性连接方式有两种直接连接变量或通过“动态文本”间接连接。直接连变量是常规操作在对象的属性页里找到目标属性如背景颜色点击右侧的“变量”下拉按钮选择“使用变量”然后在弹出的对话框选HMI变量并且选择“PLC变量”页签下的变量意思是这张画面直接从PLC读变量。第三有些属性比如按钮的“可见性”支持布尔表达式关联你就可以写Available_Spaces 0这种逻辑表达式。这个功能挺好用比如车位满了之后让“禁止驶入”图标自动显现就是设置可见性属性为Available_Spaces 0。第四注意画面切换按钮的设置。导航按钮的本质是“切换画面”系统函数在按钮属性里选择一个“系统函数”为“ActivateScreen”目标画面填002、003等。这个操作和普通功能按钮完全不同别搞混。4. 常见问题与排查技巧实录做仿真联调问题集中在五类PLC启动不了、HMI连不上、变量不刷新、按钮没反应、PLCSIM Advanced起不来。逐个说排查方法。4.1 PLCSIM启动失败或PLC不运行现象点击仿真启动后PLCSIM窗口弹出报错或者窗口里PLC一直显示STOP点RUN没反应。排查顺序检查项目编译是否通过。在博途主界面左下角“编译”输出窗口看有没有错误。程序有错误时PLCSIM拒绝加载这是最常见的。检查PLCSIM版本和博途版本是否匹配。博途V16配套PLCSIM V16博途V17配PLCSIM V17版本不一致会出现各种莫名问题。检查PC用户名是否含中文。西门子软件对Windows用户名为中文或带有特殊字符的路径很敏感实测中文路径会导致PLCSIM无法加载PLC实例报错不明。建议用纯英文的Windows账户。点RUN后如果指示灯变黄或红打开PLCSIM菜单里的“诊断”视图看“模块状态”里的错误代码。常见的是“CPU被放置在STOP因为一个编程错误”这时候需要回到博途程序的调用堆栈里找错误点。4.2 HMI仿真按钮无反应这是热词里出现频率很高的问题我特别说明。按钮按下去画面上的变量不变化原因有几种变量连接未生效按钮的事件属性里选择的变量没有正确关联。检查方式双击按钮看“属性-事件-按下”选项卡里执行的是否是“置位位”系统函数操作数的PLC变量是否选对。如果选了“系统函数”而不是按钮的“功能”按钮就不会有任何效果。PLC程序里手动/自动模式未切换如果你在HMI手动画面里按了“抬杆”但PLC程序里没有走手动分支输出当然不变。先确认HMI手动模式开关已经置ON且Manual_Mode变量已经变成TRUE。仿真过程中变量类型不匹配HMI按钮置位的BOOL变量在PLC变量表里如果被定义为内部BOOL没问题如果定义成外部I变量置位无效。手动控制变量一定在DB块里定义不要直接去置位I区。4.3 HMI画面显示“###”或数值不刷新画面上的数值显示变成“###”只有两种情况数字溢出或连接断开。项目里数值都很小不会溢出那就是变量连接断了。处理路径在HMI画面空白处右键选择“属性”面板找到“运行系统设置-设备地址”确认和PLCSIM仿真的PLC在同一网段。然后检查项目树里HMI设备下的“连接”配置确认《PLC_1_连接_1》存在且激活。连接检查后如果还不行试一下删掉HMI设备和PLC设备重新添加。要注意次序必须先在网络中建立HMI和PLC的Profinet连接再在HMI画面里做变量关联顺序反了偶尔会出现幽灵连接。4.4 S7-PLCSIM Advanced启动后PLC实例无法运行Advanced和普通PLCSIM是两回事。Advanced用来仿真带通信能力的场景但它对电脑性能要求高而且经常出现启动不了的情况——实例创建成功但状态一直是“S”点Start没反应也没有报错弹窗。这种问题的原因按我的排查经验按概率排列防火墙拦截了PLC实例的内部通信端口把防火墙关闭再试内网环境可以临时全关。PLCSIM Advanced实例使用了物理网卡的IP。打开Windows的网络设置看设备管理器里有没有“Siemens PLCSIM Virtual Ethernet Adapter”这个虚拟网卡没有的话重新安装PLCSIM Advanced组件安装时务必勾选虚拟网卡驱动。电脑上装了多个版本的PLCSIM或Simulation Manager版本冲突。卸载低版本保留一套最新版。4.5 博途安装过程中的“许可证确认后变灰卡住”装博途时遇到过安装界面停在“接受许可证”那一步按钮点击后变灰色没反应程序卡死。这个问题的根源是安装程序缺少“基本优化”或操作系统缺少某个组件而且Windows防火墙服务没启动也会卡住。解决办法右键“接受许可协议”界面的安装程序选择“以管理员身份运行”。关闭所有杀毒软件和Windows Defender实时保护安装完再开。确认Windows Installer服务msiserver正在运行服务没启动的通过services.msc手动启动后再装。如果还是卡住打开任务管理器看安装进程状态如果CPU占用为0且持续超过10分钟基本可以确认安装程序挂死直接结束进程然后重启电脑换“预安装所有必备组件”模式重试。这个过程中千万别反复点“接受”点一次等回应即可重复点击更容易触发界面假死。安装博途本身就是个考验耐心的活儿。5. 系统验证与后续扩展思路5.1 功能验证清单整个系统做完之后我整理了一份验证清单照着过一遍确认系统状态健康验证项操作预期结果初始状态所有传感器FALSE16个车位全绿剩余车位16无报警进车一I0.0上升沿入口绿灯亮分配1号车位1号车位变红进车二I0.0再次上升沿分配2号车位剩余车位14满车位连续将1-16号传感器置TRUE入口红灯亮分配结果为0报警“车位已满”出车一I0.1上升沿出口绿灯亮剩余车位增加对应车位释放变绿手动模式HMI置手动ON手动画面按钮可控制道闸自动逻辑输出切断计数校验核对Car_Count_Total和Exit_Count_Total差值差值等于当前占用车位数量这个清单建议打印出来贴在工位旁边每次改动程序后重新跑一遍能省大量排查时间。5.2 后续可以扩展的方向这套系统做完往真实项目靠拢还有几条明确路径增加上位机SCADA监控。PLCSIM Advanced可以和WinCC不是精简版HMI而是WinCC Professional或WinCC Runtime Professional连接实现更完整的数据采集、趋势归档和报表功能。这也是热词里常搜到“SCADA如何与PLC连接”的实际应用场景。连接方式是通过TCP/IP或工业以太网协议PLCSIM Advanced虚拟网卡提供通信通道WinCC里组态变量管理器指向PLC地址即可。对接数据库与后端管理系统。用C#通过S7协议库比如Sharp7读取PLC变量写入SQL Server数据库实现停车记录存储、车牌识别联动、费用计算。这类上位机应用的核心是通讯频率设计实测读取16个BOOL加几个INT变量100ms周期完全没问题但如果加了大量趋势数据读写频率需要降到500ms以上避免影响PLC扫描周期。加入模拟量信号。如果车位检测用超声波测距传感器输出模拟量程序里需要增加模拟量采集与限值比较逻辑。S7-1200本体不带模拟量输入通道除非选带AI的型号或加SM1231实现时会涉及量程转换和滤波处理又是新的知识点。多停车场联网。通过S7-1200的Profinet或TCP通信功能把多个停车场的PLC接入一个中心服务器做集中调度。这时候就需要给每个PLC配唯一的IP地址和站号通讯程序里做多站轮询。这套系统虽然跑在仿真环境里但整个开发流程——从需求拆解、变量规划、程序模块化设计、HMI画面布局到仿真验证——和真实项目是一模一样的。把仿真调通了现场调试时主要工作就只是核对I/O接线和调整滤波时间常数。这也是为什么我一直建议在校学生和刚入行的工程师多练仿真设备条件不够就创造条件一台电脑就能跑完整个自动化项目闭环学到的东西一点不比放真机少。最后再说一句实操体会HMI画面看着是“画图”其实真正考验的是对PLC变量体系和控制逻辑的理解深度。画面响应布控、颜色变化联动、按钮启停逻辑每一处都建立在扎实的变量映射基础上。先把变量表理得清清楚楚画面设计就是水到渠成的事。
阅读完成 · 觉得有帮助?
咨询建站