首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从体重USB称上读取体重

如何从体重USB称上读取体重
EN

Stack Overflow用户
提问于 2012-05-02 10:58:22
回答 1查看 3.4K关注 0票数 0

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

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

有没有什么建议我应该从哪里开始搜索呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-02 11:20:53

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

它们从获取原始字节开始:

代码语言:javascript
复制
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();
}

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

代码语言:javascript
复制
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调用它,如下所示:

代码语言:javascript
复制
Dim app 
Set app = Server.CreateObject("MyScaleComponent") 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10407128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档