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

Ergebnis 1 bis 7 von 7

Thema: Dezimal in Binär

  1. #1
    Registriert seit
    28.06.2012
    Beiträge
    42
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich möchte eine Dezimalzahl in eine 25 stellige Binärzahl umwandeln. Mein Programm schaut folgendermaßen aus:

    VAR
    index_dez_to_bin : DINT;
    result_devision : DINT;
    rest_devision : DINT;
    complete_b : ARRAY[0..22,0..0] OF STRING;
    example_wert : DINT;
    END_VAR;

    rest_devision :=example_wert MOD 2;
    WHILE rest_devision>0 AND index_dez_to_bin<=25 DO
    IF rest_devision=1 THEN
    complete_b[index_dez_to_bin,0] :='1';
    ELSE
    complete_b[index_dez_to_bin,0] :='0';
    END_IF;
    index_dez_to_bin :=index_dez_to_bin+1;
    result_devision :=result_devision/2;
    rest_devision :=result_devision MOD 2;
    END_WHILE;

    Trotzdem liefert er mir einen abnormalen Wert. Wenn ich in der Variablentabelle den dementsprechenden ARRAY-Wert binär darstelle liefert er mir immer : 2#1111_1110_0000_0001_0011_0001_0000_0000. Die ersten 4 Bits geben nach STEP7-Hilfe das Vorzeichen vor. Aber auch der Rest stimmt ja net, was mache ich falsch? Binär sollte eigentlich: 10000101111 rauskommen. Vielen Dank für eure Hilfe!
    Zitieren Zitieren Dezimal in Binär  

  2. #2
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 920 Danke für 740 Beiträge

    Standard

    Ohne mir jetzt Deinen Code näher angesehen zu haben (mein SCL ist eh' erst am Anfang):

    Dein INT-Wert ist doch sowieso binär gespeichert. Warum verschiebst Du dann nicht einfach(?) die einzelnen Bits in Dein Array?
    So würde ich's jedenfalls unter AWL machen.

  3. #3
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 920 Danke für 740 Beiträge

    Standard

    Zitat Zitat von SCLNewbie Beitrag anzeigen
    ... Die ersten 4 Bits geben nach STEP7-Hilfe das Vorzeichen vor.
    ...
    Seit wann denn 4 Bits? Mir ist nur eins bekannt und wozu auch mehr - positiv oder negativ sind nur zwei Zustände - 0 oder 1 des Bits 31 bei DINT.

  4. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.224
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    "index_dez_to_bin" mußt du vor der While-Schleife auf 0 setzen!
    die zu füllenden Array-Felder von "complete_b" solltest du vorher entweder auch auf Null setzen, oder du solltest dafür sorgen, dass deinen Schleife auch 25 "Runden" dreht und alle Array-Felder korrekt füllt., sonst bricht bei einer kleinen Zahl die While-Schleife ja recht schnell ab und alle Felder danach enthalten dann einen alten/ungültigen Wert.
    Geändert von Ralle (03.12.2012 um 20:16 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

  5. #5
    Registriert seit
    24.10.2007
    Ort
    Niederlande
    Beiträge
    673
    Danke
    22
    Erhielt 143 Danke für 135 Beiträge

    Standard

    Der Array ist so kurts, sie machen 25 schleifen und dass Array ist 23 string lang.

    result_devision :=result_devision/2;
    result_devision must vor der WHILE instuction result_devision := example_wert vorbesets wurde.

    WHILE rest_devision>0 AND index_dez_to_bin<=25 DO Arbeid so auch nicht, While wurde abgebrochen wenn der keine rest ist. WHILE index_dez_to_bin<=25 DO

    Code:
    VAR
     index_dez_to_bin : DINT;
     result_devision : DINT;
     rest_devision : DINT;
     complete_b : ARRAY[0..25] OF STRING[2];  //String von 2 zeichen
     example_wert : DINT;
     END_VAR;
     
    index_dez_to_bin := 0;
    rest_devision :=example_wert MOD 2;
    result_devision:=example_wert;
     WHILE  index_dez_to_bin<=25 DO 
    IF rest_devision=1 THEN 
    complete_b[index_dez_to_bin] :='1';
     ELSE
     complete_b[index_dez_to_bin] :='0';
     END_IF;
     index_dez_to_bin :=index_dez_to_bin+1; 
    result_devision :=result_devision/2; 
    rest_devision :=result_devision MOD 2; 
    END_WHILE;

    Joop
    Geändert von JoopB (03.12.2012 um 20:43 Uhr)

  6. #6
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 920 Danke für 740 Beiträge

    Standard

    Zitat Zitat von SCLNewbie Beitrag anzeigen
    ...
    complete_b : ARRAY[0..22,0..0] OF STRING;
    ...
    0 bis 22 passt doch auch nicht bei 25 Stellen, oder?
    Oder nur verschrieben?

  7. #7
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 920 Danke für 740 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von hucki Beitrag anzeigen
    ...
    Dein INT-Wert ist doch sowieso binär gespeichert. Warum verschiebst Du dann nicht einfach(?) die einzelnen Bits in Dein Array?
    ...
    So würde ich mir das vorstellen:
    Code:
    VAR
        Example_Wert : DINT;
        complete_b : ARRAY[0..24] OF STRING[2] ;
        TmpDWORD : DWORD;
        TmpArray AT TmpDWORD : ARRAY[0..31] OF BOOL ;
        Index : INT;
    END_VAR
    
    
    TmpDWORD := DINT_TO_DWORD( ABS (Example_Wert));
    FOR Index := 0 TO 24 DO
        IF TmpArray[Index] THEN
            complete_b[Index] := '1';
        ELSE
            complete_b[Index] := '0';
        END_IF;
    END_FOR;
    PS: eventuell noch den Absolutwert von Example_Wert vor der Wandlung in DWORD bilden [Edit] -> Eingebunden incl. Weiterbildung
    Geändert von hucki (05.12.2012 um 20:05 Uhr) Grund: Weiterbildung

Ähnliche Themen

  1. Word in Binär wandeln
    Von emsbootsmann im Forum CODESYS und IEC61131
    Antworten: 5
    Letzter Beitrag: 27.06.2011, 10:04
  2. Geitpunktzahl in Dezimal konvertieren
    Von Kalle85 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 12.02.2009, 13:05
  3. dezimal umwandeln in dual
    Von renshy im Forum Simatic
    Antworten: 27
    Letzter Beitrag: 14.03.2007, 13:59
  4. Eingänge Binär einlesen
    Von Jo Feldhase im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 05.02.2006, 17:43
  5. DINT Binär verarbeiten
    Von M-Arens im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 23.09.2005, 08:49

Lesezeichen

Berechtigungen

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