1 引言
在控制理论中,所谓"控制系统的设计"是指把负反馈控制的原理应用到实际的计算机测控系统中去,不是指计算机测控系统的工程设计。应用控制理论讨论控制系统的设计问题有一个隐含的前提,就是该计算机测控系统已经正常运行,起码也要设计就绪。关于这一点,许多人都缺乏应有的认识。
于是在控制理论中,"设计控制系统"就是"设计控制器"。这个控制器,其实是指控制系统框图中控制器方框的算式,和测控系统中的控制器部件含义不同。而计算机控制理论的"设计控制器"就是首先推导出合乎要求的控制器算式,然后按照该控制器算式编写一段程序模块,插入到计算机测控系统的运行程序中,以便使该计算机测控系统在正常运行的基础上,实现满意的负反馈自动控制,充分发挥计算机测控系统的潜在能力,实现真正意义上的自动控制。
2 关于G(z)与D(z)的分子分母阶差的搭配
在计算机控制系统中,被控设备模型G(z)的分子分母阶次差只有两种(如图1所示):(1) 同阶(同拍)模型就是用当前的控制量u(k)和以前的数据,算出当前的输出量y(k)。(2) 差一阶(一拍延迟)模型就是用前一拍的控制量u(k-1)和已有的数据,算出当前的输出量y(k)。
没必要建立多拍延迟的模型。例如二拍延迟设备模型:
y(k)=-a1y(k-1)-a2y(k-2)-any(k-n)+b2u(k-2)+bnu(k-n)
就是说,用前二拍的控制量u(k-2)和已有的数据,算出当前的输出量y(k)。这意味着没有及时利用最新情报。因为计算机测控系统可以做到每个测控周期测一对数据,就是说,在k时刻,已经知道了u(k-1),为什么不利用呢?至于那些具有延迟性能的设备,也可以本着充分利用最新情报的原则,仍然建立同阶或差一阶的模型,尽管可能其b0,b1,b2等很小或者为0。
图1 被控对象的二种模型
图2 二种控制器
设计的控制器D(z)的分子分母阶次差也只有两种(如图2所示):(1) 同阶(现时)控制器就是读入y(k)后,马上计算u(k)并发出,这用于计算时间远小于测控周期的情况。(2) 差一阶(一步预报)控制器就是发出u(k)并读入y(k),然后计算出u(k+1)以备下一节拍发出。当计算时间不容忽视时,一定要用预报控制器。
本着利用最新情报的原则,没有必要设计二步三步预报控制器。
于是设备模型G(z)与控制器D(z)的搭配也只有两种(如图3所示):(1) G(z)差一阶配D(z)同阶,叫"现时控制系统",这时,设备在上次的控制量和已知的数据的作用下产生了本次输出y(k),计算机测得y(k)之后,立即计算并发出本次的控制量u(k)。(2) G(z)同阶配D(z)差一阶,叫"预报控制系统",这时,计算机把上次算好的控制量u(k)发出,立即测量设备输出y(k)(认为这是由于本次及以前控制量作用的结果),由此算出u(k+1)以备下次发出。这二者,在设计时千万不要搞错。
不可能或没必要设计其他类型控制。如图4上图的"同阶-同阶"搭配,是不可行的。这就是说计算机发出本次的控制量u(k),立即读回来本次的输出y(k),又马上计算本次的控制量u(k),那么还能再发出吗?这样的运行程序就自相矛盾了,以此编写的程序俗称"死循环"。
再有,如图4下图的"差一阶-差一阶"搭配,这就是说,计算机发出本次的控制量u(k)和立即读回来本次的输出y(k)无关,读回来的本次输出y(k)是由上次的控制量u(k-1)和已知的数据决定的,然后根据这个y(k)计算下次的控制量u(k+1),等待下次发出。这种控制方式没有及时利用本次的控制量u(k),所以这是不合理的,即没有利用最新信息。
图3 二种正确的搭配
图4 二种错误的搭配
在基于状态方程的控制系统中,也存在被控对象和控制器的阶差搭配问题,也只有"预报控制系统"和"现时控制系统"二种,其道理是一样的。
3 控制器程序中用的算式
3.1 串联现时控制器
串联现时控制器的z传递函数(不失一般性,以三阶来列写):
然而,在程序中的算式不用z传递函数,而用它所对应的差分方程:
3.2 串联预报控制器
它的输入输出z传递函数关系如下(不失一般性,以三阶来列写):
它的算式如下:
3.3 前反馈现时控制器
它的输入输出z传递函数关系如下(不失一般性,以二阶来列写):
它的算式如下:
3.4 前反馈预报控制器
它的输入输出传递函数关系如下(不失一般性,设为二阶):
它的算式如下:
3.5 被控设备模型
在控制系统的实际运行中,虽然被控设备的输入(即控制量)是由计算机发出的,被控设备的输出是由计算机读入的,但是为了核实所建立的设备模型(它是控制器设计的根据)是否精确,需要在每个控制节拍,用控制量u和设备模型G(z)来计算输出y,以便与测量的输出y比较。同样的,程序中的算式不用z传递函数,而用它所对应的差分方程,就是说,应该把
改写为差分方程的形式:
这是同节拍的设备模型;如果是一拍延迟的设备模型,就令上式中b0=0。为了与测量的y(k)相区别,不妨称之为yg(k)。
3.6 系统模型
如果在程序中还要用整个系统的模型H(z)和预定值r(k)来计算系统输出y(k),核实控制系统的控制性能;那么它的算法和上述用设备模型G(z)来计算的道理一样。为了与y(k)和yg(k)相区别,不妨称之为yh(k)。
一个满意的控制系统,其y(k)、yg(k)和yh(k)应该是相等的,或者相差在允许范围之内,否则,就要查找原因,修改该控制系统,或者设计成自适应控制器。
4 编写控制器程序要考虑的问题
控制器程序只是计算机测控系统的整个运行程序的一部分而已。当控制工程(计算机测控系统的建造)完工投产时,当然至少包含了一个运行程序和执行开关、调节、测量和状态监控等基本操作功能。编写控制器程序就是在这样的运行程序的基础上,用同样的编程语言,编写一段程序,实现根据控制理论设计出来的读入y(k)和写出u(k)关系算式(即所设计的控制器),达到良好控制或者优化控制的目的。在控制器框图中,往往又细分为好多的"器"(方框),其实它们只是一些相互关联的算式或算法而已。再多的"器"和方框在程序中就是一些相互关联的一段程序。它们可以归纳为一个大方框-"计算机系统",如图5所示。
关于读写操作的具体化,就是根据具体测控系统,编写读写操作语句(或者子程序、函数)。读操作和写操作,在编写控制器程序时只需从现有的测控系统运行程序中复制。
开关动作是在开机、关机或者换档时才用的,一般在控制器程序中不考虑。至于运行状况检测或者定期巡检以及中断服务子程序,最好能包含在控制器程序中,从现有的运行程序中搬过来就行了。程序暂停和终止的设定,通常也是原来的运行程序已经考虑过的问题。
控制器程序的"出口"条件有:(1) 连续多次,测量的输出值y(k)和计算的输出值相差太大。(2) 设备故障,跳到中断服务子程序,或者由人工干预。(3) 从控制台上由操作工发出暂停或退出的命令。(4) 工作完成,如预定时间到,或出产的产品达到预定的数量,或生产过程完毕。
其它要考虑的实际问题还有:(1) 反馈滤波器,即测量信号的滤波,现在有数字信号处理DSP软件工具可用。(2) 对于测量"野点"(过分偏离回归线的数据),用电路限幅或用程序剔除。(3) 注意"负载效应",因为设备在空载时和带各种大小负载时,性能不同,数学模型也不同。(4) 注意非线性现象,如饱和、准饱和、自振荡等。(5) 在同一个控制系统中,往往根据几种不同情况设计几个控制器,以便在操作时"分挡选择"。
在编写控制器程序时,根据实际情况,可能还需要考虑其它辅助操作。
5 编程思路
(1) 计算机测控系统运行就绪:系统状态的初始化、开机、正常运行等。
(2) 数组设定:例如r(10000)、u(10000)、y(10000)、u1(10000)、u2(10000),其中预定值r(k)事先定好了,数组的维数由设计者根据实际情况设定,其中10000是随意数值。
(3) 预置数据(初始化):例如for(i=0;i<n;i++),预置r(i)、u(i)、y(i)、u1(i)、u2(i)等。注意r(i)、u(i)、y(i)与r(k)、u(k)、y(k)的关系是k=i-n(n是设备阶次)。
(4) 在每个控制节拍(测控周期)中,如果是现时控制器,编程思路:
for(i=n;i<10000;i++) 或用 while()句
用读指令测y(k);
计算u(k);
用写指令发出u(k);
其他计算操作和等待下一时刻;
如果是预报控制器,编程思路:
for(i=n;i<10000;i++) 或用 while()句
用写指令发出u(k);
用读指令测y(k);
计算u(k+1);
其他计算操作和等待下一时刻;
(5) 在每个控制节拍(测控周期)中,即在for(i=n;i<10000;i++)之内,还要做的操作有:① 用设备模型G(z)计算输出yg(k),用系统模型H(z)计算输出yh(k),以便比较,监测控制状况。② 控制系统运行状况的定期检测及其处理。③ 其他控制运行所必须的操作。④ 数组用到头时要"周而复始",例如:设置if(k=10000-n),在数组快到头时,要把末几个数据移到头几个位置去,以便数组重头使用。⑤ 用等待函数delay(T)或wait(T),T是测控周期,单位ms,必要时,还要减去计算时间。
(6) 出口或结束:见上述的"程序出口条件"。
以上所述,是从事计算机控制的人员在编写控制器程序时必须考虑的问题。至于基于状态方程的控制器设计与编程,读者可以触类旁通。