Da ich realtiv neu bei CoDeSys und Sequential-Flow-Chart/Ablaufsprache bin, bitte um Entschuldigung, falls meine Frage eine einfache Lösung hat.
Ich möchte in SFC/AS einen Ablauf programmieren, bei dem an mehreren Stellen ein Drehtisch angesteuert werden muss, um das zu bearbeitende Werkstück weiter zu befördern. Im ersten angehängten Bild ist ein einfacher Ablauf mit 4 Schritten, der in den beiden Schritten ST_TURN_1 und ST_TURN_2 den Tisch weiterdreht. Das Weiterdrehen erfolgt prinzipiell so: Wenn einer der ST_TURN_x-Schritte aktiv wird, so soll zuerst eine Zeit gewartet werden (Für Testzwecke 5 Sekunden), dann soll ein Ausgang TURN_TABLE für eine Sekunde TRUE werden, danach soll eine weitere Zeitspanne (für Testzwecke 7 Sekunden) gewartet werden, danach ist die Tisch-Bewegung sicher abgeschlossen. Der kurze Impuls am TURN_TABLE-Ausgang startet also die Drehbewegung, und sie endet automatisch, ohne weiteren Eingriff durch das SPS-Programm.
Da ich bisher keine elegantere Lösung gefunden habe, realisiere ich das mit vier Aktionen in jedem der ST_TURN_X-Schritte:
D T#5s | TURN_ACT1
D T#6s | TURN_ACT2
NÂ Â Â Â |Â TURN_ACT3Â
D T#13s |Â TURN_ACT_FINISHED
Die ersten beiden Aktionen TURN_ACT1 und TURN_ACT2 sind leer. Wie die dritte Aktion TURN_AKT3 aussieht, ist im zweiten angehängten Bild enthalten: Im wesentlichen handelt es sich um eine Zuweisung TURN_TABLE := _TURN_ACT1.x and (not _TURN_ACT2.x). TURN_TABLE wird also auf TRUE gesetzt, wenn die Aktion TURN_AKT1 schon begonnen hat (nach 5 Skeunden), aber TURN_AKT2 noch nicht begonnen hat (nach 6 Sekunden). Nach 13 Sekunden schaltet TURN_ACT_FINISHED (eine einfache boolsche Variable) in den nächsten Schritt.
Der Ablauf funktioniert so zwar, für mich wäre es aber logisch, diesen Zeitablauf und die TURN_TABLE-Ansteuerung in einer einzigen, ein wenig komplexeren Aktion zu realisieren. Diese Aktion würde ich in den beiden Schritten ST_TURN_1 und ST_TURN_2 aufrufen. Meine Frage nun: Kann man diesen Tisch-Ansteuerungs-Zeitablauf in einer einzigen Aktion erstellen? Wenn ja, wie? Falls nein, gibt es eine andere Lösung als meine, die etwas übersichtlicher bzw. eleganter ist?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo,
Da ich realtiv neu bei CoDeSys und Sequential-Flow-Chart/Ablaufsprache bin, bitte um Entschuldigung, falls meine Frage eine einfache Lösung hat.
Ich möchte in SFC/AS einen Ablauf programmieren, bei dem an mehreren Stellen ein Drehtisch angesteuert werden muss, um das zu bearbeitende Werkstück weiter zu befördern. Im ersten angehängten Bild ist ein einfacher Ablauf mit 4 Schritten, der in den beiden Schritten ST_TURN_1 und ST_TURN_2 den Tisch weiterdreht. Das Weiterdrehen erfolgt prinzipiell so: Wenn einer der ST_TURN_x-Schritte aktiv wird, so soll zuerst eine Zeit gewartet werden (Für Testzwecke 5 Sekunden), dann soll ein Ausgang TURN_TABLE für eine Sekunde TRUE werden, danach soll eine weitere Zeitspanne (für Testzwecke 7 Sekunden) gewartet werden, danach ist die Tisch-Bewegung sicher abgeschlossen. Der kurze Impuls am TURN_TABLE-Ausgang startet also die Drehbewegung, und sie endet automatisch, ohne weiteren Eingriff durch das SPS-Programm.
Da ich bisher keine elegantere Lösung gefunden habe, realisiere ich das mit vier Aktionen in jedem der ST_TURN_X-Schritte:
Die ersten beiden Aktionen TURN_ACT1 und TURN_ACT2 sind leer. Wie die dritte Aktion TURN_AKT3 aussieht, ist im zweiten angehängten Bild enthalten: Im wesentlichen handelt es sich um eine Zuweisung TURN_TABLE := _TURN_ACT1.x and (not _TURN_ACT2.x). TURN_TABLE wird also auf TRUE gesetzt, wenn die Aktion TURN_AKT1 schon begonnen hat (nach 5 Skeunden), aber TURN_AKT2 noch nicht begonnen hat (nach 6 Sekunden). Nach 13 Sekunden schaltet TURN_ACT_FINISHED (eine einfache boolsche Variable) in den nächsten Schritt.
Der Ablauf funktioniert so zwar, für mich wäre es aber logisch, diesen Zeitablauf und die TURN_TABLE-Ansteuerung in einer einzigen, ein wenig komplexeren Aktion zu realisieren. Diese Aktion würde ich in den beiden Schritten ST_TURN_1 und ST_TURN_2 aufrufen. Meine Frage nun: Kann man diesen Tisch-Ansteuerungs-Zeitablauf in einer einzigen Aktion erstellen? Wenn ja, wie? Falls nein, gibt es eine andere Lösung als meine, die etwas übersichtlicher bzw. eleganter ist?