Hallo an alle,
ich hoffe ich bin hier richtig. Habe schon eine zeitlang rumgegoogled und hier im Forum gesucht, bin aber leider noch nicht fündig geworden.
Mein Problem:
Ich schreibe in C# (nutze Visual Studio 2008) ein kleines Tool, mit dem ich über die serielle Schnittstelle Meldungen von einem Drucker empfange (z.B. Seitenquittierungen etc). Das klappt auch wunderbar. Allerdings würde ich gerne auch per Knopfdruck einen String an den Drucker zurückschicken. Nur die Daten kommen leider beim Drucker nicht an. Eine Fehlermeldung tritt auch nicht auf.
Hier etwas Code von mir:
//Einstellungen stimmen mit denen des Druckers überein
ComPort.StopBits = System.IO.Ports.StopBits.One;
ComPort.Parity = System.IO.Ports.Parity.None;
ComPort.Handshake = System.IO.Ports.Handshake.XOnXOff;
ComPort.BaudRate = 9600;
ComPort.DataBits = 8;
ComPort.Open();
Status = ComPort.ReadLine(); //klappt einwandfrei
ComPort.Write("Test"); //dieser String kommt nicht beim Drucker an
ComPort.Close();
Ich hab auch schon das Lesen weggelassen und nur versucht zu schreiben, aber es klappt nicht. Da ich erst seit ein paar Wochen C# lerne bzw mir selbst beibringe und ich nichts dazu gefunden habe, hoffe ich, daß mir jemand von euch helfen kann.
Was genau mache ich falsch? Muß ich vielleicht selbst den String in Bits umwandeln und dann bitweise rüberschicken? Da probiere ich auch gerade herum, aber noch ohne Erfolg...
Vielen Dank, Joetempes!
Verdammt, deine Anwendung sieht sogar fast genau so aus wie meine 😃
Nur leider habe ich damit das gleiche Ergebnis: ich empfange zwar die Meldungen vom Drucker, aber senden kann ich nichts.
Da ich davon ausgehe, daß deine Anwendung eigentlich funktioniert, baut mich das doch etwas auf - denn dann liegt der Fehler ja eventuell gar nicht in meinem Code, sondern irgendwo in der Hardware.
Das ist zwar auch nicht wirklich gut, aber dann kann ich wenigstens nichts dafür. Ich werde mir deinen Code aber nochmal ganz genau angucken. Vielleicht finde ich ja doch noch was.
Danke nochmal, auch dafür, daß die Antwort so fix kam!
Hallo,
schreib uns doch mal, wie das Kabel belegt ist.
Auch gebrückte PIN können wichtig sein
Grüße
Jürgen
Woher weist du, das der String nicht gesendet wird? Hast du einen Schnittstellentester an der Schnittstelle?
Ich würde ganz spontan sagen, es fehlt ein CR/LF am Ende des Druckerbefehls.
Zur Belegung des Kabels kann ich morgen mehr sagen.
Zum Befehl: Der "Test"-String ist nur ein Beispiel. Ich schicke konkrete Steuerungssignale rüber. Daß davon nichts ankommt sehe ich daran, daß ich den Speicher des Druckers auslesen kann. Der ist nach dem Senden leer. Ich kann die Steuerungsbefehle auch per Centronics und über Ethernet an den Drucker schicken, dann klappt es.
Edit: Mein Code ist aber generell richtig, oder?
Hallo Metalchild,
der Code ist soweit Ok, machst ja auch nichts dolles, nur senden und empfangen.
Wenn du Empfangen kannst, woher kommen da die Daten, du forderst ja nichts an, werden die immer gesendet, oder machst du das händisch? Evtl. Empfängt dein Drucker nichts weil er gerade sendet.
Kann dein Drucker mit Strings umgehen, hast du mal Byte[] oder so versucht zu senden, wenn du Steuercodes senden willst, sind das ja nicht zwingend strings.
Gruß Daniel
Das Problem hat sich geklärt, vielen Dank und sorry für die Störung - es war tatsächlich einfach nur eine Fehlkonfiguration des Druckers. Er hat den Kanal für's Senden einfach dichtgemacht.
Jetzt läuft alles. Der Drucker feuert seine Statusmeldungen automatisch raus, zwischendurch Daten rüberschicken kann ich aber trotzdem.
Danke für eure Hilfe, ich hätte sonst wahrscheinlich noch ewig im Code nach Fehlern gesucht 😃