Files
Feeding_control_system/controller/main_controller.py

97 lines
3.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from PySide6.QtCore import QTimer, Signal, QObject # 导入Qt核心类
from PySide6.QtWidgets import QApplication # 用于获取主线程
import threading
from hardware import transmitter
from view.main_window import MainWindow
from .camera_controller import CameraController
from .bottom_control_controller import BottomControlController
from hardware.transmitter import TransmitterController
from hardware.relay import RelayController
# 定义信号类(用于后台线程向 UI主线程传递数据
class Signals(QObject):
weight_updated = Signal(int) # 传递上料斗重量
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
# 初始化子界面和控制器
self._initSubViews()
self._initSubControllers()
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)
# 启动后台线程执行重量读取操作
threading.Thread(target=weight_task, daemon=True).start()
def _update_upper_weight(self, weight):
"""主线程中 更新界面上料斗重量数据"""
self.main_window.hopper_widget.setUpperHopperWeight(weight)
def _onTimer2(self):
"""QTimer触发的 料斗夹爪角度更新"""
if self.is_add:
self.angle += 1
else:
self.angle -= 1
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
self.main_window.hopper_widget.setLowerHopperOpeningAngle(self.angle)
def showMainWindow(self):
self.main_window.showFullScreen()
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")
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
)
def _initSubViews(self):
pass