[实例教程] Unity物联网开发——网络数据采集卡
本帖最后由 简单可依赖 于 2019-3-15 18:13 编辑

开发环境
程序引擎:.6
网络采集卡:Net6024-S
首先需要导入Dll集,并且在脚本中添加引用和声明外部方法
    [DllImport("NETDAQV6024")]
    static extern int ADSingleV6024(string destIP, int ad_os, int gain, ref float adResult);
    [DllImport("NETDAQV6024")]
    static extern int DoWriteAllV6024(string destIP, byte outport);
    [DllImport("NETDAQV6024")]
    static extern int DiReadV6024(string destIP, ref byte input);
1).模拟通道AD采集
[mw_shl_code=csharp,true]
        //调用数据
        float[] adResult = new float[16];
        //单次采集多通道数据,返回 float 型数据

        int erro = ADSingleV6024(ip, 0, (Int16)0, ref adResult[0]);
        if (erro == 0)
        {
            //显示16路通道
            foreach (float item in adResult)
            {
                Debug.Log(item);
            }
        }
        else
        {
            Debug.Log(erro);
        }
[/mw_shl_code]

2).IO输入输出流,8路单向输入
网络采集卡将数据输入到Unity程序中,数据采用二进制长度是8位。
假设,1 导通 0 不导通,网络采集卡发送"00000000"的8位二进制数据,代表8位输入全部关闭状态。
网络采集卡发送"00000111"给Unity程序,代表后三个端子是导通的状态。
请注意,如果在Unity中把接受到的数据直接Debug.Log()显示出来会被默认转换为十进制显示“7”,而不是“00000111”。
为避免在后期数据处理上造成不必要的麻烦,可以将得到的byte数据转换为2进制字符显示
代码如下
[mw_shl_code=csharp,true]
        //获取二进制数据
        byte inport = 0;
        int erro = DiReadV6024(ip, ref inport);
        if (erro == 0)
{
            Debug.Log(Convert.ToString(inport, 2));
        }
        else
        {
            Debug.Log("错误码:" + erro);
        }[/mw_shl_code]

3).IO输入输出流,8路单向输出
Unity程序输出数据到网络采集卡也应该使用二进制的方式,
依旧假设,1 导通 0 不导通,想让网络采集卡的八个out端子全部接通,应该发送"11111111"。
此外我们也可以转换为对应的十进制值发送255(二进制数11111111 等于 十进制数255),
代码如下:
[mw_shl_code=csharp,true]
        byte outport = 255;
        int erro = DoWriteAllV6024(ip, outport);
        if (erro == 0)
            Debug.Log("00___" + outport);
        else
            Debug.Log("错误码:" + erro);
[/mw_shl_code]




——网络数据采集卡