Files
Feeding_control_system/controller/main_controller.py

97 lines
3.7 KiB
Python
Raw Normal View History

from PySide6.QtCore import QTimer, Signal, QObject # 导入Qt核心类
from PySide6.QtWidgets import QApplication # 用于获取主线程
2025-11-01 18:52:19 +08:00
import threading
from hardware import transmitter
from view.main_window import MainWindow
2025-10-31 18:52:31 +08:00
from .camera_controller import CameraController
from .bottom_control_controller import BottomControlController
2025-11-01 18:52:19 +08:00
from hardware.transmitter import TransmitterController
from hardware.relay import RelayController
2025-10-18 18:29:40 +08:00
# 定义信号类(用于后台线程向 UI主线程传递数据
class Signals(QObject):
weight_updated = Signal(int) # 传递上料斗重量
2025-10-18 18:29:40 +08:00
class MainController:
def __init__(self):
# 主界面
self.main_window = MainWindow()
# 1. 用于更新下料斗夹爪角度的QTimer
self.timer_angle = QTimer()
self.timer_angle.setInterval(1000) # 1秒触发一次
self.timer_angle.timeout.connect(self._onTimer2) # 连接到角度更新函数
self.timer_angle.start()
# 下料斗夹具角度相关参数
self.angle = 10
self.max_angle = 60
self.min_angle = 10
self.is_add = True
# 2. 用于更新重量的 QTimer
self.timer_weight = QTimer()
self.timer_weight.setInterval(2000) # 2秒触发一次
self.timer_weight.timeout.connect(self._read_weight_in_background)
self.timer_weight.start()
# 信号实例(用于后台线程传递数据到主线程)
self.signals = Signals()
self.signals.weight_updated.connect(self._update_upper_weight) # 主线程更新UI
# 初始化子界面和控制器
2025-10-18 18:29:40 +08:00
self._initSubViews()
2025-10-31 18:52:31 +08:00
self._initSubControllers()
2025-10-18 18:29:40 +08:00
def _read_weight_in_background(self):
"""在后台线程中读取重量"""
def weight_task():
loc_tra = TransmitterController(RelayController())
# 上料斗重量 (目前只有上料斗安装变送器, 可以读取到重量)
upper_weight = loc_tra.read_data(1)
# 发送信号到主线程更新UI
if upper_weight is not None:
self.signals.weight_updated.emit(upper_weight)
2025-11-01 18:52:19 +08:00
# 启动后台线程执行重量读取操作
threading.Thread(target=weight_task, daemon=True).start()
def _update_upper_weight(self, weight):
"""主线程中 更新界面上料斗重量数据"""
self.main_window.hopper_widget.setUpperHopperWeight(weight)
2025-11-01 18:52:19 +08:00
def _onTimer2(self):
"""QTimer触发的 料斗夹爪角度更新"""
2025-11-01 18:52:19 +08:00
if self.is_add:
self.angle += 1
2025-11-01 18:52:19 +08:00
else:
self.angle -= 1
2025-11-01 18:52:19 +08:00
if self.angle > self.max_angle:
self.is_add = False
self.angle = self.max_angle
if self.angle <= self.min_angle:
self.is_add = True
self.angle = 10
# 直接更新UI
2025-11-01 18:52:19 +08:00
self.main_window.hopper_widget.setLowerHopperOpeningAngle(self.angle)
2025-10-18 18:29:40 +08:00
def showMainWindow(self):
2025-11-04 09:45:14 +08:00
self.main_window.showFullScreen()
2025-11-01 18:52:19 +08:00
self.main_window.dispatch_task_widget.set_task_time("task1","15:44 PM")
self.main_window.dispatch_task_widget.set_task_time("task2","17:37 PM")
self.main_window.segment_task_widget.set_task_time("task1","15:38 PM")
self.main_window.segment_task_widget.set_task_time("task2","17:24 PM")
2025-10-18 18:29:40 +08:00
2025-10-31 18:52:31 +08:00
def _initSubControllers(self):
self.camera_controller = CameraController(
video_view=self.main_window.vibration_video
)
self.bottom_control_controller = BottomControlController(
bottom_control_widget=self.main_window.bottom_control_widget,
main_window=self.main_window
)
2025-10-18 18:29:40 +08:00
def _initSubViews(self):
2025-10-31 18:52:31 +08:00
pass