Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 7 von 7

Thema: Indirektes Abfrage von CHAR Werten

  1. #1
    Registriert seit
    29.08.2009
    Beiträge
    776
    Danke
    25
    Erhielt 3 Danke für 3 Beiträge

    Standard


    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?
    Zitieren Zitieren Indirektes Abfrage von CHAR Werten  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.405 Danke für 2.002 Beiträge

    Standard

    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

  3. #3
    Bensen83 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.08.2009
    Beiträge
    776
    Danke
    25
    Erhielt 3 Danke für 3 Beiträge

    Standard

    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
    Zitieren Zitieren Funktioniert  

  4. #4
    Bensen83 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.08.2009
    Beiträge
    776
    Danke
    25
    Erhielt 3 Danke für 3 Beiträge

    Standard

    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?
    Zitieren Zitieren Funktionier doch nicht  

  5. #5
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    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?
    If you open your Mind too much, your Brain will fall out.

  6. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.405 Danke für 2.002 Beiträge

    Standard

    ... ich hätte es etwas mehr geklammert - und dann das Zeichen selbst verwendet - also so :
    Code:
     IF  (DB_Paket.DB[Startbyte_Paket + 0] = CHAR_TO_BYTE('M')) AND (DB_Paket.DB[Startbyte_Paket + 1] = CHAR_TO_BYTE('A'))  THEN ...

  7. #7
    Bensen83 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.08.2009
    Beiträge
    776
    Danke
    25
    Erhielt 3 Danke für 3 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Also es hat wohl doch funktioniert. Ich hatte nur den falschen indirekten DB angegeben
    Zitieren Zitieren Läuft  

Ähnliche Themen

  1. Kovertierung von Werten
    Von matchef im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 07.03.2012, 13:52
  2. Indirektes lesen eine DBD...
    Von AndreK im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 19.10.2009, 12:28
  3. Addieren von Werten
    Von 1schilcher im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 08.08.2007, 10:51
  4. Umwandeln von HEX-Werten
    Von capri-fan im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 27.04.2005, 08:59
  5. Diff. von 2 DATE_AND_TIME Werten
    Von Anonymous im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 24.11.2004, 19:22

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •