TIA V16 - SCL - Codestruktur

CallHeTempi

Level-2
Beiträge
88
Reaktionspunkte
6
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen zusammen,

ich bin recht neu in der SCL Programmierung und habe bisher (alles noch auf "Student-Niveau") am meisten Java-Code geschrieben und kenne mich da was die Struktur in Objektorientiertem Programmen angeht ein wenig aus.
Jetzt hab ich hier in den letzten Tagen schon einiges gelernt. Vor allem, das sog. "IF..THEN.. Orgien" nicht besonders vorteilhaft sind. :ROFLMAO:
Daher wollte ich euch hier mal meinen Code posten und um euer Feedback bitten. Vor allem bezüglich Struktur und Übersichtlichkeit.
Ich habe den Code, wie ich es in Java mache in abschnitte "Void" bzw. [FB1..2..3] aufgeteilt und es ist vorgesehen, das diese FB´s dann später natürlich in den Main kommen.

Sicherheitsfunktionen [FB3]
Code:
"Variabeln".NotHalt := NOT #LichtschrankeNotAus;

Variabelfunktionen [FB5]
Code:
"Variabeln".AblageVoll := #Sensor_6 AND "Variabeln".RoterZähler = 3;
"Variabeln".AblageLeer := "Variabeln".RoterZähler = 6;

ZählTimerfunktionen [FB4]
Code:
"IEC_Timer_0_DB_4".TON(IN := "Variabeln".AblageVoll,
                       PT := #Timer,
                       Q => #Einschaltverzögerung);

"IEC_Counter_0_DB_1".CTU(CU:=#Do21,
                         R:=#ResetRoterZähler,
                         PV:=1,
                         CV=>"Variabeln".RoterZähler);
#ResetRoterZähler := "Variabeln".RoterZähler = 6;

Förderbandsteuerung [FB2]
Code:
// Void Zufuhrsteuerung
#DcMotorZufuhr := "Variabeln".NotHalt AND NOT #KapazitiverSensorCJB_18GM_E2;
"Variabeln".Magnetisch := #InduktiverSensorZufuhr;
#Din_27 := "Variabeln".Magnetisch;
#Din_26 := NOT "Variabeln".Magnetisch AND #KapazitiverSensorCJB_18GM_E2;

// Void Ablagesteuerung
#DcMotorZurück := (#EinschalVerzögerung OR #DcMotorZurück) AND NOT #ReflexionslichttasterOBT200_18GM60_E5;
#DcMotorVor := ("Variabeln".AblageLeer OR #DcMotorVor) AND NOT #NäherungssensorLTK_1120_303;

Das ist bisher nur ein Zwischenergebnis. Normalerweise würde ich, wie in [FB3] keinen extra FB öffnen um nur eine Zeile reinzuschreiben aber es werden noch mehrere Funktionen integriert.

Vielen Dank im Voraus
 
Kurze Frage: Ist dir der Unterschied zwischen FCs und FBs bewusst? Jeder FB bekommt einen Instanz DB, das macht man, wenn man Zustände in einem Baustein auch über den Aufruf des Bausteins hinweg speichern möchte, aber keinen Globalen-DB nehmen möchte (z.B. weil man einen Baustein für Frequenzumrichter hat und mehrfach den gleichen Frequenzumrichter).

In deinem FB3 und FB5 benötigst du meiner Meinung nach nur einen FC, da du die Variablen eh nur in deinen Globalen-DB speicherst. "Variabeln" ist übrigens kein besonders guter Name für einen DB. Möglichst keine Begriffe nehmen, die systemisch auch schon eine Bedeutung haben, sowas verwirrt nur. Gern darfst du auch deinen Timern und Zählern Aussagekräftige Namen geben. Und sehr gut, dass du keine if.. then.. Orgien genommen hast, wenn es sich auch schön mit eindeutigen Zuweisungen deklarieren lässt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin CallHeTempi,

ich würde die Aufteilung etwas anders wählen. Globale Sachen, wie Ein-Ausschalten, NotAbschaltung, Betriebsartwechsel usw. würde ich in Funktionen aufteilen und, wie Du es gemacht hast, Bausteine für die Funktionen schreiben.
Aber, wenn z.B. ein Förderelement angesteuert wird, würde ich die dazugehörigen Funktionen, wie Zeiten, Zähler, Freigaben, usw. jeweils in EINEN Baustein schreiben. Beispielsweise FB "einfacherFoerderer" o.ä.

VG

MFreiberger
 
Ist dir der Unterschied zwischen FCs und FBs bewusst?
Tatsächlich ist mir der Unterschied bewusst ich hab heute morgen noch darüber nachgedacht. Aber im Zusammenhang mit SCL war ich mir nicht sicher.

Wie benenne ich die Timer? Einfach über "// *Kommentar*" oder kann man das noch anders machen?
Aber, wenn z.B. ein Förderelement angesteuert wird, würde ich die dazugehörigen Funktionen, wie Zeiten, Zähler, Freigaben, usw. jeweils in EINEN Baustein schreiben. Beispielsweise FB "einfacherFoerderer" o.ä.
Okay! Also meinst du, ich sollte z.B. die Timer und Zählerfunktion in den dazugehörigen [FB] schreiben? Also quasi so:

Förderbandbandsteuerung [FB2]
Code:
// Void ZählerTimer
"IEC_Timer_0_DB_4".TON(IN := "Variabeln".AblageVoll,
                       PT := #Timer,
                       Q => #Einschaltverzögerung);

"IEC_Counter_0_DB_1".CTU(CU:=#Do21,
                         R:=#ResetRoterZähler,
                         PV:=1,
                         CV=>"Variabeln".RoterZähler);
#ResetRoterZähler := "Variabeln".RoterZähler = 6;

// Void Zufuhrsteuerung
#DcMotorZufuhr := "Variabeln".NotHalt AND NOT #KapazitiverSensorCJB_18GM_E2;
"Variabeln".Magnetisch := #InduktiverSensorZufuhr;
#Din_27 := "Variabeln".Magnetisch;
#Din_26 := NOT "Variabeln".Magnetisch AND #KapazitiverSensorCJB_18GM_E2;

// Void Ablagesteuerung
#DcMotorZurück := (#EinschalVerzögerung OR #DcMotorZurück) AND NOT #ReflexionslichttasterOBT200_18GM60_E5;
#DcMotorVor := ("Variabeln".AblageLeer OR #DcMotorVor) AND NOT #NäherungssensorLTK_1120_303;
 
Tatsächlich ist mir der Unterschied bewusst ich hab heute morgen noch darüber nachgedacht. Aber im Zusammenhang mit SCL war ich mir nicht sicher.

Wie benenne ich die Timer? Einfach über "// *Kommentar*" oder kann man das noch anders machen?
Timer und Zähler haben von die IDBs verpasst bekommen, die aktuell "IEC_Counter_0_DB_1" heißen. Hier könnte z.B. auch direkt "Zaehler_Rot_IDB" stehen, dann weiß man direkt welche Funktion der zugehörige Zähler hat.
 
Okok Vielen Dank! Dann bin ich ja schonmal auf dem richtigen Pfad. Ich mach gerade mein Technikerprojekt und wir müssen das am Ende Leuten präsentieren, die Ahnung davon haben. De code sollte also vernünftig aussehen.:D
 
Ist SCL bei dem Projekt eine Vorgabe?
Ich frage, weil ich persönlich der Meinung bin, dass UND ODER Anweisungen besser in KOP oder FUP aufgehoben sind. Alleine für die spätere Lesbarkeit des Programms. IEC Timer/Counter kannst du in TIA auch in DB's als Datentypen anlegen (auch als array) dann hast du am Ende nicht so viele "vagabundierende" DB's in deinem Bausteincontainer.
Gruß Pascal
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zeiten und Zähler würde ich als Multi-Instanz, also im FB Static Speicherbereich aufrufen, ansonsten kann man den FB "Förderbandsteuerung" nur einmal im Programm nutzen.
 
Zurück
Oben