系统诊断增加设备检测

This commit is contained in:
2026-01-11 18:00:32 +08:00
parent f860c5a216
commit b40ea0112a
13 changed files with 537 additions and 247 deletions

View File

@ -4,6 +4,15 @@ from hardware.transmitter import TransmitterController
from hardware.relay import RelayController
from view.widgets.hopper_widget import HopperWidget
from view.widgets.conveyor_system_widget import ConveyorSystemWidget
from enum import Enum
class UpperHopperPosition(Enum):
"""上料斗位置
- MIXING_TOWER: 搅拌楼处,对应数值 66
- VIBRATION_CHAMBER: 振捣室处,对应数值 5
"""
MIXING_TOWER = 66 # 搅拌楼处
VIBRATION_CHAMBER = 5 # 振捣室处
# 信号类:后台线程向主线程传递数据
class HopperSignals(QObject):
@ -18,30 +27,30 @@ class HopperController:
# 下料斗夹爪测试用例数据
# 注意:目前只控制 下料斗的夹爪角度变化
self.angle = 10 # 夹爪当前角度
self.max_angle = 60 # 夹爪最大张开角度
self.min_angle = 10 # 夹爪最小张开角度
self.angle = 10.33 # 夹爪当前角度
self.max_angle = 60.00 # 夹爪最大张开角度
self.min_angle = 10.00 # 夹爪最小张开角度
self.is_add = True # 角度增加/减小 控制
self.timer_angle = QTimer() # 角度更新定时器
self.timer_angle.setInterval(1000) # 1秒更新一次角度
# 重量读取定时器
self.timer_weight = QTimer() # 重量读取定时器
self.timer_weight.setInterval(2000) # 每2秒读取一次重量
# self.timer_weight = QTimer() # 重量读取定时器
# self.timer_weight.setInterval(2000) # 每2秒读取一次重量
# 绑定信号
self._connect_signals()
# 开启定时器
self.timer_angle.start()
self.timer_weight.start()
# self.timer_weight.start()
def _connect_signals(self):
# 更新上料斗重量
self.signals.upper_weight_updated.connect(self.onUpdateUpperHopperWeight)
# 上料斗重量定时读取
self.timer_weight.timeout.connect(self.handleReadUpperHopperWeight)
# self.timer_weight.timeout.connect(self.handleReadUpperHopperWeight)
# 下料斗夹爪定时更新
self.timer_angle.timeout.connect(self.handleLowerClampAngleUpdate)
@ -62,9 +71,9 @@ class HopperController:
"""处理下料斗夹爪开合"""
# 角度增减逻辑
if self.is_add:
self.angle += 1
self.angle += 1.22
else:
self.angle -= 1
self.angle -= 1.33
# 边界控制
if self.angle > self.max_angle:
@ -118,7 +127,35 @@ class HopperController:
# 上料斗 夹爪 "开"按钮点击
print("hopper_controller: onUpperClampOpenBottonClicked")
# 测试上料斗夹爪6秒打开60度
self.hopper_view.upper_clamp_widget.testAnimation(target_angle=60, duration=6)
self.hopper_view.upper_clamp_widget.testAnimation(target_angle=60, duration=10)
@Slot(int)
def onUpdateUpperClampStatus(self, status:int):
# 上料斗夹爪状态 1表示打开0表示关闭
if status:
# 执行上料斗夹爪打开动画
self.hopper_view.upper_clamp_widget.testAnimation(target_angle=60, duration=10)
else:
# 执行上料斗夹爪关闭动画
self.hopper_view.upper_clamp_widget.testAnimation(target_angle=0, duration=10)
def onUpdateUpperHopperPosition(self, position:int):
# 上料斗位置
if position == UpperHopperPosition.MIXING_TOWER.value: # 上料斗到达搅拌楼值为66
# 上料斗在搅拌楼下
self.hopper_view.hideUpperHopper() # 隐藏非传送带处的上料斗
self.conveyor_view.moveHopperBelowMixer() # 传送带处的上料斗移动到搅料楼下
self.conveyor_view.showHopper() # 显示传送带处的上料斗
elif position == UpperHopperPosition.VIBRATION_CHAMBER.value: # 上料斗就绪到达振捣室值为5
# 上料斗在振捣室处
self.conveyor_view.hideHopper() # 隐藏传送带处的上料斗
self.hopper_view.upper_clamp_widget.set_angle(0) # 上料斗夹爪角度设置为0此时上料斗一定是关闭的
self.hopper_view.showUpperHopper() # 显示非传送带处的上料斗
else:
# 上料斗在途中
self.hopper_view.hideUpperHopper() # 隐藏非传送带处的上料斗 (下料斗处对应的上料斗叫非传送带处上料斗)
self.conveyor_view.moveHopperToTransition() # 传送带处上料斗移动到中间过渡位置
self.conveyor_view.showHopper() # 显示传送带处的上料斗
@Slot(bool)
def onUpperArchBreaking(self, status:bool):