news 2026/4/16 12:10:23

手把手教你用MCGS撸一个立体车库控制系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手把手教你用MCGS撸一个立体车库控制系统

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通讯,那才是真·掉头发系列。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 16:36:50

【电动机】三相感应电动机TIM间接磁场定向控制IFOC研究附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码及仿真咨询…

作者头像 李华
网站建设 2026/4/16 5:51:38

JavaScript—— JavaScript 数字处理工具函数

数字处理工具函数 数字处理在各种业务场景中都很常见&#xff0c;尤其是涉及到金额计算、数据显示等方面。 // 添加千分位分隔符 function addThousandSeparator(num, decimals 2) {if (!num && num ! 0) return -;// 实现逻辑...return num.toString().replace(/\B(?…

作者头像 李华
网站建设 2026/4/16 7:03:12

JavaScript —— JavaScript 轮询机制和异步任务处理工具函数详解

在现代前端应用中,我们经常需要定期向服务器发送请求以获取最新数据,这种场景就需要用到轮询机制。本文介绍一种灵活、可靠的轮询工具函数实现方案。 技术难点 如何实现可控的轮询机制(开始、停止、重启) 如何处理轮询过程中的异常情况 如何限制轮询次数防止无限循环 如何…

作者头像 李华
网站建设 2026/4/15 22:11:30

英伟达与AI芯片竞争对手Groq达成授权协议并聘用其CEO

英伟达已与AI芯片竞争对手Groq达成非独家授权协议。作为交易的一部分&#xff0c;英伟达将聘用Groq创始人乔纳森罗斯、总裁桑尼马德拉以及其他员工。CNBC报道称&#xff0c;英伟达正以200亿美元收购Groq的资产&#xff1b;英伟达向TechCrunch表示&#xff0c;这并非对该公司的收…

作者头像 李华
网站建设 2026/4/16 7:10:04

Salesforce集成ChatGPT主要为防止客户数据泄露

Salesforce用户现在可以通过运行Agentforce与ChatGPT Enterprise或Edu版本直接从聊天机器人更新CRM数据。这一举措旨在遏制自制集成方案可能导致数据泄露到公司控制范围之外的风险。虽然这一合作被宣传为减少用户在OpenAI机器人和Salesforce之间切换时间的方式&#xff0c;但分…

作者头像 李华