發表時間: 2022-02-27 16:23:51
作者: 北京科瑞興業科技有限公司
瀏覽:
下載資料中提供了兩個分別在VB和VC下開發的示例程序,給出了板卡的相關參數的設置過程和數據處理方法及板卡的工作過程和順序,包括卡的打開與關閉。用戶可以參照相應VB或VC程序段根據實際需要利用函數庫中提供的函數設計自己的軟件,初次使用動態鏈接庫的用戶,還可以在程序中找到動態鏈接庫的調用方法。為方便用戶分析示例程序以工程的形式提供了所有的資源和代碼。
一. D/I,D/O過程流程圖
圖1 DI/DO 過程流程
二. 編程示例:
1. VB 編程示例請參照“VB”下的程序。
2. VC 編程示例請參照“VC”下的程序。
3. 測試程序說明:
步驟1:運行KPCI847H.EXE程序進行測試,界面如下圖所示。
步驟2:如果計算機中隻有1塊KPCI847H卡,設備號為“0”,無須修改。
步驟3:按“打開設備”按鈕,若打開設備成功,“輸入測試”、“輸出測試”、“關閉設備”按鈕變亮,否則提示錯誤信息。
步驟4:按“輸入測試”按鈕,可完成16路開關量輸入測試。
步驟5:按“輸出測試”按鈕,可完成16路開關量輸出測試。
步驟6:測試完成後,按“關閉設備”按鈕,再按“退出”按鈕,即可退出測試程序。
三. KPCI800.dll 庫函數說明
以下介紹 KPCI800.dll 所包含的全部函數應用方法,用戶可以具體根據所選用的板卡使用 其中的一些函數。函數中的參數設置要參考具體的板卡說明來設置。
1、 打開指定設備函數(適用 KPCI840、843、844、845、846、847、848)
Visual C++ & C++Builder:
BOOL WINAPI OpenmDevice(ULONG iIndex,ULONG boardtype)
Visual Basic:
Declare Function OpenDevice Lib "kpci800.dll" (ByVal iIndex As Long,ByVal boardtype) As Boolean
功能: 該函數負責打開指定板卡型號的設備對象
參數: iIndex 指定KPCI板卡的設備序號,0對應第一個設備
boardtype 指定KPCI板卡的型號,這裏隻能是840、843、844、845、846、847、848。
返回值:“1”表示成功,“0”代表失敗。
注意:設備序號 兼容機是靠近CPU的PCI插槽號為小序號(從0開始),
工控機則相反,遠離CPU的PCI插槽號為小序號(從0開始)。
注意:此函數是專門為帶有開關量輸出板卡編製的函數,當用戶需要改變開關量輸出的某一個通道的狀態,而不影響其他通道時,必須用此函數打開設備。此函數與下面函數配合使用。
2、 改變開關量某一個通道的輸出狀態(適用 KPCI840、843、844、845、846、847、848)
Visual C++ & C++Builder:
VOID WINAPI DoutBit(ULONG iIndex,UCHAR channel,UCHAR ibit)
Visual Basic:
Declare Sub DoutBit Lib "kpci800.dll" (ByVal iIndex As Long,
ByVal channel As Byte,
ByVal ibit As Byte)
功能: 該函數向開關量輸出指定通道輸出一個狀態
參數: iIndex 與OpenmDevice中的相同
channel 為開關量輸出通道號
KPCI840、KPCI847H的取值範圍是1~16
KPCI843、KPCI845的取值範圍是1~32
KPCI844的取值範圍是1~24
KPCI846的取值範圍是1~64
KPCI847、KPCI848的取值範圍是1~8
ibit 為輸出的狀態,隻能是“0”或“1”。
返回值:無
3、 關閉設備
Visual C++ & C++Builder:
VOID WINAPI CloseDevice(ULONG iIndex )
Visual Basic:
Declare Sub CloseDevice Lib "kpci800.dll" (ByVal iIndex As Long)
功能: 該函數負責關閉板卡的設備對象
參數: iIndex 與OpenDevice中的相同
返回值:無
4、 打開設備
Visual C++ & C++Builder:
BOOL WINAPI OpenDevice(ULONG iIndex)
Visual Basic:
Declare Function OpenDevice Lib "kpci800.dll" (ByVal iIndex As Long) As Boolean
功能: 該函數負責打開板卡的設備對象
參數: iIndex 指定KPCI板卡的設備序號,0對應第一個設備
返回值:“1”表示成功,“0”代表失敗。
注意:設備序號 兼容機是靠近CPU的PCI插槽號為小序號(從0開始),
工控機則相反,遠離CPU的PCI插槽號為小序號(從0開始)。
5、 讀A/D某一通道轉換數據(適用KPCI812數據采集卡)
Visual C++ & C++Builder:
ULONG WINAPI PCI812_ReadAd(ULONG Iindex,UCHAR adch,ULONG delay)
Visual Basic:
Declare Function PCI812_ReadAd Lib "kpci800.dll" (ByVal iIndex As Long,
ByVal adch As Byte,
ByVal delay As Long)
As Long
功能: 啟動 KPCI812 卡 A/D 某一通道采集數據並讀入轉換結果
參數: iIndex 與OpenDevice中的相同
adch 為A/D的通道號
delay 為改變通道後需要延時(單位為1微秒,此處delay的值要大於100)
返回值:A/D數據
6、 讀 A/D 某一通道轉換數據(適合 KPCI815 數據采集卡)
Visual C++ & C++Builder:
ULONG WINAPI PCI815_ReadAd (ULONG iIndex, UCHAR flbmode, UCHAR flbnum,UCHAR adch, ULONG delay);
Visual Basic:
Declare Function PCI815_ReadAd Lib "kpci800.dll" (ByVal iIndex As Long,
ByVal flbmode As Byte,
ByVal flbnum As Byte,
ByVal adch As Byte,
ByVal delay As Long)
As Long
功能: 啟動 KPCI815 卡 A/D 某一通道采集數據並讀入轉換結果
參數: iIndex, 與 OpenDevice 中的相同
flbmode, 濾波方式,
flbnum, 濾波次數,
adch, 要采集的通道號,
delay 送通道號到啟動AD轉換之間延時(單位為1微秒,此處delay的值要大於200)
返回值:兩字節 A/D 轉換數據
注:關於濾波:
flbmode=1:中值濾波法, | flbmode=2:算術平均值濾波法, |
對某一被測參數連續采樣N次(N取奇數), 把 N 次采樣結果按大小排序,取中間值為 本次采樣值,能有效克服偶然擾動,適用 於溫度、液位等變化緩慢的參數。 | 連續采樣 N 次,然後取算術平均值為本次采樣值, 適用於隨機幹擾、信號在某一數值範圍附近上下 波動時。N 取值大時,信號平滑度高、靈敏度低, N 取值小時,信號平滑度低、靈敏度高,對於流 量,N=12,對於壓力,N=4。 |
Flbmode=0 時,不濾波,此時應特別注意,對某一通道連續采樣時,第 N 次轉換後讀取的數 據為上一次轉換的結果。對多個通道循環采樣時,第 N 通道轉換讀取的數據為上一通道轉換的結果。
7、 向AO端口輸出一個字節(適用KPCI823模擬量輸出卡)
Visual C++ & C++Builder:
VOID WINAPI DAOut823(ULONG iIndex,UCHAR channel,UCHAR iByte)
Visual Basic:
Declare Sub DAOut823 Lib "kpci800.dll" (ByVal iIndex As Long,
ByVal channel As Byte,
ByVal iByte As Byte)
功能: 該函數向 KPCI823 卡 AO 某一通道寫輸出數據
參數: iIndex 與OpenDevice中的相同
channel 指定模擬量輸出的通道號(查閱6.1的偏移地址操作表)
iByte 為輸出的數據(字節)
返回值:無
8、 從 I/O 端口讀入一個字節
Visual C++ & C++Builder:
UCHAR WINAPI ReadByte(ULONG iIndex ,UCHAR dich)
Visual Basic:
Declare Function ReadByte Lib "kpci800.dll" (ByVal iIndex As Long,
ByVal dich As Byte)
As Byte
功能: 從端口讀入一個字節
參數: iIndex 與OpenDevice中的相同
dich 為開關量輸入的地址
返回值:讀取的單字節數據
9、 從 I/O 端口讀入一個字
Visual C++ & C++Builder:
WORD WINAPI ReadWord(ULONG iIndex ,UCHAR dich)
Visual Basic:
Declare Function ReadWord Lib "kpci800.dll" (ByVal iIndex As Long,
ByVal dich As Byte)
As Long
功能: 從端口讀入一個字
參數: iIndex 與OpenDevice中的相同
dich 為開關量輸入的地址(查閱6.1的偏移地址操作表,地址為0和表中所列偶數)
返回值:讀取的單字數據(雙字節數據)
10、 從 I/O 端口讀入一個雙字
Visual C++ & C++Builder:
DWORD WINAPI ReadDWord(ULONG iIndex ,UCHAR iAddr)
Visual Basic:
Declare Function ReadDWord Lib "kpci800.dll" (ByVal iIndex As Long,
ByVal dich As Byte)
As Long
功能: 從端口讀入一個雙字
參數: iIndex 與OpenDevice中的相同
iAddr 為開關量輸入的地址(查閱6.1的偏移地址操作表,地址為0或4)
返回值:讀取的雙字數據(4個字節數據)
11、 向I/O端口輸出一個字節
Visual C++ & C++Builder:
VOID WINAPI WriteByte(ULONG iIndex ,UCHAR iAddr , UCHAR iByte )
Visual Basic:
Declare Sub WriteByte Lib "kpci800.dll" (ByVal iIndex As Long,
ByVal iAddr As Byte,
ByVal ibyte As Byte)
功能: 該函數向端口寫一個字節
參數: iIndex 與OpenDevice中的相同
iAddr 為開關量輸出地址(查閱6.1的偏移地址操作表)
iByte 為輸出的數據(字節)
返回值:無
注:對於有兩極鎖存功能的板卡,執行過程略有不同,第一次執行此函數,數據被送入第一級 鎖存器,並未實際輸出,當第二次執行此函數(數據變量iByte內容無效,地址變量iAddr要參照6.1 的偏移地址操作表中二級鎖存輸出允許的偏移地址)時,數據才真正送到輸出端口。請仔細閱讀演 示程序。
12、 向 I/O 端口輸出一個字
Visual C++ & C++Builder:
VOID WINAPI WriteWord(ULONG iIndex ,UCHAR iAddr , UCHAR iWord )
Visual Basic:
Declare Sub WriteWord Lib "kpci800.dll" (ByVal iIndex As Long,
ByVal iAddr As Byte,
ByVal idate As Long)
功能: 該函數向端口寫一個字
參數: iIndex 與OpenDevice中的相同
iAddr 為開關量輸出地址(查閱6.1的偏移地址操作表,地址為0和表中所列偶數)
iWord 為輸出的字數據(單字數據)
返回值:無
13、 向 I/O 端口輸出一個雙字
Visual C++ & C++Builder:
VOID WINAP I WriteDWord(ULONG iIndex ,UCHAR iAddr , UCHAR iDWord )
Visual Basic:
Declare Sub WriteDWord Lib "kpci800.dll" (ByVal iIndex As Long,
ByVal iAddr As Byte,
ByVal idate As Long)
功能: 該函數向端口寫一個雙字
參數: iIndex 與OpenDevice中的相同
iAddr 為開關量輸出地址(查閱6.1的偏移地址操作表,地址為0或4)
iDWord 為輸出的雙字數據
返回值:無
14、 延時函數
Visual C++ & C++Builder:
VOID WINAPI TimeDelay(ULONG timedelay )
Visual Basic:
Declare Sub TimeDelay Lib "kpci800.dll" (ByVal timedelay As Long,)
功能: 該函數完成延時功能
參數: timedelay延時時間常數(單位為微秒,在Windows系統下,此數值應大於100)
返回值:無