# Byte to Real



## uwemiess (8 Juli 2008)

Hallo zusammen.
ich  möchte ein Byte in Real wandeln. Gibt es einen Standarbaustein der es ermöglicht den Byte Wert(auch negativ) in Typ Real zu wandeln?
Gruß Uwe


----------



## Rainer Hönle (8 Juli 2008)

Bti
Itd
Dtr


----------



## uwemiess (8 Juli 2008)

Hallo Rainer,
so einfach funktioniert es leider nicht(ist keine BCD zahl gibt wandlungsfehler).
Mfg Uwe


----------



## sps-concept (8 Juli 2008)

*Byte*

Hallo Uwe,

ich hatte mir da mal nen Baustein gebaut signed Byte -> INT

SBYT_INT (nicht frei!)

Dann kann man weitermachen mit ITD und DTR

André


----------



## csharpxx (8 Juli 2008)

Rainer Hönle schrieb:


> Bti


 

wandelt ein BCD (Word) in eine Ganzzahl 

Probier mal

L MBx
T MDxy
DTR
TMDxy

MFG


----------



## sps-concept (8 Juli 2008)

*Byte*

der von mir erwähnte Baustein wandelt Bytewerte im Format signed Byte. Dieses Format verwendet zb auch WinCC.



> L MBx
> T MDxy
> DTR
> TMDxy



Ist der Bytewert vorzeichenbehaftet wird sowas nicht funktionieren weil die höheren Bytes mit Nullen gefüllt werden.

André


----------



## Rainer Hönle (8 Juli 2008)

Sorry, war auf falschem Dampfer. Aber jetzt ein neuer dreizeiliger Versuch:

SLD 24 // Bit 7 nach Bit 31 bringen (Vorzeichen)
SSD 24 // Vorzeichenerweiterung in Bit 31 bis Bit 7
DTR  // Nach Real wandeln


----------



## HeizDuese (8 Juli 2008)

oder einfach:

```
L [I]MBx[/I]    // im Akku, der immer 16 Bit 
           //hat werden die führenden Nullen 
           //bei diesem Befehl immer gelöscht
ITD      // Int -> Doppel
DTR     // Doppel -> Real
```


Aber dürfte sich auch nicht um signed byte scheren


----------



## Rainer Hönle (8 Juli 2008)

HeizDuese schrieb:


> oder einfach:
> 
> ```
> L [I]MBx[/I]    // im Akku, der immer 16 Bit
> ...


Ich denke, die Akkus haben 32 Bit. Aber die restlichen 24 Bits werden genullt.


----------



## uwemiess (8 Juli 2008)

Hallo zusammen.
danke für Eure mühe.
Ich habe das Problem sogelöst:
   L     #IN_BYTE
      T     LB     0
      U     #BIT_7
      SPB   NEG

// positiv
      L     #IN_BYTE
      L     2#1111111                   // 7Bit wert Vorzeichen ausblenden
      UW    
      T     #OUT_INT
      SPA   OVER

// negativ
NEG:  L     W#16#FF00
      L     #IN_BYTE
      OW    
      T     #OUT_INT

OVER: NOP   0
      L     #OUT_INT
      ITD   
      DTR   
      T     MD   410
Gruß Uwe


----------



## csharpxx (8 Juli 2008)

uwemiess schrieb:


> Hallo zusammen.
> danke für Eure mühe.
> Ich habe das Problem sogelöst:
> L #IN_BYTE
> ...


 

So wird es nicht funzen


----------



## uwemiess (8 Juli 2008)

warum nicht?
habe es getest bei mir gehts.
gruß uwe


----------



## Rainer Hönle (8 Juli 2008)

Soweit ich das sehe, sollte es schon gehen. Zwar sind einige Zeilen drin, die nicht sein müssten, aber es funktioniert. Kürzer, aber eventuell schwerer verständlich, ist dies:

L #IN_BYTE
T LB 0
UN #BIT_7
SPB OVER
OD DW#16#FFFFFF00 // ITD wird implizit erledigt
OVER: DTR 
T MD 410


----------



## HeizDuese (8 Juli 2008)

Rainer Hönle schrieb:


> Ich denke, die Akkus haben 32 Bit. Aber die restlichen 24 Bits werden genullt.



  Sorry, das ist korrekt - 32 Bit stimmt natürlich - Danke für die Info!


----------



## csharpxx (8 Juli 2008)

Rainer Hönle schrieb:


> Soweit ich das sehe, sollte es schon gehen. Zwar sind einige Zeilen drin, die nicht sein müssten, aber es funktioniert. Kürzer, aber eventuell schwerer verständlich, ist dies:
> 
> L #IN_BYTE
> T LB 0
> ...


 


ich kann leider kein BIT_7 eingeben
Ich bekomme einen Fehler (Rot)


----------



## Thomas_v2.1 (8 Juli 2008)

csharpxx schrieb:


> ich kann leider kein BIT_7 eingeben
> Ich bekomme einen Fehler (Rot)



Du musst dir in deinem temporären Variablenbereich die einzelnen Bits von 0-7 symbolisch anlegen.

```
VAR_TEMP
  BIT_0 : BOOL ;    
  BIT_1 : BOOL ;    
  BIT_2 : BOOL ;    
  BIT_3 : BOOL ;    
  BIT_4 : BOOL ;    
  BIT_5 : BOOL ;    
  BIT_6 : BOOL ;    
  BIT_7 : BOOL ;    
END_VAR
```
Wichtig ist dabei dass die Variablen direkt am Anfang des Temp-Bereiches liegen wenn du vorher im Code das Eingangsbyte an LB0 geschrieben hast.
Alternativ könntest du auch 
U L 0.7
schreiben.


----------



## Ralle (8 Juli 2008)

sps-concept schrieb:


> Hallo Uwe,
> 
> ich hatte mir da mal nen Baustein gebaut signed Byte -> INT
> 
> ...



*ROFL* Prima Hilfe, Danke auch!

@Thomas_v2.1

Jo, so kann man das machen, mit den Lokaldaten, aber das kann sich leicht verschieben. Hab meine Bausteine daher umgeschrieben und lade die Adresse von #BIT_0, Schreibe dann das Byte über die Adresse. Damit kann man später auch mal etwas in die Lokaldaten einschieben, ohne, daß man die Adressen berichtigen muß.


```
L     P##BIT_0
LAR1  
L     #In_Byte
T     LB [AR1,P#0.0]
```

Nun kannst du ganz normal wie gehabt mit 

L #BIT_7 dein Bit abfragen.

PS: Ist für den Fall nicht zwingend nötig, nur zur Anregung.


----------



## vierlagig (8 Juli 2008)

einer- oder zweierkomplement? ich meine, das macht schon einen unterschied!
darüber hinaus: LB 0 und L 0.7 bringt mich zum brechen ... warum nicht UW benutzen und die funktion sauber programmieren?

[edit] ralle war schneller und der pointer macht natürlich auch sinn! [/edit]


----------



## Thomas_v2.1 (8 Juli 2008)

Ralle schrieb:


> Jo, so kann man das machen, mit den Lokaldaten, aber das kann sich leicht verschieben. Hab meine Bausteine daher umgeschrieben und lade die Adresse von #BIT_0, Schreibe dann das Byte über die Adresse. Damit kann man später auch mal etwas in die Lokaldaten einschieben, ohne, daß man die Adressen berichtigen muß.



Danke für die Idee mit dem Zeiger! Bei meinen FU-Bausteinen kopiere ich sonst auch die PEWs in Strukturen der Lokaldaten, um dann auf die Bits einfach zugreifen zu können. Ich habe zwar am Bausteinanfang sowas kommentiert, aber mit der Gültigkeit von Kommentaren ist das ja immer so eine Sache.



vierlagig schrieb:


> darüber hinaus: LB 0 und L 0.7 bringt mich zum brechen ... warum nicht UW benutzen und die funktion sauber programmieren?



Bei einem Baustein wie diesem mit ca. 10 Codezeilen halte ich es durchaus für legitim auch direkt mit den Lokaldaten zu programmieren. 
Aber die Idee kam auch nicht von mir ;-)


----------



## vierlagig (8 Juli 2008)

Thomas_v2.1 schrieb:


> Bei einem Baustein wie diesem mit ca. 10 Codezeilen halte ich es durchaus für legitim auch direkt mit den Lokaldaten zu programmieren.
> Aber die Idee kam auch nicht von mir ;-)



legitim ist, was funktioniert - LEIDER! sauber ist, was andere nachvollziehen können ohne die genaue speicherbelegung des bausteins zu kennen! ... UND: mit zehn zeilen code kann ich aus OSB EPA-brot machen


----------



## Thomas_v2.1 (8 Juli 2008)

vierlagig schrieb:


> UND: mit zehn zeilen code kann ich aus OSB EPA-brot machen



Dann aber bitte mit lecker Schmiermerkern


----------



## vierlagig (9 Juli 2008)

um das problem noch mal aufzuarbeiten, ich würd es beim zweierkomplement so machen:


```
*
      L     #bInput                     //byte im zweierkomplement
      UW    W#16#80                     //auf negative Zahl prüfen
      L     128                         //1000 0000
      ==I   
      L     #bInput
      SPBN  pos                         //wenn nicht negativ einfach wandeln
      +     -1                          //negativ: zweierkomplemtent ...
      XOW   W#16#FF                     //auflösen und positive zahl ermitteln
      L     -1                          //mit -1
      *I                                //multiplizieren

//fertig ist die negative INT aus negativem BYTE

pos:  ITD                               //normal weiter
      DTR                               //wandeln
      T     #rOutput                    //und fertig
```


----------



## Ralle (9 Juli 2008)

vierlagig schrieb:


> um das problem noch mal aufzuarbeiten, ich würd es beim zweierkomplement so machen:
> 
> 
> ```
> ...



Maskieren und Vergleichen ist in diesem Falle sicher der elegantere Weg, um das Vorzeichen zu prüfen. Aber 4L L 128 sieht nicht schön aus , vom rein ästhetischen Standpunkt betrachtet!


----------



## vierlagig (9 Juli 2008)

Ralle schrieb:


> Aber 4L L 128 sieht nicht schön aus , vom rein ästhetischen Standpunkt betrachtet!


das nennt man know-how-protect, da brauch ich keine links zu pdfs posten, die sowieso sinnlos leer daher kommen ... aber wenn du daraus einen baustein machen willst, der auch noch schön aussieht kannst du natürlich auch L W#16#80 nehmen


----------



## Ralle (9 Juli 2008)

@4L

PDF???

Dann so:


```
L     W#16#80
L     #bInput
UW    
==I   
L     #bInput
SPBN  pos
```


----------



## vierlagig (9 Juli 2008)

Ralle schrieb:


> @4L
> 
> PDF???



der link von sc?! 



Ralle schrieb:


> Dann so:
> 
> 
> ```
> ...



das pferd von hinten aufgezäumt, ja, nicht schlecht!

wobei mir im zuge der schnellen bearbeitung


```
*
      L     #bInput
      L     W#16#80
      >I
      L     #bInput
      SPBN  pos
```
fast noch besser gefällt

[edit] aber warum auf halben weg stehen bleiben?


```
*
      L     W#16#80
      L     #bInput
      <I    
      SPBN  pos
```
ist wohl die schnellste variante [/edit]

[edit2]

endlich ist es ein 10-zeiler:


```
*
      L     W#16#80
      L     #bInput
      <I    
      SPBN  pos
      +     -1
      XOW   W#16#FF
      NEGI  
pos:  ITD   
      DTR   
      T     #rOutput
```
 [/edit2]

[edit3] sorry, meine natürlich ein 9-zeiler:


```
*
      L     B#16#80
      L     #bInput
      <I    
      SPBN  pos
      +     -1
      XOW   W#16#FF
      NEGD  
pos:  DTR   
      T     #rOutput
```
[/edit3]

[edit4] öhm ... 7-zeiler:


```
*
      L     B#16#80
      L     #bInput
      <I    
      SPBN  pos
      OD    DW#16#FFFFFF00
pos:  DTR   
      T     #rOutput
```
[/edit4]


----------



## Ralle (9 Juli 2008)

@4L

Ich wußte doch, daß ich dich auch noch zum Gerhirnjogging bringen kann !


----------



## vierlagig (9 Juli 2008)

@sps-concept: welches geheimnis läßt du dir da bezahlen?


----------



## Rainer Hönle (9 Juli 2008)

@4L: Aber immer noch über 100 % mehr als mein 3-Zeiler :!:


----------



## sps-concept (9 Juli 2008)

*Sbyt_int*



vierlagig schrieb:


> @sps-concept: welches geheimnis läßt du dir da bezahlen?



@vierlagig:

Wer sagt dass ich mirs bezahlen lasse? Da steht nur dass es nicht frei ist - downloadbar ist der Baustein. Ausserdem haste dir schon mal angesehen wie alt der Baustein ist? 14.03.2003 - das ist ne Weile her. Und wenn man bedenkt dass hier halbe Völkerstämme schon über 24 Stunden darüber diskutieren...

André


----------



## vierlagig (9 Juli 2008)

Rainer Hönle schrieb:


> @4L: Aber immer noch über 100 % mehr als mein 3-Zeiler :!:



jetz hab ich erst gesehen, dass die OD-lösung schon erwähnt wurde ... sorry .. allerdings, wie bereits erwähnt, ist die LB 0 - variante nicht zu empfehlen - meine meinung!

[edit]und jetzt hab ich auch den angeblichen dreizeiler gefunden ... mit L und T sind das dann aber 5  [/edit]

@sc: ralle und ich bilden also schon einen völkerstamm? krass das! UND: wie kann ich den denn runterladen? steh grad aufm schlauch - benötige wahrscheinlich eine anleitung!


----------



## vierlagig (9 Juli 2008)

Rainer Hönle schrieb:


> @4L: Aber immer noch über 100 % mehr als mein 3-Zeiler :!:



aber schneller *ROFL*


```
*
//                              Ausführungszeiten 315-2
      L     B#16#80                     // 0,6
      L     #bInput                     // 0,6
      <I                                // 1,5
      SPBN  pos                         // 1,6
      OD    DW#16#FFFFFF00              // 2,3
pos:  DTR                               //15
      T     #rOutput                    // 0,5
//                                    ----------
//                                        22,1µs
//                                      ========


      L     #bInput                     // 0,6
      SLD   24                          // 3,1
      SSD   24                          // 3,2
      DTR                               //15
      T     #rOutput                    // 0,5
//                                    ----------
//                                        22,4µs
//                                      ========
```


----------



## Rainer Hönle (9 Juli 2008)

Immer? Wo ist die Berücksichtigung ob Sprung erfolgte oder nicht? Das ist doch sicher schöngerechnet ;-) ;-)


----------



## vierlagig (9 Juli 2008)

Rainer Hönle schrieb:


> Das ist doch sicher schöngerechnet ;-) ;-)


ja, zu deinen gunsten


----------



## hovonlo (9 Juli 2008)

@4l:
Wer hat denn eigentlich angegeben, dass das ganze auf einer 315-2 läuft?
Sieht doch auf einer 319 sicher ganz anders aus, oder?


----------



## Ralle (9 Juli 2008)

hovonlo schrieb:


> @4l:
> Wer hat denn eigentlich angegeben, dass das ganze auf einer 315-2 läuft?
> Sieht doch auf einer 319 sicher ganz anders aus, oder?



Aber auf einer 319 ist diese Betrachtung ohnehin nicht so sehr sinnvoll !


----------



## Ralle (9 Juli 2008)

sps-concept schrieb:


> @vierlagig:
> 
> Wer sagt dass ich mirs bezahlen lasse? Da steht nur dass es nicht frei ist - downloadbar ist der Baustein. Ausserdem haste dir schon mal angesehen wie alt der Baustein ist? 14.03.2003 - das ist ne Weile her. Und wenn man bedenkt dass hier halbe Völkerstämme schon über 24 Stunden darüber diskutieren...
> 
> André



Ne, wir machen nur gleich noch ne Optimierungsvariante fertig, weil wir gerade Langeweile haben und uns das gefällt. Außerdem liebe ich "schicken" Code . Wenn wir fertig sind, werden wir diese heiße Software in einen FC packen, Know_How-Protect reinhauen und hier zum Download anbieten. Natürlich kostenlos, aber unser Wissen ist damit vor Nachahmern geschützt. *ROFL*


----------



## vierlagig (9 Juli 2008)

hovonlo schrieb:


> @4l:
> Wer hat denn eigentlich angegeben, dass das ganze auf einer 315-2 läuft?



war ein beispiel mit einer gängigen steuerung, auf maxis 419-2 sieht es wahrscheinlich noch ganz anders aus 



hovonlo schrieb:


> Sieht doch auf einer 319 sicher ganz anders aus, oder?



anders, ja:


```
*
//                              Ausführungszeiten 319
      L     B#16#80                     // 0,01
      L     #bInput                     // 0,02
      <I                                // 0,03
      SPBN  pos                         // 0,03
      OD    DW#16#FFFFFF00              // 0,02
pos:  DTR                               // 0,02
      T     #rOutput                    // 0,02
//                                    ----------
//                                         0,15µs
//                                       ========


      L     #bInput                     // 0,02
      SLD   24                          // 0,03
      SSD   24                          // 0,03
      DTR                               // 0,02
      T     #rOutput                    // 0,02
//                                    ----------
//                                         0,12µs
//                                       ========
```


----------



## vierlagig (9 Juli 2008)

Ralle schrieb:


> Wenn wir fertig sind, werden wir diese heiße Software in einen FC packen, Know_How-Protect reinhauen und hier zum Download anbieten. Natürlich kostenlos, aber unser Wissen ist damit vor Nachahmern geschützt.



und: unser download wird funktionieren!


----------



## OHGN (9 Juli 2008)

vierlagig schrieb:


> und: unser download wird funktionieren!


Der Download funktioniert schon, Du wirst Dich im Forum dort allerdings registrieren müssen.


----------



## vierlagig (9 Juli 2008)

OHGN schrieb:


> Der Download funktioniert schon, Du wirst Dich im Forum dort allerdings registrieren müssen.



das ist leider unerwünscht, kann eben nicht jeder :TOOL:


----------

