APP下载

PYTHON在自动控制原理课程仿真中的应用

2022-04-25郭玉祥周函张庆平李彦梅

关键词:自动控制仿真

郭玉祥 周函 张庆平 李彦梅

【摘   要】   自动控制原理课程常常需要运用软件绘制图形,而MATLAB又存在价格昂贵、关键代码被隐藏和可移植性不高等诸多不便。基于此,给出了PYTHON软件在自动控制原理课程仿真中的应用和一些具体实例的仿真程序代码。首先使用ANACONDA开源软件,安装第三方开源包SLYCOT和CONTROL以搭建环境,然后基于PYTHON语言环境开展系统的时域、复域和频域仿真以及系统的校正与设计仿真,并与相关参考文献里的MATLAB仿真结果进行比较,结果表明二者的仿真效果并无明显区别,为系统的仿真和绘图提供了一种新方式。

【关键词】   PYTHON;自动控制;传递函数;仿真

Application of PYTHON in the Simulation of Automatic

Control Principle Course

Guo Yuxiang, Zhou Han, Zhang Qingping, Li Yanmei*

( Anqing Normal University, Anqing 246011, China)

【Abstract】    The course of automatic control principle usually needs to use software to draw graphics while MATLAB exists a number of inconveniences such as high cost, hidden critical code, the lack of portability, and so on. Based on these statements, the paper shows the applications of PYTHON software in the course of automatic control principle and gives many simulated codes of the relevant examples.It employs thefree software of ANACONDA and installsthe third-partyopen source package of SLYCOT and CONTROL at first, in order to set up the environment.And then itis based on the PYTHON language environment to simulate the system in the time domain, the complex domain, the frequency domain and the calibration and design of plant. Further compared with the MATLAB simulations of the related references, the results show that there is no obvious difference between PYTHON and MATLAB on the simulation of the system, and it offers a new way for simulations and plots of system.

【Key words】     PYTHON; automatic control; transfer function; simulation

〔中圖分类号〕  TP273                        〔文献标识码〕  A              〔文章编号〕 1674 - 3229(2022)01- 0120 - 06

0     引言

自动控制原理[1-2]是自动化及相近专业本科生的必修课,其内容主要包含控制系统数学模型建立,用时域法、根轨迹法和频域法对已建立的模型系统进行分析和校正,使系统达到性能指标要求。系统的时域法是在时间域内分析和校正系统的方法,可以直接在时间上给出系统响应的全部信息。在时间域里,绘制典型输入信号系统的响应曲线,以便直观、准确地计算和分析系统的动态性能和稳态性能,对改善和校正系统性能提供指引。线性系统的根轨迹法是在不便计算闭环系统特征根或某一参数发生变化时为系统提供一种非常便捷的图解方法。结合仿真软件,绘制系统的根轨迹,可以形象直观地分析闭环系统的稳态性能和暂态性能,还可以为满足某一性能指标要求而改变参数来改造和校正系统的性能。线性系统的频域法也是一种图解的方法,它是基于频域响应或频域特性来分析、校正以及综合设计控制系统。在使用线性系统的频域法时,需要绘制系统的幅相频率特性曲线、对数幅频相频曲线和对数幅相曲线。其优点是在系统难以建模或传递函数难以确定时,以实验的方式来确定频域特性,继而开展控制系统的分析、校正以及综合设计。因此,利用仿真软件对系统展开分析、校正以及综合设计是研究自动控制系统的重要手段。可现今大多数使用的系统仿真软件是MATLAB(一款商业软件),在使用时需向MATHWORKS公司购买,并且价格昂贵,一些关键代码被隐藏,难以更改算法的细节,可移植性不高,对大多数自动控制原理的学习者来说有着许多不便。4A02A196-6C83-430C-8B2B-6CDFDD91B1EA

PYTHON是一门与MATLAB软件一样有着悠久历史的高级程序设计语言。PYTHON语言是一门面向对象的语言,其中的模块、函数等都是对象并且它们都支持继承、重载等特性[3]。与JAVA、C、C++、JAVASCRIPT等语言不同,PYTHON语言在语法上不支持以花括号为模块的界限而是以每行字母在该行的位置来确定模块的界限。控制类语句如IF、WHILE等的使用方式与JAVA语言、C语言之间无明显区别,但是PYTHON语言创建了新的一些关键字,如IN,IMPORT,IMPORT AS等。其中IN关键词是用来判断一个对象是否在另一个对象之中,IMPORT关键字用来导入文件需要使用的模块或包,IMPORT AS被用来赋予导入对象新的名字。PYTHON的设计定位与其他主流编程语言也不同[4-5],PYTHON坚持“面对具体问题只要有一种最优解法即可”,不再坚持同其他语言的“多种解法”风格。在科学计算领域PYTHON语言扮演着重要角色,其语言的三个经典第三方开源库(即NUMPY、SCIPY以及MATPLOTLIB)分别是为数组处理、数值运算、绘图三个功能而产生的,可以通过IMPORT函数导入进行使用。近年来随着人工智能技术、区块链技术、大数据技术的发展,PYTHON的受欢迎程度也越来越高。可是将PYTHON应用于控制系统的仿真中,已有的文献鲜有报道。李琴等[6]仅仅提出在LABACT自控原理试验机上结合PYTHON语言完成实验任务,并没有完整给出PYTHON用于时域、复数域和频域对控制系统开展分析、校正以及综合设计的过程和相关程序代码,没有体现PYTHON在控制系统仿真中的灵活性和可移植性,也不利于自动控制原理学习者模仿学习、科学地更改算法细节,并将其应用于将来的系统开发和科学研究中。本文利用ANACONDA开源软件,安装第三方开源包SLYCOT和CONTROL来搭建环境,然后基于PYTHON语言环境对时域法、根轨迹法和频域法进行不同对象的计算和仿真,得到图形与相关教材的内容相比较,并给出实例程序代码。下面从时域、复域、频域以及控制系统的校正几个方面给出PYTHON语言的仿真。

1     控制系统的时域仿真

在自动控制原理教材里,无源网络是课程讲解举例时的重要内容,现以两个直接相连接的RC网络为对象建立数学模型。系统的传递函数为[Gs=ω2n/(s2+2ξωn+ω2n)],其中[ωn=4],[ξ=1]。若分别对这两个直接相连接的RC网络施加单位阶跃信号和脉冲信号,对控制系统使用PYTHON语言进行仿真得到图1和图2,与《自动控制原理基础教程》书中[7]的第132页图3-43和图3-44的对比,发现PYTHON语言的控制系统仿真与MATLAB仿真无本质区别,均可以刻画系统在时域内的变化过程。

※基于PYTHON的系统阶跃响应代码为:

from scipy.signal import lti,step2,impulse2

import matplotlib.pyplot as plt

s1=lti([16],[1,5.656,16]) #创建传函's1=16/(1s^2+5.656s+16)'

t1,y1=step2(s1) #系统阶跃输出

plt.plot(t1,y1,color='black',linewidth=1.0) #绘制响应曲线

plt.axhline(y=1,color='green',linewidth=1.0,linestyle='--')

plt.grid()

plt.xlim((0,2.5))

plt.ylim((0,1.2))

plt.show()

※基于PYTHON的系统脉冲响应代码为:

from scipy.signal import lti,step2,impulse2

import matplotlib.pyplot as plt

s=lti([16],[1,5.656,16]) #创建传函's1=16/(1s^2+5.656s+1)'

t,y1=impulse2(s) #系统脉冲输出

plt.plot(t,y1,color='red',linewidth=1.0) #绘制响应曲线

plt.axhline(y=0,color='blue',linewidth=1.0,linestyle='--')

plt.grid()

plt.xlim((0,2.5))

plt.ylim((-0.2,1.85))

plt.show()

2     控制系统的复域仿真

在现实生活中存在着很多高阶的控制系统,如航空航天中的卫星姿态控制、多旋翼无人机控制以及柴油汽车的柴油发动机控制[8],面对一个高阶的控制系统如何快速判断系统的稳定性成为重要问题,但是系统的闭环极点却很难求解。通过自动控制原理的学习,我们知道可以通过绘制系统传递函数零极点图,观察控制系统传递函数零极点的分布情况来快速判断控制系统的稳定性。当系统某参数发生变化时,也可以通过绘制系统的根轨迹图,判断系统的稳定性,假定系统的传递函数为[Gs=Kj=1m(s-zj)/i=1n(s-pi)],以硬盘读写磁头为对象[9]建立模型确定传递函数,假定传递函数有一个零点[z1=-4],两个极点[p1=-2+4j],[p2=-2-4j],使用PYTHON語言进行控制系统仿真,分别绘制零极点图和根轨迹图,得到图3和图4。与《自动控制原理基础教程》[7]中的第162页图4-23和图4-24进行对比发现是一样的,都清晰地反映出系统的零极点分布和参数变化下的根轨迹走向。4A02A196-6C83-430C-8B2B-6CDFDD91B1EA

※基于PYTHON的系统零极点图代码为:

from control.matlab import *

import matplotlib.pyplot as plt

import numpy as np

num = [1,4] #分子

den = [1,4,20] #分母

sys = tf(num,den) #创建传递函数'(s+4)/(s^2+4s+20)'

pzmap(sys)

plt.axhline(y=0,color='blue',linewidth=1.0,linestyle='--')

plt.axvline(x=0,color='red',linewidth=1.0,linestyle='--')

plt.show()

※基于PYTHON的系统根轨迹图代码为:

from control import *

from matplotlib import pyplot as plt

sy1 = tf([1,4],[1,4,20]) #创建开环传函'k(s+4)/(s^2+4s+20)'

rlocus(sy1,grid=True)

plt.xlim(-10, 0)

plt.show()

3     控制系统的频域仿真

3.1   控制系统的幅相频率特性曲线(奈奎斯特曲线)

在实际工程的控制系统设计与分析中常常使用频域图解法,幅相频率特性曲线在其中扮演重要角色,在面对一些复杂的控制系统时,如何判断系统的稳定是必须要面对的问题,要解决这一问题除了上文提到的零极点图和根轨迹图,还可以通过奈奎斯特判据来解决这一问题。因此对系统绘制其幅相频率特性曲线是有必要的。以雕刻机为对象抽象出传递函数。选取系统的传递函数为[Gs=k/(T1s+1)],其中[k=5,T1=3]。

※基于PYTHON的系统幅相频率特性曲线代码如下:

from control.matlab import *

from matplotlib import pyplot as plt

import numpy as np

num=[5]

den=[3,1]

sy1 = tf(num,den) #创建传递函数'sy1=1/(3s+1)′

nyquist(sy1) #绘制系统的Nyquist响应曲线

plt.xlim((0,10))

plt.ylim((-5,5))

plt.axhline(y=0,color='red',linewidth=3.0,linestyle=′-′)

plt.show()

分析图5发现与王正林等[10]所著《MATLAB/Simulink与控制系统仿真》中第188页图7.9仿真效果一致,能反映出幅频与相频之间的关系。

3.2   控制系统的对数幅频相频曲线(伯德图)

在现代控制系统的设计中,对数幅频相频曲线有着及其重要的应用。对数幅频相频曲线由对数幅频曲线和对数相频曲线组成。若以空间机器人系统为研究对象,建立数学模型,抽象出系统的传递函数为[GsHs=kT1s+1ω2n/sT2s+1s2+2ωnξs+ω2n],选定[k=2],[T1=1],[T2=0.2],[ωn=10],[ξ=10-1/2],绘制系统的对数幅频和对数相频曲线得到图6,与《自动控制原理基础教程》[6]中第207页图5-43进行比较,发现两图仿真效果相同。

※基于PYTHON的系统伯德图代码如下:

from control.matlab import *

import matplotlib.pyplot as plt

import numpy as np

num = [20,20] #分子

den = [1,7,20,70,20] #分母

sys = tf(num,den) #建传函'(20s+20)/(s^4+7s^3+20s^2+70s+20)′

bode (sys) #绘制系统的Bode图

plt.show()

3.3   对数幅相曲线(尼科尔斯曲线)

对数幅相曲线在控制系统的实际分析中同样扮演着重要角色,依据系统的开环函数和闭环函数之间的关系,画出闭环幅频和相频特性的等M簇、等[α]簇曲线,再以设计者给出的频域指标要求校正控制系统,可以极大地降低控制系统的设计难度[1]。现以电加热炉为对象建立温度和电压的传递函数。假定系统的传递函数为[Gs=1/(Ts+1)],其中[T=0.5],通过PYTHON语言对系统进行仿真得到其对数幅相曲线图7。将图7与文献[1]第183页图5-8对比,发现两者的区别仅仅在于图5-8是图7的放大版,其他均无明显区别。

※基于PYTHON的系统Nichols曲线代码:

from control.matlab import *

import matplotlib.pyplot as plt

import numpy as np

num=[1]

den=[0.5,1]

sys = tf(num,den) #構建的传递函数′1/(0.5s+1)′4A02A196-6C83-430C-8B2B-6CDFDD91B1EA

nichols(sys) #绘制系统的Nichols曲线

plt.show()

4   控制系统的校正

4.1   前馈校正

为了提高系统的性能,可以在系统中增加一个校正网络[Gc=(s+z)/(s+p)],但是新增的极点可能会降低系统的性能,为了消除这种影响,可以再增加一个前置滤波器。以两相伺服电动机为研究对象,抽象出数学表达式,假定被控的传递函数为[Gs=k/s],其中[k=1],要求系统的阻尼比为0.707,阶跃响应的超调量[σ≤5%],调节时间[ts≤0.6]s(秒),系统的闭环传递函数为[Φs=(k1s+k2)Gp(s)/(s2+k1s+k2)],求得参数[k1=16],[k2=128],[Gps=8/(s+8)]。在无前置滤波器时对系统进行仿真得到图8,对有前置滤波器的控制系统使用PYTHON语言进行仿真得到图9。从图8和图9可以明显地看出系统响应曲线的变化。

※基于PYTHON的无前置滤波器系统阶跃响应代码如下:

from scipy.signal import lti,step2,impulse2

import matplotlib.pyplot as plt

s1=lti([16,128],[1,16,128]) #传函′s1=(16s+128)/(s^2+16s+128)′

t1,y1=step2(s1) #系统阶跃输出

plt.plot(t1,y1,color=′red′,linewidth=1.0) #绘制响应曲线

plt.axhline(y=1,color=′green′,linewidth=1.0,linestyle=′--′)

plt.grid()

plt.xlim((0,0.8))

plt.ylim((0,1.3))

plt.show()

※基于PYTHON的有前置滤波器系统阶跃响应代码如下:

from scipy.signal import lti,step2,impulse2

import matplotlib.pyplot as plt

s1=lti(128,[1,16,128]) #创建传函′s1=128/(s^2+16s+128)′

t1,y1=step2(s1) #系统阶跃输出

plt.plot(t1,y1,color=′blue′,linewidth=1.0) #绘制响应曲线

plt.axhline(y=1,color=′green′,linewidth=1.0,linestyle=′--′)

plt.grid()

plt.xlim((0,0.8))

plt.ylim((0,1.2))

plt.show()

4.2   控制系统PID

PID控制被广泛地应用于航天器的姿态控制、卫星的导航以及工业生产实际生活中[11]。以无源网络为目标对象,假定传递函数为[Gs=k/(T1s+1)v],[k=1],[T1=1],[v=3],在参数[Ti=1],[Pi=1],[Td]分别取0.2,0.5,0.8时,使用PYTHON语言仿真得到图10。

※基于PYTHON的系统PID控制代码如下:

from control.matlab import *

from matplotlib import pyplot as plt

import numpy as np

k1=1

Ti=1

Td=0.2

for i in range(1,4):

num=[1]

den1=[1,3,3,1]

sys1=tf(num,den1)

sys2=tf(k1*[Ti*Td,Ti,1],[Ti,0])

sys3=feedback(sys1*sys2,1,-1)

yout,t1=step(sys3)

plt.grid()

if Td==0.2:

plt.plot(t1,yout,color=′red′,label=′Td=0.2′)

if Td==0.5:

plt.plot(t1,yout,color=′blue′,label=′Td=0.5′)

if  Td==0.8:

plt.plot(t1,yout,color=′black′,label=′Td=0.8′)

plt.legend()

plt.xlim((0,45))

plt.ylim((0,1.5))

Td=Td+0.3

5     结论

对控制系统从时域、复域、频域以及系统的校正四个方面,分别选用不同的线性系统模型进行仿真。通过与参考文献中的仿真图进行比较,发现PYTHON语言能够胜任自动控制原理仿真的需求,为大多数《自动控制原理》课程的学习者提供了另一种系统仿真的方式。但是PYTHON语言与MATLAB相比,在图形化编程中还是处于弱势地位,特别是MATLAB软件中图形化编程模块Simulink可以快速帮助没有基础的学习者建立对控制系统的感性认识,这是PYTHON语言目前无法做到的,这也是未来PYTHON在控制系统仿真领域的发展方向。

[参考文献]

[1] 胡寿松. 自动控制原理(第6版)[M]. 北京: 科学出版社, 2013.

[2] 肖理慶. 基于《自动控制原理》期末考试软件的课程考核改革[J]. 廊坊师范学院学报(自然科学版), 2020, 20(3): 120-122+125.

[3] Liang Y D. Python语言程序设计[M]. 李娜, 译, 北京: 机械工业出版社, 2013.

[4] 嵩天,礼欣,黄天羽. Python语言程序设计基础(第2版)[M]. 北京: 高等教育出版社, 2017.

[5] 张若愚.Python科学计算[M]. 北京: 清华大学出版社, 2012.

[6] 李琴, 彭祖群, 杨钧. Python在自动控制原理实验中的应用[J]. 信息周刊, 2019(36):138-139.

[7] 胡寿松.自动控制原理基础教程(第4版)[M]. 北京: 科学出版社, 2017.

[8] 宋申民, 陈兴林. 自动控制原理典型例题解析与习题精选[M]. 北京: 高等教育出版社, 2004.

[9] Franklin G F, Powell J D, Emami-Naeini A. 自动控制原理与设计(第5版)[M]. 李中华, 张雨浓, 译, 北京: 人民邮电出版社, 2007.

[10] 王正林,王胜开,陈国顺, 等. MATLAB/Simulink与控制系统仿真(第4版)[M]. 北京: 电子工业出版社, 2017.

[11] 张德丰. MATLAB自动控制系统设计[M]. 北京: 机械工业出版社, 2010.4A02A196-6C83-430C-8B2B-6CDFDD91B1EA

猜你喜欢

自动控制仿真
自动控制领域中电子信息技术的运用及发展思路
实现自动控制电阻类型分析之气敏电阻
Buck开关变换器的基本参数设计及仿真分析
试析PLC控制下的自动化立体仓库仿真情况分析
基于MADYMO的航空座椅约束系统优化设计
中国体态假人模型与FAA Hybrid Ⅲ 型假人模型冲击差异性分析
智能感应晾衣架的设计原理与可行性分析
油气集输系统信息化发展形势展望