TIA Animation Gestaltung mit Optimierten Bausteinen

Lipperlandstern

Level-3
Beiträge
6.465
Reaktionspunkte
2.000
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Kollegen.

Ich sammele grade meine ersten größeren Erfahrungen mit TIA. Ja ich weiss... ich bin spät dran :)


Ich stehe jetzt vor einem Problem bei der Gestaltung von Objekten.

Animation.JPG

Bisher habe ich ein Bit beschrieben und damit eine Animation ausgelöst. Wie mache ich das jetzt mit Optimierten Bausteinen ?
 
Das ist ein INT. Und mit den Bit-Nr 13, 14 und 15 wird die Farbe geändert.


In optimierter Form habe ich Datentyp mit Bool angelegt aber das wird so nicht gehen. Ich vermute ich werde mit diesen "komischen %X1" Zugriff auf Bit in einem INT zurückgreifen müssen
Der Slice-Zugriff ist vermutlich der einfachste Weg, auf einzelne Bits des INTs zu zu greifen.

Ansonsten kannst Du auch in optimierten FBs Variablen (außer in TEMP) mit AT überlagern, wenn Du deren Remanenz auf "Im IDB einstellen" änderst. Für FCs gilt das leider nicht, da diese ja keinen IDB besitzen.
Und das Maskieren mit AND/OR funktioniert natürlich auch nach wie vor.
 
Warum machst du nicht eine eigene Status Variable, ansonsten würde mir
noch Bildbaustein einfallen, aber das ist irgendwie zu aufwändig für so etwas
banales.

Ich könnte auch das oben erwähne Objekt 3x anlegen und jeweils mit einem Bit versorgen. Macht die Sache aber auch aufwendig. Bei der Statusvariable gefällt mit der Zugriff mit %X nicht. Alles ist symbolisch und dann kommt da ein %X wo keiner weiß was sich dahinter versteckt.
 
Der Slice-Zugriff ist vermutlich der einfachste Weg, auf einzelne Bits des INTs zu zu greifen.

Ansonsten kannst Du auch in optimierten FBs Variablen (außer in TEMP) mit AT überlagern, wenn Du deren Remanenz auf "Im IDB einstellen" änderst. Für FCs gilt das leider nicht, da diese ja keinen IDB besitzen.
Und das Maskieren mit AND/OR funktioniert natürlich auch nach wie vor.

Ich hab mir jetzt einen kleinen Baustein geschrieben. Vorne geht das UDT mit Bool rein und hinten kommt ein UDINT für die Visu raus. Der Slicezugriff ist dann schön versteckt :ROFLMAO:
 
Bei der Statusvariable gefällt mit der Zugriff mit %X nicht. Alles ist symbolisch und dann kommt da ein %X wo keiner weiß was sich dahinter versteckt.
Wenn Du die eigentlich falschen Datentypen INT/DINT/UDINT für die Statusvariablen verwendest, dann kannst Du die Bits auch durch Addition der Bitwertigkeiten setzen. Gerne auch als benannte Konstanten.
Code:
CONST
  stLeft  := 1;
  stRight := 2;
  stRun   := 4;
  stWarn  := 64;
  stError := 128;
END_CONST

tmpStatusVar := 0;
IF QMotor THEN tmpStatusVar += stRun; END_IF;
...
IF MotorErr THEN tmpStatusVar += stError; END_IF;

StatusVar := tmpStatusVar;
INT/DINT/UDINT... sind für Zahlenwerte zum Rechnen vorgesehen. Für Bitsammlungen sollte man die Bitstring-Datentypen BYTE/WORD/DWORD... verwenden.
Hab' gerade kein TIA verfügbar, doch ich meine, bei strenger Typprüfung (IEC-Typprüfung?) sollte der Slice-Zugriff .%X.. auf INT/DINT/UDINT...-Variablen auch angemeckert werden.

Harald
 
Wenn Du die eigentlich falschen Datentypen INT/DINT/UDINT für die Statusvariablen verwendest, dann kannst Du die Bits auch durch Addition der Bitwertigkeiten setzen. Gerne auch als benannte Konstanten.
Code:
CONST
  stLeft  := 1;
  stRight := 2;
  stRun   := 4;
  stWarn  := 64;
  stError := 128;
END_CONST

tmpStatusVar := 0;
IF QMotor THEN tmpStatusVar += stRun; END_IF;
...
IF MotorErr THEN tmpStatusVar += stError; END_IF;

StatusVar := tmpStatusVar;
INT/DINT/UDINT... sind für Zahlenwerte zum Rechnen vorgesehen. Für Bitsammlungen sollte man die Bitstring-Datentypen BYTE/WORD/DWORD... verwenden.
Hab' gerade kein TIA verfügbar, doch ich meine, bei strenger Typprüfung (IEC-Typprüfung?) sollte der Slice-Zugriff .%X.. auf INT/DINT/UDINT...-Variablen auch angemeckert werden.

Harald

Hallo Harald.

Ich habe jetzt (zum Glück) keine Ahnung wo ich eine IEC-Typprüfung starte aber ich habe trotzdem mein UDINT auf DWORD geändert :ROFLMAO:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab' gerade kein TIA verfügbar, doch ich meine, bei strenger Typprüfung (IEC-Typprüfung?) sollte der Slice-Zugriff .%X.. auf INT/DINT/UDINT...-Variablen auch angemeckert werden.
Näh, das geht ohne meckern. Man kan jeden Variabeln mit Elementar-Datentypen von 1-bit, 8-bit, 16-bit, oder 32-bit Breite mit Slice addressieren.
edit: Das gilt auch wenn man die IEC Überprüfung aktiviert.

Ich verwende den Verfahren mit das AT-Sicht.
Find ich ist die 'elegante' Lösung. Dann gibt es kein Code nur um die bits für die Visu zu formatieren.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
@Lipperlandstern

Ich hab auch das Problem gehabt.
Ich hab jetzt eine UDT, in der sind ein paar Bits als Bool und je zwei Byte (Int oder Word geht auch) für numerische Werte.
Damit kann ich z.B. meine Ventil-Handsteuerung ganz gut animieren.

MSS Bool false True True True False
Error Bool false True True True False
Error_GS Bool false True True True False
Error_AS Bool false True True True False
Error_GS_plus_AS Bool false True True True False
noFRG_GS Bool false True True True False
noFRG_AS Bool false True True True False
Error_FRG Bool false True True True False
Endlage_GS Bool false True True True False
Endlage_AS Bool false True True True False
Ausgang_GS Bool false True True True False
Ausgang_AS Bool false True True True False
Zustand_Bewegung Byte 16#0 True True True False
Zustand_Allgemein Byte 16#0 True True True False

Ist etwas redundant, weil ich einmal Error iin mehreren Bit anzeige, also z.B. das Feld mit "Endlage_GS" rot wird und andererseits im "Zustand_Allgemein" über eine Numeration die Hintergrundfarbe des gesamten Bildbausteins animiere.
 
Hallo Lipperlandstern,

dafür gibt es auch noch die Befehle Scatter bzw. Gather. Damit kannst du eine Struktur auf ein Word oder umgekehrt transferieren.
Scatter.jpg

Harald
 
Zurück
Oben