0

我有一个来自 stamps.com 的 USB 称重(型号 510: http: //www.stamps.com/postage-online/digital-postage-scales/

我能够找到驱动程序使其在网上独立,但我的下一个问题是如何在我的经典 ASP 页面/VBScript 中读取秤上对象的重量。

有人对我应该从哪里开始搜索有任何建议吗?

4

1 回答 1

2

我不确定这是否适用于您的特定型号,但http://nicholas.piasecki.name/blog/2008/11/reading-a-stamps-com-usb-scale-from-c-上有一篇文章尖锐/作者编写了 C# 代码来读取秤,因为它符合基本的 USB HID(人类输入设备)标准。作者使用了 Mike OBrien 的 HID 库https://github.com/mikeobrien/HidLibrary

他们开始获取原始字节:

HidDeviceData inData;
HidDevice[] hidDeviceList;
HidDevice scale;

hidDeviceList = HidDevices.Enumerate(0x1446, 0x6A73);

if (hidDeviceList.Length > 0)
{
    int waitTries;

    scale = hidDeviceList[0];
    waitTries = 0;

    scale.Open();

    if (scale.IsConnected)
    {
        inData = scale.Read(250);

        for (int i = 0; i < inData.Data.Length; ++i)
        {
            Console.WriteLine("Byte {0}: {1:X}", i, inData.Data[i]);
        }
    }

    scale.Close();
    scale.Dispose();
}

然后继续对有效载荷进行逆向工程并构造一个函数来获取以盎司为单位的重量:

private void GetStampsComModel2500iScaleWeight(out decimal? ounces, out bool? isStable)
{
    HidDeviceData inData;
    HidDevice[] hidDeviceList;
    HidDevice scale;

    isStable = null;
    ounces = null;

    hidDeviceList = HidDevices.Enumerate(0x1446, 0x6A73);

    if (hidDeviceList.Length > 0)
    {
        int waitTries;

        scale = hidDeviceList[0];
        waitTries = 0;

        scale.Open();
        // For some reason, the scale isn't always immediately available
        // after calling Open(). Let's wait for a few milliseconds before
        // giving up.
        while (!scale.IsConnected && waitTries < 10)
        {
            Thread.Sleep(50);
            waitTries++;
        }

        if (scale.IsConnected)
        {
            inData = scale.Read(250);
            ounces = (Convert.ToDecimal(inData.Data[4]) +
                Convert.ToDecimal(inData.Data[5]) * 256) / 10;
            isStable = inData.Data[1] == 0x4;
        }

        scale.Close();
        scale.Dispose();
    }
}

为了从您的经典 ASP 页面/VBScript(在服务器上,对吗?)中读取权重,最简单的解决方案似乎是将工作的 C# 类转换为 COM 组件。您可以按照教程创建 C# COM 组件并将其注册到服务器上,然后您可以从 VBScript 调用它,例如:

Dim app 
Set app = Server.CreateObject("MyScaleComponent") 
于 2012-05-02T03:20:52.593 回答