微型计算机控制技术(第2版)课件:微型计算机控制系统应用软件_第1页
微型计算机控制技术(第2版)课件:微型计算机控制系统应用软件_第2页
微型计算机控制技术(第2版)课件:微型计算机控制系统应用软件_第3页
微型计算机控制技术(第2版)课件:微型计算机控制系统应用软件_第4页
微型计算机控制技术(第2版)课件:微型计算机控制系统应用软件_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微型计算机控制系统应用软件01常用控制程序设计微型计算机控制系统软件概述02微型计算机控制系统软件概述常用控制程序设计微型计算机控制系统软件概述微型计算机控制系统软件主要包括系统软件与应用软件。系统软件是指操作系统(DOS,Windows)。它提供了程序运行的环境(不同的操作系统下有不同的人机界面),以及各种设计语言、算法库、工具软件。一般这些软件由专业厂商以产品形式向用户提供。应用软件是用户为完成特定的任务而编写的各种程序的总称。一般需要应用单位根据不同的控制对象和不同的控制任务组织专门人员进行编写。控制对象的差异性使对应用软件的要求也有很大的差别。一般在工业控制系统中,针对每个控制对象,为完成相应的控制任务,都要求配置相应的专门控制程序,才能使整个系统实现预定的功能。在进行软件设计时,首先要考虑采用何种语言进行编程,是用汇编语言、C语言还是VisualBASIC等;尽管用汇编语言设计的程序执行速度最快,程序代码最短,但由于汇编语言是低级语言,使用汇编语言编程是一件很麻烦的事情,尤其是进行数值运算或结果演示时更为复杂。因此,只有对程序执行的时间要求十分苛刻时,才考虑使用汇编语言。一般情况,开发人员都使用结构化较强的C语言作为开发工具。对于涉及微机硬件接口技术的应用系统的开发,普遍认为C语言与汇编语言的混合编程是最佳的软件设计方法。本章主要涉及一些常用应用程序,因此只介绍使用C语言进行设计。为了使叙述的方法具有通用性,讨论中不涉及具体系统。本章还结合流程图,给出了一些源程序代码,以便于初学者自学。基本功能应用软件随应用领域的不同而不同。目前,在计算机控制系统中,应用软件除控制生产过程之外,还对生产过程实现管理。主要功能如下:(1)控制程序控制程序主要实现对系统的调节和控制,它根据各种各样的控制算法和千差万别的被控对象的具体情况来编写,控制程序的主要目标是满足系统的性能指标。常用的有数字式PID调节控制程序、最优控制算法程序、顺序控制及插补运算程序等。(2)数据采集及处理程序它主要包括数据可靠性检查程序,用来检查是可靠输入数据还是故障数据;A/D转换及采样程序;数字滤波程序,用来滤除干扰造成的错误数据或不宜使用的数据;线性化处理程序,对检测元件或变送器的非线性用软件补偿。(3)巡回检测程序除包括数据采集程序之外,还包括越限报警程序,用于在生产中某些量超过限定值时报警;事故预报程序,生产中某些量不容许超过限定值,从这些量的变化趋势来看若有可能超过限定值,则发出事故预报信号;画出显示程序,用图、表在CRT上形象地反映生产状况。(4)数据管理程序这部分程序用于生产管理部分,主要包括统计报表程序,按生产管理部门要求地格式打印各种报表;产品销售、生产调度及库存管理程序;产值利润预测程序等。应用程序设计步骤应用程序设计通常分为五个步骤:问题定义、程序设计、编码、调试、维护和再设计等。问题的定义是确定控制任务对微型机控制系统的要求,它包括定义输入和输出、处理要求、系统具体指标(如执行时间、精度、响应时间等)以及出错处理方法等.程序设计是指把所定义的问题用程序的方式对控制任务进行描述。这一步要用到流程图和模块程序、自顶向下设计、结构程序等程序设计技术.手编程序是把设计框图变成计算机能接受的指令。实时控制中通常采用C语言编写源代码。查错也称程序验证,它用来发现编程中的错误。在查错阶段可以利用诸如查错程序、断点、跟踪、模拟程序,逻辑分析器以及联机仿真器等手段。应用程序设计步骤测试也称程序正确性确认,通过测试保证程序正确完成要求的任务。在测试这一步要注意选择正确的测试数据和测试方法。文件编制用流程图、注释、存储器分配说明等方法来描述程序并形成文件,以便于用户和操作人员了解。维护和再设计是对程序进行维护、改进和扩充,以解决现场设备发生的问题,有时还要有特殊的诊断手段(或程序)及维护手段,有时为满足新的要求和处理任务,可能需要改进或扩充程序。应用程序设计的每一步往往是相互影响的。问题定义时,必须考虑到测试方案、形成文件的标准和程序的可扩展性。设计者往往同时在几个步骤上进行设计,如手编程序、查错、文件编制可能同时进行。显然,应用程序设计所涉及的内容相当广泛,这里只能介绍一些基本的概念。程序设计方法

程序设计方法是指程序设计的某种规程和准则。通常有模块化程序、自顶向下程序设计、结构化程序设计等几种方法。1.模块化程序设计模块化程序设计是把一个较长的完整程序分成若干个小的程序或模块,在分别进行独立设计、编程、测试和查错之后,最终装配在一起,联结成一个大的程序。程序模块通常是按功能划分的。在计算机控制系统程序设计中,这种划分方法特别有用。模块化程序设计技术有一些明显的优点。单个模块要比一个完整程序更易编写、查错和测试,并能为其它程序重复使用。模块化程序设计的缺点是在把模块装配成一个大程序时,要对各模块进行连接,以完成模块之间的信息传送,此外,为进行模块测试和程序测试,还要编写测试模块程序用的测试程序。使用模块化程序设计所占用的内存容量也较多。如果很难把程序模块化,或者有较多的特殊情况需要处理,或者使用了大量变量(每个也都需要待别处理),则说明问题定义得不好。为此,需要重新定义任务。

程序设计方法2.自顶向下程序设计自顶向下程序设计是在程序设计时,先从系统一级的管理程序(或者主程序)开始设计,从属的程序或者子程序用一些程序标志来代替。当系统一级的程序编好后,再将各标志扩展成从属程序或子程序,最后完成整个系统的程序设计。这种程序设计过程大致有以下几步:(1)写出管理程序并进行测试。尚未确定的子程序用程序标志来代替,但必须在特定的测试条件下产生与原定的程序相同的结果;(2)对每一个程序标志进行程序设计,使它成为实际的工作程序。这个过程是与测试和查错同时进行的;(3)对最后的整个程序进行测试。自顶向下设计的优点是设计、测试相连结同时按一个线索进行,矛盾和问题可以较早发现和解决。而且,测试能够完全按真实的系统环境来进行,不需要依赖于测试程序。它是将程序设计、手编程序和测试这几步结合在一起的一种设计方法。自顶向下设计的缺点主要是上一级的错误将对整个程序产生严重的影响,一处修改有可能牵动全局,引起对整个程序进行全面修改。另外,总的设计可能同系统硬件不能很好配合,不一定能充分利用现成软件。自顶向下设计比较习惯于人们日常的思维,而且研制应用程序的几个步骤可以同时结合进行,因而能提高研制效率。

程序设计方法结构化程序设计的方法给程序设计施加了一定的约束,它限制采用规定的结构类型和操作顺序。因此,能够编写出操作顺序分明、便于查错和纠正错误的程序。这些方法指出,任何程序逻辑都可用顺序、条件和循环三种结构来表示。(1)顺序结构顺序结构的流程图如图7-2所示。在这种结构中,计算机按顺序先执行P1,然后执行P2,最后执行P3。其中P1、P2、P3可以是一条指令,但也可以是一段程序。程序设计方法(2)条件结构条件结构流程图如图7-3所示,当条件满足时,计算机执行P1,否则执行P2。在这种结构中,P1和P2都只有一个入口和一个出口。(3)循环结构常见的循环结构有两种,如图7-4所示。在图7-4a所示的循环结构中,计算机先执行循环操作P,然后判断条件是否满足,若条件满足,程序继续循环,若条件不满足,则停止循环。而图7-4b所示的循环结构中,计算机先执行条件判断语句,只有在条件满足的情况下才能循环操作P。

程序设计方法利用上述几种基本结构,可以构成任何功能的程序。结构化程序设计的优点是:

由于每个结构只有一个入口和一个出口,故程序的执行顺序易于跟踪,给程序查错和调试带来很大的方便。

由于基本结构是限定的,故易于装配成模块。

易于用程序框图来描述。

程序设计语言选择计算机控制系统的应用程序设计,可以采用机器语言、汇编语言或一些高级语言(如:BASIC、FORTRAN、PASCAL、C以及C++)。工业控制计算机自身的技术进步和计算机高级语言功能的扩展使得这样的设计与开发方法得以实现。首先,工业控制计算机的基本系统与广泛使用着的个人计算机基本上是兼容的;其次,各种高级语言也都具备了输入输出口的操作语句,并具备了对内存的直接存取功能。这样,应用程序中许多需要对输入输出口的操作就可以用高级语言的相应语句来编写。在各种高级语言中,应选择结构化的语言,例如PASCAL、C等,而非结构化的语言,例如BASIC、FORTRAN等,不能写出结构化强、模块清晰的程序,不适合于编制控制系统的应用程序。一些高级语言已经具备调用汇编语言子程序的功能,这样就可以用汇编语言编制那些要求执行速度快的过程。一般是将汇编语言子程序作为一个外部过程来由高级语言调用,实现参数传送的功能。在具体编制调用程序的时候,要严格按照高级语言的规定编写,以便能够正确地调用与返回。现在,面向对象的程序设计比结构化程序设计在效率方面显得更高一些,例如把C语言扩充为面向对象的C++语言。实际上C++语言是在C语言中增加了一个消息表达式,从而增加了新的表达式类型。一些版本的C++语言的编译程序实际上是一个转换器,先将C++源程序转换成C源程序,然后再进行编译。微型计算机控制系统软件概述常用控制程序设计报警程序设计,,

由采样读入的数据或经计算机处理后的数据是否超出工艺参数的范围,计算机要加以判别,如果超越了规定数值,就需要通知操作人员采取相应的措施,确保生产的安全。越限报警是工业控制过程常见而又实用的一种报警形式,它分为上限报警、下限报警及上下限报警。报警程序设计比较简单,它主要采用比较法,把采样并经数字滤波以及标度变换后的被测参数值与给定的上下限值进行比较。如果需要报警的参数是xn,该参数的上下限约束值分别是xmax,xmin,则上下限报警的物理意义如下:(1)上限报警若xn>xmax,则上限报警,否则继续执行原定操作。(2)下限报警若xn<xmin,则下限报警,否则继续执行原定操作。(3)上下限报警若xn>xmax,则上限报警,否则对下式做判别。若xn<xmin则下限报警,否则继续原定操作。根据上述规定,程序可以实现对状态变量y、偏差e以及输出u进行上下限检查。报警程序设计在实际应用中,为了避免测量值在极限值附近摆动造成频繁的报警,因此在上、下限附近设定一个回差带,如图所示在中,H是上限带,L为下限带。规定只有当测量值越过A点时,才算越上限,测量值穿越带区,下降到B点以下才算复限。同样的道理,测量值在L带区内摆动,均不做处理,只有它低于C点值时,被认为越下限,经调节,回归于D点之上时,才作越下限后复位处理。它的基本思想就是将采样、数字滤波后的数据与该被测点上下限给定值进行比较,检查是否越限;或者与上限复位值、下限复位值进行比较,检查是否复限。如越限,则分别置上、下限标志,并输出相应的声光报警信号。如复限,则清除相应标志。报警程序设计报警程序设计程序清单为://函数名:Alarm//入口参数:X-采样值//出口参数:无//描述:读者可以根据自己的硬件系统,修改端口地址、报警值上下限以及复限带区宽度#definePORT0FFFF//报警端口地址#defineBoundMax50//报警上限值#defineBoundMin10//报警下限值#defineRoomH4//报警上限带区宽度:H#defineRoomL4//报警下限带区宽度:LintAlarmUpFlag//上限报警标志intAlarmDownFlag//下限报警标志

报警程序设计voidAlarm(doubleX){if(X>BoundMax+RoomH/2)//超上限

if(AlarmUpFlag==0)//超上限标志未置位

{ AlarmUpFlag=1;//置位

outport(PORT,1);//输出报警模型

return;//返回

}elseif(X<(BoundMax-RoomH/2)//复上限{ if(AlarmUpFlag==1)AlarmUpFlag=0;//清除超上限报警标志

elseif(X<BoundMin-RoomL/2)//超下限

if(AlarmDownFlag==0)//超下限标志未置位

报警程序设计{ AlarmDownFlag=1;//置位

outport(PORT,1);//输出报警模型

return;//返回

}elseif(X>BoundMin+RoomL/2)//复下限

if(AlarmDownFlag==1)AlarmDownFlag=0;//清除超下限标志}}

数字滤波程序设计,,

随机误差是由窜入检测系统或控制系统的随机干扰引起的,这种误差是指在相同条件下测量同一量时,其大小和符号作无规则的变化而无法预测、但在多次测量中它是符合统计规律的。为了克服随机干扰引入的误差、除了可以采用硬件办法,还可以按统计规律用软件算法来实现,即采用数字滤波方法来抑制有效信号中的干扰成分,消除随机误差,同时对信号进行必要的平滑处理,以保证系统的正常运行。

与模拟滤波器相比较,数字滤波算法具有如下的优点:

节约硬件成本。数字滤波只是一个滤波程序,无需硬件,而且一个滤波程序可用于多处和很多通道,无需每个通道专设一个滤波器,因此,大大节约硬件成本。

可靠稳定。数字滤波只是一个计算过程,因此可靠性高,不存在阻抗匹配问题。

功能强。数字滤波可以对频率很高或很低的信号进行滤波,这是模拟滤波器所不及的。

方便灵活。只要适当改变软件滤波器的滤波程序和运算参数,即可改变滤波特性。

不会丢失原始数据。下面介绍几种常用数字滤波算法。

程序判断法,,

许多物理量的变化都需要一定的时间,相邻两次采样值之间的变化有一定的限度。程序判断滤波的方法,是根据生产经验,确定出相邻两次采样信号之间可能出现的最大偏差,若超过此偏差值,则表明该输入信号是干扰信号,应该去掉;如小于此偏差值,可将该信号作为本次采样值。当采样信号由于随机干扰,如大功率用电设备的启动或停止,造成电流的尖峰干扰或误检测,以及变送器不稳定而引起的严重失真等,可采用程序判断法进行滤波。程序判断滤波根据滤波方法不同,可以分为:限幅滤波和限速滤波两种。限幅滤波

基本方法是把两次相邻的采样值相减,求出其增量(以绝对值表示),然后与两次采样容许的最大差值(由被控对象的实际情况决定)进行比较,若小于等于,则取本次采样值;若大于,则仍取上次采样值作为本次采样值,即:

应用这种方法时,关键是值的选择。过程的动态持性决定其输出参数的变化速度,通常按照参数可能的最大变化速度及采样周期T来决定值。即:

限速滤波

假定顺序采样时刻:所采样的信号为:,则限速滤波的物理意义是:

在实际使用中,可用代替,这样,虽增加了运算量,但灵活性提高了。限速滤波

限速滤波

程序清单为://函数名:LimitFilter//入口参数:*Y-采样值数组首地址//出口参数:滤波值//描述:设 Y1、Y2、Y3放在以*Y为首地址的单元中,滤波结果放在temp中#include"math.h"doubleLimitFilter(double*Y){ doubleDeltaY,temp; DeltaY=(fabs(*(Y+1)-*(Y))+fabs(*(Y+2)-*(Y+1)))/2;//计算DeltaY if(fabs(*(Y+1)-*(Y))<=DeltaY)//Y1与Y2比较

temp=*(Y+1); elseif(fabs(*(Y+2)-*(Y+1))<=DeltaY)//Y3与Y2比较

temp=(*(Y+2)+*(Y+1))/2; else temp=*(Y+2);returntemp;}

中位值滤波法

×——各个采样值;虚线——真实信号

a:一次干扰情况

b:两次异向干扰情况

c:两次同向干扰情况

d:三次干扰情况

中位值滤波法

中位值滤波法就是对某一被测参数连续采样N次(一般N取奇数),然后把N次采样值按大小排队,取中间值为本次采样值。中位值滤波能有效地克服因偶然因素引起的波动或采样器不稳定引起的误码等造成的脉冲干扰。对温度、液位等缓慢变化的被测参数采用此法能收到良好的滤波效果,但对于流量、压力等快速变化的参数一般不宜采用中位值滤波算法。从图7-8可以看出N=3时采样的中位值滤波的滤波效果。如果三次采样中有一次发生干扰,则不管这个干扰发生在什么位置,都将被删除掉(如图7-8a所示)。当三次采样中有两次发生脉冲干扰时,若这两次干扰是异向作用(如图7-8b所示),则同样可以滤掉这两次干扰,取得准确值;若这两次干扰是同向作用(如图7-8c所示),或发生如图7-8d所示的三次干扰时,中位值滤波便显得无能为力,以致会把错误信息送入计算机中。中位值滤波法中位值滤波程序设计的实质是,首先将N个采样值从小到大或从大到小进行排队,然后再取中间值。N个数据按大小排序采用“冒泡法”(也叫大数沉底法),其流程图如图7-9所示:中位值滤波法doubleMiddleFilter(double*X,intN){ inti,j; doublet;//定义临时之间变量

for(i=0;i<N-1;i++)//N-1次循环

for(j=0;j<N-1-i;j++) if(*(X+j)>*(X+j+1))//如果前一个数大于后一个数,则相互交换数值

{ t=*(X+j); *(X+j)=*(X+j+1); *(X+j+1)=t; } return*(X+(N-1)/2);//返回中间值

}

算术平均滤波法

算术平均滤波是要按输入的N个采样数据,寻找这样一个,使与各采样值之间的偏差的平方和最小,即:(7-3)

由一元函数求极值的原理可得:(7-4)

算术平均滤波法

算术平均滤波法适用于对一般具有随机干扰的信号进行滤波。这种信号的特点是有一个平均值,信号在某一数值范围附近作上下波动,在这种情况下仅取一个采样值作依据显然是不准确的,算术平均滤波法对信号的平滑程度完全取决于N值。当N值较大时,平滑度高,但灵敏度低;当N值较小时,平滑度低,但灵敏度高。应视具体情况选取N值,以便既少占用计算时间,又达到最好的效果。对于一般流量测量,常取N=12;若为压力,则取N=4。算术平均滤波法

算术平均滤波程序可直接按上述算法编制,只需要注意两点:(1)是yn的输入方法,对于定时测量,为了减少数据的存储容量,可对测得的y值直接按公式进行计算,但对于某些应用场合,为了加快数据测量的速度,可采用先测量数据、并把它们存放在存储器中,测量完N点后,再对测得的N个数据进行平均值计算。(2)是选取适当的yn、y的数据格式,即确定yn、y是定点数还是浮点数。采用浮点数计算比较方便,但计算时间较长;采用定点数可加快计算速度,但是必须考虑累加时是否会产生溢出。

算术平均滤波法

算术平均滤波法

程序清单为://函数名:AverageFilter//入口参数:N-采样值个数,*Y-采样值数组首地址//出口参数:平均值(滤波值)//描述:求累加和,再取平均。采样值放在以Y为首地址的数组中doubleAverageFilter(double*Y,intN){ inti; doubletemp; temp=0; for(i=0;i<N;i++) temp=temp+*(Y+i);//求N个采样值的累加和

temp=temp/N;returntemp;//返回平均值}

递推平均滤波法

前面的算术平均滤波法,每计算一次数据,需测量N次。对于测量速度较慢或要求数据计算速率较高的实时系统,此方法是无法使用的。例如某A/D芯片转换速率为每秒10次,而要求每秒输入4次数据时,则N不能大于2。下面介绍一种只需进行一次测量,就能得到当前算术平均滤波值的方法——递推平均滤波法。递推平均滤波法是把N个测量数据看成一个队列。队列的长度固定为N,每进行一次新的测量,把测量结果放入队尾,而扔掉原来队首的一个数据,这样在队列中始终有N个“最新”的数据。计算滤波值时,只要把队列中的N个数据进行算术平均,就可得到新的滤波值。这样每进行一次测量、就可计算得到一个新的平均滤波值。这种滤波算法称为递推归平均滤波法,其数学表达式为:递推平均滤波法

参数流量压力液面温度N值1244~121~4

第n次采样的N项递推平均值是n,n-1,…,n-N+1次采样值的平均值,它与算术平均法相似。递推平均滤波法对周期性干扰有良好的抑制作用,平滑度高,灵敏度低;但对偶然出现的脉冲性干扰的抑制作用差,不易消除由于脉冲干扰所引起的采样值偏差,因此它不适用于脉冲干扰比较严重的场合,而适用于高频振荡的系统。通过观察不同N值下递推平均的输出响应来选取N值;以便既少占用计算机时间,又能达到最好的滤波效果。其工程经验值列于表7-1中递推平均滤波法

//函数名:PushFilter//入口参数:N-采样值个数,*Y-过去采样值数组首地址,Yn-当前采样值//出口参数:平均值(滤波值)//描述:向前递推采样值数组,然后把当前采样值放到队列末尾,再求累加和,取平均。doublePushFilter(double*Y,intN,doubleYn){ inti; doubletemp; temp=0; for(i=0;i<N-1;i++) *(Y+i)=*(Y+i+1);//向前递推采样值数组 *(Y+N-1)=Yn;//当前采样值放到队列末尾 for(i=0;i<N;i++) temp=temp+*(Y+i); temp=temp/N;//求平均值returntemp;//返回平均值}加权递推平均滤波法

在算术平均滤波法和递推平均滤波法中,N次采样值在输出结果中的比重是均等的,即1/N。用这样的滤波算法,对于时变信号会引入滞后,N越大、滞后越严重。为了增加新采样数据在递推平均中的比重,以提高系统对当前采样值中所受干扰的灵敏度,可采用加权递推平均滤波算法。它是递推平均滤波算法的改进,即不同时刻的数据加以不同的权,通常越接近现时刻的数据,权取得越大。N项加权递推平均滤波算法为:故加权递推平均滤波算法适用于有较大纯滞后时间常数γ的对象和采样周期较短的系统。而对于纯滞后时间常数较小、采样周期较长、缓慢变化的信号,则不能迅速反应系统当前所受干扰的严重程度,滤波效果差。一阶惯性滤波法在模拟量输入通道等硬件电路中,常用一阶惯性RC模拟滤波器来抑制干扰(如图7-12所示),当用这种模拟方法来实现对低频干扰的滤波时,首先遇到的问题是要求滤波器有大的时间常数和高精度的RC网络。时间常数越大,要求R值越大,其漏电流也随之增大、从而使RC网络的误差增大和设备的体积增大,降低了滤波效果。而一阶惯性滤波算法是一种以数字形式通过算法来实现动态的RC滤波方法,它能很好地克服上述模拟滤波器的缺点,在滤波常数要求大的场合,此法更为实用。由图7-12不难得出模拟低通滤波器的传递函数,即:离散化后,可得:滤波器的时间常数较大时。上述算法便等价于一般的模拟滤波器。一阶惯性滤波法一阶惯性滤波算法对周期性干扰具有良好的抑制作用,适用于波动频繁的参数滤波,其不足之处是带来了相位滞后,灵敏度低。滞后的程度取决于值的大小。同时,它不能滤除频率高于采样频率二分之一(称为奈奎斯特频率)的干扰信号。例如采样频率为100Hz、则它不能滤去50Hz以上的干扰信号。对于高于奈奎斯特频率的干扰信号,应该采用模拟滤波器。//函数名:OneStepFilter//入口参数:Yn-过去采样值,Yn1-当前采样值//出口参数:滤波值//描述:按公式计算滤波值,并返回。#defineAlfa0.3doubleOneStepFilter(doubleYn1,doubleYn){ doubletemp; temp=Alfa*Yn1+(1-Alfa)*Yn; returntemp;}复合滤波法在实际应用中,所面临的随机扰动往往不是单一的,有时既要消除脉冲干扰,又要作数据平滑。因此常把前面所介绍的两种以上的方法结合起来使用,形成复合滤波。例如防脉冲扰动平均值滤波算法就是一种应用实例。这种算法的特点是先用中位值滤波算法滤掉采样值中的脉冲性干扰,然后把剩余的各采样值进行递推平均滤波。其基本算法如下:复合滤波法

如果:,其中(和分别是所有采样值中的最小值和最大值),则:(7-11)由于这种滤波算法兼容了递推平均滤波算法和中值滤波算法的优点,所以,无论是对缓慢变化的过程变量,还是对快速变化的过程变量、都能起到较好的滤波效果。程序流程图如图7-13所示复合滤波法复合滤波法程序清单为://函数名:ComplexFilter//入口参数:N-采样值个数,*X-采样值数组首地址//出口参数:滤波值//描述:先排序,后求和,再取平均doubleComplexFilter(double*X,intN){ inti,j; doubletemp;//定义临时之间变量 for(i=0;i<N-1;i++)//N-1次循环 for(j=0;j<N-1-i;j++) if(*(X+j)>*(X+j+1))//如果前一个数大于后一个数,则相互交换数值 { temp=*(X+j); *(X+j)=*(X+j+1); *(X+j+1)=temp; } temp=0; for(i=1;i<N-1;i++) temp=temp+*(X+i);//求N-2个采样值的累加和 temp=temp/(N-2);returntemp;//返回平均值}各种数字滤波性能的比较

以上介绍了七种数字滤波方法,读者可根据需要设计出更多的数字滤波程序,每种滤波程序都有各自的特点,可根据具体的测量参数进行合理的选用。(1)滤波效果一般来说,对于变化比较慢的参数,如温度,可选用程序判断滤波及一阶惯性滤波方法。对于那些变换比较快的脉冲参数,如压力、流量等,则可以选择算术平均和加权平均滤波法,特别是加权平均滤波方法更好。至于要求比较高的系统,需要用复合滤波方法。在算术平均法和加权平均滤波法中,其滤波效果与所选择的采样次数N有关,N越大,则滤波效果越好,但花费的时间也越长。(2)滤波时间在考虑滤波效果的前提下,应尽量采用执行时间比较短的程序,若计算机时间容许,可采用效果更好的复合滤波程序。注意,在热工和化工过程DDC系统中,数字滤波并非一定需要,要根据具体情况,经过分析、实验加以选用。不适当地应用数字滤波,反而会降低控制效果,以致失控,因此必须注意。各种数字滤波性能的比较序号滤波方法优点缺点1限幅滤波法有效克服因偶然因素引起的脉冲干扰无法抑制周期性的干扰,平滑度差2中位值滤波法有效克服因偶然因素引起的脉冲干扰,对温度、液位变化缓慢的被测参数有良好的滤波效果不宜用于流量、速度等快速变化的参数3算术平均滤波法适用于具有随机干扰的信号。该方法有一个均值,信号某一数值范围附近上下波动不适用对数据计算速度较快的实时控制系统,比较浪费RAM4递推平均滤波法对周期性干扰有良好的抑制作用,平滑度高,适用于高频振荡系统灵敏度低,对偶然出现的脉冲性干扰抑制作用较差,不易消除由于脉冲干扰所引起的采样偏差5加权递推平均滤波法适用于有较大滞后时间常数的对象和采样周期较短的系统对于纯滞后时间常数小、采样周期较长、变化缓慢的信号,不能迅速反映系统当前所受干扰的严重程度,滤波效果差6一阶惯性滤波法对周期性干扰具有良好的抑制作用,适用于波动频率较高的场合相位滞后,灵敏度低,滞后程度取决于α值大小,不能消除频率高于采样频率的1/2的干扰信号线性化处理程序设计

在实际的控制系统中,计算机从模拟量输入通道得到的有关现场信号与源信号所代表的物理量不一定成线性关系,而在显示时总是希望得到均匀的刻度,即希望系统的输入与输出之间为线性关系,这样不但读数看起来清楚方便,而且使仪表在整个范围内灵敏度一致,从而便于读数及对系统进行分析与处理。为了保证这些参数能有线性输出,需要引入非线性补偿,将非线性关系转化成线性的。这种转化过程称为线性化处理。常用的补偿方法有:计算法、插值逼近法、折线近似法

计算法

当参数间的非线性关系可以用数学方程式来表示时,计算机可按公式进行计算,完成对非线性补偿。在计算机控制系统中常遇到的两个非线性关系是温度与热电势、差压与流量。如在温度测量中常用热电偶测量温度。但其被测温度与热电势之间呈非线性关系,一般热电势与温度的关系(E-T)可用下式表示:

不同的热电偶材料系数不一样。将采样值代替上式中的E,即可求得温度输出值T。查表与插值逼近法

有许多非线性关系,如指数、对数、三角函数、积分和微分等,计算起来不仅程序长,而且很费机器时间;有的关系也难以用公式来表达,这些非线性关系常以某种数据表格给出。为解决这类问题,可以用查表法。

所谓查表法,就是事先就算好的数据按一定顺序编制成表格存入计算机中,查表程序的任务就是根据被测参数的值(或中间计算结果),查出最后的所需的结果,这种方法速度快,精度高。查表程序的繁简及查询时间的长短与表格长短有关,更重要的一个因素是与表格的排列方法有关。一般的表格有二种排列方法:

(1)无序表格,即表格的排列是任意的,无一定的顺序;(2)有序表格,即表格的排列有一定的顺序、如表格中各项按大小顺序排列等。查表的方法有:顺序查表法、计算查表法、对分搜索法等。关于建表与查表,在程序设计或微型计算机原理课中都有相关内容,读者可以去查阅。

查表与插值逼近法

由于存储容量的限制,有些表格只给出一些稀疏点上的函数值。而对任何相邻两点中间的函数值常用插值法近似计算,最常用的插值法是运算量较小的线性插值法和二次插值法。线性插值法的原理如图7-14

所示。A、B两点的点斜式直线方程为:

上式称为一次插值多项式,其中:只要有一个x就能找到相应的y值,通常把线性插值公式编制成相应的子程序,在调用前赋入相应参数,直接调用即可。查表与插值逼近法线性插值有时误差较大。因此,可用三点决定的曲线来实现插值。若三点不在一条直线上,通过三点的曲线(也就是抛物线)求得,故称为抛物线插值(二次插值)。二次插值的公式为:上式可以简化:

按此式也不难编出相应的标准子程序,供系统作插值运算使用。线性插值运算速度快,但精度低。而二次插值精度比一次插值精度高,但速度慢。可以根据实际系统的情况选择使用。

折线近似法在工程实践中,有些非线性规律不能用数学公式精确表达,只能以某种曲线描述出来。对于这些曲线可用折线近似方法求解。折线的每一段都可以看成是线性的。我们把各点输出值与斜率不同的各小段综合起来,就可实现所需函数的逼近。

对于这种方法,只要n值取得足够大,即分段足够多,就可以获得良好的非线性转换精度。曲线分段的方法主要有两种:(1)等距分段法等距分段法就是等距离选取分段点。这种方法的主要优点是使计算简化,节省内存。但该方法的缺点是当函数的曲率和斜率变化较大时,将会产生一定的误差。否则,必须把基点分得很细,这样势必占用更多的内存,并使计算时间加长。(2)非等距分段法这种方法的特点是分段点间不是等距的,而是根据函数曲线的形状及其变化曲率的大小来修正插值间的距离,曲率变化大的,插值间距取小一点;反之,可将插值距离增大一点。这种方法的优点是可以提高精度,但非等距插值点的选取比较麻烦。

标度变换程序设计实际应用中,被测模拟信号被检测出来并转换成数字量后,常需要转换成操作人员所熟悉的工程量。因为被测对象的各种数据的量纲与A/D转换的输入值是不一样的。例如:温度的单位为℃,压力单位为Pa等等。这些参数经传感器和A/D转换后得到一系列的数码,这些数码值并不等于原来带有量纲的参数值,它仅仅对应于参数的大小,故必须把它转换成带有量纲的数值后才能运算、显示或打印输出,这种转换就是工程量变换,又称标度变换。线性参数的标度变换对于一般的线性系统,其标度变换公式如下:程序清单为://函数名:ScaleChange//入口参数:X-采样值//出口参数:标度变化后的数值#defineA02//测量范围的下限值#defineAm40//测量范围的上限值#defineN00//A0对应的数字量#defineNm255//Am对应的数字量doubleScaleChange(doubleX){doubletemp;temp=(Am-A0)*(X-N0)/(Nm-N0)+A0;returntemp;}

非线性参数的标度变换如果被测量为非线性刻度时,则其变换式应根据具体问题分析,首先求出它所对应的标度变换公式、然后再进行程序设计。例如,在流量测量中,其流量和差压的公式为:

根据上式知道,流体的流量与被测流体流过节流装置前后产生的压力差的平方根成正比,于是得到测量流量时的标度变换式为:PID算法程序设计1.位置式PID算法程序设计位置式PID控制算法的表达式为:

式中:——比例系数

——积分系数

——微分系数

PID算法程序设计

为了编程方便,在式(7-25)中,令:

(7-27)

则,式(7-25)改写为:

(7-28)

位置式PID控制算法的流程图如图7-15所示,其中

r(k)为给定输入,y(k)为经滤波后的测量值。

PID算法程序设计程序清单://函数名:PositionPID//入口参数:*Y-采样值地址//出口参数:位置式PID算法的结果#defineKp20//比例系数#defineKi10//积分系数#defineKd15//微分系数externdoubleEk1//E(k-1)变量externdoublePIk1//PI(k-1)变量externdoubleRk//设定值doublePositionPID(double*Y){ doublePPk;doublePIk;doublePDk;doubleEk;PID算法程序设计doubleresult;

Ek=Rk-*Y;//求取偏差PPk=Kp*Ek;//k时刻的比例项PIk=Ki*Ek+PIk1;//k时刻的积分项PDk=Kd*(Ek-Ek1);//k时刻的微分项result=PPk+PIk+PDk;//k时刻的PID运算结果Ek1=Ek;//保存k时刻的偏差PIk1=PIk;//保存k时刻的积分项returnresult;//返回结果}

PID算法程序设计2.增量式PID算法程序设计增量式PID控制算法的表达式为:

(7-29)式中:

(7-30)

//函数名:IncrementPID//入口参数:*Y-采样值地址//出口参数:PID算法的结果#defineKp20//比例系数#defineKi10//积分系数#defineKd15//微分系数externdoubleEk1//E(k-1)变量externdoubleEk2//E(k-2)变量externdoubleRk//设定值doubleIncrementPID(double*Y){doubleEk;doubleresult;Ek=Rk-*Y;result=Kp*(Ek-Ek1)+Ki*Ek+Kd*(Ek-2*Ek1+Ek2);Ek2=Ek1;Ek1=Ek;returnresult;//返回结果}

PID算法程序设计3.抗积分饱和PID控制算法程序设计这里只讨论采用积分分离法抗积分饱和的PID控制算法程序设计。其控制规律是:当偏差大于某个规定的门限值时,取消积分作用,从而使不至过大。只有偏差较小时,才引入积分作用,以消除偏差。其控制算式为:

其中:为的门限值PID算法程序设计程序清单://函数名:SeparatePID//入口参数:*Y-采样值地址//出口参数:积分分离PID算法的结果#defineKp20//比例系数#defineKi10//积分系数#defineKd15//微分系数#defineEpsilon10//偏差门限值externdoubleEk1//E(k-1)变量externdoublePIk1//PI(k-1)变量externdoubleRk//设定值doubleSeparatePID(double*Y){doublePPk;doublePIk;doublePDk;

PID算法程序设计doubleEk;doubleKE;doubleresult;

Ek=Rk-*Y;//求取偏差PPk=Kp*Ek;//k时刻的比例项PIk=Ki*Ek+PIk1;//k时刻的积分项PDk=Kd*(Ek-Ek1);//k时刻的微分项Ifabs(Ek)>EpsilonKE=0;ElseKE=1;result=PPk+KE*PIk+PDk;//k时刻的PID运算结果Ek1=Ek;//保存k时刻的偏差PIk1=PIk;//保存k时刻的积分项returnresult;//返回结果}

PID算法程序设计4.不完全微分PID控制算法程序设计不完全微分PID控制器增量型控制

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论