APP下载

动态链接库在先进控制软件包中的设计与应用

2014-08-03任丽丽夏伯锴

化工自动化及仪表 2014年8期
关键词:组态王下位调用

任丽丽 唐 娟 夏伯锴

(1.中石油兰州石化公司自动化研究院,兰州 730060;2.中国石油大学(华东),山东 青岛 266580)

对于石油化工行业,“安稳长满优”是生产装置运行的目标[1,2]。采用先进控制与优化技术提高装置的自控水平,对于充分发挥生产装置的运行潜力,有效实现平稳运行、增产与降耗具有十分重要的意义[3,4]。目前国内装置较多引进国外的先进控制与优化软件,由于这类软件开发成本高,应用时还需专家到现场测试数据,并对软件进行安装、调试与培训,费用昂贵,同时由于知识产权问题,重复购买时价格基本相同。所以,开发具有自主版权的先进控制与优化软件势在必行。

笔者采用VC++和Visual Basic平台开发先进控制系统软件包,设计了软件包的体系结构,并对状态反馈预测控制算法进行简要推导,着重探讨基于VC++的动态链接库技术在先进控制系统软件包中的设计与应用。

1 软件包体系结构①

按照需求分析、功能要求和设计原则,优化控制软件包体系(OCS)设计为C/S(客户/服务器)结构,如图1所示,服务器端(上位机)响应并提供固定的服务,客户端(下位机)向服务器端请求某种服务。

本设计采用基于VB中应用程序间数据传送的动态数据交换(DDE)技术实现数据共享[5]。所有共享变量均置于运行平台处,各模块所需的变量可从运行平台中得到。通过DDE技术,应用程序之间相互传送数据。上位机和下位机的TCP/IP通信采用Winsock控件。

图1 软件包体系结构

客户端(下位机)常采用DCS、工控机、组态王及PLC等。在设计中,下位机的控制对象采用组态王应用软件。服务器端(上位机)包含有运行平台、先进控制算法模块和模拟仿真模块。

采用组态王模拟下位机DCS,通过上-下位机联调对热水罐的液位、温度的二入二出耦合模型进行仿真[6]。先进控制算法模块从运行平台得到过程对象模型的状态变量和输出变量,输入、输出和状态个数,以及控制的预测步数。调用动态链接库函数计算出控制量,通过DDE技术写入运行平台。采用C语言基于VC++ 6.0(VC)环境编写先进控制算法,通过编译生成动态链接库(DLL)。在VB中通过声明调用.dll中的导出函数,即可计算出控制量。

运行平台通过TCP/IP协议再把控制量发送至下位机的组态王,通过过程对象模型的仿真计算模块,计算出状态变量和输出变量,再通过TCP/IP协议将其送入运行平台。反复进行以上步骤,通过上下位机的联调即可实现过程对象的先进控制。

2 多变量状态反馈预测控制算法

研究中采用多变量状态反馈预测控制策略,以使系统突破内模控制(IMC)的框架,可用于不稳定的被控对象。具有较强的抗干扰能力,鲁棒性好,稳态无偏差且在线计算量小。多变量状态反馈预测控制数学模型基于状态空间,过程对象数学模型可描述为:

x(k+1)=Ax(k)+Bu(k)
y(k)=Cx(k)

(1)

由式(1)可得状态变量x和输出y在未来p时刻的预测值,即:

(2)

(3)

未来p时刻的输出预测修正值和当前输出预测值分别为:

(4)

(5)

多变量预测控制系统与单变量(SISO)预测控制系统[7]的不同之处在于,多变量预测控制系统的每一个输出yj(k)都可以有一个相应的预测时域pj,或者说多变量预测控制系统的预测时域P是一个向量,即P=[p1,p2,…,pr]T,其中r为过程对象输出的维数。

由式(3)可知,对于第j个输出,在未来pj采样时刻的预测值[8,9]为:

(6)

(7)

j=1,2,…,r

采用单值预测控制策略思路,可得:

u(k+i)=u(k),i>0

通过使反馈修正后的输出预测值等于输出给定值,得到最优控制律。

联立式(4)、(5)、(7)可得:

ysj(k+pj)=cjApjx(k)-cjApjx(k-pj)+

(9)

整理式(9)可得增量形式的最优控制律为:

Δu(k)=S-1(P)[Ys(k)-y(k)-Δx-Δu]

Δu(k)=u(k)-u(k-1)

Δx=CAP[x(k)-x(k-P)]

3 动态链接库技术的应用开发

软件开发过程中,VB与VC的链接采用的是动态链接库DLL技术。动态链接库是二进制文件[10~12]。在软件包开发应用中调用.dll时,将所需的.dll文件置于Windows的系统目录windowssystem之下。

在VC++中创建apc.dll的步骤如下:

a. 创建apc.dll工程。在VC++菜单中选择FileNewProject,再选择Win32 Dynamic-Link Library,在Project Name中输入工程名apc,并保存apc.dll工程文件。

b. 创建apc.def文件。LIBRARY apc,定义导出函数algorithm()为例,EXPORTS;algorithm @1。

c. 创建apc.h头文件。在菜单中选择FileNewC++ Head File项,输入代码后保存文件名apc.h。

d. 填写apc.cpp文件。输入代码后保存文件名apc.cpp。

e. 编译apc.dll文件。

3.1 在VB中进行声明

在apc.dll中,函数和过程对于VB应用程序来说是外部过程,为了调用这些函数和过程,必须在VB中进行声明。在一个VB(工程)中,要调用的dll过程只需声明一次,以后即可在程序的任何地方调用[5,12,13]。dll过程的声明有两种格式:

a. Declare Sub过程名Lib”库名”[Alias“别名”]([参数表列]);

b. Declare Function过程名Lib”库名”[Alias“别名”]([参数表列])As类型。

在本设计中,采用第一种声明方式,即declare sub algorithm lib“apc.dll”(byval as long,byval as long,byref as double,byref as double,byref as double,byref as long,byref as double),其中algorithm为VB应用程序中使用的过程名;apc.dll为动态链接库库名;Byval为传值方式;ByRef为传址方式。由于u,x,y,p,ys为数组,所以必须将相应参数声明设为传址方式,即把数组的第一个元素作为参数传入,这样在dll中就得到了数组的首地址,从而可对整个数组进行访问。

开发中,需要对C语言与VB语言的数据类型进行转换,见表1。由于dll过程中的参数是用C语言数据类型定义的,当在VB中声明一个过程时,必须指定与其匹配的VB数据类型。

表1 C语言与VB语言数据类型转换

3.2 在VB中进行调用

在VB中进行调用时,使用call语句。如调用动态链接库中的预测控制algorithm函数,则为call algorithm(m,n,u(0),x(0),y(0),p(0),ys(0))。

4 仿真应用

对热水罐的液位和温度二入二出耦合模型进行仿真测试,被控变量的控制效果如图2、3所示,对于稳定的被控过程,预测步数减小,预测控制作用增强,动态调节过程加快;反之,预测步数增大,则预测控制作用减弱,动态调节过程减慢,控制系统的鲁棒性增强。

图2 预测时域p1=2、p2=1的控制效果

图3 预测时域p1=6、p2=5的控制效果

5 结束语

测试运行结果表明,以DDE和TCP/IP通信为基础,软件包各模块协调运行正常,上位机的预测算法对下位机组态王中的水罐模型实现了完美控制。基于状态变量反馈的预测控制算法对耦合模型也消除了稳态误差。这就验证了软件包整体功能设计的正确性。

猜你喜欢

组态王下位调用
核电项目物项调用管理的应用研究
发射机房监控系统之下位机
LabWindows/CVI下基于ActiveX技术的Excel调用
基于组态王软件和泓格PIO-D64 板卡的流水灯控制
基于系统调用的恶意软件检测技术研究
景洪电厂监控系统下位机数据传输网络改造
围观党“下位”,吐槽帝“登基”
MATLAB实现组态王中TCP/IP读卡器监控方法
CAN总线并发通信时下位机应用软件设计
基于PLC与组态王煤矿压风机的设计研究