No4.00 基于MCGS 2×3升降横移式立体车库模拟仿真设计 程序有全部注释。 编程软件:MCGS 嵌入版7.7以上版本 把最好的技术分享给大家,欢迎光临本小店 实现功能: (1)有紧急停止功能。 (2)具有检测空车位并指示功能; (3)通过按键存放到相应的空车位; (4)通过按键取相应的存放车位的车; (5)程序通过脚本程序编写,具有学习意义;
最近在搞一个2×3升降横移式立体车库的仿真项目,用MCGS嵌入版折腾了挺久。今天把核心代码和实现思路扒出来,给想玩工业组态的朋友打个样。
先看整体框架:六车位分两层,下层平移载车板,上层升降。核心脚本全写在循环策略里,上电就开始跑逻辑。先定义个全局变量组:
'//----全局变量定义---- Dim EmergencyStop As Boolean '急停标志位 Dim CarPos(6) As Boolean '1-6号车位状态(True=有车) Dim CurrentFloor As Integer '当前操作楼层 Dim TargetPos As Integer '目标车位编号 Dim MovingFlag As Boolean '设备运行中标志急停功能的实现最简单粗暴。在画面里放个红色蘑菇头按钮,脚本写成:
Sub EmergencyBtn_Click() EmergencyStop = Not EmergencyStop '切换急停状态 If EmergencyStop Then !SetDevice(升降机, 停止) '强制停止设备 !SetDevice(横移电机, 停止) MovingFlag = False End If End Sub重点是这个SetDevice函数,直接操作设备对象的状态。实测发现急停后必须手动复位,避免误操作。
空车位检测用了个骚操作——在画面隐藏区域摆了六个透明矩形,每个对应车位的检测传感器。用循环定时扫描:
For i = 1 To 6 CarPos(i) = GetObject("Sensor" & i).Value '读取传感器状态 If CarPos(i) Then !SetFillColor("车位灯" & i, 红色) Else !SetFillColor("车位灯" & i, 绿色) End If Next这里用颜色变化做可视化提示,比单纯用文本显示更符合工业习惯。注意MCGS的控件命名规则,别把"sensor1"写成"sensor_1"这种带下划线的,脚本会找不到对象。
存车逻辑是重头戏。当用户点击存车按钮时:
Sub 存车按钮_Click() If MovingFlag Or EmergencyStop Then Exit Sub '防呆设计 For i = 1 To 6 '找最低可用车位 If Not CarPos(i) Then TargetPos = i Exit For End If Next CurrentFloor = IIF(TargetPos<=3, 1, 2) '判断楼层 If CurrentFloor = 2 Then !SetDevice(升降机, 下降) '上层需要降下 Do While !GetDeviceState(升降机) <> "到位" Delay 100 Loop End If !SetAnimPosition("载车板", 目标坐标) '横移动画 MovingFlag = True End Sub这里有个坑:MCGS的动画控件坐标是相对父容器的,得先用!GetProperty拿到父容器尺寸再换算位移量。取车逻辑类似,但要反过来处理升降顺序。
最后给小白们提个醒:MCGS的脚本引擎对循环特别敏感,死循环直接卡死整个运行时。建议在循环体内加DoEvents或者Delay,像这样:
While !GetDeviceState(电机) <> "停止" Delay 50 '释放CPU时间片 If EmergencyStop Then Exit While Wend完整工程里还加了声光报警、操作记录查询这些锦上添花的功能。需要源码的兄弟可以私信,注释写得比毕业论文还详细(笑)。下次有机会再聊聊怎么用MCGS做Modbus通讯,那才是真·掉头发系列。