C#, CPCL и getvar

Я пишу класс для печати на bluetooth-принтерах Zebra с использованием CPCL. В CPCL есть команда getvar, которую вы можете отправить на принтер, чтобы получить настройки принтера. Например:

! U1 getvar "appl.date"

Эта команда вернет текущую дату принтера. Единственная проблема в том, что я не знаю, как получить результат этой команды. У меня нет проблем с печатью с использованием C# и CPCL, поскольку я могу просто преобразовать команду в массив байтов и отправить ее на принтер с помощью NetworkStream. Но я не знаю, как на самом деле получить результаты от команд, которые должны возвращать результаты. Я подтвердил, что команда действительно возвращает данные с помощью Zebra Printer Communicator, который поставляется с принтером.

Спасибо


person Ralpgh Cholo    schedule 20.02.2013    source источник


Ответы (2)


2 вещи... Убедитесь, что вы отправляете \r\n после последнего ". Не уверен, что WriteLine сделает это за вас, но в конце концов это нужно SGD. Кроме того, вы правы, вам нужно подождать, пока принтер вернет значение, прежде чем читать его. Если вы читаете слишком быстро, а принтер еще не ответил, считывать будет нечего. Что вы можете сделать, так это посмотреть на свойство TcpClient Available, чтобы увидеть, есть ли какие-либо доступные байты, прежде чем вы действительно выполните чтение. Вы можете выполнить цикл и быстро подождать, пока не будут доступны байты для чтения, затем вы можете выполнить чтение и убедиться, что есть байты для чтения.

person Ovi Tisler    schedule 20.02.2013

Я нашел реальный пример кода здесь:

https://km.zebra.com/kb/index?page=content&id=SA140&actp=LIST

Код работает нормально, единственная проблема заключается в том, что принтеру требуется некоторое время для возврата данных, но ReadLine выполняется немедленно. Это возвращает пустую строку. Если вы подождете несколько секунд и прочитаете снова, вы получите фактический результат.

person Ralpgh Cholo    schedule 20.02.2013