# IO-Link-Prozessdaten schreiben



## Löwenzahn (10 Juli 2018)

Hallo,
und noch eine Frage zu IO-Link:
Ich habe ein IO-Link-Device und konnte es mit einem IO-Link-Device-Tool bereits betreiben, indem ich ein Statuswort und ein Sollwert geschrieben habe. Nun möchte ich das in einem kleinen Programm auf der SPS realisieren, habe allerdings keinen Ansatz wie ich da am besten vorgehe.

Benötige ich hierfür (TIA) den IO-Link-Call-Baustein? (Wobei der ja eigentlich nur zur Parametrisierung verwendet wird, wenn ich es richtig verstanden habe)
Oder wie geht man da vor? Muss ich mich da wirklich mit den Bits und Bytes herumschlagen?

Da ich leider noch sehr wenig Erfahrung mit IO-Link habe, kann es durchaus sein, dass ich hier irgendwo noch genauer darauf eingehen sollte, bitte in diesem Fall mich darauf aufmerksam machen


----------



## elektroniktommy (10 Juli 2018)

Hast du schon den Master in der Hardware eingebunden? Wenn ja legst du einfach je nach Device auf dem entdprechenden Port die I/O Daten an. Je nach Gerät gibt es da Prozessdaten als Eingänge oder Ausgänge oder eben beides. Auf die kannst du dann via angelegter Variablen direkt zugreifen bzw. Lesen und Schreiben! Die FB‘s brauchst du nur wenn du Parametrieren und Diagnose machen willst!

Hier noch ein Beispielhafte Konfiguration der Master hängt am Profinet:


----------



## Löwenzahn (11 Juli 2018)

Die Konfiguration hatte ich bereits...
An so eine simple Lösung hab ich gar nicht gedacht, Vielen Dank...
Die Eingangsdaten konnte ich so schon mal lesen.

Aber bei den Ausgangsdaten habe ich noch Probleme:
Ich muss 6Byte Ausgangsdaten schreiben wie genau realisiere ich das, welchen Datentyp wird hier benutz?

Ich habe mal einen Versuch hochgeladen, der aber so nicht funktioniert hat.
(gilt ab Netzwerk 4)

In meinem IO-Link-Device Tool gebe ich den Prozesswert so ein:  00 00 9C 40 00 14
Nun möchte ich das auf der SPS schreiben.


----------



## elektroniktommy (11 Juli 2018)

Wieviel Byte hat das Device als Ausgangsdaten? Wenn du Byte übertragen willst musst du die Variablen auch als Byte definieren! Du schreibst aber Word!

Gruss Tommy


----------



## Löwenzahn (11 Juli 2018)

---------------


----------



## Löwenzahn (11 Juli 2018)

Hallo Tommy

Das Device hat 6 Byte Ausgangsdaten.
Ah ok, dann versuche ich das mal. 
Muss ich die einzelnen Bytes dann wie in dem Beispiel jeweils extra schreiben oder geht das auch irgendwie auf einmal?
Und mache ich das mit dem MOVE Baustein richtig oder macht man das normal anders/ mit anderen Bausteinen...?
Wie gebe ich dann in Akku 1 den Byte Wert richtig an?
Ich habe wie gesagt leider noch wenig Erfahrungen


Ich habe das Bild nochmal in besserer Qualität hochgeladen.

Gruss Peter


----------



## elektroniktommy (11 Juli 2018)

Ich Würde die Bytes einzeln zuweisen.
Siehe Beispiel, nur noch die vier weiteren dazu schreiben.
Was für ein Device hast du da? Gibt es ein pdf dazu?


----------



## Löwenzahn (11 Juli 2018)

Alles klar dann werde ich das so mal versuchen. Besten Dank schon mal.
Hier das Device: https://www.halstrup-walcher.de/hal...gen/positioniertechnik/Anleitung_PSx3xxIO.pdf


----------



## Löwenzahn (12 Juli 2018)

Also, ich habe das heute so probiert wie du gemeint hast. Das hat dann auch funktioniert, jedoch musste ich die MSB/LSB vertauschen.
Ist das immer so bzw. hat das einen Grund warum das so ist oder ist das nur bei meinem Device so?

Auf jeden Fall mal vielen Dank


----------



## elektroniktommy (12 Juli 2018)

Das macht jeder Hersteller so wie er möchte glaub ich! Google mal nach Little oder Big Endian. Gibt es auch ein Wiki dazu. Gruß Tommy


----------



## Löwenzahn (12 Juli 2018)

Das ist mir ein Begriff.
Nur hätte es ja sein können, dass es da einen Grund gibt bzw. immer so ist, weil im Datenblatt wüsste ich jetzt nicht wo ich dazu etwas finden würde...


----------



## hucki (12 Juli 2018)

Normalerweise überträgst Du die Daten nicht BYTE-weise an den IO-Bereich des IOL, sondern in dem Format, wie dieser die Daten auch verarbeitet.
Bei Deinen Ausgangsdaten legst Du z.B. einen STRUCT oder besser noch UDT an, der nach Deiner Anleitung Seite 21 & 24 folgenderweise aufgebaut ist:

```
TYPE "PSx3xxIO Ausgangsdaten"
VERSION : 0.1

   STRUCT
      Steuerwort 				: Struct  // Steuerwort als Struktur
         "Handfahrt zu größeren Werten" 	: Bool;   // Steuerwort - Bit  0
         "Handfahrt zu kleinen Werten" 		: Bool;   // Steuerwort - Bit  1
         "Sollwert übergeben" 			: Bool;   // Steuerwort - Bit  2
         "Freigabe Handfahrt bei Tippbetrieb" 	: Bool;   // Steuerwort - Bit  3
         "Freigabe" 				: Bool;   // Steuerwort - Bit  4
         "Freigabe Tippbetrieb mit Tasten" 	: Bool;   // Steuerwort - Bit  5
         "Fahrt ohne Schleife" 			: Bool;   // Steuerwort - Bit  6
         "Einschaltschleife ausführen" 		: Bool;   // Steuerwort - Bit  7
         "Tippfahrt zu größeren Werten" 	: Bool;   // Steuerwort - Bit  8
         "Tippfahrt zu kleineren Werten" 	: Bool;   // Steuerwort - Bit  9
         "Freigabe Nachregeln" 			: Bool;   // Steuerwort - Bit 10
         "Bremsenlosbrechfahrt ausführen" 	: Bool;   // Steuerwort - Bit 11
         "Fahrt mit Schleppfehlerkorrektur" 	: Bool;   // Steuerwort - Bit 12
         "Reserve 1" 				: Bool;   // Steuerwort - Bit 13
         "Reserve 2" 				: Bool;   // Steuerwort - Bit 14
         "Reserve 3" 				: Bool;   // Steuerwort - Bit 15
      END_STRUCT;
      Sollwert 					: DInt;   // anzufahrende Sollposition (Wert in 1/100 mm)
   END_STRUCT;

END_TYPE
```
Diesen UDT legst Du auf den Ausgangsbereich an die Anfangsadresse Deines IOL.
So kannst Du vollsymbolisch die Daten an den IOL schicken.

Für den Eingangsbereich dann entsprechend genau so.

PS:
Aus dem pdf geht leider nicht hervor, ob Bit 0 im Byte 0 oder 1 erwartet wird. Also ob Big oder Little Endian für das "Pseudo"-WORD. 
Ggf. also die Bits 0-7 mit den Bits 8-15 in der Struktur tauschen.


----------



## hucki (12 Juli 2018)

hucki schrieb:


> Diesen UDT legst Du auf den Ausgangsbereich an die Anfangsadresse Deines IOL.
> So kannst Du vollsymbolisch die Daten an den IOL schicken.


So könnte das dann z.B. in der Benutzung aussehen:






die Hardwarezuweisung





und die symbolische Nutzung als Beispiel
(hab' aber k.A. ob die Steuerbits wirklich so genutzt werden)


----------



## Löwenzahn (12 Juli 2018)

Oh vielen Dank für die Mühe, das werde ich morgen gleich testen.


----------



## hucki (12 Juli 2018)

Löwenzahn schrieb:


> vielen Dank für die Mühe


Keine Mühe, sondern Training.


Viel Erfolg morgen!


----------



## Löwenzahn (13 Juli 2018)

Wahrscheinlich eine blöde Frage, aber wie und wo lege ich denn diesen UDT an? In der Standardvariablentabelle geht es nicht. Und unter PLC-Datentypen kann ich die Ausgangsadressen nicht zuweisen.


----------



## elektroniktommy (13 Juli 2018)

Die Adresse legst du erst fest wenn die die UDT-Struktur in deiner Variablentabelle angibst!



Lege eine neue Variable an und als Datentyp gibst du deine UDT-Struktur an die du unter PLC-Datentyp angelegt hast!

Gruß Tommy


----------



## Löwenzahn (13 Juli 2018)

Das wollte ich auch schon so machen, aber mir wurde der Datentyp (der unter PLC-Datentyp erstellte UDT) nicht angezeigt, nur die Standard-Datentypen.
Was mache ich dann falsch?


----------



## hucki (13 Juli 2018)

Löwenzahn schrieb:


> ... aber mir wurde der Datentyp (der unter PLC-Datentyp erstellte UDT) nicht angezeigt, nur die Standard-Datentypen.


War gerade erst Thema:


DOD666 schrieb:


> Es kommen auch nicht alle Typen in der Auswahlliste vor. Einfach mal den Datentyp komplett eingeben und schauen ob er angenommen wird.


----------



## Löwenzahn (13 Juli 2018)

Ok, mach ich. Das muss man auch erst mal wissen...
Ich hab auch schon mit Datenbausteinen experimentiert und da wurde er direkt angezeigt, deswegen wär ich da vermutlich auch nie draufgekommen, da ich davon ausging, dass alle verwendbaren Datentypen aufgelistet werden...


----------



## Löwenzahn (18 Juli 2018)

Ich hab jetzt mal versucht, den Datentypnamen von Hand einzugeben wie du es gemeint hast, es hat ihn hat aber leider nicht angenommen...
Vielleicht nochmal kurz mein Vorgehen:
1. Ich habe die Tabelle in PLC-Datentypen so wie dein Beispiel abgeschrieben
2. In Software übersetzen
3. jetzt wollte ich eine neue Variable aus dem erstellten Datentyp in der Standardvariablentabelle anlegen
Ist das nicht das Vorgehen wie du gemeint hast?


----------



## hucki (18 Juli 2018)

Genau so hab' ich das oben auf den Screenshots auch gemacht.
CPU war 'ne S7-1214C.


----------



## hucki (18 Juli 2018)

Vlt. vorher noch:
Neuer PLC-Datentyp
Datentyp umbenennen.

Du könntest auch den Code aus meinen ersten Post hier kopieren, diesen in eine leere Textdatei einfügen und die Dateiendung .txt in .udt ändern. Dann diese Datei in TIA unter Quellen als neue Quelle einbinden und übersetzen.


----------



## Löwenzahn (18 Juli 2018)

Ja so hab ich es gemacht... Ich hab eine S7-314
Dann versuche ich das mal noch...


----------



## hucki (18 Juli 2018)

Ja, siehste, deswegen steht in den Forenregeln: "immer Hardware angeben!".



Bei 'ner S7-300 kann man IMHO noch keine UDT-Struktur auf die IOs legen.
Dort musst Du diese Struktur per Hand in den IOs erstellen.
Kann sein, dass das auch nicht komplett geht, sondern nur die Bits und das DINT einzeln.


PS:
In der Regel assoziiert man TIA mit S7-1x00 und S7 Classic mit S7-300/400.


----------



## Löwenzahn (18 Juli 2018)

Hm ok dann weiß ich das jetzt auch...

Heißt ich muss das so machen wie ich es ganz am Anfang gemacht habe mit den einzelnen Bytes in die entsprechende Ausgangsadresse schieben?
So ist mein jetziger Stand und es hat soweit auch funktioniert, nur hätte ich das jetzt schon gerne auch mal "richtig" gemacht so wie du es beschrieben hast. Auch wenns dann nur noch als kleine Übung und Herausforderung gewesen wäre...


----------



## hucki (18 Juli 2018)

Ne, Bytes sollte nicht sein müssen.
Aber wahrscheinlich einzelne Bits und das DINT in der Standard-Variablentabelle.

Letztendlich geht's darum, dass Du die Variablen genau so benutzt, wie Dein IO-Link.


----------



## Löwenzahn (19 Juli 2018)

Ok. 
Dann vielen Dank, für eure tolle Unterstützung.  Ihr habt mir dabei einige neue Einblicke verschafft.


----------

