Sps_Anfänger.CR
Level-2
- Beiträge
- 141
- Reaktionspunkte
- 3
-> Hier kostenlos registrieren
Hätte es jetzt so gelöst?
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
Ja.Kann ich jetzt also nur mit FIND das auch Programmieren?
Hier einige Beispiele für mögliche Texte:
"Ventil bitte aufmachen",
"Bitte öffnen Sie V1",
"V1 jetzt schließen",
"Ventil zumachen",
"V1 auf",
"öffne das Ventil V1"
Nein. Nicht, ob alle Wörter des Strings vorhanden sind, sondern ob ein einziges aus der Auswahl an gleichbedeutetenden Begriffen vorhanden ist.Wenn ich dein Code betrachtet, dann testest du mit FIND ob "auf öffne oeffne" gibts in die Eingabestring. Also nicht ob einer von die einzelne Wörter sondern ob alle Wörter da sind.
Stimmt! Ventil war als InOut und nicht als OUTPUT geplant.Dein Ventil ist ein OUTPUT.
Dann kannst du nicht die Status von VENTIL abfragen.
Wie du es programmiert hast:
Ventil := (Ventil OR tbV1Auf) AND NOT tbV1zu ;
Deine Lösung hat ebenfalls genau das Problem, das Jesper (Danke!) aufgedeckt hat:Hätte es jetzt so gelöst?
Wenn ich IEC 61131-3 FIND checkt, dann gibt es immer 2 Strings In1 und In2 als Parameter, undNein. Nicht, ob alle Wörter des Strings vorhanden sind, sondern ob ein einziges aus der Auswahl an gleichbedeutetenden Begriffen vorhanden ist.
Allerdings wird vorausgesetzt, dass der zu testende String sich auf zwei Worte beschränkt.
edit:The function FIND returns the character offset of the first occurrence of In2 in string In1.
Die Aufgabe ist leider nicht klar definiert und es wird durch die Beispiele nur angedeutet, was evtl. an zu testenden Strings angeliefert werden könnte. Das ist leider eine seeehr schwammige Vorgabe, um etwas danach zu programmieren.Ich dachte mir das wären nur Beispiele und das ich sie nicht verwenden muss
Ja, genau. Was willst Du uns jetzt damit sagen?Wenn ich IEC 61131-3 FIND checkt, dann gibt es immer 2 Strings In1 und In2 als Parameter, und
The function FIND returns the character offset of the first occurrence of In2 in string In1.
Ich glaube wir reden uns beide vorbei.Ja, genau. Was willst Du uns jetzt damit sagen?
dann meine ich dass mit die Code von SPS-Anfänger wird nach den gesammten String "auf öffne oeffne" getestet, nicht die einzelne Wörter innerhalb von diesen String.Wenn ich dein Code betrachtet, dann testest du mit FIND ob "auf öffne oeffne" gibts in die Eingabestring.
Wenn du die Ventil in ein VAR_IN_OUT und ändert die letzte Zeilen insJa kann ich es jetzt trotzdem so programmieten wie ich es gerade gemacht habe aber nur die fehlenden worte dazufüge oder wieder ganz anderes
Das war Absicht. Das Wort 'auf' soll nicht erkannt/gefunden werden, wenn der zu testende String z.B. aus dem Wort 'Schaufel' besteht.edit:
das Beispiel
FIND("Something else", "Some Text")
ergibt die Rückgabewert 0 obwohl "Some" gibts in "Something".
Die Suchstring muss ganzlich mit Leerzeichen und alles in die Vergleichstring geben, sonnst ist das Ergebnis 0.
Nein, Jesper, wir reden nicht aneinander vorbei.Ich glaube wir reden uns beide vorbei.
Wenn ich sage
dann meine ich dass mit die Code von SPS-Anfänger wird nach den gesammten String "auf öffne oeffne" getestet, nicht die einzelne Wörter innerhalb von diesen String.
Aber das bestreitest du in Beitrag #62, oder verstehe ich das falsch ?
Ja.Kann ich jetzt also nur mit FIND das auch Programmieren?
Hier einige Beispiele für mögliche Texte:
"Ventil bitte aufmachen",
"Bitte öffnen Sie V1",
"V1 jetzt schließen",
"Ventil zumachen",
"V1 auf",
"öffne das Ventil V1"
Nein. Nicht, ob alle Wörter des Strings vorhanden sind, sondern ob ein einziges aus der Auswahl an gleichbedeutetenden Begriffen vorhanden ist.Wenn ich dein Code betrachtet, dann testest du mit FIND ob "auf öffne oeffne" gibts in die Eingabestring. Also nicht ob einer von die einzelne Wörter sondern ob alle Wörter da sind.
Stimmt! Ventil war als InOut und nicht als OUTPUT geplant.Dein Ventil ist ein OUTPUT.
Dann kannst du nicht die Status von VENTIL abfragen.
Wie du es programmiert hast:
Ventil := (Ventil OR tbV1Auf) AND NOT tbV1zu ;
Nein, das Ergebnis von FIND ist nicht BOOL, sondern numerisch.Nebenbei, es ist mir nicht bewusst ob die Vergleich >0 überflüssig ist oder nicht.
Kann sein dass ein logischen Abfrage von FIND die Rückgabewert TRUE gibt wenn das Offset >0 ist.
x := (FIND(FindeEvtlHier1, Suche1) > 0) OR (FIND(FindeEvtlHier2, Suche2) > 0)
x := (FIND(FindeEvtlHier1, Suche1) + FIND(FindeEvtlHier2, Suche2)) > 0
VAR_INPUT
isTxt : STRING ;
END_VAR
VAR_OUTPUT
oiErg : INT ;
END_VAR
VAR_TEMP
tiErg : INT ;
tiIdx : INT ;
END_VAR
tiErg := 0 ;
FOR tiIdx := 1 TO LEN(S:= isTxt) DO
tiErg := FIND(IN1:= "0123456789"; IN2:= MID(IN:= isTxt; L:= 1; P:= tiIdx)) ;
IF tiErg > 0 THEN EXIT ; END_IF ; // Suche abbrechen, weil 1. Ziffer gefunden wurde
END_FOR ;
oiErg := tiErg - 1 ; // PositionsNr vermindert um 1 ergibt den Wert der gefundenen Ziffer oder -1, wenn keine Ziffer gefunden wurde
Da fängt es wirklich an, schwierig zu werden. Das Wort 'nicht' einfach zu ignorieren (wie z.B. gefahrlos bei "bitte" oder "jetzt"), finde ich falsch,Vermutlich schließt die Referenzlösung das Ventil auch bei "Ventil nicht zumachen".
Damit z.B. in dem Text ' Ventilator zuhause einschließen ' weder das 'Ventil' in 'Ventilator' noch das 'zu' in 'zuhause' noch das 'schließe' in 'einschließen' gefunden und das Ventil nicht grundlos geschlossen wird.Warum hast du die Leerzeichen in die Such-Strings ?
Die deutsche Sprache macht es einem manchmal schon extrem schwer, Subjekt und Objekt eindeutig zu unterscheiden, mangels SPO-Regel.Darum würde man die Sprache formalisieren, z.B. in mindestens Subjekt und Prädikate, ...
SubjektEinAus = "Ventilator" | "Motor".
SubjektAufZu = "Tür" | "Ventil" | "Fenster".
PrädikatEinAus = "einschalten" | "ausschalten" | "ein" | "aus".
PrädikatAufZu = "auf" | "zu" | "öffnen" | "schließen" | "aufmachen" | "zumachen".
Ausdruck = (SubjektEinAus PrädikatEinAus) | (SubjektAufZu PrädikatAufZu).
Satz = Ausdruck { ("," | "und") Ausdruck}.
Die Compiler haben es aber verhältnismässig sehr leicht, da sie nicht in "UmgangsSprache" programmierte Texte verarbeiten/akzeptieren müssen - die Kommentare im Programm gehen sie ja nichts an.Auch wie Compiler funktionieren ...
Wir verwenden essentielle Cookies, damit diese Website funktioniert, und optionale Cookies, um den Komfort bei der Nutzung zu verbessern.
Siehe weitere Informationen und konfiguriere deine Einstellungen