Последовательная связь Zebra GC420t - Не получает - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь связаться с GC420t через последовательный порт в c#.

Мне нужно получить статус принтера.

Я хочу отправить команду ~ HQES и получаю статус.

Я могу писать команды: я попытался успешно напечатать некоторые qrcodes.

Но когда я пишу команду информации о статусе, я не получаю никакого ответа .

Это мой тестовый код:

//define serial port
static SerialPort _serialPort = new SerialPort("COM7", 9600, Parity.None, 8, StopBits.One);

public Serial()
{
      try
      {
        _serialPort.Open();
        WriteCommand();
        ReadStatus();
      }
      catch (Exception ex)
      {
        _serialPort.Close();
      }
}



public void WriteCommand()
{
      string qrcode = "^XA^FO,20,20^BQ,2,10^FDD03048F,LM,N0123456789,A12AABB,B0006qrcode^FS^XZ";
      string statusInfo = " ~HQES";
      _serialPort.Write(statusInfo);
}

public void ReadStatus()
{
      _serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
}

private static void DataReceivedHandler(
           object sender,
           SerialDataReceivedEventArgs e)
{
      SerialPort sp = (SerialPort)sender;
      string indata = sp.ReadExisting();
      Console.WriteLine("Data Received:");
      Console.Write(indata);
}

РЕДАКТИРОВАТЬ: Я также буду в состоянии получить эту информацию по запросу:

WriteCommand();
int timeout = 3000;
while (timeout > 0)
{
   Thread.Sleep(10);
   timeout--;
   // Timeout
   string status = _serialPort.ReadExisting();
}

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Вам следует проверить, настроен ли принтер на использование рукопожатия? Особенно XON / XOFF или DTR.

См. Страницу 24 Руководства пользователя. https://www.uline.com/PDF/IH-7246VND.PDF

В случае разрыва связи - соответствующий текст

"Принтер оснащен последовательным портом связи DCE для аппаратной совместимости с устаревшими принтерами 888. требуемый кабель должен иметь на одном конце девятиконтактный штекерный разъем типа D (DB-9P), который подключается к последовательному порту сопряжения (DB-9S), расположенному на задней панели принтера. Другой конец этого сигнального интерфейсного кабеля подключается к последовательному порту на главном компьютере. Кабель является нуль-модемным кабелем (перекрестные сигнальные соединения). Для получения информации о распиновке см. Приложение A.

Параметры связи последовательного порта между принтером и хост (обычно P C) должен соответствовать для надежной связи. Биты в секунду (или скорость передачи в бодах) и управление потоком являются наиболее распространенными параметрами, которые меняются. Требуется хост (обычно Windows P C) чтобы изменить управление потоком данных, чтобы оно соответствовало способу связи принтера по умолчанию: Аппаратное обеспечение и отмечено настройкой Host Handshake DTR / Xo п / Xoff. Этот комбинированный аппаратный (DTR) и программный (Xon / Xoff) режим может потребоваться изменить в зависимости {при использовании с прикладным программным обеспечением, отличным от Zebra, или при использовании последовательного кабеля. "

1 голос
/ 12 марта 2020

Вам нужно подключить обработчик DataReceived до того, как совершит какие-либо вызовы, иначе он мог бы ответить до того, как вы подключите его.

Переместите ReadStatus вверх на 1 строку, чтобы она шла сразу после конструктора.

    _serialPort.Open();
    ReadStatus();
    WriteCommand();
...