Step 7 String Auslesen

Monsignore

Level-2
Beiträge
77
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute

Muss einen Barcode auslesen der mir per String gesendet wird. Hab den Code dazu geschrieben jedoch will das ganze so nicht funktionieren kann mir jemand sagen ob ich da einen groben Denkfehler drinnen habe?

Code:
IF NOT IsR THEN 
    BC := "DB_OPC".IN.L_BC_Label;
ELSE
    BC:="DB_OPC".IN.R_BC_Label;
END_IF;

BC_Err := FALSE;
Farb_Err := FALSE;
BC_Farb := MID(IN:=BC, P:=11, L:=4);
BC_IsGrau    := FALSE;
BC_IsSchwarz := FALSE; 
BC_IsBeige   := FALSE;
BC_IsMBeige  := FALSE; 
BC_IsSBeige  := FALSE;

 
//Festlegung Barcode 11-14.Stelle
//7L34 
//9G26
//7N72
//8P24 
//8S62 
BC_IsGrau    :=  BC_Farb = '7L34';
BC_IsSchwarz :=  BC_Farb = '9G26';
BC_IsBeige   :=  BC_Farb = '7N72';
BC_IsMBeige  :=  BC_Farb = '8P24';
BC_IsSBeige  :=  BC_Farb = '8S62';
Farb_Err := NOT(
               (isGrau    AND BC_IsGrau   )
            OR (isSchwarz AND BC_IsSchwarz)
            OR (isBeige   AND BC_IsBeige  )
            OR (isMBeige  AND BC_IsGrau   )
            OR (isSBeige  AND BC_IsGrau   )
            );

BC_Vorg := MID(IN:=BC, P:=1, L:=10);
 
Ergebnis1:= (BC_Vorg = '2126903725') AND IsW212L;
Ergebnis2:= (BC_Vorg = '2126903825') AND IsW212R;
Ergebnis3:= (BC_Vorg = '2126902525') AND IsS212L;
Ergebnis4:= (BC_Vorg = '2126902625') AND IsS212R;
Ergebnis5:= (BC_Vorg = '2186901925') AND IsC218L;
Ergebnis6:= (BC_Vorg = '2186902025') AND IsC218R;
Ergebnis7:= (BC_Vorg = '2186903925') AND IsX218L;
Ergebnis8:= (BC_Vorg = '2186903825') AND IsX218R;
Ergebnis9:= (BC_Vorg = '2186904125') AND IsX218AL;
Ergebnis10:= (BC_Vorg = '2186904025') AND IsX218AR;

11. bis 14. Stelle enthalten den Farbcode

1. bis 10. Stelle die Type

Ich hab versuche es zu simulieren jedoch wenn ich in der VAT die einzelnen Zeichen als CHAR anlege und dann Steuere komm auch zu keinem Ergebniss woran kann das liegen? "DB_OPC".IN.L_BC_Label; ist als String[26] angelegt. Was habe ich falsch gemacht?

Gruß
 
Hallo,
ich verstehe den Sinn deines Codes gerade nicht ... 8)
Aber grundsätzlich : AND ist eine logische Verknüpfung. Das wird z.B. eingesetzt für : "IF (a=1) and (b=17) then ..."
Wenn du nun überprüfen willst, ob dein String eine bestimmte Sequenz enthält oder sogar die Sequenz im String an einer bestimmten Stelle steht mußt du die String-Vergleichs-Routinen heranziehen (z.B. EQ_STRNG oder FIND).

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit AND macht er ja nur die Boolschen Abfragen. Allerdings ob man mit = wirklich Strings vergleichen kann?
Da müsste man wohl wirklich genau wissen was der Compiler aus den direkt geschriebenen Konstanten macht '7L34' dass dann akt/max stringlänge auch wirklich mit dem Vergleichsstring übereinanderpassen.
 
Zuerst muß unbedingt überprüft werden, was wirklich in "BC" landet! Ist BC als String angelegt? Was steht in Byte 0 und Byte 1 ? (max. Länge und tatsächliche Länge des Strangs.) Ich weiß nicht, ob das per OPC auch genau so (S7-String) angeliefert wird, wenn nicht (Byte 0 und 1 leer oder mit den ersten beiden Byte des String befüllt), dann funktioniert MID gar nicht oder nicht korrekt!
 
Hi Leute

Ich hab die Temporären Strings initialisiert bringt leider auch nix. BC ist als String[26]. Habe die Eingangsvariable(DB_OPC".IN.L_BC_Label) per VAT angesteuert und wollt das ganze auf einen DB schreiben (DB950.BC:= BC;) wenn ich diesen DB dann in der VAT auslese stehen nur 0 drin. Woran liegt das? Ich komm einfach nicht drauf.

Gruß
Andi
 
initialisiert müssen alle Strings natürlich sein (vor der ersten Verwendung).

Dessen ungeachtet würde ich den Vergleicher so ausführen :
Code:
BC_IsGrau  :=  EQ_STRNG (BC_Farb , '7L34') ;
... wobei noch zu testen wäre ob EQ_STRNG eine Konstante am Eingang "schluckt" ...

Gruß
Larry
 
Zurück
Oben