TIA Instanzbereich fehlerhaft

Zuviel Werbung?
-> Hier kostenlos registrieren
Aber es erklärt alles leider noch nicht, warum im InOut-Bereich des Instanz-FBs, respektive demzufolge auch im DB des übergeordneten FBs, der Bereich der UDT_Manuell_HZ nur mit 6 Byte anstatt 30 Byte aufgelöst wird und die Einzeldaten somit nicht mehr zu sehen sind.
Es wird ein Pointer übergeben anstatt einer Kopie des UDT, daher benötigt der IDB nur Platz für den POINTER (6 Byte) und nicht für den ganzen UDT (30 Byte).

Auf was für einen UDT der Pointer zeigt und wie die Struktur und Größe des UDT ist, weiß der FB von der Typ-Deklaration des InOut.

Harald
 
PS:
Angenommen, der FB würde Übergabeparameter auf interne Kopien umkopieren (z.B. nach Temp), dann würde er
- bei internKopie1 := #Waermetauscher; die 16 Byte der Struktur von der Adresse IDB.DBX116.0 kopieren, weil da die Kopie des übergebenen Aktualparameters im IDB liegt
- bei internKopie2 := #Handbedien; würde er zunächst die Adresse des übergebenen UDT aus IDB.DBX158.0 holen (weil da ja nur ein Pointer des Aktualparameters liegt) und dann von dieser Adresse die 30 Byte des UDT kopieren.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Harald,
danke für die Ausführung.
Entsteht das ganze Problem nur, weil es sich um eine Struktur im InOut handelt? Wie könnte ich das Problem lösen, die einzelnen Variablen der Struktur auch in der Visu ansprechen zu können?
Auf optimierte Bausteine hatte ich schonmal umgestellt, dennoch nicht den gewünschten Effekt erzielt.

Vielen Dank vorab.
 
Hallo Harald,
danke für die Ausführung.
Entsteht das ganze Problem nur, weil es sich um eine Struktur im InOut handelt? Wie könnte ich das Problem lösen, die einzelnen Variablen der Struktur auch in der Visu ansprechen zu können?
Auf optimierte Bausteine hatte ich schonmal umgestellt, dennoch nicht den gewünschten Effekt erzielt.
Was hast du auf optimiert umgestellt um welchen Effekt zu erzielen?

Was spricht dagegen, mit der HMI auf den GlobalDB zuzugreifen? Und Haralds Lösung wäre doch genau das was du willst, nur halt dann im Stat Bereich statt im IN/OUT. Das funktioniert und stellt sich dann genau so dar wie wenn es eine IN/OUT Instanz wäre.
 
Entsteht das ganze Problem nur, weil es sich um eine Struktur im InOut handelt?
Ja. Weil da nur ein Pointer übergeben wird, den die Visu/HMI nicht auflösen kann.

Wie könnte ich das Problem lösen, die einzelnen Variablen der Struktur auch in der Visu ansprechen zu können?
z.B. Die UDT-Variablen der InOuts der FB-Instanzen zusätzlich in Kopien für das HMI in Global-DB kopieren.

Oder im lokalen Static Bereich des FB eine Struktur "HMI" anlegen und in der Struktur eine Variable des Datentyps des InOut-Parameters anlegen, und eine Kopie des InOut-Parameters in die lokale Static Variable kopieren. Auf diese kann die Visu/HMI zugreifen. Achtung: externe Zugriffe auf interne Variablen von Instanzen sind allgemein schlechter Programmierstil, für HMI-Zugriffe aber manchmal noch akzeptiert. Problem: wenn die Struktur von FB-Instanzen geändert wird, auf die die HMI zugreift, dann muß vor dem Laden der FB-Instanzen in die PLC die HMI gestoppt werden und das HMI-Projekt neu übersetzt werden, und nach dem Laden der PLC auch die HMI neu geladen werden.

Harald
 
Zurück
Oben