0

1 つのバーコードが読み取られているのに、別のバーコードが印刷されているとはどういうことでしょうか?

私のコードはスキャンされた値を読み取り、それをテキストボックスに入れます。たとえば、「76145513」などの値

それでも、そのバーコードのラベルを印刷すると、「57056548」と印刷されます

この最後のバーコードは有効なバーコードですが、スキャンした値 (「76145513」) の代わりにその (「57056548」) が印刷されるのはなぜですか?

「特大」のバーコードがたくさんある紙の束からバーコードを読み取っています。私が使用しているシートには、スキャンされている値と印刷されている値の両方が含まれていますが、スキャン時に不正なバーコードを隠して、レーザービームが壁の目や「見ている」ものではないことを確認することさえしました.ただし、その「サイクロプス ビーム」は正しいバーコードのみを点灯します。

印刷に送信されたものが正しいことを確認するために、デバッグ/サニティチェックコードをいくつか入れました。最初の MessageBox.Show() で「PrintUtils.ZebraQLn220Printer.PrintLabelのバーコードは76145513 」、2 番目の「チェックサム付きバーコードは 761455132」です。

では、正しい値がスキャンされ、Print メソッドに送信されているのに、別の (しかし有効な!) コードが出力されているというのはどうしてでしょうか?

コア印刷コードは次のとおりです。

private void PrepareAndPrintLabel()
{
    . . .
    string barcode = textBoxUPC.Text.Trim();
    if (String.IsNullOrEmpty(barcode))
    {
        MessageBox.Show("Cannot print with no barcode provided");
        return;
    }
    PrintUtils.IBeltPrinterFactory factory = new 
PrintUtils.BeltPrinterFactory();
    PrintUtils.IBeltPrinter printer = factory.NewBeltPrinter();
    printer.PrintLabel(listPrice, description, barcode);
}

    public void PrintLabel(string price, string description, string
barcode)
    {
        MessageBox.Show(String.Format("Barcode in
PrintUtils.ZebraQLn220Printer.PrintLabel is {0}", barcode));
        try
        {
            ArrayList elementsToPrint = new ArrayList();

            // Create one etp for each line to be printed on the label
            . . .
            ElementToPrint etp3 = new ElementToPrint
                                      {
                                          DisplayVal = barcode,
                                          elementAlignment =
ElementToPrintAlignment.Center, elementType =
elementToPrintType.BarcodeText, RelativeFontSize =
FontSizeType.BarcodeTextMedium, XPos = 0
                                      };
            elementsToPrint.Add(etp3);
            ElementToPrint etp4 = new ElementToPrint
                                      {
                                          DisplayVal = barcode,
                                          elementAlignment =
ElementToPrintAlignment.Center, elementType = ElementToPrintType.Barcode,
RelativeFontSize = FontSizeType.Large, XPos = 0
                                      };
            elementsToPrint.Add(etp4);
            ArrayList linesToSend =
ConvertElementsForZebraQLn220(elementsToPrint, 1.25);

            using (SerialPort serialPort = new SerialPort())
            {
                serialPort.BaudRate = 19200;
                serialPort.Handshake = Handshake.XOnXOff;
                if (!(serialPort.IsOpen))
                {
                    serialPort.Open();
                }

                Thread.Sleep(500);
                foreach (string line in linesToSend)
                {
                    serialPort.Write(line);
                }
            }
        }
        catch (Exception ex)
        {
            String msgInnerExAndStackTrace = String.Format("{0}; Inner
Ex: {1}; Stack Trace: {2}", ex.Message, ex.InnerException, ex.StackTrace)
ExceptionLoggingService.Instance.WriteLog(String.Format("From
ZebraQLn220Printer,PrintUtils.PrintLabel: {0}", msgInnerExAndStackTrace));
        }
    } // PrintLabel

    public static ArrayList ConvertElementsForZebraQLn220(ArrayList
elementsToPrint, double labelHeight)
    {
        const int BARCODE_TEXT_DELTA = 5;
        const int BARCODE_HEIGHT = 50;
        ArrayList linesToSend = new ArrayList();
        int _labelHeight = ConvertInchesToZebraQLn220DPI(labelHeight);
        int YPos = 0;
        ElementToPrintAlignment lastAlignmentSet =
ElementToPrintAlignment.Left;

        // Always start with this line for label mode (as opposed to
line mode) CPCL:
        linesToSend.Add(string.Format("! 0 200 200 {0} 1\r\n",
_labelHeight)); //at 1.25, labelHeight is 254; more accurately, it would b
241, as the labels are really 1.1875" in height, not 1.25

        foreach (ElementToPrint etp in elementsToPrint)
        {
            // POSITION THE TEXT
            . . .
            // SIZE THE TEXT - These are based on the device-specific
parameters 
            if (etp.elementType.Equals(ElementToPrintType.BarcodeText))
            {
                linesToSend.Add(string.Format("BARCODE-TEXT {0} {1}
{2}\r\n", fontNum, fontSizeId, BARCODE_TEXT_DELTA));
                YPos = YPos + GetHeightForFontNumAndSizeID(fontNum,
fontSizeId) + BARCODE_TEXT_DELTA;
            }
            else if (etp.elementType.Equals(ElementToPrintType.Barcode))
            {
                string displayValTrimmed = etp.DisplayVal.Trim();
                string barcodeType = GetBarcodeType(displayValTrimmed);
                string checkSum = GetBarcodeChecksum(displayValTrimmed);
                string barcodeWithCheckSum = string.Format("{0}{1}",
displayValTrimmed, checkSum);
                MessageBox.Show(string.Format("barcodeWithCheckSum is
{0}", barcodeWithCheckSum));
                linesToSend.Add(string.Format("BARCODE {0} 1 1 {1} 0 {2}
{3}\r\n", barcodeType, BARCODE_HEIGHT, YPos, barcodeWithCheckSum));
                YPos = YPos + BARCODE_HEIGHT;
            }
            else if (etp.elementType.Equals(ElementToPrintType.Text))
            {
                linesToSend.Add(string.Format("TEXT {0} {1} 0 {2}
{3}\r\n", fontNum, fontSizeId, YPos, etp.DisplayVal));
                YPos = YPos + GetHeightForFontNumAndSizeID(fontNum,
fontSizeId);
            }
        }

ログ ファイルには次のように表示されます (無関係なエントリは省略されています)。

. . .

Date: 2/3/2015 2:31:26 PM
Message: Reached frmVerify.InitReader

Date: 2/3/2015 2:31:26 PM
Message: Reached frmVerify.StartRead

Date: 2/3/2015 2:31:29 PM
Message: Reached frmVerify.BarcodeReader_ReadNotify

Date: 2/3/2015 2:31:29 PM
Message: Reached frmVerify.HandleData

Date: 2/3/2015 2:31:29 PM
Message: Reached frmVerify.textBoxUPC_LostFocus

. . .

Date: 2/3/2015 2:31:43 PM
Message: Reached frmVerify.buttonPrintLabel_Click

Date: 2/3/2015 2:31:43 PM
Message: Reached frmVerify.PrepareAndPrintLabel

Date: 2/3/2015 2:31:43 PM
Message: Reached PrintUtils.PrintLabel

Date: 2/3/2015 2:31:43 PM
Message: Reached PrintUtils.ConvertElementsForZebraQLn220

. . .

Date: 2/3/2015 2:31:43 PM
Message: Reached PrintUtils.GetBarcodeType

Date: 2/3/2015 2:31:43 PM
Message: Reached PrintUtils.GetBarcodeChecksum

ところで、「57056548」はコードのどこにも存在しません (一時的なテスト値として使用し、削除するのを忘れたのではないかと思いました)。これが起こる可能性は事実上不可能に思えますが、実際に起こっています。

アップデート

user3025177 の提案に従って、印刷コードにデバッグ メッセージを追加しました。

foreach (string line in linesToSend)
{
    MessageBox.Show(String.Format("About to be sent to th
serial port: {0}", line));
    serialPort.Write(line);
}

これが私が見たものです:

! 0 200 200 241 1
RIGHT
TEXT 4 3 0 0 24.77
LEFT
TEXT 5 0 0 90 No description found
CENTER
BARCODE-TEXT 0 2 5
BARCODE 128 1 1 50 0 137 761455132
FORM
PRINT

そして、ラベルに印刷されているものは次のとおりです。

0.00 [right-aligned]
ITEM NOT FOUND [left-aligned]
[the barcode zebra stripes, centered]
57056548 [centered]

したがって、正しいバーコード (「761455132」) が送信されていますが、「57056548」がラベルに印刷されています。

ビザロ!

更新 2

ただし、Sour Mash Archie のコメントは興味深いものです。次のように、それは理にかなっています: (a) テストに使用しているプリンターは錆びていて、クモの巣がはびこっています (b) 印刷されている「偽/不正な」バーコードがそのデバイスに印刷されています過去に-だから「記憶にとどまっている」に違いない...

4

1 に答える 1

2

これは大したことではありませんが、何年も前に、Zebra プリンタでバーコードがスタックしてしまい、印刷するたびに常に同じものを印刷するという問題があったことを覚えています。これは、Windows グラフィックス コマンドを使用した場合ではなく、EPL/ZPL コードを使用して印刷した場合にのみ発生しましたが、プリンターの電源をオフにしてから再度オンにしたり、別のマシンで試したりすると持続します。

プリンターのハードウェアをリセットして修正しました。私たちが持っていたモデルでは、ケースを開けて回路基板のボタンを押す必要がありました.

お使いのプリンタ モデルのファームウェア アップデートについては、Zebra の Web サイトを確認してください。

于 2015-02-04T22:23:53.303 に答える