Zugriff auf COM - Anschluss von externem Gerät

postmaster-ino:
Beim Kabel kann man Es verschmerzen, wenn Da die Garantie futsch ist, weil man irgend einen Stecker abgebissen hat - beim Scanner könnte Das ärgerlicher werden, wenn man in Dessen Innereien rumlötet.

Das Kabel vom Scanner zum PC ist lt. Datenblatt Bild austauschbar, so ein Ethernet Stecker, wenn Du da eine 5 Volt Logik hast wäre das die beste Lösung! <- zu spät, wenn der TO selber drauf kommt, wird das wohl gut sein auch wenn ich Seite 19 im Sinn hatte. :wink:

Grüße,
Donny

Hallo zusammen,

noch einmal ich: Nachdem ich gestern ein Erfolgerlebnis hatte, habe ich mich heute gleich an die vollständige Lösung gemacht. Dazu habe ich folgende Komponenten ausgewählt:

Das RS232-Kabel von Seite 8 des Datenblattes.

@Donny: Das ist dann der Stecker mit 5 Volt Logik, den Du gemeint hast, oder?

Das Kabel hat eine weibliche SUB-D-Buchse. Zum Anschluss an den Arduino nehme ich diesen Stecker. Von dort gehen die jewiligen Pins dann zum Arduino 2(TX), 3(RX) und die Spannungsversorgung (GND und +5V). Meint Ihr dieses Setup passt dann?

Softwareseitig nehme ich dann SoftSerial-Bibliothek, um auf die Arduino-Pins zuzugreifen.

Wenn Ihr mir hier ein "Go" geben könntet, dann würde ich die Teile bestellen.

Euch allen vielen Dank und Grüße

Bire

bire:
@Donny: Das ist dann der Stecker mit 5 Volt Logik, den Du gemeint hast, oder?

Langsam! RS232 ist nicht das selbe wie der Rx und Tx Pin am Arduino. Ein RS232 kann eine Spannung von +/-12Volt haben! Aber in Deinem Fall solte es keine Probleme geben.

Bevor Du wild drauf los steckst kannst Du ja mal die sicherheitshalber nachmessen. Wenn Du nur bis 5Volt misst, passt Dein Setup. IMHO

Grüße,
Donny

Nach nochmaligen lesen des Datenblattes bin jetzt zu folgenden Schluss gekommen.

Du kannst mithilfe von Barcodes den Scanner einstellen. (Seite 10, Barcode für Werkseinstellungen, nicht im Supermarkt überkleben :smiling_imp: )
Der 'Ethernet' Stecker ist ein RJ-41 (6-pol.). Die Telekom (Österreich) hat/hatte die s.g. ISDN Leitung mit einer 6-pol. Leitung. Wer das hatte... ja der konnte mit ganzen 64k angeben. (anstelle von 56k) :wink:

Die Stecker werden allerdings auch bei Kassasystemen verwendet so kannst Du den Scanner direkt mit einer Registrierkassa verbinden. Außerdem sind sie Abwärtskompatible. Wenn die 2 äusseren Pins nicht benötigt werden, könntest Du ein RJ-11 Telefonkabel einfach zerschneiden und anschließen. Aber das wird wahrscheinlich leider nichts werden und ein Ethernet Kabel ist zu breit (8-pol.).

Datenblatt:
3.1.1 KB 232-1 IT 190x Art-Nr. 50114517
Spiralkabel, maximale Länge 3 m. Signalpegel 0 und +5 Volt -> TTL
Pinbelegung der 9-poligen D-Sub Buchse (female) beim Kabel CBL-020-300-C00
....
3.1.2 KB 232-1 IT 190x Art-Nr. 50115105
Wie Artikelnummer 50114517 jedoch True RS 232-Variante mit -12 …+12 Volt Signalpegel erhältlich.
Kabelkennzeichnung: CBL-120-300-C00

Seite 8: Da ist der Unterschied zwischen den Kabeln schön erkennbar. _was ich mit den +/-12 Volt meinte, Du brauchst TTL also das Kabel mit der Artikelnummer: 50114517 <- Ein RJ-41 Kabel ist billiger.

Ob da ein USB Kabel oder ein RS232 dran hängt, ist eigentlich ein großer Unterschied. Deshalb gibt es auch für jedes 'Kabel' einen eigenen Barcode. -> siehe: Kapitel 5 - Parametrierung.
Schau Dir das im Datenblatt (ab Seite 11) mal genauer an.
Du wirst sehen das es verschiedene Einstellungen gibt und zu jeder einen Barcode.
z.B.: RS 232-Übertragung mit 115200 Baud, 8 Datenbits, 1 Stoppbit, No Parity, kein Präfix und Suffix.
Oder Punkt 5.3 (Datenblatt Seite 16) schaut mir wegen der Anschlussbelegung gut aus.
Die Einstellungen: RS 232-Übertragung mit 9600 Baud, 7 Datenbits, 1 Stoppbit, Parity Even, Suffixe CR/LF. <- 7 Datenbits ? Ich kann leider auch nicht alles wissen. Deshalb kann ich Dir keine Einstellung empfehlen.

Deshalb: Lieber einmal zu oft messen als einmal zu wenig. Allerdings wird das Teil 'ohne externes Netzgerät' nie 12 Volt über die Leitung zu schicken. <- Das ist der einzige Grund, warum man ein Netzgerät anschließen kann. Vorteil: Längere Kabeln möglich.

Der Vollständigkeit halber:
So wie Du ein USB Host Shield verwenden kannst, kannst Du auch 'fast' direkt eine PS/2 Tastatur am Arduino anschließen, somit also auch den Scanner mit dem PS/2 Kabel. Das ist aber keine Lösung, das ist ein Workaround. :wink:

Nachtrag: Wenn Du das Kabel auf Seite 8, Punkt: 3.1.1 (KB 232-1 IT 190x Art-Nr. 50114517) nimmst. Bekommst Du von mir ein IMHO Go! :wink: Alternativen habe ich bereits erwähnt.

Grüße,
Donny

Mal in der Vergangenheit weilen.
DOS kannte COM14 > COM13 und Windows im CMD Fenster müßte das auch noch können. Da müssen ber beide am PC hängen und der PC eingeschaltet und die Umleitung eingegeben sein (könnte auch im autoexec.bat stehen)

Arduino kann die Daten eines Scanners nur erhalten wenn der Scanner entweder eine PS2 Tastatur emuliert (früher gabs Scanner zwischen Tastatur und PC zu stecken) oder eine Serielle Schnittstelle (TTL pegel direkt; RS232 conforme Pegel mittels eines Adapters zB eines MAX232 oder ähnliche).

Grüße Uwe

Also ich würde auch das Kabel „3.1.1 KB 232-1 IT 190x Art-Nr. 50114517“ nehmen.
Das hat die richtigen Pegel und kann ohne weitere Adapter direkt mit dem Uno über (soft-)seriell verbunden werden.

Hallo zusammen,

Euch allen erst einmal DANKE

@Donny: Ja, das mit den Pegeln hatte ich auch gesehen. Meine Überlegung war folgende: Ich versorge den Scanner ja über den Arduino mit 5V und so kann auch nichts passieren, bzw. dann bleibe ich immer im sicheren Bereich, das meintest Du, oder?

@uwefed: Danke für Deinen Hinweis! Das mit emulierten Tastatur hat funktioniert. Ich bin nun nur auf der Suche, nach einer Lösung, wie Sie auch "ElEspanol" treffend beschrieben hat:

und kann ohne weitere Adapter direkt mit dem Uno über (soft-)seriell verbunden werden.

Genau so eine Lösung suchte ich!

Ich habe eben die Kabel und den Adapter bestellt. Ich hoffe, das kommt morgen noch, dann werde ich das am WE mal versuchen. Ich werde Euch berichten!

Ich danke Euch allen für Euren Einsatz -auch zu so später Stunde! Ich werde das dann so machen. Danke, dass Ihr mich abgesichert habt!

Viele Grüße

Bire

bire:
Ich habe eben die Kabel und den Adapter bestellt. Ich hoffe, das kommt morgen noch, dann werde ich das am WE mal versuchen.

Wie geht das denn? Per Kurier?

Hallo,

ja, das Ganze ist für ein Projekt im Geschäft, welches etwas zeitkritisch ist. Das Kabel liegt auf Lager, das sollte klappen. Ich werde Euch in jedem Fall auf dem Laufenden halten.

Vielen Dank noch einmal und Euch allen einen erholsamen Abend!

Grüße

Bire

bire:
@Donny: Ja, das mit den Pegeln hatte ich auch gesehen. Meine Überlegung war folgende: Ich versorge den Scanner ja über den Arduino mit 5V und so kann auch nichts passieren, bzw. dann bleibe ich immer im sicheren Bereich, das meintest Du, oder?

Solange der Scanner keinen StepUp besitzt ist das Richtig. :wink: Der Scanner hat keinen StepUp! Deshalb braucht man auch das Netzgerät für TRUE RS232. Wenn Du auf Nummer sicher gehen willst, miss einfach zwischen Tx und Masse. während Du einen Barcode scannst. <- Das sollte man aber mit einem Oszi oder Logic Analyser machen, ein Multimeter ist nicht schnell genug.

Du hast ja auch eine D-Sub Buchse mit Schraubklemmen gezeigt/bestellt?
Pin 2 TX -> Pin 2 (RX SoftSerial - Arduino)
Pin 3 RX -> Pin 3 (TX SoftSerial - Arduino)
Pin 5 GND -> GND (Arduino)
Pin 9 Vcc IN <- 5V (Arduino)

Und aus meiner Bastelkiste ein Passthrough Sketch:

#include <SoftwareSerial.h>

SoftwareSerial softSerial(2, 3); // RX, TX

void setup() {
  Serial.begin(115200);
  while (!Serial) {
    ;
  }

  softSerial.begin(9600);
}

void loop() { // run over and over
  if (softSerial.available()) {
    Serial.write(softSerial.read());
  }
  if (Serial.available()) {
    softSerial.write(Serial.read());
  }
}

So 'spielt' das Arduino einen USB->RS232 TTL. Baudraten müssen evtl. angepasst werden.

Grüße,
Donny

Ruhepotential auf RS232 ist einen negative Spannung zwischen -3 und -25V. Beim PC mit ATX Netzteil oder ähnlichem sind es -12V; bei Spannungen aus +5V erzeugt zB mit einem MAX232 sind das ca -8V. Da reicht ein normales Multimeter und eine Schnittstelle die nichts sendet.

Bei TTL sind da 0V. +5V.

Grüße Uwe

uwefed:
Bei TTL sind da 0V.

Grüße Uwe

Bei TTL sind da +5V. In Ruhe (Das Stopbit ist HIGH.)

michael_x:
Bei TTL sind da +5V. In Ruhe (Das Stopbit ist HIGH.)

Ja das hat mich noch irritiert. Wenn ich mit den Multimeter auf meinem FTDI zwischen Tx und GND messen -> 5Volt! (bzw. 3,3V) ohne das was gesendet wird.

Danke! Jetzt kenn ich mich aus.

Grüße,
Donny

Also ein kleines Programm das die Daten von einem ComPort zum anderen überträgt kann ich dir schreiben. Ist eigentlich ganz einfach. Dann kannst du den Arduino direkt an den PC anschliessen und den Scanner ebenfals. Aber mir erschliest sich der sinn nicht.

Gruss Temucin

Hallo zusammen,

ich bin mittlerweile - hoffe ich zumindest - fast am Ziel. Leider immer noch nicht zu 100%. Ich hoffe, es mit Eurer Hilfe doch noch hinzubekommen. Mittlerweile sind die Teile da und ich habe den Scanner angeschlossen. Die Übertragung scheint zu funktionieren. Ich nutze folgenden Code (nahezu identisch mit dem von Donny aus Beitrag #29

#include <SoftwareSerial.h>

SoftwareSerial softSerial(2, 3); // RX, TX

String barcodeData;

void setup() {
  Serial.begin(115200);
  //Serial.begin(9600);
  while (!Serial) {
    ;
  }
  softSerial.begin(9600);
}

void loop() { // run over and over
  if (softSerial.available()) {
    barcodeData = softSerial.readString(); // read incoming data as string
    Serial.println(barcodeData); 
  }
}

Mit diesem Aufbau liest der Scanner bei jedem Scan einen String ein, aber...

Jetzt ist noch folgendes Problem: Mein Test-Barcode sollte den String 'TEST' zeigen (das tat er auch, als ich die emulierte Tastatur ausprobiert habe). Leider erscheinen jetzt nur "kryptische" Zeichen (Bild "SerialMonitor.png" anbei). Habt Ihr eine Idee an was das liegen könnte. Mein erster Gedanke war (weil ich da schon einmal Probleme hatte) die Baudrate am Seriellen Monitor sei nur falsch (Donny hatte auch so was geschrieben), aber das führte leider auch nicht zum Erfolg. Am Code liegt es denke ich auch nicht. Kann mir jemand weiterhelfen? Kann es mit meiner RS232-Übertragung zusammenhängen, laut Datenblatt ist diese:

RS 232-Übertragung mit 115200 Baud, 8 Datenbits, 1 Stoppbit, No Parity, kein Präfix und Suffix.

Falls Ihr noch Infos braucht, meldet Euch einfach.

Sorry, die beiden Bilder sind nicht mit durchgegangen...Anbei findet Ihr Sie.

Vielen Dank im Voraus und Grüße

Bire

Das Bilder sichtbar:

Die Übertragungsraten (Baudrate) müssen auf beiden Seiten und bei allen Geräten entsprechend eingestellt sein.
Du musst also wissen, mit welcher "Geschwindigkeit" der Barcode-Reader sendet. Dieselbe Geschwindigkeit musst du bei SoftSerial einstellen.
Du musst dich für eine Geschwindigkeit für die serielle Übertragung zum PC entscheiden und dieselbe dann im seriellen Monitor einstellen.

Also: Mit welcher Baudrate sendet dein Barcode-Reader.
Du schreibst oben etwas von 115200. Wenn das die Übertragungsrate des Barcode-Readers ist, dann musst du dieselbe in SoftwareSerial einstellen. Mit 9600 wie in deinem Code wird das nicht funktionieren.

Das "Weiterreichen" der seriellen Daten mit Strings ist fehleranfällig.
Falls ich so etwas brauche, dann mache ich das etwa so:

#include SoftwareSerial mySerial(2, 3);    // rxPin, txPin

void setup()  {    
  Serial.begin(9600);
  mySerial.begin(9600);
}

void loop() {
  if (mySerial.available()) {
    Serial.write(mySerial.read());
  }
  if (Serial.available()) {
      mySerial.write(Serial.read());
  }
}

Musst du natürlich noch ein wenig an deine Verhältnisse anpassen.

Hallo uxomm,

DANKE, das mit der Baudrate hat weitergeholfen, denke ich zumindest. Ich denke, die Zeichenfolge im Anhang entspricht meinem 'TEST', oder? Wie erhalte ich diesen Wert aber jetzt in einer String-Variablen?

Geht das nicht so?

String barcodeData;

barcodeData = softSerial.readString(); // read incoming data as string
Serial.println(barcodeData); // display value at the Serial monitor

Wenn das noch klappt, hätte ich mir mein Wochenende verdient...

DANKE und Grüße

Bire

Das Foto


(nur ein Hinweis: vom Seriellen Monitor brauchst du eigentlich kein Bildschirmfoto zu machen. Du kannst das einfach markieren, kopieren und hier einfügen - am besten in Code-Tags)

Ich verstehe nicht ganz, wieso du einen String (die Arduino-Stringklasse mit großem S) brauchst.
Um ehrlich zu sein: damit kenne ich mich nicht aus. Will ich auch gar nicht, denn die ist nicht gut designed.
Ich verwende aber gerne Character-Arrays. Dafür gibt es sehr brauchbare Tools zum Auswerten etc. siehe zum Beispiel hier: C-Programmierung: Zeichenkettenfunktionen – Wikibooks, Sammlung freier Lehr-, Sach- und Fachbücher
Und ein Beispiel vor kurzem hier im Forum.

Probier das doch mal so und schau was dabei raus kommt: :slight_smile:

void loop() { // run over and over
  if (softSerial.available()) {
    Serial.write(softSerial.read());
  }
}

115200 ist zuviel für SoftwareSerial.

RS232 und TTL Serial haben nicht nur unterschiedliche Spannungen, sondern auch falsche Polarität.
(Das hat Uwe schon 2018-02-22 23:49:19 gesagt).