COM组件技术在现场总线控制系统组态软件中的应用

工控自动化 时间:2011-07-29来源:网络

HRESULT SendData[in]BYTE SendBuf[256]);

[id(3),helpstring(启动多线程)]

HRESULT SendFinish ([in]BOOL bFinish);

[id(4),helpstring(此函数返回值表示数据是否已向下位机发送完毕,同时可显示哪些模块未被配置,通常在此函数前先用FinishQuery([out]BOOL*bFinish)查询发送是否完毕)]

HRESULT ReceiveResult([out]BOOL *bSendFinish);

[id(5)],helpstring(此函数返回值表示数据是否已向下位机发送完毕,“真”表示发送完毕)]

HRESULT FinishQuery([out]BOOL *bFinish);

[id(6),helpstring(网络检查,用来在发送数据前检测是否有该节点存在)]

HRESULT NetCheck[in]BYTE sour,[in]BYTE des,[in]BYTE type,[out]BOOL *flag);

[id(7),helpstring(读取模块的测量值)]

HRESULT GetPV([iv]BYTE bDesNode,[out]float value[256]);

}

适配器初始化函数:

#include conio.h>

#include winioctl.h

//包含其它头文件

……

STDMETHODIMP CNCardWork::NcardInit(BYTE bSrcNode,BYTE bIntrAdd,BYTE bRate,long bSegmentAdd,BOOL *flag)

{

NcardCtrl cardctrl; //NcardCtrl类的函数调用VxD函数

exbSrcNode=bSrcNode; //给上位机节点赋值

exbRate=bRate; //下位机与适配器的通信波特率

BOOL transfersign; //初始化是否成功标志

DWORD dwSegmentaddress=bSegmentAdd;//适配器段地址

HANDLE hDevice=NULL; //指向线性指针对句柄

LpBaseAddress=(PBYTE)cardctrl.MapLinearAddress(dwSegmentaddress,0x400,hDevice);

//调用VxD函数,获得指向ISA总线物理地址的线性地址指针

cardctrl,UnMapLinearAddress(lpBaseAddress,hDevice);

//关闭VxD

//调用适配器初始化函数

_outp(0x310,0x01); //打开邮箱锁

lpBaseAddress[0x3F0]=bSrcNodeNumber;//上位机节点号

lpBaseAddress[0x3F1]=bRate; //波特率

lpBaseAddress[0x3F8]=0xC6; //适配器初始化命令字

DrvDelay(20,false); //延时20ms

………… //初始化后其它操作

_outp(0x310,00); //关闭邮箱锁

return S_OK;

}

4 虚拟设备驱动程序

VxD是虚拟设备驱动程序(Virtual Device Driver)的缩写,中间的x表示某一设备。它能够无限制地访问所有硬件设备、自由地检测操作系统的数据结构(如描述符和页表)以及访问任何内存位置。

本文中,VxD将ISA总线对应的物理地址转换成段线性地址,供应用程序使用。VxD的开发工具是VtoolsD,转换时用的函数为MapPhysToLinear。以下是部分程序代码:

//定义结构体

typedef struct _MapDevRequest

{

PVOID mdr_PhysicalAddress;DWORD mdr_SizeInBytes;

PVOID mdr_LinearAddress;WORD mdr_Status;

}MAPDEVREQUEST,*PMAPDEVREQUEST;

#includevtoolscp.h>

1 2 3

关键词: 现场总线 组态软件 COM VxD

COM(Component Object Model)组件技术是构造二进制兼容软件的规范 通过它可以建立能够相互传输数据的组件 其服务器-客户机结构非常适合工控软件应用程序的开发。由于工控软件不仅包括PC机上的HMI(人-机界面)程序 还包括与各种基于ISA或PCI总线的数据采集卡进行数据交换的程序 这部分程序对开人员的硬件水平要求较高 而且开发难度较大 与HMI程序是相互独立的 所以可以把工

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版