package com.**.**.KPCI;
import com.sun.jna.Library;
import com.sun.jna.Native;
public interface KPCIDevice extends Library {
public static String setFilePath = "C:\\Program Files (x86)\\**\\kpci800.dll";
public static KPCIDevice INSTANCE = (KPCIDevice)Native.loadLibrary(setFilePath, KPCIDevice.class);
/***********************通用函数***********************/
/**
**打开指定设备函数
功能: 该函数负责打开指定板卡型号的设备对象
参数: iIndex 指定KPCI板卡的设备序号,0对应第一个设备
boardtype 指定KPCI板卡的型号,这里只能是840、843、844、845、846、847、848。
返回值:“1”表示成功,“0”代表失败。
注意:设备序号 兼容机是靠近CPU的PCI插槽号为小序号(从0开始),
工控机则相反,远离CPU的PCI插槽号为小序号(从0开始)。
注意:此函数是专门为带有开关量输出板卡编制的函数,当用户需要改变开关量输出的某一个
通道的状态,而不影响其他通道时,必须用此函数打开设备。此函数与下面函数配合使用
*
* */
public boolean OpenmDevice(int iIndex,int boardtype);
/**
* 改变开关量某一个通道的输出状态
* 功能: 该函数向开关量输出指定通道输出一个状态
参数: iIndex 与OpenmDevice中的相同
channel 为开关量输出通道号
KPCI840、KPCI847H的取值范围是1~16
KPCI843、KPCI845的取值范围是1~32
KPCI844的取值范围是1~24
KPCI846的取值范围是1~64
KPCI847、KPCI848的取值范围是1~8
ibit 为输出的状态,只能是“0”或“1”。
返回值:无
* @return
*
* */
public void DoutBit(int iIndex,int channel,byte ibit);
/**
* **打开设备
* 功能: 该函数负责打开板卡的设备对象
参数: iIndex 指定KPCI板卡的设备序号,0对应第一个设备
返回值:“1”表示成功,“0”代表失败。
注意:设备序号 兼容机是靠近CPU的PCI插槽号为小序号(从0开始),
工控机则相反,远离CPU的PCI插槽号为小序号(从0开始)
*
* */
public byte OpenDevice(int iIndex);
/**
* **关闭设备
* 功能: 该函数负责关闭板卡的设备对象
参数: iIndex 与OpenDevice中的相同
返回值:无
*
* */
public void CloseDevice(int iIndex);
/**
* 读 A/D 某一通道转换数据适用 KPCI812 数据采集卡
功能: 启动 KPCI812 卡 A/D 某一通道采集数据并读入转换结果
参数: iIndex 与OpenDevice中的相同
adch 为A/D的通道号
delay 为改变通道后需要延时(单位为1微秒,此处delay的值要大于100)
返回值:A/D数据
*
* */
public byte PCI812_ReadAd(int Iindex,char adch,char delay);
/**
* 功能: 启动 KPCI815 卡 A/D 某一通道采集数据并读入转换结果
参数: iIndex, 与 OpenDevice 中的相同
flbmode, 滤波方式,
产品使用说明
10
flbnum, 滤波次数,
adch, 要采集的通道号,
delay 送通道号到启动AD转换之间延时(单位为1微秒,此处delay的值要大于200)
返回值:两字节 A/D 转换数据
* */
public byte PCI815_ReadAd (int iIndex, char flbmode, char flbnum, char adch, String delay);
/**
* 向AO端口输出一个字节(适用KPCI823模拟量输出卡)
* 功能: 该函数向 KPCI823 卡 AO 某一通道写输出数据
参数: iIndex 与OpenDevice中的相同
channel 指定模拟量输出的通道号(查阅6.1的偏移地址操作表)
iByte 为输出的数据(字节)
返回值:无
**/
public void DAOut823(int iIndex,char channel,char iByte);
/**
* 从 I/O 端口读入一个字节
* 功能: 从端口读入一个字节
参数: iIndex 与OpenDevice中的相同
dich 为开关量输入的地址
返回值:读取的单字节数据
**/
public byte ReadByte(int iIndex ,int dich);
/**
* 从 I/O 端口读入一个字
* 功能: 从端口读入一个字
参数: iIndex 与OpenDevice中的相同
dich 为开关量输入的地址(查阅6.1的偏移地址操作表,地址为0和表中所列偶数)
返回值:读取的单字数据(双字节数据)
**/
public byte ReadWord(int iIndex ,byte dich);
/**
* 从 I/O 端口读入一个双字
* 功能: 从端口读入一个双字
参数: iIndex 与OpenDevice中的相同
iAddr 为开关量输入的地址(查阅6.1的偏移地址操作表,地址为0或4)
返回值:读取的双字数据(4个字节数据)
**/
public void WriteDword(int iIndex ,char iAddr);
/**
* 向端口写一个字节
* 功能: 该函数向端口写一个字节
参数: iIndex 与OpenDevice中的相同
iAddr 为开关量输出地址(查阅6.1的偏移地址操作表)
iByte 为输出的数据(字节)
返回值:无
*/
public short WriteByte(int iIndex ,byte iAddr , char iByte);
/**
* 向 I/O 端口输出一个字
* 功能: 该函数向端口写一个字
参数: iIndex 与OpenDevice中的相同
iAddr 为开关量输出地址(查阅6.1的偏移地址操作表,地址为0和表中所列偶数)
Word 为输出的字数据(单字数据)
返回值:无
* */
public void WriteWord(int iIndex ,char iAddr , char iWord);
/**
* 向 I/O 端口输出一个双字
* 功能: 该函数向端口写一个双字
参数: iIndex 与OpenDevice中的相同
iAddr 为开关量输出地址(查阅6.1的偏移地址操作表,地址为0或4)
iDWord 为输出的双字数据
返回值:无
* */
public void WriteDWord(int iIndex ,char iAddr , char iDWord);
/**
* 延时函数
* 功能: 该函数完成延时功能
参数: timedelay延时时间常数(单位为微秒,在Windows系统下,此数值应大于100)
返回值:无
**/
public void TimeDelay(String timedelay);
}
public class Test {
public static void main(String[] args) {
//打开设备 0表示失败,1表示成功
System.out.println("打开设备:" + KPCIDevice.INSTANCE.OpenDevice(0));
//从端口读入一个字节-->读取数据
int value = KPCIDevice.INSTANCE.ReadByte(0, 1);
//将整数转换成二进制-->Integer.toBinaryString(int)
System.out.println("读取的二进制数据:::::" + Integer.toBinaryString(value) + ";");
// for (int i = 0; i <=5; i++) {
// int value = KPCIDevice.INSTANCE.ReadByte(0, i);
// if (value != 0) {
// System.out.println(i + "->" + Integer.toBinaryString(value) + ";");
// }
// }
//给指定通道输出一个状态
KPCIDevice.INSTANCE.DoutBit(0, 0, (byte)1);
//关闭设备
KPCIDevice.INSTANCE.CloseDevice(0);
System.out.println("已关闭设备");
}
}