mirror of
https://github.com/dptech-corp/Uni-Lab-OS.git
synced 2026-02-07 07:25:15 +00:00
Add Device MockSolenoidValve
This commit is contained in:
25
test/experiments/MockSolenoidValve.json
Normal file
25
test/experiments/MockSolenoidValve.json
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"nodes": [
|
||||||
|
{
|
||||||
|
"id": "MockSolenoidValve1",
|
||||||
|
"name": "模拟电磁阀",
|
||||||
|
"children": [],
|
||||||
|
"parent": null,
|
||||||
|
"type": "device",
|
||||||
|
"class": "MockSolenoidValve",
|
||||||
|
"position": {
|
||||||
|
"x": 620.6111111111111,
|
||||||
|
"y": 171,
|
||||||
|
"z": 0
|
||||||
|
},
|
||||||
|
"config": {
|
||||||
|
"port": "MOCK"
|
||||||
|
},
|
||||||
|
"data": {
|
||||||
|
"status": "Idle",
|
||||||
|
"valve_status": "Closed"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"links": []
|
||||||
|
}
|
||||||
89
unilabos/devices/Mock/MockSolenoidValve/MockSolenoidValve.py
Normal file
89
unilabos/devices/Mock/MockSolenoidValve/MockSolenoidValve.py
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
import time
|
||||||
|
|
||||||
|
|
||||||
|
class MockSolenoidValve:
|
||||||
|
"""
|
||||||
|
模拟电磁阀设备类 - 简化版本
|
||||||
|
|
||||||
|
这个类提供了电磁阀的基本功能:开启、关闭和状态查询
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, port: str = "MOCK"):
|
||||||
|
"""
|
||||||
|
初始化MockSolenoidValve实例
|
||||||
|
|
||||||
|
Args:
|
||||||
|
port (str): 设备端口,默认为"MOCK"表示模拟设备
|
||||||
|
"""
|
||||||
|
self.port = port
|
||||||
|
self._status: str = "Idle"
|
||||||
|
self._valve_status: str = "Closed" # 阀门位置:Open, Closed
|
||||||
|
|
||||||
|
@property
|
||||||
|
def status(self) -> str:
|
||||||
|
"""设备状态 - 会被自动识别的设备属性"""
|
||||||
|
return self._status
|
||||||
|
|
||||||
|
@property
|
||||||
|
def valve_status(self) -> str:
|
||||||
|
"""阀门状态"""
|
||||||
|
return self._valve_status
|
||||||
|
|
||||||
|
def set_valve_status(self, status: str) -> str:
|
||||||
|
"""
|
||||||
|
设置阀门位置
|
||||||
|
|
||||||
|
Args:
|
||||||
|
position (str): 阀门位置,可选值:"Open", "Closed"
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: 操作结果状态 ("Success", "Error")
|
||||||
|
"""
|
||||||
|
if status not in ["Open", "Closed"]:
|
||||||
|
self._status = "Error: Invalid position"
|
||||||
|
return "Error"
|
||||||
|
|
||||||
|
self._status = "Moving"
|
||||||
|
time.sleep(1) # 模拟阀门动作时间
|
||||||
|
|
||||||
|
self._valve_status = status
|
||||||
|
self._status = "Idle"
|
||||||
|
return "Success"
|
||||||
|
|
||||||
|
def open_valve(self) -> str:
|
||||||
|
"""打开阀门"""
|
||||||
|
return self.set_valve_status("Open")
|
||||||
|
|
||||||
|
def close_valve(self) -> str:
|
||||||
|
"""关闭阀门"""
|
||||||
|
return self.set_valve_status("Closed")
|
||||||
|
|
||||||
|
def get_valve_status(self) -> str:
|
||||||
|
"""获取阀门位置"""
|
||||||
|
return self._valve_status
|
||||||
|
|
||||||
|
def is_open(self) -> bool:
|
||||||
|
"""检查阀门是否打开"""
|
||||||
|
return self._valve_status == "Open"
|
||||||
|
|
||||||
|
def is_closed(self) -> bool:
|
||||||
|
"""检查阀门是否关闭"""
|
||||||
|
return self._valve_status == "Closed"
|
||||||
|
|
||||||
|
|
||||||
|
# 用于测试的主函数
|
||||||
|
if __name__ == "__main__":
|
||||||
|
valve = MockSolenoidValve()
|
||||||
|
|
||||||
|
print("启动电磁阀测试...")
|
||||||
|
print(f"初始状态: 位置={valve.valve_status}, 状态={valve.status}")
|
||||||
|
|
||||||
|
# 测试开启阀门
|
||||||
|
valve.open_valve()
|
||||||
|
print(f"开启后: 位置={valve.valve_status}, 状态={valve.status}")
|
||||||
|
|
||||||
|
# 测试关闭阀门
|
||||||
|
valve.close_valve()
|
||||||
|
print(f"关闭后: 位置={valve.valve_status}, 状态={valve.status}")
|
||||||
|
|
||||||
|
print("测试完成")
|
||||||
0
unilabos/devices/Mock/MockSolenoidValve/__init__.py
Normal file
0
unilabos/devices/Mock/MockSolenoidValve/__init__.py
Normal file
41
unilabos/registry/devices/MockSolenoidValve.yaml
Normal file
41
unilabos/registry/devices/MockSolenoidValve.yaml
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
MockSolenoidValve:
|
||||||
|
description: Mock Solenoid Valve Device
|
||||||
|
class:
|
||||||
|
module: unilabos.devices.Mock.MockSolenoidValve.MockSolenoidValve:MockSolenoidValve
|
||||||
|
type: python
|
||||||
|
status_types:
|
||||||
|
status: String
|
||||||
|
valve_status: String
|
||||||
|
action_value_mappings:
|
||||||
|
set_valve_status:
|
||||||
|
type: SendCmd
|
||||||
|
goal:
|
||||||
|
command: status
|
||||||
|
feedback: {}
|
||||||
|
result:
|
||||||
|
success: success
|
||||||
|
open_valve:
|
||||||
|
type: SendCmd
|
||||||
|
goal: {}
|
||||||
|
feedback: {}
|
||||||
|
result:
|
||||||
|
success: success
|
||||||
|
close_valve:
|
||||||
|
type: SendCmd
|
||||||
|
goal: {}
|
||||||
|
feedback: {}
|
||||||
|
result:
|
||||||
|
success: success
|
||||||
|
schema:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
status:
|
||||||
|
type: string
|
||||||
|
description: Current status of the valve
|
||||||
|
valve_status:
|
||||||
|
type: string
|
||||||
|
description: Valve status (Open/Closed)
|
||||||
|
required:
|
||||||
|
- status
|
||||||
|
- valve_status
|
||||||
|
additionalProperties: false
|
||||||
Reference in New Issue
Block a user