Serielle virtuelle COMs führen unter Windows 10 nicht selten zu Datenkollisionen. Meist dann, wenn Konventionen nicht eingehalten werden. Ein Betrieb ist dann Virtuell nicht möglich. Es wird deshalb eine Hardware/Software-Lösung gesucht.
Mit einem Arduino Mega 2560 R3 wurde das Vorhaben angegangen.
Das Programm ist soweit fertig.
Mit Putty-1 an COM 8 werden Daten an Arduino Serial 1 gesendet und an Serial 3 weitergegeben. Putty-2 holt sich über COM 6 die Daten beim Arduino von Serial 3 und zeigt sie korrekt an. Wird nun an COM 8 ein Terminalprogramm und an COM 6 eine Hardware angeschlossen, reagiert die Hardware nicht. Wird das Terminalprogramm direkt an der Hardware angeschlossen, funktioniert alles. Nur nicht über eine sog. Serial-Umleitung über den Arduino.
Funktioniert das Vorhaben mit dem Arduino, könnten drei verschiedene Terminalprogramme gleichzeitig die Hardware steuern.
Irgend etwas blieb am "Programm" unberücksichtigt. Für Anregungen wäre ich sehr dankbar!
/*
Multiple Redirect Serial
Multiple terminals (Serial 1..Serial 3), one piece of hardware (Serial 3)
*/
void setup() {
// initialize serial ports:
Serial.begin(4800);
Serial1.begin(4800, SERIAL_8N2);
Serial3.begin(4800, SERIAL_8N2);
}
void loop() {
// read from Serial 1, send to Serial 3:
if (Serial1.available()) {
int inByte = Serial1.read();
Serial.print(inByte, HEX);
Serial3.print(inByte, HEX);
}
// read from Serial 3, send to Serial 1:
if (Serial3.available()) {
int inByte = Serial3.read();
Serial.print(inByte, HEX);
Serial1.print(inByte, HEX);
}
}
Geht denn Putty an Com8 und Hardware an Serial3?
Wenn Nein, dann TerminalProgramm an Com8 und Putty2 an Com6.
Aber:
Auf dem Arduino dann die Zeichen nicht 1:1 weiter reichen, sondern als HEX-Wert.
Mit Putty-1 und Putty-2 kann von beiden Seiten geschrieben und gelesen werden. Funktioniert wie gewünscht. Nur wenn das Terminalprogramm die Hardware anspricht, passiert nichts.
Auf dem Putty-Empfänger bekommst die Startanzeige und danach jedes vom Serial1 emfangene Zeichen in Hex.
Schau wo sich der Unterschied zwischen TP und Putty findet.
Ich habe keine Erfahrung damit, bei den virtuellen COM-Ports kann man diese Details auch in Windows einstellen. Ich habe den Eindruck, dass die meisten Programme das überschreiben was da als Einstellung im Gerätemanager steht.
Du kannst ja mal nachschauen und es ausprobieren
vgs
Die 4800 und die 8N1 geben die Hersteller der Hardware vor. In Manchen Branchen ist das ganz typisch. Die Einstellung erwartet die Hardware und das ist im Terminal ebenfalls so hinterlegt. Beim Arduino müsste das dann auch fortgesetzt werden. Nach dem Empfang geht das verloren. Was die Terminal-Programme der Hardware senden, das ist für das Vorhaben unerheblich. Hinzu kommt, das jede Hardware ihre eigenen spezifischen Parameter hat. Aber danke für den doch wichtigen Hinweis!
Da Du nicht schreibst, was der Empfänger ist, bedenke: Das könnte auch schief gehen, weil Du nicht nur TX/RX sondern DTR/DTS z.b. noch brauchst, was beim Direktanschluss funktioniert.
Es wäre möglich, das im Einzelfall eine Hardware doch die DTR/DTS benötigt. Sie wird im Terminal-Programm hinterlegt, geht aber nach der Übrnahme durch den Arduino verloren.
Jau.
Ich hatte die Tage eine Variante, da konnte die Sequenz zur Programmierung geändert werden. Danach brauchte es kein DTR mehr. Die Empfangsbereitschaft wurde dann manuell ausgelöst....
Mal sehen, ob ich das noch finde. Gefunden.
Kommt das infrage?
Alternativ, könntest mit zusätzlichen Pins auch selbst bauen....
Hoch interessanter Bericht und klasse Idee, auch zur Umsetzung. Für aktuelle Hardware ist egal was in der Terminal-Software eingestellt wird, auch bei DTR/DTS off funktioniert der Datenaustausch vom Termial-Programm zur Hardware und von der Hardware zurück zum Terminal-Programm. Alles was das Terminal-Programm von der Hardware mitgeteilt bekommt, wird später in einer Datei gespeichert.
Wie bereits erwähnt, die Kommunikation mit zwei Puttys funktionierte ausgezeichnet. Nun stellte sich heraus, das die RS232-TTL Konverter zum Arduino Mega mit Putty funktionieren, doch als die Puttys mit Terminal-Software und Hardware ersetzt wurden, kam keine Verbindung zur Hardware zustande. Die Kabelverbindungen waren korrekt, alles wurde mit dem Ohmmeter ausgemessen. Steuerleitungen benötigt die Hardware nicht. Ein Kabel mit RX, TX und Ground bestätigt dies nachdrücklich.
Es liegt offensichtlich am MAX232 für die RS232-TTL Konvertierung. Diese werden durch MAX3232 getauscht und dann eine neuer Versuch unternommen. Bis dahin, vielen Dank für die netten Hinweise. Kommende Woche werden wohl die neuen Konverter kommen. Theoretisch könnten auch zwei Arduino Mega zusammengeschaltet werden, um dann 6 bzw. 7 Terminalprogramme gleichzeitig mit der gleichen Hardware verbinden zu können. Die aktuelle Anwendung reicht mit Serial (0) für vier Terminal-Programme allerdings aus. Beim Laden des Programms in den Arduino muss lediglich der Konverter von Serial abgesteckt werden. Ansonsten meldet sich der Compiler. Herzlichen Gruss!
ich möchte noch auf einen anderen microcontroller aufmerksam machen.
Der kann wenn es sein muss mal eben 16 serielle Schnittstellen gleichzeitig bedienen
Der Propeller-Chip von Parallax.
Vielen Dank für den interessanten Microcontroller. Ich versuche mit dem Arduino eine einfache Lösung zu finden, so können viele weltweit dieses Vorhaben umsetzen. In Insiderkreisen ist Arduino recht bekannt und beliebt. Viele Vorhaben wurden so auf den Weg gebracht. Eigentlich reichen vier Serial. Eine Serial ist für eine spezielle standardisierte virtuelle Variante vorgesehen. Terminal-Programme und Hardware haben es mit dieser speziellen Variante ganz einfach. Weil sich einige aber nicht auf einen gemeinsamen Standard einlassen wollen, ist dieses Vorhaben entstanden. Wenn es funktioniert, könnte eine sehr grosse Klientel weltweit davon profitieren. Ich habe die gängigsten virtuellen Serial-Varianten auf Windows 10 getestet und keine Applikation lief wie sie sollte. Nur bei ganz wenigen Produkten sollen angeblich mehrere Programme die gleich Hardware zur gleichen Zeit ansprechen können. Das gelingt bei älteren Betriebssystem um Windows 2000. Bei Windows 10 ist mir kein Betrieb gelungen. Mit Putty funktionierte alles, jetzt muss es noch mit Hardware gelingen und dann können die anderen Serial angehängt werden. Wer möchte kann für den Einzelfall die Steuerleitungen hinzufügen.
Sorry, das System sperrte für meinen Account für 2 Stunden. Ich konnte somit nur zeitverzögert antworten...