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

Ergebnis 1 bis 7 von 7

Thema: ftp-Datei und Byte/Real-Wandelung

  1. #1
    Registriert seit
    28.03.2008
    Ort
    Ba-Wü
    Beiträge
    35
    Danke
    3
    Erhielt 7 Danke für 7 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich habe eine CP343-1 IT (1GX20-0XE0), mit dieser will ich ein paar Real-Werte (im ANSI-Format) in die CPU kopieren. Hat mich der Siemens-hilfe auch gut geklappt. Meine frage nun, ob man auch die Datei per ftp-Ordner auf den CP kopieren kann und die SPS über einen Baustein die Datei selber ausliest ohne die Kommandozeilenparameter, die man von Hand eingeben muss, ausliest. Was auch mgl. wäre, wenn sich die CPU die Datei von einem ftp-Server abholt (zyklisch ein mal an Tag) und die Datei automatisch in den File-DB kopiert.
    Jetzt Problem zwei: Im DB liegen die Werte untereinander in Char-Format vor. Kein Problem Char in INT zu wandeln, wie kriege ich es aber hin, einen Wert mit Komma wieder zu einer REAL-Zahl zu wandeln? Wert z. B. 14,58, der andere 17,99 (die Werte stehen in der .txt-Datei untereinander) -> Pro Wert brauche ich dann sieben Byte Zeichen. Aus diesen sieben Zeichen soll dann wieder der REAL-Wert hergestellt werden.
    Zitieren Zitieren ftp-Datei und Byte/Real-Wandelung  

  2. #2
    Registriert seit
    24.05.2006
    Beiträge
    234
    Danke
    14
    Erhielt 77 Danke für 57 Beiträge

    Standard

    Ein Ansatz wäre wohl der
    FC 39 STRNG_R

    Die Funktion FC 39 wandelt eine Zeichenkette in eine Variable im Format REAL. Die Zeichenkette muß in folgendem Format vorliegen:

    ±v.nnnnnnnE±xx ± Vorzeichenv 1 Vorkommastellen 7 Nachkommastellenx 2 Exponentenstellen
    Ist die Länge der Zeichenkette kleiner als 14, oder ist sie nicht wie oben gezeigt aufgebaut, findet keine Wandlung statt und das BIE*Bit wird auf ”0" gesetzt. Liegt das Ergebnis der Wandlung außerhalb des REAL-Zahlenbereichs, wird das Ergebnis auf den entsprechenden Wert begrenzt und das Binärergebnis BIE auf "0" gesetzt


    Parameter Deklaration Datentyp Speicherbereich Beschreibung
    S INPUT STRING D, L Eingangszeichenkette
    RET_VAL OUTPUT REAL E, A, M, D, L Ergebnis
    Der Eingangsparameter kann nur mit einer symbolisch definierten Variablen belegt werden.
    Zu finden unter stdlibs / iec im Simatic Manager

  3. #3
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.263
    Danke
    537
    Erhielt 2.708 Danke für 1.957 Beiträge

    Standard

    Wenn die Real fest in diesem Format vorliegen kann man auch

    1. die Zahlen links vom Komma
    wandeln in Real
    2. die Zahlen rechts vom Komma
    wandeln in Real, dividieren /100

    Dann beide Real addieren.

    oder noch einfacher:
    Das Komma ausschneiden,
    die erhaltene Zahl in Real wandeln, dann durch 100 teilen.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  4. #4
    Registriert seit
    28.03.2008
    Ort
    Ba-Wü
    Beiträge
    35
    Danke
    3
    Erhielt 7 Danke für 7 Beiträge

    Standard

    Hallo,
    danke für den Tip. Kannst Du mir ein Beispiel für den Programmcode geben.
    Ich hatte folgendes probiert: die erste Zahl (als Zehnerweert vor Komma) mal 1000, die Einerstelle vor dem Komma mal 100. Beides addiert und transferiert in real.
    die Die erste Nachkommastelle dann mal 10 und mit der zweiten Nachkommastell addiert und transferiert in real. Dann beide addiert und durch 100 geteilt.
    Wenn ich die Werte in "Dezimal" anschauen, ist das okay (bis auf den Kommawert). Wenn ich das in real anschauen, steht nur Müll drin.
    Ich denk das liegt daren, dass ich die Werte aus einem Byte und dann mir real-Kommandos bearbeitet.
    Wie kann ich von Byte direkt in Real wandeln???
    Zitieren Zitieren Byte in real wandeln  

  5. #5
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.263
    Danke
    537
    Erhielt 2.708 Danke für 1.957 Beiträge

    Standard

    Ich würde das Komma entfernen. Dann hast du einen String mit 4 Zeichen (5 oder 6 bei größeren Werten), die letzten 2 sind auf jeden Fall die beiden Nachkommastellen. Nun würde ich mit dem Baustein FC37 aus der Standard-Library diesen String in eine DInt wandeln. Danach einfach mit DTR in Real wandeln.

    Code:
          CALL  "STRNG_DI"
           S      :=#My_String
           RET_VAL:=#My_Dint
    
          L     #My_Dint
          DTR   
          L     100.0
          /R    
          T     #My_Real
    Du kannst natürlich auch String in Real wandeln, aber dazu mußt du die korrekte Syntax einhalten, das halte ich hier für komplizierter.
    Geändert von Ralle (19.06.2009 um 14:58 Uhr) Grund: Code nochmal korrigiert
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  6. #6
    Registriert seit
    28.03.2008
    Ort
    Ba-Wü
    Beiträge
    35
    Danke
    3
    Erhielt 7 Danke für 7 Beiträge

    Standard

    Hallo,
    das ist aber das Problem. Ich habe das Komma nunmal drin. Sonst müßte jemand jedesmal die txt-Datei von Hand bearbeiten un das Komma rauslöschen oder gibt es eine Möglichkeit das auszublenden?

  7. #7
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.263
    Danke
    537
    Erhielt 2.708 Danke für 1.957 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von jan820813 Beitrag anzeigen
    Hallo,
    das ist aber das Problem. Ich habe das Komma nunmal drin. Sonst müßte jemand jedesmal die txt-Datei von Hand bearbeiten un das Komma rauslöschen oder gibt es eine Möglichkeit das auszublenden?
    Ich würde das in der SPS rausnehmen. Du mußt ja ohnehin die einzelnen Daten ausschneiden und in die richtige Größe bringen, da kann man das Komma auch noch entfernen. Du hast ja geschrieben, die Werte liegen im DB im Char-Format. Wenn also im DB Byte 5,6,7,8,9 folgendes steht:

    5: '1'
    6: '7'
    7: ','
    8: '4'
    9: '6'

    dann nimmst du eine Stringvar mit der Länge 4.

    Dort scheibst du hinein.

    0: 4 (Länge max)
    1: 4 (Länge )
    2: Byte 5
    3: Byte 6
    4: Byte 8
    5: Byte 9

    Diesen String gibst du dann in den FC37.

    Bsp-Code:

    Code:
          L     P##My_String                //als String in Temp definiert
          LAR1  
    
          L     4
          T     B [AR1,P#0.0]
          T     B [AR1,P#1.0]
          L     DB1.DBB    5
          T     B [AR1,P#2.0]
          L     DB1.DBB    6
          T     B [AR1,P#3.0]
          L     DB1.DBB    8
          T     B [AR1,P#4.0]
          L     DB1.DBB    9
          T     B [AR1,P#5.0]
    Geändert von Ralle (19.06.2009 um 16:06 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

Ähnliche Themen

  1. Byte werte in Real umrechen
    Von enter im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 25.06.2010, 09:09
  2. Byte to Real
    Von uwemiess im Forum Simatic
    Antworten: 40
    Letzter Beitrag: 09.07.2008, 14:46
  3. 4 Byte (float) auf Real?
    Von klauserl im Forum Simatic
    Antworten: 23
    Letzter Beitrag: 07.02.2008, 21:36
  4. REAL in BYTE umwandeln
    Von Terence_Hill im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 18.01.2008, 20:03
  5. blind baustein von oscat Byte in real?
    Von MacDeath im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 09.01.2008, 15:25

Lesezeichen

Berechtigungen

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