采煤机截割曲线畸变连续调节补偿技术【附仿真】
✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。
✅ 专业定制毕设、代码
✅如需沟通交流,点击《获取方式》
(1)底板截割曲线畸变机理与遗传算法反演轨迹:
采煤机行走过程中,前滚筒截割底板后,刮板输送机中部槽在推移后呈弯曲形态,导致采煤机在下一刀记忆截割时行走轨迹偏离原底板轮廓,产生曲线畸变。通过分析采煤机滑靴与刮板机槽帮的接触几何,建立了采煤机姿态与底板轨迹偏移关系的运动学模型。在采煤机机身上安装三个激光测距传感器和双轴倾角仪,实时采集机身俯仰角、横滚角及滑靴与槽帮距离数据集。采用遗传算法对当前底板截割曲线进行反演:编码采煤机所走过的空间坐标序列,适应度函数为传感器测量值与根据运动学模型推算值之差的平方和,迭代200代后,反演轨迹与真实底板轨迹的最大误差小于0.038m,满足连续调节控制要求。并由此定义了底板畸变判定条件:当底板曲线的曲率半径大于10倍滑靴间距时,无需调整滚筒高度;否则需要进行卧底量补偿。
(2)WOA优化模糊PID卧底量调节控制器与AMESim-Simulink联合仿真:
卧底量调节通过改变采煤机前滚筒的升降高度实现。液压调高系统采用阀控非对称缸,在AMESim中建立电磁比例换向阀、液压缸及负载模型,机械负载由RecurDyn采煤机模型提供。在Simulink中设计模糊PID控制器,以目标卧底量与实际反馈之差及其变化率为输入,输出比例阀控制电流。选取模糊规则中量化因子和比例因子共6个参数,利用鲸鱼优化算法WOA进行寻优,适应度函数取为卧底量绝对误差积分IAE。WOA种群30,迭代50次,优化后控制器在各工况下调整误差降低32%。联合仿真设置三种工况:下行轨迹、上行轨迹及混叠凸型轨迹。下行时截割底板最大偏差从0.12m降至0.06m,上行时偏差最大0.035m,混叠凸型偏差最大0.032m,证明连续调节补偿策略可以有效缓解畸变影响。
(3)采煤机实验样机平台验证与上位机软件开发:
在1:3缩比实验样机上搭建测试平台,刮板输送机中部槽可预设弯曲角度模拟底板起伏,采煤机行走部安装伺服电机驱动。卧底量调节系统控制器采用贝加莱X20 PLC,运行模糊PID优化算法,传感器数据通过CAN总线采集。上位机软件基于C#开发,实时显示采煤机姿态角、当前位置下卧底量目标值与实际值,并记录历史曲线。实验结果表明,在下行截割工况底板曲线最大偏差仅0.0052m,上行最大偏差0.004m,起伏工况0.006m,均低于设计允许的0.01m偏差,验证了连续调节控制系统的有效性。该系统具备在线自适应补偿能力,无需人工干预即可维持底板截割精度,有助于提升综采工作面自动化水平。
import numpy as np from scipy.interpolate import UnivariateSpline import random # 遗传算法反演底板轨迹 def inverse_trajectory_ga(measurements, pop_size=50, gens=200): # measurements: 激光测距和倾角数据 dim = len(measurements)*2 # 简化:每步x,z def fitness(trajectory): traj = trajectory.reshape(-1,2) # 运动学模型转换传感器预测值 pred = np.zeros(len(measurements)) for i in range(len(measurements)): pred[i] = traj[i,1] - 0.1*np.sin(traj[i,0]) # 简化 return np.sum((pred - measurements)**2) pop = np.random.rand(pop_size, dim)*2 - 1 best_sol = None; best_fit = np.inf for gen in range(gens): fit = np.array([fitness(ind) for ind in pop]) idx = fit.argsort() pop = pop[idx[:pop_size//2]] # 交叉变异 new_pop = [] for _ in range(pop_size): p1 = pop[random.randint(0,len(pop)-1)] p2 = pop[random.randint(0,len(pop)-1)] child = np.where(np.random.rand(dim)<0.5, p1, p2) child += np.random.normal(0,0.02, dim) new_pop.append(child) pop = np.array(new_pop) if fit[0] < best_fit: best_fit = fit[0]; best_sol = pop[0] return best_sol.reshape(-1,2) # WOA 优化模糊PID参数 class WOA_optimizer: def __init__(self, dim, bounds, pop=30): self.pop = np.random.rand(pop, dim) for d in range(dim): self.pop[:,d] = bounds[d][0] + self.pop[:,d]*(bounds[d][1]-bounds[d][0]) self.bounds = bounds def optimize(self, cost_fn, iter=50): best_idx = 0 best_cost = np.inf for t in range(iter): a = 2 - t*(2/iter) for i in range(len(self.pop)): r = np.random.rand(); A = 2*a*r - a; C = 2*r if np.random.rand() < 0.5: D = np.abs(C * self.pop[best_idx] - self.pop[i]) new = self.pop[best_idx] - A*D else: rand_idx = np.random.randint(len(self.pop)) new = self.pop[rand_idx] - A*np.abs(C*self.pop[rand_idx] - self.pop[i]) new = np.clip(new, [b[0] for b in self.bounds], [b[1] for b in self.bounds]) self.pop[i] = new cost = cost_fn(self.pop[i]) if cost < best_cost: best_cost = cost; best_idx = i return self.pop[best_idx] # 模糊PID控制 def fuzzy_pid_control(error, error_c, params): Ke, Kec, Kp, Ki, Kd = params e_fuzz = Ke * error; ec_fuzz = Kec * error_c # 简化规则表 u = Kp*error + Ki*np.sum(error)*0.01 + Kd*error_c return u # 主程序 if __name__ == '__main__': meas = np.sin(np.linspace(0,2*np.pi,20))*0.1 + 0.01*np.random.randn(20) traj = inverse_trajectory_ga(meas) print('反演轨迹前3点:', traj[:3]) bounds = [(0.1,2)]*6 woa = WOA_optimizer(6, bounds) best_params = woa.optimize(lambda p: np.sum(p**2), iter=30) print('优化参数:', best_params)