Win7系統LabVIEW使用WinIO3.0操作工業主板GPIO引腳輸出控制LED燈亮與滅
-
前言
GPIO(英語:General-purpose input/output),通用型之輸入輸出的簡稱,功能類似8051的P0—P3,其接腳可以供使用者由程控自由使用,PIN腳依現實考量可作為通用輸入(GPI)或通用輸出(GPO)或通用輸入與輸出(GPIO),如當clk generator, chip select等。既然一個引腳可以用于輸入、輸出或其他特殊功能,那么一定有寄存器用來選擇這些功能。對于輸入,一定可以通過讀取某個寄存器來確定引腳電位的高低;對于輸出,一定可以通過寫入某個寄存器來讓這個引腳輸出高電位或者低電位;對于其他特殊功能,則有另外的寄存器來控制它們。關于GPIO的更多介紹,大家可以度娘查一下,這里不做過多介紹了。
WinIO動態庫允許在32位的Windows應用程序中直接對I/O端口和物理內存進行存取操作,通過使用一種內核模式的設備驅動器和其它幾種底層編程技巧,它繞過了Windows系統的保護機制。而64位Windows系統中僅有WinIO3.0測試版的數字簽名,需要開啟測試模式才能正常使用。
今天,我就教大家如何使用WinIO編程來控制GPIO的輸入輸出,并通過控制高/低電平的輸出來控制LED的亮與滅。這在工業自動化應用中是很有用的,可以用來作為信號I/O,因為很多工業PC主板上一般都有GPIO插針引腳,如果利用上了,既可以節省硬件成本,又可以在軟件編程時統一IO接口函數,節省了使用其他IO卡帶來的二次開發所花的時間和精力。
-
工具/原料
硬件:排線、插針、LED燈珠(有條件的可以將插針和LED燈珠焊接在萬能板上,方便觀察控制),還有帶GPIO插針的工業PC主板(系統Win7 32位或64位均可)。
軟件:LabVIEW編程環境、WinIO3.0庫函數(共8個函數,其中我們用到的函數只要4個即可)
bool _stdcallInitializeWinIo();
本函數初始化WioIO函數庫。
必須在調用所有其它功能函數之前調用本函數。
如果函數調用成功,返回值為非零值。否則返回值為0。
bool _stdcall GetPortVal(WORDwPortAddr, PDWORD pdwPortVal, BYTE bSize);
使用此函數從一個輸入或輸出端口讀取一個字節/字/雙字數據。
參數:
wPortAddr– 輸入輸出端口地址
pdwPortVal– 指向雙字變量的指針,接收從端口得到的數據。
bSize– 需要讀的字節數,可以是1 (BYTE), 2 (WORD) or 4 (DWORD).
如果調用成功,則返回非零值。否則函數返回值為零。
bool _stdcallSetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);
使用本函數將一個字節/字/雙字的數據寫入輸入或輸出接口。
參數:
wPortAddr– 輸入輸出口地址
dwPortVal– 要寫入口的數據
bSize– 要寫的數據個數,可以是 1 (BYTE), 2 (WORD) or 4 (DWORD).
如果調用成功,則返回非零值。否則函數返回值為零。
void _stdcallShutdownWinIo();
本函數在內存中清除WinIO庫,本函數必須在中止應用函數之前或者不再需要WinIO庫時調用
-
操作/步驟
通過使用上述4個函數功能,我將整個調用做成了一個界面,并打包成exe發布。
我將已經測試過的幾款主板GPIO參數填寫進了內部程序框圖,并做了一個下拉列表選項框供選擇測試,當然,我們也可以通過選擇【通用主板】,并配置程序目錄下的GPIO.ini文件參數來調用自定義的GPIO地址和端口。
操作:參數都配置好(或者選好主板后),這里以M61主板為例。
1、輸出:直接點輸出的Pin即可(如果Pin腳定義為僅輸入,那么點擊無效;僅可控制輸出Pin腳)。
2、輸入:由以上引腳說明可知默認輸入是高電平的(燈亮),所以要給輸入的話就得給低電平(燈滅)。我們將Pin9(VDD)接入到相應的輸入腳(只讀腳),即可有變化(接入時燈滅)。
詳細測試效果見視頻:
https://v.youku.com/v_show/id_XNDA5NTgwNTU2NA==.html
綠色版,無需安裝直接解壓打開使用。
GPIO測試工具V3.0下載地址請關注微信公眾號: