修改了界面显示(生产进度条、上料斗位置状态)、增加了将角度信息上传opc

This commit is contained in:
2026-04-07 16:07:36 +08:00
parent ecba4d726a
commit 5e8f291738
8 changed files with 312 additions and 92 deletions

View File

@ -1,18 +1,20 @@
from PySide6.QtCore import QTimer, Signal, QObject, Slot
import threading
from hardware.transmitter import TransmitterController
from hardware.relay import RelayController
# 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: 搅拌楼处,对应数值 1
- VIBRATION_CHAMBER: 振捣室处,对应数值 2
- IN_TRANSIT: 途中,对应数值 3
"""
MIXING_TOWER = 66 # 搅拌楼处
VIBRATION_CHAMBER = 5 # 振捣室处
MIXING_TOWER = 1 # 搅拌楼处
VIBRATION_CHAMBER = 2 # 振捣室处
IN_TRANSIT = 3 # 运输途中
# 信号类:后台线程向主线程传递数据
class HopperSignals(QObject):
@ -42,7 +44,7 @@ class HopperController:
self._connect_signals()
# 开启定时器
self.timer_angle.start()
# self.timer_angle.start()
# self.timer_weight.start()
def _connect_signals(self):
@ -58,14 +60,14 @@ class HopperController:
# 上料斗 "开"按钮点击
self.hopper_view.upper_open_btn.clicked.connect(self.onUpperClampOpenBottonClicked)
# 上料斗 "破拱"按钮
self.hopper_view.upper_arch_breaking_signal.connect(self.onUpperArchBreaking)
# 上料斗 "破拱"按钮点击
self.hopper_view.upper_arch_breaking_signal.connect(self.onUpperArchBreakingClicked)
# 下料斗 "开"按钮点击
self.hopper_view.lower_open_btn.clicked.connect(self.onLowerClampOpenBottonClicked)
# 下料斗 "破拱"按钮
self.hopper_view.lower_arch_breaking_signal.connect(self.onLowerArchBreaking)
# 下料斗 "破拱"按钮点击
self.hopper_view.lower_arch_breaking_signal.connect(self.onLowerArchBreakingClicked)
def handleLowerClampAngleUpdate(self):
"""处理下料斗夹爪开合"""
@ -102,15 +104,16 @@ class HopperController:
@Slot()
def handleReadUpperHopperWeight(self):
# 后台读取上料斗重量
def upper_weight_task():
loc_tra = TransmitterController(RelayController())
# 上料斗重量 (目前只有上料斗安装变送器, 可以读取到重量)
upper_weight = loc_tra.read_data(1)
# 发送信号到主线程更新UI
if upper_weight is not None:
self.signals.upper_weight_updated.emit(upper_weight)
# def upper_weight_task():
# loc_tra = TransmitterController(RelayController())
# # 上料斗重量 (目前只有上料斗安装变送器, 可以读取到重量)
# upper_weight = loc_tra.read_data(1)
# # 发送信号到主线程更新UI
# if upper_weight is not None:
# self.signals.upper_weight_updated.emit(upper_weight)
threading.Thread(target=upper_weight_task, daemon=True).start()
# threading.Thread(target=upper_weight_task, daemon=True).start()
pass
@Slot(float)
def onUpdateLowerClampAngle(self, angle:float):
@ -131,36 +134,51 @@ class HopperController:
@Slot(int)
def onUpdateUpperClampStatus(self, status:int):
# 上料斗夹爪状态 1表示打0表示关闭
if status:
# 执行上料斗夹爪打开动画
# 上料斗夹爪状态 1:半开2全0:关闭)
if status == 1:
# 上料斗门半开
self.hopper_view.upper_clamp_widget.testAnimation(target_angle=30, duration=5)
elif status == 2:
# 上料斗门全开
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)
elif status == 0:
# 上料斗门关闭
self.hopper_view.upper_clamp_widget.testAnimation(target_angle=0, duration=6)
def onUpdateUpperHopperPosition(self, position:int):
# 上料斗位置
if position == UpperHopperPosition.MIXING_TOWER.value: # 上料斗到达搅拌楼值为66
if position == UpperHopperPosition.MIXING_TOWER.value: # 上料斗到达搅拌楼
# 上料斗在搅拌楼下
self.hopper_view.hideUpperHopper() # 隐藏非传送带处的上料斗
self.conveyor_view.moveHopperBelowMixer() # 传送带处的上料斗移动到搅料楼下
self.conveyor_view.showHopper() # 显示传送带处的上料斗
elif position == UpperHopperPosition.VIBRATION_CHAMBER.value: # 上料斗就绪,到达振捣室值为5
elif position == UpperHopperPosition.VIBRATION_CHAMBER.value: # 上料斗就绪,到达振捣室
# 上料斗在振捣室处
self.conveyor_view.hideHopper() # 隐藏传送带处的上料斗
self.hopper_view.upper_clamp_widget.set_angle(0) # 上料斗夹爪角度设置为0此时上料斗一定是关闭的
self.hopper_view.showUpperHopper() # 显示非传送带处的上料斗
else:
elif position == UpperHopperPosition.IN_TRANSIT.value:
# 上料斗在途中
self.hopper_view.hideUpperHopper() # 隐藏非传送带处的上料斗 (下料斗处对应的上料斗叫非传送带处上料斗)
self.conveyor_view.moveHopperToTransition() # 传送带处上料斗移动到中间过渡位置
self.conveyor_view.showHopper() # 显示传送带处的上料斗
@Slot(bool)
def onUpperArchBreaking(self, status:bool):
"""上料斗破拱: status 为True表示 开启破拱, 为False表示 关闭破拱"""
print("hopper_controller: onUpperArchBreaking ", status)
def onUpperArchBreakingStatusChanged(self, status:bool):
"""上料斗破拱状态改变: status 为True表示 破拱状态, 为False表示 不破拱状态"""
if status == True: # 破拱状态
self.hopper_view.upper_arch_breaking_status = True
self.hopper_view.upper_arch_label.setHidden(False)
else: # 不破拱状态
self.hopper_view.upper_arch_breaking_status = False
self.hopper_view.upper_arch_label.setHidden(True)
@Slot(bool)
def onUpperArchBreakingClicked(self, status:bool):
"""上料斗破拱按钮点击: status 为True表示 开启破拱, 为False表示 关闭破拱"""
print("hopper_controller: onUpperArchBreakingClicked ", status)
# 这里需要控制网络继电器开启上料斗破拱可能还需要同步opc的上料斗破拱状态
@Slot(int)
def onUpperHopperStatusChanged(self, status:int):
@ -179,9 +197,20 @@ class HopperController:
print("hopper_controller: onLowerClampOpenBottonClicked")
@Slot(bool)
def onLowerArchBreaking(self, status:bool):
"""下料斗破拱: status 为True表示 开启破拱, 为False表示 关闭破拱"""
print("hopper_controller: onLowerArchBreaking ", status)
def onLowerArchBreakingStatusChanged(self, status:bool):
"""下料斗破拱状态改变: status 为True表示 破拱状态, 为False表示 不破拱状态"""
if status == True: # 破拱状态
self.hopper_view.lower_arch_breaking_status = True
self.hopper_view.lower_arch_label.setHidden(False)
else: # 不破拱状态
self.hopper_view.lower_arch_breaking_status = False
self.hopper_view.lower_arch_label.setHidden(True)
@Slot(bool)
def onLowerArchBreakingClicked(self, status:bool):
"""下料斗破拱按钮点击: status 为True表示 开启破拱, 为False表示 关闭破拱"""
print("hopper_controller: onLowerArchBreakingClicked ", status)
# 这里需要控制网络继电器开启下料斗破拱可能还需要同步opc的下料斗破拱状态
@Slot(int)
def onLowerHopperStatusChanged(self, status:int):