0

发送 PJL 命令后如何在 Windows 上接收来自打印机的响应?

我试图用 WireShark 监视网络打印机并直接读取打印机套接字,但没有任何效果。

4

1 回答 1

0

在 windows 上只能使用带有Paraphernalia的网络打印机。普通型号没有双向打印机驱动程序。所以我在虚拟机上安装了linux。

我在 linux 上使用了双向 USB 驱动程序(相同的驱动程序在 mint,*buntu 发行版上)并使用下面的 bash 脚本从 cmd.txt 执行 pjl 命令。

但我仍然无法识别何时阅读 PJL Respond。使用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%-12345X@PJL\r\n@PJL 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
于 2017-01-06T14:52:10.023 回答