Benutzer-Werkzeuge

Webseiten-Werkzeuge


hardware:controllers:s0-an-rs232

Dies ist eine alte Version des Dokuments!


S0-Impuls Zähler direkt über RS232 auswerten

Diese simple Methode erlaubt es, ohne zusätzliche Hardware, einen S0-Impuls Zähler über einen RS232-Port auszuwerten. Viele Computer und embedded Systeme besitzen einen RS232-Port. Alternativ kann auch ein RS232-zu-USB Adapter benutzt werden.

Der Großteil des Inhalts dieser Seite stammt aus einer Mail von Harald König an die vz-dev Mailingliste.

Grundidee

Ziel ist es den Abstand aufeinanderfolgender Impulse zu messen, die bis max. 1 mal pro Sekunde kommen und ca. ~100 ms lang sind. Das erinnert an das DCF77 Funkuhr-Signal (1 Impuls pro Sekunde, 100 oder 200 ms lang == 0 bzw. 1).

Und seit 2 Jahrzehnten ist es gängig, dieses DCF77-Signal einfach über eine serielle Schnittstelle mit 50 Baud auszuwerten (Link). Der Start des Impulses ist die Startflanke des „Startbit“ bei der asynchronen seriellen Übertragung, und je nach dem ob kurzer oder langer Impuls sind mehr oder weniger Bits gesetzt und man es ist sogar dabei möglich die Pulslänge zu messen.

Die Länge des S0-Impulses sind hier nicht von Interesse. So muss man nur die S0-Ausgänge an eine serielle Schnittstelle zwischen Rx und z.b. RTS hängen. (Irgend eine Steuerleitung, die man dann auf 0 (aktiv) ziehen muss). Dann muss man nur noch warten bis der S0-Impuls als „Startbit“ ein Zeichen auslöst. Und dieses dann einlesen und den Timestamp merken/ausgeben – Fertig!

Umsetzung

Bei der Verkabelung ist auf die Polarität des S0-Anschlusses zu achten. Viele S0-Zähler realisieren diesen über einen Optokoppler und nicht über einen Schaltkontakt!

Also muss

  • S0- (Swissnox Klemme 21) mit RS232-Rx (Pin 2 auf DSUB-9) und
  • S0+ (Swissnox Klemme 20) mit RS232-RTS (Pin 7 auf DSUB-9)

verbunden werden. Die restliche Verkabelung auf 'Primärseite' des Zählers bleibt wie gehabt.

Hier sollte ggfs. die Schaltung noch etwas überarbeitet werden. Ein paar C's vielleicht ein Pegelwandler und eine sichere Versorungsspannung über mehrere Steuerleitungen.

Mac Gyver Variante der Schaltung. Für den produktiven Einsatz nicht empfohlen ;)

s0-an-rs232_macgyverjpg.jpg

Alternativ kann man auch die Reste einer seriellen Maus endlich zu was vernüftigem verwenden und damit die Verkabelung an den Zähler realisieren:

mauskabel.jpg

Software

Die Auswertung der seriellen Schnittstelle wird dabei von vzlogger übernommen. Dafür wird das vzlogger-Protokoll s0 benutzt. Ein Beispiel ist in der Standardkonfiguration im Wiki zu sehen.

Alternative

Harald König hat bei der Entwicklung dieser Methode Standardtools von Linux verwendet. Seine Skripte sind im git verfügbar: bash, lua.

Serielle Schnittstelle richtig konfigurieren (50 Baud, jedes Zeichen sofort ausgeben, …):

stty time 1 min 1 -icanon < /dev/ttyUSB0

Zeichen einlesen und Timestamp erzeugen:

strace -ttt -e read cat  < /dev/ttyUSB0 > /dev/null 

Etwas mehr Test-Code um das ganze besser beurteilen zu können:

( strace -ttt -e read cat  < /dev/ttyUSB0 > /dev/null ) 2>&1 | awk 'NR==1{t0=$1;next}{t=$1; print 3600e3 /(t-t1)/2000 ,  t-t0,t-t1,$0;t1=t}'

Spalte 1 liefert dann die Leistung in Watt, 2 die laufende Zeit in Sekunden, 3 die zeit seit dem letzten Impuls, und dann noch den gesamten strace-output mit original Timestamp.

hardware/controllers/s0-an-rs232.1327764937.txt.gz · Zuletzt geändert: 2012/01/28 16:35 von stv0g