开源软件Scilab在自控原理教学中的仿真应用
2015-05-30董南萍廖文江周冠玲
董南萍 廖文江 周冠玲
[摘 要]《自动控制原理》课程是自动化相关专业本科教育中一门重要专业课,课程涉及较多公式和数学知识、比较抽象,因此学习过程中都会感到难于理解和掌握相关理论。用户基于Scilab开发自己所需的Toolkit,并将此功能成功应用到《自动控制原理》课程的教学过程中,可以增强课程教学内容的趣味性,激发学生的学习兴趣和实践能力,提高课程教学质量。
[关键词]Scilab 自由开源软件 Toolkit 教学仿真
[中图分类号] TP31;G642 [文献标识码] A [文章编号] 2095-3437(2015)04-0119-02
一、引言
《自动控制原理》课程是自动化相关本科专业中一门非常重要的专业课程,课程中涉及的公式和数学知识比较多、比较抽象,因此多数同学在学习过程中都会感到理解和掌握课程的相关理论很难。有些教师尝试在课程中引入Matlab软件,但是Matlab是商业工程计算软件,本身要收费且安装费时,影响正常课堂教学,而Scilab是一款自由开源的工程计算软件,软件功能基本和Matlab软件差不多,软件本身开源,学生可以在课余阅读这款软件是如何编写出来的,同时该软件有用户接口,用户可以自己独立编写自己需要的Toolkit,开发新应用很方便,值得推广和使用。
二、基于Scilab的编程
在许多领域特别是控制系统建模与仿真时,有许多计算程序是用其他语言编写,一般是用C语言或者Fortran语言编写,Scilab不可能提供这些特定的程序,需要用户基于Scilab自己编写这些程序,并在Scilab里得以应用从而扩展了Scilab的功能,这也就是Scilab做成开源软件的要旨所在。用户可以根据自己的需要在Scialb下依据自己的需求开发出自己所需的相应功能,而这些开发出来的功能通常是以库的形式存在的,一般都是用C语言编写完成,Scilab把这些代码集合称之为ToolKit箱。
可以基于此项特点结合自动控制原理课程实际所需编写一些典型控制系统案例做成库安装在Scilab系统里供Scilab和SciCos调用,具体开发ToolKit Box流程如下所述:
(一)编写基于C语言的专用库
这一步比较简单,调用Scilab自带的编辑器SciNote软件,在其中编写所需调用典型控制系统方程函数。图1的C代码范例即为用编辑器SciNote软件所编写的函数示例。
#include
#include“stack-c.h”
extern int C2F(dlaswp)(int*n,double*A,int*lda,int*k1,int*k2,int*ipiv,int*step);
int dlaswp1(double*A,int*m,int*n,int*mipiv,int*ipiv)
{const int un =1;C2F(dlaswp)(n,A,m,&un,mipiv,ipiv,&un);}
(二)在Scilab里编译、连接代码
Scilab提供两种方式可以将其他语言编写的功能代码程序连接到Scilab里供Scilab自带的函数或者模块调用执行。
1.把新编写的程序作为Scilab外部程序被Scilab内部函数调用执行,上边的示例代码即是这类编译连接方式。
2.把新编写的程序代码作为Scilab新增加的内置函数,像Scilab内部函数一样可以任意被执行,但这种方式方法有个问题就是C语言的返回值通常是整形或者是指针类型,而Scilab软件的返回类型多数为矩阵,所以用这种方式编写工具箱模块时要注意数据转换问题。
(三)生成动态库
生成动态库写代码是第一步,编译连接代码是第二步,要想在Scilab里使用这些库(工具箱)还需要进行第三步就是加载共享库。如果选用的系统平台是Windows那么共享库可以以.dll结尾,如果选用类Unix系统平台那么共享库的名字后缀常采用.so结尾。在Linux下通常采用Gcc工具将上边编译好的代码生成动态共享库,示例如下图2所示。
(四)加载动态共享库
在生成动态共享库以后还需将库加载到Scilab里,供正在运行的Scilab/SciCos调用。Scilab支持TCL语言,可以编写脚本文件将库调入到Scilab里,运行这个脚本文件即可创建一个工具箱(库),脚本文件示例代码如下图3所示。
ilib_name =liblapack;
files=[lapack.o];
libs=[];
t=[dgetrf,int_dgetrf;dlaswp,dlaswp];
ilib_build(ilib_name,t,files,libs)
三、SciCos创建交互式界面
用SciCos创建交互式界面,可以依据设计需要在窗口体上直接调用窗口控件例如滚动条、按钮、菜单栏、文本框等来设计交互界面,Scilab用户只需在对话框里键入工具箱里的函数名字即可使用工具箱的功能,如下图4所示。
四、在自控原理教学中应用Scilab
《自动控制原理》课程是自动化相关专业教师和学生公认的专业知识最核心、同时又是最难教与学的课程,教学难度大主要因为该课程有三多一少的特点:一多是涉及的理论知识内容多,二多是涉及的数学公式推导多,三多是抽象的概念和模型多;一少是理论与实际应用的直接联系少。为此,在自控原理教学中采用现代化教学方法,应用Scilab改进教学内容、教学方式和教学手段,让学生在Scilab下对控制系统建模、仿真,使学生逐步了解一个控制系统是如何组成的,系统各个环节的模型是怎样建立的,系统各个环节又是如何运作的,加强学生对整个控制系统模型概念的理解。
在Scilab下的CACSD工具箱中有许多自动控制相关专用函数,如线性系统定义函数syslin0、线性系统时域响应函数csim()、离散系统分析等命令函数等等。教师和学生共同参与进行二次开发,作出适合于自动控制原理课程展示、控制系统分析的可视化数值实验箱。开发过程中根据已有的经典控制理论和教材的内容,应用Scilab及其CACSD和SciCos工具箱实现连续线性控制系统分析(包括稳定性分析、时域分析、根轨迹分析、频域分析等),典型环节动态特性仿真,PID控制仿真编程等。用TCL语言开发GUI界面,通过按钮、滚动条、输入文本框的GUI界面元素实现对自动控制系统的各项参数的输入、调整、结果实时显示等功能。工具箱的PID仿真结果如图5所示。
五、结束语
在《自动控制原理》课程教学中通过Scilab进行仿真和分析,解决了该课程三多一少的难题,增强了课程教学内容的趣味性和可理解性,激发了学生的学习兴趣和实践能力,极大提高了课程教学效果。
[ 参 考 文 献 ]
[1] 胡寿松.自动控制原理(第5版)[M].北京:科学出版社,2007.
[2] 秦世飞.Scilab / Scicos在建模与仿真中的应用[M].北京:北京邮电大学出版社,2007.
[责任编辑:张 雷]