-> Hier kostenlos registrieren
Beim Thema von Gestern. "effektiv arbeiten mit TIA - wie macht ihr das", sind wir auf das mappen der E/As's auf UDTs zu sprechen gekommen.
Ich hatte dann noch gefragt, ob das ähnlich ist wie in CodeSys. Ich hab's nun ausprobiert. Es funktioniert leider nicht genau so wie ich mir das
vorgestellt hatte. man muss wieder Umweg nehmen.
I. Problem
man muss sich immer Unmengen an Variablen Merken, TIA wie auch Codesys macht es einem da mit den Variablenlisten nicht gerade einfach.
Das ist z.B. in Step7 Classic wesentlich besser gelöst.
Man bräuchte also eine saubere Unterstützung über das Intellisense, so dass man extrem schnellen Zugriff auf seine Variablen hat.
Hier kommt nun die Möglichkeit der hirarchischen Deklaration von UDTs zum tragen
Das Problem: bei TIA ist, dass diese UDT's nicht frei in der Unteradressierung sind und warum auch immer, so ein zusammengesetzter Typ nur auf E/A und nicht
auf Merkerbereiche gemappt werden kann.
Man muss dann einen Umweg über einen DB gehen statt über die Variablentabelle
II. Prinzipielle vorgehensweise.
1. unter PLC Datentypen die Typen für die Aktoren definieren
Pumpe mit Schützansteuerung:
udt_PumpeSchütz
MS_ok : BOOL; // Motorschutzschalter ok
TR_ok : BOOL; // Trocklaufschutz ok
QRM : BOOL; // Rückmeldung Schütz
End_UTD
udt_Valve
B_OPEN : BOOL; // Sensor Ventil offen
B_CLOSED: BOOL; // Sensor Ventil geschlossen
Q : BOOL; // Ansteuerung Ventil
END_UTD
Dann einen neuen DB anlegen Name "o" für Object oder "m" für Maschine
dort dann für jeden Aktor eine Variable eintragen
VP1 : udt_PumpeSchuetz; // Vakuumpumpe 1
VP2 : udt_PumpeSchuetz; // Vakuumpumpe 2
Y1 : udt_Valve; // Ventil 1
Y2 : udt_Valve; // Ventil 2
Y3 : udt_Valve; // Ventil 3
============================================================
jetzt kann man ausgehend von seinem Object mit Intellisense auf die komplette Maschine zugreifen,
ohne sich überhaupt noch ein Signal merken zu müssen.
Was man jetzt noch 1x händisch erledigen muss, ist das mapping der E/A's auf die Object-Signale,
am besten man macht eine Bibliothek mit den Standard UDTs und jeweils eine zugehörige Mapping-Funktion,
die nur noch die E/A Adressen und den UDT übergeben bekommen.
U E0.0
= o.VP1.MS_ok
U E0.1
= o.VP1.TR_OK
U o.VP1.Q
= A0.0
ab jetzt kann man getrost jede Variablentablle und jedes suchen vergessen. Das wird über das Intellisense erledigt!!!
Bei CodeSys/TwinCat ist das aber so wie mir gezeigt wurde wesentlich ausgereifter. Dort kann man die einzelnen E/A's direkt in der Variablentabelle
den Strukturen zuordnen.
Ist hier jemand dabei, der parallel CodeSys/TwinCat programmiert und das nutzt??
Ich hatte dann noch gefragt, ob das ähnlich ist wie in CodeSys. Ich hab's nun ausprobiert. Es funktioniert leider nicht genau so wie ich mir das
vorgestellt hatte. man muss wieder Umweg nehmen.
I. Problem
man muss sich immer Unmengen an Variablen Merken, TIA wie auch Codesys macht es einem da mit den Variablenlisten nicht gerade einfach.
Das ist z.B. in Step7 Classic wesentlich besser gelöst.
Man bräuchte also eine saubere Unterstützung über das Intellisense, so dass man extrem schnellen Zugriff auf seine Variablen hat.
Hier kommt nun die Möglichkeit der hirarchischen Deklaration von UDTs zum tragen
Das Problem: bei TIA ist, dass diese UDT's nicht frei in der Unteradressierung sind und warum auch immer, so ein zusammengesetzter Typ nur auf E/A und nicht
auf Merkerbereiche gemappt werden kann.
Man muss dann einen Umweg über einen DB gehen statt über die Variablentabelle
II. Prinzipielle vorgehensweise.
1. unter PLC Datentypen die Typen für die Aktoren definieren
Pumpe mit Schützansteuerung:
udt_PumpeSchütz
MS_ok : BOOL; // Motorschutzschalter ok
TR_ok : BOOL; // Trocklaufschutz ok
QRM : BOOL; // Rückmeldung Schütz
End_UTD
udt_Valve
B_OPEN : BOOL; // Sensor Ventil offen
B_CLOSED: BOOL; // Sensor Ventil geschlossen
Q : BOOL; // Ansteuerung Ventil
END_UTD
Dann einen neuen DB anlegen Name "o" für Object oder "m" für Maschine
dort dann für jeden Aktor eine Variable eintragen
VP1 : udt_PumpeSchuetz; // Vakuumpumpe 1
VP2 : udt_PumpeSchuetz; // Vakuumpumpe 2
Y1 : udt_Valve; // Ventil 1
Y2 : udt_Valve; // Ventil 2
Y3 : udt_Valve; // Ventil 3
============================================================
jetzt kann man ausgehend von seinem Object mit Intellisense auf die komplette Maschine zugreifen,
ohne sich überhaupt noch ein Signal merken zu müssen.
Was man jetzt noch 1x händisch erledigen muss, ist das mapping der E/A's auf die Object-Signale,
am besten man macht eine Bibliothek mit den Standard UDTs und jeweils eine zugehörige Mapping-Funktion,
die nur noch die E/A Adressen und den UDT übergeben bekommen.
U E0.0
= o.VP1.MS_ok
U E0.1
= o.VP1.TR_OK
U o.VP1.Q
= A0.0
ab jetzt kann man getrost jede Variablentablle und jedes suchen vergessen. Das wird über das Intellisense erledigt!!!
Bei CodeSys/TwinCat ist das aber so wie mir gezeigt wurde wesentlich ausgereifter. Dort kann man die einzelnen E/A's direkt in der Variablentabelle
den Strukturen zuordnen.
Ist hier jemand dabei, der parallel CodeSys/TwinCat programmiert und das nutzt??