Programmierstrategie Anfänger AS/SCL Codesys

elbibi

Level-1
Beiträge
29
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen zusammen,

ich bin Neuling im Bereich der SPS-Programmierung. Möchte nun ein Programm erstellen und habe damit in AS und SFC angefangen (e!cockpit, also Codesys 3.5).

Ich möchte 20 Ventile steuern, die zu verschiedenen Zeiten (insgesamt ~100 Zeitpunkte) eine andere Stellung haben.

Ich habe also eine Schrittkette in AS gemacht, jeder Schritt stellt einen anderen Zeitpunkt dar. In der Aktion habe ich die Dauer und die Ventilstellung geschrieben.
Das funktioniert für wenige Schritte schonmal. Bevor ich das jetzt aber auf 100 Schritte und 20 Ventile ausweite die Frage, ob das Sinn macht, bzw. auch einfacher geht?

Btw: Die Zeiten der einzelnen Schritte und die dazugehörige Ventilstellung soll dann individuell in der Visu eingetragen werden können.

Danke schonmal
Gruß
elbibi
 
Zuletzt bearbeitet:
... Ich möchte 20 Ventile steuern, die zu verschiedenen Zeiten (insgesamt ~100 Zeitpunkte) eine andere Stellung haben.
Ich habe also eine Schrittkette in AS gemacht, jeder Schritt stellt einen anderen Zeitpunkt dar. In der Aktion habe ich die Dauer und die Ventilstellung geschrieben.
... Die Zeiten der einzelnen Schritte und die dazugehörige Ventilstellung soll dann individuell in der Visu eingetragen werden können.
Deine Schrittkette scheint mir sowas von fixiert zu sein auf Zeiten und Dauer, dass ich mich Frage, ob Du wirklich eine Schrittkette im herkömmlichen Sinne meinst!?
Sind wirklich allein die Zeiten das Kriterium für's Weiterschalten zum nächsten Schritt? Keine Abfrage von Rückmeldungen (z.B. "SollPosition erreicht")?
Was soll denn so passieren? Schrittkette starten, Augen zu und warten bis sie abgelaufen ist? Was, wenn Abbruch mittendrin? Was danach? Einstieg immer nur bei Schritt 1? Schrittkette auch mal rückwärts ablaufen lassen?

Gruss, Heinileini
 
Zuviel Werbung?
-> Hier kostenlos registrieren
[...] dass ich mich Frage, ob Du wirklich eine Schrittkette im herkömmlichen Sinne meinst!?

Gute Frage. Ich bin wie gesagt Programmieranfänger. Was ich über Schrittketten recherchiert hatte, schien mir zielführend für meine Aufgabe. Ich erzähl am besten erstmal, was ich machen möchte:

Ich möchte 20 Ventile steuern. Es soll ein Programm entstehen, in dem man die Ventile zu verschiedenen Zeiten verschieden lang öffnet und schließt. Was mit welchem Ventil wann und wie lange passiert, würde man dann individuell in die Visu eintragen, in Form einer Tabelle:

Ventil 1 Ventil 2 .....
20s ON 03s OFF
10s OFF 10s ON
05s ON 15s OFF
10s OFF 10s ON
. .
. .
. .

Das Programm fängt dann wieder von vorne an, genau. Also eigentlich blind durchlaufen lassen, ja.
Hoffe das war einigermaßen verständlich :rolleyes:

Wie würdet ihr das angehen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich möchte 20 Ventile steuern, die zu verschiedenen Zeiten (insgesamt ~100 Zeitpunkte) eine andere Stellung haben.
Jeweils nur 1 Ventil u. diese zwingend in Reihe (also Ventil1, Ventil2,...) oder sollen evtl. auch mal mehrere Ventile gleichzeitig geöffnet sein können?

Bei 20 Ventile u. 2Zeiten/Ventil (Zeit für Auf, Zeit für Zu) - wie passt das zu den 100 Zeitpunkten?

Ansonsten sieh dir mal an, wie man Abläufe in ST mit z.B. Case realisieren kann - kopieren u. ändern ist bequermer als die AS-Klickerei.
 
Hallo auch von mir,

bei dieser Aufgabe kommt´s wohl sehr auf das genaue "was braucht man wirklich" an. Ich hatte beim lesen spotan an eine Art "Musik-Walze" gedachte. Eine endlose wiederholung eines Einstellbaren Bit-Musters mit Zeit.

Im Kern lauft ja nur ein Array [1..100] OF DWORD durch, zusätzlich könnte man in den übrigen 12 Bit (32-20 für die Ventile) ja die Zeit in Sekunden zum nächsten Schritt unterbringen - alternativ dazu springt man fest alle 5/10/xy Sekunden in den nächsten Schritt ...oder oder oder. Hier ist der Themenstarter gefragt - aber von einer Schrittkette hätte ich hierbei Abstand genommen.

Grüße
 
Danke erstmal fürs Antworten. Mit einer Gartenbewässerung hat das ganze nichts zu tun ;-)

Ich möchte in der Visu eine Tabelle haben (s.Anhang), in der ich Zeiten eintragen kann.
Sobal das Programm gestartet wird, geht z.b. Ventil 1 nach 10s OFF, nach 20s ON, nach 24s wieder OFF, usw.
Dabei sollen ca. 100 Schaltungen (also Zeiten) eingetragen werden. Das ganze soll dann noch für 20 Ventile passieren. Die aber unabhängig voneinander sind.

Habe mal etwas rumprobiert, mit Zeitschaltplänen aus EQ-Bausteinen und einem RS-Glied, aber das scheint mir furchtbar umständlich (vorallem wegen der vielen Einträge in der Tabelle). Vielleicht ist AS und CFC auch der falsche Weg? Mit ST habe ich mich noch nicht wirklich viel beschäftigt, wobei das SPS-Progammieren allgemein neu für mich ist.
Also freue mich weiterhin über (einfach erklärte:ROFLMAO:) Antworten :rolleyes:
 
D.h. die Ventile laufen alle für sich u. haben zueinander im Grunde keinerlei Beziehung?

Lies die Werte (Ein-/Ausschaltzeit) in ein Array ein, mit einem Zähler bestimmst Du den gültigen Wertesatz für die Zeiten, lässt ausführen u. nachdem der Zyklus abgearbeitet ist, schaltest Du zum nächsten Schaltwertepaar.
 
Zuletzt bearbeitet:
Danke erstmal fürs Antworten. Mit einer Gartenbewässerung hat das ganze nichts zu tun ;-)

Ich möchte in der Visu eine Tabelle haben (s.Anhang), in der ich Zeiten eintragen kann.
Sobal das Programm gestartet wird, geht z.b. Ventil 1 nach 10s OFF, nach 20s ON, nach 24s wieder OFF, usw.
Dabei sollen ca. 100 Schaltungen (also Zeiten) eingetragen werden. Das ganze soll dann noch für 20 Ventile passieren. Die aber unabhängig voneinander sind.
ich würde da, bevor ich großartig was programmiere, erstmal etwas Struktur reinbringen. Also z.B. einen Funktionsblock "Ventilsteuerung" anlegen, der ein einzelnes Ventil steuert, und dann ein "ARRAY [1..20] of Ventilsteuerung" anlegen.

Hier wäre dann ST ganz praktisch, weil du dann einmal in einer FOR-Schleife alle Ventile abarbeiten kannst. Das sind dann nur 3 Zeilen Code, und du hast schonmal 90% des Programmablaufes im Kasten.

Auch die Steuerung eines einzelnen Ventils ist nicht so aufwendig, du hast einen Timer, z.B. TP, und ein Array, in dem du die jeweilige Wartezeit hinterlegst. Dann zählst du jedes mal, wenn der Timer abgelaufen ist, den Array-Index hoch, invertierst den Ausgang, und startest den Timer neu.

Das sind in ST auch so ungefähr 10 Zeilen.

PS: Für "Noten nach Binär" wurde mal vor langer Zeit das MIDI-Format/Protokoll erfunden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ein Array scheint hier schonmal Ordnung reinzubringen in die Sache.
Wenn ich die Schaltzeiten in dem Array habe, wie kann ich die in der Visu ändern/schreiben? Scheint ja nicht so einfach zu gehen wie einer Variable einen Wert zuzuordnen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich weiß nicht welche Programmierumgebung du nutzt, aber bei TwinCat 3 (bei Codesys V3 wahrscheinlich ähnlich) geht das über die Property: "Columns->Column->[0]->Use Template", dann kannst du in dem Template die Einstellungen machen, als wärst du in einem "normalen" Rectangle, also z.B. als Textvariable "Arrayname[INDEX]" und als Inputkonfiguration, in die Textvariable schreiben.
 
Zurück
Oben