2008-10-16 13 views
5

Próbowałem programowo podawać papier na drukarce pos (Epson TM-U220D). Problem polega na tym, że ostatnia linia dokumentu nie jest drukowana, zamiast tego jest drukowana jako pierwsza linia następnego drukowanego dokumentu. Próbowałem POS dla .NET wysyłając polecenie "ESC | flF", również próbował wysłać surowe polecenie esc/pos za pomocą portu szeregowego, ale to nie działa. Jakieś pomysły?Posuw papieru na drukarce POS C#

+0

Zrobiłem też, ale teraz zdaję sobie sprawę, że oznacza Point Of Sale. –

+1

Możesz pobrać specyfikację serii TM-T88III, która zawiera niektóre polecenia ESC/POS. http://www.jarltech.com/ger_new/new/support/cd/TM-T88III_spc_e.pdf – stukelly

Odpowiedz

0

Jeśli drukarka jest na LPT1, wyłożyć do DOS i dać CMD.EXE lub COMMAND.COM cokolwiek odpowiednik C# jest tego podstawowego wyrażenia:

"ECHO " & Chr(12) & ">LPT1" 

Albo to, albo dołączyć Chr (12) do tekstu wyjściowego.

3

Będziesz potrzebować wcześniej lub później pełnej wersji ESC/POS Application Programming Guide. Dostałem kopię od mojego sprzedawcy EPSON kilka lat temu. W międzyczasie, mam z Google znalazłem link do FAQ for ESC/POS tutaj: http://postechgroup.com/updata/support/drivers/EPSON/FAQ_ESCPOS.pdf

w Twoim przypadku, LF kontroli komenda dane w buforze drukowania i zasila jedną linię w oparciu o bieżący odstępy między wierszami.

ASCII: LF

Hex: 0A

Decimal: 10

0

jako impuls mówi, trzeba uzyskać form-feed/FF/ASCII 12 do portu drukarki. W C lub C++, jeśli otworzyła swoją drukarkę jako plik, to byłoby

fprintf(printerfile,"%c",12); 

Kwestia czasami powstaje na tych drukarkach, że bufor wyjściowy nie jest faktycznie przetwarzanych/zaczerwieniona aż do powrotu karetki jest napisane. Możesz również ręcznie przepłukać strumień. Więc można następnie używać

fprintf(printerfile,"%c%c",12,13); 
fflush(printerfile); 

Łatwym gubi podczas wyprowadzania do urządzeń takich jak drukarki szeregowej jest to, że komunikacja i drukowanie stało asynchronicznie do głównego aplikacji. Dlatego ważne jest, aby nie zamykać portu drukarki zaraz po zakończeniu drukowania, ponieważ może to spowodować utratę lub uszkodzenie ostatecznego bufora wyjściowego.

(Niestety jest to C zamiast .NET, jestem jednym z tych C++ weteranów, który nie podszedł)

Edit: Czytanie alexandruls komentarzy na temat mojego postu, I MY dobrze mam to źle. Wygląda na to, że otrzymujesz niechciany kanał do formularza, ponieważ ustawiłeś niepoprawnie długość strony lub wartość domyślna jest niepoprawna. Sprawdź grupę poleceń Epsona, aby to pokonać.

+0

Proszę przeczytać najczęściej zadawane pytania dotyczące ESC/POS, prawidłowe polecenie to Line Feed (hex 0A, dziesiętnie 10). – alexandrul

+0

Widzę twój punkt, alexandrul. Wziąłem oryginalny plakat z prośbą o podanie formularza, podczas gdy on mówi "pasza". – bugmagnet

0

Czy wycinasz papier? W przypadku cięcia papieru położenie obcinarki jest wyższe niż głowicy drukującej. Musisz więc podać liczbę linii, zanim zostanie wysłane polecenie wycięcia. Powinieneś być w stanie sformatować łańcuch z powiedzmy 5 liniami (LF -> Chr (10)), wysłać je, a następnie wysłać polecenie cięcia.

W dossoucji EScPOS znajduje się polecenie GS V, które podaje i przecina papier we właściwym miejscu.

+0

W takim przypadku w paragonie brakuje więcej niż jednego wiersza, ponieważ pozostawienie 4 pustych wierszy przed ostatnią linią jest bardzo nietypowe. – alexandrul

+0

W dossoucji Epson EScPOS znajduje się polecenie GS V, które podaje i wycina papier we właściwym miejscu. – JDibble

+0

Masz rację, ale oryginalne pytanie nie zawierało spacji między ostatnią linią paragonu a treścią następnego paragonu. Również model TM-U220D nie ma przecinaka. – alexandrul

Powiązane problemy