Files
Feeding_control_system/controller/main_controller.py
2025-11-21 14:55:52 +08:00

77 lines
2.9 KiB
Python

from PySide6.QtCore import QTimer, Signal, QObject # 导入Qt核心类
from PySide6.QtWidgets import QApplication # 用于获取主线程
import threading
from view.main_window import MainWindow
from .camera_controller import CameraController
from .bottom_control_controller import BottomControlController
from .hopper_controller import HopperController
from service.msg_recorder import MessageRecorder
from core.system import FeedingControlSystem
from opc.opcua_server import SimpleOPCUAServer
class MainController:
def __init__(self):
# 主界面
self.main_window = MainWindow()
self.system = FeedingControlSystem()
self.system.initialize()
self.system.state.state_updated.connect(self.update_ui_notify)
self.opcua_server = SimpleOPCUAServer(self.system.state)
self.opcua_server.start()
self.msg_recorder = MessageRecorder()
self.msg_recorder.normal_record("开始自动智能浇筑系统")
# 初始化子界面和控制器
self._initSubViews()
self._initSubControllers()
# 连接信号
self.__connectSignals()
def showMainWindow(self):
self.main_window.showFullScreen()
# self.main_window.show()
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
)
# 料斗控制模块(包括 夹爪开合、拱等按钮)
self.hopper_controller = HopperController(
hopper_view = self.main_window.hopper_widget,
conveyor_view = self.main_window.conveyor_system_widget
)
def _initSubViews(self):
pass
def update_ui_notify(self, prop:str,value):
"""更新UI状态"""
# print(f"更新UI状态: {prop} = {value}")
def __connectSignals(self):
self.main_window.about_to_close.connect(self.handleMainWindowClose) # 处理主界面关闭
def handleMainWindowClose(self):
"""主界面关闭"""
self.msg_recorder.normal_record("关闭自动智能浇筑系统")
self.system.stop()
self.opcua_server.stop()
# 停止系统底部控制器中的线程
if hasattr(self, 'bottom_control_controller'):
self.bottom_control_controller.stop_threads()