Browse Source

首次提交 增加采集卡DLL

陈子杰 2 months ago
parent
commit
3fe8a7e367

BIN
Lib/USB5621AE_64.dll


+ 881 - 0
SCADA_DAQ/Customer/ART/USB5621AE.cs

@@ -0,0 +1,881 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Runtime.InteropServices;
+
+namespace SCADA_DAQ.Customer.ART
+{
+    public partial class USB5621AE
+    {
+        // ########################## 设备功能指标 ########################
+        public const Int32 USB5621AE_AI_MAX_CHANNELS = 16;        // 本卡最多支持16路模拟量单端输入通道
+        public const Int32 USB5621AE_AO_MAX_CHANNELS = 2;        // 本卡最多支持2个模拟量输出通道
+        public const Int32 USB5621AE_DIO_MAX_PORTS = 2;               // 本卡最多支持2个数字量端口
+        public const Int32 USB5621AE_DIO_PORT0_MAX_LINES = 8;   // 数字量端口0支持8条线
+        public const Int32 USB5621AE_DIO_PORT1_MAX_LINES = 8;   // 数字量端口1支持8条线
+        public const Int32 USB5621A_DIO_PORT0 = 0;	            // 数字量端口0(单向输入)
+        public const Int32 USB5621A_DIO_PORT1 = 1;	            // 数字量端口1(单向输出)
+
+        private static USB5621AE _instance;
+        public static USB5621AE Instance { get => _instance ?? (_instance = new USB5621AE()); }
+        // 设备网络信息
+
+
+     public struct DEVICE_NET_INFO_A
+     {
+
+         [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
+         public string strIP;
+
+         [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
+         public string strSubnetMask;
+
+         [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
+         public string strGateway;
+
+         [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
+         public string strMAC;
+
+
+     }
+
+     public struct DEVICE_NET_INFO_W
+     {
+	    //public const wchar_t strIP[16];					// IP地址, "192.168.2.70"
+	    //public const wchar_t strSubnetMask[16];			// 子网掩码, "255.255.255.255"
+	    //public const wchar_t strGateway[16];				// 网关, "192.168.2.1"
+	    //public const wchar_t strMAC[20];					// 网卡物理地址,  "00-01-02-03-04-05",用户一般不可修改
+         [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
+         public string strIP;
+
+         [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
+         public string strSubnetMask;
+
+         [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
+         public string strGateway;
+
+         [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
+         public string strMAC;
+
+     } 
+
+
+
+        // ############# AI工作参数结构体USB5621AE_AI_PARAM描述 #############
+        // AI通道参数结构体
+        public struct USB5621AE_AI_CH_PARAM
+        {
+            public UInt32 nChannel;            // 通道号[0, 15],分别表示物理通道号AI0-AI15
+            public UInt32 nSampleGain;    // 采样范围(Sample Range)档位选择, 具体见下面常量名定义(此参数在单点采样有效,未此注明的参数则在单点采样模式中无效)
+            public UInt32 nRefGround;        // 接地参考方式
+
+            public UInt32 nReserved0;        // 保留(未用)
+            public UInt32 nReserved1;        // 保留(未用)
+            public UInt32 nReserved2;        // 保留(未用)
+        }
+
+        
+        // AI硬件通道参数USB5621A_AI_CH_PARAM中的nSampleGain采样增益放大倍数所使用的选项
+        public const Int32 USB5621AE_AI_SAMPGAIN_1MULT = 0;    // 1倍增益
+        public const Int32 USB5621AE_AI_SAMPGAIN_2MULT = 1; // 2倍增益
+        public const Int32 USB5621AE_AI_SAMPGAIN_4MULT = 2; // 4倍增益
+        public const Int32 USB5621AE_AI_SAMPGAIN_8MULT =	3; // 8倍增益
+
+
+        // AI硬件参数结构体USB5621AE_AI_CH_PARAM中的nSampleRange参数所使用的采样范围挡位选项
+        //public const Int32 USB5621AE_AI_SAMPRANGE_N10_P10V = 0;  // ±10V
+       // public const Int32 USB5621AE_AI_SAMPRANGE_N5_P5V = 1;      // ±5V
+        //public const Int32 USB5621AE_AI_SAMPRANGE_N2_P2V = 2;      // ±2V
+        //public const Int32 USB5621AE_AI_SAMPRANGE_N1_P1V = 3;      // ±1V
+
+        // AI硬件通道参数结构体USB5621AE_AI_CH_PARAM中的nRefGround参数所使用的地参考选项
+        public const Int32 USB5621AE_AI_REFGND_RSE = 0;      // 接地参考单端(Referenced Single Endpoint)
+        public const Int32 USB5621AE_AI_REFGND_NRSE = 1;    // 非参考单端(Non Referenced Single Endpoint)
+        public const Int32 USB5621AE_AI_REFGND_DIFF = 2;      // 差分(Differential)
+
+        // 跟整个AI有关的硬件工作参数(简称AI工作参数)
+        public struct USB5621AE_AI_PARAM
+        {
+            // 通道参数
+            public UInt32 nSampChanCount;                          // 采样通道总数[1, 16](此参数在单点采样有效,未此注明的参数则在单点采样模式中无效)
+            public USB5621AE_AI_CH_PARAM CHParam0;   // 通道参数配置(此参数在单点采样有效,未此注明的参数则在单点采样模式中无效)
+            public USB5621AE_AI_CH_PARAM CHParam1;
+            public USB5621AE_AI_CH_PARAM CHParam2;
+            public USB5621AE_AI_CH_PARAM CHParam3;
+            public USB5621AE_AI_CH_PARAM CHParam4;
+            public USB5621AE_AI_CH_PARAM CHParam5;
+            public USB5621AE_AI_CH_PARAM CHParam6;
+            public USB5621AE_AI_CH_PARAM CHParam7;
+            public USB5621AE_AI_CH_PARAM CHParam8;
+            public USB5621AE_AI_CH_PARAM CHParam9;
+            public USB5621AE_AI_CH_PARAM CHParam10;
+            public USB5621AE_AI_CH_PARAM CHParam11;
+            public USB5621AE_AI_CH_PARAM CHParam12;
+            public USB5621AE_AI_CH_PARAM CHParam13;
+            public USB5621AE_AI_CH_PARAM CHParam14;
+            public USB5621AE_AI_CH_PARAM CHParam15;
+          
+            //public UInt32 nSampleSignal;                                 // 采样信号(Sample Signal), 详见下面常量定义
+            //public UInt32 nReserved0;                                     // 采样范围(Sample Range)档位选择, 具体见下面常量名定义(此参数在单点采样有效,未此注明的参数则在单点采样模式中无效)
+            //public UInt32 nReserved1;                                     // 保留字段(暂未定义)
+
+            public UInt32 nChanScanMode;		// 通道扫描模式,0=通道连续扫描, 1=通道分组扫描
+            public UInt32 nGroupLoops;		// 组内循环次数[1, 65535]
+            public UInt32 nGroupInterval;     // 组与组之间的时间间隔, 单位:微秒,取值范围[0, 107374182], 等于0时表示等间隔采样(不分组,此时nGroupLoops应等于1)
+            public UInt32 nSampleSignal;		// 采样信号(Sample Signal), 详见下面常量定义
+            public UInt32 nSampleRange;		// 采样范围(Sample Range)档位选择, 具体见下面常量名定义(此参数在单点采样有效,未此注明的参数则在单点采样模式中无效)
+
+
+            // 时钟参数
+            public UInt32 nSampleMode;                                  // 采样模式, 0=单点采样(按需), 1、硬件定时单点(暂不支持),2=有限点采样, 3=连续采样
+            public UInt32 nSampsPerChan;                               // 每个通道采样点数(也是每通道待读取点数),取值范围为单点采样模式时应等于1,有限点或连续采样时为[2, 1024*1024]
+            public Double fSampleRate;                                    // 采样速率(Sample Rate), 单位为sps,取值范围为[1sps, 100000sps],它是每个采样通道的采样速率, 它与nChannelCount的乘积不能大于100000sps
+            public UInt32 nClockSource;                                   // 时钟源选择, =0:内时钟OSCCLK; =1:外时钟CLKIN,由CN2上的Port1.DIO2(CLKIN)复用输入
+            public UInt32 bClockOutput;                                   // 采样时钟输出允许, =0:表示禁止; =1:表示允许,由CN2上的Port1.DIO3(CLKOUT)复用输出
+            public UInt32 nReserved0;                                      // 保留字段(暂未定义)
+            public UInt32 nReserved1;                                      // 保留字段(暂未定义)
+
+            // 开始触发参数
+            public UInt32 bDTriggerEn;		// 数字触发DTR允许(Digital Trigger Enable), =FALSE:表示禁止; =TRUE:表示允许,触发信号由连接器CN2上的DIO1复用输入,因此初始化时会将DIO1的方向强制置为输入
+            public UInt32 nDTriggerDir;	    // 数字触发方向(Digital Trigger Direction)
+            public UInt32 bATriggerEn;		// 模拟数字触发ATR允许(Analog Trigger Enable), =TRUE:表示允许, =FALSE:表示禁止
+            public UInt32 nATriggerDir;		// 模拟触发方向(Analog Trigger Direction)
+            public Double  fTriggerLevel;		// 触发电平(Trigger Level), 注意:AI跟AO的共用同一个触发电平,故此处改变触发电平也会引起AO的触发电平变化
+            public UInt32 nTriggerSens;		// 触发灵敏度(Trigger Sensitive for Digital and Analog trigger),单位:微秒(uS),取值范围[0, 1638], 注意:AI跟AO的共用同一个触发灵敏度,故此处改变触发灵敏度也会引起AO的触发灵敏度变化	
+            public UInt32 nDelaySamps;		// 触发延迟点数, 单位:采样点,取值范围32位有效[0, 4294967295],0:Post Trigger, >0:Delay Trigger
+            public UInt32 nReserved2;			// 保留字段(暂未定义)
+
+            // 其他方面
+            public UInt32 nReserved3;			// 保留字段(暂未定义)
+            public UInt32 nReserved4;			// 保留字段(暂未定义)
+            public UInt32 nReserved5;			// 保留字段(暂未定义)
+            public UInt32 nReserved6;			// 保留字段(暂未定义)
+        }
+
+        
+// AI硬件参数结构体USB5621AE_AI_PARAM中的nChanScanMode扫描模式所使用的选项
+     public const Int32 USB5621AE_AI_CHAN_SCANMODE_CONTINUOUS =	0; // 连续扫描
+     public const Int32 USB5621AE_AI_CHAN_SCANMODE_GROUP=		1; // 分组扫描
+
+// AI硬件参数结构体USB5621AE_AI_PARAM中的nSampleSignal采样信号所使用的选项
+     public const Int32 USB5621AE_AI_SAMPSIGNAL_AI		=	0; // AI通道输入信号
+     public const Int32 USB5621AE_AI_SAMPSIGNAL_0V		=	1; // 0V(AGND)
+     public const Int32 USB5621AE_AI_SAMPSIGNAL_2D5V	=	2; // 2.5V(DC)
+     public const Int32 USB5621AE_AI_SAMPSIGNAL_5V		=	3 ;// 5V(DC)
+
+// AI硬件参数结构体USB5621AE_AI_PARAM中的nSampleRange参数所使用的采样范围挡位选项
+     public const Int32 USB5621AE_AI_SAMPRANGE_N10_P10V	=	0 ;// ±10V
+     public const Int32 USB5621AE_AI_SAMPRANGE_N5_P5V	=	1; // ±5V
+     public const Int32 USB5621AE_AI_SAMPRANGE_N2D5_P2D5V	=2; // ±2.5V
+     public const Int32 USB5621AE_AI_SAMPRANGE_0_P10V	=	3; // 0-10V
+     public const Int32 USB5621AE_AI_SAMPRANGE_0_P5V	=	4; // 0-5V
+
+// AI硬件参数结构体USB5621AE_AI_PARAM中的nSampleMode采样模式所使用的选项
+     public const Int32 USB5621AE_AI_SAMPMODE_ONE_DEMAND=	0 ;// 软件按需单点采样
+     public const Int32 USB5621AE_AI_SAMPMODE_FINITE	=	2; // 有限点采样
+     public const Int32 USB5621AE_AI_SAMPMODE_CONTINUOUS=	3 ;// 连续采样
+
+// AI硬件参数结构体USB5621AE_AI_PARAM中的nClockSource时钟源所使用的选项
+     public const Int32 USB5621AE_AI_CLKSRC_LOCAL		=	0; // 本地时钟(通常为本地晶振时钟OSCCLK),也叫内部时钟
+     public const Int32 USB5621AE_AI_CLKSRC_CLKIN		=	1; // 外部时钟(由连接器CN2上的DIO2/CLKIN复用输入)
+
+// AI硬件参数结构体USB5621AE_AI_PARAM中的nDTriggerDir/nATriggerDir触发方向所使用的选项
+     public const Int32 USB5621AE_AI_TRIGDIR_FALLING	=	0; // 下降沿/低电平
+     public const Int32 USB5621AE_AI_TRIGDIR_RISING		=	1; // 上升沿/高电平
+     public const Int32 USB5621AE_AI_TRIGDIR_CHANGE		=	2; // 变化(即上下边沿/高低电平均有效)
+
+
+        // #################### AI工作状态结构体USB5621AE_AI_STATUS描述 #####################
+        public struct USB5621AE_AI_STATUS
+        {
+            public UInt32 bTaskDone;                                         // 采集任务完成标志, =TRUE:表示采集任务完成, =FALSE:表示采集任务未完成,正在进行中
+            public UInt32 bTriggered;                                          // 触发标志, =TRUE:表示已被触发, =FALSE:表示未被触发(即正等待触发)
+
+            public UInt32 nTaskState;                                         // 采集任务状态, =1:正常, 其它值表示有异常情况
+            public UInt32 nAvailSampsPerChan;                         // 每通道有效点数,只有它大于当前指定读数长度时才能调用AI_ReadAnalog()立即读取指定长度的采样数据
+            public UInt32 nMaxAvailSampsPerChan;                  // 自AI_StartTask()后每通道出现过的最大有效点数,状态值范围[0, nBufSampsPerChan],它是为监测采集软件性能而提供,如果此值越趋近于1,则表示意味着性能越高,越不易出现溢出丢点的可能
+            public UInt32 nBufSampsPerChan;                           // 每通道缓冲区大小(采样点数)
+            public long nSampsPerChanAcquired;                       // 每通道已采样点数(自开始采集任务(AI_StartTask())之后所采样的点数),这个只是给用户的统计数据
+
+            public UInt32 nHardOverflowCnt;                            // 硬件溢出计数(在不溢出情况下恒等于0)
+            public UInt32 nSoftOverflowCnt;                              // 软件溢出计数(在不溢出情况下恒等于0)
+            public UInt32 nInitTaskCnt;                                      // 初始化采集任务的次数(即调用AI_InitTask()的次数)
+            public UInt32 nReleaseTaskCnt;                               // 释放采集任务的次数(即调用AI_ReleaseTask()的次数)
+            public UInt32 nStartTaskCnt;                                    // 开始采集任务的次数(即调用AI_StartTask()的次数)
+            public UInt32 nStopTaskCnt;                                    // 停止采集任务的次数(即调用AI_StopTask()的次数)
+            public UInt32 nTransRate;                                       // 传输速率, 即每秒传输点数(sps),作为USB及应用软件传输性能的监测信息
+
+            public UInt32 nReserved0;                                      // 保留字段(暂未定义)
+            public UInt32 nReserved1;                                      // 保留字段(暂未定义)
+            public UInt32 nReserved2;                                      // 保留字段(暂未定义)
+        }
+
+        // #################### AI主要信息结构体(USB5621AE_AI_MAIN_INFO) #######################
+        public struct USB5621AE_AI_MAIN_INFO
+        {
+            public UInt32 nChannelCount;                     // AI通道数量
+            public UInt32 nSampRangeCount;               // AI采样范围挡位数量
+            public UInt32 nSampGainCount;                  // AI采样增益挡位数量
+            public UInt32 nCouplingCount;                    // AI耦合挡位数量
+            public UInt32 nImpedanceCount;                 // AI阻抗的挡位数量
+            public UInt32 nDepthOfMemory;                // AI板载存储器深度(点数)
+            public UInt32 nSampResolution;                  // AI采样分辨率(如=8表示8Bit; =12表示12Bit; =14表示14Bit; =16表示16Bit)
+            public UInt32 nSampCodeCount;                 // AI采样编码数量(如256, 4096, 16384, 65536)
+            public UInt32 nTrigLvlResolution;                // 触发电平分辨率(如=8表示8Bit; =12表示12Bit; =16表示16Bit)
+            public UInt32 nTrigLvlCodeCount;               // 触发电平编码数量(如256, 4096)
+
+            public UInt32 nReserved0;                          // 保留字段(暂未定义)
+            public UInt32 nReserved1;                          // 保留字段(暂未定义)
+            public UInt32 nReserved2;                          // 保留字段(暂未定义)
+            public UInt32 nReserved3;                          // 保留字段(暂未定义)
+            public UInt32 nReserved4;                          // 保留字段(暂未定义)
+
+        }
+
+        // #################### AI电压范围信息结构体(USB5621AE_AI_VOLT_RANGE_INFO) #######################
+        public struct USB5621AE_AI_VOLT_RANGE_INFO
+        {
+            public UInt32 nSampleRange;                 // 当前采样范围挡位号
+            public UInt32 nReserved0;                      // 保留字段(暂未定义)
+            public double fMaxVolt;                          // 采样范围的最大电压值,单位:伏(V)
+            public double fMinVolt;                           // 采样范围的最小电压值,单位:伏(V)
+            public double fAmplitude;                       // 采样范围幅度,单位:伏(V)
+            public double fHalfOfAmp;                    // 采样范围幅度的二分之一,单位:伏(V)
+            public double fCodeWidth;                     // 编码宽度,单位:伏(V), 即每个单位码值所分配的电压值
+            public double fOffsetVolt;                      // 偏移电压,单位:伏(V),一般用于零偏校准
+            public double fOffsetCode;                    // 偏移码值,一般用于零偏校准,它代表的电压值等价于fOffsetVolt
+            public SByte strDesc0;                            // 采样范围字符描述,如"±10V", "0-10V"等
+            public SByte strDesc1;
+            public SByte strDesc2;
+            public SByte strDesc3;
+            public SByte strDesc4;
+            public SByte strDesc5;
+            public SByte strDesc6;
+            public SByte strDesc7;
+            public SByte strDesc8;
+            public SByte strDesc9;
+            public SByte strDesc10;
+            public SByte strDesc11;
+            public SByte strDesc12;
+            public SByte strDesc13;
+            public SByte strDesc14;
+            public SByte strDesc15;
+
+            public UInt32 nPolarity;                       // 采样范围的极性(0=双极性BiPolar, 1=单极性UniPolar)
+            public UInt32 nCodeCount;                  // 原码数量
+            public Int32 nMaxCode;                       // 原码最大值
+            public Int32 nMinCode;                        // 原码最小值
+
+            public UInt32 nReserved1;                   // 保留字段(暂未定义)
+            public UInt32 nReserved2;                   // 保留字段(暂未定义)
+            public UInt32 nReserved3;                   // 保留字段(暂未定义)
+            public UInt32 nReserved4;                   // 保留字段(暂未定义)
+        }
+
+        // 结构体AI_VOLT_RANGE_INFO的数据成员Polarity所用的采样范围极性选项
+        public const Int32 USB5621AE_AI_POLAR_BIPOLAR = 0;        // 双极性
+        public const Int32 USB5621AE_AI_POLAR_UNIPOLAR = 1;     // 单极性
+
+        // #################### AI增益信息结构体(USB5621AE_AI_VOLT_GAIN_INFO) #######################
+       public struct USB5621AE_AI_VOLT_GAIN_INFO
+       {
+	        public UInt32 nSampleGain;		// 当前采样增益挡位号
+	        public UInt32 nReserved0;			// 保留字段(暂未定义)
+	        public double  fAmpFactor;			// 放大倍数(Amplification Factor)
+            public SByte strDesc0;   		// 采样增益字符描述,如"10倍", "100倍"等   
+            public SByte strDesc1;
+            public SByte strDesc2;
+            public SByte strDesc3;
+            public SByte strDesc4;
+            public SByte strDesc5;
+            public SByte strDesc6;
+            public SByte strDesc7;
+            public SByte strDesc8;
+            public SByte strDesc9;
+            public SByte strDesc10;
+            public SByte strDesc11;
+            public SByte strDesc12;
+            public SByte strDesc13;
+            public SByte strDesc14;
+            public SByte strDesc15;
+
+	        public UInt32 nReserved1;			// 保留字段(暂未定义)
+	        public UInt32 nReserved2;			// 保留字段(暂未定义)
+	        public UInt32 nReserved3;			// 保留字段(暂未定义)
+	        public UInt32 nReserved4;			// 保留字段(暂未定义)
+        }
+
+        // #################### AI速率信息结构体(USB5621AE_AI_SAMP_RATE_INFO) #######################
+        public struct USB5621AE_AI_SAMP_RATE_INFO
+        {
+            public double fMaxRate;             // 单通道最大采样速率(sps),多通道时各通道平分最大采样率
+            public double fMinRate;              // 单通道最小采样速率(sps),多通道时各通道平分最小采样率
+            public double fTimerBase;           // 时钟基准(即板载晶振频率)单位:Hz
+            public UInt32 nDivideMode;        // 分频模式,0=整数分频(INTDIV), 1=DDS分频(DDSDIV)
+            public UInt32 nRateType;            // 速率类型,指fMaxRate和fMinRate的类型, =0:表示为所有采样通道的总速率, =1:表示为每个采样通道的速率
+
+            public UInt32 nReserved0;           // 保留字段(暂未定义)
+            public UInt32 nReserved1;           // 保留字段(暂未定义)
+        }
+
+        // ##################### AO工作参数结构体USB5621AE_AO_PARAM描述 ###################
+        public struct USB5621AE_AO_CH_PARAM
+        {
+            public UInt32 bChannelEn;        // 通道采样允许
+            public UInt32 nSampleRange;    // 采样范围,具体定义请参考下面常量定义
+            public UInt32 nReserved0;         // 保留(未用)
+            public UInt32 nReserved1;         // 保留(未用)
+            public UInt32 nReserved2;         // 保留(未用)
+            public UInt32 nReserved3;         // 保留(未用)
+        }
+
+        // AO硬件参数结构体USB5621AE_AO_CH_PARAM中的nSampleRange参数所使用的模拟量输入采样范围挡位选项
+        public const Int32 USB5621AE_AO_SAMPRANGE_0_P5V = 0;			 // 0-5V
+        public const Int32 USB5621AE_AO_SAMPRANGE_0_P10V = 1;			 // 0-10V
+        public const Int32 USB5621AE_AO_SAMPRANGE_0_P10D8V = 2;			 // 0-10.8V
+        public const Int32 USB5621AE_AO_SAMPRANGE_N5_P5V = 3;			 // ±5V
+        public const Int32 USB5621AE_AO_SAMPRANGE_N10_P10V = 4;			 // ±10V
+        public const Int32 USB5621AE_AO_SAMPRANGE_N10D8_P10D8V = 5;		 // ±10.8V
+
+
+        // 跟整个AO有关的硬件工作参数(简称AO工作参数)
+        public struct USB5621AE_AO_PARAM
+        {
+            public USB5621AE_AO_CH_PARAM CHParam0;   // 通道参数(通道使能,采样范围)
+            public USB5621AE_AO_CH_PARAM CHParam1;
+
+
+            // 时钟参数
+            public UInt32 nSampleMode;          // 采样模式, 0=软件定时单点采样(按需), 1、硬件定时单点采样(暂不支持),2=有限点采样, 3=连续采样
+            public UInt32 nSampsPerChan;      // 每个通道生成点数(也是每通道待写入点数),取值范围为单点采样模式时应等于1,有限点或连续采样时为[2, 1024*1024]
+            public double fSampleRate;            // 采样速率(Sample Rate), 单位为sps,取值范围为[1sps, 50000sps],它是每个采样通道的采样速率
+            public UInt32 nClockSource;          // 时钟源选择, =0:内时钟OSCCLK; =1:外时钟CLKIN,由CN2上的Port1.DIO2(CLKIN)复用输入
+            public UInt32 bClockOutput;          // 采样时钟输出允许, =0:表示禁止; =1:表示允许,由CN2上的Port1.DIO3(CLKOUT)复用输出
+            public UInt32 bRegenModeEn;       // 波形重生成模式允许(在连续采样模式中有效), =TRUE:只是对开始生成任前写入任务中的波形段数据进行循环重复生成,=FALSE:禁止重生成模式,在开始生成任务后,还要不断的往任务中写入新的波形数据
+            public UInt32 nReserved0;             // 保留字段(暂未定义)
+
+            // 开始触发参数
+            public UInt32 bDTriggerEn;            // 数字触发DTR允许(Digital Trigger Enable), =FALSE:表示禁止; =TRUE:表示允许,触发信号由CN2上的Port1.DIO1(DTR)复用输入,因此初始化时会将DIO1的方向强制置为输入
+            public UInt32 nDTriggerDir;           // 数字触发方向(Digital Trigger Direction)
+            public UInt32 bATriggerEn;		// 模拟数字触发ATR允许(Analog Trigger Enable), =TRUE:表示允许, =FALSE:表示禁止
+            public UInt32 nATriggerDir;		// 模拟触发方向(Analog Trigger Direction)
+            public double fTriggerLevel;		// 触发电平(Trigger Level), 注意:AO跟AI的共用同一个触发电平,故此处改变触发电平也会引起AI的触发电平变化
+
+            public UInt32 nTriggerSens;            // 触发灵敏度(Trigger Sensitive for Digital trigger),单位:微秒(uS),取值范围[0, 1638]
+            public UInt32 nDelaySamps;           // 触发延迟点数, 单位:采样点,取值范围32位有效[0, 4294967295],0:Post Trigger, >0:Delay Trigger
+            public UInt32 nReserved1;              // 保留字段(暂未定义)
+            public UInt32 nReserved2;              // 保留字段(暂未定义)
+
+            // 其他参数
+            public UInt32 nReserved3;              // 保留字段(暂未定义)
+            public UInt32 nReserved4;              // 保留字段(暂未定义)
+            public UInt32 nReserved5;              // 保留字段(暂未定义)
+        }
+
+        // AO硬件参数结构体USB5621AE_AO_PARAM中的nSampleMode采样模式所使用的选项
+        public const Int32 USB5621AE_AO_SAMPMODE_ONE_DEMAND = 0;      // 单点采样(按需)
+        public const Int32 USB5621AE_AO_SAMPMODE_ONE_HWTIMED = 1;     // 单点采样(硬件定时,Hardware Timed, 本设备暂时不支持)
+        public const Int32 USB5621AE_AO_SAMPMODE_FINITE = 2;                     // 有限点采样
+        public const Int32 USB5621AE_AO_SAMPMODE_CONTINUOUS = 3;        // 连续采样
+
+        // AO硬件参数结构体USB5621AE_AO_PARAM中的nClockSource时钟源所使用的选项
+        public const Int32 USB5621AE_AO_CLKSRC_LOCAL = 0;     // 本地时钟(通常为本地晶振时钟OSCCLK),也叫内部时钟
+        public const Int32 USB5621AE_AO_CLKSRC_CLKIN = 1;      // 外部时钟(由连接器CN2上的DIO2/CLKIN复用输入)
+
+        // AO硬件参数结构体USB5621AE_AO_PARAM中的nDTriggerDir触发方向所使用的选项
+        public const Int32 USB5621AE_AO_TRIGDIR_FALLING = 0;    // 下降沿/低电平
+        public const Int32 USB5621AE_AO_TRIGDIR_RISING = 1;       // 上升沿/高电平
+        public const Int32 USB5621AE_AO_TRIGDIR_CHANGE = 2;
+
+        // #################### AO工作状态结构体USB5621AE_AO_STATUS描述 #####################
+        public struct USB5621AE_AO_STATUS
+        {
+            public UInt32 bTaskDone;                        // 生成任务完成标志, =TRUE:表示生成任务完成, =FALSE:表示生成任务未完成,正在进行中
+            public UInt32 bTriggered;                         // 触发标志, =TRUE:表示已被触发, =FALSE:表示未被触发(即正等待触发)
+
+            public UInt32 nTaskState;                         // 生成任务状态, =1:正常, 其它值表示有异常情况
+            public UInt32 nAvailSampsPerChan;         // 可写点数,最好等它大于参数nWriteSampsPerChan时才能调用AO_WriteAnalog()写入采样数据
+            public UInt32 nMaxAvailSampsPerChan;  // 自AO_StartTask()后出现过的最大可写点数,状态值范围[0, nBufSampsPerChan],它是为监测采集软件性能而提供,如果此值越趋近于1,则表示意味着性能越高,越不易出现溢出丢点的可能
+            public UInt32 nBufSampsPerChan;           // 每通道缓冲区大小(采样点数)
+            public UInt64 nSampsPerChanAcquired;   // 每通道已采样点数(自开始生成任务(AO_StartTask())之后所采样的点数),这个只是给用户的统计数据
+
+            public UInt32 nHardUnderflowCnt;           // 硬件缓冲下溢次数(在不下溢情况下恒等于0)
+            public UInt32 nSoftUnderflowCnt;             // 软件缓冲下溢次数(在不下溢情况下恒等于0)
+            public UInt32 nInitTaskCnt;                       // 初始化生成任务的次数(即调用AO_InitTask()的次数)
+            public UInt32 nReleaseTaskCnt;                // 释放生成任务的次数(即调用AO_ReleaseTask()的次数)
+            public UInt32 nStartTaskCnt;                     // 开始生成任务的次数(即调用AO_StartTask()的次数)
+            public UInt32 nStopTaskCnt;                      // 停止生成任务的次数(即调用AO_StopTask()的次数)
+            public UInt32 nTransRate;                          // 传输速率, 即每秒传输点数(sps),作为USB及应用软件传输性能的监测信息
+
+            public UInt32 nReserved0;                         // 保留字段(暂未定义)
+            public UInt32 nReserved1;                         // 保留字段(暂未定义)
+            public UInt32 nReserved2;                         // 保留字段(暂未定义)
+            public UInt32 nReserved3;                         // 保留字段(暂未定义)
+            public UInt32 nReserved4;                         // 保留字段(暂未定义)
+        }
+
+        // #################### AO主要信息结构体(USB5621AE_AO_MAIN_INFO) #######################
+        public struct USB5621AE_AO_MAIN_INFO
+        {
+            public UInt32 nChannelCount;             // AO通道数量
+            public UInt32 nSampRangeCount;       // AO采样范围挡位数量
+            public UInt32 nSampGainCount;          // AO增益挡位数量
+            public UInt32 nCouplingCount;            // AO耦合挡位数量
+            public UInt32 nImpedanceCount;         // AO阻抗的挡位数量
+            public UInt32 nDepthOfMemory;        // AO板载存储器深度(点数)
+            public UInt32 nSampResolution;          // AO采样分辨率(如=8表示8Bit; =12表示12Bit; =14表示14Bit; =16表示16Bit)
+            public UInt32 nSampCodeCount;         // AO采样编码数量(如256, 4096, 16384, 65536)
+            public UInt32 nTrigLvlResolution;        // 触发电平分辨率(如=8表示8Bit; =12表示12Bit; =16表示16Bit)
+            public UInt32 nTrigLvlCodeCount;       // 触发电平编码数量(如256, 4096)
+
+            public UInt32 nReserved0;                  // 保留字段(暂未定义)
+            public UInt32 nReserved1;                  // 保留字段(暂未定义)
+            public UInt32 nReserved2;                  // 保留字段(暂未定义)
+            public UInt32 nReserved3;                  // 保留字段(暂未定义)
+        }
+
+        // #################### AO采样范围信息结构体(USB5621AE_AO_VOLT_RANGE_INFO) #######################
+        public struct USB5621AE_AO_VOLT_RANGE_INFO
+        {
+            public UInt32 nSampleRange;          // 当前采样范围挡位号
+            public UInt32 nReserved0;               // 保留字段(暂未定义)
+            public double fMaxVolt;                   // 采样范围的最大电压值,单位:伏(V)
+            public double fMinVolt;                    // 采样范围的最小电压值,单位:伏(V)
+            public double fAmplitude;                // 采样范围幅度,单位:伏(V)
+            public double fHalfOfAmp;             // 采样范围幅度的二分之一,单位:伏(V)
+            public double fCodeWidth;               // 编码宽度,单位:伏(V), 即每个单位码值所分配的电压值
+            public double fOffsetVolt;                // 偏移电压,单位:伏(V),一般用于零偏校准
+            public double fOffsetCode;              // 偏移码值,一般用于零偏校准,它代表的电压值等价于fOffsetVolt
+            public SByte strDesc0;                      // 采样范围字符描述,如"±10V", "0-10V"等
+            public SByte strDesc1;
+            public SByte strDesc2;
+            public SByte strDesc3;
+            public SByte strDesc4;
+            public SByte strDesc5;
+            public SByte strDesc6;
+            public SByte strDesc7;
+            public SByte strDesc8;
+            public SByte strDesc9;
+            public SByte strDesc10;
+            public SByte strDesc11;
+            public SByte strDesc12;
+            public SByte strDesc13;
+            public SByte strDesc14;
+            public SByte strDesc15;
+
+            public UInt32 nPolarity;                   // 采样范围的极性(0=双极性BiPolar, 1=单极性UniPolar)
+            public UInt32 nCodeCount;              // 原码数量
+            public Int32 nMaxCode;                   // 原码最大值
+            public Int32 nMinCode;                   // 原码最小值
+
+            public UInt32 nReserved1;                         // 保留字段(暂未定义)
+            public UInt32 nReserved2;                         // 保留字段(暂未定义)
+            public UInt32 nReserved3;                         // 保留字段(暂未定义)
+            public UInt32 nReserved4;                         // 保留字段(暂未定义)
+        }
+
+        // 结构体AO_VOLT_RANGE_INFO的数据成员Polarity所用的采样范围极性选项
+        public const Int32 USB5621AE_AO_POLAR_BIPOLAR = 0;        // 双极性
+        public const Int32 USB5621AE_AO_POLAR_UNIPOLAR = 1;     // 单极性
+
+        // #################### AO速率信息结构体(USB5621AE_AO_SAMP_RATE_INFO) #######################
+        public struct USB5621AE_AO_SAMP_RATE_INFO
+        {
+            public double fMaxRate;             // 单通道最大采样速率(sps),多通道时各通道平分最大采样率
+            public double fMinRate;              // 单通道最小采样速率(sps),多通道时各通道平分最小采样率
+            public double fTimerBase;           // 时钟基准(即板载晶振频率)单位:Hz
+            public UInt32 nDivideMode;        // 分频模式,0=整数分频(INTDIV), 1=DDS分频(DDSDIV)
+
+            public UInt32 nRateType;            // 速率类型,指fMaxRate和fMinRate的类型, =0:表示为所有采样通道的总速率, =1:表示为每个采样通道的速率
+            public UInt32 nReserved1;           // 保留字段(暂未定义)
+            public UInt32 nReserved2;           // 保留字段(暂未定义)
+        }
+
+        // ###################### CTR工作参数结构体(USB5621AE_CTR_PARAM) #######################
+        public struct USB5621AE_CTR_PARAM
+        {
+            public UInt32 nGateMode;		// 门控模式(Gate Mode), 其取值范围为[0, 5]
+            public UInt32 nInitValue;		// 计数器初始值
+
+            public UInt32 nReserved0;		// 保留字段(暂未定义)
+            public UInt32 nReserved1;		// 保留字段(暂未定义)
+            public UInt32 nReserved2;		// 保留字段(暂未定义)
+            public UInt32 nReserved3;		// 保留字段(暂未定义)
+
+        }
+
+        // CTR硬件参数结构体USB5621AE_CTR_PARAM中的nPulseDir脉冲方向所使用的选项
+        //public const Int32 USB5621AE_CTR_PULSEDIR_FALLING = 0;    // 下边沿
+        //public const Int32 USB5621AE_CTR_PULSEDIR_RISING = 1;       // 上边沿
+        //public const Int32 USB5621AE_CTR_PULSEDIR_CHANGE = 2;    // 变化(上下边沿均有效)
+
+        // CTR硬件参数结构体USB5621AE_CTR_PARAM中的nGateMode门控方式所使用的选项
+
+         public const UInt32 USB5621AE_CTR_GATEMODE_POSITIVE_0	=0;	// 计数结束产生中断: GATE高电平时计数,低电平时停止计数,计数时重新写入新的初值,按新值计数
+												// 减法计数时,计数到0时OUT为1;
+
+         public const UInt32 USB5621AE_CTR_GATEMODE_RISING_1 = 1;	// 可编程单拍脉冲:GATE上边沿触发计数,计数中出现GATE上升沿重新装入初值计数, 当写入初值时OUT为1,当开始计数时OUT为0, 减法计数时,计数到0时OUT为1
+
+         public const UInt32 USB5621AE_CTR_GATEMODE_POSITIVE_2 = 2;	// 频率发生器:GATE高电平时计数,低电平时停止计数,若计数中改变初值,下次有效,计数期间OUT为1, 减法计数时,计数到0后输出一个周期的0,并重新装入计数值计数;
+
+         public const UInt32 USB5621AE_CTR_GATEMODE_POSITIVE_3 = 3;	// 方波发生器:GATE高电平时计数,低电平时停止计数,若计数中改变初值,下次有效, 计数期间OUT为1, 减法计数时,计数到0后输出一个周期的0,并重新装入计数值计数
+
+         public const UInt32 USB5621AE_CTR_GATEMODE_POSITIVE_4 = 4;	// 软件触发选通:GATE高电平时计数,低电平时停止计数,若计数中改变初值,本次有效,写
+												// 入初值OUT为1, 减法计数时,计数到0后输出一个周期的低电平信号;
+
+         public const UInt32 USB5621AE_CTR_GATEMODE_RISING_5 =	5;	// 硬件触发选通:GATE上边沿触发计数,计数中出现GATE上升沿重新装入初值计数, 写入初
+												// 值OUT为1, 减法计数时,计数到0后输出一个周期的低电平信号;
+
+
+
+        // #################### DIO主要信息结构体(USB5621AE_DIO_PARAM) #######################
+        //public struct USB5621AE_DIO_PARAM
+        //{
+         //   public Byte bOutputEn0;       // 输出方向允许(Output Enable),bOutputEn[n]=0:输出禁止(即为输入),=1:输出允许(即输入无效)。(默认方向为输入)
+         //   public Byte bOutputEn1;       // 但与其复用的CTRSRC,DTR,CLKIN,CLKOUT有效时,则与其相应的DIO方向控制自动失效
+         //   public Byte bOutputEn2;
+         //   public Byte bOutputEn3;
+         //   public Byte bOutputEn4;
+         //   public Byte bOutputEn5;
+         //   public Byte bOutputEn6;
+          //  public Byte bOutputEn7;
+
+           // public UInt32 nReserved0;		// 保留字段(暂未定义)
+           // public UInt32 nReserved1;		// 保留字段(暂未定义)
+          //  public UInt32 nReserved2;		// 保留字段(暂未定义)
+      //  }
+
+        // ################################ 函数错误信息 ################################
+         public const UInt32 ERROR_NO_AVAILABLE_SAMPS = (0xE0000000 + 1); // 无可读段
+         public const UInt32 ERROR_TASK_FAIL = (0xE0000000 + 2); // 采样任务失败
+         public const UInt32 ERROR_RATE_OVER_RANGE = (0xE0000000 + 3); // 采样速率超限
+
+        // ################################ 设备驱动接口申明 ################################
+
+        // ################################ DEV设备对象管理函数 ################################
+        //[DllImport("USB5621AE_64.DLL")]
+        //public static extern IntPtr USB5621AE_DEV_Create(					// 创建设备对象句柄(hDevice), 成功返回实际句柄,失败则返回INVALID_HANDLE_VALUE(-1),可调用GetLastError()分析错误原因
+                                                                                   // UInt32 nDeviceIdx,			// 设备序号(逻辑序号或物理序号, 具体使用哪种序号由参数bUsePhysIdx决定)
+        [DllImport("USB5621AE_64.DLL")]                                                                            //Boolean bUsePhysIdx);		// 是否使用物理序号, =TRUE:使用物理序号, =FALSE:使用逻辑序号	
+        public static extern IntPtr USB5621AE_DEV_CreateA(
+                                    String strIPAddr,			// IP地址
+                                    Int32 nSendTimeout,	// 发送超时时间
+                                    Int32 nRecvTimeout);	// 接收超时时间
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern IntPtr USB5621AE_DEV_CreateW(
+                                    String strIPAddr,			// IP地址
+                                    Int32 nSendTimeout,	// 发送超时时间
+                                    Int32 nRecvTimeout);	// 接收超时时间
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_GetNetCfgA(					// 获得设备的以太网设置参数
+                                    IntPtr hDevice,				// 设备句柄
+                                    ref DEVICE_NET_INFO_A pNetInfo);// 参数结构体
+        [DllImport("USB5621AE_64.DLL")]
+	    public static extern bool USB5621AE_GetNetCfgW(						// 获得设备的以太网设置参数
+                                    IntPtr hDevice,				// 设备句柄
+                                    ref DEVICE_NET_INFO_W pNetInfo);// 参数结构体
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_SetNetCfgA(					// 设置以太网参数
+                                    IntPtr hDevice, 			// 设备句柄
+                                    ref DEVICE_NET_INFO_A pNetInfo);// 参数结构体
+        [DllImport("USB5621AE_64.DLL")]
+	    public static extern bool USB5621AE_SetNetCfgW(						// 设置以太网参数
+                                    IntPtr hDevice, 			// 设备句柄
+                                    ref DEVICE_NET_INFO_W pNetInfo);// 参数结构体
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_DEV_Release(IntPtr hDevice);		// 释放设备对象(关键函数)
+
+        // ################################ AI模拟量输入实现函数 ################################
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AI_InitTask(				// 初始化采集任务(Initialize Task)
+                                                                            IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                            ref USB5621AE_AI_PARAM pAIParam,			// AI工作参数, 它仅在此函数中决定硬件初始状态和各工作模式,可以事先由AI_VerifyParam()进行参数校验
+                                                                            IntPtr pSampEvent);			// 返回采样事件对象句柄,当设备中出现可读数据段时会触发此事件,参数=NULL,表示不需要此事件句柄
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AI_StartTask(IntPtr hDevice);		// 开始采集任务
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AI_SendSoftTrig(IntPtr hDevice);		// 发送软件触发事件(Send Software Trigger),软件触发也叫强制触发
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AI_GetStatus(				// 取得AI各种状态
+                                                                            IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                            ref USB5621AE_AI_STATUS pAIStatus);
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AI_WaitUntilTaskDone(				// 采集任务结束前等待,返回TRUE表示采集任务结束
+                                                                                              IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                                              double fTimeout);        // 用于等待的时间,单位:秒(S)
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AI_ReadAnalog(				// 采集任务结束前等待,返回TRUE表示采集任务结束
+                                                                                     IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                                     double[] fAnlgArray,  // 模拟数据数组(电压数组),用于返回采样的电压数据,取值区间由各通道采样时的采样范围决定(单位:V)
+                                                                                     UInt32 nReadSampsPerChan,  // 每通道请求读取的点数(单位:点)
+                                                                                      ref UInt32 pSampsPerChanRead,  // 返回每通道实际读取的点数(单位:点), =NULL,表示无须返回
+                                                                                      ref UInt32 pAvailSampsPerChan,  // 任务中还存在的可读点数, =NULL,表示无须返回
+                                                                                      double fTimeout);        // 超时时间,单位:秒(S)
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AI_ReadBinary(				// 采集任务结束前等待,返回TRUE表示采集任务结束
+                                                                                     IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                                     UInt16[] nBinArray,  // 二进制数据数组(原码数组),用于返回采样的原码数据,取值区间为[-32768, 32767]
+                                                                                     UInt32 nReadSampsPerChan,  // 每通道请求读取的点数(单位:点)
+                                                                                      ref UInt32 pSampsPerChanRead,  // 返回每通道实际读取的点数(单位:点), =NULL,表示无须返回
+                                                                                      ref UInt32 pAvailSampsPerChan,  // 任务中还存在的可读点数, =NULL,表示无须返回
+                                                                                      double fTimeout);        // 超时时间,单位:秒(S)
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AI_StopTask(IntPtr hDevice);		// 停止AI采集任务
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AI_ReleaseTask(IntPtr hDevice);		// 释放采集任务
+
+        // ========================= AI辅助操作函数 =========================
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AI_GetMainInfo(				// 获得AI主要信息
+                                                                            IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                            ref USB5621AE_AI_MAIN_INFO pMainInfo); // 获得AI主要信息
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AI_GetVoltRangeInfo(				// 采集任务结束前等待,返回TRUE表示采集任务结束
+                                                                                     IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                                     UInt32 nChannel,  //AI物理通道号[0, 31]
+                                                                                      UInt32 nSampleRange,  // 采样范围选择[0, 3]
+                                                                                      ref USB5621AE_AI_VOLT_RANGE_INFO pRangeInfo);       // 采样范围信息
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AI_GetVoltGainInfo(			// 获得增益的各种信息(幅度、分辨率、极性)
+                                    IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                    UInt32 nChannel,			// AI物理通道号[0, 15]
+                                    UInt32 nSampleGain,		// 增益选择[0, 3]
+                                    ref USB5621AE_AI_VOLT_GAIN_INFO pGainInfo); // 增益信息
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AI_GetRateInfo(				// 获得AI主要信息
+                                                                            IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                            ref USB5621AE_AI_SAMP_RATE_INFO pRateInfo); // 采样速率信息
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AI_ScaleBinToVolt(				// 根据指定采样范围将采样原码数据量化成电压数据,返回实际量化的点数
+                                                                                     ref USB5621AE_AI_VOLT_RANGE_INFO pRangeInfo,			// 当前转换数据需要的采样范围信息
+                                                                                     IntPtr pGainInfo,  // 当前转换数据需要的采样增益信息(若于=NULL,表示不使用增益)
+                                                                                     double[] fVoltArray,  // 电压数据数组,用于返回量化后的电压数据,单位V
+                                                                                      ref Int16 nBinArray,  // 二进制原码数组,用于传入量化前的原码数据,取值区间为[-32768, 32767], (单指某个通道的连续数据)
+                                                                                      UInt32 nScaleSamps,  // 请求量化的采样点数
+                                                                                      ref UInt32 pSampsScaled);        // 返回实际量化的采样点数, =NULL,表示无须返回
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AI_ScaleVoltToBin(				// 根据指定采样范围将电压数据量化成二进制原码数据,返回实际量化的点数
+                                                                                     ref USB5621AE_AI_VOLT_RANGE_INFO pRangeInfo,			// 当前转换数据需要的采样范围信息
+                                                                                     IntPtr pGainInfo,  // 当前转换数据需要的采样增益信息(若于=NULL,表示不使用增益)
+                                                                                     Int16[] nBinArray,  // 二进制原码数组,用于传入量化前的原码数据,取值区间为[-32768, 32767], (单指某个通道的连续数据)
+                                                                                      double[] fVoltArray,  // 电压数据数组,用于返回量化后的电压数据,单位V
+                                                                                      UInt32 nScaleSamps,  // 请求量化的采样点数
+                                                                                      ref UInt32 pSampsScaled);        // 返回实际量化的采样点数, =NULL,表示无须返回
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AI_VerifyParam(				// 校验AI工作参数(Verify Parameter),建议在初始化AI参数前调用此函数校验各参数合法性
+                                                                            IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                            ref USB5621AE_AI_PARAM pAIParam); // 待校验的AI工作参数
+
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AI_LoadParam(				// 从USB5621AE.ini中加载AI参数
+                                                                            IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                            ref USB5621AE_AI_PARAM pAIParam); // 待校验的AI工作参数
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AI_SaveParam(				// 保存AI参数至USB5621AE.ini
+                                                                            IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                            ref USB5621AE_AI_PARAM pAIParam);
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AI_ResetParam(				// 保存AI参数至USB5621AE.ini将当前AI参数复位至出厂值
+                                                                            IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                            ref USB5621AE_AI_PARAM pAIParam);
+
+        // ################################ AO模拟量输出实现函数 ################################
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AO_InitTask(				// 初始化生成任务(Initialize Task)
+                                                                            IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                            ref USB5621AE_AO_PARAM pAOParam,   // AO工作参数, 它仅在此函数中决定硬件初始状态和各工作模式,可以事先由AO_VerifyParam()进行参数校验
+                                                                            IntPtr pSampEvent);  // 返回采样事件对象句柄,当设备中出现可读数据段时会触发此事件,参数=NULL,表示不需要此事件句柄
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AO_StartTask(				// 开始生成任务
+                                                                            IntPtr hDevice);
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AO_SendSoftTrig(				// 发送软件触发事件(Send Software Trigger),软件触发也叫强制触发
+                                                                                       IntPtr hDevice);
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AO_GetStatus(				// 取得AO各种状态
+                                                                                    IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                                    ref USB5621AE_AO_STATUS pAOStatus);
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AO_WaitUntilTaskDone(				// 生成任务结束前等待,返回TRUE表示生成任务结束
+                                                                                                IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                                                double fTimeout);       // 超时时间,单位:秒(S)
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AO_WriteAnalog(				//  向生成任务中写入AO输出的模拟量电压数据(Write analog data to the task)
+                                                                                     IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                                     UInt16 [] nBinArray,  // AO0、AO1电压混合缓冲区,存放AO的模拟(电压)数据,取值区间由各通道采样时的采样范围决定(单位:V)
+                                                                                     UInt32 nWriteSampsPerChan,  // 每通道请求写入的点数(单位:点)
+                                                                                     ref UInt32 pSampsPerChanWritten,  //  返回每通道实际写入的点数(单位:点), =NULL,表示无须返回
+                                                                                     ref UInt32 pAvailSampsPerChan,  // 返回当前可写入的采样点数, =NULL,表示无须返回
+                                                                                     double fTimeout);        // 超时时间,单位:秒(S)
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AO_WriteBinary(				// 向生成任务中写入AO输出的二进制原码数据(Write binary data to the task)
+                                                                                     IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                                     UInt16[] nBinArray,  // AO0、AO1原码混合缓冲区,用于返回采样的原码数据,取值区间为[-32768, 32767]
+                                                                                     UInt32 nWriteSampsPerChan,  // 每通道请求写入的点数(单位:点)
+                                                                                     ref UInt32 pSampsPerChanWritten,  //  返回每通道实际写入的点数(单位:点), =NULL,表示无须返回
+                                                                                     ref UInt32 pAvailSampsPerChan,  // 返回当前可写入的采样点数, =NULL,表示无须返回
+                                                                                     double fTimeout);        // 超时时间,单位:秒(S)
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AO_ReadbackAnalog(				//  回读所有AO通道的当前生成的模拟量数据(电压数据序列)(Read back analog data from the task)
+                                                                                                IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                                                double [] fAnlgArray);       // fAnlgArray[0]=AO0电压数据,fAnlgArray[1]=AO1电压数据, 取值区间由相应通道的采样范围决定
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AO_ReadbackBinary(				//  回读所有AO通道的当前生成的模拟量数据(二进制原码数据序列)(Read back binary data from the task)
+                                                                                             IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                                             UInt16[] nBinArray);       // nBinArray[0]=AO0原码数据,nBinArray[1]=AO1原码数据, 取值区间[-32768, 32767]
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AO_StopTask(				// 停止生成任务
+                                                                                   IntPtr hDevice);
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AO_ReleaseTask(				// 释放生成任务
+                                                                                        IntPtr hDevice);
+
+        // ========================= AO辅助操作函数 =========================
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AO_GetMainInfo(				// 获得AO的主要信息
+                                                                                        IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                                        ref USB5621AE_AO_MAIN_INFO pMainInfo);       // 获得AO主要信息
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AO_GetVoltRangeInfo(				// 获得采样范围的各种信息(幅度、分辨率、极性)
+                                                                                                IntPtr hDevice,                   // 设备对象句柄,它由DEV_Create()函数创建
+                                                                                                UInt32 nChannel,                // AO物理通道号
+                                                                                                UInt32 nSampleRange,        // 采样范围选择[0, 0]
+                                                                                                ref USB5621AE_AO_VOLT_RANGE_INFO pRangeInfo);       //  采样范围信息
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AO_GetRateInfo(				// 获得采样速率信息
+                                                                                        IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                                        ref USB5621AE_AO_SAMP_RATE_INFO pRateInfo);       // 采样速率信息
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AO_ScaleBinToVolt(				// 根据指定采样范围将采样原码数据量化成电压数据,返回实际量化的点数
+                                                                                            ref USB5621AE_AO_VOLT_RANGE_INFO pRangeInfo,                   // 当前转换数据需要的采样范围信息
+                                                                                            double[] fVoltArray,                // 电压缓冲区,用于返回量化后的电压数据,单位V
+                                                                                            Int16[] nBinArray,        // 二进制原码缓冲区,用于传入量化前的原码数据,取值区间为[-32768, 32767], (单指某个通道的连续数据)
+                                                                                            UInt32 nScaleSamps,    // 请求量化的采样点数
+                                                                                            ref UInt32 pSampsScaled);       //  返回实际量化的采样点数
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AO_ScaleVoltToBin(				// 根据指定采样范围将采样原码数据量化成电压数据,返回实际量化的点数
+                                                                                            ref USB5621AE_AO_VOLT_RANGE_INFO pRangeInfo,                   // 当前转换数据需要的采样范围信息
+                                                                                            Int16[] nBinArray,                // 二进制原码缓冲区,用于传入量化前的原码数据,取值区间为[-32768, 32767], (单指某个通道的连续数据)
+                                                                                            double[] fVoltArray,        // 电压缓冲区,用于返回量化后的电压数据,单位V
+                                                                                            UInt32 nScaleSamps,    // 请求量化的采样点数
+                                                                                            ref UInt32 pSampsScaled);       //  返回实际量化的采样点数
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AO_VerifyParam(				// 校验AO工作参数(Verify Parameter),建议在初始化生成任务前调用此函数校验各参数合法性
+                                                                                        IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                                        ref USB5621AE_AO_PARAM pAOParam);       // 待校验的AO工作参数
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AO_LoadParam(				// 从USB5621AE.ini中加载AO参数
+                                                                                        IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                                        ref USB5621AE_AO_PARAM pAOParam);
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AO_SaveParam(				// 保存AO参数至USB5621AE.ini
+                                                                                    IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                                    ref USB5621AE_AO_PARAM pAOParam);
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_AO_ResetParam(				// 将当前AO参数复位至出厂值
+                                                                                    IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                                    ref USB5621AE_AO_PARAM pAOParam);
+
+        // ############################ CTR计数器函数 ############################
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_CTR_InitTask(				// 初始采集任务
+                                                                                    IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                                    UInt32 nChannel,      // 通道号(本设备仅有1个通道,恒等于0)
+                                                                                    ref USB5621AE_CTR_PARAM pCTRParam);  // 工作参数
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_CTR_StartTask(				// 开始采集任务
+                                                                                    IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                                    UInt32 nChannel);  // 通道号(本设备仅有1个通道,恒等于0)
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_CTR_ReadCounter(				// 读取计数器的当前计数值
+                                                                                        IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                                        UInt32 nChannel,      // 通道号(本设备仅有1个通道,恒等于0)
+                                                                                        ref UInt32 pCountVal);  // 计数值
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_CTR_StopTask(				// 停止(或暂停)采集任务
+                                                                                    IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                                    UInt32 nChannel);  // 通道号(本设备仅有1个通道,恒等于0)
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_CTR_ReleaseTask(				// 释放采集任务
+                                                                                        IntPtr hDevice,			// 设备对象句柄,它由DEV_Create()函数创建
+                                                                                        UInt32 nChannel);  // 通道号(本设备仅有1个通道,恒等于0)
+
+        // ############################ DIO数字量输入输出实现函数 ############################
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_DIO_ReadPort(			// 读数字量端口值(Read Port Data from DI Port)
+									IntPtr hDevice,		// 设备对象句柄,它由DEV_Create()函数创建
+                                    UInt32 nPort,			// 端口号, 取值范围为[0, 1], Port0为单向输入,Port1为单向输出
+                                    ref UInt32 pPortData);	// 返回的端口数据, 有效位Bit[7:0], 读Port0时为DI输入,读Port1时为DO回读
+   
+   
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_DIO_WritePort(                                // 写数字量端口值(Write Digital Port Value)
+                                                                                    IntPtr hDevice,         // 设备对象句柄,它由DEV_Create()函数创建
+                                                                                    UInt32 nPort,            // 端口号, 取值范围为[0, 1]
+                                                                                    UInt32 nPortData);   // 端口数据, 有效位Bit[7:0]
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_DIO_ReadLines(                                         // 读数字量端口值(Read Digital Port Value)
+                                                                                    IntPtr hDevice,                    // 设备对象句柄,它由DEV_Create()函数创建
+                                                                                    UInt32 nPort,                       // 端口号, 取值范围为[0, 1]
+                                                                                    UInt32[] bLineDataArray);   // 线数据缓冲区, 同时返回端口中各线的状态值bLineDataArray[n]=0:表示关(或低)状态, =1表示开(或高)状态
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_DIO_WriteLines(                                         // 写数字量端口值(Write Digital Port Value)
+                                                                                    IntPtr hDevice,                    // 设备对象句柄,它由DEV_Create()函数创建
+                                                                                    UInt32 nPort,                       // 端口号, 取值范围为[0, 1]
+                                                                                    UInt32[] bLineDataArray);   // 线数据缓冲区, 端口中各线的状态值bLineDataArray[n]=0:表示关(或低)状态, =1表示开(或高)状态
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_DIO_ReadLine(                                     // 读线值
+                                                                                    IntPtr hDevice,              // 设备对象句柄,它由DEV_Create()函数创建
+                                                                                    UInt32 nPort,                 // 端口号, 取值范围为[0, 1]
+                                                                                    UInt32 nLine,                 // 线号,取值范围Port0时[0, 7], Port1时[0, 3]
+                                                                                    ref UInt32 pLineData);   // 线数据, 取值0或1 
+
+        [DllImport("USB5621AE_64.DLL")]
+        public static extern bool USB5621AE_DIO_WriteLine(                                     // 写线值
+                                                                                    IntPtr hDevice,              // 设备对象句柄,它由DEV_Create()函数创建
+                                                                                    UInt32 nPort,                 // 端口号, 取值范围为[0, 1]
+                                                                                    UInt32 nLine,                 // 线号,取值范围Port0时[0, 7], Port1时[0, 3]
+                                                                                    UInt32 bLineData);        // 线值,取值0或1
+ }
+}

+ 5 - 0
SCADA_DAQ/Customer/UctFrmMain.xaml.cs

@@ -6,6 +6,7 @@ using SCADA.CommonLib.Data.DIL;
 using SCADA.CommonLib.Data.DIL.MSSql;
 using SCADA.CommonLib.Data.DIL.MySql;
 using SCADA.CommonLib.Data.DIL.Oracle;
+using SCADA_DAQ.Customer.ART;
 using System;
 using System.Collections.Generic;
 using System.IO;
@@ -13,6 +14,7 @@ using System.Linq;
 using System.Threading.Tasks;
 using System.Windows;
 using System.Windows.Media.Animation;
+using static SCADA_DAQ.Customer.ART.USB5621AE;
 
 namespace SCADA_DAQ.Customer
 {
@@ -28,6 +30,9 @@ namespace SCADA_DAQ.Customer
         public UctFrmMain()
         {
             InitializeComponent();
+            var ptr = USB5621AE.USB5621AE_DEV_CreateA("192.168.1.4", 5, 5);
+            var info = new DEVICE_NET_INFO_A();
+            var res = USB5621AE.USB5621AE_GetNetCfgA(ptr, ref info);
         }
     }
 }

+ 6 - 5
SCADA_DAQ/SCADA_DAQ.csproj

@@ -14,16 +14,17 @@
     <Version Condition=" '$(VersionSuffix)' == '' ">0.0.1.0</Version>
     <Version Condition=" '$(VersionSuffix)' != '' ">$(VersionSuffix)</Version>
 
-    <AssemblyName>SCADA_DAQ3.0</AssemblyName>
-    <Title>测试</Title>
-    <Product>SCADA_DAQ</Product>
-    <Company>SCADA_DAQ</Company>
-    <Authors>SCADA_DAQ</Authors>
+    <AssemblyName>86德和盛至设备数据采集分析</AssemblyName>
+    <Title>德和盛至设备数据采集系统</Title>
+    <Product>86德和盛至设备数据采集分析</Product>
+    <Company>佛山市斯科达信息自动化科技有限公司</Company>
+    <Authors>佛山市斯科达自动化科技有限公司</Authors>
 
     <GenerateDocumentationFile>True</GenerateDocumentationFile>
     <PackageIcon>logo.ico</PackageIcon>
     <RepositoryUrl>https://gitee.com/cd200607139/scada_-daq3.0.git</RepositoryUrl>
     <ApplicationIcon>Icon\logo.ico</ApplicationIcon>
+    <Configurations>Debug;Release;86德和盛至设备数据采集分析</Configurations>
   </PropertyGroup>
 
   <ItemGroup>

+ 2 - 2
SCADA_DAQ3.0.sln

@@ -76,8 +76,8 @@ Global
 		{B23AA0A3-CD44-4917-8EBF-F24C33DAB3EB}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{B23AA0A3-CD44-4917-8EBF-F24C33DAB3EB}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{B23AA0A3-CD44-4917-8EBF-F24C33DAB3EB}.Release|Any CPU.Build.0 = Release|Any CPU
-		{61B53CB6-CE0D-4367-B118-5C432057B5C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{61B53CB6-CE0D-4367-B118-5C432057B5C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{61B53CB6-CE0D-4367-B118-5C432057B5C6}.Debug|Any CPU.ActiveCfg = 86德和盛至设备数据采集分析|Any CPU
+		{61B53CB6-CE0D-4367-B118-5C432057B5C6}.Debug|Any CPU.Build.0 = 86德和盛至设备数据采集分析|Any CPU
 		{61B53CB6-CE0D-4367-B118-5C432057B5C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{61B53CB6-CE0D-4367-B118-5C432057B5C6}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection