Indirektes Abfrage von CHAR Werten

Bensen83

Level-1
Beiträge
777
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich habe ein Array von Char werten,
diese möchte ich in einem Baustein abfragen und verarbeiten.
Wollte mir einen FC machen, welchem ich den DB und das STartbyte übergebe und dann indirekt zugreifen. Habe nun folgendes gemacht:
Code:
FUNCTION FC951 : VOID

// Diese Baustein konvertiert ein vom Keyence Messystem empfangenes Datenpaket in Reals
VAR_INPUT
   Laenge_Paket : INT;
   DB_Paket : BLOCK_DB;
   Startbyte_Paket : INT;
   DB_Real : BLOCK_DB;
   Startbyte_Real : INT; 
END_VAR
VAR_TEMP
    
    Modus : INT;
    Kanal : INT;
END_VAR
    // Abfragen des Modus, welcher gefahren wird.
    IF  DB_Paket.DB[Startbyte_Paket + 0] = 'A' AND
        DB_Paket.DB[Startbyte_Paket + 1] = 1 THEN
    
         M40.0 := TRUE   ;
                    
    END_IF;
END_FUNCTION

Leider bekomme ich bei der Abfrage auf 'A' einen Fehler.
"Unzulässige Operantentypen"

Kann man ein CHARBYTE nicht auf 'A' ABFRAGEN?
 
Hallo Bensen,

wenn du einen DB absolut adressierst (in SCL) dann erhältst du IMMER nur die Grundform (in diesem Fall liest du also ein Byte ein und keinen Char). Du solltest das Ding also erst mit einem TypeCast wandeln ... ich weiß jetzt ad hoc aber nicht, ob es einen Byte_to_Char gibt ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Funktioniert

Habe es so abgefragt udn es funktioniert.

Code:
    IF  DB_Paket.DB[Startbyte_Paket + 0] = CHAR_TO_BYTE("Steuerung_Keyence".Konstanten.ASCII_M) AND
        DB_Paket.DB[Startbyte_Paket + 1] = CHAR_TO_BYTE("Steuerung_Keyence".Konstanten.ASCII_A) THEN
 
Funktionier doch nicht

Scheint wohl doch nicht zu funktionieren.
Irgendwie war es zufall, dass die ifbedingung bei abfrage auf 'M' oder 'A' immer TRUE ist, warum auch immer. Hat jemand noch ne idee?
 
Ich vermute Du denkst nur die IF-Verzweigung wäre immer True da Dein Merker 40.0 einmal True wird und es dann auch bleibt. Oder setzt Du den irgendwo noch mal zurück?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... ich hätte es etwas mehr geklammert - und dann das Zeichen selbst verwendet - also so :
Code:
 IF  [COLOR=#B22222]([/COLOR]DB_Paket.DB[Startbyte_Paket + 0] = CHAR_TO_BYTE('M')[COLOR=#B22222])[/COLOR] AND [COLOR=#B22222]([/COLOR]DB_Paket.DB[Startbyte_Paket + 1] = CHAR_TO_BYTE('A')[COLOR=#B22222]) [/COLOR] THEN ...
 
Zurück
Oben