Drucker per TCP ansteuern

merlin

Level-1
Beiträge
184
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Ich hab ein paar Differenzen mit einem Netzwerkdrucker.
Ich habe im TwinCAT den TCP/IP-Server eingebunden. Starte den Client auf die IP und den Port des Druckers. Wenn ich Daten rüber schreibe steht am Drucker auch "Datenverarbeitung".

Was mir jetzt fehlt ist der Befehl für "Starte Ausdruck". Kann mir da wer helfen?

Wenn ich die Verbindung zum Server abbaue, startet der Druck und er druckt mir die Zeichen aus, die ich vorher geschickt habe. Das möchte ich so aber nicht. Ich würde die Verbindung offen halten um Rückmeldungen (Papierleer, Stau, ...) zu erhalten.

Danke
Thomas
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Nach dem Status-Ausdruck nach, spricht er PCL und PostScript.
Derzeit sende ich einfach per TCP auf den Port 9100 meine gewünschten Daten. Das funktioniert auch ideal.

Nur zum Start des Druckjobs eben, muss ich die TCP Verbindung zum Drucker (der ja der Server ist) kurz abbrechen, dann startet er den Vorgang.

Da ich jedoch Rückmeldungen haben möchte (Druck erfolgreich, Papierstau und Papiermangel) möchte ich die Verbindung gerne offen halten.

Danke
Tom
 
Das funktioniert auch ideal.

Na ja, ohne Formatierung, ohne Linien und dergleichen, und wehe es verstellt jemand irgendeinen Defaultwert am Gerät.

Aber dennoch würde ich es mal mit einem FormFeed nach den Daten probieren, ASCII 12 (dezimal) bzw. 0c (hex).

Ansonsten mal "PCL 5 Printer Language Technical Quick Reference Guide" bei HP runterladen, da stehen die wichtigsten Sachen zu PCL drin.
 
Hallo Oberchefe

Kennst du den TCP/IP-Server von Beckhoff? Ich finde keine Möglichkeit direkte ASCII-Zeichen zu übertragen... Hast du eine Idee?

Danke
Thomas
 
Also entweder steh ich komplett am Schlauch oder ihr vertut euch etwas.

Ich sende: "Mein Testtext$R$N"

Das sendet den Text "Mein Testtext" mit anschliessendem carriage return / line feed

Sende ich nun den nächsten Text steht der halt in der 2. Zeile.

Aber: Am Drucker steht nur Datenverarbeitung. Die Seite würde er erst drucken mit einem FormFeed. Wie bitte bringe ich das FormFeed zum Drucker rüber?

Danke
Thomas
 
Ich sende: "Mein Testtext$R$N"

Das sendet den Text "Mein Testtext" mit anschliessendem carriage return / line feed

Sende ich nun den nächsten Text steht der halt in der 2. Zeile.

Sende mal "Mein Testtext$R$N$F"
Zumindest tippe ich mal, dass $F der Seitenvorschub ist. Ansonsten musst du mal deine Anleitung wälzen und nach dem passenden Steuerzeichen für Formfeed suchen.

Gruß
Dieter
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der String String "Mein Testtext$R$N$F" wird nicht akzeptiert:
Fehler 3908: Ungültige Stringkonstante

Die Anleitunge besagt, dass das ASCII-Zeichen 12 gesendet werden muss.
Ich suche jemanden der mit dem Beckhoff TCP/IP-Server mehr Erfahrung hat und weiss wie man dezitiert ASCII-Zeichen abschicken kann!!

Danke
Tom
 
Mit einer vernünftigen Fehlermeldung ist man(n) doch gleich schlauer :p
Nimm mal $P. Das müsste eine zulässige Stringkonstante sein ... zumindest laut Handbuch

Gruß
Dieter
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also, leider kenne ich das Teil auch nicht aber lt. Handbuch kannst du
den Code 12 eigentlich so senden

"StringUnd$N$R$0c" ... $Zeichen und 2 Hex Ziffern also 0 (null) und C (=12)

Vermutlich ist $P richtig und vermutlich funktioniert auch $0c, allerdings wird das vielleicht nur aktiv wenn noch ein Zeichen nachkommt,

also zb ein Leerzeichen

"StringUnd$N$R$0c " ...

Da der Drucker auch das Leerzeichen drucken muss und vorher der Seitenvorschub eingetragen ist, könnte es so funktionieren....

Eventuell...
 
Drucker ansteuern

Hallo Forumsgemeinde,

ich muss auch einen CAB Drucker über Ethernet ansteuern. Soweit kommt das Telegramm auch an,
aber es sind immer Protokollfehler enthalten.
Ich sende einfach ein Array of String und denke das es daran liegt.
Weiß jemand ob es als Array of Char passieren muss?
Code:
Code:
iLength := LEN(sWeight);
IF iLength = 4
THEN
strWeight := LEFT(sWeight,1);
END_IF
IF iLength = 5
THEN
strWeight := LEFT(sWeight,2);
END_IF
IF iLength = 6
THEN
strWeight := LEFT(sWeight,3);
END_IF




IF VisuPrinterEin
THEN
bPrinterAktiv := TRUE;
bPrinterInAktiv := FALSE;
ELSIF VisuPrinterAus
THEN
bPrinterAktiv := FALSE;
bPrinterInAktiv := TRUE;
END_IF

IF bReset THEN
    bEvDruckerAusfahren := FALSE;
    bEvDruckerEinfahren := TRUE;
    bPrinterReady := FALSE;
    bDruckerPrintStart := FALSE;


    state := 1;
    END_IF


CASE state OF
1:
    bPrinterReady := FALSE;
    IF bPrint THEN
    bEvDruckerEinfahren := FALSE;
    state := 10;
    END_IF;

10:
    (* Create TCP/IP connection *)
        fbConnect(     sSrvNetID         := '',
                    nMode            := CONNECT_MODE_ENABLEDBG,(* Enable debug output *)
                    sRemoteHost     := sRemoteHost,
                    nRemotePort         := nRemotePort,
                    tReconnect        := T#20s,
                    bEnable            := TRUE,
                    eState            => eState );
        IF NOT fbConnect.bBusy THEN


            IF NOT fbConnect.bError THEN
                IF eState = eSOCKET_CONNECTED THEN(* we are connected *)
                    state     := 20;
                END_IF
            ELSE bErrorTcp := TRUE;

(* connect error: log error
                errors.A_AddTail( putError := fbConnect.nErrId ); *)
            END_IF
        END_IF


20:
sendBuffer[0] := 'M l LBL;LAY1$R$L';
sendBuffer[1] := 'R ER;PALM$R$L';
sendBuffer[2] := 'R SO;ELSTAR$R$L';
sendBuffer[3] := 'R GR;70/80$R$L';
sendBuffer[4] := 'R GW;300KG$R$L';
sendBuffer[5] := 'R KL;1$R$L';
sendBuffer[6] := 'A 1$R$L';
state := 30;

30:
fbSend( bExecute := FALSE );
                            fbSend(    sSrvNetID     := '',
                                    hSocket        := fbConnect.hSocket,
                                    cbLen        := SIZEOF(sendBuffer),(* size of header + size of user data *)
                                    pSrc        := ADR(sendBuffer),(* pointer to the frame data *)
                                    bExecute    := TRUE,
                                    tTimeout         := T#5s );
state := 40;

40:
fbSend( bExecute := FALSE );
                    IF NOT fbSend.bBusy THEN

                        IF NOT fbSend.bError THEN(* no error *)
    fbConnect( bEnable:= FALSE, eState=>eState );
        IF eState = eSOCKET_DISCONNECTED THEN
            state := 203;
        END_IF

                        END_IF
                    END_IF

203:
IF bDruckerBereit AND bDruckerError
THEN
bEvDruckerAusfahren := TRUE;
END_IF
IF NOT bDruckerEingefahren
THEN
state := 204;
END_IF

204:
IF bDruckerAusgefahren  THEN
bEvDruckerAusfahren := FALSE;
bDruckerPrintStart := TRUE;
state := 205;
END_IF

205:
IF NOT bStempelEingefahren
THEN
state := 2059;
END_IF

2059:
IF bStempelEingefahren
THEN
state := 2060;
bDruckerPrintStart := FALSE;
END_IF

2060:
bEvDruckerEinfahren := TRUE;
state := 206;
206:
IF bDruckerEingefahren
THEN
bEvDruckerEinfahren := FALSE;
bDruckerPrintStart := FALSE;
bPrinterReady := TRUE;
state := 1;
END_IF





















;
END_CASE
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

versuch doch einfach mal den String via CONCAT() zusammenzufügen, und als ein String zu senden. Sollte normal als String funktionieren.
Hab zwar bis jetzt nur Drucker von CAB via RS232 angesteuert, aber die Syntax bei TCP sollte gleich sein. Wichtig ist am Ende der Befehl A1. Sonst druckt er nicht!

Gruß Scrat
 
Hi,
habe ich auch schon versucht das Problem ist, dass es genau einmal funktioniert und beim zweiten mal
kriege ich mehrer Protokollfehler.
Dann schalte ich den Drucker einmal aus und dann funktioniert es wieder einmal :confused:
Hat jemand eine Idee?
 
Ja, zum Beispiel Wireshark.
Beachte aber, dass Du einen HUB (keinen Switch) dazwischen hängst um die Datenpakete aufzuzeichnen. Sonst kommt nix.

Gruß Scrat
 
Zurück
Oben