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

104 lines
3.3 KiB
Python

from PySide6.QtCore import Signal, QObject
import threading
from enum import IntEnum
class SystemState(QObject):
"""状态中以_开头的属性会发送信号通知,不需要的不要加_开头"""
state_updated=Signal(str,object)
def __init__(self):
super().__init__()
#
self._watched_props = []
self.lock = threading.RLock()
# 系统运行状态
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 #上料斗最大下料次数
# 重量相关
self.last_upper_weight = 0
self.last_lower_weight = 0
self.last_weight_time = 0
#需要下料的总重量
self._mould_need_weight=0
#完成下料的总重量
self._mould_finish_weight=0
self.initial_upper_weight=0
self.initial_lower_weight=0
# 错误计数
self.upper_weight_error_count = 0
self.lower_weight_error_count = 0
# 视觉系统状态
self.angle_control_mode = "normal" # 角度控制模式: normal, reducing, maintaining, recovery
self.overflow_detected = "0" # 堆料检测
self.current_finish_status=False # 当前是否完成浇筑满
self.door_opening_large = False # 夹角
self.vehicle_aligned = False # 模具车是否对齐
self.last_angle = None # 上次检测角度
#当前RFID的内容格式为 模块编号,分块号,尺寸规格,方量
self.rfid_current=None
#当前生产的管片
self.current_artifact=None
#当前生产状态
self._feed_status=FeedStatus.FNone
#每方重量
self.density=2416.4
#
self._watched_props = [k for k in self.__dict__ if k.startswith('_')]
def __setattr__(self, name, value):
super().__setattr__(name, value)
if name in self._watched_props:
with self.lock:
public_name = name.lstrip('_')
self.state_updated.emit(public_name, value)
class FeedStatus(IntEnum):
#初始值
FNone = 0
# 检查模车(模车到位)
FCheckM = 1
#RFID检测或匹配
FRFID=2,
# 开始(管片待生产任务)
FApiCheck = 3
# 检查盖板(盖板到位)
FCheckGB = 4
# 上料到下料(上料斗到下料斗)
FUpperToLower=5
#下料1
FFeed1 = 6
# 下料2
FFeed2 = 7
# 下料3
FFeed3 = 8
#完成(管片生产完成)
FFinished = 11