TIA 32Bit IO-Link Input Auslesen(Integer30 und 2Bit)

D_H

Level-2
Beiträge
59
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

Ich zerbreche mir gerade den Kopf darüber, wie ich einen I/O-Link Sensor von E+H Sauber auswerten kann.

Es handelt sich um einen PTC31B.
Mein IO-Link Master ist der AL1900 von IFM.
Als CPU Habe ich eine S7-315 und TIA V15.1.

Laut Dokumentation Überträgt dieser zyklisch 32Bit.
Bit 30 und 31 Sind 2 Binäre schaltsignale.
Auf Bit 0 bis 29 wird der Rohmessert als Integer30 übertragen.

Standarmäßig kann ich ja nur Byteweise lesen.

Meine Frage wäre jetzt, wie ich den Rohmesswert in der SPS lesen und verarbeiten kann?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Am besten ein DWORD auf der Adresse anlegen und in der Beobachtungstabelle schaun welche Bits die Schaltpunkte sind, und dann mit SHL oder SHR die Bits ausblenden.
 
Am besten ein DWORD auf der Adresse anlegen und in der Beobachtungstabelle schaun welche Bits die Schaltpunkte sind, und dann mit SHL oder SHR die Bits ausblenden.
Harald hat unterstellt, dass der TE schon die richtigen Bits genannt hat.
Und schlägt deshalb vor, zuerst die Bits um 2 Positionen nach links zu verschieben. ABER er schiebt sie dann bewusst NICHT um die 2 Positionen wieder zurück, sondern dividiert stattdessen durch 4, weil ... na, fällt der Groschen?
Die Bits 0..29 sollen vor der Manipulation bereits eine Vorzeichen-behaftete Zahl sein und nach der Manipulation natürlich auch noch.
Der SHR zieht aber beim Schieben grundsätzlich Nullen nach, während die Division ... na, ist jetzt der Groschen gefallen? ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
Harald hat unterstellt, dass der TE schon die richtigen Bits genannt hat.
Und schlägt deshalb vor, zuerst die Bits um 2 Positionen nach links zu verschieben. ABER er schiebt sie dann bewusst NICHT um die 2 Positionen wieder zurück, sondern dividiert stattdessen durch 4, weil ... na, fällt der Groschen?
Die Bits 0..29 sollen vor der Manipulation bereits eine Vorzeichen-behaftete Zahl sein und nach der Manipulation natürlich auch noch.
Der SHR zieht aber beim Schieben grundsätzlich Nullen nach, während die Division ... na, ist jetzt der Groschen gefallen? ;)

hatte auch erst gedacht maskieren würde ja ausreichen. Bis mir dann das INT auffiel. Aber wie ist es bei Siemens, kann ich gerade nicht testen, bei Codesys wird eine Fallunterscheidung bei SHR gemacht.
Word: es wir 0 angefügt
Int: wenn MSB 1 dann wird 1 angefügt, wenn 0 dann 0
SHR.png

Gruß
 
bei Codesys wird eine Fallunterscheidung bei SHR gemacht.
Word: es wir 0 angefügt
Int: wenn MSB 1 dann wird 1 angefügt, wenn 0 dann 0
Eine Fallunterscheidung beim SHR ist eigentlich nicht nötig, es sei denn man erlaubt (abweichend von der IEC) SHR auch für INT. Da sollte der Compiler besser meckern, anstatt zu vermuten was der Programmierer gemeint hat - wenn ein Programmierer SHR auf INT anwendet, dann weiß der sowieso nicht was er tut...

Laut Dokumentation erlaubt TIA für S7-1200/1500 auch das SHR Schieben von Ganzzahlen (!), behauptet aber, das grundsätzlich Nullen eingeschoben werden. Was für ein Schwachfug...
Ob das so stimmt, müsste man mal testen. Die TIA Dokumentation ist bekanntlich an sooo vielen Stellen fehlerhaft ...

Harald
 
In der Doku für S7-300 steht, dass für Zahlen mit vorzeichen bei SHR die freigewordenen Bits mit dem Wert des Vorzeichens gefüllt werden.

Dann wäre aber der Wert , welcher am Ende rauskommt trotzem nicht richtig?

Nach Links schieben ist für mein Verständnis in soweit verkehrt, dass ich noch mehr Bits,welche nicht zu dem Rohwert gehören , bekomme und noch mehr Bits, die am Anfang sind wegfallen.

Wenn ich jetzt erst 2 Nach rechts gehe, um die Letzten beiden Bits zu verlieren, und diesen Wert dann anschließen um 2 STellen nach Links schiebe müsste es doch eigentlich passen? Vorzeichen bleibt erhalten und Bit 30 und 31 werden mit 0 gefüllt?

Ich Probiere dass mal eben am Teststand.
 
Okay Doku ist relativ, ich meine Die Hilfe aus dem Tia Portal.

Bei S7-1500 steht im übrigen das selbe.
 
Bit 30 und 31 Sind 2 Binäre schaltsignale.
Auf Bit 0 bis 29 wird der Rohmessert als Integer30 übertragen.
Nach Links schieben ist für mein Verständnis in soweit verkehrt, dass ich noch mehr Bits,welche nicht zu dem Rohwert gehören , bekomme und noch mehr Bits, die am Anfang sind wegfallen.

Wenn ich jetzt erst 2 Nach rechts gehe, um die Letzten beiden Bits zu verlieren, und diesen Wert dann anschließen um 2 STellen nach Links schiebe müsste es doch eigentlich passen? Vorzeichen bleibt erhalten und Bit 30 und 31 werden mit 0 gefüllt?
Wie nummerierst Du die Bits??? Üblicherweise ist Bit 0 das LSB (ganz rechts) und Bit 31 das MSB (ganz links).

Die Bits 31 und 30 müssen entfernt werden und mit dem Wert von Bit 29 aufgefüllt werden.

PS: hast Du mal die Dokumentation Deines Gerätes? Kann es sein, daß die Schaltsignale in Wirklichkeit auf den niedrigsten beiden Bits Bit 0 und Bit 1 liegen? Sowas wird häufiger gemacht, weil sie da fast gar nicht stören falls man sie nicht entfernt.

Harald
 
Zuletzt bearbeitet:
Habe das mal kurz ausprobiert (TIA v15.1 / Echte CPU 1511). Es verhält sich genau so wie bei CoDeSys.
Word -> Logisches Schieben (Wird mit Nullen aufgefüllt)
Int -> Arithmetisches Schieben (Wird mit Vorzeichenbit aufgefüllt)

1648031770502.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
1. Das ist wohl die Dokumentation von SHR in FUP oder KOP. Wir reden hier aber über SHR in SCL.
2. TIA!!! :rolleyes: Wieso ist die Dokumentation in SCL unterschiedlich? Die übliche TIA-Schlamperei oder funktioniert SHR in SCL tatsächlich abweichend?? :unsure:

TIA V15.1: Bei SHR in SCL steht, daß Nullen eingeschoben werden.

PS: die Dokumentationsfehler könnten gar nicht passieren, wenn solcher Schwachfug wie Schieben von INT gar nicht zugelassen würde. SHL mit INT ist ja noch schwachsinniger, aber trotzdem zugelassen!

Harald
 
Zuletzt bearbeitet:
1. Das ist wohl die Dokumentation von SHR in FUP oder KOP. Wir reden hier aber über SHR in SCL.
2. TIA!!! :rolleyes: Wieso ist die Dokumentation in SCL unterschiedlich? Die übliche TIA-Schlamperei oder funktioniert SHR in SCL tatsächlich abweichend?? :unsure:

TIA V15.1: Bei SHR in SCL steht, daß Nullen eingeschoben werden.

Harald

Anscheinend ist nur das Bild falsch bzw. stellt jeweils den anderen Fall dar.
Im Text über dem Bild steht bei beidem, das bei Typen ohne Vorzeichen Nullen eingeschoben werden, ansonsten das Vorzeichenbit.
 
Zurück
Oben