TIA IO-Link - Eingang muss normiert werden?

DerSchlangen

Level-1
Beiträge
106
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen!

Ich tüftle hier in meinem Selbststudium wieder einmal an meinem IO-Link Testaufbau herum:

CPU315 -> IFM AL1000 -> IFM SBY232

Die "device description" habe ich unten mal verlinkt damit wir den gleichen Ausgangspunkt haben. In meine Frage möchte ich Beispielsweise auf die Temperatur eingehen.


Wie auf Seite zwei der "device description" zu sehen hat die Temperatur 14bit. Mein vorgehen war daher um die beiden Schaltausgänge "weg" zu bekommen das ganze Wort zwei nach rechts zu schiften. Ist das richtig?
Nun Verteilt sich mein Messbereich (-10 - 122°C) auf einen dezimalen Bereich von 16383. So wie ich mir das denke müsste ich jetzt mit dem SCALE Baustein meine 16383 auf -10 - 122°C skalieren, ist das richtig? Mich irritieren hier die Angaben in der Tabelle in der Spalte "Wertebereich". Oder ist das nur noch einmal ein Ort wo der "Messbereich" aufgeschrieben wurde?

Ich würde mich über Tipps von IO-Link Champs freuen.

Lieben Gruss,
Marcel










https://www.ifm.com/download/files/...11-de/$file/ifm-SBY232-20151104-IODD11-de.pdf
 
Prinzipiell denkst du falsch ... richtig ist, die Zahl versteckt sich in Bit2-15 des ersten Prozessdatenwortes, nicht richtig ist, dass es sich hier um 14Bit Auflösung handelt.
Hier steht einfach die Zahl von -33 ... 123 drin.
In Bit 16-31 dann entsprechend der Durchflusswert von 0 ... 1805

Bei dir ist hier jetzt dann nur eine kleinere Schwierigkeit, nämlich die negative Zahl, hier wirst du dann vermutlich Bit 14..2 -> 12..0 schieben müssen, damit Bit15 das Integer Vorzeichenbit bleibt.

Ich hoffe jetzt mal, dass das ganze einigermaßen verständlich ausgedrückt ist.

Mfg
Manuel
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ähm nur so halb, trotzdem erstmal Danke :)

Also verstehe ich es richtig das obwohl das Datenwort mehr "kann" da nur Ganzzahlen drinne stehen von -33 bis +123?
Und dementsprechend das höherwertige Bit welches das Vorzeichen angibt von mir verschoben wurde von vormals Position 16 auf Position 14?

Gesendet von meinem SM-G935F mit Tapatalk
 
Ja und Ja ... ;) vollkommen richtig. (nur würde ich 15 -> 13 schreiben, da 0 ja auch ein Bit ist)
 
Ja und Ja ... ;) vollkommen richtig. (nur würde ich 15 -> 13 schreiben, da 0 ja auch ein Bit ist)
Das macht alles so viel einfacher und auch alles so viel schwieriger...
Also brauche ich quasi keine Normierung höchstens das Anpassen durch einen Teiler um zum Beispiel aus dem Durchfluss anstatt 1500 15,00 zu machen?

Dann bleibt nur das Temperatur mit dem Bit schieben: habe leider gar keine Idee wie ich das Vorzeichenbit irgendwie nach vorne retten soll. [emoji848]

Gesendet von meinem SM-G935F mit Tapatalk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Normalerweise sollte es möglich sein, indem du die Bits wieder um x Stellen nach links schiebst, bis das Vorzeichenbit an der richtigen Stelle ist, und dann den Wert durch 2^x teilst.
Da ja mit jedem Schieben nach links die Wertigkeit verdoppelt wird, würde so das Vorzeichenbit erhalten bleiben, aber deine Wertigkeit wäre wieder die Richtige.
 
Hallo DiSC1981 oder jemand der sich berufen fuehlt ;-)
Ich wuerde dich gerne bitten mir was das angeht nochmal zu helfen:
Wenn ich den geschobenen Wert durch 2^x teile hab ich irgendwie das Problem das auch mein "+/-" Bit sich veraendert. Mache ich da was falsch oder muss ich da was den Datentyp angeht was beachten?
Waere lieb wenn du evtl. mal einen Bildschirmausschnitt posten koenntest, ich bin da gerade irgendwie nicht in der Lage das hinzubekommen - gut aber dafuer lern ich das ja alles auch noch :-)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja Ja diese BIT Denken :-/ Gerade im Moment nicht meine Stärke - aber wir arbeiten daran!

So ich hab jetzt die ganze Kiste mal aufgebaut neben mir stehen:
Das IW6 welches bei mir jetzt die Temperatur (+die zwei Schaltzustände darstellt) geht auf einen DIV Baustein (eingestellt auf Integer, sind ja laut Datenblatt nur Ganzzahlen zu erwarten) und wird durch den Wert "4" dividiert.
Am Eingang des Bausteins habe ich gerade 112 anstehen am Ausgang 28. Also eine saubere Division xD
Leider passt das Ding nicht in unseren Kalibrierofen so das ich Minuswerte mal testen könnte auch hab ich keine Ahnung ob 28°C hier passen und - ganz ehrlich - verstanden hab ich es gerade auch noch nicht.
Laut dem Datenblatt und dem was ich hier gelernt habe kann in meinem IW Zahlen von -33 bis 123 stehen. Das "-" sagt mir ja das ein Bit (Das höchstwertige also Bit 15(?) für das Vorzeichen zuständig ist. Ändere ich das nicht bei einem geteilt durch 4? Ich komm mit den Datentypen gerade echt durcheinander.

Also ich will nicht Kapitulieren aber ich glaube ich mache da einen Grundlegenden Anfängerfehler und kann ihn nicht einordnen/verstehen.
 
Am Eingang des Bausteins habe ich gerade 112 anstehen am Ausgang 28. Also eine saubere Division xD
Leider passt das Ding nicht in unseren Kalibrierofen so das ich Minuswerte mal testen könnte auch hab ich keine Ahnung ob 28°C hier passen und - ganz ehrlich - verstanden hab ich es gerade auch noch nicht.
[...]
Das "-" sagt mir ja das ein Bit (Das höchstwertige also Bit 15(?) für das Vorzeichen zuständig ist. Ändere ich das nicht bei einem geteilt durch 4?
Der DIV-Baustein dividiert immer vorzeichenrichtig:
* +112 DIV 4 ergibt +28
* -112 DIV 4 ergibt -28

Um Deinen Programmcode mit negativen Zahlen zu testen könntest Du das IW6 vor dem DIV mit -1 multiplizieren. Du könntest auch anstatt IW6 irgendeine unbenutzte Int-Variable an den Eingang des DIV-Bausteins schalten und den Wert dieser Variable mit einer Variablentabelle steuern. Du könntest auch PLCSIM nutzen.


Beim Datentyp Integer gibt es genau genommen nicht "das eine Vorzeichenbit". Negative Zahlen werden als Zweierkomplement gespeichert. Das siehst Du z.B. wenn Du Dir das Bitmuster der Werte +1 und -1 ansiehst:
* +1 = 2#0000000000000001
* -1 = 2#1111111111111111

Um aus +1 eine -1 zu machen, reicht es nicht, einfach nur das Vorzeichenbit (Bit15) zu setzen (umzudrehen) ---> es muß mit -1 multipliziert werden oder das Zweierkomplement erzeugt werden (Anweisung "NEG": alle Bits werden umgedreht und danach wird noch 1 addiert)

Harald
 
Danke für die gute Erklärung.

Ich will das mal auf meine IO-Link Sache anwenden:
Vom Sensor bekomme ich bereits die Werte "richtig" übertragen. Ich sage also Quasi nur in meiner PLC-Variablen Tabelle das IW6 (Hier das Word für die Temperatur + die zwei Bits die ich weg haben will) ein Word ist, dividiere durch 4 und lege beispielsweise in einem MW ab das ich als INT angelegt habe und schon erkennt er auch die negativen Zahlen automatisch?
Ich kann hier zuhause leider nicht PCLSIM verwenden, das funktioniert hier nicht, der öffnet die zwar aber dann ist das TIA Portal die ganze Zeit mit der Windows-Eieruhr am Mauszeiger am stehen.

Habe jetzt mal ein original IFM Beispiel von der Homepage heruntergeladen. Leider ist der Wertbereich (Siehe Screenshot) nicht von Negativ bis ins Positive so das mein Gedankenknoten da gelöst werden kann aber immerhin mache ich es ja jetzt mit den anderen Werten schon richtig!

Denke aber irgendwann bald könnte der Groschen fallen :)
Danke allen für den Weg bis hierhin.
 

Anhänge

  • 2.JPG
    2.JPG
    89,5 KB · Aufrufe: 26
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

also ich habe auch das Problem mit der negativen Temperatur. Bei der positiven Temp. klappt das wunderbar mit dem Bitshiften oder auch die Division durch 4. Bei einem IW von 0 zeigt mir der Sensor sowie SPS auch 0°C an, passt also schon mal.

Nur bei einer Negativen Temp. Zeigt mir die SPS eine wert von 65xxx an. Das IW ist aber auch negativ.

Hat wer da eine Lösung? oder einen Tipp?

Gruß
Sebastian
 
Zurück
Oben