Im vorherigen Artikel haben wir darüber gesprochen, was ein UDT ist, wie man benutzerdefinierte Datentypen (UDT) erstellt und welche Vorteile die Verwendung von UDTs in Ihrem Projekt bietet. In diesem Artikel zeigen wir eine Möglichkeit, UDT in Ihrer SPS-Programmierung zu verwenden.
Inhalt:
- Alter Tanksimulator-Funktionsblock.
- Neuer Tanksimulations-FB mit UDT.
- Aufrufen des neuen Tanksimulations-FB.
- Hinzufügen eines neuen Tags zum UDT.
- Schlussfolgerungen.
UDT in der SPS-Programmierung
In unseren letzten Artikeln haben wir dasselbe Tanksimulatorsystem verwendet, um viele Konzepte zu erklären, wie z. B. Regelung und PID-Regler. In diesem Artikel verwenden wir denselben Tanksimulator, um zu zeigen, wie wir das Konzept von UDTs in unserer Programmierung verwenden können.
Alter Tanksimulator-Funktionsblock
Im alten Tanksimulatorsystem haben wir einige interne Parameter definiert, um den Funktionsblock beliebig oft wiederverwenden zu können. Siehe Bild 1.
Bild 1. Tanksimulator-FB.
Wie Sie auf dem Bild sehen, haben wir in der Funktionsblockschnittstelle einige Eingänge und einige InOuts definiert. Diese Parameter sollten bereitgestellt werden, wenn der FB aufgerufen wird.
Wenn wir beispielsweise den FB aufgerufen haben, um Tank 1 zu simulieren, und ihn erneut aufgerufen haben, um Tank 2 darzustellen, müssen wir dem zugehörigen aufgerufenen Funktionsblock die Parameter für jeden Tank bereitstellen. Siehe Bild 2.
Bild 2. Simulation von Tank 1 und Tank 2.
Sie können sehen, dass wir für jeden FB-Aufruf die zugehörigen Tags zuweisen müssen. Für die Simulation von Tank 1 sollten wir dem aufgerufenen FB Tags von Tank 1 zuweisen. Und dasselbe gilt für die Simulation von Tank 2.
Neuer Tanksimulations-FB mit UDT:
Jetzt möchten wir den UDT „Tank“, den wir im letzten Artikel definiert haben, verwenden, um unsere Tanks zu simulieren. Wir werden einen neuen Simulationsfunktionsblock erstellen. Siehe Abbildung 3.
Abbildung 3. Neuen Tanksimulations-FB hinzufügen.
Der neue Simulationsfunktionsblock hat dieselbe Logik wie der alte FB, aber in dieser Simulationsfunktion verwenden wir den definierten UDT „Tank“ als internen InOut-Tag, wie Sie auf der Abbildung sehen.
Anstatt Ihre Funktionsblockparameter in den verschiedenen Bereichen der FB-Schnittstelle zu deklarieren, gibt es jetzt nur noch einen Tag, der alle erforderlichen Informationen zum Tank enthält.
Aufrufen des neuen Tanksimulations-FB:
Um die neue Simulationsfunktion aufzurufen, wählen wir, sie innerhalb eines zyklischen Interrupt-OB aufzurufen, um sicherzustellen, dass die Ausführung des Funktionsblocks nicht von der Zykluszeit des Hauptlogik-OB1 beeinflusst wird, wie wir es bei PIDs erklärt haben.
Wir müssen also zuerst einen neuen zyklischen Interrupt-OB erstellen. Siehe Bild 4.
Bild 4. Hinzufügen eines zyklischen Interrupts zum Aufrufen der Tanks 3 und 4.
Sie können die zyklische Zeit nach Belieben wählen, in unserem Fall haben wir sie auf 3000 Mikrosekunden oder 3 Millisekunden eingestellt.
Jetzt können Sie Ihren FB „Tank Simulator mit UDT“ per Drag & Drop in Ihren zyklischen Interrupt ziehen, um den FB aufzurufen. Ein Fenster mit Aufrufoptionen wird angezeigt, in dem Sie der FB-Dateninstanz einen beliebigen Namen geben können. Siehe Bild 5.
Bild 5. Rufen Sie Ihren FB auf.
Nach dem Aufruf des FB müssen Sie nun die Parameter für den Tank zuweisen, den Sie simulieren möchten. Siehe Bild 6.
Bild 6. Weisen Sie dem FB-Aufruf Tankparameter zu.
Beachten Sie, dass Sie für den Funktionsblock nur einen Parameter ausfüllen müssen. Und zwar das UDT-Tag, das Sie erstellt haben. Enthält bereits alle Tankparameter, die der Funktionsblock benötigt.
Wir möchten Tank_03 simulieren, also weisen wir dem FB-Aufruf das Tag zu. Siehe Abbildung 7.
Abbildung 7. Ziehen Sie Ihr Tag per Drag & Drop.
Der Funktionsblockaufruf für Tank 3 sieht einfacher aus als der Aufruf von Tank 1 mit dem alten Simulator-FB ohne UDTs. Siehe Abbildung 8.
Abbildung 8. Unterschiede beim Aufruf von Tank 1 und Tank 3.
Erkennen Sie den Unterschied zwischen den beiden Tankaufrufen? Im Fall ohne UDTs müssen Sie alle Parameter des Funktionsblocks angeben. Stellen Sie sich vor, Sie müssen mit diesem Simulator 50 Tanks simulieren. Es wäre sehr langweilig und zeitaufwändig, all diese Parameter zuzuweisen, ganz zu schweigen davon, sie zuerst für jeden Tank zu deklarieren.
Aber im Fall des Simulators mit UDTs können Sie so viele aufrufen, wie Sie möchten, und es wird nicht viel Zeit oder Mühe kosten. Siehe Bild 9.
Bild 9. Aufrufen vieler anderer Tanks.
Stellen Sie sich nun vor, Sie müssen Ihrer Simulation eine neue Variable hinzufügen. Sie möchten beispielsweise ein Ausflusswarnsignal hinzufügen. Mit dem alten Simulatorfunktionsblock ohne UDT bedeutet dies, dass Sie dieses neue Tag für jeden Tank deklarieren und es bei jedem Tankaufruf einzeln hinzufügen müssen.
Aber mit UDTs müssen Sie nur das von Ihnen erstellte UDT aktualisieren und das gewünschte neue Tag hinzufügen. Siehe Bild 10.
Bild 10. Hinzufügen eines neuen Tags zum UDT.
Wenn Sie Änderungen am UDT vornehmen, müssen Sie nicht einmal den Funktionsaufruf aktualisieren. Da der Aufrufparameter derselbe ist, wurden die Änderungen innerhalb des Parameters selbst vorgenommen. Siehe Bild 11.
Bild 11. Der FB muss nicht erneut aufgerufen werden.
Sie müssen Ihr SPS-Projekt oder zumindest den Datenblock jedoch noch einmal neu kompilieren, damit die Änderungen am UDT aktualisiert werden können. Siehe Abbildung 12.
Abbildung 12. Neu kompilieren, um die Änderungen am UDT zu aktualisieren.
Nachdem Sie alle Änderungen am UDT kompiliert haben, werden alle deklarierten Tags dieses UDT automatisch aktualisiert. Siehe Abbildung 13.
Abbildung 13. Alle Tags sind jetzt aktualisiert.
Fazit
- Sie können die UDTs in Ihrem Projekt verwenden, um Ihre Programmierung schneller und einfacher nachvollziehbar zu machen.
- Die Verwendung von UDTs erleichtert auch das Vornehmen von Änderungen an Ihren Funktionen und Funktionsblöcken.