2017-01-01 24 views
0

Как получить ответ на Windows из принтера после отправки команды PJL?Команды чтения статуса PJL

Я попытался подключить сетевой принтер с помощью WireShark и напрямую прочитать разъем для принтера, но ничего не работает.

+0

я нашел две вещи: водитель 1. Принтер должен поддерживать bị коммуникацию 2. Там находится инструмент PCL Атрибутика для READBACK PJL через сеть: [ссылка] (http://www.pclparaphernalia.eu /index.html) – tosiek

ответ

0

В окнах возможно только сетевые принтеры с Paraphernalia. Существует нет двунаправленных драйверов принтера для обычных моделей. Поэтому я установил linux на virtualmachine.

Я использовал двунаправленный драйвер USB на linux (те же самые драйверы на mint, * buntu distro) и выполнил команду pjl из cmd.txt с помощью этого сценария bash ниже.

Но я все еще не могу узнать, когда читать PJL Ответ. Использование fuser команда для распознавания /dev/usb/lp0 занятое состояние не работает, поэтому я пытаюсь читать в цикле с dd и проверять размер считывания. Он работает, но иногда приходится отправлять PJL несколько раз, прежде чем получить ответ.

#!/bin/bash 

PRINTER=/dev/usb/lp0 
ESCAPE=$(echo -e "\e") 
FF=$(echo -e "\x0C") 
char= 
IFS="" 
SSKIP=0 

echo "" > a.txt 
echo "" > b.txt 
echo "" > temp.txt 

while read p; do 
    echo -e "#######BEGIN$p-\r\n" >> a.txt 
    echo $p 

    while true 
    do 
     #WAIT FOR NOT BUSY 
     while true 
     do 
      fuser -s $PRINTER 
      if [ $? -ne 0 ] 
      then 
       break 
      fi 
     done 
     #send PJL to printer 
     echo -e "\e%[email protected]\r\[email protected] INQUIRE $p \r\n\e%-12345X" > $PRINTER 
     #TRY TO READ IMMEDIATELY 
     char=$(dd if=$PRINTER of=temp.txt 2>&1) 
     #send escape after read 
     echo -e "\e" > "$PRINTER" 
     #CHECK THAT dd READ ANY BYTES 
     echo "$char" | grep "bytes copied" > /dev/null 
     if [ $? -ne 0 ] 
     then 
      printf "." 
     else 
      echo "$char" | grep "^0 bytes copied" > /dev/null 
      if [ $? -ne 0 ] 
      then 
       cat temp.txt >> b.txt 
       echo "" > temp.txt 
       break 
      else 
       printf "." 
      fi 
     fi 
     char="" 
    done 
    echo 
    echo -e "#######END$p-\r\n" >> a.txt 
done <cmd.txt 
+0

Хорошо, после прочтения вы можете отправить ESCAPE и следующую работу PJL для чтения в первый раз. echo - "\ e"> "$ PRINTER" – tosiek