Step 7 Umwandlung von EIB/KNX Datum und Zeit in Step7 Format

emis80

Level-1
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Forum.

Ich bin schon seit einiger Zeit auf der Suche (Google, Foren) nach einer Umwandlung von EIS3 und EIS4 Format nach Step7 TOD und DATE, meinetwegen auch nach TIME_AND_DATE.
Hat da jemand einen FC ohne Copyright oder einfach nur einen Ansatz der Unterschiede der Formate ?
Ich habe es schon mit Schiebefunktionen der einzelnen Bytes usw. versucht, bin aber bisher leider nicht zum Ziel gekommen.
Das Ganze wird nicht komerziell verwendet, sondern ist für meine private KNX/S7 Kopplung.

Bin für jede Hilfe dankbar.

Gruß, Dirk
 
Hallo Dirk

Ich habe eine SPS von Unitronics über Ethernet (IP-Koppler) mit dem KNX-Bus verbunden
und lese da Eingänge(Schalter) und steuere Ausgänge (Aktoren)
Ich habe aber auf diesem Bus im Protokoll nichts mit Zeit und Datum gesehen
Also was genau und wie willst du da was lesen?

Gruss chris
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Chris

ich bekomme vom EIB/KNX Bus zwei Gruppenadressen mit Datum und Uhrzeit. Die Uhrzeit ist in einem 3Byte Wert abgelegt (EIS3) und das Datum ist in einem 3 Byte Wert (EIS4) abgelegt. Nun benötige ich eine Formatkonvertierung von 3 Byte in DWord für die Zeit und von 3 Byte in Word für das Datum.
Ein Byteweises verarbeiten über Schiebefunktionen und nachheriges "Zusammenbasteln" der Bytes in das entsprechende Format brachte keinen Erfolg, da immer Abweichungen in den zusammengehörigen Werten waren. Ich suche nun einen oder zwei fertige FCs oder einen grundlegenden Denkanstoss, um die FCs selbst zu erstellen.
Die Uhrzeit der S7 soll dann mit der EIB/KNX Zeit abgeglichen und bei Bedarf neu gestellt werden.

Gruß, Dirk
 
Hi emis,

Chris hat dir doch alle relevante Informationen gegeben.
Jetzt musst du dir das TOD-Format "nur" noch basteln.
Du weißt schon wie das TOD-Format aufgebaut ist oder?
(Anzahl an ms ab Mitternacht als DINT)

Nimm das 1. Byte, schiebe es 3 Bit nach links und dann 3 Bit nach rechts und dann mit 3600000(60*60*1000) multiplizieren -> zwischenspeichern.
Nimm das 2. Byte, schiebe es 2 Bit nach links und dann 2 Bit nach rechts und dann mit 60000(60*1000) multiplizieren + dem zwischengespeicherten -> zwischenspeichern.
Nimm das 3. Byte, schiebe es 2 Bit nach links und dann 2 Bit nach rechts und dann mit 1000 multiplizieren + dem zwischengespeicherten -> TOD

Vorraussetzung, die Bytes kommen als INT-Werte rein, ansonsten vorher noch umwandeln.
Wie hast du deine KNX-Verbindung realisiert?

Gruß wolder
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Chris, hallo wonder


mir war in der Tat die Umrechnung nicht klar. muss ich für das DATE Format sicher auch machen, ist mir aber auch nicht klar, wie. Das PLC rechnet da ja auch irgendwie ab 1990 aufwärts, oder ?


Ich benutze den Helmholtz EIB300 an einer 315-2DP mit CP343-2 und E/As.

Danke und Grüsse, Dirk
 
Naja, ich nenn mich wolder nicht wonder obwohl ich mich wundere...

Format Date (3 Byte)
1. Byte: 000DDDDD [1..31]
2. Byte: 0000MMMM [1..12]
3. Byte: 0YYYYYYY [0..99]

Jahr:
>= 90 --> 1990-1999
<90 --> 2000-2089

Format Date (SPS) - Int / Anzahl an Tagen ab 01.01.1990

Viel Spaß beim Umrechnen. Ich hoffe du bist fit in AWL oder SCL.
Stell doch bei Gelegenheit mal deine Ergebnisse online.
Dann schauen wir mal drüber.

Gruß wolder

P.S.:
Quelle ftp://85.214.247.170/Download/Datapoint.pdf
 
Hallo wolder

Handy Rechtschreibkorrektur am Handy. Sorry.

Ich werde das mal in einen FC packen und, wenn ich wieder zu Hause bin, testen. Kann noch eine Woche dauern. Ich melde mich mit dem Ergebnis dann noch mal.

Vielen Dank für die Hilfe.

Gruß, Dirk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab jetzt nicht ins Detail der Umwandlung geschaut.
Was mir aber aufgefallen ist, dass du auf Error mit Setzen/Rücksetzen zugreifst (ich möchte jetzt ungern auf den aktuellen anderen Thread verlinken). Du musst Error entweder als In/Out anlegen, oder mit "=" zuweisen, oder am Anfang des Bausteins auf einen definierten Wert setzen. Ansonsten ist das Verhalten undefiniert.

Ich persönlich finde es bei einer Funktion schöner wenn der RET_VAL verwendet wird. Aber das ist Geschmackssache.
In SCL lässt sich das dann schöner schreiben:
Var_TOD := EIS3_to_TOD(Byte1 := a, Byte2 := b, Byte 3 = c);

Alternativ kann man RET_VAL auch für die Fehlerauswertung verwenden, wenn so etwas vorkommen kann.
 
Var_TOD := EIS3_to_TOD(Byte1 := a, Byte2 := b, Byte 3 = c);
Wenn es die Funktion auch noch für EIS4_to_DATE gibt, hätte er sich die ganze Mühe sparen können und seine Eingangsfrage hätte dann doch noch eine positive Antwort.

Braucht man da 'ne Bibliothek für, z.B. Oscat? In meinem SCL-Handbuch von Siemens steht nix von dieser Konvertierung.
 
Das ist ja keine integrierte Datentypkonvertierung (die hätte keine Parameterbezeichnung) sondern eine ganz normale Funktion. Die kann man ja nennen wie man will, sinnvoll ist sich an das Bezeichnungsschema der anderen Konvertierungen zu halten, wenn die Funktion das gleiche macht.
 
Ja, so wars gemeint. Wenn man in SCL den RET_VAL bei Funktionen nutzt, und eine Funktion Werte mit denen man rechnen kann zurückgibt, werden auch keine Hilfsvariablen benötigt. Die Funktionen aus der Standard-Bibliothek machen meistens genau so.
 
OK, hab den Thread gelesen.

Werde es in inout ändern und am WE, wenn ich wieder zu hause bin, aktualisieren.

Danke, Dirk
 
Zurück
Oben