LabVIEW干货
直播中

lvxisi

10年用户 37经验值
擅长:测量仪表 接口/总线/驱动 测量仪表 接口/总线/驱动 测量仪表 接口/总线/驱动 测量仪表 接口/总线/驱动 测量仪表 接口/总线/驱动 测量仪表
私信 关注
[Labview经验]

Labview 与USB设备(HID)通过visa通信。VISA: (Hex 0xBFFF003A) 由于设置无效(导致属性被设置为不一致状态)

   最近我做一个项目,需要用到电脑和USB设备进行通信。按照网上找到的教程,安装好VISAUSB设备的驱动,如图1所示。按照教程来说,只需要visa打开、写入、读取和关闭四个函数就够了。但是连接好后,运行的时候,读取就会报错。VISA:  (Hex 0xBFFF003A) 由于设置无效(导致属性被设置为不一致状态),将无法开始该操作。

图1 驱动已正确安装
图2 原报错的程序
图3 弹出的错误窗口
在学习了解USB的协议和基本设置之后,知道此设备是HID类型,并且输入和输出都是中断传输。这些信息的查询方法有很多,介绍一种简单易行的。如图4所示,打开NI-VISA Driver Wizard 软件,就是当初用来设置驱动的那个。选择USB之后,这个界面右边的文本框中有USB设备的信息。其中,bInterfaceClass,代表设备的类型。设备类型的详细内容如如5所示。我使用的设备是0x03,对应的是人机接口类(HID)
4 查看bInterfaceClass信息
图5  USB接口类别
之后,查看bmAttributes0x03,如图6所示。代表中断传输。本文仅使用于完全一样的设置,其他的设备出现的问题就不清楚了。
图6 查看bmAttributes
HID设备,仅支持控制传输和中断传输。需要主机发送命令后,USB设备返回信息,这样才能完成读取。
在打开visa测试面板之后,在Configuration中的view attributes窗口中,如图7.Bulk in Pipe Statues中,显示不存在。这个就是visa读取报错的原因。而USB设备向上传输的是Interrupt In Pipe ,对应端点是0x81。也就是,需要利用USB的中断才能进行读取了。
图7 错误的原因

   在labviewvisa选板中,高级visa>>事件处理,选择visa启用事件和visa等待事件。如图8所示。

图8 visa启用事件和visa等待事件
接着,在visa选板》高级visa》总线与接口配置》visa USB中,选择visa获取u***设备中断数据。如图9所示。
图9 选择 VISA获取USB中断数据
连接好的程序如图10所示。要注意必须在visa写入之后才可以读取u***中断返回的数据。不写入或是写入的数据错误导致无返回值,就会产生超时错误 VISA:  (Hex 0xBFFF0015) 完成操作前超时已过期。可以将超时的时间设置的长一些,看一下是不是此处的问题。如果还是在超时这里有问题,拔插一下USB,再试试吧。


图10 基本程序
连接VISA获取USB中断数据时,可能会有接线端冲突,要在 visa等待事件 定义类型,如图11所示。

图11 设定类型


附件: 您需要登录才可以下载或查看附件。没有帐号?注册

回帖(57)

余昊俊

2015-10-20 16:57:49
亲测有效,万分感谢。
举报

查文娟

2015-11-16 14:48:52
赞赞赞
举报

哀丫丫228

2015-11-18 00:35:52
最近头都大了,谢谢楼主分享经验
举报

走在茫然的路上

2015-11-20 10:32:50
非常 有用的一个好帖子  谢谢了
举报

我不是广亮

2016-2-20 16:53:55
头都大了,非常好的帖子   还真出现了超时的现象
举报

我不是广亮

2016-2-20 18:54:27
弱弱的问一句,如果我想读取USB(HID)键盘按键的键码怎么实现呢?
新手小白求教。
举报

roki

2016-2-20 23:56:20
MARK                                                      
举报

lvxisi

2016-2-23 09:23:27
引用: 我不是广亮 发表于 2016-2-20 18:54
弱弱的问一句,如果我想读取USB(HID)键盘按键的键码怎么实现呢?
新手小白求教。

抱歉,好久没做USB的项目了,这方面的知识已经忘得差不多了。之前我也是在网上查资料,然后自己总结的。加油,你也是可以的。
举报

qiujingshui

2016-2-27 21:25:43
楼主,我想问一下,我需要将USB HID设备免驱动转换成串口,之后用串口的读写进行通信,这怎么实现?
你的方法是要根据visa向导安装驱动的,如果我不安装该怎么解决
1 举报
  • solo: FT260有DLL调用,或调用HIDAPI.

lvxisi

2016-3-3 10:53:59
引用: qiujingshui 发表于 2016-2-27 21:25
楼主,我想问一下,我需要将USB HID设备免驱动转换成串口,之后用串口的读写进行通信,这怎么实现?
你的方法是要根据visa向导安装驱动的,如果我不安装该怎么解决

抱歉,不经常上论坛,只是查资料时看看。
你那样做的话,难度比较大的。要比较详细了解USB通信协议和底层硬件的工作原理。首先是通信问题,如何进行通信呢?比如是串口的话,波特率应该怎样设置呢?
USB的数据传输是基于令牌的,所有的通信都是由USB主机启动。也就是说,电脑向HID设备发送命令,HID设备执行命令。假设通信可以正常进行,那么你接受或发送的数据就是一串完全不知道是什么的数据帧。要了解这些内容,就需要比较长的时间去学习了。而设备的驱动的作用,就是解析这些数据,简化编程的。
如果可以的话,建议直接通信,别转换成串口了。
举报

qiujingshui

2016-3-3 20:11:56
引用: lvxisi 发表于 2016-3-3 10:53
抱歉,不经常上论坛,只是查资料时看看。
你那样做的话,难度比较大的。要比较详细了解USB通信协议和底层硬件的工作原理。首先是通信问题,如何进行通信呢?比如是串口的话,波特率应该怎样设置呢?
USB的数据传输是基于令牌的,所有的通信都是由USB主机启动。也就是说,电脑向HID设备发送命令,HID设备执行命令。假设通 ...

好的,谢谢楼主了
举报

我不是广亮

2016-3-22 11:07:14
引用: lvxisi 发表于 2016-2-23 09:23
抱歉,好久没做USB的项目了,这方面的知识已经忘得差不多了。之前我也是在网上查资料,然后自己总结的。加油,你也是可以的。

谢谢楼主,通过找资料解决的差不多啦
举报

博伊卡epic

2016-5-10 09:38:26
非常好,学习学习
举报

itachiw113

2016-5-10 17:04:57
感谢楼主,楼主,我还在想,STM32F103只能用作从机,想通过USB接口直接跟电脑进行通信,不用u***转串口,需要哪几个VI呢?
举报

慧君 简

2016-7-23 19:31:35
谢谢分享,正学习这部分的知识
举报

刘克轩

2017-2-8 14:49:11
mark下USB的以后肯定会用到
举报

chenlang

2017-3-2 15:02:29
好文章,有用
举报

李杰

2017-4-7 07:32:04
好资料大家一起来分享!谢谢楼主
举报

羽翼临隙

2017-6-24 15:11:35
谢谢
举报

更多回帖

发帖
×
20
完善资料,
赚取积分