background image

 

3

在液压伺服系统中系统开环增益的变化容易

引起超调和震荡,使系统变得难以用常规的控制算
法进行控制,用模糊 PID 控制就能找出比较合适的
算法。其原理框图如图 3 所示。 




位移传感器

R +

-

Y

E

1

dt

d







s

Ki

  图 3  模糊 PID 控制结构 

图 3 中 R 是位移设定值,Y 是位移实际输出值,

E 为设定值与实际输出值的偏差。 

PID 控制用比例系数 K

P

进行调节,使系统动态

响应较快,超调量小,而且整个响应过程具有较好
的鲁棒性。控制器中加入积分器是为了克服被控对
象中存在的恒值扰动的影响。把积分调节器引入控
制器中, 
这无疑可以改善系统的稳态性能,但积分因子的引
入,会使系统动态响应变慢,破坏典型 PD 控制系
统所具有的响应快的特性,因此,考虑积分系数

K

i

是可变的,系统响应开始时是 PD 控制,快进入稳

态响应时积分因子起作用,相当于进行 PID 控制。
于是系统在保证快速性和稳态精度的同时,大大降
低了控制器的复杂性。 

模糊 PID 控制器取系统实际位移输出 Y 与位移

给定 R 的偏差 E=R-Y 及偏差变化率△E 作为输
入语言变量,比例系数 Kp 选作输出语言变量,这
样所涉及的模糊控制器是双输入单输出的。模糊控
制中最常用的是查表法,其作法是:首先通过事先
的离线计算,取得一个模糊控制表,然后将其控制
表存放到计算机内存中。于是在过程控制中,计算
机只需要根据采样并从论域变换得来的以论域元
素形式表现的 E 和△E,就可以由控制表的第 i 行和
第 j 列找到对应的同样以论域元素形式出现的控制
量 U,把其乘以比例因子,即可用于被控对象过程,
以达到预期的控制目的

[4]

。 

5.2  控制器配置 

一、硬件环境配置 

目标机采用研华工控机:  研华 6006ev INTEL 

P42.4G/256DDR/ST40G/32MAGP/10M-100MLAN;

I/O 板采用研华的 analog input card PCI-1713/4 

32channel/4channel; digital input/output card 

PCI-1733/4。 

采用 compact PCI 协议实现目标机和控制对象

的通讯。 
二、软件环境配置 

1.  VxWorks 引导盘制作: 

通过 tornado 环境的制作引导盘的向导制作,然

后改头文件 config.h 的参数。 

通 过 以 太 网 ftp 方 式 下 载 vxWorks : 在

tornado\target\config\pcpentium\config.h, 修
改 config.h,选择下载方式和网卡类型找到 CPU== 
PENTIUM,修改以下各项: 

网卡类型: 

ene=ne2000,elPci=3com,in=lance,ex=excelan, 
dc=digital,ei=intel 

具体做法如下: 

在 BSP 中生成 bootrom_uncmp 文件 

制作引导盘 

因为在 dos 下可执行文件放在 bin 目录下,所以在
命令行下,要先运行 torvars.bat,为可执行文件设
置路径。 
做 VxWorks 的引导盘要在 BSP 目录下(本例为
pcpentium 目录下)运行 mkboot a: bootrom_uncmp 

2.  编译 vxworks 
在 tornado - build output 窗 口 中 打 开 工 程 的

workspace0,  选择 build>rebuild all , 
生成两个 vxworks 文件:Version.o   Vxworks 

3.  从目标机连接主机 

在主机上打开 FTP server,修改用户名,密码和

根目录(刚才编译的 vxworks 所在目录)后启动 FTP 

server。 
在目标机上插入引导盘。 

[Vxworks Boot]     : c 

Boot device        : fei  /* 82557 网卡名*/ 

Process number     : 0 

Host name                  : host 

File name  :  /*输入编译生成的文件路径及文件
名*/ 

Inet on Ethernet (e)  :222.28.45.3  /*目标机局域网
址*/ 

Inet on backplane (b)    : 

Host inet (h)       :222.28.45.25  /*主机局域网址

*/ 

Gateway inet        : 

User (u)                        :user    /*  输入用户名*/