发送串行命令以触发扫描仪Honeywell 1900

时间:2018-09-17 07:48:28

标签: c# serial-port

问题是,我可以使用串行端口软件“ Hercules”发送命令<SYN>T<CR><LF>来触发扫描仪,在数据表中据说可以使用命令[SYN]T[CR]来触发扫描仪,但是我无法触发(两者都命令)使用我的串行端口通讯波纹管。 手动使用扫描仪时收到输入,但无法触发...问题是什么? (该端口是虚拟的)

private static SerialPort port;
private static bool _continue = false;

public static void Main(string[] args)
{
    port = new SerialPort();
    port.PortName = "COM8";
    port.BaudRate = 115200;
    port.Parity = Parity.None;
    port.DataBits = 8;
    port.StopBits = StopBits.One;
    port.Handshake = Handshake.None;
    port.RtsEnable = true;
    port.DtrEnable = true;
    port.ReadTimeout = 500;
    port.WriteTimeout = 500;
    port.Open();

    _continue = true;
    Thread thr = new Thread(SerialPortProgram);
    thr.Start();

}


private static void SerialPortProgram()
{
    Console.WriteLine("Writing to port: <SYN>T<CR><LF>");
    string command = "<SYN>T<CR><LF>";
    port.WriteLine(command);

     while (_continue)
    {
        try
        {
           string input = port.ReadLine();
           Console.WriteLine("Input is - " + input);

        }
        catch (TimeoutException) { }
    }

}

2 个答案:

答案 0 :(得分:0)

Python barcode scanner serial trigger是我回答类似Python问题的文章。

内容如下所示。

发生这种情况是因为您将文档中编写的抽象表达式编码为原始输出数据。

文档代表3个字节的数据传输。

“ SYN”和“ CR”是以下十六进制数字。

'SYN'= \ x16

'CR'= \ x0d或转义序列\ r

'T'是普通的ASCII字符。

空格和<> [] {}用于分隔文档中的数据,而不是要发送的数据。

而且,甚至您都需要命令前缀。

也使用Write代替@Turbofant编写的WriteLine

您应该这样写。请尝试。

string command = "\x16M\x0d\x16T\x0d";
port.Write(command);

答案 1 :(得分:0)

我想问题是,您发送的命令字符串错误。 <Syn><CR><LF>代表特殊的,不可打印的ascii字符同步空闲,回车和换行。 您需要将它们正确编码为字符串

尝试发送:

string command = "\x16t\r\n";
port.Write(command);

\x16<Syn>(因为Syn是ascii字符0x16或十进制的22)

\r<CR>

\n<LN>

并使用port.Write代替port.WriteLine,因为WriteLine会自动在字符串的末尾添加\r\n