staging.inyokaproject.org

TTY Verbindung mit Minicom

Status: Gelöst | Ubuntu-Version: Ubuntu 8.04 (Hardy Heron)
Antworten |

Der-4-Tage-Mann

Anmeldungsdatum:
5. August 2010

Beiträge: Zähle...

Hallo,

ich habe eine Industriewaage von Kern & Sohn GmbH ( ITB 60K10 DLIPM ) über einen Serial 2 USB Converter an einen Hardy PC angeschlossen.

Die Waage habe ich auf den sogenannten Continues Mode gestellt. Dies bedeutet, dass er durchgehend (mehrfach pro Sekunde) seine Messergebnisse an die serielle Schnittstelle schickt.

Die TTY Settings auf Seite der Waage sind:

Baud: 9600

Parity: 8None

Handshake: No

Mit Minicom habe ich testweise eine Verbindung herstellt mit den Settings:

File: /dev/ttyUSB0

Bps/Par/Bits: 9600 8N1

Hardware Flow Controll: Nein

Software Flow Controll: Nein

Testweise habe ich den Hardware Flow Controll im Minicom auf Ja gestellt und die Waage hat sich brav angeschlossen und seine eigenen Settings angepasst. Daraus schliesse ich, dass die Waage sich seinem Verbindungspartner zumindest teilweise anpasst.

Nun starte ich interceppty ( http://www.suspectclass.com/sgifford/interceptty/ ) mit den Parametern:

-v (verbose)

-s (stty params und zwar genau folgende: '9600 -crtscts -ixon parenb cs8' )

quelle: /dev/ttyUSB0

ziel: @/tmp/test.sock

Durch das @ legt interceptty hier als Ziel ein Unixsocket an, welches nun meine Endprogramme auslesen können. Komischerweise bekommt Interceptty keine Informationen von der seriellen Schnittstelle.

Was habe ich bei den stty Parametern beim Interceptty falsch gemacht? Oder kennt jemand alternativ ein Tool welches mir die Daten der seriellen Schnittstelle einfach in die Shell schreibt? Minicom hat leider seinen eigenen Screen.

Ich stelle hier nocheinmal zur Übersicht die aktuellen Parameter der beiden Parteien gegenüber:

Waage:

Baud: 9600

Parity: 8None

Handshake: No

stty:

9600 -crtscts -ixon parenb cs8

Vielen Dank für eure Hilfe

Dennis

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Hi Dennis,

willkommen auf dem Forum !

... Oder kennt jemand alternativ ein Tool welches mir die Daten der seriellen Schnittstelle einfach in die Shell schreibt?

Was hältst Du von

sudo cat /dev/ttyUSB0

(Dafür kannst Du auch selber eine "named Pipe" anlegen. → man mkfifo)

oder als Skript, aufgerufen unter sudo:

while [ <sinnvolle Ausgabe> ]; do
	read messwert
	...
	done  <  /dev/ttyUSB0

- ist alles standardmäßig an Bord.

Und mit sudo visudo kannst Du sudo so konfigurieren, dass Du für den betreffenden Befehl kein Passwort mehr brauchst.

LG,

track

Der-4-Tage-Mann

(Themenstarter)

Anmeldungsdatum:
5. August 2010

Beiträge: 11

Hi track,

danke für deine Antwort.

War mir gar nicht bewusst, dass ich die Datei einfach mit cat auslesen kann.

Ich bekomme als Ergebnis geschätzt in dem selben Takt wie die Waage sendet statt dem Wiegeergebnis ständig ein "ES" geschickt. Manchmal aus ein "S I". Was auch immer das heissen mag. Ich habe die Ausgabe mal durch ein hextool gepiped und siehe da:

1
2
3
4
5
6
7
collect@collect-wiegeterminal:~$ sudo cat /dev/ttyUSB0 | hex
0x00000000: 53 20 53 20 20 20 20 20 - 20 20 30 2e 30 30 20 6b S S       0.00 k
0x00000010: 67 0a 0a 53 20 49 0a 0a - 45 53 0a 0a 53 20 49 0a gJJS IJJESJJS IJ
0x00000020: 0a 45 53 0a 0a 45 53 0a - 0a 45 53 0a 0a 53 20 49 JESJJESJJESJJS I
0x00000030: 0a 0a 45 53 0a 0a 45 53 - 0a 0a 45 53 0a 0a 45 53 JJESJJESJJESJJES
0x00000040: 0a 0a 45 53 0a 0a 45 53 - 0a 0a 45 53 0a 0a 53 20 JJESJJESJJESJJS 
0x00000050: 49 0a 0a 45 53 0a 0a 45 - 53 0a 0a 45 53 0a 0a 45 IJJESJJESJJESJJE

Also steht meine Info immer am Anfang und danach empfange ich nur noch so wirrwarr. Was hat das zu bedeuten?

1
S S       0.00 k

Ist genau das gleiche was Minicom mir anzeigt.

Mein Ziel ist mehrere Messergebnisse zu erhalten um die Federung der Waage wegzurechnen. Theoretisch kann ich nun viele Anfragen starten aber das kommt mir leicht unsauber vor.

Also hab ich mir gedacht ich schneide einfach die ersten paar Zeilen heraus (da das Messergebnis nicht immer in Zeile 1 vorkommt )

1
2
3
4
5
6
collect@collect-wiegeterminal:~$ sudo cat /dev/ttyUSB0 | hex | head --lines=5
0x00000000: 53 20 44 20 20 20 20 20 - 20 20 34 2e 34 37 20 6b S D       4.47 k
0x00000010: 67 0a 0a 53 20 49 0a 0a - 45 53 0a 0a 53 20 49 0a g..S I..ES..S I.
0x00000020: 0a 45 53 0a 0a 45 53 0a - 0a 45 53 0a 0a 53 20 49 .ES..ES..ES..S I
0x00000030: 0a 0a 45 53 0a 0a 45 53 - 0a 0a 45 53 0a 0a 45 53 ..ES..ES..ES..ES
0x00000040: 0a 0a 45 53 0a 0a 45 53 - 0a 0a 45 53 0a 0a 53 20 ..ES..ES..ES..S 

Mir ist auch aufgefallen, dass ein einfaches cat auf dem Socketfile unendlich lange liest, da ja die Waage dauerhaft Daten sendet.

Dieser Vorgang dauert ~1 sec und das scheint mir zwar ein Weg aber nicht der schönste zu sein. Was kann ich nun tun um hier sauberer zu arbeiten? Und wieso brauche ich dem Gerätesocket keine Baud/Parity/H.Shake Informationen geben? Das könnte btw ja auch das Problem sein, weshalb hier seltsame "ES" und "S I" kommen. ☺

Grüße Dennis

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Für mich sehen die "S I"- und "ES"- Zeilen zwischendurch wie Leersymbole aus, die er "aus Langeweile" zwischendurch immer sendet.
(vielleicht steht "S I" auch für "sende SI-Daten" ?)
Wenn Du diesen Müll wegfiltern willst, kannst Du ja statt cat mit sed die entsprechende Zeile heraussieben:

sudo sed -nu '/^S .  /p' /dev/ttyUSB0 

Das "-u" ist wichtig, damit er ungepuffert (=unverzögert) arbeitet.
(n.b.: grep ginge hier auch, aber sed hat später mehr Möglichkeiten)

Die technischen Einstellungen sind hier deshalb transparent, weil auf dem Device eben nur die fertigen Nutzdaten ankommen.

Du sagtest, dass die Waage eigentlich kontinuierlich Messwerte sendet ?
Dann müsste er mit dem Filter ja jetzt alle Sekunde einen neuen Wert ausspucken.

In Deinem Dump sehe ich "S S ..."- Werte und "S D ..."- Werte. Hat das was zu bedeuten ?

Wenn Du jetzt mit den Ausgabewerten rechnen willst, könntest Du ja diesen Befehl in eine while- Schleife (s. oben) pipen.
In der Schleife kannst Du ja dann beliebig vergleichen und umrechnen.

track

Der-4-Tage-Mann

(Themenstarter)

Anmeldungsdatum:
5. August 2010

Beiträge: 11

Hallo,

erst einmal zu deiner Frage: Ich konnte der Doku nicht entnehmen was S S bzw S D bedeutet. Ich filter mir hier einfach mit nem PCRE die Zahlen heraus ☺

ich habe die Zeile mit sed mal getestet und es kam wunderbar mein Ergebnis heraus. Aber leider nur einmal. Und seitdem kann ich gar nicht mehr mit der Waage sprechen. Ich habe schon Rechner / Waage alles mehrfach neu gestartet. Weder ein einfaches cat noch minicom kriegt eine Kommunikation hin. Die Verbindung ist nach wie vor vorhanden. Starte ich Minicom und stöpsel die Waage ab, kriege ich dementsprechende Fehlermeldungen.

Mache ich ein cat auf das Gerätefile, läuft cat endlos lange. Ich weis nicht ob das Standard ist bei Gerätefiles oder ob einfach nur nicht lesbare Daten ankommen. Natürlich habe ich das schon mit dem hexdump geprüft, aber auch hier das gleiche Resultat: Keine Daten.

Was mir aufgefallen ist, dass (ich habe vorab die Waage umgestellt, dass sie auf Knopfdruck und nicht kontinuierlich sendet) Minicom total abstürzt - sobald ich die Taste zum senden an der Waage drücke - und keine Tastatureingaben mehr annimmt.

Einfach mal schauen was die Schnittstelle für Parameter hat geht auch nicht so einfach, da setserial bei RS232 Convertern streikt. Aber ich habe durch starten von Minicom meine Parameter ja gesetzt.

Auch aufgefallen ist mir, dass stty nun den Parameter parenb nur noch negiert (-parenb) annimmt.

Woran kann das Problem jetzt liegen und wie kann ich überhaupt weiter analysieren. Ich bin bald am Ende mit meinem Latein ☹

Grüße Dennis

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wenn bekannt wäre, was für Steuersignale die Waage so braucht, könnte man das ja systematisch aufzäumen.

Steht dazu nichts im Handbuch ? - sonst müsste man das mit einem Schnittstellenlogger mal mitschneiden.
(irgend sowas wie das: http://www.com-port-monitoring.com/datalogger.html)

Dann kann man die Kommunikation auch korrekt nachbauen.

Gibst Du mal den genauere Hinweise zu dem "Minicom"-Programm ? - vielleicht ist ja was im Netz zu finden.

track

Der-4-Tage-Mann

(Themenstarter)

Anmeldungsdatum:
5. August 2010

Beiträge: 11

Hallo,

ich habe die Möglichkeit die Waage auf Dialog zu stellen:

DIALOG: Bidirektionale Kommunikation über MT-SICS-Befehle, Steuerung der Waage über einen PC

Ich habe hier eine riesige Liste von Befehlen. (Siehe unten für Manual der Waage; MT-Sics Befehle ab Seite 28) Unter Anderem die hier:

S Stabilen Gewichtswert senden

SI Gewichtswert sofort senden

Ich habe die Waage jetzt auf DIALOG gestellt und testweise folgendes gemacht:

1
2
3
4
collect@collect-wiegeterminal:~$ sudo stty 9600 -parenb cs8
collect@collect-wiegeterminal:~$ sudo echo "3A" >> /dev/ttyUSB0 
collect@collect-wiegeterminal:~$ sudo echo "SI\n\r" >> /dev/ttyUSB0 
collect@collect-wiegeterminal:~$ sudo cat /dev/ttyUSB0 

Leider mit dem gleichen Resultat, dass ich keine Daten erhalte.

Was meinst du mit genaueren Informationen zu Minicom? Der Absturz wirkt sich so aus, dass ich nicht mehr schreiben kann. Das Programm scheint richtig zu hängen und ich kann auch kein CTRL+A mehr senden, um die Status/Menu Leiste zu öffnen. Ein einziges Mal hatte ich einen richtigen Crash mit Fehlermeldung. Dazu gibt es aber bereits eine Bugmeldung mit Workaround Tips: .cgi?bug=413934 Nun setze ich in der shell, in der ich Minicom starte vorher die env-var LANG auf us_US.UTF-8 und dieser Crash kommt nicht mehr. Dennoch steht in der Debian Bug Meldung zu Minicom, dass der Fehler auftritt wenn man de_DE UND falsche Settings für die serielle Schnittstelle setzt. Nun rufe ich vorher immer

1
sudo stty 9600 -parenb cs8

auf.

UI! Da fällt mir was ein. Ich hatte ja das ganze System schonmal in meinem Büro am laufen. Dann wurde es umgestellt (räumlich) in die Produktion und bisher hatte ich immer im Hinterkopf, dass nur 2 Elemente geändert wurden:

a) Das serielle Kabel ist verloren gegangen. Hier wurde ein anderes verwendet

b) Die Waage wurde auf Werkseinstellungen zurückgesetzt.

Daher habe ich den Fehler immer bei den Werkseinstellungen gesucht, nachdem ich beim Kabel sicher war, das es in Ordnung ist.

Aber jetzt fällt mir ein, es hat sich noch mehr geändert:

c) Es wurde ein USB Barcodescanner angeschlossen (Hier tippe ich darauf, dass der damit gar nichts zu tun hat)

d) Es wurde ein USB Drucker angeschlossen (Auch der wird nichts damit zu tun haben)

e) Mein Entwicklungs Bildschirm steht noch in meinem Büro und hier wurde ein Elotouch Touchscreen mit seriellem Datenanschluss angeschlossen.

Also der PC hat nur einen seriellen Anschluss und dieser ist vom Touchscreen belegt, der dauerhaft kommuniziert und daher vmtl (da er auch immer funktioniert, egal wie oft ich die Schnittstelle für die Waage ändere) bei jeder Aktion die Schnittstelle neu setzt. Das würde erklären warum die Waage auf einmal nicht mehr richtig kommuniziert. Bei einem stty Aufruf setze ich ja nicht das Gerätefile sondern die gesamte Schnittstelle, was dann für alle seriellen Geräte (inklusive der, die über RS232-Serial Converter angeschlossen sind) gilt.

Ich stöpsel das Datenkabel des Touchscreens einmal ab und teste nach einem Reboot noch einmal sämtliche Konstellationen aus. Sobald ich damit durch bin,

Manual der Waage: http://www.kern-sohn.com/downloads/de/ITB%2060K10DLIPM/file/ITB_BA-d_0721.pdf?PHPSESSID=b459a0be1a2e87d0f45f7e5cc0545083

Der-4-Tage-Mann

(Themenstarter)

Anmeldungsdatum:
5. August 2010

Beiträge: 11

Hallo,

ich kann jetzt wieder mit der Waage sprechen. Ich habe alle Geräte ausser der Waage abgezogen und den RS232 Converter entfernt und die Waage direkt an die serielle Schnittstelle angeschlossen.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
collect@collect-wiegeterminal:~$ sudo cat /dev/ttyS0 | head --lines=1
S S       0.00 kg
collect@collect-wiegeterminal:~$ sudo cat /dev/ttyS0 | head --lines=1
S S       0.00 kg
collect@collect-wiegeterminal:~$ sudo cat /dev/ttyS0 | head --lines=1
   0.00 kg
collect@collect-wiegeterminal:~$ sudo cat /dev/ttyS0 | head --lines=1
S S       0.00 kg
collect@collect-wiegeterminal:~$ sudo cat /dev/ttyS0 | head --lines=1
S D       1.68 kg

Also kann ich nun ganz entspannt mit

1
2
collect@collect-wiegeterminal:~$ sudo cat /dev/ttyS0 | head --lines=1 | awk '{print $(NF-1)" "$NF}'
0.00 kg

meine Waage auslesen.

Ich wurde sehr oft vor diesen RS232 Convertern gewarnt, habe aber über diese schon die verblüffensten Dinge an einen PC angeschlossen und nie Probleme gehabt. Nun, es gibt ja immer das erste mal und das ist am schönsten =)

Dann werde ich jetzt wohl auch bei anderen Geräten die ich hier entwickle diesen Converter abschaffen.

Nun gut meine Deadline morgen erreiche ich sowieso nicht da ich jetzt entweder einen USB Touch oder einen Y-Stecker für Serial (gibts sowas überhaupt? Und wenn ja, werden dann automatisch ttyS0 und ttyS1 belegt?) kaufen muss.

Ich danke für deine Hilfe track, hast mir schon öfter geholfen, ohne das du das weist =)

Grüße Dennis

Antworten |