ucics 物理单位信息 单位类型,比如Time、Freq等。具体定义见文档。 量级,比如k、n,p,M等。具体定义见文档。 物理单位量级 / 标准单位 K 物理单位类型 无效的类型 频率(Hz) 时间(s) 面积(Vs) 采样率(Sa/s) 点数(Sa) 峰峰值(V) 电压 电流(A) db(dB) VV (VV) 百分比(%) 度数(°) 瓦特,功率(W) 未知单位(U) 物理量数值 4Byte align -> 8Bytes, 所有示波器都通过指令"mea:all?;"读取参数测量数据。 读取到的就是 MeaValue v[50] (固定长度), 各参数的位置索引由定义。 测量值 物理单位 是否有效。 0 表示无效; 1表示有效。 是否存在。 0 表示存在; 1表示不存在。 参数测量数据包的通用定义。 最大值 最小值 High(Top)-高电平(顶端值) Middle-中间值 Low(Bottom) - 低电平(底端值) VPP-峰峰值 幅度值 平均值 周期平均值 均方根 周期均方值 面积 周期面积 过冲 预冲 周期 频率 上升时间 下降时间 正脉宽 负脉宽 正占空比 负占空比 上升延时 下升延时 相位 FRR FRF FFR FFF LRF LRR LFR LFF 突发脉冲 固定位50个参数 b0 : SYNC; b1 : channel(CH1); b2 : Trigger SYNC Key Channel Key Trigger Key 模拟C/C++的堆内存的操作:申请、释放、转换 创建指定大小(bytes)的非托管内存空间 创建基于所给字节数组的非托管内存空间。默认数据会被拷贝到非托管内存空间。 托管字节数组 创建基于所给整形数据的非托管内存空间。默认数据会被拷贝到非托管内存空间。 托管整形数组 起始拷贝位置 needCopy = true 时有效 拷贝数量 allocate storage for count elements of type ty 创建基于所给对象数据的非托管内存空间 托管对象数据 true : 拷贝托管字节数组的数据到非托管内存空间; false : 不拷贝 提供Pointer到IntPtr的运算符。 Pointer类型对象 IntPtr 析构器 将内存数据转换所给的结构体类型数据。 要转换的结构体 要转换的结构体 指向非托管内存的指针 非托管内存空间的地址 非托管内存空间的大小(bytes) 通信方式 USB通信 LAN通信 串口通信 信号源的通道号 通道1的编号 通道2的编号 代表所有通道的编号 非通道编号 开关状态,占用1个字节。 关闭状态 打开状态 UCI所有接口返回的状态编码。如果小于0,则代表发生错误;反之,代表正确。 #TODO:检查完整性 没有任何错误 错误(基础编码,所有错误码都在这个编码基础上定义) 资源初始化错误 无效的会话 操作超时 操作失败 不支持的操作 内存空间不足 系统繁忙,无法响应 通信异常,不可逆! 未知的错误 建立连接的字符串地址格式错误 连接还未建立 连接已断开 不支持的通信方式 未发现指定的设备 不支持的设备 需要先执行查询设备的操作 查询网络设备失败 USB设备地址只在执行查询设备操作后才有效, 从UCI库导出的USB设备地址,只是一个列表索引,不是真正的设备地址。 未发现U盘接入 按键已经锁定 命令格式错误 只支持单条命令 一条命令只支持一个属性 不支持的命令 发送命令失败 协议数据格式错误 设备端写文件到flash失败! 未发现有效数据 命令消息错误,请命令参数是否符合协议 无效的表达式 参数错误 参数提供的空间太小 所提供的文件名太长(最长50个字节) 参数所给的数据大小与协议不匹配(防止数据错误) 数字溢出 超出范围 数据未全部读取完 数据校验失败 无效的数据 数据压缩失败 数据解压缩失败 数据传输失败 数据传输失败 拒绝访问 An unspecified error occurred. The file could not be located. All or part of the path is invalid The permitted number of open files was exceeded. There was an attempt to use an invalid file handle The current working directory cannot be removed There are no more directory entries There was an error trying to set the file pointer There was a hardware error SHARE.EXE was not loaded, or a shared region was locked There was an attempt to lock a region that was already locked The disk is full The end of file was reached 写文件到磁盘失败 信号源任意波下载方式 以载波方式加载 以调制波方式加载 将ARB文件写到Flash. UCI读接口()用的读参数。 命令字符串,以'\0'结尾. 具体格式见文档; (废弃)返回的数据量数据,具体意义视具体命令而定; 返回的数据量由接口的返回值确定。 读超时,单位ms,1000 = 1s 附加数据,大多数情况下是不需要的,可设置为IntPtr.Zero. 附加数据大小 UCI写接口的写参数 命令字符串,以'\0'结尾. 具体格式见文档; 返回的数据量数据,具体意义视具体命令而定; 超时 接口SendCommand使用的参数 命令字符串,以'\0'结尾. 具体格式见文档; 命令参数1 命令参数2 超时 写任意波文件的参数 通道号,一般CH1=0,依次类推 任意波(ARB)加载方式 写文件的参数,2个Bytes.(模拟C中的联合体) 预留的数据段 任意波(ARB)文件参数 接口WriteFromFile的接口参数。 命令字符串,以'\0'结尾. 具体格式见文档; 文件路径 指令执行超时,在该时间内指令为完成,就返回! 接口ReadToFile使用的参数 命令字符串,以'\0'结尾. 具体格式见文档; 文件路径 指令执行超时,在该时间内指令为完成,就返回! 最终输出文件的路径 设备按键LED状态数据 Noise按键LED开关状态 UTILTY按键LED开关状态 STORGE按键LED开关状态 RAMP按键LED开关状态 PULSE按键LED开关状态 COUNTER按键LED开关状态 USER按键LED开关状态 DIGTAL按键LED开关状态 HARMONIC按键LED开关状态 DC按键LED开关状态 TRGGER按键LED开关状态 CH2按键LED开关状态 SWAPCH按键LED开关状态 ARB按键LED开关状态 CH1按键LED开关状态 SINE按键LED开关状态 SQUARE按键LED开关状态 通信节点类型 在QParams中是按位与,在Node中取的是enum值。 网络设备类型 USB设备类型 USB设备的描述符 PID VID 地址 4字段数据类型 字段1 字段2 字段3 字段4 IP地址 填充顺序为 f1(192).f2(168).f3(1).f4(253) - 小端模式 分字段存取 32为整数表示的IP地址 LAN口通信的设备描述符 IP地址(字符串类型) IP地址 网络端口(TCPIP连接用的端口号) 查询到的设备节点的参数 通信接口方式 设备名 设备类型( 信号源 = SG, 示波器 = DSO, UPO = UPO;) LAN口参数 USB接口参数 连接字符串 序列号 设备状态 设备显示名称 串口描述 友好名称 端口号 查询参数 要查询的节点类型,按位与,数据取自QueryNodeType定义 eg: QueryNodeType.USB | QueryNodeType.LAN Ports的长度 端口集,指向int类型; PVID数据的长度 存放PID和VID信息的指向INT类型的缓冲区地址, int 类型对应的格式 :PID(高16bit) + VID(低16bit) 查询字符串,nullptr时表示查询所有设备,否则查询指定设备名的设备。 UCI使用的消息类型 与设备建立的连接已经断开 目前只支持LAN口访问的连接的侦测 wParams LAN : 端口号(十进制); Reserved LAN : IP 地址 文件传输消息 wParams 总帧数; lParams 帧计数; -1 : 开始传输; [0,wParams)传输中, 等于wParams传输结束-> UCIMSGProc return -1 : 表示中断传输. USB插拔消息 wParams : 使用低16位,其中,高8位为pid,低8位为vid; lParams : 事件类型, 移除 = 0, 插入 = 1; Reserved : USB插入移除事件的设备的设备名 USB设备事件 USB 设备移除事件 USB 设备接入事件 UCI 消息数据 发送消息的会话ID UCI消息,按解析 消息参数,每个消息的使用意义不一样 消息参数,每个消息的使用意义不一样 保留字段,每个消息的使用意义不一样 带单位的数值 数值 单位量级 带单位的数值 数值 单位量级 万用表和毫伏表数据帧 主显字符串(20个字符) 副显字符串或(20个字符) 主显数值(8Bytes) 副显数值(8Bytes) 标记位(8Bytes) UCI会话(与设备建立会话) 本接口是的面向对象封装版本。 会在UCISession对象释放时自动关闭会话,并做所有资源清理,且提供若干 实用接口。 构造器 一般设置为true,在程序退出时会调用 UCIInterop.ExInstance()进行资源清除。 析构器 打开设备,建立会话。 设备地址。获取方式:
1、可以通过查询接口获取;
2、也可以通过查看文档获取。
3、使用提供的示例程序查询获取
超时。在该时间内指令未完成,就返回超时错误! 具体描述,请查看说明。 static Session _com = new Session(true); //... var r = _com.Open("[C:DSO][D:DSO-E][T:USB][PID:0x5537][VID:0x4348][EI:0x82][EO:0x2][CFG:1][I:0][addr:0]"); if (!OutputResult(r, "打开设备")){return false;} //... static bool OutputResult(int r, string msg) { string s = "[" + msg + "]"; if (Session.Error(r)) { s += string.Format("失败,错误码:{0},错误信息:{1}", r, _com.GetLastError()); } else { s += "成功!"; } Console.WriteLine(s); return r >= 0; }
打开交换机 交换机地址 超时。在该时间内指令未完成,就返回超时错误! 具体描述,请查看说明。 内部使用接口 关闭会话 在设备未打开时调用不会执行任何操作。 获取最近一次调用UCI接口后的反馈信息。 反馈的文本字符串,与此描述对应的状态码可以查看 返回的描述信息,可以设置中文和英文两个版本,设置方式如下: //设置为中文: UCIInterop.SetAttribute(UCIInterop.InvalidSession,"lang:zh-Hans;", null, 0); //设置为英文: UCIInterop.SetAttribute(UCIInterop.InvalidSession, "lang:en-US;", null, 0); 示例代码参见 写数据(字节流,基础接口) 指令字符串,请查阅各机型编程手册获取 要写到设备的字节流数据,如果是内置类型(如int等), 可以使用转换: int v = 10; byte[] arrayV = BitConverter.GetBytes(v); 指令执行超时,在该时间内指令为完成,就返回! 查看说明。 写数据(纯指令文本) 指令字符串,请查阅各机型编程手册获取 指令执行超时,在该时间内指令为完成,就返回! 查看说明。 写数据(short类型) 指令字符串,请查阅各机型编程手册获取 short 类型数据 指令执行超时,在该时间内指令为完成,就返回! 查看说明。 写数据(double类型) 指令字符串,请查阅各机型编程手册获取 double 类型数据 指令执行超时,在该时间内指令为完成,就返回! 查看说明。 写数据(int类型) 指令字符串,请查阅各机型编程手册获取 int 类型数据 指令执行超时,在该时间内指令为完成,就返回! 查看说明。 写数据(任何类型) 数据类型,struct 或者内置类型 指令字符串,请查阅各机型编程手册获取 写入的数据 指令执行超时,在该时间内指令为完成,就返回! 查看说明。 适用于结构体等类型数据的写操作。 也可以使用,但必须先使用 将结构体转换为Byte[] 读数据(基础接口) 指令字符串,请查阅各机型编程手册获取 接收数据的缓冲区 超时。在该时间内指令未完成,就返回超时错误! 具体描述,请查看说明。 如果需要将读取到的字节流转换为其它常见的数据类型,请使用 类提供的方法进行转换。 //打包读取所有参数测量结果--适用于所有示波器 //... static Session _com = new Session(true); //... //固定的50个参数,一个参数8Bytes,共400Bytes byte[] allMeaBytes = new byte[50 * 8]; r = _com.Read("mea:all?;", allMeaBytes); if (r > 0) { //转换为结构体 uci.Model.mea.MeaValue[] allMea = new uci.Model.mea.MeaValue[50]; uci.Utility.ByteArrayToStructArray(allMeaBytes, ref allMea, 50); } 读数据(dobule类型) 指令字符串,请查阅各机型编程手册获取 要读取的double类型数据 超时。在该时间内指令未完成,就返回超时错误! 具体描述,请查看说明。 内部使用了BitConverter.ToDouble(byte[], 0) 将Byte[]转换为double 读数据(int类型) 指令字符串,请查阅各机型编程手册获取 要读取的int类型数据 超时。在该时间内指令未完成,就返回超时错误! 具体描述,请查看说明。 内部使用了BitConverter.ToInt32(byte[], 0) 将Byte[]转换为int 读数据(short类型) 指令字符串,请查阅各机型编程手册获取 要读取的short类型数据 超时。在该时间内指令未完成,就返回超时错误! 具体描述,请查看说明。 内部使用了BitConverter.ToInt16(byte[], 0) 将Byte[]转换为short 读取数据(泛型版本,支持内置类型、结构体数据)(结构体大小必须是确定的) 内置类型或结构体类型,必须是确定的已经序列化的结构体(大小是确定的)。 指令字符串,请查阅各机型编程手册获取 要读取的数据 超时。在该时间内指令未完成,就返回超时错误! 具体描述,请查看说明。 适用于读取结构体数据,比如的大小就是确定的。 写文件 指令字符串 要发送的文件路径 指令执行超时(ms),在该时间内指令为完成,就返回! 具体描述,请查看说明。 读文件 读文件参数 具体描述,请查看说明。 判断接口返回值是否错误 接口返回值 true : 正确; false : 错误 判断接口返回值是否正确 接口返回值 true : 正确; false : 错误 (内部)制作远程访问指令文本 通用UCI指令文本,与具体机型对应。 远程访问的类型 超时。在该时间内指令未完成,就返回超时错误! 数据长度 返回制作好的指令文本 获取会话ID 设备地址,只有设备被打开时,才会存在。 当前设备是否已经打开 是否时交换机通信模式(普通设备通信无需理会) UCIInterop类是对uci.dll导出的C语言接口的适配。
基本会话接口请结合 使用
无效的会话ID 打开设备,建立会话。 设备地址。获取方式:
1、可以通过查询接口获取;
2、也可以通过查看文档获取。
3、使用提供的示例程序查询获取
返回的会话ID 超时(ms)。在该时间内指令未完成,就返回超时错误! 具体描述,请查看说明。 请参考
查询设备(私有,不公开,因为参数类型对于CS环境而言过于抽象,此即可与C接口直接对应) 查询操作的参数 输出数据的缓冲区地址 输出数据的缓冲区大小(Bytes) 具体描述,请查看说明。 查询设备 要查询的设备信息 接收查询结果的节点数组 _nodes的个数 超时 小于0:错误; >=0 查询到的设备个数。 查询文本串的格式是:“{通信类型名称 : 设备参数 ;}”
每个通信类型数据以';'结尾;':'之前是节点名,节点名是内置的,网络通信是"LAN",USB通信是"USB"。
LAN通信的参数是端口号,以','分割.
USB通信的参数是PID(第一个)和VID(第二个),每组数据以','号分割,PID和VID以'&'分割。
示例:
string msg = "LAN:4162,5000;USB:0x1234&0x5345,0x7777&0x5345;" UCI接口查询是要指定要查询的设备信息后,才可查询!
目前支持的全部USB设备:
示波器、信号源和电源:
"USB:0x1234&0x5345,0x7777&0x5345,0x0834&0x5656,0x5537&0x4348;"
万用表(HID)
"USB:0xE008&0x1A86,0xEA80&0x10C4;"
目前支持的LAN口设备:
8000 : UTG2000A&UTG7000B 系列;
5000 : UPO2000S&UPO7000Z 系列;
4162 : UTG4000A&UTG8000D 系列
18191: UTP3000C&UTP8000M 系列
"LAN:5000,4162,8000,18191;"
请注意:串口需要使用接口: 单独查询。
string queryMsg = "USB:0x1234&0x5345,0x7777&0x5345,0x0834&0x5656,0x5537&0x4348"; //查询USB设备 //queryMsg += ";LAN:4162,5000";//查询网络设备 queryMsg += ";"; uci.Node[] nodes = new uci.Node[10]; int count = UCIInterop.QueryNodesX(queryMsg, nodes, nodes.Length, 2000); if (count > 0) { Console.WriteLine("查询到的满足条件的USB设备数量:{0}", count); for (int i = 0; i < count; i++) { Console.WriteLine("[{0}]:{1}", i, nodes[i].UCIAddr); } } else { OutputResult(count, "查询设备"); }
查找串口 接收端口描述的数据地址,调用者只需要做初始化即可。 _nodes的个数 具体描述,请查看说明。 此查询不包括任何的协议,只是查询串口。如果要查询指定协议的设备,请遍历打开串口 并使用指定协议进行验证。 uci.COMPort[] comPorts = new uci.COMPort[10]; count = UCIInterop.QueryCOMPort(comPorts, comPorts.Length); if (count > 0) { Console.WriteLine("Ports:{0}", count); for (int i = 0; i < count; i++) { Console.WriteLine("{0} - COM{1} : {2}", i, comPorts[i].Port, comPorts[i].FriendlyName); } } else if (count == 0) { Console.WriteLine("未查询到任何串口设备"); } else { OutputResult(count, "查询串口设备"); } //* Ports:1 //* 0 - COM3 : Silicon Labs CP210x USB to UART Bridge (COM3) 写数据。 可以使用简化版本的接口: 会话ID,由获得 接口参数 要写入的数据 数据长度 具体描述,请查看说明。 写数据。 是的非封装版本。 会话ID,由获得 指令字符串 超时(ms)。在该时间内指令未完成,就返回超时错误! 要写入的数据 数据长度 具体描述,请查看说明。 发送指令 会话ID,由获得 指令参数 具体描述,请查看说明。 具体哪些指令支持此接口,请参考各机型文档。 读参数。请使用 会话ID,由获得 读接口参数 接收数据的缓冲区 接收数据的缓冲区的长度 具体描述,请查看说明。 读参数(的参数未封装版本) 会话ID,由获得 读指令文本 超时(ms)。在该时间内指令未完成,就返回超时错误! 接收数据的缓冲区 接收数据的缓冲区的长度 具体描述,请查看说明。 可参考 关闭会话 会话ID,由获得 具体描述,请查看说明。 写文件到设备 会话ID,由获得 写文件参数 具体描述,请查看说明。 写文件到设备,是参数非封装接口 会话ID,由获得 指令字符串 要发送的文件路径 指令执行超时(ms),在该时间内指令为完成,就返回! 具体描述,请查看说明。 读文件 会话ID,由获得 读文件参数 具体描述,请查看说明。 写属性。 会话ID,由获得, 如果使用表示写的是全局属性。 属性指令文本 属性参数数据 属性参数数据长度(字节) 具体描述,请查看说明。 返回的描述信息,可以设置中文和英文两个版本,设置方式如下: //设置为中文: UCIInterop.SetAttribute(UCIInterop.InvalidSession,"lang:zh-Hans;", null, 0); //设置为英文: UCIInterop.SetAttribute(UCIInterop.InvalidSession, "lang:en-US;", null, 0); 订阅设备更改通知。设备在接入和移除时会触发改通知。 uci_SetAttribute(UCIInterop.InvalidSession, "devchange:1;", null, 0); 注意:需要使用 订阅通知。 添加事件订阅 委托签名请见 目前默认返回0. 获取最近一次调用UCI接口后的反馈信息。 详细描述请参考: 反馈的文本字符串,与此描述对应的状态码可以查看 (内部使用) 得到错误描述。原始接口,不要直接使用。 请使用 (内部)获取单位类型编码对应的单位名 单位类型编码,编码定义见 物理单位名,也可以参考的定义自己建表查找。 将当前单位的数值自动转换到合适的单位类型,以使数值小于进制。比如2300Hz,转换后就是2.3kHz 当前值 当前单位编码 进制,一般为1000,比如频率的进制是1000 返回物理量(数值+单位量级) 将当前单位的数值转换到指定的单位。 当前数值 当前单位编码 要转换到的单位编码 进制,一般为1000,比如频率的进制是1000 返回转换后的数值,比如2.3KHz 转换为Hz就是2300Hz 注意单位编码必须如EScale定义的,连续递增的量。 获取单位类型编码对应的单位名 单位类型编码,编码定义见 物理单位名,也可以参考的定义自己建表查找。 在主程序退出之前调用本接口以清除uci.dll内部资源。 本接口只是针对C#接口使用。否则在退出时会有异常出现。 转换PID和VID为32位整数。 USB PID USB VID 转换好的PVID : 高16位为pid,低16位为vid. 判断接口返回值是否代表错误,辅助接口。 内部代码: return (r < 0); 接口返回值 false :接口返回的状态码代表发生错误,反正,执行成功! 判断接口返回值是否代表正确,辅助接口 内部代码: return (r >= 0); 接口返回值 false :接口返回的状态码代表发生错误,反正,执行成功! 查询在线的设备(建议不再使用该接口,可用代替) 查询参数 输出设备信息的缓冲区 入参是要查询的设备数量,出参是已经查询到的设备数量 超时(ms)。在该时间内指令未完成,就返回超时错误! 具体描述,请查看说明。 对压缩像素数据进行解压缩(适用于UTG4000A系列\UTG2025A NEW) 压缩之后的数据地址(按32bit寻址) 压缩的数据大小,注意是int类型。 存放解压缩后的像素数据缓冲区 像素点数 小于0 错误,错误码见UnZipError, >=0解压缩后的大小(像素数) _dst缓冲区大小是屏幕宽度 * 屏幕高度, 比如800*480的屏幕, 解压缩后就是 800*480 = 384000.即_dst_size = 384000. alg_UnCompressPixels 接口的另一版本, 缓冲区全部是字节流 压缩之后的数据地址,字节流 字节流长度 接收解压缩后的数据的字节流缓冲区 _dst缓冲区的长度(Bytes) 参考 对压缩像素数据进行解压缩(适用于UTG2025A和UTG2062A) 压缩之后的数据地址 压缩的数据大小,字节数 存放解压缩后的像素数据缓冲区 像素点数*3, 24bit 小于 0 错误,错误码见UnZipError, >=0解压缩后的大小(字节数) _des缓冲区大小应该是480*272*3 1000A信号源使用的图像数据的解压算法 从设备端读取到的完整数据包 _src 指向的数据大小Bytes 输出的32bit的像素数据的缓冲区 图像的宽度 图像的高度 小于 0 错误,错误码见UnZipError, >=0解压缩后的像素个数 使用ZBMP算法压缩的位图数据的解压缩算法 原始数据 原始数据长度 接收解压后数据的缓冲区 _des的长度 小于0 : 错误,请查看 通知事件的委托函数,由使用。 通知附带的消息参数 视消息协议而定 解压缩返回算法返回的错误码 参数错误 接收非压缩数据的缓冲区大小不够 alg_UnZipBMP接口返回的错误码 参数错误 地址不能为空,长度不能为0,接收解压缩的缓冲区不能被存放压缩数据的缓冲区小 存储空间不足 错误的窗大小 压缩数据格式错误 压缩数据有误 提供一些做跨平台数据转换时的常用接口 将字节数组转换为结构体数组 结构体类型 被转换的字节数组 用于数据的结构体数组 要转换的结构体数量 byte数组转结构体 byte数组 结构体类型 转换后的结构体, 转换失败返回null 结构体转byte数组 要转换的结构体 转换后的byte数组