1. 嵌入式软PLC掘进机控制平台概述
煤矿掘进机作为采掘工作面的核心设备,其控制系统需要同时处理多个液压回路的复杂控制需求。传统采用地面通用型PLC的方案在实际应用中暴露出维护困难、成本高昂和定制化程度低等问题。我们团队开发的嵌入式软PLC控制平台,基于工业控制计算机(IPC)和Linux实时化改造技术,实现了对掘进机各执行机构的精确控制。
这套系统最大的技术突破在于将传统PLC功能软件化,在保持硬件PLC可靠性的同时,获得了更高的灵活性和更低的成本。具体来说,我们采用x86架构的工业控制计算机作为硬件平台,通过Linux实时化改造和优先级调度优化,使系统响应时间控制在微秒级,完全满足工业控制场景的实时性要求。
2. 系统架构设计与关键技术实现
2.1 嵌入式软PLC整体架构
我们的嵌入式软PLC系统采用分层架构设计,从上到下分为:
- 应用层:掘进机控制逻辑程序
- 运行时系统层:PLC指令解释执行引擎
- 硬件抽象层:设备驱动和IO接口
- 操作系统层:实时化Linux内核
这种架构设计的关键优势在于:
- 硬件无关性:同一套控制程序可以运行在不同硬件平台上
- 模块化设计:各功能模块可以独立开发和更新
- 实时性保障:通过内核级优化确保控制时序精确
2.2 Linux实时化改造方案
标准Linux内核的完全公平调度器(CFS)不适合实时控制场景。我们采用以下改造方案:
-
打实时补丁(RT-Preempt):
- 将内核中大部分自旋锁替换为可抢占的互斥锁
- 实现中断线程化,允许高优先级任务抢占中断处理
- 测试数据显示,最坏情况下的调度延迟从15ms降低到200μs以内
-
优先级调度策略:
c复制// 设置PLC扫描线程为最高优先级
struct sched_param param;
param.sched_priority = 99;
pthread_setschedparam(plc_thread, SCHED_FIFO, ¶m);
- 内存锁定:
c复制// 锁定关键内存页,避免换出导致的延迟
mlockall(MCL_CURRENT|MCL_FUTURE);
2.3 硬件驱动层开发
掘进机控制系统需要处理多种IO信号类型:
| 信号类型 | 接口标准 | 采样频率 | 典型设备 |
|---|---|---|---|
| 数字量输入 | 24V DC | 1kHz | 接近开关 |
| 数字量输出 | 继电器 | 100Hz | 电磁阀 |
| 模拟量输入 | 4-20mA | 500Hz | 压力传感器 |
| 模拟量输出 | PWM | 20kHz | 比例阀 |
我们为每种IO类型开发了专用的设备驱动,采用字符设备接口实现统一的文件操作API:
c复制static struct file_operations io_fops = {
.owner = THIS_MODULE,
.open = io_open,
.release = io_release,
.read = io_read,
.write = io_write,
.unlocked_ioctl = io_ioctl
};
3. 比例阀控制算法实现
3.1 PWM信号生成与非线性补偿
比例电磁阀的控制核心是PWM信号的精确生成。我们采用硬件PWM控制器生成20kHz的基频信号,通过占空比调节实现流量控制。
由于比例阀存在死区和非线性特性,我们实现了三段式补偿算法:
-
死区补偿(占空比0-5%):
python复制if target_duty < 0.05: output_duty = 0 else: output_duty = (target_duty - 0.05) * 1.2 -
线性区补偿(占空比5-80%):
python复制output_duty = 0.05 + (target_duty - 0.05) * 1.05 -
饱和区补偿(占空比80-100%):
python复制output_duty = 0.85 + (target_duty - 0.8) * 0.75
3.2 PID闭环控制实现
掘进机液压系统采用增量式PID算法,避免积分饱和问题:
c复制float pid_update(PID* pid, float error) {
float p_term = pid->kp * (error - pid->last_error);
float i_term = pid->ki * error;
float d_term = pid->kd * (error - 2*pid->last_error + pid->prev_error);
pid->prev_error = pid->last_error;
pid->last_error = error;
return p_term + i_term + d_term;
}
参数整定采用工程实践法:
- 先将Ki和Kd设为0,逐步增大Kp直到系统出现等幅振荡
- 记录此时的临界增益Ku和振荡周期Tu
- 按照Ziegler-Nichols规则设置参数:
- Kp = 0.6*Ku
- Ki = 1.2*Ku/Tu
- Kd = 0.075KuTu
3.3 斜坡函数实现
平滑的速度变化通过斜坡函数实现,核心算法:
c复制float ramp_update(Ramp* ramp, float target, float dt) {
float step = ramp->rate * dt;
if (fabs(target - ramp->current) <= step) {
ramp->current = target;
} else {
ramp->current += (target > ramp->current) ? step : -step;
}
return ramp->current;
}
实际应用中,我们根据液压系统特性设置不同的斜坡时间:
- 主截割回路:5秒加速/减速
- 支架回路:3秒位置调整
- 破碎回路:2秒压力建立
4. 软PLC应用程序开发
4.1 设备描述文件设计
采用XML格式定义IO点和参数:
xml复制<device>
<io_point>
<name>MainCutterSpeed</name>
<type>AO</type>
<address>0x4000</address>
<min>0</min>
<max>100</max>
<unit>%</unit>
</io_point>
<io_point>
<name>HydraulicPressure</name>
<type>AI</type>
<address>0x4100</address>
<min>0</min>
<max>31.5</max>
<unit>MPa</unit>
</io_point>
</device>
4.2 控制程序模块化设计
掘进机控制程序采用功能块(Function Block)架构:
-
主截割控制模块:
- 实现截割速度闭环控制
- 处理推进系统的联动逻辑
- 过载保护和自动降速功能
-
支架控制模块:
- 支护压力自适应调节
- 垂直位置PID控制
- 多支架同步控制
-
破碎系统模块:
- 破碎力前馈控制
- 堵转检测和处理
- 能量优化算法
-
安全监控模块:
- 故障树分析(FTA)
- 多级报警处理
- 紧急停机逻辑
4.3 变量映射实现
采用哈希表实现高效的变量名到地址的映射:
c复制struct var_mapping {
char name[32];
void* address;
enum io_type type;
UT_hash_handle hh;
};
struct var_mapping* var_table = NULL;
void add_mapping(const char* name, void* addr, enum io_type type) {
struct var_mapping* m = malloc(sizeof(*m));
strncpy(m->name, name, sizeof(m->name));
m->address = addr;
m->type = type;
HASH_ADD_STR(var_table, name, m);
}
5. 系统调试与优化
5.1 实时性测试方法
我们采用以下方法验证系统实时性能:
-
使用cyclictest工具测量调度延迟:
bash复制
cyclictest -t1 -p99 -n -i1000 -l10000 -
通过示波器测量IO响应时间:
- 数字量输入到输出的延迟 < 500μs
- 模拟量控制环周期 < 2ms
-
长期运行稳定性测试:
- 连续运行72小时无控制误差累积
- 看门狗触发次数为0
5.2 常见问题排查
-
PWM输出不稳定:
- 检查电源滤波电容
- 验证接地回路
- 调整死区补偿参数
-
PID控制振荡:
- 降低比例增益Kp
- 增加微分增益Kd
- 检查传感器反馈延迟
-
通信中断:
- 检查屏蔽双绞线连接
- 验证终端电阻配置
- 测试总线负载率
5.3 性能优化技巧
-
内存访问优化:
- 使用
__attribute__((aligned(64)))确保缓存对齐 - 预取关键数据到缓存
- 使用
-
计算加速:
- 使用NEON指令集加速浮点运算
- 查表法替代复杂函数计算
-
IO吞吐量提升:
- DMA传输替代CPU拷贝
- 批量读写减少上下文切换
在实际应用中,这套嵌入式软PLC系统相比传统硬件PLC方案展现出显著优势:成本降低60%以上,维护时间缩短80%,同时通过灵活的软件配置可以快速适应不同型号掘进机的控制需求。特别是在复杂地质条件下的自适应控制方面,软件方案可以通过算法升级持续改进性能,这是固定功能的硬件PLC难以实现的。