Bei Codesys 3.5 Wetterstation über TCP auslesen

Begonnen von Bikeman250, 18. April 2020, 15:36:49

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 2 Gäste betrachten dieses Thema.

Bikeman250

Ich bin gerade dabei, mir mit Codesys 3.5 auf einen Raspberry eine kleine Hausautomatisierung zu basteln.
Die Funktionsbausteine der verschiedenen OSCAT Librarys sind dabei einfach sensationell und gut zu handhaben.
Allerdings habe ich bis jetzt eine Funktion nicht gefunden (vielleicht auch den Wald vor lauter Bäumen nicht gesehen).

Ich möchte meine eigene Wetterstation abfragen und die Werte dazu in der Hausautomatisierung mit verwenden.
Die Wetterstation sendet ihre Daten per Funk an das Anzeigedisplay.
Dieses Anzeigedisplay kann zwar die Daten an verschiedene Online-Wetterdienste per Internet senden, aber es besteht auch die Möglichkeit, diese Daten direkt im eigenen Netzwerk abzufragen.

Die Abfrage geschieht über einen Hex-String, welcher per TCP und dort über den Port 45000 geschickt wird.
Die Wetterstation bzw. das Display antwortet dann ebenfalls mit einem Hex-String über TCP und diesen Port 45000.

Wenn ich das über ein Extraprogramm, wie z.B. PacketSender mache, kommt folgende Datenkommunikation zustande:

Vom PC zur Wetterstation: ff ff 0b 00 06 04 04 19

Ungefähr 100 bis 200ms später die Antwort der Wetterstation zum PC: FF FF 0B 00 50 04 01 01 06 02 00 C6 03 00 23 04 00 C6 05 00 C6 06 22 07 22 08 26 2E 09 27 C9 0A 01 39 0B 00 04 0C 00 05 0E 00 00 00 00 10 00 00 00 00 11 00 00 00 17 12 00 00 00 17 13 00 00 0B F7 14 00 00 2B 94 15 00 0A D1 6A 16 07 FD 17 05 80 5B

Das ist jetzt nur ein Beispiel. Es sollen zukünftig 4 oder 5 unterschiedliche Abfragen aller 10 Minuten erfolgen.

Die Beschreibung  dieses zurückgeschickten Hex-Strings und dessen Auswertung ist bekannt.

Was mir fehlt, ist eine hoffentlich "einfache" Möglichkeit, diese Anfrage zur Wetterstation zu schicken, und deren Rückantwort entsprechend temporär abspeichern und die Werte dann verarbeiten zu können.

Sollte ich diese "einfache" Funktion nur überlesen haben, dann bitte ich um Nachsicht und trotzdem um eine Info wie das gehen kann.
Vielen Dank.

peewit

#1
hallo

wenn du wirklich nur hex-bytes senden und empfangen musst dann reicht die anwendung von IP_CONTROL, IP_SEND und IP_RECEIVE
die du natürlichj entsprechend  parametrieren und zu einem sinnvollen programm verschalten musst


du musst dir halt aus den verschiedenen beispiel modulen das passende rauskopieren

eventuell hilft dir der baustein "SNTP_SERVER" oder "SNTP_CLIENT" hier schon als basis

du musst aber dann beim IP_CONTROL auch den richtigen Modus benutzen !!!!


Die Funktionsbausteine der verschiedenen OSCAT Librarys sind dabei einfach sensationell und gut zu handhaben

Danke, hat mir auch einige Tage meines Lebens gekostet

LG peewit

Bikeman250

Hallo Peewit,

vielen Dank für Deine Antwort.
Dann werde ich mich mal mit diesen Bausteinen beschäftigen.

Macht weiter so! Vielen Dank!

martin.k

Ich denke das ist der richtige Zeitpunkt Peewit mal einen großes Lob auszusprechen.
Er hat wirklich sehr viel Zeit dafür aufgewendet und auch viel Einzel-Support geleistet.  :D
DANKE DIR.

Und du hast uns Anwendern viele tolle Funktionen ermöglich !
Gruß
Martin

Bikeman250

Hallo Peewit,

ich habe das jetzt mit SNTP_Server und SNTP_Client versucht. Das funktioniert auch.

Jetzt wollte ich mich weiter mit IP_Control, IP_Send und IP_Receive beschäftigen.

Ich finde den FB IP_Control und IP_Control2, aber keinen FB IP_Send oder IP_Receive (zumindest nicht in OSCAT).
Über Beckhoff ist da wohl was möglich, aber zumindest nicht kostenfrei.

Habe ich diese Funktionsbausteine irgendwie übersehen, oder muss ich da was basteln, was den Sende- bzw. Empfangsbuffer von IP_Control schreibt bzw. ausliest?

Vielleicht kannst Du mir ja nochmal einen kleinen Tipp geben.

Vielen Dank schon mal dafür.

peewit

der ip_control bzw ip_control2 kann das alles

kontrolle der verbindung , daten senden und empfangen

schau dir mal die baustein dokumenation an und wie die beispielbausteine funktionieren !