COM Port und Serieller Drucker reden nicht miteinander

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von mgbig.

    COM Port und Serieller Drucker reden nicht miteinander

    Moin !

    Ich habe einen Epson LQ 680 und dafür eine serielle Schnittstelle. Jetzt will ich die beiden zusammen bekommen, aber sie wollen nicht.
    Im Anhang die Einstellungen für den COM Port (COM2 ist richtig, ich habe einen anderen seriellen Drucker schon zum Laufen bekommen)

    Die serielle Schnittstelle har reichlich Einstellmöglichkeiten (DIP Switches und Jumper). Ich schreib hier mal runter was da geht.
    DIP Schalter 1 (* das ist die aktuelle Position)
    1 - Karte aktivieren - ON* / OFF
    2 - Datenwortlänge - ON* (8 Datenbit) / OFF 7 Bit
    3 und 4 Paritätsprüfung - sind mehrer Möglichkeiten steht auf: keine Parität
    5 und 6 Baudrate zusammen mit DIP Schalter 2 - 1 und 2: Die Baudrate ist auf 19200 eingestellt.

    DIP Schalter 2
    1 und 2 schon erklärt
    3 Handschake ON -DTR / OFF* X-ON/X-OFF
    4- RS232D/Current Loop: ON = RS232D* / OFF Current Loop

    Dann gibt es noch 3 Jumper an denen ich nichts verändert habe:
    J1: ON erhöht TTY-TXD über einen 200 Ohm Widerstand auf 5 V - steht auf OFF*
    J2: Wahl der Flag Prioriät JNOR* oder JREV (???)
    J3: ON* - X-ON/X-OFF Zeichen werden von TXD (PIN Nr2) übertragen / OFF Setzt TXD Signale auf SPACE

    Die Jumper sagen mir so gar nix.

    Es besteht auch die Möglichkeit, dass das Kabel nicht richtig ist es ist ein altes serielles Kabel, an dem ich mal ein Modem hatte (das waren noch Zeiten....)
    Danke für Hilfe mgbig

    Edit: Das schiebe ich mal nach. So will ich drucken:

    Quellcode

    1. Dim objStreamReader As StreamReader
    2. Dim strLine As String
    3. objStreamReader = New StreamReader("C:\projekte\text.txt")
    4. 'Read the first line of text.
    5. strLine = objStreamReader.ReadLine
    6. Do While Not strLine Is Nothing
    7. Me.SerialPort1.WriteLine(strLine)
    8. strLine = objStreamReader.ReadLine
    9. Loop
    10. 'Close the file.
    11. objStreamReader.Close()
    12. Me.SerialPort1.Close()

    Bilder
    • Screenshot com2.png

      17,86 kB, 302×511, 187 mal angesehen
    Ich bin Umsteiger: Früher VB 4.0 prof, heute VB NET unter Studio 2019 Community Edition (und da noch ein Greenhorn :D )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „mgbig“ ()

    mgbig schrieb:

    Ich schreib hier mal runter was da geht.
    Bei einer unbekannten oder nicht verfügbaren Hardware lässt es sich nur sehr schwer helfen, da wir hier nix nachvollziehen können.
    Was sagt das Handbuch des Herstellers?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany Was braucst Du genau? Der Drucker ist ein Epson 680Pro (24 Nadeldrucker), die Serielle Karte hat die Bezeichnung Epson C824431 oder hinten 32 (laut Handbuch), wobei auf der Karte selber steht C82305* Zu der 2. genannten Nummer gibt es im Internet ein Manual -> files.support.epson.com/pdf/c82305/c82305u1.pdf und für den Drucker gibt es auch ein Manual. Da steht aber im Grunde nur, wie man die Karte einbauen soll. Manual -> files.support.epson.com/pdf/lq680p/lq680pu1.pdf ab Seite 135
    Ich habe schon geschaut, ob man die Paralelle Karte irgendwo "abstellen" muss, aber da steht nix (soweit ich es gesucht habe...)
    mgbig
    Ich bin Umsteiger: Früher VB 4.0 prof, heute VB NET unter Studio 2019 Community Edition (und da noch ein Greenhorn :D )
    @mgbig Was sagt das Betriebssystem, ernn Du dort diesen Drucker hinzufügst?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany Ups!
    Ganz ehrlich: DIESEN Weg bin ich nicht gegangen, aber ja, es wäre ein Versuch, die beiden erst mal zusammen zu bekommen.
    Mein Problem: Ich möchte den Drucker ganz simpel direkt per ASCII Ausgabe an den Port steuern. Ich habe das in meinem alten Projekt (VB 4.0 prof) so gemacht (allerdings mit OPEN "LPT1:" for OUTPUT" an der paralellen Schnittstelle) und das ging Jahre sehr schön. Warum ich diesen Weg gewählt habe? Ich drucke Endlosetieketten!
    Aber ich werde mal den Versuch starten den Drucker dem Betriebssystem hinzu zu fügen. Danke für den Tipp!

    Edit:
    So, ich habe es versucht.
    1. Für den Drucker gibt es keine Treiber für Windows 7 :(
    2. Es gibt Treiber für die LQ Serie, da habe ich einen versucht aber auch ohne Erfolg
    3. Ich habe mal das Kabel durchgemessen, es entspricht diesem: bytes-and-more.de/IMAGES/Ser9an25.gif

    Wie bereits geschrieben habe ich bereits einen anderen Drucker an diesem Port betreiben können. Zur Info: Der Drucker ist was neuer, ein ThermoTranferdrucker genau genommen ein Avery AP 4.4. Der wird auch (von mir) nur per ASCII zeichen angesprochen. Die Sprache mit der das läuft heißt EasyPlug, das ist hier alles wahrscheinlich nicht wichtig, es zeigt aber, das es am PC und der Programmierung wohl nicht liegt, sondern entweder am Kabel oder an der Schnittstelle... oder ???
    mgbig

    Edit 2: Ich habe doch einen Treiber gefunden. Der von Win XP 64 bit ist auch für Win 7 64 bit gut. (stand da jedenfalls!) Aber er druckt nicht. Ich habe die Schnittstelle in Verdacht!
    Ich bin Umsteiger: Früher VB 4.0 prof, heute VB NET unter Studio 2019 Community Edition (und da noch ein Greenhorn :D )

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „mgbig“ ()

    Ich habe die Schnittstelle in Verdacht!


    Ich das Kabel. (Ein Drucker ist kein Modem und benötigt ein gekreutztes Kabel).

    Versuch' mal:

    Brainfuck-Quellcode

    1. PC 9-Pol. Drucker 25-Pol.
    2. TxD 3 <-------> 3 RxD
    3. Rxd 2 <-------> 2 TxD
    4. DSR 6 <-------> 20 DTR
    5. GND 5 <-------> 7 GND
    6. 7 - 8 4 - 20
    7. RTS - CTS RTS - DTR


    Richtige Schniitstellenprogrammierung (HardwareHandshake nicht vergessen) setze ich voraus.
    Hallo,

    Kannst du nicht nen älteren Treiber decompilieren oder reversen? Weil ich glaubee dass der Drucker Steuerbefehle erwartet und oder überträgt.

    Ich weiß zwar dass man auf der LTP-Schnittstelle bei der ECP(??) einstellung in BIOS zwar dan mit nen Druck auf die Druck / Print Taste die aktuelle BIOS-Page einfach so drucken konnte auch ohne treiber, jedoch weiß ich nicht ob da nicht doch dass eine oder andere Magic Byte übertragen wird was nicht gedruckt sondern für die Steuerung des Druckers genutzt wird.

    Deswegen würde ich deinen Programm endpfelen ebenfalls erstmal die "Stuerdaten" zu übertragen und dann Protocol Gemäß den zu druckenden Content.

    LG, Herbrich
    Ich tippe hier auch auf ein unpassendes Kabel. Das muß sicher ein gekreutztes Kabel sein, siehe das schon angegebene Pin-Layout bei 9->25pol. Haben wir hier 9->9pol, reicht es eigentlich, RXD und TXD sowie RTS/CTS und DTR/DSR zu kreuzen.

    Eingestellt ist der Printer auf 19200 Baud, 8 Datenbits, keine Parität, 1 Stopbit (19200 8N1). Würde ich auch so lassen. Das Handshake (Serial I/O funktioniert nur mit Handshake) ist eingestellt auf XON/XOFF. Das sind Zeichen, die extra übertragen werden müssen. Die Alternative ist das Hardware-Handshake via DTR/DSR.

    Die Ansteuerung eines serilellen Druckers ist etwas aufwändiger als ein OPEN "LPT1:" for OUTPUT". Das kannst vergessen ;) Du mußt zunächst die Routinen für die serielle Schnittstelle schreiben - was aber kein Hexenwerk ist.