Die Community PC-Techniker Portal IoT
Allgemeines Computer Forum => Software => Thema gestartet von: mucki am Juni 05, 2010, 19:50:15
-
Hallo,
ich habe hier ein digitales Multimeter von BEHA mit serieller
Schnittstelle, das mit dem beiligenden Progrämmchen unter
Windows 3.1 (Windows ab 3.0 vorgesehen) Meßdaten an den PC
weitergeben kann.
Ich möchte das Multimeter nun unter FreeDOS oder Linux nutzen.
Leider kann ich mit einem Terminalprogramm (z.B. Kermit unter
DOS) keine Daten auslesen.
Die Übertragungsparameter habe ich unter Kermit so konfiguriert,
wie ich sie unter Windows vorgefunden habe:
Baud Rate 9600 baud
Data Bits 8
Stop Bits 1
Parity no
Handshake xon/xoff
Vermutlich wartet das Multimeter auf einen Initialisierungstring,
ehe es Daten über die Schnittstelle schickt.
Meine Frage nun: Wie kann ich die Kommunikation unter Windows
bzw. dem darunterliegenden DOS protokollieren?
DOS kennt ja für die serielle Schnittstelle die logischen Geräte
COM1, COM2 und AUX. Kann ich nun die Zeichen, die z.B. über
COM1 ein- oder ausgehen (vielleicht unter Zuhilfenahme von AUX)
in in eine Datei kopieren oder brauche ich dafür ein spezieles
Programm?
Wenn das softwaremäßig nicht geht, wie sähe eine Hardwarelösung aus?
Gruß Stefan
-
zu FreeDos kann ich da gerade leider nichts sagen zu Linux aber schon.
Da wirst du dein Gerät vermutlich als /dev/ttyS0 wieder finden und kannst mit cat davon lesen (im Terminal).
Mit stty kannst du Einstellungen vornehmen damit auch was dabei raus kommt.
Beispiel:
stty -F /dev/ttyS0 9600
cat /dev/ttyS0
-
> stty -F /dev/ttyS0 9600
> cat /dev/ttyS0
Leider tut sich unter Linux da nichts.
ich habe die Einstellungen von Windows mal so übersetzt
und dem stty als Parameter mitgegeben (auf das "-" achten):
Windows Linux (stty)
9600 baud 9600
Data Rate 8bit cs8
No Parity -parenb
Stop Bits 1 -cstopb
Handshake xon/xoff ixon
(kein Hardware HS) -crtscts
Am einfachsten wäre es, wenn das Multimeter unaufgefordert
die Daten über die serielle Schnittstelle liefern würde
und für den Zeittakt einen sinnvollen Default
(etwa jede Sekunde ein Wert) wählte.
Vielleicht wartet das Gerät aber auf eine Zauberformel
(einen Initstring vom PC) um überhaupt etwas zu senden.
Dafür wollte ich unter DOS horchen, was von PC zu
Gerät und umgekehrt so gesprochen wird.
Was nicht funktioniert:
- ein Y-Kabel an die serielle Schnittstelle anschließen und
an einem zweiten PC einfach mithören - die Verbindung zum
ersten PC bricht da einfach ab.
- bei laufender Datenübertragung unter Windows das Gerät
einfach abstöpseln und an den Linux-PC anschließen.
-
Du kannst es noch mal mit einfügen von stty -F /dev/ttyS0 raw versuchen also:
stty -F /dev/ttyS0 9600
stty -F /dev/ttyS0 raw
cat /dev/ttyS0
Ansonsten gibt es noch miniterm
miniterm -s 9600
Oder guck mal nach picocom oder minicom
Das sind auch nur beispiele. Schau mal wegen einstellungen in die manpage.
-
Leider konnte ich weder mit dem Parameter "raw" für stty
noch mit dem Programm minicom eine Ausgabe hervorrufen.
Die beiden Schnittstellen habe ich mit den passenden
Einstellungen und einem Null-Modem-Kabel getestet:
cat < /dev/ttyS0
und in einem zweiten xterm:
echo Test > /dev/ttyS1
ergibt:
Test
auf dem ersten xterm. Andersherum funktioniert es auch.
Nun habe ich noch ein weiteres Multimeter, das unter DOS
mit folgendem BASIC-Programm einen Wert ausgibt:
OPEN "COM1:1200,N,7,2,RS,CS,DS,CD" AS #2 ; COM1 configurieren und mit Kanal 2 verbinden
A$ = "D" ; ein D oder vielleicht ein 0x0d = LineFeed
PRINT #2, A$
IN$ = INPUT$(14, #2) ; ein Datenframe ist 14 bytes lang
PRINT IN$
CLOSE #2
END
Die Parameter habe ich so für stty übersetzt:
DOS / Windows Linux (stty)
1200 baud 1200
Data Rate 7bit cs7
No Parity -parenb
Stop Bits 2 cstopb
Handshake xon/xoff ixon
(kein Hardware HS) -crtscts
Leider auch ohne Erfolg.
Nun wollte ich das BASIC-Programm mal unter dosemu starten.
In die dosemurc habe ich eingetragen:
$_com1 = "/dev/ttyS0"
$_com2 = "/dev/ttyS1"
Die Rechte sollten für root und Mitglieder von dialout stimmen :
crw-rw---- 1 root dialout 4, 64 2000-01-01 13:01 /dev/ttyS0
Leider findet das BASIC-Programm das Gerät COM1 nicht.
Habe ich da etwas übersehen?
Wenn die Ausgabe unter dosemu stimmt, dann könnte ich parallel
das darunterliegende Linux mit
cat < /dev/ttyS0
befragen.
-
Hast du denn auch alle Parameter mit stty so gesetzt wie du sie bis jetzt genutzt hast?
Du hast da ja noch ein paar mehr mit bei. ZB. ixon
Also würde ich das auch mit angeben
Beispiel:
stty -F /dev/ttyS0 raw -ixon
Schau dir mal mit stty --help die einzelnen Optionen an. Ich weiß nicht genau ob du sonst noch mehr brauchst (oder noch ausführlicher man stty).
-
stty -a < /dev/ttyS0
zeigt mir ausführlich die aktuellen Terminaleinstellungen an, die sich auch über mehrere stty Anweisungen angesammelt haben können.
Ob ich das unter DOS Basic nötige "RS" (unterdrückt Erkennen einer Sendeanforderung) und "DS" (Data Set Ready, Fehlerwartezeit) setzen kann ooder muß weiß ich allerdings nicht.