缩略图

半实物仿真在《计算机控制技术》课程教学中的应用

作者

崔世林 李梦杰

南阳理工学院智能制造学院 河南省南阳市 473000

《计算机控制技术》课程教学中,传统的方法是采用理论讲解和 MATLAB 仿真相结合的方法进行。学生理解起来比较抽象,MATLAB 仿真的内部运行机制相对封闭,学生难以理解仿真运行的细节,难以把仿真程序和实物系统有效的结合起来。

本文在教学过程中,采用了一种半实物仿真的方式,该方式采用 Python 编写上位机程序,通过串口和 MATLAB 进行通信,并控制 MATLAB 中的仿真的被控对象。Python 中编写的控制器程序可以不加修改的应用到实际工业控制系统中。这种仿真方式能够增强学生对工业实物控制系统设计的理解和掌握,架起了理论和实践之间的桥梁,能够促进学生在学中做,在做中学,使得学生不去企业实习,也能取得比企业实习更好的实习效果。

一、传统的控制系统仿真

传统的 MATLAB 仿真框图 [1] 如下图 1 所示。

图1 离散时间PID 控制仿真

这种方法存在很多缺点,Simulink[2] 的图形化建模降低了入门门槛,但学生可能过度依赖模块拖拽,缺乏 PID 算法的底层代码训练,导致学生在嵌入式开发中,难以将仿真知识转化为代码,形成 “仿真会调参,代码不会写” 的技能断层。

本文为了提高教学效果,增强学生的实践动手能力,对教学内容进行了两个方面的优化,第一个针对纯 MATLAB 仿真情况的优化,第二个是半实物仿真(Hardware-in-the-Loop, HIL)优化。

二、纯MATLAB 仿真的一种优化方法

第一个优化的主要方式是对 Simulink 仿真中的 PID 模块进行优化,优化后的仿真框图如图2 所示,图3 中,采用用户自定义函数代替了PID 模块,学生在用户自定义函数中,自主编写 PID 控制器的实现代码 [3]。这种方法可以有效的提高学生对 PID 控制器代码编写的动手能力,深刻体会如何将PID 理论转换为代码的运行,深刻的体会采样周期及控制系统无限循环的运行方式。

图2 采用用户自定义函数编写PID 控制器代码用户自定义函数的代码如下。

function

% 离散PID 控制器实现

% 输入:e - 误差信号(设定值与实际值的偏差)

% 输出:u - PID 控制器输出

% PID 参数设置

kp= 1 ; % 比例增益,决定系统响应速度ki= 0.1 ; % 积分增益,用于消除稳态误差kd= 1.5 ; % 微分增益,提供预测作用,减少超调

persistent uki uki1 ek1; % 声明持久变量,用于存储历史状态(在函数调用间保持值)% 初始化持久变量(首次调用函数时执行)if(isempty(uki)) ; % 上一时刻积分项输出ek1=0 ; % 上一时刻误差值end% 计算当前误差ek=e ;% 计算PID 各分项输出μp=kp* ek; % 比例项:与当前误差成比例uki=ki*ek+uki1 ; % 积分项:累积误差,使用递推公式计算 ek1; % 微分项:基于误差变化率% 计算总输出(三项之和)u=up+ uki + ukd;% 更新历史状态变量,为下一时刻计算做准备 ; % 保存当前误差为下一时刻的历史误差 ; % 保存当前积分项输出为下一时刻的历史积分通过代码的编写,学生能够准确的理解 PID 运算的细节,避免陷入试凑法调参这样的低层认知中。

三、半实物仿真

本文的第二个改进是半实物仿真教学设计。半实物仿真采用 Python 编写控制器代码,采用MATLAB 运行被控仿真对象,通过虚拟串口[4] 通信实现控制器和被控对象的连接,该方法中的Python 代码,可以不加修改的运行在任何可以运行Python 的控制器硬件上,和工程实际具有 100% 的契合度,同时又不要求有实际硬件,又提高了教学效率,又使得学生能够在课堂上接受工程实践训练,因此具有显著的教学优势。

半实物仿真系统共分三个模块 , 控制模块,仿真模块,通信模块。控制模块采用Python 语言编写,负责实现 PID 算法,PID 控制器的输出通过虚拟串口 COM2 发送控制信号,COM2 和 COM3 为内部连接串口,COM2 发送的数据,COM3 会接收到。同时,控制模块通过虚拟串口5 负责接收被控对象的输出数据。仿真模块如图3 所示。

图3 半实物仿真的MATLAB 端框图

被控对象的输出通过串口 COM4 输出,COM4 和 COM5 通过虚拟串口内部互联,COM4发送的数据,被 COM5 接收。Python 程序读取 COM5 接收到的数据,该数据即为被控对象的输出。整个系统形成了一个完整的闭环控制,Python 发送控制信号,MATLAB 接收信号并仿真,MATLAB 返回二阶传递函数数据,Python 接收数据并计算下一次控制输出。这个流程会不断循环,直到超时结束。

四、仿真效果对比

图 4 为用户自定义函数的仿真效果,图 5 为半实物仿真的效果。图 4 和图 5 有极小的区别,主要原因是 Python 程序采用的整数计算,因为实际硬件大多采用定点算法,因此和浮点数运算相比,有极小的差异。

图 4 MATLAB 模块仿真结果
图5 半实物仿真结果

五、总结

本文提出的这种半实物仿真的方式,采用 Python 编写上位机程序,通过串口和MATLAB 进行通信,并控制MATLAB 中的仿真的被控对象。Python 中编写的控制器程序可以不加修改的应用到实际工业控制系统中,能够切实增强学生实践动手能力,架起了理论和实践之间的桥梁,且该系统在节约成本,加快项目进度,检验项目效果,安全环保等方面具有极大优势。

参考文献

[1] 王正林等 .MATLAB/Simulink 与控制系统仿真 (M), 电子工业出版社 ,2025.5.

[2] 王燕平 . 控制系统仿真与 CAD(M). 机械工业出版社 ,2025.4.

[3] 姜学军 . 计算机控制技术 (M), 清华大学出版社 ,2022.1.

[4] 严刚峰 .MALAB/Simulink 控制系统仿真 (M), 清华大学出版社 ,2025.4.

崔世林,副教授,博士,毕业于华中科技大学。

本文受南阳理工学院高等教育教学改革研究资助,项目批准号:NIT2023JY-133