0

Stamps.com の USB 計量器を持っています (Model 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-に記事があります。シャープ/基本的なUSBHID(ヒューマン入力デバイス)標準に準拠しているため、作成者がスケールから読み取るC#コードを記述した場所。著者はMikeOBrienの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 に答える