關 閉

        新聞中心

        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>



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 行唐县| 安顺市| 吉木萨尔县| 吉安县| 获嘉县| 青海省| 沙洋县| 安康市| 巴林右旗| 平果县| 河源市| 得荣县| 永城市| 沁阳市| 上犹县| 呼和浩特市| 乐安县| 松阳县| 安溪县| 汾西县| 合水县| 昌宁县| 衢州市| 平度市| 娱乐| 大新县| 卢龙县| 水富县| 新余市| 千阳县| 曲靖市| 大城县| 石棉县| 阳泉市| 岳阳市| 乌鲁木齐县| 宿州市| 衡阳市| 达孜县| 修文县| 铜川市|