Autor Thema: Kommunikation über serielle Schnittstelle protokollieren  (Gelesen 3683 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline mucki

  • Jr. Member
  • *
  • Beiträge: 90
  • Bewertung der Beiträge: 1
    • Profil anzeigen
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

Offline Baldrian

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 2426
  • Bewertung der Beiträge: 28
  • Geschlecht: Männlich
    • Profil anzeigen
    • ecarux.de
Antw:Kommunikation über serielle Schnittstelle protokollieren
« Antwort #1 am: Juni 05, 2010, 23:22:35 »
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
"Was auch immer geschieht, nie dürft ihr so tief sinken,
von dem Kakao, durch den man euch zieht, auch noch zu trinken."

Offline mucki

  • Jr. Member
  • *
  • Beiträge: 90
  • Bewertung der Beiträge: 1
    • Profil anzeigen
Antw:Kommunikation über serielle Schnittstelle protokollieren
« Antwort #2 am: Juni 07, 2010, 07:16:16 »
> 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.

Offline Baldrian

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 2426
  • Bewertung der Beiträge: 28
  • Geschlecht: Männlich
    • Profil anzeigen
    • ecarux.de
Antw:Kommunikation über serielle Schnittstelle protokollieren
« Antwort #3 am: Juni 07, 2010, 17:30:21 »
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.
"Was auch immer geschieht, nie dürft ihr so tief sinken,
von dem Kakao, durch den man euch zieht, auch noch zu trinken."

Offline mucki

  • Jr. Member
  • *
  • Beiträge: 90
  • Bewertung der Beiträge: 1
    • Profil anzeigen
Antw:Kommunikation über serielle Schnittstelle protokollieren
« Antwort #4 am: Juni 08, 2010, 07:15:36 »
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.

Offline Baldrian

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 2426
  • Bewertung der Beiträge: 28
  • Geschlecht: Männlich
    • Profil anzeigen
    • ecarux.de
Antw:Kommunikation über serielle Schnittstelle protokollieren
« Antwort #5 am: Juni 08, 2010, 11:38:05 »
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).
"Was auch immer geschieht, nie dürft ihr so tief sinken,
von dem Kakao, durch den man euch zieht, auch noch zu trinken."

Offline mucki

  • Jr. Member
  • *
  • Beiträge: 90
  • Bewertung der Beiträge: 1
    • Profil anzeigen
Antw:Kommunikation über serielle Schnittstelle protokollieren
« Antwort #6 am: Juni 08, 2010, 13:41:23 »
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.