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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 17 von 17

Thema: Mit TwinCat 2 Werte in CSV File schreiben

  1. #11
    Registriert seit
    17.05.2011
    Beiträge
    39
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Morgen zusammen,

    Danke für die Hilfreichen Tipps, aber auch mit der Konvertierung REAL_TO_LREAL und danach LREAL_TO_STRING() bringt es nichts die nachkommastellen bleiben.

  2. #12
    Registriert seit
    17.05.2011
    Beiträge
    39
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Morgen zusammen,

    danke schonmal für die Tpps aber auch mit der Konvertierung "REAL_TO_LREAL und danach LREAL_TO_STRING()" bleiben die nachkommastellen im String

  3. #13
    Registriert seit
    05.07.2013
    Beiträge
    71
    Danke
    12
    Erhielt 12 Danke für 10 Beiträge

    Standard

    Also wenn du auf 2 Dezimalstellen bestehst, kannst du deine LREAL in einen String wandeln, mit
    Code:
    Pos := Find(ZahlString,'.'); //ermittelt die Position des Punktes im String
    CSVString := Left(ZahlString,Pos+2); //Kürzt den String auf die Länge mit 2 Stellen hinterm Punkt
    CSVString := Replace(CSVString, ',' , 1, Pos); //ersetzt den Punkt durch ein Komma
    bearbeiten.
    (schnell aus dem Kopf geschrieben und ungetestet)

    Mfg

    Edit: Replace korrigiert
    Geändert von jensemann (22.01.2015 um 08:56 Uhr)

  4. Folgender Benutzer sagt Danke zu jensemann für den nützlichen Beitrag:

    Niklas412 (22.01.2015)

  5. #14
    Registriert seit
    17.05.2011
    Beiträge
    39
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Also vorrerst habe ich es lösen können ich habe die Real Zahl durch die Berechnung Real*10 Real_to_Dint ---> Dint_to_Real Real/10 auf eine kommstelle begrenzt.
    Dann wird mir nach der umwandlung zu string auch nur eine kommstelle angezeigt, wenn ich es aber mit 100 oder 1000 berechne so das ich auf 2 oder 3 kommastellen komme funktioniert es nicht.

  6. #15
    Registriert seit
    03.12.2014
    Beiträge
    57
    Danke
    3
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Es gibt folgende Funktion:

    Code:
    (* Variable als String *) := LREAL_TO_FMTSTR( in := (* Varible in Real *) , iPrecision := 3, bRound := TRUE );
    Diese rundet die Real auf 3 Nachkommastellen. Die 3 kannst du auch ändern.
    Die Kommentare sind die Variablen.
    Dass Excel das falsch anzeigt, ist normal. Wie oben geschrieben ist der Punkt daran schuld. Excel erkennt das als 1000er Trennzeichen.
    Du musst in Excel zur richtigen Darstellung einfach "Text" als Format für die Zelle wählen. Dann bleibt der Wert unverändert.

    ABER: Wenn du eine CSV Datei in Excel öffnest, er dir direkt das Format falsch auswählt und das Feld schon falsch dargestellt wird, dann hilft auch das ändern in Text nichts.
    Excel ändert nämlich dann den Wert schon. Ich glaube, man kann aber diese automatische Formatierung ausschalten...

  7. Folgender Benutzer sagt Danke zu LMDaniel999 für den nützlichen Beitrag:

    Niklas412 (22.01.2015)

  8. #16
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Zitat Zitat von Niklas412 Beitrag anzeigen
    dann schneide ich bis auf zwei alle nachkommastellen ab.
    Tatsächlich rundest Du auf 3 Nachkommastellen...
    Da Du aber nach dem Runden wieder Gleitpunkt-Berechnung machst, wird es wieder ungenau und es tauchen wieder mehr Nachkommastellen auf.
    Musst Du denn nach dem Wandeln in Ganzzahl wieder zurück in Gleitpunkt? Kannst Du vielleicht den Wert als Ganzzahl mit einer anderen Zehnerpotenz bzw. in einer anderen Einheit in die csv-Datei schreiben? (z.B. 2553g statt 2,553kg)

    Musst Du tatsächlich die Nachkommastellen begrenzen? Das ist doch nur Kosmetik für die csv-Datei, welche auch noch die Genauigkeit verschlechtert, weil es den Wert verfälscht. Schaut sich denn jemand die csv-Datei an?

    Ansonsten würde ich es etwa so machen:
    Code:
    sDelimiter : = ',';  //hier einstellen, ob Dezimalkomma oder Dezimalpunkt
    
    diTemp := REAL_TO_DINT(rEingangswert * 1000.0);  // -2.553xxx --> -2553
    sAusgabe := CONCAT(DINT_TO_STRING(diTemp / 1000), sDelimiter);  // --> '-2,'
    sAusgabe := CONCAT(sAusgabe, DINT_TO_STRING(diTemp MOD 1000));  // --> '-2,553'
    Ich kenne die TwinCat *_TO_STRING-Funktionen nicht, eventuell mußt Du da noch führende Leerzeichen entfernen.

    Nachtrag:
    Die letzte Zeile mit dem Anhängen der Nachkommastellen wird nicht korrekt funktionieren.
    Besser so:
    Code:
    sDelimiter : = ',';  //hier einstellen, ob Dezimalkomma oder Dezimalpunkt
    
    diTemp := REAL_TO_DINT(rEingangswert * 1000.0);  // -2.553xxx --> -2553
    sAusgabe := CONCAT(DINT_TO_STRING(diTemp / 1000), sDelimiter);  // --> '-2,'
    sAusgabe := CONCAT(sAusgabe, RIGHT(CONCAT('00', DINT_TO_STRING(ABS(diTemp))), 3) );  // --> '-2,553'
    Harald
    Geändert von PN/DP (22.01.2015 um 15:52 Uhr) Grund: Korrektur
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  9. #17
    Registriert seit
    17.05.2011
    Beiträge
    39
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @LMDaniel999,

    Danke für den Tipp ich habe es grad mal mit einem Wert probiert und es funktioniert super!
    Danke dafür!!!

Ähnliche Themen

  1. Antworten: 11
    Letzter Beitrag: 28.04.2016, 14:36
  2. Antworten: 0
    Letzter Beitrag: 17.07.2014, 11:32
  3. Twincat Array nach CSV file
    Von Nijkamp im Forum CODESYS und IEC61131
    Antworten: 4
    Letzter Beitrag: 13.02.2014, 13:21
  4. CodeSys V3 Werte in CSV Datei Schreiben,Hilfe!
    Von Nitro-Haiza im Forum CODESYS und IEC61131
    Antworten: 0
    Letzter Beitrag: 19.09.2012, 11:17
  5. csv schreiben mit Zeilenumbruch
    Von Ampel03 im Forum CODESYS und IEC61131
    Antworten: 5
    Letzter Beitrag: 15.02.2012, 07:14

Lesezeichen

Berechtigungen

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