Step 7 Verarbeitung von String Variablen

Zuviel Werbung?
-> Hier kostenlos registrieren
Will ich nun die Stringvariable mit der Zeichenkette "NoRead" vergleichen, hab ich nur die möglichkeit in einem Datenbaustein eine Variable Typ String[25], mit dem Anfangswert "NoRead" zu erstellen, um diese dann mit der Stringvariable in der das Leseergebniss steht zu vergleichen.
Mit dieser lösung bin ich aber nicht ganz glücklich, da ich immer von diesem 1x beschriebenen wert abhängig bin.
In SCL kann man Strings mit String-Konstanten vergleichen:
Code:
IF myString = 'NoRead' THEN
...

In AWL geht das nicht.
In AWL könntest Du vor dem Vergleich einen Vergleichsstring mit dem Inhalt 'NoRead' initialisieren:
Code:
// TEMP: temp_VergleichsString : STRING[25]

      LAR1  P##temp_VergleichsString    // Pointer auf Anfang der Vergleichs-Stringvariable
      L     DW#16#19064E6F              // 25, 6, 'No'
      T     D [AR1,P#0.0]               // die ersten 4 Bytes von temp_VergleichsString initialisieren
      L     'Read'
      T     D [AR1,P#4.0]               // das 5. bis 8. Byte von temp_VergleichsString initialisieren

      CALL  "EQ_STRNG"
       S1     :="DB72".MyString
       S2     :=#temp_VergleichsString  // 'NoRead'
       RET_VAL:=#result

oder direkt den Abschnittsweisen Vergleich mit je maximal 4 Zeichen durchführen:
Code:
// Pointer auf Anfang der Stringvariable "DB72".MyString
      LAR1  P#DBX 0.0                   //Anfangsadresse von MyString im DB72
      AUF   "DB72"

//oder
//    LAR1  P##MyString   //wenn MyString in TEMP, STAT, IN, ... liegt

      U(
      L     D [AR1,P#0.0]               // Bytes 1 bis 4 der Stringvariable MyString
      L     DW#16#19064E6F              // 25, 6, 'No'
      ==D   
      )
      U(
      L     D [AR1,P#4.0]               // Bytes 5 bis 8 der Stringvariable MyString
      L     'Read'
      ==D   
      )
      =     #result

Harald
 
Zuletzt bearbeitet:
Hallo, danke für die Antwort,
hab das mal so versucht,
scheinbar aber noch einen Fehler im Syntax,
beim übersetzen kommt der Fehler:

"Unbekannte Anweisung; möglicherweise fehlt ein Strichpunkt."
und der Cursor springt auf die letzte Zeile "END_FUNCTION"

FUNCTION FC101 : VOID

VAR_INPUT

Lesedaten:STRING[25];
Vergleichsdaten:STRING[25];


END_VAR


VAR_OUTPUT
VergleichIO:BOOL;
END_VAR

BEGIN


IF Lesedaten=Vergleichsdaten THEN
VergleichIO:=1;
ELSE
VergleichIO:=0;

END_IF
END_FUNCTION
 
Erledigt,

dann kommen 2 Fehler: "Parameterzuweisung nicht korrekt."

Ich kann aber keinen Fehler erkennen, wobei das nichts heissen soll. ;)


Mfg
CZach
 
Moin,
versuchs mal damit.
Code:
IF STRING_TO_CHAR(Lesedaten)= STRING_TO_CHAR(Vergleichsdaten) THEN
VergleichIO:=true;
ELSE
VergleichIO:=false;
END_IF;
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich hätte jezt noch eine Aufgabe bei der ich nicht so recht weiß wie ich anfangen soll.

Ich möchte gerne die letzten 5 gelesenen Codes abspeichern, so das man die noch nachschauen kann,
wird ein neuer code Gescannt, wird der 5te rausgeschmissen, und die anderen um eins nachgeschoben.

Die gelesenen Daten stehen jetzt jeweils in einer Stringvariablen mit 25Byte

Ich würde einen Datenbaustein erstellen, in dem jeweils 5 Stringvariable für den ersten Barcodleser und fünf Stringvariablen für den zweiten Barcodeleser definiert werden.

Vor dem Einlesen der neuen Codes werden alten dan jeweils in die erste Variable für den jeweiligen Barcodeleser geschrieben, und die anderen jeweil um eine Variable weiterkopiert.

Muss ich das je Variable mit dem SFC 20 kopieren, oder gibts da auch eine einfachere Lösung.

Mfg
CZach
 
Muss ich das je Variable mit dem SFC 20 kopieren, oder gibts da auch eine einfachere Lösung.

Hallo,
da ich mal davon ausgehe, dass du hier mit SCL arbeitest, brauchst du dir nur ein Array_of_String in der gewünschten Größe als FIFO ausbauen.
Hier kannst du dann das Aufrücken einfach mit einer Schleife erledigen und danach den neuen Eintrag in das Array schreiben.

Gruß
Larry
 
Zurück
Oben