TIA TCON variable Datenlänge

Uli001

Level-1
Beiträge
40
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich baue mal wieder an unserer SPS weiter. Das Thema ist Kommunikation mit einem PC über TCP.

Wir wollen also zwischen einer S7-1214C und einem PC über Ethernet Befehle übertragen. Am PC wird z.Z. einfach nur HyperTerm verwendet was später durch ein C# Programm ersetzt werden soll. Der Verbindungsaufbau mittels TCON und senden bzw. empfangen mit TRCV und TSEND gehen grundsätzlich.

TRCV:
Stelle ich LEN auf 0 und ADHOC=True ist der Baustein ja auf den Empfang von variablen Längen eingestellt. Mir fehlt jetzt aber die zündende Idee wie ich aus den Empfangenen Daten das gesendete Datenpaket extrahieren kann. Der Aufbau der Befehle bzw. der Datenpakete ist noch nicht festgelegt. Hier kann ich also auch Vorschläge bringen wie dieses auszusehen hat (Anfangs-/ Endekennung,…) Inhalt könnte z.B. sein „SystemOK“, „AOIready“, „ResultTrue“, „ResultFalse“,…

Gebt mir mal bitte einen kräftigen Schubser (für Anfänger verständlich).

Danke
Uli
 
Du willst Dir also ein eigenes Telegramm "basteln".

Im einfachsten Fall könnte etwas so aussehen:

Code:
MEINTELEGRAMANFANG;WERT1=123;WERT2=345;WERT3=123.45;MEINTELEGRAMENDE;

Dann könntest Du im Code Erstmal nach MEINTELEGRAMMANFANG; und MEINTELEGRAMMENDE; Parsen und weißt wo die Daten liegen. Alternativ
kannst Du auch die Telegrammlänge übermitteln, um die Zeit für die Suche nach dem Telegrammende zu sparen.
Danach kannst Du entweder gezielt nach Werten parsen "WERT1=" oder "WERT3=" oder einfach sagen "ermittle alles was es gibt und speicher es weg.
Dazu könntest Du von Telegramm anfang bis zum ersten "=" suchen, dazwischen dann auswerten was es ist (z.B. Wert1 oder Wert3) und dann den Wert zwischen
"=" und ";" in die passende Variable schaufeln.

Ein ganz anderer Ansatz wäre, für jede Variable oder Funktion ein Telegramm zu entwerfen.

Das könnte dann wie folgt aussehen

Code:
TELEGRAMMANFANG;TELEGRAMMID=123;WERT=4711;TELEGRAMMENDE;
Code:
TELEGRAMMANFANG;TELEGRAMMID=314;SOLLWERT=12;HYSTERESE=0.5;WARNUNG=11.5;TELEGRAMMENDE;

Über die TelegramID wird festgelegt was für ein Telegramm das ist bzw. welche Variable da geschrieben wird.
Du bist sehr flexibel, weil Du für eine neue Fuktion einfach ein neues Telegramm entwirfst.
Außerdem ist die Zykluszeit damit geschont, weil Du dort nur nach der TelegrammID parsen musst (die immer an der gleichen stelle steht!)
und dann entscheidest was Du mit den Variablen dahinter machst. Wenn Du Dir das parsen komplett sparen willst könntest Du auch eine feste Zeichenanzahl festlegen z.B.
Code:
TELEGRAMMANFANG;TELEGRAMMID=000123;WERT=0004711;TELEGRAMMENDE;

Dann würde bei dem Telegramm immer alles an der gleichen stelle sitzen, und du könntest z.B. mit

Code:
EMPFANGSPUFFER[28]*100000 +  EMPFANGSPUFFER[29]*10000 + EMPFANGSPUFFER[30]*1000 + EMPFANGSPUFFER[31]*100 + EMPFANGSPUFFER[32]*10 + EMPFANGSPUFFER[33]*1

Die ID immer an der gleichen stelle auslesen.

Viele Wege führen nach ROM... hab dir mal ein paar Aufgezeigt. Haben alle ihre Vor- und Nachteile... und Vollständig ist diese Liste sicher nicht!

Grüße

Marcel

Grüße

Marcel
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Matze001,

erst einmal vielen Dank für deine Antwort und Entschuldigung dass ich nicht darauf reagiert habe. Ich war und bin auch morgen wieder mit meinem kranken Kind zuhause. Dort habe ich keine Programmierumgebung und ehrlich gesagt auch andere Aufgaben als was für Arbeit zu machen. Das dringendste mache ich natürlich trotzdem.

Melde mich wenn ich wieder an dem Thema auf Arbeit dran bin.

Danke
Uli
 
Ganz ruhig ;) Habe Dir ja nur Möglichkeiten aufgezeigt... was Du nun damit machen willst
ist dir überlassen. Wenn Du es komplett ignoriert hättest wäre es mir auch egal, denn vielleicht
hat in Zukunft mal jemand anderes was ähnliches vor und hat gleich ein paar Ideen.

Grüße

Marcel

P.S: Gute Besserung an das Kind...
 
Zurück
Oben