TIA Benötige Hilfe beim Auswerten eines Telegrammes

sochn0

Level-2
Beiträge
62
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo ich habe ein Thermokon STC Ethernet Enocean Gateway und möchte von diesem die Protokolle der einzellnen Taster auswerten. Ich habe eine Verbindung zum Gateway mittels TCON aufgebaut und versuche die Daten mit TRCV zu empfangen. Das funktioniert ja soweit Verbindung steht und Daten werden auch geschickt, nur kann ich mit den Daten leider nichts anfangen. Mein Empfangs DB ist so aufgebaut DB aufbau.jpg. Wenn ich mir das Telegramm am PC mit der Software von Thermokon anschaue sieht das so aus beim drücken des Tasters A5 5A 0B 05 50 00 00 00 FE FF 00 88 30 15 08.10.2016 16:57:31 und beim loslassen des Tasters A5 5A 0B 05 00 00 00 00 FE FF 00 88 20 B5 08.10.2016 16:57:34

Meine CPU ist eine 317f 2PN/DP wäre wirklich super wenn mir wer helfen könnte

LG sochn0
 
Deine Telegramme die du hier aufschreibst haben 14 Bytes. In deinem Datenbaustein ist deine Struktur"Empfangsfach" aber nur 11 Bytes groß (+1 internes Füll-Byte was du nicht siehst).
Wenn dein Kommentar im DB mit den 0B=RX, 6B=TX stimmt, dann hast ist das 0B in deiner Angabe an Position 3, davor kommen also noch 2 Bytes A5 5A.
Ist das Protokoll irgendwo dokumentiert? Link?

Was du bei der Verwendung mit einer S7-300 beachten musst, ist dass die Siemens SPS eine andere Bytereihenfolge besitzt als die meisten anderen Systeme. Das kommt dann bei den Int-Werten zu tragen. Wenn die Gegenseite z.B. eine 1 schickt, dann sieht die Siemens-SPS eine 256 und umgekehrt.
 
So wie es da steht, wird alles als ASCII übertragen. D.h. du kannst erstmal 14 Variablen vom Datentyp Char anlegen, da du wenn du die Werte im SPS-Programm weiterverwenden willst, von Char in einen anderen Typ umrechnen musst.
 
Hab mal den DB angepasste hier stehen die aktualwerte drinnen dich bekomme das einzige was sich ändert ist das Sensor ID Byte 1 geht beim drücken des Tasters von 2 auf 3 egal welche Taste ich drücke auf meinem 4 fach Taster db1.jpg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Stell nochmal zurück auf Datentyp Byte, oder füge dir die Bytes in eine Variablentabelle ein, und dort mit Datentyp Byte.
Entgegen der Dokumentation ist nämlich nicht alles ASCII und das TIA-Portal zeigt dir bei einem nicht darstellbaren Zeichen wohl einfach eine '0' an. Was mal wieder ein TIA-Bug ist, denn eigentlich müsste es dann auf die entsprechende Escape-Sequenz für die Anzeige umspringen.
 
Also mit der Präambel passt die Dokumentation überhaupt nicht mit dem zusammen was du siehst, das wäre dann doch ASCII, aber nicht mit den angegebenen Werten.

Dir muss klar sein, dass du mit dem TRCV nur auf Empfang gehst und nicht aktiv Daten abholst. Evtl. bekommst du nur ein Telegramm geschickt, wenn der Taster gedrückt, und/oder wieder losgelassen wird. Dann musst du die Statuswerte von TRCV auswerten, um mitzubekommen wenn ein neues Telegramm eingetroffen ist, und dann darauf reagieren.
 
So wie ich die Anleitung verstehe, gibt es keine Modus um die Daten aktiv abzufragen. Ein Sensor sendet wohl mindestens alle 15 Minuten ein Telegramm, bei einem Timeout scheinst du dann ein entsprechendes Telegramm zu bekommen. Bei Funk ist dieses ereignisbasierte Verfahren durchaus sinnvoll.

Sinnvollerweise haben alle Telegramme vom Gateway 14 Bytes Länge.
Wie viele zu lesende Bytes hast du denn am TRCV-Baustein angegeben? Das muss ebenfalls 14 sein. Vielleicht startest du die SPS nochmal neu, denn vielleicht hat sich durch deine ersten Experimente mit den zu kurzen Daten eine Verschiebung im Empfangspuffer ergeben, und du erhältst darum nicht die korrekte Präambel.
 
So ich muss ganz ehrlich sagen ich habe keine Ahnung warum das jetzt funktioniert aber wenn ich den Datenbaustein wie folgt aufbaue kann ich die Sensor id bzw den Status der Taster sehen db neu.jpg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Na da ist die Beschreibung nicht ganz eindeutig.
Die in der Tabelle aufgeführten Bytes werden dann wohl ASCII-codiert übertragen, und dann benötigt 1 Byte binär eben 2 Bytes in ASCII. Das sollten dann insgesamt 28 Bytes bzw. 28 Char sein.
Bei deinem jetzigen Screenshot hast du nur 24, und immer noch einen Versatz. Verlängere den DB mal auf 28, dann SPS Neustart machen.
 
Habe es gerade versucht es ändert sich nichts der Datenbereich verschiebt sich nicht weiter danke für deine Hilfe:D Gibt es eine möglichkeit die Chars der IDs in einem String zusammenzufassen?
 
Gibt es eine möglichkeit die Chars der IDs in einem String zusammenzufassen?
Ja, du legst einen String in einem DB mit Länge 8 an, und trägst am Besten als Anfangswert einen 8 Zeichen langen String ein, z.B. 8 Leerzeichen. Damit wird der Stringheader passend gesetzt. Dieser besteht aus einem Byte für die maximale Länge, und einem Byte für die aktuelle Länge. Dann kannst du im Programm per Move Anweisung, oder in AWL mit Lade-Transferiere die einzelnen Zeichen in den String schreiben.
 
Zurück
Oben