# Staffelung in Codesys



## Don_Travolta (19 Februar 2010)

Hallo zusammen,

stehe vor folgenden Problem.
Ich muß eine Anlaufstaffelung von 10 Motoren programmieren. 
Die Motoren können sowohl Linkslauf als auch Rechtslauf. Programm ist Codesys. Ich arbeite mit CFC-Sprache. Diese Sprache bin ich von Kirchner Soft (LogiCAD) gewöhnt.
Wenn ich da meine Staffelung ausprogrammieren will , so wie ich es immer in LogiCAD mittels UND und ODER Gatter gemacht habe, dürfte sich Codesys aufhängen. Schafft irgendwie nicht diese Rückkopplungschleifen wie LogiCAD. Wenn ich abspeichern will dauert das ewig beim code generieren.
Wenn ich nur für vier Maschinen die Staffelung mache funktioniert es. Kein Problem mit abspeichern etc. Ich brauchs aber für vierzehn Maschinen.
Habe mal ein Jpeg angehängt damit Ihr wissts wovon ich spreche. Code funktioniert so. WEnn im gleichen Zyklus alle Befehl gleichzeitg kommen wird nur einer ausgegeben. Dient als Staffelung für Motoren damit die nicht gleichzeitg anlaufen können und das Netz belasten.
So jetzt meine Frage gibts da vielleicht eine möglichkeit das man das in einer anderen Sprache in Codesys programmiert (Structured Text z.b.).
Will mir einfach die Arbeit sparen das alles auf einzelen FB´s aufzuteilen.
Wäre cool wenn ich ein paar Inputs bekommen würde


----------



## Grubba (19 Februar 2010)

Als Ersatz wäre da ganz einfach eine Case Anweisung mit ST zu programmieren.

Ungefähr so:


```
CASE MotorCount OF:

1 : Motor_1_Ein := TRUE;
     MotorCount := MotorCount +1;

2 : IF Rueckmeldung_Motor_1_Ein THEN
      MotorCount := MotorCount +1;
     END_IF;

3  : Motor_2_Ein := TRUE;
      MotorCount := MotorCount +1;
 
4 : IF Rueckmeldung_Motor_2_Ein THEN
       MotorCount := MotorCount +1;
      END_IF;

...Copy und Paste bis Motor 14...

END_CASE
```

Sowas in der Art vielleicht?


----------



## Don_Travolta (19 Februar 2010)

Danke für die rasche Antwort.
Leider fange ich mit dem Code nicht viel an. Wenn ich mich nicht täusche zählt er immer eins hinauf wenn er die Rückmeldung bekommt das der Motor ein ist.
Stimmt das?

Was ist wenn jetzt beide Befehle im gleichen Zyklus kommen? Fängt er immer beim ersten Motor an?

Gruß


----------



## Grubba (19 Februar 2010)

Der Code ist gedacht dafür:

1 Signal startet ALLE Motoren

Dann werden alle Motoren nacheinander eingeschaltet.

Aber beim zweiten Hinsehen brauchst Du etwas, was beliebiges Ansteuern aller Motoren ermöglicht und verhindert, das zwei beliebige Motoren zusammen anlaufen.

Richtig?


----------



## Don_Travolta (19 Februar 2010)

Ja stimmt genau.
Die Motoren müssen beliebt ansteuerbar sein (Wälzung). Diese Schaltung, die ich angehängt habe, bewirkt dass, wenn im gleichen Zyklus mehrere Einbefehle kommen, nur eine Maschine gestartet wird. Für das würde ich einen Ersatz brauchen. Weil im CFC Modus schafft es Codesys nicht.
Sollen heisen:
Setzen mehrer Eingänge im gleichen Zyklus wird nur ein Eingang auf einen Ausgang geschalten. Das kann dann aber immer der erste Eingang sein. Damit sich der nächste Motor im nächsten Zyklus einschaltet sorge ich in einem anderen Programmteil. 
Weil kommen z.B.: vier Startbefehle für die vier Motoren im gleich Zyklus wird der erste Motor gestartet, dann wird 5 Sekunden gewartet dann kommt der nächste drann, egal ob sich der erste eingeschalten hat oder nicht.

Kann man im Codesys CFC Funktionsbausteine und ST-Funktionsbausteine im Hauptprogramm mischen?

lg


----------



## Werner29 (23 Februar 2010)

Hallo Don_Travolta,

man kann natürlich alles beliebig mischen, aber ich glaube auch das dein CFC noch zu retten ist. Vermutlich genügt es, wenn du die lange Kette an Rückkopplungen einmal in der Mitte aufbrichst und stattdessen eine Hilfsvariable verwendest.
Ansonsten muss CoDeSys solche Hilfsvariablen generieren und muss den Typ dieser Hilfsvariablen ermitteln, was in diesem Fall ein bisschen lang dauert.

Bernhard


----------



## Don_Travolta (25 Februar 2010)

Hallo,
danke für die rasche Hilfe.
Habe es einfach so gemacht das ich die Kette unterbrochen habe und einfach einen FB drausgemacht habe und dann die FB´s einfach nacheinander gereit habe. Funktioniert jetzt.
Danke nochmals!
Über die Lösung mit den Merkern habe ich auch nach gedacht, ist mir aber zu viel arbeit gewesen.
Danke nochmals!

lg


----------

