Textsteuerung

SH91

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen
ich habe folgende Aufgabe und ich bin mir nicht sicher ob ich die Aufgabe richtig gelöst habe , ich benötige Hilfe

Es geht um eine Ansteuerung zu einem Ventil mit ST realisiert werden muss, wobei die Ventilstellung durch die Eingabe eines Textes geändert wird. Dieser Text könnte z.B. über eine automatische Texterkennung aus gesprochenen Worten ermittelt werden.

Die Texte, die zum Öffnen oder Schließen des Ventils führen, müssen die Zeichenfolgen "Ventil" oder "V1" und zusätzlich für das Öffnen des Ventils "öffne" oder "auf" und für das Schließen "schließe" oder "zu" enthalten.

Es soll in einem FB festgestellt werden, ob bei dem vorgegebenen "Eingabetext" das "Ventil" der Wert TRUE (Ventil auf) oder FALSE (Ventil zu) annehmen soll. Dazu muss geprüft werden, ob der eingegebene Text die angegebenen Schlüsselzeichen enthält.

ich habe die Aufgabe so gelöst auf CODESYS

PROGRAM PLC_PRG
VAR
Text1: STRING;
Text2: STRING;
Text3: STRING;
Text4: STRING;
Text5: STRING;
Text6: STRING;
END_VAR
VAR_INPUT
Eingabetext: STRING;
END_VAR
VAR_OUTPUT
Ventil: BOOL;
END_VAR

Text1:='V1';
Text2:=' auf';
Text3:=' zu';
Text4:='Ventil';
Text5:=' öffne';
Text6:=' schließe';

IF Eingabetext=CONCAT(STR1:=Text1, STR2:=Text2) THEN Ventil:=TRUE; END_IF;
IF Eingabetext=CONCAT(STR1:=Text1,STR2:=Text3) THEN Ventil:=FALSE; END_IF;
IF Eingabetext=CONCAT(STR1:=Text4, STR2:=Text5) THEN Ventil:=TRUE; END_IF;
IF Eingabetext=CONCAT(STR1:=Text4,STR2:=Text6) THEN Ventil:=FALSE; END_IF;
 
ich bin mir nicht sicher ob ich die Aufgabe richtig gelöst habe

müssen die Zeichenfolgen "Ventil" oder "V1" und zusätzlich für das Öffnen des Ventils "öffne" oder "auf" und für das Schließen "schließe" oder "zu" enthalten
Deine Bedingungen fehlen.

IF Eingabetext=CONCAT(STR1:=Text1, STR2:=Text2) THEN Ventil:=TRUE; END_IF;
IF Eingabetext=CONCAT(STR1:=Text1,STR2:=Text3) THEN Ventil:=FALSE; END_IF;
IF Eingabetext=CONCAT(STR1:=Text4, STR2:=Text5) THEN Ventil:=TRUE; END_IF;
IF Eingabetext=CONCAT(STR1:=Text4,STR2:=Text6) THEN Ventil:=FALSE; END_IF;
Was soll passieren wenn keine Bedingung erfüllt ist?
z.B. "Ventil V1 öffne"
Dieser Befehl wäre nach deiner Beschreibung gültig, wird aber vom Programm nicht erkannt, genauso wie "öffne V1"
Eine absolute Interpretation mit Concat wird dich nicht zum Ziel führen. Versuche mal was mit "Find" zu bauen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Tja da steht jetzt in der Hochglanz-Präsentation "Ready to use in less then 10 minutes" und dann scheitert es an der Stringauswertung im SPS-Programm :p
Sorry, konnte nicht wiederstehen. Bei uns geistert das Thema auch immer wieder rum. Mit den vollmundigsten Versprechen (3,5s schnellere Taktzeit als bei Handbedienung)
Ich würde hier mit String-Arrays arbeiten. Ein Array mit den Aktoren (Hub, Klemmung, Vorschub, ...) und ein Array mit den Aktionen (Ein / Aus, Heben / Senken, ...) und dann mit Find den Eingabestring durchsuchen.
 


Deine Bedingungen fehlen.


Was soll passieren wenn keine Bedingung erfüllt ist?
z.B. "Ventil V1 öffne"
Dieser Befehl wäre nach deiner Beschreibung gültig, wird aber vom Programm nicht erkannt, genauso wie "öffne V1"
Eine absolute Interpretation mit Concat wird dich nicht zum Ziel führen. Versuche mal was mit "Find" zu bauen.
vielen Dank für die Tipps ,ich habe das Programm erneut mit FIND geschrieben und hat funktioniert ,
 
Hallo zusammen,
ich stehe vor dem selben Problem,( Ventil mit einem Text steuern) und in Moment drehe ich mich im Kreis.
Ich habe es mit einem String to Char versucht (Siehe Bild)Wie soll den ein Array of Char die Boolesche Ausgangsgröße schalten?
Ich bin total verzweifelt....
 

Anhänge

  • Screenshot 2021-08-24 165440.png
    Screenshot 2021-08-24 165440.png
    197,7 KB · Aufrufe: 24
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
ich stehe vor dem selben Problem,( Ventil mit einem Text steuern) und in Moment drehe ich mich im Kreis.
Selbes Problem ja, aber nicht die selbe Steuerung und damit nicht unbedingt die selben Experten die sich in diesem Unterforum tummeln.
Threads zu kapern mag ja in manchen Situationen noch halbwegs in Ordnung sein, aber hier würde ich Dir wirklich empfehlen im Siematic-Bereich einen neuen Thread auf zu machen in dem Du dann auf diesen mit einem Link verweist, das dürfte erfolgsversprechender sein.
 
Zurück
Oben