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

Ergebnis 1 bis 4 von 4

Thema: Array of Char umwandeln?

  1. #1
    Registriert seit
    17.02.2008
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen

    Bin neu hier im Forum und habe folgendes Problem:

    Ich habe an einer 313C mit einem CP340 einen Laser-Distanzsensor angeschlossen. Die Kommunikation erfolgt mittels ASCII-Protokoll. Nun werden die Messwerte in einen Datenbaustein gesendet.
    Das Format der Zeichen ist Char und die werden einzeln in einem Array abgelegt.

    Eine Antwort vom Laser sieht etwa folgendermassen aus:

    'g' '0' 'q' '+' '0' '0' '0' '0' '2' '5' '8' '2' '&r' '&l'

    wobei die Zeichenfolge "g0q+" die Antwort auf ein Kommando und "00002582" den Messwert (in 0.1mm) darstellt. Der Schluss ist die Terminierung.

    Nun das Problem ist mit diesen Zeichen im Charformat kann ich nicht weiterarbeiten. Ich sollte mit dem Messwert rechnen und vergleichen können, bräuchte also irgendein Zahlenformat wie INT oder so.

    Habe bis jetz mal den Messwert alleine ohne "g0q+" und Terminierung in einen neuen DB geladen (aber immer noch als Char halt...)

    Kann mir da jemand weiterhelfen wie ich daraus ein verwertbares Resultat machen kann? Das Ganze ist für eine Positionssteuerung eines Hallenkranes gedacht...

    Der Link zum Lasersensor: http://www.dimetix.ch/Products/DE/_FRM_DLS_B_DE.html

    Besten Dank und Gruss

    Thomas
    Zitieren Zitieren Array of Char umwandeln?  

  2. #2
    Registriert seit
    25.06.2007
    Ort
    Dresden
    Beiträge
    3.930
    Danke
    465
    Erhielt 878 Danke für 634 Beiträge

    Standard

    Zitat Zitat von thomzur Beitrag anzeigen
    Hallo zusammen

    Bin neu hier im Forum und habe folgendes Problem:

    Ich habe an einer 313C mit einem CP340 einen Laser-Distanzsensor angeschlossen. Die Kommunikation erfolgt mittels ASCII-Protokoll. Nun werden die Messwerte in einen Datenbaustein gesendet.
    Das Format der Zeichen ist Char und die werden einzeln in einem Array abgelegt.

    Eine Antwort vom Laser sieht etwa folgendermassen aus:

    'g' '0' 'q' '+' '0' '0' '0' '0' '2' '5' '8' '2' '&r' '&l'

    wobei die Zeichenfolge "g0q+" die Antwort auf ein Kommando und "00002582" den Messwert (in 0.1mm) darstellt. Der Schluss ist die Terminierung.

    Nun das Problem ist mit diesen Zeichen im Charformat kann ich nicht weiterarbeiten. Ich sollte mit dem Messwert rechnen und vergleichen können, bräuchte also irgendein Zahlenformat wie INT oder so.

    Habe bis jetz mal den Messwert alleine ohne "g0q+" und Terminierung in einen neuen DB geladen (aber immer noch als Char halt...)

    Kann mir da jemand weiterhelfen wie ich daraus ein verwertbares Resultat machen kann? Das Ganze ist für eine Positionssteuerung eines Hallenkranes gedacht...

    Der Link zum Lasersensor: http://www.dimetix.ch/Products/DE/_FRM_DLS_B_DE.html

    Besten Dank und Gruss

    Thomas



    einfach - durch geschicktes umkopieren in eine Stringstruktur - ggf. byte für byte oder mit BLKMOVE

    0tes Byte und 1tes Byte als Haeder entspr. parametrieren und mit

    FC 37 STRNG_DI aus des IEC-LIBs in DINT umwandeln.


    Gruß

  3. #3
    thomzur ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    17.02.2008
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo

    Vielen Dank! Hat supi geklappt

    Gruss Thomas

  4. #4
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Man braucht nicht unbedingt die Zeichenkette in eine STRING-Variable umkopieren und sie dann mit dem FC37 STRNG_DI in eine DINT-Zahl umzuwandeln. Die Umwandlung der Zeichenkette in eine DINT-Zahl kann man auch mit geringem Aufwand Zeichen für Zeichen von Hand durchführen:

    Code:
    FUNCTION FC 100 : VOID
    TITLE =Laser-Distanz
    AUTHOR : KAI
    FAMILY : SPSFORUM
    NAME : LASER
    VERSION : 1.0
     
    VAR_INPUT
      LASER : POINTER ; 
    END_VAR
    VAR_OUTPUT
      DISTANZ : DINT ;  
    END_VAR
    VAR_TEMP
      DB_REGISTER : WORD ;  
      AR1_REGISTER : DWORD ;    
      DB_NUMMER : WORD ;    
      ZWISCHENWERT : DINT ; 
      MULTIPLIKATOR : DINT ;    
      SCHLEIFE : INT ;  
    END_VAR
    BEGIN
    NETWORK
    TITLE =DB-Register und Adressregister AR1 sichern
     
          L     DBNO; // DB-Register
          T     #DB_REGISTER; 
     
          TAR1  #AR1_REGISTER; // AR1-Register
     
    NETWORK
    TITLE =Laser-Distanz
    //CHAR '0' = HEX 30 = DEZ 48
    //CHAR '1' = HEX 31 = DEZ 49
    //CHAR '2' = HEX 32 = DEZ 50
    //CAHR '3' = HEX 33 = DEZ 51
    //CAHR '4' = HEX 34 = DEZ 52
    //CHAR '5' = HEX 35 = DEZ 53
    //CHAR '6' = HEX 36 = DEZ 54
    //CHAR '7' = HEX 37 = DEZ 55
    //CHAR '8' = HEX 38 = DEZ 56
    //CHAR '9' = HEX 39 = DEZ 57
    //   
          L     P##LASER; // POINTER
          LAR1  ; 
     
          L     W [AR1,P#0.0]; // POINTER DB-Nummer
          T     #DB_NUMMER; 
     
          AUF   DB [#DB_NUMMER]; 
     
          L     D [AR1,P#2.0]; // POINTER Bereichszeiger
          LAR1  ; 
     
          L     L#0; 
          T     #ZWISCHENWERT; // Zwischenwert
     
          L     L#10000000; 
          T     #MULTIPLIKATOR; // Multiplikator
     
          L     8; 
    M01:  T     #SCHLEIFE; // Schleife
     
          L     B [AR1,P#4.0]; // Wert CHAR => DINT
          L     48; 
          -I    ; 
          ITD   ; 
          L     #MULTIPLIKATOR; // Mulitplikator
          *D    ; 
          L     #ZWISCHENWERT; // Zwischenwert
          +D    ; 
          T     #ZWISCHENWERT; // Zwischenwert
     
          L     #MULTIPLIKATOR; // Multiplikator
          L     L#10; 
          /D    ; 
          T     #MULTIPLIKATOR; // Multiplikator
     
          L     P#1.0; 
          +AR1  ; 
     
          L     #SCHLEIFE; // Schleife
          LOOP  M01; 
     
          L     #ZWISCHENWERT; // Zwischenwert
          T     #DISTANZ; // Distanz
     
    NETWORK
    TITLE =DB-Register und Adressregister AR1 wiederherstellen
     
          AUF   DB [#DB_REGISTER]; // DB-Register
     
          LAR1  #AR1_REGISTER; // AR1-Register
     
    END_FUNCTION
    Gruß Kai
    Angehängte Grafiken Angehängte Grafiken
    • Dateityp: jpg VAT.jpg (266,3 KB, 43x aufgerufen)
    Angehängte Dateien Angehängte Dateien

Ähnliche Themen

  1. INT oder DINT in CHAR/BYTE Umwandeln
    Von MAVI im Forum Simatic
    Antworten: 41
    Letzter Beitrag: 29.04.2016, 12:51
  2. Char umwandeln in Integer
    Von viperserver im Forum Simatic
    Antworten: 47
    Letzter Beitrag: 07.03.2011, 15:23
  3. S7-1200-Array of Char in string
    Von Diplomand11 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 21.01.2011, 08:44
  4. Integer in Char Array wandeln ?
    Von Power_Pete im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 28.01.2010, 15:26
  5. Array mit Char an FC übergeben?
    Von Ingo im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 15.12.2007, 16:07

Lesezeichen

Berechtigungen

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