This commit is contained in:
2025-11-17 00:05:40 +08:00
parent f860c5a216
commit e3ecd0550f
55 changed files with 3204 additions and 528 deletions

View File

@ -7,12 +7,32 @@ class SystemState(QObject):
state_updated=Signal(str,object)
def __init__(self):
super().__init__()
#
self._watched_props = []
self.lock = threading.RLock()
# 系统运行状态
self.running = False
self.running = True
# 下料控制相关
# 上料斗控制相关
self._upper_door_position = 'default' # default(在搅拌楼下接料), over_lower(在下料斗上方), returning(返回中)
# 是否破拱
self._upper_is_arch_=False
self._upper_door_closed=True
self._upper_weight=0
self._upper_volume=0.0
#下料斗状态想着
self._lower_feeding_stage = 0 # 0:未下料, 1:第一阶段, 2:第二阶段, 3:第三阶段, 4:等待模具车对齐
self._lower_is_arch_=False
self._lower_weight=0
self._lower_angle=0.0
#模具车状态
self._mould_weight=0
self._mould_frequency=220
self._mould_vibrate_status=0 #1振动中0未振动
self.lower_feeding_cycle = 0 # 下料斗下料循环次数
self.upper_feeding_count = 0 # 上料斗已下料次数
self.upper_feeding_max = 2 #上料斗最大下料次数
@ -21,7 +41,11 @@ class SystemState(QObject):
self.last_upper_weight = 0
self.last_lower_weight = 0
self.last_weight_time = 0
self.need_total_weight=0
#需要下料的总重量
self._mould_need_weight=0
#完成下料的总重量
self._mould_finish_weight=0
self.initial_upper_weight=0
self.initial_lower_weight=0
@ -31,7 +55,8 @@ class SystemState(QObject):
# 视觉系统状态
self.angle_control_mode = "normal" # 角度控制模式: normal, reducing, maintaining, recovery
self.overflow_detected = False # 堆料检测
self.overflow_detected = "0" # 堆料检测
self.current_finish_status=False # 当前是否完成浇筑满
self.door_opening_large = False # 夹角
self.vehicle_aligned = False # 模具车是否对齐
self.last_angle = None # 上次检测角度
@ -42,16 +67,13 @@ class SystemState(QObject):
#当前生产的管片
self.current_artifact=None
#当前生产状态
self.feed_status=FeedStatus.FNone
self._feed_status=FeedStatus.FNone
#每方重量
self.density=2500
# 记录需要监听的属性名(筛选掉不需要发信号的内部变量)
#是否破拱
self._upper_is_arch_=False
self._lower_is_arch_=False
self.lock = threading.RLock()
#
self._watched_props = [k for k in self.__dict__ if k.startswith('_')]
def __setattr__(self, name, value):

View File

@ -8,7 +8,7 @@ from hardware.relay import RelayController
from hardware.inverter import InverterController
from hardware.transmitter import TransmitterController
from hardware.RFID.rfid_service import rfid_service
from vision.camera import CameraController
from vision.camera import DualCameraController
from vision.detector import VisionDetector
from feeding.controller import FeedingController
@ -28,9 +28,15 @@ class FeedingControlSystem:
self.transmitter_controller = TransmitterController(self.relay_controller)
# 初始化视觉系统
self.camera_controller = CameraController()
self.camera_controller = DualCameraController(settings.camera_configs)
self.vision_detector = VisionDetector(settings)
# 初始化RFID控制器
self.rfid_controller = rfid_service(
host=settings.rfid_host,
port=settings.rfid_port
)
# 初始化下料控制器
self.feeding_controller = FeedingController(
self.relay_controller,
@ -43,11 +49,7 @@ class FeedingControlSystem:
settings
)
# 初始化RFID控制器
self.rfid_controller = rfid_service(
host=settings.rfid_host,
port=settings.rfid_port
)
# 线程管理
self.monitor_thread = None
@ -60,39 +62,38 @@ class FeedingControlSystem:
print("初始化控制系统...")
# 设置摄像头配置
self.camera_controller.set_config(
camera_type=self.settings.camera_type,
ip=self.settings.camera_ip,
port=self.settings.camera_port,
username=self.settings.camera_username,
password=self.settings.camera_password,
channel=self.settings.camera_channel
)
# self.camera_controller.set_config(
# camera_type=self.settings.camera_type,
# ip=self.settings.camera_ip,
# port=self.settings.camera_port,
# username=self.settings.camera_username,
# password=self.settings.camera_password,
# channel=self.settings.camera_channel
# )
# 初始化摄像头
if not self.camera_controller.setup_capture():
raise Exception("摄像头初始化失败")
# # 初始化摄像头
# if not self.camera_controller.setup_capture():
# raise Exception("摄像头初始化失败")
# 加载视觉模型
if not self.vision_detector.load_models():
raise Exception("视觉模型加载失败")
# if not self.vision_detector.load_models():
# raise Exception("视觉模型加载失败")
if not self.settings.debug_feeding:
if not self.check_device_connectivity():
raise Exception("设备连接失败")
self.camera_controller.start_cameras()
# 启动系统监控(要料,破拱)线程
self.start_monitoring()
if not self.check_device_connectivity():
raise Exception("设备连接失败")
# 启动视觉控制(角度、溢出)线程
self.start_visual_control()
# 启动系统监控
self.start_monitoring()
# 启动对齐检查线程
self.start_alignment_check()
# 启动视觉控制
self.start_visual_control()
# 启动对齐检查
self.start_alignment_check()
# 启动下料轮询线程
# 启动下料线程
self.start_lower_feeding()
print("控制系统初始化完成")
def start_monitoring(self):
@ -126,7 +127,8 @@ class FeedingControlSystem:
"""视觉控制循环"""
while self.state.running:
try:
current_frame = self.camera_controller.capture_frame()
print('visual_control')
current_frame = self.camera_controller.get_single_latest_frame()
if current_frame is not None:
# 执行视觉控制逻辑
self.feeding_controller.visual_control(current_frame)
@ -148,13 +150,15 @@ class FeedingControlSystem:
while self.state.running:
try:
if self.state._lower_feeding_stage == 4: # 等待对齐阶段
current_frame = self.camera_controller.capture_frame()
current_frame = self.camera_controller.get_single_latest_frame()
if current_frame is not None:
self.state.vehicle_aligned = self.vision_detector.detect_vehicle_alignment(current_frame)
if self.state.vehicle_aligned:
print("检测到模具车对齐")
else:
print("模具车未对齐")
else:
print('未检测到图像')
time.sleep(self.settings.alignment_check_interval)
except Exception as e:
print(f"对齐检查循环错误: {e}")