实现方法介绍,参数修改方法以及测试方法
This commit is contained in:
154
README.md
Normal file
154
README.md
Normal file
@ -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
|
||||||
@ -25,6 +25,7 @@ class FeedingProcess:
|
|||||||
# 重置计数器
|
# 重置计数器
|
||||||
self.state.lower_feeding_cycle = 0
|
self.state.lower_feeding_cycle = 0
|
||||||
self.state.upper_feeding_count = 0
|
self.state.upper_feeding_count = 0
|
||||||
|
self.state.upper_feeding_max = 2
|
||||||
|
|
||||||
# 第一次上料
|
# 第一次上料
|
||||||
self.transfer_material_from_upper_to_lower()
|
self.transfer_material_from_upper_to_lower()
|
||||||
@ -268,9 +269,8 @@ class FeedingProcess:
|
|||||||
# 增加三阶段下料轮次计数
|
# 增加三阶段下料轮次计数
|
||||||
self.state.lower_feeding_cycle += 1
|
self.state.lower_feeding_cycle += 1
|
||||||
|
|
||||||
# 检查是否完成两轮三阶段下料(总共5吨)
|
# 检查是否完成两轮三阶段下料
|
||||||
if self.state.lower_feeding_cycle >= 2:
|
if self.state.lower_feeding_cycle >= self.state.upper_feeding_max:
|
||||||
# 完成整个5吨下料任务
|
|
||||||
print("完成两轮三阶段下料,5吨下料任务完成")
|
print("完成两轮三阶段下料,5吨下料任务完成")
|
||||||
self.finish_feeding_process()
|
self.finish_feeding_process()
|
||||||
return
|
return
|
||||||
|
|||||||
18
readme
18
readme
@ -1,18 +0,0 @@
|
|||||||
1.visual_control_loop()执行逻辑:
|
|
||||||
首先申明4个状态,normal,
|
|
||||||
|
|
||||||
1.视觉判断下料,搞定
|
|
||||||
2.上料斗来回,搞定
|
|
||||||
3.上料斗下料,搞定
|
|
||||||
4.三阶段振捣,搞定
|
|
||||||
5.检查是否需要要料
|
|
||||||
6.分次下料,搞定
|
|
||||||
7.模具车对齐后再下料,搞定
|
|
||||||
8.继电器控制,搞定
|
|
||||||
9.485转发,搞定
|
|
||||||
10.震动频率,搞定
|
|
||||||
11.控制变频器启停,搞定
|
|
||||||
12。破拱
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -80,7 +80,7 @@ def test_inverter_controls(inverter):
|
|||||||
time.sleep(2)
|
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:
|
for freq in frequencies:
|
||||||
print(f"测试设置频率 {freq}Hz...")
|
print(f"测试设置频率 {freq}Hz...")
|
||||||
result = inverter.set_frequency(freq)
|
result = inverter.set_frequency(freq)
|
||||||
|
|||||||
@ -40,8 +40,7 @@ class TestFeedingProcess(unittest.TestCase):
|
|||||||
patch('feeding.process.InverterController'), \
|
patch('feeding.process.InverterController'), \
|
||||||
patch('feeding.process.TransmitterController'):
|
patch('feeding.process.TransmitterController'):
|
||||||
system = FeedingProcess()
|
system = FeedingProcess()
|
||||||
# 通过settings修改参数
|
# 通过settings修改参数 system.settings.single_batch_weight = 1500
|
||||||
system.settings.single_batch_weight = 1500
|
|
||||||
system.settings.min_required_weight = 300
|
system.settings.min_required_weight = 300
|
||||||
system.settings.target_vehicle_weight = 3000
|
system.settings.target_vehicle_weight = 3000
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user