Step 7 SCL Anfängerfehler??

Zuviel Werbung?
-> Hier kostenlos registrieren
Der tiefer Sinn ist ein Ventil zu Schalten und zwar nicht mit einem Boolschen Signal sondern mit einem String sprich wenn der Benutzer das Ventil öffnen will soll er in die Visu den satz V1 auf oder zu oder aber Ventil öffnen oder Schließen eingeben können.

Dieser String soll dann in dem FB 1 zerlegt und auf die Wörter V1 und Ventil und zu und auf usw geprüft werden.
 
Ich glaube ich habe verstanden was der TE vor hat, auch wenn sich mir der Sinn dahinter nicht erschließt. Ein Ventil über eine Texteingabe zu steuern ist .... naja etwas merkwürdig.
Nichts desto trotz, hier mal eine Idee von mir:

Code:
FUNCTION_BLOCK FB1
VAR_INPUT
Eingabetext: STRING; //* Steuertext von WinCC*//
Start: BOOL; //* Start Varibale von WINCC*//
END_VAR

VAR_OUTPUT
Ventil: BOOL; //*Ausgangsvariable für das Ventil*//
END_VAR
VAR
Ventil_Ok: BOOL; //*Interne Hilfsvariable nur zur interne Verwendung*//

Ventil_oeffnen: BOOL;
Ventil_schließen: BOOL;

Text_2: STRING :='V1'; //*Auswahltext_1*//
Text_3: STRING :='auf'; //*Auswahltext_2*//
Text_4: STRING :='zu'; //*Auswahltext_3*//
Text_5: STRING :='Ventil'; //*Auswahltext_4*//
Text_6: STRING :='öffne'; //*Auswahltext_5*//
Text_7: STRING :='schließe'; //*Auswahltext_6*//
END_VAR

Ventil_OK := (FIND(IN1:=Eingabetext,IN2:=Text_2) > 0) or (FIND(IN1:=Eingabetext,IN2:=Text_5) > 0);
Ventil_oeffnen := (FIND(IN1:=Eingabetext,IN2:=Text_3) > 0) or (FIND(IN1:=Eingabetext,IN2:=Text_6) > 0);
Ventil_schliessen := (FIND(IN1:=Eingabetext,IN2:=Text_4) > 0) or (FIND(IN1:=Eingabetext,IN2:=Text_7) > 0);

IF Start and Ventil_OK THEN
   IF Ventil_oeffnen and not Ventil_schliessen THEN
     Ventil := TRUE;
  ELSIF Ventil_schliessen and not Ventil_oeffnen THEN
     Ventil := false;
  END_IF;
END_IF;
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Der tiefer Sinn ist ein Ventil zu Schalten und zwar nicht mit einem Boolschen Signal sondern mit einem String sprich wenn der Benutzer das Ventil öffnen will soll er in die Visu den satz V1 auf oder zu oder aber Ventil öffnen oder Schließen eingeben können.
Also tatsäglich ein Text Parser.
Ist FIND Case empfindlich ?
Gibt "zu", "Zu" und "ZU" denselbe ergebnis ?

Wenn der Operator dann den Falschen Ventil geöffnet hat, wie kann er sehr schnell es wieder zu machen ?
Ich kann mir vorstellen dass wenn er eine Text eintippen muss kann es sehr panisch werden.
 
Jo,

die Verriegelung zwischen "auf" und "zu" find ich wichtig, hier nochmal meine Lösung :)

Code:
FUNCTION_BLOCK FB999
VAR_INPUT
Eingabetext: STRING; //* Steuertext von WinCC*//
Start: BOOL; //* Start Variable von WINCC*//
END_VAR

VAR_OUTPUT
Ventil: BOOL; //*Ausgangsvariable für das Ventil*//
END_VAR

VAR
A2: BOOL; //*Text2 vorhanden*//
A3: BOOL; //*Text3 vorhanden*//
A4: BOOL; //*Text4 vorhanden*//
A5: BOOL; //*Text5 vorhanden*//
A6: BOOL; //*Text6 vorhanden*//
A7: BOOL; //*Text7 vorhanden*//
Text_2: STRING :='V1';       //*Auswahltext_2*//
Text_3: STRING :='auf';      //*Auswahltext_3*//
Text_4: STRING :='zu';       //*Auswahltext_4*//
Text_5: STRING :='Ventil';   //*Auswahltext_5*//
Text_6: STRING :='öffne';    //*Auswahltext_6*//
Text_7: STRING :='schließe'; //*Auswahltext_7*//
END_VAR

// Textsuche
A2:=FIND(IN1:=Eingabetext,IN2:=Text_2)<>0;
A3:=FIND(IN1:=Eingabetext,IN2:=Text_3)<>0;
A4:=FIND(IN1:=Eingabetext,IN2:=Text_4)<>0;
A5:=FIND(IN1:=Eingabetext,IN2:=Text_5)<>0;
A6:=FIND(IN1:=Eingabetext,IN2:=Text_6)<>0;
A7:=FIND(IN1:=Eingabetext,IN2:=Text_7)<>0;    

// Ventil schalten
IF START AND (A2 OR A5) AND (A3 OR A6) AND NOT (A4 OR A7) THEN
    VENTIL := 1;
ELSIF START AND (A2 OR A5) AND (A4 OR A7) AND NOT (A3 OR A6) THEN
    VENTIL := 0;
END_IF;

END_FUNCTION_BLOCK
 
Also tatsäglich ein Text Parser.
Ist FIND Case empfindlich ?
Gibt "zu", "Zu" und "ZU" denselbe ergebnis ?

Wenn der Operator dann den Falschen Ventil geöffnet hat, wie kann er sehr schnell es wieder zu machen ?
Ich kann mir vorstellen dass wenn er eine Text eintippen muss kann es sehr panisch werden.

Jo, meiner Meinung nach auch nur eine "akademische" Lösung! Für Industrieanwendungen nicht geeignet!

Gruß.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
was soll eigentlich passieren, wenn der bediener in das Textfeld dann den String 'V 2' eingibt?

Der baustein funktioniert ja nur für ein Ventil, oder lieg ich da falsch?
 
ich Danke euch vielmals erstmal für die schnelle Hilfe das man die Findbausteine so verwenden kann war mir nicht bewusst deswegen habe ich diesen If Then Else Horror da aufgezogen.
Und ja Ducati du hast recht aber nicht nur in IF then else kriege ich Schweissausbrüche ganz generell wenn es heißt SCL ich bin mehr der KOP bzw FUP Mensch hat warscheinlich damit zutun das ich eigentlich nur Instandhalter bin und kein richtiger Programmiere aber leider muss ich in diesen Zeiten auch alles andere mit machen.
 
was soll eigentlich passieren, wenn der bediener in das Textfeld dann den String 'V 2' eingibt?

Der baustein funktioniert ja nur für ein Ventil, oder lieg ich da falsch?

Wie gesagt, alles nur akademisch... In der Praxis gibt's ja auch noch x andere Befehle HAND/AUTO ORT/FERN Quittierung ... das ganze dann in deutsch/englisch/türkisch in allen möglichen Schreibweisen... und dann noch solche Eingaben " V1 V2 Hand ORT schliessen automatisch opening sofort jetzt aber zack zack" :) das wird lustig :)
 
ich Danke euch vielmals erstmal für die schnelle Hilfe das man die Findbausteine so verwenden kann war mir nicht bewusst deswegen habe ich diesen If Then Else Horror da aufgezogen.
Und ja Ducati du hast recht aber nicht nur in IF then else kriege ich Schweissausbrüche ganz generell wenn es heißt SCL ich bin mehr der KOP bzw FUP Mensch hat warscheinlich damit zutun das ich eigentlich nur Instandhalter bin und kein richtiger Programmiere aber leider muss ich in diesen Zeiten auch alles andere mit machen.

Naja, aber vielleicht solltet Ihr nochmal überdenken, ob das mit der Texteingabe solch eine gute Idee ist... Normalerweise macht man das mit mehreren Bedienbuttons, für jede Aktion einen Button.

Gruß.
 
Oder zur Not noch mit einem Symbolischen EA-FELD und da hinter dann eine Textliste, dann bekommt man wenigstens einen Wert zurück der sich dann in der SPS abfragen lässt ohne STrings zu vergleichen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Spätschicht:

>>>Warnung: Kesseltemperatur zu hoch
>KWP AN
>>>Eingabe "KWP" nicht bekannt.
>Kuhlwasserpumpe AN
>>>Eingabe "Kuhlwasserpumpe" nicht bekannt.
>Kühlwasserpumpe AN
>>>Eingabe "Kühlwasserpumpe" nicht bekannt.
>Kuehlwasserpumpe AN
>>>Eingabe "Kuehlwasserpumpe" nicht bekannt.
>KÜHLWASSERPUMPE AN
>>>Eingabe "KÜHLWASSERPUMPE" nicht bekannt.
>kuehlwasserpumpe AN
>>>Eingabe "AN" nicht bekannt.
>>>Warnung: Kesseltemperatur viel zu hoch
>kuehlwasserpumpe an
>>>Eingabe "an" nicht bekannt.
>kuehlwasserpumpe EIN
>>>Eingabe "EIN" nicht bekannt.
>kuehlwasserpumpe START
>>>Eingabe "START" nicht bekannt.
>kuehlwasserpumpe Start
>>>Eingabe "Start" nicht bekannt.
>kuehlwasserpumpe start
>>>kuehlwasserpumpe gestartet.
>>>Alarm: Kesseltemperatur überschreitet. Entlastungsventil öffnen ?
>Ja
>>>Eingabe "Ja" nicht bekannt.
>Entlastungsventil öffnen
>>>Eingabe "Entlastungsventil" nicht bekannt.
......
......
 
Zurück
Oben