无法通过串行通信发送,但可以接收

问题描述 投票:0回答:1

情况是我有一个Honeywell N5683条形码扫描仪,但无法在Honeywell EZConfig Scanning软件之外的任何串行通讯程序中发送命令。

请注意,扫描仪具有许多可以接受的不同配置设置。看到这里:https://www.honeywellaidc.com/CatalogDocuments/N56XX-UG%20Rev%20C.pdf

该程序的目标是发送软件触发器,而不必手动按下扫描按钮。到目前为止,我编写的程序可以在按下物理按钮时接收数据,但是当前无法通过.NET中的SerialPort类发送数据。请参见下面的代码:

public partial class Form1 : Form
{
    private SerialPort serialPort1 = new SerialPort("COM3", 115200, Parity.None, 8, StopBits.One);

    public Form1()
    {
        InitializeComponent();
        serialPort1.DataReceived += new SerialDataReceivedEventHandler(scannerDataReceivedHandler);
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        // COM Settings
        serialPort1.RtsEnable = true;
        serialPort1.DtrEnable = false;

        if (serialPort1.IsOpen)
            serialPort1.Close();
        serialPort1.Open();
    }

    private void scannerDataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
    {
        Console.WriteLine("Scan Successful");
        SerialPort sp = (SerialPort)sender;
        Thread.Sleep(50);
        int bytes = sp.BytesToRead;
        byte[] buffer = new byte[bytes];
        sp.Read(buffer, 0, bytes);
        string bufferOutput;
        bufferOutput = ByteArrayToHexString(buffer);

        Console.WriteLine(bufferOutput);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        // on
        //this is the string I send with the Honeywell Program = "PAPTPR";

        string toSend = "50 41 50 54 50 52";

        try
        {
            byte[] data = HexStringToByteArray(toSend);

            if (!serialPort1.IsOpen)
            {
                serialPort1.Open();
            }

            serialPort1.Write(data, 0, data.Length);
        }
        catch (System.IO.IOException)
        {
        }
    }

    // UTILITY
    private byte[] HexStringToByteArray(string s)
    {
        s = s.Replace(" ", "");
        byte[] buffer = new byte[s.Length / 2];
        for (int i = 0; i < s.Length; i += 2)
            buffer[i / 2] = (byte)Convert.ToByte(s.Substring(i, 2), 16);
        return buffer;
    }

    private string ByteArrayToHexString(byte[] data)
    {
        StringBuilder sb = new StringBuilder(data.Length * 3);
        foreach (byte b in data)
            sb.Append(Convert.ToString(b, 16).PadLeft(2, '0').PadRight(3, ' '));
        return sb.ToString().ToUpper();
    }
}

以下是在Honeywell EZConfig应用程序中发送到Honeywell N5683的成功命令的屏幕截图:“在此处输入图像描述”

c# serial-port barcode-scanner
1个回答
0
投票

我在使用“ BEBPMN”时遇到了类似的情况,以向BCR 1900发送错误蜂鸣声。有没有人帮忙?

© www.soinside.com 2019 - 2024. All rights reserved.