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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 22

Thema: Word (hex) to 4x Char

  1. #1
    Registriert seit
    14.05.2007
    Ort
    M nähe Sbg in AUT
    Beiträge
    159
    Danke
    35
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Abend.

    Ein Kunde will in seinem Datamatrixcode als fortlaufende Nummer (wird am Tagesanfang zurückgesetzt) eine 4 stellige HEX-Zahl stehen haben.

    Das Ganze sieht in etwa so aus....
    xxxxxxxxxxxxxxxxxx2F03 (x steht für den restlichen Dateninhalt)

    Bei jedem Druck eines Labels erhöhe ich dieses Word um B#16#01, also um eins.
    Um das Ganze an meinen Labeldrucker übergeben zu können muss ich den Inhalt nun in Char's umspeichern.

    C#1: '2'
    C#2: 'F'
    C#3: '0'
    C#4: '3'

    Das Ganze sieht in meinem Funktionsbaustein nun so aus:
    Code:
      
          SET   
          L     #Eingabe
          SLW   0
          SRW   12
          L     B#16#30
          +I    
          T     #C1
          L     B#16#3A
          <I    
          SPB   a001
          L     #C1
          L     B#16#7
          +I    
          T     #C1
    a001: SET   
          L     #Eingabe
          SLW   4
          SRW   12
          L     B#16#30
          +I    
          T     #C2
          L     B#16#3A
          <I    
          SPB   a002
          L     #C2
          L     B#16#7
          +I    
          T     #C2
    a002: SET   
          L     #Eingabe
          SLW   8
          SRW   12
          L     B#16#30
          +I    
          T     #C3
          L     B#16#3A
          <I    
          SPB   a003
          L     #C3
          L     B#16#7
          +I    
          T     #C3
    a003: SET   
          L     #Eingabe
          SLW   12
          SRW   12
          L     B#16#30
          +I    
          T     #C4
          L     B#16#3A
          <I    
          SPB   a004
          L     #C4
          L     B#16#7
          +I    
          T     #C4
    a004: SET
    Die einen werden jetzt sagen, warum das hin- und herschieben und nicht ausmaskieren, andere sagen eventuell passt schon.
    Was mir aber nicht ganz gefällt ist der Offset um einen Buchstaben, also A-F in einen Char umzuwandeln, auch wenn's funktioniert.

    Hat jemand ne' andere Idee, denn ich lerne gerne dazu......


    mfg,
    Andy
    >> Gefährlich wird es für Andere erst dann, wenn die Dummen fleißig werden! <<
    Zitieren Zitieren Word (hex) to 4x Char  

  2. #2
    Registriert seit
    24.09.2009
    Beiträge
    70
    Danke
    0
    Erhielt 8 Danke für 8 Beiträge

    Standard

    Nun, nachdem S7-Steuerungen nicht gerade Meister in der Handhabung von Zeichen und Ketten davon sind (und nachdem ich vergeblich mit einigen Umwandlungsoperationen gespielt habe) würde ich folgende einfache Lösung in SCL wählen:

    FUNCTION FC2 : VOID
    VAR_TEMP
    // temporäre Variablen
    tmp_idx :INT;
    END_VAR

    // Ausmaskieren und Zeichen bestimmen
    FOR tmp_idx := 4 TO 1 BY -1 DO
    Test_DB.c[tmp_idx] := Test_DB.Zeichen[WORD_TO_INT(SHR(IN:=Test_DB.Eingabe,N:=4*(tmp_idx-1)) AND W#16#000F)];
    END_FOR;

    END_FUNCTION


    Worin die Variable Test.xxx einem DB entstammen.

    Markus

  3. #3
    Avatar von Andy082
    Andy082 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.05.2007
    Ort
    M nähe Sbg in AUT
    Beiträge
    159
    Danke
    35
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Ich hätte erwähnen sollen, dass ich's in AWL schreiben will.

    Edit:
    Mein SCL-Editor funktioniert nicht, weiß der Teufel warum.
    >> Gefährlich wird es für Andere erst dann, wenn die Dummen fleißig werden! <<

  4. #4
    Registriert seit
    15.06.2008
    Beiträge
    119
    Danke
    19
    Erhielt 24 Danke für 19 Beiträge

    Standard

    Zitat Zitat von Andy082 Beitrag anzeigen
    Edit:
    Mein SCL-Editor funktioniert nicht, weiß der Teufel warum.
    Man hat mich gerufen?

  5. #5
    Avatar von Andy082
    Andy082 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.05.2007
    Ort
    M nähe Sbg in AUT
    Beiträge
    159
    Danke
    35
    Erhielt 1 Danke für 1 Beitrag

    Standard

    lol....

    Was war das Schlüsselwort....?
    SCL-Editor oder Teufel.....


    Lt. Info ist der SCL-Editor mit meiner Prof.Edition meines 5.4 mitinstalliert.
    Auch die benötigte License is drauf und aktiv, aber ich hab nicht die Möglichkeit eine SCL-Quelle zu erstellen.
    >> Gefährlich wird es für Andere erst dann, wenn die Dummen fleißig werden! <<

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

    Standard

    Ich kann mich noch daran erinnern: http://www.sps-forum.de/showthread.p...ht=Sprungliste

    Ist so ähnlich, ich habs damals mit Sprungleiste gemacht.
    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

  7. #7
    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

    ich würde es mit hilfe einer linearen funktion machen

    y = m*x + n ... ihr erinnert euch?

    einzig der böse sprung um die 40h stört, aber den kann man ja interpolieren

    also, wir nehmen an, die hexwerte 30-39 und 41-46 seien dezimal
    damit bestimmen wir eine lineare funktion

    x1 = 0
    x2 = 15
    y1 = 30
    y2 = 46

    -> m = 16/15; n = 30;

    daraus folgt folgende wertetabelle:

    Code:
    X	Y
    0	30
    1	31,06666667
    2	32,13333333
    3	33,2
    4	34,26666667
    5	35,33333333
    6	36,4
    7	37,46666667
    8	38,53333333
    9	39,6
    10	40,66666667
    11	41,73333333
    12	42,8
    13	43,86666667
    14	44,93333333
    15	46
    39,6 gerundet wäre 40 ... also müssen wir an der stelle "interpolieren" aber so, dass y(10) gerundet 41 ergibt ... also -0,11 sollte genügen

    also ist die resultierende funktion y ≈ 16/15 * x + 29,89

    ich hab das mit dem schieben mal so gelassen und die ganze funktionalität in eine schleife gepackt:

    Code:
    *
    FUNCTION "word_to_char" : VOID
    TITLE =
    //this function realize the word_to_char exchange
    //
    //DATE:     06.11.2009
    //AUTHOR:   4lagig
    //VERSION:  V0.1 BasicVer
    VERSION : 0.1
    
    
    VAR_INPUT
      wIn : WORD ;	
    END_VAR
    VAR_OUTPUT
      C1 : CHAR ;	
      C2 : CHAR ;	
      C3 : CHAR ;	
      C4 : CHAR ;	
    END_VAR
    VAR_TEMP
      iLoopCounter : INT ;	
      aChar : ARRAY  [0 .. 3 ] OF BYTE ;	
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    
          LAR1  P##aChar;            //start für zwischenspeicher
    
          L     4;                   //schleife initialisieren
    next: T     #iLoopCounter; 
          L     -4;                  //links schieben
          *I    ;                    //errechnen
          +     16;                  //mit y=-4*x+16
          L     #wIn; 
          SLW   ; 
          SRW   12;                  //nibble maskieren
          DTR   ;                    //in real wandeln
          L     1.066667e+000;       //----------------------
          *R    ;                    //      16
          L     2.989000e+001;       // y = ---- * x + 29,89
          +R    ;                    //      15
          RND   ;                    //----------------------
          ITB   ;                    //gerundet als BCD
          T     B [AR1,P#0.0];       //in Byte speichern
    
          +AR1  P#1.0;               //pointer erhöhen
          L     #iLoopCounter; 
          LOOP  next;                //NEXT
    
    //nach außen kopieren
          L     #aChar[0]; 
          T     #C1; 
          L     #aChar[1]; 
          T     #C2; 
          L     #aChar[2]; 
          T     #C3; 
          L     #aChar[3]; 
          T     #C4; 
         
          SET;
          SAVE;
    
    END_FUNCTION
    wenn du das ganze in einen FB packst, kannste dir die TempChars auch noch sparen ...
    Angehängte Grafiken Angehängte Grafiken
    Geändert von vierlagig (06.11.2009 um 04:51 Uhr) Grund: screenshot, codeanpassung - jetzt noch kürzer ^^
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  8. Folgende 2 Benutzer sagen Danke zu vierlagig für den nützlichen Beitrag:

    Andy082 (06.11.2009),hovonlo (06.11.2009)

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

    Standard

    Ich kann einfach nur meinen Hut ziehen vor dieser doch sehr "anderen" Lösung der alten Hex->Asc Wandlungsaufgbe.

    Klasse 4L!

  10. Folgender Benutzer sagt Danke zu hovonlo für den nützlichen Beitrag:

    argv_user (06.11.2009)

  11. #9
    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

    Zitat Zitat von hovonlo Beitrag anzeigen
    Ich kann einfach nur meinen Hut ziehen vor dieser doch sehr "anderen" Lösung der alten Hex->Asc Wandlungsaufgbe.

    Klasse 4L!
    danke, nachtschicht machts möglich ...
    ich hab mir die blöde ASCII-table angeguckt und so über das blöde @ geflucht ... das hätte ja wohl auch woanders platz gehabt
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  12. #10
    Registriert seit
    24.09.2009
    Beiträge
    70
    Danke
    0
    Erhielt 8 Danke für 8 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Mein SCL-Editor funktioniert nicht, weiß der Teufel warum.
    Must Du unbedingt ändern...

    Markus

Ähnliche Themen

  1. WinCC 6 und S7 Char
    Von S7_Mich im Forum HMI
    Antworten: 5
    Letzter Beitrag: 20.10.2010, 22:49
  2. Datenformat Char
    Von CanYouHelpMe im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 15.09.2008, 09:23
  3. mehrstellige INT in CHAR u. in DB schreiben
    Von Anonymous im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 28.02.2008, 17:22
  4. Vergleich auf Char
    Von lord.paddington im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 01.05.2006, 17:30
  5. Uhrzeit und Datum als CHAR
    Von MFe im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 07.07.2004, 20:01

Lesezeichen

Berechtigungen

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