低代码控制器仿真实验教程(二):倒立摆控制

基于Simulink官方的倒立摆控制仿真案例实验教程发布。



1.实验介绍

倒立摆(Inverted Pendulum)是典型的多变量、高阶次、非线性、强耦合、自然不稳定系统。倒立摆系统的稳定控制是控制理论中的典型问题,能有效反映控制理论中的许多关键问题,如非线性问题、鲁棒性问题、随动问题、镇定、跟踪问题等。因此倒立摆系统作为控制理论教学与科研中典型的物理模型,常被用来检验新的控制理论和算法的正确性及其在实际应用中的有效性。

图1-1 Simulink倒立摆模型

本实验设计包含Matab-Simulink模型修改,测点、通道、AOE图配置表格的编写,低代码控制器的连接与使用。基于低代码控制器无需编程的特点,通过硬件在环的仿真方式,可以免除学员为学习编程语言带来的额外负担,更加专注于控制本身,加深学员对控制原理的理解与掌握。

2.实验目标

  1. 成功连接并运行低代码控制器;
  2. 实现Simulink模型与低代码控制器的硬件在环通信;
  3. 基于倒立摆控制原理,编写低代码控制器配置表格并成功实现控制。

3.实验模型

本实验原始模型来自于Simulink官方的倒立摆控制模型,在MATLAB命令行窗口中输入命令:penddemo;可打开该模型,如下图所示:

该模型中包含LQR控制模块、前馈控制模块与PI控制模块,当采用低代码控制器时,需要将所有的控制模块替换为S-函数,在S-函数中实现与低代码控制器通信功能,上送倒立摆数据并接收控制信号,修改后的模型如下图所示:

4.实验步骤

低代码控制器的特点在于不需要对控制器进行代码的编写,只要在excel文件之中进行测点配置、通信通道和AOE配置就可以实现相应的控制。

4.1.编写低代码控制器配置文件

低代码控制器文件配置分为三个部分:测点配置、通信通道配置和AOE配置。测点配置用于配置控制器输入和输出信号点的参数,本案例中需要的信号要是输入设定小车位置、测得小车位置与倒立摆与数值方向夹角,通信通道的配置是为了将控制器与simulink仿真模型建立modbus通信,实现仿真模型与控制器的信息交互,而AOE配置是建立AOE模型网络来实现所需的控制逻辑和功能。

4.1.1.测点配置

测点配置表格的内容包含了测点的点号、名称、别名、是否离散、是否是计算点以及默认值等。点号是程序里给这个测点的编号,可以自己定义,使用时,测点与通信通道的点号一一对应完成对接。别名是英文字母与下划线组合使用,可以当做变量名用于AOE表格里表达式的书写,使之可以不用点号来表达,使得表达式的意思表达得更加清楚。测点配置如下图所示:

本程序需要5个测点,前4个分别为设定的小车位置、测量的小车位置以及控制器输出控制作用在小车上的作用力。其中的别名对应的就是AOE文件之中设置节点事件的表达式的参量,表示在Matlab的Simulink模型中是如图所示的几个参数。
第五个测点DoCal_POINT不是实际物理测点,并不是用于获取控制信号的,每通信一次,这个测点将被设成1让控制器进行计算,控制器开始执行AOE控制策略的时候这个测点会被置0。

4.1.2.通信通道配置

低代码控制器通过Modbus协议与Simulink进行通信。由于Matlab仅有Modbus客户端功能,因此需要将低代码控制器配置为Modbus服务端,如下图所示,其中通道数量为1,服务端口需设置为未占用端口。

然后对客户端信息和测点信息等进行配置,如下图所示:

本实验中需要用五个寄存器存储数据,前四个存储的是四个有测量数据的测点的监测结果,数据类型为八位浮点数,最后一个寄存器存储的是不进行监测的测点的值,这个测点只有0和1两个结果,所以数据类型设置为无符号整数。

4.1.3.AOE配置

本实验中的AOE网络图如图所示:

AOE网络声明

AOE网络声明部分,定义了表格之中的AOE网络个数和整体信息以及一些变量的初始值。其中触发条件分为三类:SimpleRepeat(定时触发,需要自行设定定时时间)、TimeDriven(时间驱动)、EventDriven(事件驱动);变量的定义方式为:<变量名1>:<初值1>;<变量名2>:<初值2>;…。
本案例中的AOE网络声明如下所示:

本实验中需要定义多个变量初始值。具体包括:Ts:采样周期;Ecar:小车位置与设定位置的偏差;Pgain:比例环节的增益系数;Igain:积分环节的增益系数;Iuplim & Idownlim:积分环节的输出上限和下限;num1 & num0:前馈环节传递函数分子(一次项和常数项)的系数;den1 & den0:前馈环节传递函数分母(一次项和常数项)的系数;K1 & K2 & K3 & K4:LQR控制环节的最优反馈增益矩阵的元素;uplim & downlim:作用在小车上的作用力的上下限;Pout & Iout:比例和积分环节的输出;Ecarn1:前一个仿真步长中小车位置与设定位置的偏差;Ilimout:积分环节限幅之后的输出;Feedforwardout:前馈环节的输出;cartsetn1:前一个仿真步长中,小车位置的设定值;cartn1:前一个仿真步长中小车的位置;Pendulumn1:前一个仿真步长中,摆杆与垂直方向的夹角;dcart:小车的速度;dPendulum:摆杆的角速度;LQRout:LQR环节的输出;ctrlout:PI反馈环节,前馈环节和LQR环节的总输出。

AOE节点声明

节点类型分为Switch和Condition两类,其中Switch节点为二分支逻辑判断,触发逻辑为:表达式为真时,该节点序号为1的边进行动作;表达式为假时,序号为2的边进行动作。当Switch节点为AOE网入度为0的节点(首节点)时,Switch节点直接触发,若超时时间内表达式为真,则执行动作1,为假或者发生超时事件执行动作2;Condition节点的表达式为事件触发条件,超时时间内表达式为真,则节点事件发生,该节点出发的所有动作并行执行。

本案例的节点声明如下:

本案例中一共有八个节点,第一个节点是simulink通信事件节点,为事件触发类型,当DoCal_POINT>0.5时,该节点被触发,进入运算流程。
中间6个节点都是运算节点,也都是事件触发类型,当每个分步的计算步骤完成时,该节点被触发,并进入下一个计算步骤。
最后一个节点是结束节点,是事件触发类型,当所有的计算步骤都完成,信号传输后,进入结束节点,计算结束,并将DoCal_POINT的数值改为0。超时时间定为100ms,防止AOE被反复触发。

AOE边声明

边需要声明首尾节点,格式为:<尾节点ID>;<首节点ID>。边的方向为:尾节点→首节点。边的动作类型有:None、SetPoints、Solve、Milp、SimpleMilp、Nlp。其中,SetPoints除了对测点设值之外,还可以进行变量定义和计算,动作参数分为数字量和模拟量;Solve为求解方程Ax=b;Milp为混合整数线性规划问题求解;Nlp为非线性规划问题求解。

本案例中的AOE边声明如下图所示:

本实验中的边声明全部都是SetPoints,连接节点的同时还需要进行动作。

4.1.4.配置文件存储

在excel表格中编写完成之后,将表格另存为.csv格式(纯文本形式存储表格数据)文件供低代码控制器使用。

4.2.编写Simulink与控制器通信程序

modbusCom.m是本实验模型控制器的源文件,建立与低代码控制器通信的作用。

下图表示的是输入和输出值的个数,本实验中的输入有三个,包括设定小车的位置,测定小车的位置以及测定的摆杆与垂直方向的夹角。输出有一个,就是控制器的输出,控制的是输出在小车上的作用力。

下图表示的是定步长仿真的仿真步长为0.02s。

下图表示建立与控制器的通信。

如图所示,需要将输入写入控制器,再从控制器中读取控制信号。图中的pause(0.06)用于设置等待时间,当控制器和计算机的性能较好时,可以适当修改这个参数,可以加快仿真通信的速度,使动画跟随的动作加快。

5.低代码控制器配置与运行

该部分与温度控制案例相同。

6.低代码控制器配置与运行

先运行低代码控制器,再运行Simulink模型,进行仿真。得到的利用低代码控制器的控制结果如下所示:

由该仿真实验可以看出,使用低代码控制器并不需要繁复的程序代码编写,只需要编写测点配置、通信通道配置和AOE配置文件就可以实现通信和控制功能,与目前常用的其他控制器相比,更方便于非编程技术背景人员的应用。

倒立摆仿真实验AOE配置文件下载链接

SGOOL团队

2021年9月18日




版权声明:本文由SGOOL团队创作和发表,转载或引用本文内容请注明作者及出处。

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器