# TIA Portal V13 - Profibus Teilnehmer (nicht von Siemens) einbinden



## ludi81 (2 Mai 2015)

Hallo,

ich versuche gerade ein Profibus Motor von Schunk (PRH) mit einer Siemens Steuerung (IM151) von Siemens mit dem TIA Portal V13 zu verbinden.

Ich glaube ich habe die Verbindung hergestellt, aber weiß nicht wie ich jetzt kommunizieren kann.

Folgende Schritte habe ich durchgeführt/
1) GSD Datei in TIA importiert
2) Neues Gerät (Motor) erstellt und verbunden (siehe Topologiesicht) 
	

		
			
		

		
	



3) In der Geräteansicht sehe ich jetzt Eingangsadressen: 256...271 und Ausgangsadressen: 256..263 
	

		
			
		

		
	





Jetzt stehe ich aber an. Laut Siemens Beschreibung muss ich jetzt ein Telegramm auswählen, das gibt es aber bei Schunk nicht.
Wie kann ich jetzt direkt auf die Adressen zugreifen? Wie kann ich also Kommandos an den Motor schicken und wie erhalte ich die Antwort.

Vielen Dank
Ludi


----------



## MSB (2 Mai 2015)

Nun ja, jetzt schnappst du dir die Anleitung von Schunk und schaust was die 8 Byte Ein bzw. 16 Byte Aus denn zu bedeuten haben, und klatscht dann einen schönen FB zusammen.
Oder du rufst bei Schunk an, ob die ein Beispielprogramm haben oder oder oder.

P.S. Wie du schreiben kannst:
T AW
T AB
= Ax.Y
usw.

P.S.
Ich würde oberflächlich betrachtet jetzt nicht behaupten, das die eine Siemens-Anleitung da auch nur das geringste bringen wird,
da deine Bildchen jetzt eher nicht nach einen Antrieb nach Profidrive-Profil ausschauen.

Mfg
Manuel


----------



## ludi81 (2 Mai 2015)

Danke für die Schnelle Antwort.
Ich weiß natürlich was die Eingangsbytes und Ausgangsbytes bedeuten. So weit bin ich aber noch gar nicht.
Wie kann ich auf diese Adressen schreiben? Irgendwie muss ich ja die Adressen zu einer Variable verbinden. Ich kann keine Verbindung zu einer lokalen Variable erstellen. Gibt es spezielle OPs für das Schreiben/Lesen? Oder wie mache ich das?


Danke


----------



## de vliegende hollander (2 Mai 2015)

Du kannst die Adressen als boolsche Variablen anlegen und verwenden.
E256.0. A256.0 und so weiter

bram


----------



## MSB (2 Mai 2015)

Prinzipielle Möglichkeiten:
SFC14/15
oder
SFC20
oder
So wie auf jede x-beliebige andere EA-Adresse auch.

Mfg
Manuel


----------



## ludi81 (2 Mai 2015)

Vielen Dank für eure schnelle Antwort. Ich verwende das TIA V13.
Kann ich also einfach mehrere PLC Variablen erstellen und normal auf diese Zugreifen?

Ich habe beispielsweise folgende Variablen erzeugt 
	

		
			
		

		
	




Kann man eigentlich einen eigenen Datentyp nicht einfach an diese Eingangs und Ausgangsadressen setzen? Unter Datentyp kann ich nur die Standardtypen auswählen. Mit einem eigenen Datentyp wäre es ein wenig übersichtlicher.
Normalerweise verwende ich SCL und da scheint es SFC20 nicht zu geben. Ich kann aber BLKMOV verwenden, oder? Dann kann ich auch ein eigener Datentyp verwenden.


Da ich aktuell die Steuerung nicht zur Hand habe kann ich es nicht testen. Aber es wäre super wenn ihr mir das noch bestätigen könnt, dann kann ich bis Montag noch etwas vorbereiten.

Vielen Dank
Ludi


----------



## de vliegende hollander (2 Mai 2015)

> Kann ich also einfach mehrere PLC Variablen erstellen und normal auf diese Zugreifen?



Ja genau.
Ich hab es zum Beispiel so umgesetzt. Normal als E und A .

Anhang anzeigen 28433


Bram


----------



## RogerSchw85 (2 Mai 2015)

Schau dir mal GETIO und SETIO an. Ich würde diese verwenden um den Motor anzusteuern.


----------



## de vliegende hollander (3 Mai 2015)

RogerSchw85 schrieb:


> Schau dir mal GETIO und SETIO an. Ich würde diese verwenden um den Motor anzusteuern.



Die sind schon vom Vorteil wenn ein detaillierte Diagnose der Verbindung gewünscht ist.

Bram


----------



## ludi81 (3 Mai 2015)

Hallo,

vielen Dank für euere Antworten.
Kann mir jemand zeigen wie ich GETIO und SETIO richtig verwende? Ich will z.b. mit GETIO Daten von der Adresse E256 in eine  eigenen Struktur kopieren.
ich erhalte aber immer "Ungültiger Ausdruck" bei INPUTS. Wie kann ich den Parameter ID genau setzen?

Weiters habe ich gesehen, dass ich bei den PLC Variablen nur Q und I auswählen kann, nicht aber E und A. Kann mir jemand sagen was hier der Unterschied ist?

Vielen Dank
Ludi


----------



## de vliegende hollander (3 Mai 2015)

ludi81 schrieb:


> Hallo,
> 
> Weiters habe ich gesehen, dass ich bei den PLC Variablen nur Q und I auswählen kann, nicht aber E und A. Kann mir jemand sagen was hier der Unterschied ist?



Das ist die englische Mnemonik.
Ist genau dasselbe.

Bram


----------



## ludi81 (3 Mai 2015)

de vliegende hollander schrieb:


> Das ist die englische Mnemonik.
> Ist genau dasselbe.
> 
> Bram



Ah, dann ist es klar. 
Dann kann ich jetzt mal alles direkt schreiben und lesen. Ich muss mir noch genauer GETIO und SETIO. Vielleicht schaffe ich es ja so noch (wenn es besser ist)


----------



## de vliegende hollander (3 Mai 2015)

> Parameter
> Deklaration
> Datentyp
> Speicherbereich
> ...



Das ist die Hilfe der Eingangssignalen bei der GETIO.



> Es ist nur der Datentyp BYTE zulässig



Es ist aber von ANY, er nehmt Byte, Pointer , Array und so weiter

Bram


----------



## ludi81 (3 Mai 2015)

de vliegende hollander schrieb:


> Das ist die Hilfe der Eingangssignalen bei der GETIO.
> 
> 
> 
> ...



Die Beschreibung habe ich auch schon gefunden. aber irgendwie werde ich hier nicht schlau.
Ich habe in der PLC Variablen ein Variable mit dem Namen: SCHUNK_PRH_IN_BYTE_1 erstellt (ist vom Type Byte und ist auf der %IB256 (erstes Byte vom Input)).
Weiters habe ich eine eigenen Datenstruktur (PRH_IN) erzeugt, welches die Antwort Bytes beinhaltet (z.b. Type 1 Byte, Status 1 Byte,..).

Danach wollte ich alles ab Adresse SCHUNK_PRH_IN_BYTE_1 in eine Variable data (von Datentyp PRH_IN) kopieren.

```
#GETIO_PRH_DB(ID:=SCHUNK_PRH_IN_BYTE_1, INPUTS:=#data);
```

Ich erhalte hier aber jetzt "Ungültiger Ausdruck". Woher weiß das GETIO eigentlich wie viele Bytes kopiert werden müssen?


----------



## de vliegende hollander (3 Mai 2015)

Du willst es in SCL machen ?

Im Input leg Mann fest wie viel Byte gelesen werden sollte. 
Es ist auch es Zielbereich. Nicht die 256 er Adressen der Periferie verwenden.


```
"GETIO_DB_1"(ID:=#ID,
             STATUS=>#STATUS,
             LEN=>#LEN,
             INPUTS:=#INPUTS);
```

Ich bin nicht de SCL-Spezialist. In SCL könnte es aber so aussehen

Datentypen nimmt er nicht am Input sehe ich gerade..


----------



## MSB (3 Mai 2015)

ID ist einfach eine Zahl, hier also 256 bzw. 16#100.
Die Länge des Datentyps Input legt fest, wie viele Bytes gelesen werden sollen,
wobei das aber exakt so viele sein müssen, wie das Modul der jeweiligen Basisadresse hat, in deinem Fall also 8 bzw. 16.

Desweiteren gibt es auf der Schunk-Seite so nach kurzer Suche ein S7-300 Beispielprojekt, welches auch im S7-Kontext entsprechend beschrieben ist.

Mfg
Manuel


----------



## ludi81 (3 Mai 2015)

de vliegende hollander schrieb:


> Du willst es in SCL machen ?
> 
> Im Input leg Mann fest wie viel Byte gelesen werden sollte.
> Es ist auch es Zielbereich. Nicht die 256 er Adressen der Periferie verwenden.
> ...



Ich habe den Fehler gefunden. Blöderweise habe ich die "," zwischen den Parametern vergessen.
Bei ID habe ich folgendes eingetragen: DW#16#3 (Profibus Adresse vom Motor). Stimmt das? Ich verstehe dein Satz im letzten Post nicht ganz.


----------



## de vliegende hollander (3 Mai 2015)

Welche Satz meinst du ?

Was ist bei ID ein zu stellen, ja gute Frage.
Wie Manuel sagt die 256(Dezimal) oder 100(Hexadezimal)
Da könnte auch die Profibusadresse gemeint sein so wie du es schon gemacht hast.
Einfach mal online ausprobieren.

Bram


----------



## ludi81 (3 Mai 2015)

Ich verstehe folgenden Satz nicht ganz:


> Es ist auch es Zielbereich. Nicht die 256 er Adressen der Periferie verwenden.



Aber ich versuche es einfach am Dienstag mit beiden Werten. Ich sollte schnell herausfinden wie es geht. Danke noch einmal für eure ausgezeichnete Hilfe.


----------



## RogerSchw85 (3 Mai 2015)

Du musst die HardwareID nehmen ein und ausgangsbereich nehmen. Also dort wo du die Adresse 256 hast, hast du zusätzlich eine HardwareID. Den Namen den du dem Bereich gegeben hast, hat eine Systemkonstante die du dem GETIO ind SETIO übergeben kannst.


----------



## MSB (4 Mai 2015)

RogerSchw85 schrieb:


> Du musst die HardwareID nehmen ein und ausgangsbereich nehmen. Also dort wo du die Adresse 256 hast, hast du zusätzlich eine HardwareID. Den Namen den du dem Bereich gegeben hast, hat eine Systemkonstante die du dem GETIO ind SETIO übergeben kannst.


Ist das denn bei S7-300/400 auch so ... also mein TIA sagt "Nein".
Eigentlich ist in dem Kontext GETIO/SETIO bei S7-300/400 schlicht unnötig.


----------



## ludi81 (4 Mai 2015)

RogerSchw85 schrieb:


> Du musst die HardwareID nehmen ein und ausgangsbereich nehmen. Also dort wo du die Adresse 256 hast, hast du zusätzlich eine HardwareID. Den Namen den du dem Bereich gegeben hast, hat eine Systemkonstante die du dem GETIO ind SETIO übergeben kannst.



Hallo,
also ich sehe da nichts von einer HardwareID 
	

		
			
		

		
	




Ich sehe hier nur eine Baugruppe und einen Steckplatz und die Adressen. Als Steuerung habe ich eine IM151-8 PN/DP CPU mit Profibus Modul.


----------



## ludi81 (4 Mai 2015)

MSB schrieb:


> Ist das denn bei S7-300/400 auch so ... also mein TIA sagt "Nein".
> Eigentlich ist in dem Kontext GETIO/SETIO bei S7-300/400 schlicht unnötig.



Meinst du mit "unnötig" dass ich direkt auf die Adressen zugreifen soll?
Danke


----------



## MSB (4 Mai 2015)

SETIO/GETIO ist gegenüber den uralten SFC14/15 = DPRD_DAT bzw. DPWR_DAT unnöig.
Eigentlich ist SETIO/GETIO bei deiner Steuerung nur SFC14/15 in einem FB verpackt, in Verbindung mit einer unnötigen Instanz.


----------



## RogerSchw85 (4 Mai 2015)

ludi81 schrieb:


> Hallo,
> also ich sehe da nichts von einer HardwareID
> 
> 
> ...



Ja mit den 300er Steuerungen gibt es diese ID nicht und somit geht GETIO und SETIO nicht...

Nein GETIO und SETIO ist nicht überflüssig das es gebraucht wird um Symbolisch zu Programmieren. Wenn ich mich recht erinnere braucht DPRD_DAT die Eingangsadresse. Und beim Symbolischen programmieren gibt es "theoretisch" keine Eingangs und Ausgangsadressen sondern nur die HaerdwareID...


----------



## MSB (4 Mai 2015)

@RogerSchw85
Lies doch einfach genau was ich geschrieben habe ...

GETIO/SETIO gibt es AUCH bei S7-300, nur da es eben da keine Hardware-ID gibt muss eben da AUCH die "Logische Basisadresse" verwendet werden, so wie es schon > 10 Jahre der Fall ist bei 
Also ist das außer einer gewissen Optik da ziemlich Vorteilslos, es hat sogar eher noch den Nachteil, das man eben auch dafür eine Instanz benötigt.


----------



## RogerSchw85 (4 Mai 2015)

@MSB

Tut mir leid du hattest natürlich vollkommen recht.


----------



## ludi81 (8 Mai 2015)

Hallo,

ich habe es leider noch nicht ganz herbekommen. Da mir für den Profibus noch ein Kabel fehlt, habe ich mit einer Keyence Kamera (CX-v200) mit Profinet angefangen.

Ich habe die gsdml Datei importiert, eine neues Gerät eingefügt und mit dem Profinet verbunden. Die Verbindung funktioniert, denn die Kamera sagt, dass die Verbindung geklappt hat und ich auch Daten senden und empfangen kann (aber nicht alle ;(

So sieht meine Geräteansicht der Kamera aus: 
	

		
			
		

		
	




Mit DPRD_DAT und direkt mit den Adressen kann ich teilweise darauf zugreifen:
	

		
			
		

		
	





Auf die KeyenceCameraIn_1 bis 5 kann ich sowohl mit DPRD_DAT und direkt auf die Adresse zugreifen. Aber auf die ResultData (KeyenceCameraResultData_1 ...) ist immer 0. Laut Keyence Kamera werden hier aber Daten übertragen.
Ich habe auch alle anderen ResultData angesehen und ich finde hier  Was hat es hier eigentlich mit dem Steckplatz auf sich?
Laut Kamera werden die ResultData ab Byte 12 übertragen. 

Über Vorschläge bin ich sehr dankbar.
Ludi


----------



## RogerSchw85 (8 Mai 2015)

Was sagt den deine Steuerung über den Status der Kamera? Auch ok?


----------



## ludi81 (13 Mai 2015)

Hallo Zusammen,

ich habe in den letzten Tagen wieder weiter getestet und konnte den Fehler schon lokalisieren, aber nur temporär lösen.
Auf folgendem Bild sieht man die zugewiesenen Eingangs- und Ausgangsadressen des Motors in der SPS.



Wenn die E-Adresse 256-271 ist funktioniert das ganze nicht. Wenn ich diese Adresse unter 128 ändere. Also z.b. 5-20 funktioniert alles einwandfrei.
Genau das gleiche Problem tritt auch bei den A-Adressen auf. Also bis 128 kann ich übertragen, danach nicht mehr. Über 128 steht bei Eingängen immer 0x00 drinnen, bei Ausgängen wird es nicht gesendet.
Weiters tritt bei Profinet und Profibus genau das gleiche Phänomen auf. Also beide Probleme von mir (also Kommunikation mit Profinet->Kamera bzw. Profibus->Motor) hängen also zusammen.

Jetzt stellt sich mir also folgende Fragen:
1) Kann man irgendwo umstellen wie viele Bytes bei einer Profinet/Profibus Übertragung übertragen werden?
2) Kann man nicht direkt auf den Speicher zugreifen (Testweise habe ich mit %IB0) zugegriffen. Funktioniert das nur mit dem DPRD_DAT Baustein?
3) Oder kann meine Steuerung 6ES7 151 8AB01-0AB0 (ET 200s mit IM151-8 PN/DP CPU) nicht mehr? Beim Motor ist das kein Problem, aber bei der Kamera ist der nötige Block schon 128 Byte. Weiters kommt auch noch ein Roboter dazu, welcher natürlich auch noch einen bestimmten Bereich benötigt.

Vielen Dank
Ludi


----------



## ludi81 (13 Mai 2015)

Ich glaube ich habe gerade die Antwort gefunden. Bei der Steuerung gibt es unter Eigenschaften->Allgemein-->Zyklus die Grüße des Prozessabbildes der Eingänge und Ausgänge.
Hier stand immer 128, ich habes jetzt mal auf 1024 erhöt. Ich werde das sobald ich wieder in der Firma bin testen.


----------

