KPCI板采集器

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("已关闭设备");
    }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值