Labview 与USB设备(HID)通过visa通信。VISA: (Hex 0xBFFF003A) 由于设置无效(导致属性被设置为不一致状态)
最近我做一个项目,需要用到电脑和USB设备进行通信。按照网上找到的教程,安装好VISA对USB设备的驱动,如图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接口类别
之后,查看bmAttributes为0x03,如图6所示。代表中断传输。本文仅使用于完全一样的设置,其他的设备出现的问题就不清楚了。
图6 查看bmAttributes
HID设备,仅支持控制传输和中断传输。需要主机发送命令后,USB设备返回信息,这样才能完成读取。
在打开visa测试面板之后,在Configuration中的view attributes窗口中,如图7.在Bulk in Pipe Statues中,显示不存在。这个就是visa读取报错的原因。而USB设备向上传输的是Interrupt In Pipe ,对应端点是0x81。也就是,需要利用USB的中断才能进行读取了。
图7 错误的原因
在labview的visa选板中,高级visa>>事件处理,选择visa启用事件和visa等待事件。如图8所示。
图8 visa启用事件和visa等待事件
接着,在visa选板》高级visa》总线与接口配置》visa USB中,选择visa获取usb设备中断数据。如图9所示。
图9 选择 VISA获取USB中断数据
连接好的程序如图10所示。要注意必须在visa写入之后才可以读取usb中断返回的数据。不写入或是写入的数据错误导致无返回值,就会产生超时错误 VISA: (Hex 0xBFFF0015) 完成操作前超时已过期。可以将超时的时间设置的长一些,看一下是不是此处的问题。如果还是在超时这里有问题,拔插一下USB,再试试吧。
图10 基本程序
连接VISA获取USB中断数据时,可能会有接线端冲突,要在 visa等待事件 定义类型,如图11所示。
图11 设定类型
亲测有效,万分感谢。
赞赞赞
最近头都大了,谢谢小编分享经验
非常 有用的一个好帖子 谢谢了
头都大了,非常好的帖子 还真出现了超时的现象
弱弱的问一句,如果我想读取USB(HID)键盘按键的键码怎么实现呢?
新手小白求教。
MARK
抱歉,好久没做USB的项目了,这方面的知识已经忘得差不多了。之前我也是在网上查资料,然后自己总结的。加油,你也是可以的。
小编,我想问一下,我需要将USB HID设备免驱动转换成串口,之后用串口的读写进行通信,这怎么实现?
你的方法是要根据visa向导安装驱动的,如果我不安装该怎么解决
抱歉,不经常上论坛,只是查资料时看看。
你那样做的话,难度比较大的。要比较详细了解USB通信协议和底层硬件的工作原理。首先是通信问题,如何进行通信呢?比如是串口的话,波特率应该怎样设置呢?
USB的数据传输是基于令牌的,所有的通信都是由USB主机启动。也就是说,电脑向HID设备发送命令,HID设备执行命令。假设通信可以正常进行,那么你接受或发送的数据就是一串完全不知道是什么的数据帧。要了解这些内容,就需要比较长的时间去学习了。而设备的驱动的作用,就是解析这些数据,简化编程的。
如果可以的话,建议直接通信,别转换成串口了。
好的,谢谢小编了
谢谢小编,通过找资料解决的差不多啦
非常好,学习学习
感谢小编,小编,我还在想,STM32F103只能用作从机,想通过USB接口直接跟电脑进行通信,不用usb转串口,需要哪几个VI呢?
谢谢分享,正学习这部分的知识
mark下USB的以后肯定会用到
好文章,有用
66666666666666
好资料大家一起来分享!谢谢小编
谢谢
谢谢
谢谢
谢谢
谢谢
谢谢
谢谢
谢谢
谢谢
谢谢分享宝贵经验
为啥我的一样的方式做的不要用呢
666666666666666666666666666666
write的字符串怎么确定,为什么从0101000改成0201000?
谢谢小编