Step 7 BLKMOV / Indirekte Adressierung / Ansatz

xXyYzZ

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

unsere Anlage wird mit SCL programmiert. Wir haben mehrere PROFINET-Teilnehmer von denen wir Daten erhalten.
Gibt es eine einfache Möglichkeit (symbolisch) auf die Eingangsdaten (der Länge x) zuzugreifen und diese in einen DB zu kopieren, der die passende Struktur hat?

Code:
i16Return := BLKMOV (SRCBLK := I_sData_K1365_XC, DSTBLK  := "DB_K1365_XC".sInput);

Danke für Anregungen.

// EDIT: Step 7 Classic kommt zum Einsatz
 
Zuletzt bearbeitet:
na dann wurde ich das ganz klassisch mit den SFCs 14 und 15 "DPRD_DAT" und "DPWR_DAT" machen.
Das sieht bei mir bspw. so aus:
SFC14.JPG
 
Zuletzt bearbeitet:
Die Abkürzung DP steht im Übrigen für dezentrale Peripherie - das hat erstmal nix mit Profibus oder Profinet zu tun ;)
 
Danke, wieder was gelernt bezogen auf die SFCs. Damit werden die Daten dann aber direkt vom Device gelesen und nicht aus dem vorhandenen Prozessabbild?

Anforderung ist, den "Start" symbolisch zu adressieren und von dort aus dann x Bytes in einen strukturierten DB zu transferieren. Das symbolische bereitet mir da die Probleme...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Damit werden die Daten dann aber direkt vom Device gelesen und nicht aus dem vorhandenen Prozessabbild?
das kann ich nicht mit absoluter Sicherheit sagen. Grundsätzlich sind die Funktionen erstmal dafür da, mehr als 4 Byte einzulesen/zu schreiben. In der Hilfe steht auch noch:
Sie benötigen "DPRD_DAT", weil Sie mit den Ladebefehlen, die auf die Peripherie bzw. auf das Prozessabbild der Eingänge zugreifen, maximal vier Bytes zusammenhängend auslesen können.
Das heißt für mich, dass die Zuordnung der Prozessdaten zum Prozessabbild darüber entscheidet, ob die Daten halt direkt oder über das Prozessabbild gelesen/geschrieben werden. Aber eine verbindliche Aussage kann ich da ad hoc nicht machen.
 
Die SFC14/15 müssen verwendet werden, wenn in HW Konfig als Konsistenz > 4 Byte eingestellt ist (oder gleich 3 Byte) und die E/A außerhalb des Prozessabbildes liegen.
Liegen die E/A im OB1-Prozessabbild, dann kümmert sich das Betriebssystem der CPU um den konsistenten E/A-Transfer, dann kann direkt auf die E/A Ex.y, EWn, Ax.y, AWn .. zugegriffen werden oder BLKMOV verwendet werden. SFC14/15 werden in der OB1-Ebene nicht gebraucht und sollen auch nicht zusätzlich aufgerufen werden.

Harald
 
Danke für die Antworten. Unter Strich scheint es aber keine Möglichkeit zu geben den "Start" symbolisch anzugeben und die Anzahl der Bytes/Word?
 
Ich habe gerade noch ein paar Sachen probiert und werde das Symbol an eine Funktion mit dem Datentyp ANY am Eingang übergeben.
Anhand der Pointer Struktur bekomme ich dann die Startadresse und greife dann per "Startadresse + x" auf die einzelnen Elemente zu.

Habe auch keine andere Möglichkeit gefunden.

//EDIT:
Manchmal sieht man den Wald vor lauter Bäumen nicht. Im ANY Format ist natürlich der Wiederholungsfaktor enthalten, so dass ich alles umsetzen kann, was ich umsetzen muss!
 
Zuletzt bearbeitet:
Ich habe gerade noch ein paar Sachen probiert und werde das Symbol an eine Funktion mit dem Datentyp ANY am Eingang übergeben.
Anhand der Pointer Struktur bekomme ich dann die Startadresse und greife dann per "Startadresse + x" auf die einzelnen Elemente zu.

Habe auch keine andere Möglichkeit gefunden.

//EDIT:
Manchmal sieht man den Wald vor lauter Bäumen nicht. Im ANY Format ist natürlich der Wiederholungsfaktor enthalten, so dass ich alles umsetzen kann, was ich umsetzen muss!


Hallo,


wenn das das so vor hast kann es ganz gut Passen einfach an In Out diese Anys anzulegen und dann direkt per Blockmove Sfc20 auf eine Struktur im Temp oder Stat Bereich umzulegenden dann bist du hier bis auf die Adressangabe des Anypointers beim Aufruf voll Symbolisch Unterwegs.
Die Struktur im IDB kann Mann wenn es zu seinem Programm passt gleich sauber in der Visu zur Anzeige des Statues der Schnittstelle Anzeigen.


Gruß Tia
 
Zurück
Oben