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

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

Thema: Wie bastel ich mir mit Double Integern einen String?

  1. #11
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.708
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Flex macht das auch nicht selber - hat Hub ja auch nicht geschrieben ...
    Du mußt den String in der Visu basteln (würde ich jetzt nun nicht machen), vorausgesetzt deine Visu kann Scripte.
    Oder du machst es, wie schon angefangen, in der SPS ...

  2. #12
    Qnkel ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.06.2013
    Beiträge
    101
    Danke
    18
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Jetzt is das Problem noch aufgetaucht, dass DI_STRING mir das Vorzeichen mit reinhaut.

    Wie löse ich das am schlauesten?
    Will ungern jetzt nochmal jeden String zwischenspeichern und durchn DELETE laufen lassen.
    Wenn ja: wie funzt DELETE? Also von wo fängt der an zu zählen?

  3. #13
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.708
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Die String-Routinen benötigen zwar den Header, zählen ihn aber nicht mit.
    Ich würde da so vorgehen :
    Du wandelst das als String um und schneidest dir hinterher mit MID den relevaten Teil heraus.
    Willst du nur das Vorzeichen vorne heraus haben dann wäre das ab Pos.2 im String für Länge Stringlänge-1.

  4. #14
    Registriert seit
    29.03.2004
    Beiträge
    5.731
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Ich würde das gar nicht mit Stringfunktionen machen, sondern mir den String aus einzelnen Zeichen zu Fuß zusammenstellen. Das wird letztendlich einfacher und vor allem wesentlich schneller als das mit den Stringfunktionen.

  5. #15
    Registriert seit
    29.10.2008
    Beiträge
    160
    Danke
    28
    Erhielt 28 Danke für 18 Beiträge

    Standard

    Wieso überhaupt ein STRING? 3 normale EA-Felder und 3 Textfelder sollte reichen. Oder?

  6. #16
    Registriert seit
    20.01.2009
    Beiträge
    190
    Danke
    32
    Erhielt 15 Danke für 14 Beiträge

    Standard

    Zitat Zitat von Qnkel Beitrag anzeigen
    Habe in WinCC flexible 2008 SP3 nichts gefunden, dass ich Millisekunden aus einem DInt direkt in Tage/Stunden/Minuten anzeigen lassen kann.
    Für deine Aufgabe ist SCL oder VB besser geeignet als AWL.
    Da du kein SCL hast, aber flex schon, wäre VB der einfachere Weg.

    Ich weiß nicht, ob dein Code die Stunden/Minuten immer 2stellig mit führenden Nullen ausgibt.
    Wäre in VB kein Problem.
    Oder Tage nur anzeigen, wenn auch Tage vorhanden sind. Gleiches natürlich mit den Stunden.

  7. #17
    Registriert seit
    29.03.2004
    Beiträge
    5.731
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Codevorschlag in AWL, ohne Optimierung:
    Code:
    FUNCTION "TIME_TO_STRING" : STRING [254]
    TITLE =Time to String im Format "00d 00h 00m", nur pos. Zeiten
    VERSION : 0.1
    
    
    VAR_INPUT
      IN : TIME ;	//Zeitwert, nur positive Zeiten erlaubt
    END_VAR
    VAR_TEMP
      wDbNr : WORD ;	
      di_tmp : DINT ;	
      diStellenwert : DINT ;	
      diZeichenwert : DINT ;	
      diTage : DINT ;	
      diStunden : DINT ;	
      diMinuten : DINT ;	
      diSekunden : BYTE ;	
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    
    //////////////////////////////////////////
    // Vorbereitung, Stringadresse in Adressregister laden
          L     P##RET_VAL; 
          LAR1  ; 
          L     W [AR1,P#0.0]; 
          T     #wDbNr; 
          AUF   DB [#wDbNr]; 
          L     D [AR1,P#2.0]; 
          LAR1  ; 
    //////////////////////////////////////////
    // Stringlänge prüfen, Mindestlänge 11 Zeichen
          L     B [AR1,P#0.0]; 
          L     11; 
          <I    ; 
          SPB   FEHL; 
    //
    //////////////////////////////////////////
    // Es sind keine negativen Zeiten zugelassen
          L     #IN; 
          T     #di_tmp; 
          L     0; 
          <D    ; 
          SPB   FEHL; 
    
    //////////////////////////////////////////
    // String Startwert "00d 00h 00m" setzen
          L     11; 
          T     B [AR1,P#1.0]; // Stringlänge setzen
    
          L     '0'; 
          T     B [AR1,P#2.0]; 
          T     B [AR1,P#3.0]; 
          L     'd'; 
          T     B [AR1,P#4.0]; 
          L     ' '; 
          T     B [AR1,P#5.0]; 
          L     '0'; 
          T     B [AR1,P#6.0]; 
          T     B [AR1,P#7.0]; 
          L     'h'; 
          T     B [AR1,P#8.0]; 
          L     ' '; 
          T     B [AR1,P#9.0]; 
          L     '0'; 
          T     B [AR1,P#10.0]; 
          T     B [AR1,P#11.0]; 
          L     'm'; 
          T     B [AR1,P#12.0]; 
    
    //////////////////////////////////////////
    // Einzelwerte erstellen
          L     #di_tmp; 
          L     L#86400000; 
          /D    ; 
          T     #diTage; 
    
          L     #di_tmp; 
          L     L#86400000; 
          MOD   ; 
          T     #di_tmp; 
    
          L     #di_tmp; 
          L     L#3600000; 
          /D    ; 
          T     #diStunden; 
    
          L     #di_tmp; 
          L     L#3600000; 
          MOD   ; 
          T     #di_tmp; 
    
          L     #di_tmp; 
          L     L#60000; 
          /D    ; 
          T     #diMinuten; 
    
          L     #di_tmp; 
          L     L#60000; 
          MOD   ; 
          T     #di_tmp; 
    
          L     #di_tmp; 
          L     L#1000; 
          /D    ; 
          T     #diSekunden; 
    //////////////////////////////////////////
    // In Zeichen konvertieren
    
    // Tage
          L     #diTage; 
          L     L#10; 
          MOD   ; 
          T     #diStellenwert; 
          +     48; // Zeichenwert von '0'
          T     B [AR1,P#3.0]; 
    
          L     #diTage; 
          L     #diStellenwert; 
          -D    ; 
          L     10; 
          /D    ; 
          L     L#10; 
          MOD   ; 
          +     48; // Zeichenwert von '0'
          T     B [AR1,P#2.0]; 
    // Stunden
          L     #diStunden; 
          L     L#10; 
          MOD   ; 
          T     #diStellenwert; 
          +     48; // Zeichenwert von '0'
          T     B [AR1,P#7.0]; 
    
          L     #diStunden; 
          L     #diStellenwert; 
          -D    ; 
          L     10; 
          /D    ; 
          L     L#10; 
          MOD   ; 
          +     48; // Zeichenwert von '0'
          T     B [AR1,P#6.0]; 
    // Minuten
          L     #diMinuten; 
          L     L#10; 
          MOD   ; 
          T     #diStellenwert; 
          +     48; // Zeichenwert von '0'
          T     B [AR1,P#11.0]; 
    
          L     #diMinuten; 
          L     #diStellenwert; 
          -D    ; 
          L     10; 
          /D    ; 
          L     L#10; 
          MOD   ; 
          +     48; // Zeichenwert von '0'
          T     B [AR1,P#10.0]; 
    
          SPA   ENDE; 
    //////////////////////////////////////////
    FEHL: CLR   ; 
          SAVE  ; 
          BE    ; 
    ENDE: SET   ; 
          SAVE  ; 
    END_FUNCTION

  8. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    Qnkel (26.05.2015)

  9. #18
    Qnkel ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.06.2013
    Beiträge
    101
    Danke
    18
    Erhielt 3 Danke für 3 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @Thomas_V2.1: Vielen Dank, genial! Habe es so wie Du umgesetzt und noch etwas angepasst in einen FB. Perfekt!

Ähnliche Themen

  1. Antworten: 8
    Letzter Beitrag: 11.01.2012, 09:36
  2. Wie bau ich mir einen Zufallsgenerator
    Von buddd im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 04.07.2010, 16:52
  3. Antworten: 2
    Letzter Beitrag: 12.12.2008, 19:00
  4. Antworten: 7
    Letzter Beitrag: 13.10.2008, 19:56
  5. Wie programiere ich einen Dimmer mit S7
    Von Rossi im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 02.01.2007, 19:25

Stichworte

Lesezeichen

Berechtigungen

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