M1与M2互斥运行逻辑代码报错:Busy()和Suspend()未定义求助
问题描述
我拥有M1和M2两台设备,设备模型如下:
使用场景需求:
- M1仅能在M2未运行时工作
- M2仅能在M1未运行时工作
- M1与M2不能同时运行
为实现上述场景,我编写了如下逻辑代码:
M1的"On Enter"事件代码:
if (M2.Busy()) { M1.suspend(); }
M2的"On Enter"事件代码:
if (M1.Busy()) { M2.suspend(); }
但代码运行时出现错误:Busy()和Suspend()方法未定义,求帮忙解决,谢谢!
解决方案
1. 针对工业仿真平台(如Plant Simulation)的修正
这类平台中设备状态判断和暂停的API通常有固定命名,比如Plant Simulation里:
- 判断设备繁忙用
isBusy属性而非Busy()方法 - 暂停设备用
stop()方法而非Suspend()
修正后的代码:
- M1的"On Enter"事件:
if (M2.isBusy) { M1.stop(); }
- M2的"On Enter"事件:
if (M1.isBusy) { M2.stop(); }
2. 通用自定义状态方案
如果不确定平台API,可通过全局变量实现互斥逻辑:
- 定义全局布尔变量
isDeviceRunning,初始值设为false - M1的"On Enter"事件:
if (isDeviceRunning) { M1.abort(); // 替换为你所用平台的终止/暂停方法 } else { isDeviceRunning = true; } // 同时在M1的"On Exit"事件添加: // isDeviceRunning = false;
- M2的"On Enter"事件:
if (isDeviceRunning) { M2.abort(); // 替换为你所用平台的终止/暂停方法 } else { isDeviceRunning = true; } // 同时在M2的"On Exit"事件添加: // isDeviceRunning = false;
3. 最可靠的排查方式
直接查阅你所用平台的设备对象API文档,搜索「设备状态检测」「设备暂停」相关关键词,确认对应方法/属性的准确名称。
内容的提问来源于stack exchange,提问作者Vinayak Mulye
相关产品推荐
相关产品推荐

