Отправка последовательной команды на запуск сканера Honeywell 1900 - PullRequest
0 голосов
/ 17 сентября 2018

Проблема в том, что я могу запустить сканер с помощью программного обеспечения последовательного порта "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 голосов
/ 17 сентября 2018

Полагаю, проблема в том, что вы посылаете неверную командную строку. Символы <Syn>, <CR> и <LF> обозначают специальные непечатаемые символы ascii, синхронный режим ожидания, возврат каретки и перевод строки. Вам необходимо правильно их кодировать в строку

Попробуйте отправить:

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

\x16 равно <Syn> (потому что Syn является символом 0x16 или 22 в десятичном виде)

\r является <CR>

\n является <LN>

И используйте port.Write вместо port.WriteLine, потому что WriteLine автоматически добавляет \r\n в конец строки.

0 голосов
/ 17 сентября 2018

Серийный триггер Python-сканера штрих-кода - статья, на которую я ответил на аналогичный вопрос Python.

Содержание показано ниже.

Это происходит потому, что вы записали абстрактное выражение, записанное в документе, как необработанные выходные данные.

Документ представляет 3 байта передачи данных.

'SYN' и 'CR' - следующие шестнадцатеричные числа.

'SYN' = \ x16

'CR' = \ x0d или escape-последовательность \ r

'T' - обычный символ ASCII.

Пробелы и <> [] {} используются для разделения данных в документе, а не данных для отправки.

И даже вам нужно ввести префикс команды.

Также используйте Write вместо WriteLine, как написано @ Turbofant.

Вы должны написать так. Пожалуйста, попробуйте.

string command = "\x16M\x0d\x16T\x0d";
port.Write(command);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...