关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > COM组件技术在现场总线控制系统组态软件中的应用

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>



评论


相关推荐

技术专区

关闭