1

MotorolaのバーコードスキャナーMT2070に問題があります。EMDK 2.6 for .NET(Update 2)を使用して、スキャンしたバーコードから文字列を作成し、ホストPCに送信します。しかし、送信は失敗しました。

MT2070はWindowsCE5.0で動作し、Bluetoothを介してクレードルSTB2078に接続されます。しかし、「送信に失敗しました」と結果コードが「E_INCORRECT_MODE」になるたびに。

問題は、「INCORRECT_MODE」の意味がわからないことです。DECODEに設定し、RawDataではソースの意味を理解していませんか?

        ScannerServicesClient scannerServices;
        scannerServices = new ScannerServicesClient();
        SCANNERSVC_MODE mode;

        if(scannerServices.Connect(true))
        {
            Logger("start service with decode rights"); // primitiv method to see what happen

            scannerServices.GetMode(out mode);

            if (mode != SCANNERSVC_MODE.SVC_MODE_DECODE)
            {
                mode = SCANNERSVC_MODE.SVC_MODE_DECODE;
                if (scannerServices.SetMode(mode) != RESULTCODE.E_OK)
                {
                    Logger("cant set mode: " + mode.ToString());
                }
            }

            // wanna know which connection is use
            string connection = "";

            switch (scannerServices.HostParameters.CurrentConnection)
            {
                case SCANNERSVC_DATA_CONNECTION.NO_CONNECTION:
                    connection = "Not connected";
                    break;
                case SCANNERSVC_DATA_CONNECTION.BLUETOOTH:
                    connection = scannerServices.HostParameters.BluetoothConnection.ToString();
                    break;
                case SCANNERSVC_DATA_CONNECTION.RS232:
                    connection = scannerServices.HostParameters.RS232Connection.ToString();
                    break;
                case SCANNERSVC_DATA_CONNECTION.USB_CABLE:
                    connection = scannerServices.HostParameters.USBConnection.ToString();
                    break;
            }
            Logger(connection);

            ScannerHostParameters scnHost = new ScannerHostParameters(scannerServices);



            //example hello
            string input = "hello";                     //what should send
            byte[] output = new byte[input.Length];     //field with converted data
            byte source = 0;    //<-- what mean source? i sum all byte-value but this cant be correct

            for (int i = 0; i < input.Length; ++i)
            {
                output[i] = Convert.ToByte(input[i]);
                source += output[i];
            }

            RawData rawData = new RawData(output, input.Length, source);
            //RawParameters rawParam = new RawParameters();

            //rawParam.BaudRate = RawParameters.RawBaudRates.RAWSERIAL_9600;
            //rawParam.Type = RawParameters.RawHostType.Auto;

            RESULTCODE result = scannerServices.SendRawData(rawData, 2000);

            if(result == RESULTCODE.E_OK)
            {
                Logger("successful send");
            }
            else
            {
                Logger("Send failed: " + result.ToString());
            }
            Logger("ScannerService kill");
            scannerServices.Disconnect();
        }
        Logger("\n");
        scannerServices.Dispose();

        scannerServices = null;

ご協力いただきありがとうございます!(そして私の英語でごめんなさい)

4

1 に答える 1

0

ある時点(モードを設定している場所-モードを設定した直後に行います)で、次のようにします。

//set raw mode
if (RESULTCODE.E_OK != scannerServices.SetAttributeByte((ushort)ATTRIBUTE_NUMBER.ATT_MIA_HOSTNUM, (byte)ENUM_HOSTS.HOST_RAW))
{
    throw new Exception("Can't set RAW mode");
    scannerServices.Disconnect();
    scannerServices.Dispose();
    return;
}

あなたが持っている場所:

RawData rawData = new RawData(output, input.Length, source);

ソースを0のままにすることができます:

RawData rawData = new RawData(output, input.Length, 0);

残念ながら、プログラミングに関しては私は最高ではないので、スキャナーを機能させるためにつまずくことができました。ドキュメントは素晴らしいものではありません。実際、私はそれがひどく不足していることに気づきました。モトローラの人々でさえ、それについて、またはそれをプログラムする方法についてあまり知らないようです。私は少なくとも1つの点で彼らから誤った情報を与えられました。

スキャナーにCDCCOMポートエミュレーションモードを使用して、デバイスマネージャーの[ポート]の下に表示されるようにします(COMポートを使用する古いプログラムでスキャナーを動作させる必要があります)。これにはドライバーも必要です。

スキャナーの使用方法によっては、上記が機能する場合と機能しない場合があります。

于 2013-01-30T20:20:15.170 に答える