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

Ergebnis 1 bis 8 von 8

Thema: DI_STRNG ohne Vorzeichen!

  1. #1
    Registriert seit
    31.03.2009
    Beiträge
    109
    Danke
    33
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    hi

    Suche eine solche Funktion die aber nicht das Vorzeichen mit ausgibt.

    Die normale Funktion führt immer das Vorzeichen mit...

    z.B. 46789(Dint) --->>> +46789(String)

    Kann mir einer weiterhelfen?

    mfg hoT
    Zitieren Zitieren DI_STRNG ohne Vorzeichen!  

  2. #2
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    diese funktion hier macht schon fast was du willst: http://sps-forum.de/showpost.php?p=226633&postcount=20

    nur noch die chars zu einem string zusammensetzen...
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  3. Folgender Benutzer sagt Danke zu vierlagig für den nützlichen Beitrag:

    hoT (11.01.2010)

  4. #3
    hoT ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    31.03.2009
    Beiträge
    109
    Danke
    33
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Gibt es da nicht fertiges, weil ich bei sowas Probleme habe?

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

    Standard

    Hallo,
    doch ... da gibt es noch die Funktion RIGHT - die schneidet dir vom rechten Rand deines Strings die Anzahl von zeichen ab, die du angibst ...

    Gruß
    LL

  6. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    hoT (12.01.2010)

  7. #5
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Code:
    *
    FUNCTION_BLOCK FB 5
    TITLE =
    VERSION : 0.1
    
    
    VAR_INPUT
      dInput : DINT ;	
    END_VAR
    VAR_OUTPUT
      sOutput : STRING  [11 ];	
    END_VAR
    VAR_TEMP
      xMin : BOOL ;	
      xFirstNumber : BOOL ;	
      xMinus : BOOL ;	
      aChar : ARRAY  [0 .. 10 ] OF BYTE ;	
      iLoop : INT ;	
      iMinusPos : INT ;	
      iLength : INT ;	
      dTemp : DINT ;	
      dMOD : DINT ;	
      dCompare : DINT ;	
      dAR1Temp : DWORD ;	
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    //initialisieren
          CLR   ; 
          =     #xMinus; 
          =     #xMin; 
          =     #xFirstNumber; 
          L     1; 
          T     #iMinusPos; 
          +     -1; 
          T     #iLength; 
          TAR1  #dAR1Temp; 
    
          LAR1  P##sOutput; 
          +AR1  P#2.0; 
          L     11; 
    init: T     #iLoop; 
          L     W#16#0; 
          T     B [AR1,P#0.0]; 
          +AR1  P#1.0; 
          L     #iLoop; 
          LOOP  init; 
    
    //sonderfall
          L     #dInput; 
          L     L#-2147483648; 
          ==D   ; 
          SPBN  nmin; 
          =     #xMin; 
          L     #dInput; 
          +     1; 
          SPA   min; 
    
    //input ist minus??
    nmin: L     #dInput; 
          L     L#0; 
          <D    ; 
          L     #dInput; 
          SPBN  nonu; 
    min:  SET   ; 
          =     #xMinus; 
          L     L#-1; 
          *D    ; 
    nonu: T     #dTemp; 
    
    //ja, ist minus - position für - berechnen
          U     #xMinus; 
          SPBN  ohmi; 
          L     10; 
          T     #dCompare; 
          L     10; 
    nex1: T     #iLoop; 
          L     #dTemp; 
          L     #dCompare; 
          <D    ; 
          SPBN  noch; 
          L     #iLoop; 
          T     #iMinusPos; 
          SPA   ohmi; 
    noch: L     #dCompare; 
          L     L#10; 
          *D    ; 
          T     #dCompare; 
          L     #iLoop; 
          LOOP  nex1; 
    
    //ausgabe der einzelnen stellen
    ohmi: LAR1  P##aChar; 
          L     11; 
    next: T     #iLoop; 
          L     #dTemp; 
          L     10; 
          MOD   ; 
          L     W#16#30; 
          +I    ; 
          T     B [AR1,P#0.0]; 
          L     #dTemp; 
          L     10; 
          /D    ; 
          T     #dTemp; 
          +AR1  P#1.0; 
          L     #iLoop; 
          LOOP  next; 
    
    //ausgabe -
          U     #xMinus; 
          SPBN  end; 
          LAR1  P##aChar; 
          L     11; 
    nex2: T     #iLoop; 
          L     #iMinusPos; 
          ==I   ; 
          SPBN  naec; 
          L     W#16#2D; 
          T     B [AR1,P#0.0]; 
          SPA   end; 
    naec: +AR1  P#1.0; 
          L     #iLoop; 
          LOOP  nex2; 
    
    //rauskopieren
    end:  LAR1  P##sOutput; 
          +AR1  P#2.0; 
          L     #aChar[10]; 
          L     W#16#30; 
          ==I   ; 
          UN    #xFirstNumber; 
          SPB   non9; 
          SET   ; 
          =     #xFirstNumber; 
          TAK   ; 
          T     B [AR1,P#0.0]; 
          +AR1  P#1.0; 
          L     #iLength; 
          +     1; 
          T     #iLength; 
    
    non9: L     #aChar[9]; 
          L     W#16#30; 
          ==I   ; 
          UN    #xFirstNumber; 
          SPB   non8; 
          SET   ; 
          =     #xFirstNumber; 
          TAK   ; 
          T     B [AR1,P#0.0]; 
          +AR1  P#1.0; 
          L     #iLength; 
          +     1; 
          T     #iLength; 
    
    non8: L     #aChar[8]; 
          L     W#16#30; 
          ==I   ; 
          UN    #xFirstNumber; 
          SPB   non7; 
          SET   ; 
          =     #xFirstNumber; 
          TAK   ; 
          T     B [AR1,P#0.0]; 
          +AR1  P#1.0; 
          L     #iLength; 
          +     1; 
          T     #iLength; 
    
    non7: L     #aChar[7]; 
          L     W#16#30; 
          ==I   ; 
          UN    #xFirstNumber; 
          SPB   non6; 
          SET   ; 
          =     #xFirstNumber; 
          TAK   ; 
          T     B [AR1,P#0.0]; 
          +AR1  P#1.0; 
          L     #iLength; 
          +     1; 
          T     #iLength; 
    
    non6: L     #aChar[6]; 
          L     W#16#30; 
          ==I   ; 
          UN    #xFirstNumber; 
          SPB   non5; 
          SET   ; 
          =     #xFirstNumber; 
          TAK   ; 
          T     B [AR1,P#0.0]; 
          +AR1  P#1.0; 
          L     #iLength; 
          +     1; 
          T     #iLength; 
    
    non5: L     #aChar[5]; 
          L     W#16#30; 
          ==I   ; 
          UN    #xFirstNumber; 
          SPB   non4; 
          SET   ; 
          =     #xFirstNumber; 
          TAK   ; 
          T     B [AR1,P#0.0]; 
          +AR1  P#1.0; 
          L     #iLength; 
          +     1; 
          T     #iLength; 
    
    non4: L     #aChar[4]; 
          L     W#16#30; 
          ==I   ; 
          UN    #xFirstNumber; 
          SPB   non3; 
          SET   ; 
          =     #xFirstNumber; 
          TAK   ; 
          T     B [AR1,P#0.0]; 
          +AR1  P#1.0; 
          L     #iLength; 
          +     1; 
          T     #iLength; 
    
    non3: L     #aChar[3]; 
          L     W#16#30; 
          ==I   ; 
          UN    #xFirstNumber; 
          SPB   non2; 
          SET   ; 
          =     #xFirstNumber; 
          TAK   ; 
          T     B [AR1,P#0.0]; 
          +AR1  P#1.0; 
          L     #iLength; 
          +     1; 
          T     #iLength; 
    
    non2: L     #aChar[2]; 
          L     W#16#30; 
          ==I   ; 
          UN    #xFirstNumber; 
          SPB   non1; 
          SET   ; 
          =     #xFirstNumber; 
          TAK   ; 
          T     B [AR1,P#0.0]; 
          +AR1  P#1.0; 
          L     #iLength; 
          +     1; 
          T     #iLength; 
    
    non1: L     #aChar[1]; 
          L     W#16#30; 
          ==I   ; 
          UN    #xFirstNumber; 
          SPB   non0; 
          TAK   ; 
          T     B [AR1,P#0.0]; 
          SET   ; 
          =     #xFirstNumber; 
          +AR1  P#1.0; 
          L     #iLength; 
          +     1; 
          T     #iLength; 
    
    non0: U     #xMin; 
          SPBN  nee; 
          L     #aChar[0]; 
          +     1; 
          SPA   doch; 
    nee:  L     #aChar[0]; 
    doch: L     W#16#30; 
          ==I   ; 
          UN    #xFirstNumber; 
          SPB   non; 
          SET   ; 
          =     #xFirstNumber; 
          TAK   ; 
          T     B [AR1,P#0.0]; 
          +AR1  P#1.0; 
          L     #iLength; 
          +     1; 
          T     #iLength; 
    
    
    non:  LAR1  P##sOutput; 
          L     #iLength; 
          T     B [AR1,P#1.0]; 
    
          LAR1  #dAR1Temp; 
    
          SET   ; 
          SAVE  ; 
    
    END_FUNCTION_BLOCK
    ...in SCL wäre das ganze kopieren einfacher zu lösen... aber AWL hat halt auch seinen reiz ^^
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

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

    hoT (12.01.2010)

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

    Standard

    Zitat Zitat von hoT Beitrag anzeigen
    Suche eine solche Funktion die aber nicht das Vorzeichen mit ausgibt.

    Die normale Funktion führt immer das Vorzeichen mit...

    z.B. 46789(Dint) --->>> +46789(String)
    Hier ist ein Programmbeispiel für die Umwandlung einer DINT-Zahl in einen STRING (ohne Vorzeichen):

    Code:
    FUNCTION_BLOCK FB 100
    TITLE =Umwandlung DINT nach STRING (ohne Vorzeichen)
     
    //DINT L#-2147483648 bis L#+2147483647 
    //
    //Maximale Länge STRING (mit Vorzeichen)  = 11 CHAR
    //
    //Maximale Länge STRING (ohne Vorzeichen) = 10 CHAR
    //   
     
    AUTHOR : KAI
    FAMILY : SPSFORUM
    NAME : 'STRING'
    VERSION : 1.0
     
    VAR_INPUT
      IN_DINT : DINT ; 
    END_VAR
    VAR_OUTPUT
      OUT_STRING : STRING  [10 ]; 
    END_VAR
    VAR
      TEMP_STRING : STRING  [11 ]; 
    END_VAR
    VAR_TEMP
      TEMP_LAENGE : INT ; 
    END_VAR
    BEGIN
    NETWORK
    TITLE =Umwandlung DINT nach STRING (mit Vorzeichen)
     
          CALL FC     5 (
               I                        := #IN_DINT,
               RET_VAL                  := #TEMP_STRING);
          NOP   0; 
     
    NETWORK
    TITLE =Aktuelle Länge STRING (mit Vorzeichen)
     
          CALL FC    21 (
               S                        := #TEMP_STRING,
               RET_VAL                  := #TEMP_LAENGE);
          NOP   0; 
     
    NETWORK
    TITLE =Aktuelle Länge STRING (ohne Vorzeichen)
     
          L     #TEMP_LAENGE; 
          L     1; 
          -I    ; 
          T     #TEMP_LAENGE; 
          NOP   0; 
     
    NETWORK
    TITLE =Umwandlung STRING (mit Vorzeichen) nach STRING (ohne Vorzeichen)
     
          CALL FC    32 (
               IN                       := #TEMP_STRING,
               L                        := #TEMP_LAENGE,
               RET_VAL                  := #OUT_STRING);
          NOP   0; 
     
    END_FUNCTION_BLOCK
    Gruß Kai
    Angehängte Dateien Angehängte Dateien

  10. Folgende 2 Benutzer sagen Danke zu Kai für den nützlichen Beitrag:

    hoT (12.01.2010),Sesssko (07.09.2010)

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

    Standard

    Und noch ein paar Bilder aus der Simulation mit PLCSIM.

    Gruß Kai
    Angehängte Grafiken Angehängte Grafiken

  12. Folgender Benutzer sagt Danke zu Kai für den nützlichen Beitrag:

    hoT (12.01.2010)

  13. #8
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @kai: bißchen viel aufwand, find ich ... if input < 0 then input := input * -1 und dann DI_STRNG ...

    [edit] ... das + vergessen ... mist [/edit]
    [edit] an dieser stelle nochmal: DANKE ANDRÉ![/edit]
    Geändert von vierlagig (11.01.2010 um 23:59 Uhr)
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  14. Folgender Benutzer sagt Danke zu vierlagig für den nützlichen Beitrag:

    hoT (12.01.2010)

Ähnliche Themen

  1. Datentyp INT ohne Vorzeichen??
    Von jtm im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 30.12.2010, 12:16
  2. Dint Vorzeichen immer minus einstellen
    Von bludie im Forum Simatic
    Antworten: 24
    Letzter Beitrag: 18.06.2010, 06:02
  3. Antworten: 2
    Letzter Beitrag: 18.01.2006, 16:32
  4. Neg. Vorzeichen in E/A Feld eingeben
    Von knollmeister im Forum HMI
    Antworten: 2
    Letzter Beitrag: 07.11.2005, 13:26
  5. Vorzeichen ignorieren
    Von Lipperlandstern im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 22.02.2005, 23:41

Lesezeichen

Berechtigungen

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