Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

unter DOS Druckkopf bewegen Epson LQ-1070+ / ESC/P2

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 03.11.2007, 06:30    Titel: unter DOS Druckkopf bewegen Epson LQ-1070+ / ESC/P2 Antworten mit Zitat

Hallo,
habe da folgendes einfaches Programm erstellt:
Code:

mov ax, @data
mov ds, ax

M1: mov ah, 1
int 21h
mov dl, al             ; 1 Zeichen einlesen
cmp dl, 0dh           ; ENTER-Taste damit sicher ein CR/LF ausgelöst wird
je M2
cmp dl, 35            ; #-Zeichen

je M3
mov ah, 5    ; das eine eingegebene Zeichen, wenn nicht # ist an Drucker senden
int 21h
jmp M1

m2: mov dl, 10
mov ah, 5
int 21h
mov dl, 13
mov ah, 5
int 21h
jmp M1

M3: mov ah, 4ch
int 21h
end   


es funktioniert soweit, nur kann ich den Druckkopf nicht nach rechts/links bewegen (Leertaste/Rücktaste geht nicht, normale Abstände während dem Schreiben erscheinen aber normal; mit den Pfeiltasten kommen M und O's )
Wie kan ich den Drucker dazu bewegen, sich an eine bestimmte Stelle in Echtzeit manöverieren zu lassen?

Ein ähnliches Programm welches je eine Zeile ausdruckt habe ich in VB für DOS erstellt, dort tritt das Problem auch auf dass keine Abstände VOR dem Text erscheinen(habe einfach LPRINT verwendet).
_________________
...längre blomstre gamle nord...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 03.11.2007, 18:14    Titel: Antworten mit Zitat

Könntest du vllt dabeischreiben, mit welcher FB-Version du das kompilieren(und ausführen) kannst?
Gut, die linuxer wissen sowieso auf den ersten Blick, daß ein Programm, das Dos-Funktionsaufrufe benutzt(Int 21H) nicht unbedingt für linux gemacht ist..happy
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 03.11.2007, 22:14    Titel: Antworten mit Zitat

das assembliere ich mit masm (in FB kann man ja keinen int auslösen) grinsen
_________________
...längre blomstre gamle nord...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 03.11.2007, 22:20    Titel: Antworten mit Zitat

c.m.obrecht hat Folgendes geschrieben:
das assembliere ich mit masm (in FB kann man ja keinen int auslösen) grinsen
..wunderschön grinsen
1. hatte ich mir das gedacht^^
2. wollte ich das mal geschrieben sehen lachen
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Georgp24



Anmeldungsdatum: 30.06.2006
Beiträge: 81
Wohnort: Ahlen

BeitragVerfasst am: 04.11.2007, 16:45    Titel: Antworten mit Zitat

Man kann den Drucker in einen Hex Dump Modus stellen, dann sieht man, welche Zeichen er überhaupt empfängt.

Es gibt auch ESC-Codes um den Druckkopf eine bestimmte Zahl von Schritten nach links oder rechts zu bewegen. Ein Blick ins Handbuch gibt da Aufklärung.

Gruß

Georg
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 05.11.2007, 22:25    Titel: Antworten mit Zitat

..ich dachte nicht daran dass man nicht darauf kommen könnte dass das Programm mit MASM assembliert werden muss grinsen

Das Space-Zeichen 20h wird ganz normal gesendet (habe ich über den Hexdump erfahren); jedoch wird der Druckkopf erst dorthin bewegt nachdem ein anderes Zeichen eingegeben wurde oder das Zeilenende erreicht.

Habe nun im Handbuch nachgeschaut; es sind ESC-Befehle angegeben (Druckposition um n Einheiten verschieben) doch ich verstehe nicht, wie ich die an den Drucker senden soll; wenn ich esc @ irgendwas übergebe (habe nun auch FUnktion 17h statt 21h probiert, gleicher Effekt) wird logischerweise diese Zeichenfolge ausgedruckt (oder?); wie muss ich da vorgehen?

Danke lächeln
_________________
...längre blomstre gamle nord...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Georgp24



Anmeldungsdatum: 30.06.2006
Beiträge: 81
Wohnort: Ahlen

BeitragVerfasst am: 06.11.2007, 19:20    Titel: Antworten mit Zitat

Im Hexdump sieht man natürlich alle Zeichen auf dem Papier. Ansonsten wird der Drucker den mit ESC eingeleiteten Befehl ausführen und diesen Steuerbefehl nicht aufs Papier bringen.

Nur bei längeren, falsch eingegebenen Steuerbefehlen kommt ein Teil davon aufs Papier, da der Drucker den Befehl nicht versteht und dann einen Teil der Zeichen wieder als Druckdaten interpretiert.

Gruß

Georg
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 07.11.2007, 07:58    Titel: Antworten mit Zitat

Da muss ich also wirklich Vorgehen in der Art von:
Code:

mov dl, "ESC Befehl....."
mov ah, 5
int 21h
...

?
_________________
...längre blomstre gamle nord...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Georgp24



Anmeldungsdatum: 30.06.2006
Beiträge: 81
Wohnort: Ahlen

BeitragVerfasst am: 07.11.2007, 08:26    Titel: Antworten mit Zitat

In dl kann man immer nur ein Zeichen übergeben.

Mehrere Zeichen gibt man besser mit ah=40h aus.

Gruß

Georg
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 07.11.2007, 17:12    Titel: Antworten mit Zitat

Habe einmal die System Calls nachgeschaut:

INT 21h/AH=01h:
http://www.ctyme.com/intr/rb-2552.htm
INT 21h/AH=05h:
http://www.ctyme.com/intr/rb-2557.htm

=> demnach willst Du einfach Bytes an den Parallelport unter reinem DOS senden. Für so etwas kannst Du Dir Assembler sparen, würde ich in QB mit z.B.
Code:
OPEN "lpt1" FOR OUTPUT AS 1
PRINT#1, CHR$(Zeichen%);
CLOSE 1

viel einfacher lösen, da kannst Du auch ganze Strings übergeben.

Sonst zum Thema Druckkopf positionieren: Musst Du schon als etwas Firmware-Spezifisches betrachten, d.h. Du kannst nur Deinem Drucker im Normalfall sagen, was aufs Papier muss, aber nicht unbedingt das "Wie" beeinflussen. Betrachte den Drucker wie ein Angestellter im Malergewerbe - Du befiehlst ihm als Chef nur, welche Fläche er mit welcher Farbe anstreichen muss. Ob der Arbeiter nun horizontal oder vertikal pinselt, ist seine Sache! Schlussendlich zählt nur das Endergebnis...

Von da her würde ich das Vorhandensein eines solchen Low-Level-Druckerkommandos als etwas sehr Herstellerspezifisches betrachten.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 08.11.2007, 06:40    Titel: Antworten mit Zitat

Ja stimmt natürlich, da kann man nur je ein Zeichen übergeben; aber der String wäre tatsächlich "esc XXXX....."?

Es soll nicht weiter stören wenn das Programm nur mit dem LQ-1070 läuft.
_________________
...längre blomstre gamle nord...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Georgp24



Anmeldungsdatum: 30.06.2006
Beiträge: 81
Wohnort: Ahlen

BeitragVerfasst am: 08.11.2007, 18:43    Titel: Antworten mit Zitat

Wenn der Drucker ein ESC bekommt, wartet er erstmal die folgenden Zeichen ab ob sich ein gültiger Steuerbefehl ergibt. Wenn ja wird dieser ausgeführt und die Zeichen nicht ausgedruckt.

Gruß

Georg
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 09.11.2007, 20:33    Titel: Antworten mit Zitat

Also ich versuchte gerade feolgendes:
Code:

escsend: mov dl, "e"
mov ah, 5
int 21h
mov dl, "s"
mov ah, 5
int 21h
mov dl, "c"
mov ah, 5
int 21h
mov dl, "v"
mov ah, 5
int 21h
mov dl, 1
mov ah, 5
int 21h


mit dem Ergebnis "escvescv" auf dem Papier grinsen
_________________
...längre blomstre gamle nord...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
E-P-S



Anmeldungsdatum: 16.09.2004
Beiträge: 500
Wohnort: Neuruppin

BeitragVerfasst am: 09.11.2007, 20:56    Titel: Antworten mit Zitat

Ein ESC an den Drucker zu senden bedeutet das du den Zahlenwert 27d (1Bh) an den Drucker sendest. Dies leitet einen Escape Steuerbefehl ein.

Schau mal hier nach: http://de.wikipedia.org/wiki/ESC/P
_________________
Man kann sich öfter als zweimal im Leben halb tot lachen.


Zuletzt bearbeitet von E-P-S am 09.11.2007, 20:59, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Georgp24



Anmeldungsdatum: 30.06.2006
Beiträge: 81
Wohnort: Ahlen

BeitragVerfasst am: 09.11.2007, 20:57    Titel: Antworten mit Zitat

ESC ist das ASCII-Zeichen 1B hex oder 27 dezimal.

Gruß

Georg
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 10.11.2007, 06:34    Titel: Antworten mit Zitat

Ach so! Danke lächeln So etwas dachte ich mir doch.
_________________
...längre blomstre gamle nord...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz