国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

PMAC運動控制軟件開發(fā)中動態(tài)鏈接庫的加載方法①

2012-09-27 14:26:12鄒麗梅
關(guān)鍵詞:調(diào)用對話框程序

郭 波, 鄒麗梅

(武夷學(xué)院,福建 武夷山 354300)

0 引言

Turbo PMAC Clipper控制器(Turbo PMAC2 Eth-Lite)是美國Delta Tau公司推出的PMAC開放式多軸運動控制器家族的一員.其具備全部Turbo PMAC特征,提供最多32軸獨立閉環(huán)控制[1],主要用于數(shù)控機電產(chǎn)品開發(fā).本文開發(fā)用數(shù)控雙軸實驗臺采用上位機串口連接CLIPPER作為控制端完成信息處理;執(zhí)行機構(gòu)為日本富士伺服驅(qū)動器與電機(200W);機械本體采用X-Y十字滑臺;由伺服電機編碼器形成模擬輸出,速度環(huán)閉環(huán)控制.在Y軸安裝Renishaw RGH41光柵讀數(shù),僅用于測定位置.實驗軟件需要完成實時控制、反饋和顯示等多種控制功能,基本思想是建立一個對話框程序,分區(qū)域成組布置靜態(tài)文本控件、復(fù)選控件及按鈕控件,分別實現(xiàn)反饋位置速度數(shù)據(jù)、標(biāo)識限位原點、微動或增量運動、回零運動及執(zhí)行運動程序各模塊功能.PMAC提供了編程所需的動態(tài)鏈接庫,封裝了驅(qū)動、函數(shù)和對話框等資源,進(jìn)行實驗軟件編程的基礎(chǔ)是正確加載PMAC動態(tài)庫.

1 動態(tài)鏈接庫一般加載方法分析

PComm32 Pro Library是PMAC為在Windows系統(tǒng)下開發(fā)人機界面提供的動態(tài)鏈接庫.動態(tài)鏈接庫的安裝需要軟件PComm32PRO,該通訊驅(qū)動程序為建立PMAC應(yīng)用程序的開發(fā)工具,可設(shè)定和使用多于400個功能函數(shù)[2].PComm32PRO 包括以下5個文件 :(1)PCOMM32.DLL是32位的動態(tài)連接庫;(2)PMACSERVER.EXE是一個服務(wù)器應(yīng)用程序,負(fù)責(zé)傳遞全局變量;(3)PMAC ISA,SER,PCI or USB.SYS是 Windows 98/ME/2000/XP核心驅(qū)動.動態(tài)庫的加載就是圍繞這幾個文件展開.

動態(tài)庫PCOMM32的加載分為隱式調(diào)用與顯式鏈接兩個大類.不論哪類方法,均應(yīng)在正確安裝PComm32PRO軟件后實施,否則在進(jìn)行工程鏈接時將報錯.

1.1 隱式調(diào)用

隱式調(diào)用方法通過導(dǎo)入lib庫中的函數(shù),使工程能直接調(diào)用函數(shù)名,具有操作步驟少,調(diào)用速度快等優(yōu)點,需要開發(fā)技術(shù)人員對庫中函數(shù)有一定的了解,如知道函數(shù)名稱、用途及返回值的類型等.其步驟應(yīng)實施如下:

(1)設(shè)定庫函數(shù)的鏈接路徑:

在新建工程的解決方案資源管理器中右擊工程名,選擇屬性.在彈出的屬性頁窗口選擇鏈接器下的輸入,在附加依賴項右邊填入C:windowssystem32pcomm32.lib.

(2)在工程頭文件全局作用域中把需要的函數(shù)導(dǎo)入,如導(dǎo)入OpenPmacDevice函數(shù)為:extern"C"_declspec(dllimport)BOOL_stdcall OpenPmac-Device(DWORD dwDevice);

(3)可以在需要的時候直接調(diào)用該函數(shù)名并且傳遞參數(shù),如OpenPmacDevice(0).

1.2 顯式鏈接

VC顯式鏈接方式分為兩種:手動加載與頭文件包含.

手動加載占用資源少,加載速度快,函數(shù)隨用隨調(diào),但加載步驟最復(fù)雜.

(1)在工程中,應(yīng)在使用函數(shù)之前加載動態(tài)鏈接庫:1)定義變量HMODULE pcdll;2)加載動態(tài)鏈接庫 pcdll=::LoadLibrary(“Pcomm32.dll”);

(2)函數(shù)調(diào)用以O(shè)penPmacDevice為例:1)在.h的工程頭文件聲明類型OPENPMACDEVICE程序為typedef BOOL(CALLBACK*OPENPMACDEVICE)(DWORD dwDevice);2)在.cpp的工程源文件中定義類型變量OPENPMACDEVICE OpenPmac-Device,3)源文件中使用函數(shù)GetProcAddress來獲取函數(shù)在內(nèi)存中的地址,程序為OpenPmacDevice=OPENPMACDEVICE)GetProcAddress(pcdll,"OpenPmacDevice");4)函數(shù)需要時即可調(diào)用,如OpenPmacDevice(dwDevice);

頭文件包含調(diào)用實質(zhì)上原理和手動加載相同,軟件PComm32PRO在安裝目錄下Include文件夾中將所有的函數(shù)分類聲明,調(diào)用方法很簡單,將該文件夾拷貝至工程的文件路徑下,在工程源文件中聲明#include“Runtime.h”,然后可以調(diào)用 Runtime.h中設(shè)定好的函數(shù)名.頭文件包含的使用看起來很簡單,但實際應(yīng)用中有幾個麻煩.(1)Include文件夾中各種頭文件相互包含交織在一起,難于清理分解;(2)任何文件位置錯誤或不存在均會鏈接報錯.

以上加載的方法均要求開發(fā)者對C++語言開發(fā)有比較深入的基礎(chǔ),且對PMAC動態(tài)庫的函數(shù)有一定了解.

2 動態(tài)庫加載中出現(xiàn)的問題及分析

初學(xué)PMAC開發(fā)應(yīng)用軟件面對龐大的庫函數(shù),往往不知如何才能調(diào)用所需函數(shù).但根據(jù)PComm32PRO軟件所提供的例程myRuntimePmacTestNew發(fā)現(xiàn),該例程將常用的PMAC函數(shù)以手動加載的形式編寫進(jìn)myRuntime文件中,所以首先將這兩個文件myRuntime.h和myRuntime.cpp拷貝至工程目錄下,在工程中添加它們;接著在工程源文件中聲明#include“myRuntime.h”;最后在對話框初始化函數(shù)OnInitDialog()中調(diào)用頭文件的OpenRuntimeLink();即完成了動態(tài)庫加載工作.

在Visual Studio 2008環(huán)境里編譯程序成功,可以調(diào)用PMAC的多數(shù)程序,如OpenPmacDevice()、ClosePmacDevice()、PmacDownload()、PmacSend-Line()、PmacGetResponse().這些常用函數(shù)在許多文獻(xiàn)中均有介紹其參數(shù)使用方法,軟件PComm32PRO的幫助文件更是有所有函數(shù)的全面說明,本文就不再贅述[3,4].

程序編寫雖然鏈接通過,但調(diào)試時,卻出現(xiàn)了一個新的問題.正確調(diào)用PmacSelect()函數(shù)后,應(yīng)當(dāng)出現(xiàn)動態(tài)庫的選擇驅(qū)動器的對話框,但是原開發(fā)程序出現(xiàn)的對話框卻不能與在串口上的Clipper通訊,如圖 1,然而同樣的硬件環(huán)境中,PEWIN32PRO2卻可以通訊,如圖2所示.

圖1 原開發(fā)程序無法檢測到COM1口Clipper

圖2 PEWIN32PRO2可以檢測到COM1口Clipper

分析該對話框是調(diào)用Pcomm32.dll庫內(nèi)資源而形成的,圖2標(biāo)題欄有一個標(biāo)識Pcomm Version:4.2.4.1,而因此判定應(yīng)當(dāng)是 Pcomm32.dll庫的版本過舊,且使用的Clipper為新的Turbo PMAC2型卡,使用舊的驅(qū)動不能通訊說得通.但新版的驅(qū)動屬于收費軟件,代理商也不提供下載,為此只能另想辦法.在查閱資料的過程中,發(fā)現(xiàn)PMAC提供了另一種方法,即是使用PMACSERVER.EXE可以倒出編程需要的函數(shù).因為當(dāng)PEWIN32PRO2啟動時,進(jìn)程中就會調(diào)用 PMACSERVER.EXE,由此判定PMACSERVER.EXE的庫函數(shù)應(yīng)當(dāng)是最新可用的.

3 從PMACSERVER.EXE倒出類實現(xiàn)動態(tài)庫加載

PMACSERVER的軟件參考手冊描述了在VC6.0 的開發(fā)環(huán)境中倒出類的方法[2],Visual Studio 2008的開發(fā)環(huán)境的導(dǎo)出過程又有所不同,本文將以此環(huán)境為例說明步驟.

(1)新建MFC應(yīng)用程序,在向?qū)е懈鶕?jù)軟件需求選擇文檔模板或?qū)υ捒蚰0?,采用默認(rèn)的其他選項,點擊完成生成程序.

(2)在類視圖中添加TypeLib中的MFC類,在打開的類向?qū)е衼碓催x擇文件,位置為C:WINDOWSsystem32PcommServer.exe,將接口 IPmac-Device添加到生成的類,其操作應(yīng)如圖3.點擊完成即可以看到類視圖中增加了一個類CPmacDevice,點擊選中后可以看到有大量成員函數(shù),當(dāng)SelectDevice函數(shù)有三個參數(shù)long hWindow、long*pDeviceNumber、BOOL*pbSuccess 的時候說明添加成功了正確的類,否則應(yīng)是操作錯誤,將引起編譯錯誤,請復(fù)核以上步驟.

圖3 TypeLib中的MFC類向?qū)?/p>

(3)在對話框源程序(Test1Dlg.cpp)中加入#include"CPmacDevice.h".并在該文件增加三個全局變量與一個CPmacDevice類的對象:long testInterface,dwDevice;

(4)在對話框源程序OnInitDialog()函數(shù)下添加以下代碼實現(xiàn)初始化:

(5)其后就可以用類對象的成員函數(shù)形式調(diào)用,如與之前OpenPmacDevice功能相同的函數(shù)為Open(long dwDevice,BOOL*pbSuccess),這些函數(shù)的說明可以通過查閱Pcomm Server軟件參考手冊獲得,其使用方法和其他庫加載方法的調(diào)用函數(shù)不同.如 Open函數(shù)調(diào)用程序為 pmacDevice.Open(dwDevice,&pbSuccess);需要說明的是這些成員函數(shù)大部分沒有返回值,調(diào)用是否成功存儲在pb-Success這個參數(shù)中,可以通過訪問該參數(shù)進(jìn)行下一步判定.

(6)接著上述第4條的位置輸入以下代碼,即可完成驅(qū)動器選擇對話框的調(diào)用.調(diào)用編譯成功后運行可見圖4與圖5的對話框.

圖4 程序與Clipper通訊成功

圖5 PMAC啟動成功消息

4 結(jié)束語

PMAC運動控制器功能強大,用途廣泛,但因為其技術(shù)較新,供應(yīng)商支持力度不夠,使開發(fā)技術(shù)員不得不面對各種各樣難以解決的問題.作者在控制軟件開發(fā)的經(jīng)驗總結(jié)起來有兩點:(1)PMAC實現(xiàn)其控制有很多種方法,遇上困難可以考慮用其他方法繞開它;(2)美國DELTA TAU公司提供了大量軟硬件文檔及例程,這些資料將可能是解決問題的唯一途徑.本文通過總結(jié)開發(fā)經(jīng)驗,提出PComm32 Pro Library動態(tài)庫加載的一個新方案,避開了驅(qū)動版本過低造成的通訊故障,希望此方法對同行有所幫助.

[1]DELTA TAU Data System,Inc.Turbo PMAC/PMAC2 SOFTWARE REFERENCE MANUAL[M].January 5,2010.

[2]DELTA TAU Data System,Inc.Pcomm Server Pro2 Library SOFTWARE REFERENCE MANUAL[M].June 8,2007.

[3]盧旭.基于PMAC的伺服控制系統(tǒng)的開發(fā)[J].艦船電子對抗.2009,02:112 -114,120.

[4]竇偉,趙新華,李振華.基于VC++與PMAC的機器人控制軟件的開發(fā)[J].天津理工大學(xué)學(xué)報.2010,03:58-61.

猜你喜歡
調(diào)用對話框程序
正常恢復(fù)虛擬機
核電項目物項調(diào)用管理的應(yīng)用研究
試論我國未決羈押程序的立法完善
Bootlace Worms’Secret etc.
LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
利用RFC技術(shù)實現(xiàn)SAP系統(tǒng)接口通信
麟游县| 霍山县| 昌图县| 呼图壁县| 浪卡子县| 丹阳市| 岳池县| 永嘉县| 巫溪县| 花莲市| 滦南县| 天镇县| 陵川县| 海门市| 酉阳| 安乡县| 嘉祥县| 长春市| 塔城市| 峨眉山市| 井研县| 饶河县| 永德县| 武汉市| 静乐县| 西盟| 沂源县| 斗六市| 金溪县| 福贡县| 朝阳县| 云和县| 竹溪县| 雅安市| 庆城县| 高陵县| 高碑店市| 乳源| 大渡口区| 漳浦县| 澎湖县|