Brecknell 量表的多个可重现错误

Multiple reproducible errors with a Brecknell Scale

我正在使用 python 和 PyUSB 从 USB 秤获取重量。这是我的代码

import sys
import usb.core
import usb.util
from reports import \
    ReportFactory, STATUSES, ZERO_WEIGHT, STABLE_WEIGHT, DATA_REPORT

device = usb.core.find(idVendor=0x67b, idProduct=0x2303)
if device is None:
    raise ValueError('Device Not Found')

if device.is_kernel_driver_active(0) is True:
    device.detach_kernel_driver(0)
    usb.util.claim_interface(device, 0)

device.set_configuration()

collected = 0
attempts = 50
while collected < attempts:
    ret = device.read(0x2,0x0040)
    sret=''.join([chr(x) for x in ret])
    print "Return Raw: ",ret
    print "Return : ", sret
    print ReportFactory.build(ret)

# release the device
usb.util.release_interface(device, 0)
device.attach_kernel_driver(0)

我第一次运行这个程序时出现资源繁忙错误

第二个 运行 我在第 5 个转储上得到操作超时。

之后的 运行 秒会导致立即超时。

这里发生了几件事

  1. 为什么我在第一个 运行 时收到资源繁忙错误?我认为 kernel_driver if 语句应该处理它。

  2. 为什么我得到的数据看起来不像 USB 秤应该产生的数据?

  3. 为什么转储4次数据后超时?每次!

设备信息为

如有任何帮助,我们将不胜感激!

好的,任何正在努力使用 PyUSB 从 GP100 Brecknell 秤获取任何东西的人,请切换到 PySerial。由于这是市场上最便宜的 USB 秤之一,我猜这些信息会对很多人有所帮助。

我通过电子邮件向制造商索取文档,他们向我发送了一些有价值的串行协议信息。

如果您将秤的协议设置为 7010,您可以使用 python 如下所示的代码

import time
import serial

ser = serial.Serial(
    port='/dev/ttyUSB0',
    baudrate=2400,
    bytesize=8,
    parity='N',
    stopbits=2
)

while 1:
    x = ser.read(100)
    print(x)

这将流式传输 8 个字节的数据。

  • 第一个字节是状态信息,可以这样解释

    • 第 2-4 位
    • 第 5-8 位
  • 可以安全地忽略字节 2 和 3。

  • 字节 4-8 有重量信息,用字符 0-9 表示(例如 00023 = 2.3 磅)。该秤的精确度仅为 +- 0.6 磅,不适用于盎司,也许使用相同串行控制器的其他型号使用盎司功能。 PG100没有。