如何在工业过程中控制领域中通信?
如何在工业过程中控制领域中通信?
工业过程控制领域中
关键词: 工业过程控制领域中
本文进行探讨的通信方式主要有OPC,DDE,TCP/IP,UDP/IP,串口通信和板卡类的同步通信等等,这些通信方式在自动化领域的应用非常的广泛,本文系统地总结了这些通信方式并且对之进行详细地介绍.
Abstract:This thesis makes a deeply research into the communications in DAS of Real-Time Database. DAS plays an important role in Plant Intelligence and has tremendous influence upon the automation projects. The communications discussed in this thesis are widely used in the automation field, including OPC,DDE,TCP/IP,UDP/IP,Serial communication,synchronized communication in board card and so on. This thesis systematically summarizes those communications in detail.
关键词:实时数据库,数据采集,通信,OPC,DDE,TCP/IP
Key words:Real-Time Database,Data Acquisition System,Communication,OPC,DDE,TCP/IP
1,引言
在工业过程控制领域中,随着自动化程度和系统集成程度的提高,实时数据库已经成为企业信息化建设的基础.实时数据库系统利用标准的软,硬件接口技术,快速, 高效地从生产线控制系统中直接采集到第一手现场实时数据,并且利用先进的实时数据库技术完成海量数据的高效压缩和安全存储,为管理层提供各种在线(如产量,温度,流量)或离线(配方,质量分析,实验数据)的过程数据.从而为消除信息孤岛,实现资源共享以及MES分布式的应用建立基础数据库平台.
目前在市场上主流的实时数据库产品有:美国的OSI公司的Plant Information System,简称PI;美国AspenTech公司的Infoplus2l系统;美国Honeywell公司的Uniformance (PHD)系统;英国Wonderware公司的Industrial SQL Server;90年代初期,国内也相继出现了一些实时数据库产品,如中国国家电力公司自动化研究院的NSIS系统;中国大庆金桥信息技术工程有限公司的 ConRTDB系统;中国北京三维天地计算技术开发有限公司开发的Superlnfo系统;中国北京和利时系统工程股份有限公司的RealMIS系统等.
数据采集系统(Data Acquisition System简称DAS)在实时数据库系统中发挥着重要的作用,直接关系实时信息系统工程的成功与失败,而且通信方式的多样化可以广泛支持实时数据库系统的应用,便于信息系统集成,本文对于各种在实时数据库系统中应用到的通信方式进行了研究和分析.
2,实时数据库数据采集系统的发展现状
实时数据采集是指为生产现场的工艺数据与实时数据库之间建接口,数据采集系统负责完成实时数据库与各种I/O设备或者第三方软件进行数据交换.一方面,它把从I/O设备采集到的实时过程数据发送给实时数据库,另一方面,从实时数据库发出的下置数据发送给I/O设备.I/O设备包括DCS,可编程控制器(PLC),智能模块,板卡,智能仪表,控制器,变频器,采用DDE或OPC标准的设备等等.实时数据库支持的I/O设备种类越多,就可以为用户提供更加广泛的应用范围.
由于国内流程工业企业的现场情况都比较复杂,从工程上讲,实时数据采集是生产实时信息系统成败的关键.可以将其归纳为以下几种情况:
DCS系统具有厂家提供的上位机通信接口.目前DCS系统大部分是开放的,并大都能提供计算机网络通信接口,目前这些接口多数已标准化,即提供OPC和DDE方式的数据通讯接口,实时数据采集的任务就是按DCS厂商提供的编程接口或这些标准接口编程,将数据从DCS的数据库取出并经接口软件的包装发送到实时数据库系统.
使用常规仪表的装置应该安装某种数据采集器,并在信号集中的现场安装联网的前置数采通信机,该前置机将数据采集后集中送往实时数据库.由于DCS系统越来越多,使用常规仪表的装置越来越少,因此只用于数据采集的数据采集器不多,以使用现场总线的数据采集器为首选.
石化企业有相对独立的局部数据采集系统,如罐区储运系统,只要是开放的就可同DCS一样作接口.
从广义上讲,数据来源还有可能是基于TCP/IP通讯协议的数据设备,自定义格式的数据文件,其它数据库,手工录入的数据,需要无线通讯遥远厂区的数据,需要通过电话线传输的分散的数据点,这些方式往往无法进行统一处理,需要给实时数据库系统提供通用的接口程序框架,在此基础上通过二次开发的方法实现各自数据获取业务,形成接口程序,从而按照实时数据库系统的规则采集数据.另外,对其它一些软件系统的数据采集也可采用XML方式.
3,实时数据库数据采集系统的数据通信方式
根据计算机与I/O设备之间通信机制的不同,实时数据库数据采集系统主要有两种工作方式:同步方式与异步方式.
异步方式适用以下一类I/O设备:这类I/O设备一般可以独立运行,与监控计算机之间通过串口,网络或MODEM连接.与监控计算机之间通过明确的消息传送(文本或二进制消息)完成数据交换.数据交换过程为异步方式.
同步方式适用以下一类I/O设备:这类I/O设备或者依赖PC运行(如:插在PC插槽内),或者独立运行.但与监控计算机之间主要通过直接访问方式进行数据交换,具体形式包括:寄存器直接访问(如:板卡),API函数调用,ActiveX控件访问等.数据交换过程为同步方式.
基于以上两种工作方式,实时数据库系统中的主要通信方式可以分为:
与第三软件的通信方式,有OLE(包括OPC),DDE,ODBC等标准.
TCP/IP网络通信方式.
串口通信,适用于RS232/422/485等方式.
板卡类同步通信,有寄存器直接访问,API调用等方式.
MODEM通信,适用于用MODEM拨号的通信方式.
GPRS通信方式.
3.1 OPC技术
OPC(OLE for process control)规范是OPC基金组织倡导的,工业控制和生产自动化领域中使用的硬件和软件的接口标准.OPC规范包括以下几个部分: OPC数据存取(Data Access)规范,OPC报警与事件(Alarm and Event)规范,OPC历史数据存取(Historical Data Access)规范,OPC安全(Security)规范,OPC批处理(Batch)规范,OPC服务器数据交换(Data exchange)规范,OPC XML规范.
OPC 规范定义了两套接口标准,包括自动化接口标准(Automation Interface Standard)和自定义接口标准(Custom Interface Standard).自动化接口是为了向VB之类的脚本语言编写的客户程序提供服务,而自定义接口适用于C和C++应用程序,它比自动化接口更高效,功能更强大.VB应用程序和C++应用程序与OPC服务器连接的示意图如图1所示
图1 典型OPC体系结构图
OPC DA 服务器由三个对象组成:
服务器对象(Server)
组对象(Group)
项对象(Item)
图2示意了它们之间的关系:
图2 OPC服务器,组,和项之间的关系图
OPC规范中对此的解释是:
服务器对象:组对象的包容器,包含服务器相关信息.一个服务器内可以包含一个或多个组对象.
组对象:项对象的包容器,包含组的相关信息.同时,组对象给OPC客户程序提供了一种数据的组织方式.一个组内可以包含一个或多个项对象.
项对象:代表了在服务器内和数据源的一个连接.OPC客户程序无法通过接口直接和项对象进行通信,而只能通过组来访问组内的项对象.
OPC DA规范所规定的OPC DA2.0接口如图3所示:
图3 OPC DA2.0接口示意图(其中标记有[ ]的接口为可选择接口)
OPC Server对象必须实现的接口有:
IOPCCommon:用于设置和查询LocalID,LocalID主要用于保证组件的多语言版本(本地化问题)).
IOPCServer:OPC Server对象的主要接口,必须实现.
IConnectionPointContainer:提供给OPC客户端对于在OPCServer上连接点的访问.
IOPCItemProperties:用于获取数据项的参数特性.
OPC Group对象必须实现的接口有:
IOPCItemMgt:允许OPC客户端向组中添加项,删除项或改变项的属性.
IOPCGroupStateMgt:私有组状态管理接口,允许OPC客户端管理组的状态,包括改变组的数据更新周期和活动状态.
IOPCSyncIO:允许客户端项服务端执行同步读写操作.
IOPCASyncIO2:允许客户端项服务端执行异步读写操作.
IConnectionPointContainer:提供给OPC客户端对于在OPCServer上连接点的访问.
3.1.1 OPC Client的C++实现
OPC客户程序与一般的COM客户程序没有多大的区别,只是在创建OPC服务器后,按照一定的步骤调用相关的OPC接口函数实现与OPC服务器数据的连接,对于需要异步数据交换的客户程序,还要实现连接点的出接口,并调用相关的函数建立连接.
OPC客户端程序实现的步骤:
初始化
创建COM服务器
添加Group
添加Item
对数据项进行同步或者异步读写
删除Items,Group,关闭服务器
COM库释放资源
图4 OPC服务器和客户端交互顺序图
3.1.2 OPC Server的C++实现
OPC数据服务器主要由服务器对象,组对象,项对象,数据存储区和I/O设备驱动程序组成.由于OPC数据服务器既要对底层硬件进行读写操作,又要通过OPC接口与客户程序进行交互,所以采用多线程模型,以保证数据存取的效率.为避免不同线程同时对数据区中的数据进行操作,还需要考虑对临界区的互斥控制.
由于OPC技术是以微软的COM技术为基础,同时需要直接与底层硬件打交道,所以采用VC实现比较灵活方便.下面给出实现OPC数据服务的主要步骤.
定义OPC数据服务器名称(Prog ID)和类标识(CLSID),实现OPC数据服务器类厂对象.
继承OPC规范中定义的OPCServer类,OPCGroup类和OPCItem类,实现其接口成员函数.虽然OPC规范中定义的接口可分为可选接口和必选接口,但对任何OPC服务器而言,应实现必选接口的成员函数.此外,还可以根据实际情况定义并实现各个继承类的特殊属性和方法.
根据实际现场设备的种类和特性自行开发驱动程序或者调用厂商提供的I/O DLL,实现与现场设备进行数据存取的功能.
3.2 DDE动态数据交换技术
DDE 是英文dynamic data exchange的缩写,即动态数据交换.它最早是随着Windows 3.1由美国微软公司提出的.两个同时运行的程序之间通过DDE方式交换数据时是Client/Server关系.一旦Client和Server建立起了连接关系,则当Server中的数据发生变化后就会马上通知Client.通过DDE方式建立的数据连接通道是双向的,即Client不但能够读取 Server中的数据,而且可以对其进行修改.
Windows操作系统中有一个专门协调DDE通信的程序DDEML(DDE管理库).实际上Client和Server之间的多数会话并不是直达对方的,而是经由DDEML中转.一个程序可以同时是Client和Server.
DDE 的方式有冷连接(cool link),温连接(warm link),热连接(hot link)等3种.在冷连接方式下,当Server中的数据发生变化后不通知Client,但Client可以随时从Server读写数据.在温连接方式下,当Server中的数据发生变化后马上通知Client,Client得到通知后将数据取回.在热连接方式下,当Server中的数据发生变化后马上通知Client.同时将变化后的数据直接送给Client.
DDE Client程序向DDE Server程序请求数据时,它必须首先知道DDE Server程序的名称(即DDE Service名),DDE主题名称(Topic名),还要知道请求哪一个数据项(Item名).DDE Service名应该具有唯一性,否则容易产生混乱.通常DDE Service名就是DDE Server的程序名称,但不绝对,它是由程序设计人员在程序内部设定好的,并不是通过修改程序名称就可以改变的.Topic名和Item名也是由DDE Service在其内部设定好的.所有DDE Server程序的Service名,Topic名都注册在系统中.当一个DDE Client向一个DDE Server请求数据时,DDE Client必须向系统报告DDE Server的Service名和Topic名.只有当Service名,Topic名与DDE Server内部设定的名称一致时,系统才将DDE Client的请求传达给DDE Server.当Service名和Topic名相符时,DDE Server马上判断Item名是否合法.如果请求的Item名是DDE Server中的合法数据项,DDE Server即建立此项连接.建立了连接的数据发生数值改变后,DDE Server会随时通知DDE Client.一个DDE Server可以有多个Topic名,Item名的数量也不受限制.
3.3 TCP/IP网络通信
随着工业以太网的大规模发展, TCP/IP通信在工业自动化领域得到广泛的应用,TCP/IP(Transmission Control Protocol/Internet Protocol)作为应用最广泛的网络协议,是发展至今最成功的通信协议,由于其开放性的特点,成为Internet的基础,该广域网(WAN)把全世界数以百万计的电脑连接在一起.
TCP/IP是一个四层协议,它的结构如图5所示.
图5 TCP/IP族的体系结构
网络层的IP 协议负责在TCP/IP主机之间提供数据报服务,进行数据封装,产生协议头.该协议是TCP与UDP的基础.TCP和UDP的每组数据都通过端系统和每个中间路由器中的IP层在互联网中进行传输,ICMP(Internet Control Message Protocol)作为IP协议的附属协议,用来与其他主机或路由器交换错误报文和其他重要信息,IGMP(Internet组管理协议)是IP协议的另一个附属协议,用来把一个UDP数据报多播或者组播到多个主机.
Windows Sockets 规范为 Microsoft Windows 定义了一个二进制兼容网络编程接口.Windows Sockets 基于美国加州大学伯克利分校开发的Berkeley Software Distribution(BSD,4.3 版)中的UNIX套接字实现.通过使用 Windows Sockets,应用程序能够在任何符合Windows Sockets API的网络上通信.在Win32上,Windows Sockets提供线程安全.
Sockets是一个通信终结点,它是Windows Sockets应用程序用来在网络上发送或接收数据包的对象.Sockets具有类型,与正在运行的进程相关联,并且可以有名称.目前,Sockets一般只与使用网际协议组的同一"通信域"中的其他Sockets交换数据.
可用的套接字类型有以下两种:
流式套接字 stream sockets
流式套接字提供没有记录边界的数据流:可以是双向的字节流(应用程序是全双工:可以通过套接字同时传输和接收).可依赖流传递有序的,不重复的数据("有序 "指数据包按发送顺序送达."不重复"指一个特定的数据包只能获取一次),这能确保收到流消息,而流非常适合处理大量数据.
数据报文套接字datagram sockets
数据报文套接字支持双向数据流,此数据留不能保证按顺序和不重复送达.数据报文也不保证是可靠的;它们可能无法到达目的地.数据报文可能不按顺序到达并且可能会重复,但只要记录的大小没有超过接收端的内部大小限制,就会保持数据中的记录边界.上层负责管理顺序和可靠性.(可靠性在局域网[LAN]上往往很好,但在广域网[WAN]如Internet上却不太好.)数据报文为"无连接"的,也就是不建立显式连接.可将数据报文消息发送到指定的套接字,然后从指定的套接字接收消息.
Microsoft 基础类库(MFC)通过提供两个类来支持使用 Windows Sockets API 进行编程.每一个MFC套接字对象封装一个Windows Sockets对象的句柄.该句柄的数据类型为 SOCKET,SOCKET句柄类似于窗口的HWND.
CAsyncSocket
该类封装Windows Sockets API,CAsyncSocket是为那些了解网络编程并希望能够灵活地对套接字API直接编程,同时还希望方便地使用回调函数以进行网络事件通知的程序员提供的.除了将套接字打包为面向对象的形式以用于C++外,此类提供的唯一附加抽象化是将某些与套接字相关的 Windows 消息转换为回调.
CSocket
此类由CAsyncSocket所派生,它通过MFC CArchive对象提供与套接字一起使用的更高级的抽象化.使用带存档的套接字与使用 MFC 的文件序列化协议非常相似.这使它比CAsyncSocket模型更易于使用.CSocket从CAsyncSocket(它封装Windows Sockets API)继承了许多成员函数;您将必须使用其中一些函数并一般性地了解套接字编程.而CSocket 则管理着必须由您自己使用原始API或CAsyncSocket类来管理的通信的许多方面.最重要的是,CSocket使用Windows消息的后台处理来提供阻塞,这对CArchive的同步操作非常关键.
3.3.1 TCP/IP通信(流式套接字通信)
传输层有两个并列的协议TCP和UDP,TCP(Transmission Control Protocol)是面向连接的,可提供高可靠性服务,在进行通信以前,需要在两个系统之间建立逻辑连接,在每个数据传输的过程中都需要进行应答以保证数据报的完整,虽然TCP使用不可靠的IP服务,但他却提供一种可靠的传输层服务,TCP对应于SOCKET接口中的stream(数据流) sockets.
流式套接字通信的操作顺序,在构造 CSocketFile 对象之前,下面的顺序对 CAsyncSocket 和 CSocket 都是准确的(只有少数几个参数不同).从构造 CSocketFile 对象开始,顺序只适用于 CSocket.下表阐释了在客户端和服务器之间设置通信的操作顺序.
服务器和客户端之间的TCP/IP通信顺序如图6所示:
图6 TCP/IP服务器和客户端通信顺序图
图7介绍组合CSocket对象,CSocketFile对象和CArchive对象以简化通过Windows套接字发送和接收数据.
图7 CArchive,CSocketFile 和 CSocket对象之间的关系
3.3.2 UDP/IP通信(数据报文套接字通信)
UDP(User Datagram Protocol),即用户数据报协议,是面向无连接,不可靠传输,可提供高效率服务,它不能保证数据报能安全无误的到达最终目的地,该协议只负责接收和传送由上层协议传递的消息,它本身不做任何检测,修改与应答,上层协议需要自己处理这些事务,UDP则对应于datagram(数据报)sockets.
数据报文套接字是无连接的,不需要 CAsyncSocket::Connect,Listen 和 Accept 调用(但可有选择地使用 Connect).相反,如果正在使用 CAsyncSocket 类,则数据报文套接字使用 CAsyncSocket::SendTo 和 ReceiveFrom 成员函数.(如果对数据报文套接字使用 Connect,则使用 Send 和 Receive.)因为 CArchive 不适用于数据报文,如果套接字是数据报文,则不要使用带存档的 CSocket.
3.4 串口通信
利用串口实现组网是工控领域常用的简捷有效的方法,现在被广泛运用的通信串口主要有3种,即RS232, RS422和RS485.但RS232,RS485只能代表通讯的物理介质层和链路层,如果要实现数据的双向访问,就必须自己按照智能仪表,模块或者 PLC的通讯协议编写通讯应用程序.在RS232或RS485设备联成的设备网中,如果设备数量超过2台,就必须使用RS485做通讯介质,RS485网的设备间要想互通信息只有通过"主(Master)"设备中转才能实现,这个主设备通常是PC,而这种设备网中只允许存在一个主设备,其余全部是从 (Slave)设备.
3.4.1 串行通信的一般步骤
利用微机串口进行通信的一般步骤如下:
打开串口
在32位Windows中,串口和其他通信设备都被作为文件进行处理,在使用前必须先将其打开.为了保证串口通信数据传输的可靠性,串口打开时一般都设置为非共享模式,串口一旦被打开后,其他的应用程序将无法打开或使用它.
配置串口
在使用串口进行数据通信前必须对其进行配置,串口配置主要包括波特率,数据位数,停止位数,奇偶校验,发送缓冲区大小,接受缓冲区大小等.
超时设置
在串口通信时如果数据传输突然中断,对串口的读写操作可能会进入无限期的等待状态,为避免这种情况发生,必须设置串口读写操作的等待时间,等待时间超过后,串口的读写操作将被主动放弃,这样即使数据传输突然中断程序也不会被挂起或阻塞.
数据读写
串口打开并配置好后即可对其进行读写操作了,对串口的读写操作可采用查询,同步,异步和事件驱动等方式.
3.4.2 VC++编程实现串行通信
在VC ++编程实现串口通信有三种方法,第一,利用OCX控件MSCOMM实现串口通信编程;第二,利用API函数实现串口通信的编程,需要编程人员对串口的硬件工作原理有较深入的了解;第三,利用其他串口驱动函数,例如"研华"提供的串口驱动函数实现串口通信的编程,这种方式在编程中必须包含厂家提供的头文件 DRIVER.H,在程序连接时必须包含其提供的库函数adscomm.lib,一般需和其生产的串口接口板配合使用.这里重点介绍利用API函数实现串口通信.
打开串口
Win32中用于打开串口的API函数为CreateFile,其原型为:
CreateFile(szDevice,fdwAccess,fdwShareMode,lpsa,fdwCreate,
fdwAttrsAndFlags,hTemplateFile);
其中各参数的意义如下:
szDevice将要打开的串口逻辑名,如COM1或COM2,
fdwAccess指定串口访问的类型,可以是读取,写入或两者并列,
fdwShareMode指定共享属性,由于串口不能共享,该参数必须置为0,
lpsa引用安全性属性结构,缺省值为NULL,
fdwCreate创建标志,对串口操作该参数必须置为OPEN_EXISTING,
fdwAttrsAndHags属性描述,用于指定该串口是否可进行异步操作,
hTemplateFile指向模板文件的句柄,对串口而言该参数必须置为NULL,
以下程序用于以同步读写方式打开串口COM1:
HANDLE hCom;
DWORD dwError;
hCom = CreateFile( "COM1",GENERIC_READ|GENERIC_WRITE,
0,NULL,OPEN-EXISTING,0,NULL);
if (hCom == (HANDLE) OxFFFFFFF F)
{
dwError=&tLastError( );
MessageBox( dwError);
}
配置串口
配置串口是通过改变设备控制块DCB( Device Control Block)的成员变量值来实现的,接收缓冲区和发送缓冲区的大小可通过Setupcomm函数来设置.
以下程序将串口设置为:波特率:9600,数据位数:7位,停止位:2位,偶校验,接收缓冲区和发送缓冲区大小均为1024个字节,最后用Purge Co m m函数终止所有的后台读写操作并清空接收缓冲区和发送缓冲区.
DCB dcb;
dcb. BaudRate = 9600;
dcb. ByteSize = 7;
dcb. Parity = EVENPARITY;
dcb. StopBits = 2; //TWO STOP BIT;
dcb.fBinary=TRUE;
deb .fParity=TRUE;
if ( ! SetCommState( hCom , &dcb) )
MessageBox ( "串口设置(SetCommState)出错!!!" );
SetupComm ( hCom,1024 ,1024);
PurgeComm (hCom,PURGE_TXABORT|PURGE_RXABORT|
PURGE_TXCLEAR|PURGE_RXCLEAR);
超时设置
超时设置是通过改变COMMTIMEOUTS结构的成员变量值来实现的,以下程序将串口读操作的超时设定为10毫秒.
COMMTIMEOUTS to;
memset(&to,0,sizeof(to));
to.ReadIntervalTimeout = 10;
SetCommTimeouts( hCom,&to);
配置串口和超时设置也可以用BuildDCBAndTimeouts函数一次完成,该函数原型如下:
BuildDCBAndTimeouts( lpszString,&dcb,&timeouts)
数据读写
对串口进行读取,写入所用的函数和对文件进行读取,写入所用的函数相同,具体实现可采用查询,同步,异步或事件驱动等方法,对串口进行读取,写入所用的函数原型如下:
ReadFile( hCom, inBuff, nBytes, &nBytesRead, &overlapped);
WriteFile( hCom, outBuff, nToWrite, &actualWrite, &overlapped);
关闭串口
利用API函数实现串口通信时关闭串口非常简单,只需使用CreateFile函数返回的句柄作为参数调用closeHandle即可:
CloseHandle( hCom);
3.5 板卡类同步通信
板卡类同步通信主要分为寄存器直接访问,API调用两种方式,下面就这两种方式进行展开和分析.
3.5.1 寄存器直接访问
板卡使用寄存器直接访问来进行通信的话,首先我们在板卡说明书上可以找到I/O地址分配,通过地址开关的设置我们可以选择板卡的I/O基地址.
例如某开关量输入板卡共占用主机连续4个I/O端口,通过拨动卡上的地址开关DIP而设定,各位代表的意义如图8所示:
A9 ~ A2 A9 ~ A2
(a) 300H (b) 218H
图8 I/O基地址选择举例
板卡各I/O地址表示功能如表1,基地址+0里面存储1~8通道数据,基地址+1里面存储9~16通道数据,基地址+2里面存储17~24通道数据,基地址+3里面存储25~32通道数据,在每个字节中的八位分别代表32路开关量的输入:
端口操作地址
操作命令
功 能
BASE+0
IOR
读输入1~8通道数据
BASE+1
IOR
读输入9~16通道数据
BASE+2
IOR
读输入17~24通道数据
BASE+3
IOR
读输入25~32通道数据
表1 端口地址与功能表
汇编语言编程实现读取32路开关量输入的例子,C语言依此类推即可得:
MOV DX,300H
IN AL,DX ;读输入1~8通道数据
MOV SWIT_V1, AL
MOV DX,301H
IN AL,DX ;读输入9~16通道数据
MOV SWIT_V2, AL
MOV DX,302H
IN AL,DX ;读输入17~24通道数据
MOV SWIT_V3, AL
MOV DX,303H
IN AL,DX ;读输入25~32通道数据
MOV SWIT_V4, AL
3.4.1 API调用
对于API调用实现与板卡通信,关键在于熟悉厂家提供的动态连接库DLL的导出函数,其次在项目设置中加入lib库的链接,然后将lib库和dll拷入项目所在目录.
这里以科日新KPCI-815为例介绍对API编程实现与板卡的通信,KPCI-815是模拟量输入(单端32路/ 双端16路)开关量输出(8路)接口卡.
库函数说明如下:
【打开设备】
BOOL WINAPI OpenDevice(ULONG iIndex // 指定设备序号,0对应第一个设备, iIndex的定义以下函数同)
注:关于设备序号,兼容机靠近CPU的PCI插槽为小序号,工控机相反.
返回值:
0:失败
1:成功
【关闭设备】
VOID WINAPI CloseDevice( ULONG iIndex )
【向I/O端口写入一个字节】
VOID WINAPI WriteByte(ULONG iIndex,
UCHAR iAddr, // 指定I/O端口的偏移地址
UCHAR iByte // 待写入的字节数据)
【读取转换数据】
ULONG WINAPI ReadAd ( ULONG iIndex,
UCHAR adch, //模拟量输入通道号,
UCHAR flbmode,// 滤波方式,
UCHAR flbnum, //滤波次数,
ULONG delay //送通道号到启动AD转换之间延时)
返回值:两字节A/D转换数据
各个厂家提供的API函数差别很大,所以关键在于熟悉API,在自己程序实现CPP文件的头部包含这些API,在项目中加入lib库的链接,然后在自己的程序中按照API的功能区调用即可,比较方便和简单.
4,结论
本文对于实时数据库数据采集系统的通信方式进行了研究和探讨,随着科技的发展,实时数据库通信方式将会变得更加丰富,本文抛砖引玉希望能对大家的实时数据库研究和应用有所帮助.
参考文献
J Huang, J A Stankovic,An Integrated Real-Time Data Management Architecture for Industrial Control Systems[R],TR93-08,1993;
Visual Studio .NET 2003 MSDN,Microsoft Corporation 1987-2002;
王成光,苏宏业,褚健.流程工业实时数据库数据管理模型设计,浙江大学学报(工学版);
陈细军,谭民,VC编程中的串口通信技术,计算机应用(2001年9月);
马国华,监控组态软件及其应用,清华大学出版社;
科日新K842,KPCI-815板卡说明书.
作者简介:
齐莹素,北京市人民警察学院,公安科技教研室,老师,长期从事计算机软件,计算机监控系统的研究.电子邮件:qys000111@sina.com
ON
ON
12345678
12345678
释放接口指针,删除Items, Group,关闭OPC服务器,本次处理结束
连接I/O设备或者第三方软件,处理操作请求,返回操作结果
调IOPCSyncIO->Read( ) / Write( )读写项的值
返回该OPCGroup对象的IOPCSyncIO接口指针
在OPCGroup对象中记录下相应的项.
调IOPCGroupStateMgt->QueryInterface( )获得IOPCSyncIO接口指针
调用IOPCGroupStateMgt->AddItems( )往该组中加Item
构建一个OPCGroup对象,得到IOPCGroupStateMgt接口指针
调用IOPCServer->AddGroup( )
构建一个OPC Server对象,返回IOPCServer接口指针
调用CoCreateInstanceEx( )
COPCClient
OPC Client :
: COPCServer
OPC DA Server