Multimeter USB output

Terry Reedy tjreedy at udel.edu
Sun Aug 28 06:31:51 EDT 2016


On 8/28/2016 5:13 AM, Joe wrote:
>
> Am 28.08.2016 um 00:45 schrieb Terry Reedy:
>> On 8/27/2016 3:35 PM, Joe wrote:
>>> Hi,
>>>
>>> I'm using Python 3.5.1 with PyUSB 1.0 under Win 10 (64). We try to read
>>> the USB output of a DMM 'UT61B'.
>>>
>>> import usb.core
>>> import usb.util
>>> import usb.backend.libusb1
>>>
>>> def Gosub():
>>>      dev = usb.core.find(idVendor=0x1a86, idProduct=0xe008) # Digital
>>> Multimeter UT61B
>>>      if dev == None:
>>>          print ('Multimeter not found')
>>>      else:
>>>          print ('Multimeter was found')
>>>          dev.set_configuration()
>>>          cfg = dev.get_active_configuration()
>>>          intf = cfg[(0,0)]
>>>          ep = usb.util.find_descriptor(
>>>              intf,
>>>              custom_match = \
>>>              lambda e: \
>>>                 usb.util.endpoint_direction(e.bEndpointAddress) == \
>>>                 usb.util.ENDPOINT_IN)
>>>          if ep == None:
>>>              print ('ep is None')
>>>          else:
>>>              s = ep.read(64, 500)
>>>              print ('Len s: ' + len(s))
>>>
>>> print ('Starting')
>>> Gosub()
>>> print ('Ready.-')
>>>
>>> Result:
>>
>> I presume you saw
>> Starting
>> Multimeter was found
>>
>>> File "d:\work-d\PythonProgs\ut61b.py", line 27, in <module>
>>>    Gosub()
>>> File "d:\work-d\PythonProgs\ut61b.py", line 23, in Gosub
>>>    s = ep.read(64, 500)
>>> File "D:\Python3\Lib\site-packages\usb\core.py", line 402, in read
>>>    return self.device.read(self, size_or_buffer, timeout)
>>> File "D:\Python3\Lib\site-packages\usb\core.py", line 988, in read
>>>    self.__get_timeout(timeout))
>>> File "D:\Python3\Lib\site-packages\usb\backend\libusb1.py", line 851, in
>>> intr_read
>>>    timeout)
>>> File "D:\Python3\Lib\site-packages\usb\backend\libusb1.py", line 936, in
>>> __read
>>>    _check(retval)
>>> File "D:\Python3\Lib\site-packages\usb\backend\libusb1.py", line 595, in
>>> _check
>>>    raise USBError(_strerror(ret), ret, _libusb_errno[ret])
>>>
>>> usb.core.USBError: [Errno 10060] Operation timed out
>>>
>>> What's wrong? How to fix?
>>
>> Read (again?) the doc for the interface for the device.  Because reading
>> timed out, I suspect that it is waiting for a command for it to send
>> something.
>>
>
> Yes, I saw this:
>
> Starting
> Multimeter was found
>
> The UT61B has two interfaces, a RS232C interface and this usb interface.
> The RS232 interface works well with PySerial. It continously transmits 2
> .. 3 Pakets per second with 14 Bytes each. This happens unsolicited
> without any command as long as the RS232C/USB button on the DMM is active.
>
> So I assumed the USB interface also doesn't need any command and also
> transmit this stream of 2 to 3 Pakets per second. But unfortunately I
> don't have any doc for the USB interface for this device.
>
> To the accompanying software of the UT61B there is a ready windos app
> which shows and logs the output of the UT61B. This app can be switched
> between RS232C and USB; both work.
>
> I asked the manufacturer (Uni-T in Shenzen) for additional info and are
> now waiting for an answer.
>
> Assumed the USB interface sends this 2 to 3 pakets per second
> unsolicited - should the code shown work? Is this ok:
>
>
>>>              lambda e: \
>>>                 usb.util.endpoint_direction(e.bEndpointAddress) == \
>>>                 usb.util.ENDPOINT_IN)
>
> I am in doubt: Is usb.util.ENDPOINT_IN really correct?

I do not know as I have not used the usb package.

-- 
Terry Jan Reedy




More information about the Python-list mailing list