SUPMAX800D智能I/O卡上位机设计

2013-12-01 10:08樊亚宁徐震浩顾幸生
自动化仪表 2013年1期
关键词:链表组态上位

樊亚宁 徐震浩 顾幸生

(华东理工大学信息科学与工程学院1,上海 200237;化工过程先进控制和优化技术教育部重点实验室2,上海 200237)

0 引言

SUPMAX系列分散控制系统是上海自动化仪表股份有限公司DCS公司研发的新一代大型分散控制系统。自1998年推出以来,该系统已广泛应用于电力、石化、钢铁、有色金属、水泥、造纸、食品、制药和能源等领域[1-3]。

市场分析表明,针对需要复杂逻辑控制的系统,普通的DCS往往由于没有专用的逻辑控制卡件,在主控制器发生故障时,整个系统的逻辑控制功能将会失效,这对于控制系统来说是非常危险的。因此,设计专用的具有逻辑控制的智能I/O卡,使系统免受主控制器故障的影响,可提高系统的稳定性,且有利于系统的推广和应用。小型系统可以不使用控制器,直接采用智能I/O卡来实现控制功能。

本文阐述了智能I/O卡的硬件设计和结构化文本编译器设计方案,提出了智能I/O卡的上位机软件设计方案,并开发了智能I/O卡的上位机软件。

1 系统概述

上位机软件系统结构如图1所示。

图1 系统结构框图Fig.1 Structure of the system

智能I/O卡是SUPMAX800D系统中I/O卡的组成部分,采用专用的组态软件进行组态的下载,实现对系统的逻辑控制。智能I/O卡通过RS-232串口实现与上位机间的通信,可以独立执行组态算法,也可以通过RS-485总线和分散处理单元(distributed processing unit,DPU)进行数据通信,并在DPU断电时仍可以独立地进行逻辑控制,从而保证了整个系统的逻辑控制。智能I/O卡可以配置不同类型的信号,实现信号的输入和输出功能,但它只能应用于SUPMAX800D控制系统。

智能I/O卡的主要技术性能指标如下。

① 允许连接 AI、AO、DI、DO、TC、RTD 通道板;

②2 MB容量的 Flash,用于存储结构化文本(structure text,ST)组态文件;

③片内256 kB、片外4 MB的RAM;

④配置组态下载串口;

⑤通过I/O通信总线,与DPU进行通信和数据的交换;

⑥上位机配置相应的填表式组态器,可完成组态的编制、下载;

⑦根据相应的组态独立进行逻辑运算控制。

2 硬件设计

智能I/O卡可与SUPMAX800D系统中的模拟量和数字量I/O卡配套使用,实现数据的采集处理和控制功能。设计要求智能I/O卡可以直接和上位机通信完成组态的下载,也可以和DPU进行数据交换。智能I/O卡及其硬件结构如图2所示。

图2 智能I/O卡及硬件结构示意图Fig.2 Intelligent I/O modules and schematic diagram of the hardware structure

ARM9模块的具体功能如下。

①通过RS-232串口与上位机进行通信,接收PC控制策略组态文件、响应PC激活命令并发送响应数据、上传PC控制策略组态文件、上传报警及状态信息;

②发送通道板组态和数据至Cortex,接收Cortex通道状态和数据,与SDRAM和Flash通信。

ARM9模块的输入项为上位机组态文件,输出项为SPI总线控制Cortex。

Cortex和CPLD模块的作用是采集数字量和模拟量通道卡的输入信号,并控制A/D卡的输出及通道点。当DPU发送组态和命令时,Cortex把状态、数据、报警等发送给DPU。Cortex和CPLD模块的输入项为ARM9的SPI总线、通道卡的输入信号及RS-485总线,输出项为通道卡控制信号和RS-485总线。

通道板组态可以从ARM9和DPU中获取,但组态以ARM9发送过来的信息为准。如果两者发送的组态不一致,则报警。Cortex从I/O通道板的EEROM中读取I/O通道板的类型,并与ARM9发送的组态进行比较。如果两者不同,则报警。

接口设计具体为:与上位机使用RS-232串口连接,与DCS系统使用RS-485总线连接;与通道卡之间用40芯插座连接。

结构化文本(structure text,ST)是一种高级的文本语言,可以用来描述功能块和程序的行为,还可以在顺序功能流程图中描述步、动作和转变的行为。ST专为PLC系统定制,在DCS的组态软件中融入ST语言,可更好地实现与PLC系统的相互结合。本文提出了三种可行的设计方案,具体介绍如下。

2.1 纯ST文本编译

纯ST文本编译时,上位机部分采用ST文本格式输入智能I/O卡的组态和逻辑,再通过编译软件将纯ST文本编译成二进制代码,然后通过RS-232串口发送给ARM9芯片。ARM9芯片接收到二进制代码后,解析程序会对ST文本中一定数量的保留字进行解析,并转换为ARM9芯片能够执行的程序代码。其优点是灵活、不受模块类型的影响、通用性强、工作量小,缺点是目前编译生成的代码较大、效率低。

2.2 上位机生成ARM9运行代码

生成ARM9运行代码方案的上位机以模块的形式输入智能I/O卡的组态和逻辑,再通过ARM的编译软件将组态和逻辑编译成ARM9的运行代码,然后通过RS-232串口下发给ARM9芯片。ARM9接收到运行代码后可直接运行程序。其优点是ARM9无需解码执行程序即可运行、效率高,缺点是上位机要调用ARM编译软件、工作量较大。

2.3 上位机生成组态运行链表

生成组态链表方案的上位机也能以模块形式输入I/O卡的组态和逻辑,再将组态和逻辑编译生成组态运行链表,经由 RS-232串口下发给 ARM9芯片。ARM9芯片需要开辟一段数据区用于存放模块的数据结构,程序需解析运行链表。其优点是保持和DPU相同的处理方式和工作量,缺点是ARM9芯片需要开辟足够的内存来存放数据结构。

3 上位机软件设计与实现

上位机软件总体结构框图如图3所示。系统由文件、操作、通信和帮助等功能模块组成[4-7]。

图3 软件总体结构框图Fig.3 Overall structure of the software

文件模块包括新建项目和打开项目。新建项目是在底层创建可扩展标记语言(extensible markup language,XML)文件,用于存储用户添加的模块数据。打开项目用于打开已有的组态文件,并在底层读取文件内的模块,以树状结构形式显示在操作界面。

操作模块由增加模块、删除模块、激活模块、上传组态和下载组态模块组成。增加和删除模块使用户可以根据具体的功能需求组织模块间的输入、输出关系。下载组态是从底层的XML文件中读取所有模块的结构数据,根据模块的输入、输出关系生成模块运算顺序表及组态版本等数据,并下发给下位机。激活模块使智能I/O卡处于一个激活的状态。上位机根据用户选择的模块使用定时器实时下发激活命令给下位机,下位机接收到激活命令,将模块的参数值上传给上位机,并最终反映在用户界面上。同时,用户在激活状态下可修改某一模块的参数值并下发控制命令给下位机。上传组态是指ARM9将智能I/O卡中的组态以链表方式回送至上位机,上位机根据链表还原组态的结构和运算顺序。

通信模块包含通信参数配置。系统中上下位机采用RS-232进行串行口通信。

上位机软件是基于VC++2008平台下的微软基础类库(microsoft fundation classes,MFC)单文档程序。为实现上述功能,该软件主要涉及读写XML文件、如何分配模块运算顺序表、RS-232串口通信等技术。

3.1 读写XML文件

XML[8]用于标记电子文件,使其具有结构性的标记语言,从而可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。

本文使用微软提供的MSXML解析器来支持XML文件的操作。它根据XML文档生成一个文本对象模型(document objective model,DOM)树结构,读取 XML文档的内容,并创建一个节点的逻辑结构。DOM使用户能够把文档看成一个有结构的信息树,而不是简单的文本流。

在DOM接口规范中,共有Document、Node、NodeList和NamedNodeMap四个基本接口。

为了能在VC++平台下使用MSXML解析器,需要导入动态链接库文件,如JHJimport"c:/WINDOWS/system32/msxml6.dll"。DLL文件可根据系统自带的版本进行选择。在操作XML文件前,需要先初始化COM环境,再创建一个文档实例,最后加载XML文件并获取根元素节点。

若要获取节点的所有子节点,可调用节点childNodes的属性,由childNodes返回一个节点链表。调用节点链表的nextNode方法可循环遍历链表中的元素,遍历结束之后,如若要再次进行遍历,可调用节点链表的 reset方法。同样,也可以调用元素的attributes属性来获取元素的属性节点集。

另外,还可根据自身需要,通过调用节点的selectSingleNode来查找和获取目标子节点。调用节点的createElement方法可创建新的子节点,而调用appendChild和文档节点的save方法可进行保存。要获取节点的名称和文本,可调用GetnodeValue和Gettext。

3.2 模块运算顺序排序

上位机提供小模块、大模块和IOBUF三种类型的运算模块,用户可根据需求设置模块与模块间的关系(即一个模块的输出可以作为另一模块的输出,模块可以有多个输入项或输出项)。当用户组织好模块间的关系后,关键的一步是要给每个模块分配对应的优先等级值,因为下位机要根据优先级来确定模块间的运算顺序。

实现优先级分配的思路具体说明如下。

①由于模块间存在父子关系,因此可以根据这种关系来分配优先级(运算顺序)。

②处在同一等级的所有模块,下位机在运算它们中的某一模块时,不依赖于其他同等级的模块的输出,影响的仅有其父模块。

对于一些模块而言,应当首先执行其父模块,而对其他一些模块,执行的顺序无关紧要。因此,算法中约定处在同一等级的所有模块的优先级值是无要求的(一般按从小到大的值分配),但这个优先级必须高于它们的子模块优先级。已经分配出去的值不能再次给其他模块使用。若同级模块之间的优先级需求有冲突,该冲突必须由用户事先表现在模块间的输入、输出关系中,即将同级模块转换为父子模块。一般的简单控制回路如图4所示。

图4 控制回路示意图Fig.4 Schematic diagram of the control loop

图5 模块组织关系图Fig.5 Organizational relationships of the modules

模块运算顺序排序算法如下。

①遍历XML文件中的所有模块,如果模块没有父模块或父模块均已分配了优先级值,则为该模块分配优先级值;否则将模块放到未分配优先级的模块集中。

②遍历未分配优先级的模块集中的每个模块,如果模块的父模块均已分配了优先级值,则为该模块分配优先级值,并从模块集移除。

③如果遍历未分配优先级的模块集一轮结束后,模块集中的模块数量不变,则表明模块间含有反馈回路;如果模块数量为0,则转至步骤⑤。

④找出模块之间存在的环,选择环中的一个模块为其分配优先级值,并且从模块集中移除,最后返回到步骤②。

⑤结束。

3.3 MFC串口通信编程实现

Win32系统对文件的概念进行了扩展,即无论是文件、通信设备、命名管道、邮件槽、磁盘,还是控制台都被看作是文件。采用MFC串口通信函数的主要步骤如下[9]。

① 在MainFrm.cpp中定义全局变量(如HANDLE hCom)。

②打开串口。Windows通信会话以调用CreateFile函数打开串行口开始。通信程序从CreateFile处指定串口设备及相关的操作属性。该函数返回一个句柄,用于后续的通信操作。

③串口的初始化(设置串口参数及进行串口超时设置)。

④ 读写串口API函数ReadFile和WriteFile。在串口打开并初始化设置之后,可以对它进行读写操作。

⑤关闭串口API函数CloseHandle。串口是非共享的资源,所以打开串口后一定要关闭串口。

4 程序运行结果

按图5所示的模块间组织关系,通过上位机软件进行组态,并下载组态给下位机,点击激活模块查看下位机返回的模块实时数据。其中CONST.3、CONST.7和 CONST.8 模块的初始值分别为0.001、-0.5 和2。

首先在上位机软件中添加所需的模块,然后为每个模块添加输入项,最后点击下载组态。如果下位机成功接收到组态数据,则上位机显示“下载组态成功”。在此过程中,程序为模块分配的优先级值为CONST.3=1、CONST.7=2、CONST.8=3、ABS.2=4、ADD.1=5、MULTI.6=6、DIV.5=7、CMPLX.4=8、SQRT.12=9。在点击激活模块后,下位机将所选择模块的实时数据上传至上位机并显示。

5 结束语

本文提出了应用于SUPMAX800D控制系统中的智能I/O卡的开发方案。智能I/O卡能够支持两块不同类型的通道板,并采用ARM9实现和上位机的通信。通道板组态可以从ARM9或DPU中获取,实现了独立的逻辑控制功能,并且ARM9保持和DPU相同的处理方式和工作量。由于XML具有良好的可自由扩展性、自描述性以及数据与显示分离的特点,因此本文采用XML文件作为上位机的底层数据库,使得设计方案具有简单易操作性。测试结果表明,上位机组态软件运行安全、可靠,满足应用的要求。

[1]袁峰,王松亭,彭春文,等.基于SUPMAX800的锅炉DCS自动控制系统[J].仪表技术与传感器,2009(5):56-58.

[2]梁坚,朱强,王锦标.ISaGRAF在SUPMAX500组态软件中的应用[J].工业仪表与自动化装置,2002(6):25-27.

[3]孙正光.新型智能分散控制系统[J].信息与电脑,2011(7):69-70.

[4]陈慧萍,樊嵘嵘.基于PAS-300M DCS平台的监控软件设计与实现[J].计算机工程与设计,2007,28(13):3248-3251.

[5]林立春,林琼麒,张功镀.面向对象的PLC上位机软件平台设计[J].自动化仪表,2007,28(12):15-18.

[6]张煌.新型DCS控制组态及仿真软件的开发[D].济南:山东大学,2009.

[7]崔鹏.基于ARM7的无线温度监控系统的上位机开发[D].武汉:武汉理工大学,2009.

[8]王震江,马宏.XML基础与实践教程[M].北京:清华大学出版社,2011.

[9]李现勇.Visual C++串口通信技术与工程实践[M].北京:人民邮电出版社,2002:56-88.

猜你喜欢
链表组态上位
基于PLC及组态技术的恒温控制系统开发探讨
如何用链表实现一元多项式相加
跟麦咭学编程
要攻城略地关键要有好筹码,这匹水产动保“黑马”如何能迅速上位?
特斯拉 风云之老阿姨上位
基于MTF规则的非阻塞自组织链表
基于PLC和组态的智能电动拧紧系统
基于ZigBee和VC上位机的教室智能监测管理系统
铸造行业三维组态软件的应用
基于PLC和组态的新型回转类测试设备的研制