TIA Kommunikation - Speicherbereich aus Buffer-DB in optimierten DB schreiben

MarKu

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

der Tag ist gekommen, dass ich mit einer Frage direkt an die Schwarmintelligenz wenden muss, da ich keine Lösung mehr weiß oder im Internet finden konnte.

Der Threadtitel ist vielleicht nicht ganz passend. Etwas besseres ist mir nicht eingefallen.

Zur Kommunikation mit unserem Level2-System nutzen wir eine TCP-Verbindung. Hierbei werden über eine Verbindung mehrere Telegramme übermittelt. Die Verbindung schreibt zuerst in den Buffer-DB, welcher aus einem Header (Telegramm_counter, Telegramm_Length, Telegramm_Type,.. ) und einem Array of Byte [0..2319], den eigentlichen Daten, besteht. Über den Telegramm-Typ soll bestimmt werden um ebenwelches Telegramm es sich handelt, um es dann in den entschreiben DB zu verschieben/kopieren.
In der Klassik-Welt wurde hierzu der SFC21 FILL genutzt. Dieser steht mir im TIA aber nur zur Verfügung wenn ich nicht optimiert arbeite. Da allerdings unter TIA V16 in einer SoftwareUnit gearbeitet werden soll, ist dies nicht möglich. Persönlich würde ich es auch gern vermeiden, falls es sich vermeiden lässt.
In einer anderen Verbindung arbeite ich komplett optimiert. Hier wird allerdings nur ein Telegramm pro Verbindung benutzt.

Kann ich die Herangehensweise wie in der Klassik-Welt irgendwie im TIA umsetzen? Eine Lösung wäre ein "langes" Telegramm zu verwenden, was anstatt einem Array of Byte den Untertelegrammen als PLC-Datentyp aneinander gereiht entspricht. Diese Datentypen könnten per Move verschoben werden.
Alternativ könnte man pro Telegramm eine Verbindung aufbauen.

Vielen Dank im voraus

Marius
 
Zuletzt bearbeitet:
In der Hilfe zu FILL

Für Bausteine mit dem Attribut "optimierter Bausteinzugriff" können Sie die Anweisung "FILL_BLK: Bereich befüllen" verwenden.
 
Über den Telegramm-Typ soll bestimmt werden um ebenwelches Telegramm es sich handelt, um es dann in den entschreiben DB zu verschieben/kopieren.
In der Klassik-Welt wurde hierzu der SFC21 FILL genutzt.
Das passt so irgendwie nicht. Mit SFC21 FILL wird ein Speicherbereich gelöscht oder initialisiert. Kann es sein, daß Du den SFC20 BLKMOV meinst?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe mich leider zu knapp gefasst. Nur in dem Buffer-DB ist ein Array of Byte. Die Untertelegramme sind im Zweifel deutlich kürzer als das Buffer-Telegramm und bestehen aus unterschiedlichen Datentypen. Deswegen fällt der FILL_BLK auch raus. Dieser lässt nur gleiche Typen zu.

Hier aus der Hilfe zum SFC21:

"Mit der SFC21 FILL können Sie einen Speicherbereich (Zielfeld) mit dem Inhalt eines anderen Speicherbereiches (Quellfeld) vorbsetzen. In das angegebene Zielfeld kopiert die SFC solange den Inhalt, bis der Speicherbereich komplett beschrieben ist.
...
Falls das real vorhandene Ziel- oder Quellfeld kleiner ist, dann werden nur so viele Daten kopiert, wie das Zielfeld aufnehmen kann."

Sprich Telegramm XY wurde über den Header identifiziert und es ist bekannt, dass es nur 200 Byte hat. Über den SFC21 wird nur in den passenden 200Byte langen DB geschrieben.
 
Zurück
Oben