(中国工程物理研究院 计算机应用研究所 ,四川 绵阳 629000)
分布式运动控制大量应用于激光装置的自动准直控制组件中[1-2],实现多程激光放大的光路指向性控制[3],具有规模大、诊断要求高的特点。在已经建设的大型激光装装置中,测量组件[4]和终端光学组件[5]均采用了FCS(Fieldbus Control System)控制系统架构, 控制系统包含6个束组,每个束组控制相对独立,只关键控制流程节点上进行流程同步。单个束组控制中,采用嵌入式PC作为中央处理单元,通过EtherCAT工业实时以太网总线构建通讯网络,与其下的分布式控制柜单元进行数据通讯。控制柜单元采用EtherCAT通讯模块和步进电机端子模块实现真空步进电机控制。激光装置主放大自动准直组件同样采用FCS控制系统架构,6个束组的步进电机控制对象超过2 000个,大部分电机运行在真空环境中,对控制系统的在线诊断和故障定位功能提出了较高要求。控制系统持续建设和运行中出现的各种故障的诊断分析和应对措施,也处于不断的完善中。原控制系统的数据采集、诊断能力相对有限,新增加的状态监控软件势必影响原有运动控制系统的连续运行。针对以上问题,结合控制系统边建设边运行的特点,在不改变原来运动控制系统代码、不影响控制系统运行的基础上,设计并部署独立的状态监测系统,实现控制对象的运行记录采集、归档,基于采集数据进行故障查询、故障分析、故障预测,实现控制系统的连续、可靠、稳定运行,同时为现场故障的诊断分析提供数据支持。
主放大自动准直组件通过光路中的进场、远程图像实现光路位置偏差的检测,利用矩阵光学模型[3]计算光路调整步进电机的运动位移,最终通过运动控制系统对相应的步进电机执行位移控制。
自动准直组件运动控制系统是一个由2016个步进电机驱动器构成的典型分布式运动控制系统,系统结构如图1所示。
图1 运动控制系统结构
主放大准直控制系统硬件采用FCS控制系统架构,由四类典型的控制硬件构成:6个运动控制服务器、30个运动控制器、228个运动控制网络通讯模块BK1120、2016个步进电机驱动模块KL2541。控制软件基于德国倍福公司的TWINCAT2工程平台实现。
运动控制服务器根据光束控制的要求协调步进电机的目标位置及路径控制,运动控制器通过EtherCAT实时以太网控制其下近80个步进电机的速度和位置,通过控制网络EtherNet完成和运动控制服务器的控制数据交互。步进电机驱动模块KL2541通过实时以太网EtherCAT通讯模块BK1120实现和运动控制器的实时通讯。
运动控制状态监测系统实现主放大自动准直组件的运动控制器、通讯模块、驱动模块的在线记录、监测、诊断。运动控制状态监测系统独立于原来运动控制系统增加运动控制状态监测服务器,在状态监测服务器上部署组态监测软件,通过运动控制器采集控制系统部件的状态数据,实现数据记录、状态监测、故障报警,系统结构如图2所示。
图2 状态监测系统结构
状态监测系统是一个典型分布式数据采集系统,通过30个运动控制器采集控制系统部件的状态数据,集中汇总到状态监测服务器上。状态监测软件基于组态软件进行开发,既可以提高应用软件的开发效率,也能保证软件质量。数据采集与监视控制软件[6]全称SCADA组态软件,组态软件作为一种系统开发工具,开发环境中集合了数据管理、数据监测、流程控制等功能模块,运行软件以人机交互界面为主要表达形式供用户操作使用。组态软件提供了可视化图形开发功能,使用简单的脚本语言对现场硬件采集的参数绑定,可对控制流程以图形或动画的表达方式进行编程模拟,能够提高开发效率。
目前,工控应用中最具代表的国外组态软件[7]包括国外Wonderware公司的Intouch、美国Intellution公司的iFIX、西门子公司的Wincc。国内针对100,000控制点以上的大中型组态软件有亚控公司的KingScada、三维公司的ForceControl等。其中亚控公司的KingScada组态软件支持近 4000种硬件设备驱动[8],也包括了倍福公司的ADS(Auotomation Device Specification)通讯协议,同时KingSCDA组态软件本身提供了面向对象的设备模型、显示模型等技术手段,更便于典型对象参数绑定、变量处理、集中展示。基于KingSCADA组态软件完备的驱动库[9]和较多的数据存储分析工具[10],状态监测程序采用KingSCADA组态软件设计实现,部署于Windows状态监测服务器上。
运动控制状态监测系统实现运动控制部件的状态监测、记录、故障报警,包括数据采集程序(IO Server程序)、数据处理程序、归档程序(状态和位置变量归档、报警变量归档)和显示程序(HMI显示程序、趋势显示查询程序、报警显示查询程序),系统软件结构如图3所示。
图3 状态监测系统软件结构
数据采集程序(IO Server)基于KingSCADA提供的标准数据通讯服务配置环境实现。数据采集程序与部署在运动控制器上的运动控制软件之间通过ADS通讯协议实现数据通讯。
数据处理和显示程序基于KingSCADA组态开发环境实现。针对核心控制对象电机驱动模块(以下简称电机对象),设计设备模型对象,实现电机对象数据接口的分类处理,将电机的状态和位置变量分离为归档变量、报警变量、显示变量,分别接入归档数据库、报警数据库、显示程序。
数据采集程序采集运动控制软件的设备状态变量和位置变量。通用OPC(OLE for Process Control)数据通讯方式[11]是比较常用并且大多数组态软件都支持的数据通讯方式。但对于倍福运动控制器中基于TWINCAT开发平台实现的运动控制程序,实现OPC通信需要在源代码级别对相应的通讯变量进行声明,重新编译,这些对于运行中的控制系统存在不可控风险。
数据通讯协议选择倍福TWINCAT开发平台的底层通讯协议ADS实现,保证了通讯效率,同时不需要修改运动控制器上的控制软件代码。
运动控制器的网络配置参数包括设备驱动、设备地址。 运动控制器驱动程序采用TwincatRemote.dll动态链接库,设备地址为运动控制器在ADS通讯协议下的NetID地址。
通讯模块、驱动模块的状态变量配置参数包括关联设备名称(控制器名称)、寄存器(地址)、采集数据类型[8]。 运动控制软件电机对象的状态和位置变量类型(软件版本TWINCAT2110)与亚控数据采集程序KingSCADA(软件版本KingScada3.51) 内部变量类型并不完全一致,通过应用测试,对应关系如表1所示。
表1 数据采集程序变量类型的设置
数据处理程序将电机对象的输入状态变量和位置变量分离为报警变量、显示变量,分别接入报警数据库、显示程序,并对有归档要求的变量接入归档数据库。
数据处理程序实现的核心在于从状态和位置变量分离报警和显示变量。状态和位置变量采用历史数据库保存,报警变量接入报警数据库。应用程序启动时读取设备状态和位置变量,运行时根据状态和位置变量的变化自动触发转换程序。
KingSCDA组态软件支持面向对象开发模式,支持数据模型及其实例化。可以将控制对象的变量和关于这些变量的一些脚本运算组合在一起形成数据模型,在使用时只需要将模型实例化,即配置相关的参数,可以快速把这些数据点和脚本部署到工程中。
电机对象的设备模型定义如图4所示。
图4 电机设备模型定义
电机设备模型的输入变量包括电机对象的状态和位置变量,输出变量包含报警变量(硬件错误报警Alarm_HardError、负限位报警Alarm_LimitMin、正限位报警Alarm_LimitMax、软件错误报警Alarm_SoftMinMax)和显示变量(电机故障Error、电机准备好Ready、电机移动中Moving、电机正限位LimitMin、电机负限位LimitMax),根据归档需求,这些变量具有不同的归档属性,如表2所示。
在电机设备模型中添加脚本程序,当状态和位置变量发生变化时,触发脚本程序执行,将电机对象的状态和位置变量转换为显示变量、报警变量,如下:
LimitMax=(MotorStatus & 01);
表2 电机设备模型变量统计表
LimitMin=(MotorStatus & 02);
Moving=(MotorStatus & 32);
Ready=(MotorStatus & 64);
Error=(MotorStatus & 128);
位变量LimitMax 、LimitMin 、Moving 、Ready、Error对应电机状态变量MotorStatus不同的位。
将电机对象的设备模型实例化为2 000个电机对象,实现电机对象从状态和位置变量分离出报警和显示变量。电机对象超过2 000个,手动链接电机设备模型对象的状态和位置变量标签工作量巨大,设计定时执行的脚本程序,将数据采集程序的电机对象状态变量标签值链接到电机设备模型对象的状态变量标签,实现如下:
str_tagname1= "\localAxis"+ i+ j+ "0"+ k1+ ".MotorStatus";
//定义电机设备模型对象的状态变量地址;
//i为束组编号,j为光路编号,k1为电机编号;
str_tagname2= "\localM"+ i+ j+ "0"+ k1;
//定义数据采集程序电机对象的状态变量;
int_trasfer= GetTagFieldInt( str_tagname2, "Value" );
//获取电机对象状态变量值;
str_transfer= StrFromInt( int_trasfer,10);
SetTagField( str_tagname1, "Value" , str_transfer);
//写入电机设备模型对象的状态变量;
显示程序实现状态监测系统设备对象的状态显示、报警和趋势显示查询。报警显示界面为状态监控程序的主界面,可通过菜单转至设备监控、趋势显示界面。
1)报警显示界面:
报警显示界面基于报警窗口控件设计实现,设计历史报警、报警归档查询界面,如图5所示。
图5 历史报警查询
历史报警查询能够根据束组、电机号进行过滤,同时可以进行单月、单天及自定义历史查询[8];
通过电机轴号对报警进行过滤,实现如下:
string str_AlarmTagname;
str_AlarmTagname="TagName INCLUDE"+StrChar(34)+\localstr_AlarmInclude_AxisNo+StrChar(34);
//获取轴号过滤查询条件
AlarmWindow.SetFilterString(str_AlarmTagname);
通过时间对报警进行过滤,显示当月的报警实现如下:
string m;
long year;
long month;
year=UIDateTime1.Year;
// UIDateTime1为系统时间
month=UIDateTime1.Month;
if (month<10)
m="0"+StrFromInt(month, 10);
else
m=StrFromInt(month, 10);
\localwhere="Alarm"+StrFromInt(year, 10)+m;
//获取时间过滤查询条件
AlarmWindow.Query(\localwhere);
2)趋势显示界面:
趋势显示界面可以载入一定时间范围内不同电机对象的状态、位置、报警、归档变量进行对比分析和趋势分析,帮助确定故障报警时间前后控制对象的状态变化,以及不同控制对象之间的状态关联。
趋势显示界面基于历史曲线控件实现,支持16个变量曲线的趋势分析和对比[8]。
图6为电机限位报警历史数据分析。
图6 电机状态历史趋势
趋势显示界面基于历史曲线控件KSHTrend.ocx实现。增加电机位变量Ready显示曲线,实现如下:
\localstr_hiscurve1="\localAxis"+\localstr_his_AxisNo+".Ready";
OcxControl1.Control.AddCurveVarName(\localstr_hiscurve1);
设定趋势显示范围为一个月,实现如下:
int_end=ConvertTimeToSecond(\local$Year, \local$Month,\local$Day, \local$Hour, \local$Minute,\local$Second, false);
//历史趋势曲线的结束时间
int_start =int_end-30*24*3600;
//历史趋势曲线的开始时间
int_lasting=30*24*3600;
//历史趋势曲线的持续时间
int_start_month=GetLocalMonthFromSecond(int_start);
int_start_year=GetLocalYearFromSecond(int_start);
OcxControl1.Control.SetTimeParamDivided(int_start_year,int_start_month,int_start_day,int_start_hour,int_start_minute,int_start_second,0,int_lasting,0);
//根据起始时间、持续时间显示历史趋势曲线
3)设备监测界面:
设备监测界面实现状态监测对象包括运动控制器、通讯模块、驱动模块的实时状态显示。采用显示对象模型及其实例化实现近2 000个电机的状态显示,如图7所示。
图7 设备状态监测
设备监测界面对控制器、通讯模块、驱动模块以及网络通讯状态进行实时显示,绿、黄、红3种颜色代表设备运行、报警、故障状态。报警及故障状态信息也同时反映在历史报警界面中待用户确认。
运动控制状态监测系统在主放大准直控制组件正常运行的条件下完成部署、调试、运行,能够对控制系统部件的状态、位置数据进行连续记录,同时对部件的偶发性故障进行记录归档。
1)驱动器IO口故障定位:
自动准直组件进入第三年运行以后,某区域的驱动模块的限位开关IO口陆续出现失效的问题。根据历史故障记录分析对比不同束组出现的的限位开关故障,先投入运行的束组控制系统出现IO口故障频率越高,也就是故障的频率与运行时间呈正比,貌似与器件老化相关。但是对比单个束组不同区域的IO口故障,故障区域的IO口故障整体偏高。进一步分析驱动模块的IO口信号,IO口故障通常发生在电信号下降沿,工作在常闭状态下的IO口故障率远远大于工作在常开工作状态的IO口。对多个IO口的工作电流进行监测,发现常闭状态IO口的工作电流为12毫安,远大于产品手册要求的5毫安,可能时导致IO口非正常老化的根本原因。在不同束组上进行增加限流电阻、不增加限流电阻两种技术手段的对比试验,统计3个月之后的累计故障,增加限流电阻可以有效的避免IO口故障发生,由此判断IO口工作电流大是导致此区域IO口异常老化损坏的根本原因。
2)通讯模块故障分析:
通讯模块在近两年的运行中故障率较高。分析通讯模块的近两年的故障历史记录,发现通讯模块的故障时间与控制器状态变化时间强相关。在历史趋势曲线中分析通讯模块故障状态位和控制器状态位的时序,发现通讯模块故障通常发生在控制器启动后进入运行状态的时刻,此时也是EtherCAT通讯网络首次自检的时刻,由此确定通讯模块的故障可能与控制器启动时的电源干扰相关。采用电源隔离解决了部分通讯模块故障问题,对于不能进行硬件改造的通讯模块,减少系统启动次数,当检测到通讯模块故障后重新启动也能有效的减少通讯模块故障的发生频率。
利用运动控制状态监测系统的状态、故障历史数据,通过回溯分析工具,能够有效的分析、发现故障,保障主放大准直控制组件的长期稳定运行。
针对激光装置主放大自动准直组件,基于KingSCADA组态软件,研制了运动控制状态监测系统,实现了运动控制系统部件的状态监测、数据归档、趋势和报警显示,提升了运动控制系统的在线诊断和分析能力,为运动控制系统的故障诊断提供基础分析数据。
目前运动控制状态监测系统的数据分析能力有限,仅能进行单变量的统计分析,通过后续历史数据库的建设完善,采用关联数据分析算法,能够进一步提升控制系统的智能故障诊断能力。