Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Results 1 to 7 of 7

Thread: Kommunikation - Speicherbereich aus Buffer-DB in optimierten DB schreiben

  1. #1
    Join Date
    30.06.2020
    Posts
    3
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Default


    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
    Last edited by MarKu; 30.06.2020 at 14:25.
    Reply With Quote Reply With Quote Kommunikation - Speicherbereich aus Buffer-DB in optimierten DB schreiben  

  2. #2
    Join Date
    17.03.2010
    Location
    Bonn
    Posts
    450
    Danke
    4
    Erhielt 105 Danke für 97 Beiträge

    Default

    In der Hilfe zu FILL

    Für Bausteine mit dem Attribut "optimierter Bausteinzugriff" können Sie die Anweisung "FILL_BLK: Bereich befüllen" verwenden.

  3. #3
    Join Date
    15.05.2015
    Posts
    370
    Danke
    9
    Erhielt 68 Danke für 66 Beiträge

    Default

    Schau dir mal Deserialize bzw. Serialize an.

  4. Folgender Benutzer sagt Danke zu TP-Inc für den nützlichen Beitrag:

    MarKu (01.07.2020)

  5. #4
    Join Date
    22.06.2009
    Location
    Sassnitz
    Posts
    15,398
    Danke
    1,272
    Erhielt 4,532 Danke für 3,653 Beiträge

    Default

    Quote Originally Posted by MarKu View Post
    Ü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
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #5
    Join Date
    17.03.2010
    Location
    Bonn
    Posts
    450
    Danke
    4
    Erhielt 105 Danke für 97 Beiträge

    Default

    Quote Originally Posted by PN/DP View Post
    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
    Das kopieren kann man auch mit Fill machen .

  7. #6
    MarKu is offline Neuer Benutzer
    Themenstarter
    Join Date
    30.06.2020
    Posts
    3
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Default

    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.

  8. #7
    MarKu is offline Neuer Benutzer
    Themenstarter
    Join Date
    30.06.2020
    Posts
    3
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Schau dir mal Deserialize bzw. Serialize an.
    Das scheint zu funktionieren. Ich hatte mir die Funktion nie angeschaut, da ich irgendwo mal gelesen hatte, dass diese nur absoluten Zugriff erlaubt.

    Vielen Dank

Similar Threads

  1. S7-1500: Daten aus optimierten Datenbausteinen lesen
    By SiemensUser in forum Hochsprachen - OPC
    Replies: 17
    Last Post: 13.08.2016, 19:15
  2. Replies: 26
    Last Post: 29.03.2016, 15:24
  3. sysfileread - Daten Zeilenweise in Buffer schreiben
    By SY50 in forum CODESYS und IEC61131
    Replies: 7
    Last Post: 03.10.2015, 11:55
  4. Replies: 6
    Last Post: 31.03.2014, 20:06
  5. Replies: 0
    Last Post: 17.11.2011, 16:53

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •