From 40a26112d76cde3b5f23417d6a9ee426f703f0f2 Mon Sep 17 00:00:00 2001 From: cdeyw <827523911@qq.com> Date: Tue, 30 Sep 2025 16:08:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E6=96=B9=E6=B3=95=E4=BB=8B?= =?UTF-8?q?=E7=BB=8D=EF=BC=8C=E5=8F=82=E6=95=B0=E4=BF=AE=E6=94=B9=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E4=BB=A5=E5=8F=8A=E6=B5=8B=E8=AF=95=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 154 ++++++++++++++++++++++++++++++++++ feeding/process.py | 6 +- readme | 18 ---- tests/hardware_test.py | 2 +- tests/test_feeding_process.py | 3 +- 5 files changed, 159 insertions(+), 24 deletions(-) create mode 100644 README.md delete mode 100644 readme diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fb94dd --- /dev/null +++ b/README.md @@ -0,0 +1,154 @@ +## 系统架构 + +系统主要包含以下组件: +1. **硬件控制模块** - 控制继电器、变频器和重量变送器 +2. **视觉识别模块** - 处理摄像头图像,识别溢料、角度和车辆对齐状态 +3. **控制逻辑模块** - 实现下料流程控制和状态管理 +4. **系统管理模块** - 协调各组件工作,管理线程和系统状态 + +## 核心功能模块 + +### 1. 下料流程控制 (FeedingProcess) + +`FeedingProcess` 类负责核心的下料控制逻辑: + +#### 主要方法: + +- `start_feeding()` +- - 启动整个下料流程: + - 检查设备连接状态 + - 重置计数器 + - 执行上料斗向下料斗的物料转移 + - 等待模具车对齐并开始下料 + +- `_check_device_connectivity()` +- - 检查关键设备连接状态: + - 测试网络继电器连接 + - 测试变频器连接 + - 测试下料斗变送器连接 + +- `transfer_material_from_upper_to_lower()` +- - 上料斗向下料斗下料: + - 读取上料斗初始重量 + - 控制继电器打开上料斗出砼门 + - 基于重量变化控制下料过程 + - 关闭上料斗出砼门并验证下料结果 + - 有两次下料,可以设置下料次数,在core/state.py的upper_feeding_max修改 + +- `wait_for_vehicle_alignment()` +- - 等待模具车对齐: + - 设置系统状态为等待对齐 + - 轮询检查车辆对齐状态 + - 对齐后启动第一阶段下料 + +- `feeding_stage_one()` / `feeding_stage_two()` / `feeding_stage_three()` +- - 三阶段下料控制: + - 分别控制变频器以低速、中速、高速运行 + - 通过重量传感器监控下料过程 + - 根据重量或时间判断阶段完成 + +### 2. 系统控制器 (FeedingController) + +`FeedingController` 类负责系统的实时控制和监控: + +#### 主要方法: + +- `check_upper_material_request()` +- - 检查上料斗是否需要要料: + - 读取上料斗重量 + - 根据重量判断是否需要要料 + - 触发要料请求 + +- `check_arch_blocking()` +- - 检查是否需要破拱: + - 监控重量变化速率 + - 如果重量变化过慢,判断为堵塞 + - 控制破拱继电器进行破拱操作 + +- `visual_control()` +- - 视觉控制主逻辑: + - 使用视觉系统检测溢料和出砼门角度 + - 根据检测结果和状态机控制出砼门开关 + - 包含四种控制模式: + 1. `normal` - 正常模式,保持开门 + 2. `reducing` - 角度减小模式,关闭门以减小开口角度 + 3. `maintaining` - 维持模式,使用脉冲控制保持角度 + 4. `recovery` - 恢复模式,逐步打开门 + 判断状态机状态,执行相应的控制逻辑,首先打开夹爪,进入normal状态,当夹角>=一个阈值,并且开始堆料,进入reducing状态, + 缩小过程中如果没有堆料了,回到recovery状态,如果缩小到设定角度依然堆料,进入maintaining状态,开关开关夹爪,保持低速下料,直到没有堆料,进入recovery状态 + 在recovery过程中产生了堆料,则进入到reducing状态 + +- `pulse_control_door_for_maintaining()` +- - 脉冲控制维持角度: + - 通过开关门的脉冲操作维持目标角度 + - 通过读取传感器数据判断是否完成维持角度 + +### 3. 系统主控 (FeedingControlSystem) + +`FeedingControlSystem` 是系统的主控制器: + +#### 主要方法: + +- `initialize()` - 初始化系统 + - 配置和初始化摄像头 + - 加载视觉识别模型 + - 启动各监控线程 + +- `start_monitoring()` - 启动系统监控线程 + - 监控上料请求 + - 监控破拱需求 + +- `start_visual_control()` - 启动视觉控制线程 + - 持续捕获图像并执行视觉控制逻辑 + +- `start_alignment_check()` - 启动对齐检查线程 + - 检查模具车是否对齐 + +- `_monitor_loop()` / `_visual_control_loop()` / `_alignment_check_loop()` - 各线程的主循环 + +## 硬件接口 + +### 继电器控制器 (RelayController) +控制各种开关门操作: +- 上料斗滑动门 (DOOR_UPPER) +- 上料斗出砼门 (DOOR_LOWER_1) +- 下料斗出砼门 (DOOR_LOWER_2) +- 上料斗破拱 (BREAK_ARCH_UPPER) +- 下料斗破拱 (BREAK_ARCH_LOWER) + +### 变频器控制器 (InverterController) +控制下料电机的转速,实现三阶段下料速度控制。 + +### 变送器控制器 (TransmitterController) +读取上料斗和下料斗的重量数据,用于控制下料过程。 + +## 视觉识别系统 + +系统使用计算机视觉技术进行智能控制: + +1. **溢料检测** - 检测出砼门是否发生溢料 +2. **角度检测** - 检测出砼门的开口角度 +3. **车辆对齐检测** - 检测模具车是否对齐到位 + +## 运行流程 + +1. 系统初始化 +2. 启动监控线程 +3. 等待启动下料指令 +4. 执行上料斗向下料斗的物料转移 +5. 等待模具车对齐 +6. 执行三阶段下料(低速→中速→高速) +7. 完成一轮下料后,再次上料 +8. 执行第二轮三阶段下料 +9. 完成整个下料过程 + +## 测试 + +项目包含针对各个模块的单元测试,位于 `tests/` 目录下: +- `hardware_controller_test.py` - 硬件控制器测试,用debug的方式逐行运行,测试各个硬件功能 + +参数修改: +继电器信息修改hardware/relay.py +变频器修改hardware/inverter.py +变送器修改hardware/transmitter.py +相机参数,夹角阈值,单次下料重量,变频器频率等修改cofig/settings.py \ No newline at end of file diff --git a/feeding/process.py b/feeding/process.py index 91ed086..b8718e7 100644 --- a/feeding/process.py +++ b/feeding/process.py @@ -25,6 +25,7 @@ class FeedingProcess: # 重置计数器 self.state.lower_feeding_cycle = 0 self.state.upper_feeding_count = 0 + self.state.upper_feeding_max = 2 # 第一次上料 self.transfer_material_from_upper_to_lower() @@ -268,9 +269,8 @@ class FeedingProcess: # 增加三阶段下料轮次计数 self.state.lower_feeding_cycle += 1 - # 检查是否完成两轮三阶段下料(总共5吨) - if self.state.lower_feeding_cycle >= 2: - # 完成整个5吨下料任务 + # 检查是否完成两轮三阶段下料 + if self.state.lower_feeding_cycle >= self.state.upper_feeding_max: print("完成两轮三阶段下料,5吨下料任务完成") self.finish_feeding_process() return diff --git a/readme b/readme deleted file mode 100644 index 27aef89..0000000 --- a/readme +++ /dev/null @@ -1,18 +0,0 @@ -1.visual_control_loop()执行逻辑: - 首先申明4个状态,normal, - -1.视觉判断下料,搞定 -2.上料斗来回,搞定 -3.上料斗下料,搞定 -4.三阶段振捣,搞定 -5.检查是否需要要料 -6.分次下料,搞定 -7.模具车对齐后再下料,搞定 -8.继电器控制,搞定 -9.485转发,搞定 -10.震动频率,搞定 -11.控制变频器启停,搞定 -12。破拱 - - - diff --git a/tests/hardware_test.py b/tests/hardware_test.py index 7701d78..ec501f3 100644 --- a/tests/hardware_test.py +++ b/tests/hardware_test.py @@ -80,7 +80,7 @@ def test_inverter_controls(inverter): time.sleep(2) # 测试设置不同频率 - frequencies = [100.0, 200.0, 300.0, 400.0] + frequencies = [220.0, 230.0, 240.0, 400.0] for freq in frequencies: print(f"测试设置频率 {freq}Hz...") result = inverter.set_frequency(freq) diff --git a/tests/test_feeding_process.py b/tests/test_feeding_process.py index b38a666..fd8f25b 100644 --- a/tests/test_feeding_process.py +++ b/tests/test_feeding_process.py @@ -40,8 +40,7 @@ class TestFeedingProcess(unittest.TestCase): patch('feeding.process.InverterController'), \ patch('feeding.process.TransmitterController'): system = FeedingProcess() - # 通过settings修改参数 - system.settings.single_batch_weight = 1500 + # 通过settings修改参数 system.settings.single_batch_weight = 1500 system.settings.min_required_weight = 300 system.settings.target_vehicle_weight = 3000