<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設(shè)計應用 > COM組件技術(shù)在現(xiàn)場總線控制系統(tǒng)組態(tài)軟件中的應用

          COM組件技術(shù)在現(xiàn)場總線控制系統(tǒng)組態(tài)軟件中的應用

          作者: 時間:2011-07-29 來源:網(wǎng)絡(luò) 收藏

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

          [id(3),helpstring(啟動多線程)]

          HRESULT SendFinish ([in]BOOL bFinish);

          [id(4),helpstring(此函數(shù)返回值表示數(shù)據(jù)是否已向下位機發(fā)送完畢,同時可顯示哪些模塊未被配置,通常在此函數(shù)前先用FinishQuery([out]BOOL*bFinish)查詢發(fā)送是否完畢)]

          HRESULT ReceiveResult([out]BOOL *bSendFinish);

          [id(5)],helpstring(此函數(shù)返回值表示數(shù)據(jù)是否已向下位機發(fā)送完畢,“真”表示發(fā)送完畢)]

          HRESULT FinishQuery([out]BOOL *bFinish);

          [id(6),helpstring(網(wǎng)絡(luò)檢查,用來在發(fā)送數(shù)據(jù)前檢測是否有該節(jié)點存在)]

          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]);

          }

          適配器初始化函數(shù):

          #include conio.h>

          #include winioctl.h

          //包含其它頭文件

          ……

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

          {

          NcardCtrl cardctrl; //NcardCtrl類的函數(shù)調(diào)用VxD函數(shù)

          exbSrcNode=bSrcNode; //給上位機節(jié)點賦值

          exbRate=bRate; //下位機與適配器的通信波特率

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

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

          HANDLE hDevice=NULL; //指向線性指針對句柄

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

          //調(diào)用VxD函數(shù),獲得指向ISA總線物理地址的線性地址指針

          cardctrl,UnMapLinearAddress(lpBaseAddress,hDevice);

          //關(guān)閉VxD

          //調(diào)用適配器初始化函數(shù)

          _outp(0x310,0x01); //打開郵箱鎖

          lpBaseAddress[0x3F0]=bSrcNodeNumber;//上位機節(jié)點號

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

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

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

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

          _outp(0x310,00); //關(guān)閉郵箱鎖

          return S_OK;

          }

          4 虛擬設(shè)備驅(qū)動程序

          VxD是虛擬設(shè)備驅(qū)動程序(Virtual Device Driver)的縮寫,中間的x表示某一設(shè)備。它能夠無限制地訪問所有硬件設(shè)備、自由地檢測操作系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)(如描述符和頁表)以及訪問任何內(nèi)存位置。

          本文中,VxD將ISA總線對應的物理地址轉(zhuǎn)換成段線性地址,供應用程序使用。VxD的開發(fā)工具是VtoolsD,轉(zhuǎn)換時用的函數(shù)為MapPhysToLinear。以下是部分程序代碼:

          //定義結(jié)構(gòu)體

          typedef struct _MapDevRequest

          {

          PVOID mdr_PhysicalAddress;DWORD mdr_SizeInBytes;

          PVOID mdr_LinearAddress;WORD mdr_Status;

          }MAPDEVREQUEST,*PMAPDEVREQUEST;

          #includevtoolscp.h>



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();