TIA Einfache Not-Halt Funktion in SCL

ArtucovP

Level-1
Beiträge
13
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

dies ist mein erster Beitrag und ich möchte mich kurz einmal vorstellen: Patrick, 31 Jahre :)

Ich arbeite mich gerade im TIA in SCL ein, selbststudium quasi. Als Hilfsmittel nutze ich das Buch "SPS Programmierung mit SCL im TIA-Portal" von Karl Schmitt. Was mich aktuell beschäftigt ist eine sinnvolle und übersichtliche Not-Halt Funktion.

gegeben:
Ich nutze einen NH-Schalter, einen Kontakt zur RM, einen Quittiertaster, einen Ausgang um die Störung anzuzeigen und einen Ausgang um zu signalisieren "quittierbar". Zusätzlich habe ich am Baustein einen Takt Eingang eingefügt, den ich mit einem Taktmerker verschalte.


Mein aktueller Lösungsweg:

FUNCTION_BLOCK "NH_Ueberwachung"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
NH_OK_in : Bool;
NH_Stoerung_in : Bool;
Zusatz_in : Bool;
Takt : Bool;
END_VAR

VAR_OUTPUT
NH_OK_out : Bool;
NH_quitt : Bool;
END_VAR
VAR_OUTPUT RETAIN
NH_Stoerung : Bool;
END_VAR

VAR_TEMP
quittieren : Bool;
END_VAR


BEGIN
//Einfache Not-Halt Funktion
IF
#NH_OK_in AND NOT #NH_Stoerung_in AND NOT #Zusatz_in //Not-Halt Okay
THEN
#NH_OK_out := 1;
#NH_quitt := 0;
#NH_Stoerung := 0;
ELSIF
NOT #NH_OK_in AND #NH_Stoerung_in AND #Zusatz_in //Not-Halt aktiv
THEN
#NH_OK_out := 0;
#NH_quitt := 0;
#NH_Stoerung := 1;
ELSIF
NOT #NH_OK_in AND #NH_Stoerung_in AND NOT #Zusatz_in //Not-Halt quittierbar
THEN
#NH_OK_out := 0;
#quittieren := 1;
#NH_Stoerung := 1;
END_IF;

//Blinken für Quittierung
#NH_quitt := #quittieren AND #Takt; //Der Ausgang quitt blinkt (Taktmerker benötigt)
END_FUNCTION_BLOCK


Gibt es verbesserungsvorschläge? Wie wäre euer Lösungsweg/Vorschlag?

Viele Grüße,


Patrick
 
Einfache logische Verknüpfungen werden in SCL schnell unübersichtlich.
Darum mache ich sowas immer in KOP / FUP.
TIA unterstützt ja erfreulicherweise Gemischtprogrammierung, also SCL-Netzwerke in KOP/FUP-Bausteinen

Wenn es wirklich in SCL sein muss, dann geht es so ohne "IF THEN ELSIF ELSE ENDIF"-Verschachtelung.

Du hast im Prinzip 2 Denkweisen bei Programmieren:
- Was passiert wenn welche Eingangsbedingung erfüllt ist
- Was muss erfüllt sein damit das entsprechende Ausgangssignal den passenden Zustand annimmt.

Die 2 Variante ist meist besser für die Fehlersuche, da das Ausgangssignal nicht x-mal zugewiesen wird und man sich nicht durch zig Verschachtelungen kämpfen muss.

Code:
// Ungetestet
#NH_OK_out := NH_OK_in AND NOT #NH_Stoerung_in AND NOT #Zusatz_in; //Not-Halt Okay
#NH_Stoerung := NOT #NH_OK_in AND #NH_Stoerung_in; //Not-Halt aktiv
#quittieren := NOT #NH_OK_in AND #NH_Stoerung_in AND NOT #Zusatz_in; //Not-Halt quittierbar;

Gruß
Blockmove
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

ah ich verstehe. Das mit diesen IFTHENELSE Orgien hab ich schon des öfteren gelesen, da geb ich dir vollkommen recht.

Das mit der Gemischtprogrammierung nutze ich übrigens. Ich habe diesen FB in SCL erstellt und nutze ihn quasi als Vorlage, um ihn dann in eine Funktion in KOP einzufügen. So mache ich es aktuell auch mit FU Bausteinen, oder Wägemodulen.

Ich werde deine Variante einmal kurz ausprobieren dann.

Vielen Dank :)
 
Das mit der Gemischtprogrammierung nutze ich übrigens. Ich habe diesen FB in SCL erstellt und nutze ihn quasi als Vorlage, um ihn dann in eine Funktion in KOP einzufügen.
Mit "Gemischtprogrammierung" war gemeint: einen Baustein in KOP/FUP erstellen und in dem Baustein einzelne Netzwerke mit SCL-Code einfügen: "also SCL-Netzwerke in KOP/FUP-Bausteinen"

Harald
 
Zurück
Oben