Jump to content
dwidmayer

Datenformatierung ICom Eingang

Recommended Posts

Hallo zusammen ich habe folgenden String: "6 238 15 40.4 C 19.1 % <CR><LF><CR><LF>"

Ich benötige nun die Fett markierten Werte. Bei dem Gerät handelt es sich um Feuchte und Temperatursensoren die über Funk mit einem Empfänger kommunizieren. Dieser ist über LAN mit dem lokalen Netzwerk verbunden.

z.B. Geräte ID 6 wird mit folgenden Befehl abgefragt ERDB006\r. Als antwort erhalte ich den oben genannten String.

Der String besteht aus folgenden Teilen "ID Sequenz Funkkanal Temp. Einheit Feuchte Einheit"

Die Sequenz ist fortlaufend.

Meine Überlegung war nun folgende Messdaten-Formatierung:

Kanal1: "15 "4a

Kanal2: "C "4a

Dies funktioniert soweit. Wenn ich nun einen 2. Sensor einlesen möchte, erhalte ich folgende Fehlermeldung:

Fehler: Die Suchstrings in 2 Kanälen sind identisch 0<-->2

ICom-zSeriet.dsb

Share this post


Link to post
Share on other sites

Dann probieren Sie einmal aus, was passiert, wenn Sie die Abfrage des zweiten Sensors in einen neuen ICom-Eingang auslagern, welcher als Slave-Modul des bereits vorhandenen Moduls konfiguriert wird.

Falls das nicht funktionieren sollte, müssen Sie ohne die Suchstrings arbeiten und die jeweilige angeforderte Antwort komplett abarbeiten, bevor Sie eine neue absenden.

Also:

Kanal 0:
Anforderung "ERDB006\r" (ohne "")
Formatstring "a\x20" (ohne "")

"6 238 15 40.4 C 19.1 % <CR><LF><CR><LF>"

"a\x20"......Dies entfernt die "6" und das Leerzeichen (hex 20h) aus dem Antwortpuffer und gibt die 6 als Zahl am Ausgang 0 aus.

Kanal 1:

Anforderung: leer lassen oder \r

Formatstring "a\x20"

"238 15 40.4 C 19.1 % <CR><LF><CR><LF>"

"a\x20"...... Dies entfernt die 238 und das Leerzeichen und gibt die 238 am Ausgang 1 aus,

Kanal 2

analog Kanal 0 und 1

Kanal 3

Anforderung: leer oder \r

Formatstring "a\x43"

"40.4 C 19.1 % <CR><LF><CR><LF>"

"a\x43"......Entfernt "40.0", Leerzeichen und C (hex 43h) aus dem Puffer, gibt 40.4 am Ausgang 3 aus.

Kanal 4:

Anforderung: leer oder \r

Formatstring "1x a\x25"

" 19.1 % <CR><LF><CR><LF>"

"1x a \x25"......Entfernt das Leerzeichen vor der 19, die 19.1, das Leerzeichen und das Prozentzeichen. Gibt 19.1 an Ausgang 4 aus.

Alternativ können Sie als Formattring-Terminator auch (anstatt \x25, das %-Zeichen) auch einmal \r\n\r\n probieren. Dann kann der nächste Kanal entfallen, weil die Anforderung vollständig abgearbeitet wurde.

Kanal 5:

Anforderung leer oder \r

Formatstring beispielsweise "3x a \n"

" <CR><LF><CR><LF>"

"3x a \n".... Da der Rest im Puffer keinen Zahlenwert mehr hat, aber man noch irgendwas ausgeben muss am Ausgang.... einfach das Leerzeichen am Anfang, das erste CR und LF ignorieren (3x), dann DASYLab anweisen irgendwas auszugeben (a) bis das letzte LF erreicht wird. Hier sollte dann eine 0 geliefert werden.

Da Sie sich nur für die 40.4°C und die 19.1% interessieren, schliessen Sie nur an Kanal 3 und 4 weitere Module an - die anderen Ausgänge bleiben einfach offen.

Für die Abfrage des zweiten Sensors schreiben Sie im nächsten Kanal die entsprechende Datenanforderung, zB "ERDB007\r", und reproduzieren das Obige für die folgenden Kanäle.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...