李月恒, 贺敏超, 胡敦利, 孙德辉
(北方工业大学 现场总线及自动化北京市重点实验室,北京 100144)
基于仿真对象的控制开发平台设计
李月恒, 贺敏超, 胡敦利, 孙德辉
(北方工业大学 现场总线及自动化北京市重点实验室,北京100144)
针对控制工程中现场需要在线频繁调整控制策略、调试不便且工期紧张的问题,设计了对控制系统在实验室进行离线仿真测试的通用开发平台。平台硬件由控制计算机、PLC、数据采集卡和仿真计算机组成,平台软件主要由MATLAB和WinCC组成,在MATLAB中建立实际控制对象的模型后在WinCC中编写控制算法,离线测试达到控制目标后将控制计算机部分以及PLC转移到控制现场,缩短现场调试时间的同时提高了控制系统的可靠性。
WinCC;PLC;数据采集卡;MATLAB;PID
在工业生产控制过程中,控制机与PLC相结合的控制系统被广泛应用于中小规模的过程控制中。PLC接收来自工业现场的采集信息传送给控制机,控制机根据控制算法把采集来的信号进行处理后再发送给PLC,使PLC控制执行设备进而实现工业过程控制[1]。控制算法的设计决定着控制过程能否达到预期效果,若控制效果不佳,在某些工业场合还具有一定的危险性。本文设计的基于仿真对象的控制开发平台即可对设计出的控制系统性能进行检验和调试,有利于开发新型控制算法,减少现场调试周期。
系统硬件组成结构如图1所示。
控制机中装有组态软件WinCC。WinCC(Windows Control Center)是西门子公司与Microsoft公司共同开发的HMI/SCADA软件,能够提供生成复杂可视化任务的组件和函数,具有生成画面、脚本、报警、趋势和报表的编辑器。WinCC提供了OLE、DDE、ActiveX、OPC服务器和客户机等接口或控件,可以很方便地与其他应用程序交换数据,还提供所有主要PLC系统的通讯通道,支持所有连接SIMATIC S5/S7/505控制器的通讯通道,还包括PROFIBUS DP、DDE和OPC等非特定控制器的通讯通道[2]。
控制机与PLC通过OPC方式通讯。PLC选用ABB AC500系列PLC PM573,具有512KB的程序内存,2个可设定的COM口,支持分布式I/O扩展和以太网通讯。AC500系列PLC功能灵活、可拓展站性强,其特有的模块化结构,使系统从小型向中大型扩展时,只需更换一个CPU单元,I/O模块、CPU底板和编程环境都是通用的。此外,AC500系列PLC还具有通用的FBP总线技术,可以并行链接不同的总线系统,可以同时支持Modbus、Profibus-DP、DeviceNet和CANopen等总线类型。本地I/O模块采用DA501,具有16路DI,8路DC 、4路AI和2路AO。
数据采集卡采用泛华公司的nextkit nano,实现PLC与仿真机之间的数据交换。nextkit nano具有8路AI,2路AO以及16路DIO,使用USB供电和数据传输,并且支持LabVIEW、MATLAB和.Net二次开发。
仿真机中装有仿真软件MATLAB。MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境,具有强大的动态系统仿真功能。Simulink作为MATLAB最重要的组件之一,提供的面向框图的仿真及概念性仿真功能,使得用户能容易地建立复杂系统模型,准确地对其进行仿真分析。Simulink的概念性仿真模块集允许用户在一个框架下对含有控制环节、机械环节和电子、电机环节的机电一体化系统进行建模与仿真[3]。
2.1OPC通讯组态
OPC(OLE for Process Control)是为过程控制设计的OLE技术,由一些世界上占领先地位的自动化系统和硬件、软件公司与微软(Microsoft)紧密合作而建立的,OPC基金会负责OPC规范的制定和发布。OPC提出了一套统一的标准,采用CLIENT/SERVER模式,针对硬件设备的驱动程序由硬件厂商或专门的公司完成,提供具有统一OPC接口的SERVER程序,软件厂商按照OPC标准访问SERVER程序,即可实现与硬件设备的通信[4]。
使用Control Builder Plus、CoDeSys、CoDeSys OPC Configurator和WinCC软件进行OPC通讯配置,步骤如下:
(1) 在Control Builder Plus软件中设置CPU模块的IP地址以及组态本地I/O模块DA501。
(2) 在CoDeSys软件中建立两个INT型变量INPUT和OUTPUT,将DA501的模拟量输入输出地址分别赋给这两个变量。选择工程菜单下的“选项”,在符号配置界面配置符号文件。在左下角“资源”选项卡的目标系统配置中勾选“下载标识符文件”。选择联机菜单下的“通讯参数”,新建一个TCP/IP类型的通道,然后设置Address为CPU的IP地址,Port为1201,Motorola byteorder为Yes。最后点击联机菜单下的“登入”将配置下载到PLC中,下载完成后点击联机菜单下的“创建引导工程”,并将PLC切换到run模式。
(3) 在CoDeSys OPC Configurator软件中右键点击“Server”,选择“Append PLC”以新建一个OPC服务器,填写工程名并勾选Motorola Byteorder,其余设置保持默认,然后点击“Connection”,在右侧界面中选择“Edit”按钮配置网关参数,配置过程与上述TCP/IP通道配置相同,配置完成后点击保存。
(4) 在WinCC软件中右键点击“变量管理”,选择“添加新的驱动程序”用于加载OPC驱动程序。右键点击“OPC Groups”选择“系统参数”,在OPC条目管理器中选择“CoDeSys.OPC.02”并点击“浏览服务器”按钮。在过滤标准对话框中点击“下一步”按钮。在CoDeSys.OPC.02对话框中选择之前建立的两个变量PLC1:PLC_PRG.INPUT和PLC1:PLC_PRG.OUTPUT,然后点击“添加条目”,添加完成后INPUT和OUTPUT变量在WinCC中的标签名分别为PLC1_PLC_PRG_INPUT和PLC1_PLC_PRG_OUTPUT。至此,OPC通讯组态完成。
2.2控制算法实现
本文采用增量式PID控制,其输出表达式为:
u(k)=u(k-1)+kp[e(k)-e(k-1)]+
kie(k)+kd[e(k)-2e(k-1)+e(k-2)]
其中kp、ki、kd分别为比例系数、积分系数和微分系数,u(k)为第k次采样输出值,e(k)为第k次采样偏差值。
增量式PID算法在计算时不需要进行累加,只需要最近几次误差的采样值。当计算机出现故障,输出控制指令为0时,采用增量算式时执行机构仍保持前一步的位置,不会给被控对象带来较大的波动[5]。
在WinCC中编写增量式PID算法步骤如下:
(1) 在变量管理子目录下的内部变量中新建浮点型32位变量kp、ki、kd、uk_1、ek_1、ek_2、var和二进制变量start。
(2) 在全局脚本子目录下的全局动作中新建全局脚本并添加C语言代码:
int start;
floatvar,uk,uk_1,ek,ek_1,ek_2,kp,ki,kd,
input;
//获取各参数值
start=GetTagBit(“start”);
var= GetTagFloat(“var”);
uk_1= GetTagFloat(“uk_1”);
ek_1= GetTagFloat(“ek_1”);
ek_2= GetTagFloat(“ek_2”);
kp= GetTagFloat(“kp”);
ki= GetTagFloat(“ki”);
kd= GetTagFloat(“kd”);
input= GetTagFloat(
“PLC1_PLC_PRG_INPUT”);
if(start==1)
{
//进行增量式PID运算
ek=var-input;
uk=uk_1+kp*(ek-ek_1)+ki*ek+kd*
(ek-2*ek_1+ek_2);
//将计算值输出给PLC
SetTagFloat(
“PLC1_PLC_PRG_OUTPUT”,uk);
//设置下一次运算时各参数值
SetTagFloat(“uk_1”,uk);
SetTagFloat(“ek_1”,ek);
SetTagFloat(“ek_2”,ek_1);
}
(3) 在信息/触发中添加一个250 ms的周期性定时器。
2.3监控画面设计
(1) 打开图形编辑器,右键点击背景,选择“属性”,在对象属性对话框中选择“事件”选项卡,然后在画面对象下选择“其他”,在右边的窗口中右键点击“打开画面”,选择C动作,然后添加C语言代码:
//初始化各参数
SetTagFloat(“uk_1”,0);
SetTagFloat(“ek_1”,0);
SetTagFloat(“ek_2”,0);
SetTagFloat(“kp”,0);
SetTagFloat(“ki”,0);
SetTagFloat(“kd”,0);
SetTagFloat(“start”,0);
(2) 添加一个按钮,将该按钮命名为开始运行。右键点击按钮,选择“属性”,在对象属性对话框中选择“事件”选项卡,然后在按钮下选择“鼠标”,在右侧窗口中右键点击“按左键”,选择C动作,然后添加C语言代码如下:
SetTagBit(“start”,1);
再添加一个暂停运行的按钮,其按左键的C动作代码如下:
SetTagFloat(“uk_1”,0);
SetTagFloat(“ek_1”,0);
SetTagFloat(“ek_2”,0);
SetTagBit(“start”,0);
SetTagFloat(
“PLC1_PLC_PRG_OUTPUT”,0);
(3) 添加几个输入/输出域用于设置转速、kp、ki、kd和显示当前转速。在控件中选择WinCC Online Trend Control用于创建趋势图,在趋势控件属性窗口选择“曲线”选项卡,然后在数据源下拉菜单中选择“在线变量”,点击“选择”按钮将变量设置为PLC1_PLC_PRG_INPUT1,并将周期时间设置为“有变化时”。
3.1数据采集的MATLAB实现
为了在MATLAB环境下应用数据采集卡nextkit nano实现实时数据传输,需要在MATLAB中编写数据采集程序。首先必须加载数据采集卡的库文件,加载后的Nano MATLAB函数库包含大部分Nano使用的DLL函数,其中有2个函数没有返回值,并且必须在执行子函数前先执行。一个是Nano_LoadDriver.m,此函数装载Nano动态链接库函数到MATLAB,同时还调用另外一个头文件Nano_DoublePtr.h,该头文件用于传输数组数据。另一个是Nano_Constants.m,此函数定义了Nano设备类型、连接类型、IO类型、通道类型等参数。其他函数定义在MATLAB函数库中都有描述。新建M文件output_nano,然后写入数据输出代码:
function y=output_nano(yout)
clc//清空MATLAB命令窗口
Nano_LoadDriver; //加载Nano动态链接库函数
Nano_Constants; //加载Nano常量文件
[Error Handle] = Nano_Open(
DAQ_dtU1,DAQ_ctUSB,'1',1) //打开Nano设备并返回设备句柄
Error_Message(Error)//检查并显示错误
Error=Nano_ePut(Handle,
DAQ_ioPUT_DAC,0,yout,0); //将变量yout赋给模拟量通道0输出
Nano_Close(Handle); //关闭Nano设备
y=yout;
数据输入采用流模式采集,程序流程图如图2所示。
图2 流采集程序流程图
新建M文件input_nano,然后写入数据输入代码:
function y=input_nano( )
clc
Nano_LoadDriver;
Nano_Constants;
……
//添加设置采样率、缓冲区、采样模式等命令,执行所有设置
Error = Nano_AddRequest(Handle,
DAQ_ioPUT_CONFIG,
DAQ_chSTREAM_SCAN_FREQUENCY,
ScanRate,0,0); //设置采样率
Error = Nano_AddRequest(Handle,
DAQ_ioPUT_CONFIG,
DAQ_chSTREAM_BUFFER_SIZE,
ScanRate*num_channels*buffer,0,0); //设置缓冲区
Error = Nano_AddRequest(Handle,
DAQ_ioPUT_CONFIG,
DAQ_chSTREAM_WAIT_MODE,
DAQ_swNONE,0,0); //设置非阻塞模式
Error = Nano_AddRequest(Handle,
DAQ_ioCLEAR_STREAM_CHANNELS,0,
0,0,0); //清除所有信道
Error = Nano_AddRequest(Handle,
DAQ_ioADD_STREAM_CHANNEL,0,0,0,
0); //设置信道0单端采样模式
Error = Nano_GoOne(Handle); //执行所有设置
……
//开始流采集,
Error = Nano_eGet(Handle,
DAQ_ioSTART_STREAM,0,0,0);
Scans = (ScanRate/1000) * (time*1000)* 2;
array(Scans*num_channels) = double(0);
pause (time)
[Error Scans return_array] = Nano_eGet_array(Handle,
DAQ_ioGET_STREAM_DATA,
DAQ_chALL_CHANNELS,Scans,array);
final_array = horzcat(final_array,
return_array(1:Scans*num_channels));
clear return_array
clear array
//停止流采集
Error = Nano_eGet(Handle,
DAQ_ioSTOP_STREAM,0,0,0);
……
3.2控制系统的MATLAB仿真
仿真系统及Simulink模型如图3所示。
图3 实际对象的Simulink模型
Input模块为实现将输入函数input_nano引用到Simulink的MATLAB Fcn模块,双击该模块,在弹出的界面中将MATLAB function设置为input_nano(),其余设置保持默认。Input模块没有输入参数,输出直接作用于控制对象。
在Simulink窗口中将仿真时间设置为inf(无限)并启动仿真运行。激活WinCC使其处于运行状态,然后设置转速、kp、ki和kd参数的值,设置完成后点击开始运行按钮进行测试。从趋势图中可以观察到控制效果,若效果不理想,则可以点击暂停运行按钮,然后调整kp、ki和kd的数值并再次启动运行。经多次试验测得当kp=0.5,ki=0.1,kd=0.2时能够达到比较理想的控制效果,如图4所示。
图4 平台监控运行界面
本文所述控制开发平台能够有效地将WinCC、PLC和MATLAB结合起来,利用MATLAB强大的仿真能力,达到对控制效果的初步验证。该控制平台能够提高编程效率,可靠性高,并且能够使控制系统更好的应用于工业现场。
[1] 席盛代.基于PC+PLC工业控制系统的应用与发展趋势[J].工业控制计算机,2008,21(7):1-2.
[2] 苏昆哲,何华.深入浅出西门子WinCC V6[M].北京:北京航空航天大学出版社,2004.
[3] 薛定宇.控制系统计算机辅助设计-MATLAB语言与应用[M].北京:清华大学出版社,2006.
[4] 李宏.OPC技术应用简析[J].设计技术,2006,49(3):46-50.
[5] 孙德辉,李志军,史运涛,等.计算机控制系统[M].北京:国防工业出版社,2010.
Design of a Control Development Platform Based on the Simulation Object
LI Yue-heng, HE Min-chao, HU Dun-li, SUN De-hui
(Key Laboratory of Field Bus and Automation in Beijing, North China University of Technology, Beijing 100144, China)
In view of frequent site online adjustment of control strategy required in control engineering, uneasy debugging and short construction period, a general development platform is designed for off-line simulation tests on control systems in the laboratory. The platform hardware consists of a control computer, PLC, a data acquisition card and a simulation computer, while its software is largely composed of MATLAB and WinCC. After a model for the actual control object is established in MATLAB, the control algorithm is compiled in WinCC. After the off-line test attains its control target, the control computer and PLC are moved to the control site, so that site debugging time is shortened and reliability of the control system is raised.
WinCC; PLC; data acquisition card; MATLAB; PID
本课题得到北京市青年英才计划项目资助(YETP1424)
10.3969/j.issn.1000-3886.2016.01.007
TP391.9
A
1000-3886(2016)01-0019-04
李月恒(1983-),男,内蒙古呼和浩特人,硕士生,讲师,主要研究领域为网络控制理论与控制系统。贺敏超(1989-),男,江西永新人,硕士生,主要研究领域为半实物仿真应用系统。胡敦利(1968-),女,北京人,博士,副教授,主要研究领域为现场总线技术和智能控制理论及应用。孙德辉(1966-),男,北京人,博士,教授,主要研究领域为网络控制理论及控制系统研究。
定稿日期: 2015-03-31