# Profibus-Verbindung zwischen SPS und Bender



## jr-sps (26 August 2008)

Hallo!

Zunächst der Aufbau:
Ich habe hier ein Differenzstromauswertegerät RCMS460-D, welches mit einem Protokollumsetzer FTC470XDP mit dem Profibus verbunen ist. Am BUS häng noch eine SPS 317-2EJ10-0AB0.

Leider habe ich keine Ahnung von Profibus und die Suchen im Internet haben mir nicht großartig weitergeholfen.

Ich möchte gern mittels Ethernet auf die SPS zugreifen und diese so programmieren, dass diese die vom Protokollumsetzer gesendeten Daten aufnehmen und speichern kann. Später soll das ganze so erweitert werden, dass mehrere Protokollumsetzer im BUS sind. Aber jetzt ist erstmal die Kommunikation mit dem einen Umsetzer erforderlich.
Mit dem Handbuch ist mir bekannt, aus welchen Bytes sich ein Befehl zusammensetzt und wie aus empfangenen Bytes die Antwort ausgelesen werden kann. ABER ich weiß nicht, wie ich die Daten auf den Bus schreiben bzw. die Daten vom Bus lesen kann.
Es wäre nett, wenn jemand einen guten Link im Internet oder eine einfache Erklärung hätte.

Vielen Dank im Voraus.

MfG
jr-sps


----------



## Bender25 (27 August 2008)

Zunächste benötigst du einen Ethernet CP für deine S7 300 damit du diese Programmieren usw kannst. 

Um Daten auf Profibus (nehme ich jetzt mal an) zu senden gibt es spezielle Bausteine von Siemens für die S7 mit denen zu auf Profibus lesen und schreiben kannst. (SFC14 lesen, SFC15 schreiben).


----------



## marlob (27 August 2008)

Du solltest erst mal die GSD Datei vom Umsetzer in den Hardwaremanager von simatic einbinden siehe Anhang. Er ist dann unter Anybus-S im Katalog zu finden


----------



## marlob (27 August 2008)

Hier noch die Anleitung des FTC470XDP


----------



## Bender25 (27 August 2008)

marlob schrieb:


> Du solltest erst mal die GSD Datei vom Umsetzer in den Hardwaremanager von simatic einbinden


 
stimmt.. vergessen..


----------



## jr-sps (1 September 2008)

hmm...
so richtig funktioniert das ganze jetzt immer noch nicht.
ich habe mit fc1 (DP_SEND) und fc2 (DP_RECV) versucht, den datenaustausch zu realisieren.
dazu habe ich mir einen db80 erstellt, in dem ich bestimmte bytes mit werten belegt (werte der bytes aus dem handbuch). analog dazu habe ich den db81, der die empfangenen daten speichern soll. das klappt NICHT.

wie muss ich stattdessen vorgehen?


----------



## HaDi (1 September 2008)

FC1/2 sind für den Datenaustausch mit einem CP342-5, das wird so nicht gehen. Versuchs mal, wie von Bender25 vorgeschlagen, mit SFC14/15.

Grüße von HaDi


----------



## jr-sps (2 September 2008)

Guten Tag!
Vielen Dank für die Tipps. Die Bausteine SFC14/15 habe ich bereits versucht. Leider ist es mir in Step 7 nicht gelungen, sie einzufügen. Wenn ich den Baustein in ein Netzwerk einfügen möchte so erhalte ich die Fehlermeldung "Baustein konnte nicht eingefügt werden" (Fehlercode 30:498).
Muss dafür noch etwas an der Projektierung geändert werden oder wo liegt der Fehler bei mir?

Vielen Dank


----------



## HaDi (2 September 2008)

Normalerweise werden Bibliotheksbausteine, wenn sie im Editor aufgerufen werden, automatisch ins Projekt eingefügt. Wenn es dabei Probleme gibt, kannst du ja die Bibliothek öffnen und die Bausteine manuell per kopieren/einfügen in dein Projekt bringen, dann sollte der Aufruf funktionieren.

Grüße von HaDi


----------



## jr-sps (2 September 2008)

Das mit dem Einfügen der SFCs hat nun geklappt.
Allerdings stehe ich wieder vor dem Problem, dass das Senden und Empfangen nicht funktioniert.
Wenn ich mir online den DB angucke, der für das Aufnehmen der empfangenen Daten verantwortlich ist, so sind da keine zu erwartenden Werte drin :-(
Gibt es bestimmte DBs die ich dafür verwenden muss oder kann das jeder beliebige sein?
Was ist noch bei einer Kommunikation mittels SFC14 und 15 zu beachten?

MfG


----------



## HaDi (2 September 2008)

Grundsätzlich kannst du beliebige DBs benutzen, sofern sie nicht bereits für andere Zwecke verwendet werden. Stell doch mal dein Projekt hier rein, vielleicht hat man dann eher eine Idee, woran es hapert.

Grüße von HaDi


----------



## jr-sps (2 September 2008)

Hier mal das Projekt:


Danke im Voraus für die Hilfe!!


----------



## HaDi (2 September 2008)

Das Projekt sieht für mich erst mal o.k. aus. Wenn alles (einschließlich der Systemdaten) geladen ist und der Profibus läuft (RUN leuchtet, BF leuchtet nicht am FTC) und die BMS-Seite richtig konfiguriert ist, sollte sich was tun.
Wenn du jetzt entsprechend der Anleitung einen Befehl über die Ausgangsdaten (DB80) absetzt, müsste der FTC in den Eingangsdaten (DB81) antworten. MW99 und MW100 sollten immer 0 sein. Die Aktualwerte in DB80/DB81 deuten darauf hin, dass du Ein- und Ausgangsdaten verwechselt hast, denn einen Befehl 20 habe ich, zumindest auf die Schnelle, nicht gefunden.

Grüße von HaDi


----------



## jr-sps (3 September 2008)

danke schonmal....
der bms-befehl 20 dient der geräte-abfrage, aber auch hier kriege ich keine antwort.
prinzipiell wäre der befehl egal, da er in der antwort auch wieder geschrieben werden müsste. die werte in den folgenden bytes sind ja dann die ergebnisse der anfrage.
ich habe im DB81 alle werte auf 0 gesetzt und wenn ich mir den datenbaustein online ansehe stehen die werte 1...0...2...0...1...0...0...0.
stehen sollte dort jedoch 1...0...2...0...20...201...0...0

weiterhin habe ich jetzt den fehler -32591. das ist in hexadezimal FFFFFFFFFFFF80B1 in der fehlerliste gibt es den fehler 80b1 und dieser hat die bedeutung:
"die länge des zielbereichs ist ungleich der mit step 7 projektierten nutzdatenlänge"
wie du ja im projekt gesehen hast, ist das anybus-gerät mit 8bytes projektiert und ich sende/ frage nur 8 bytes ab. wenn ich den adress-bereich vergrößere, zeigt mir die sps mit den leds bf1 und sf fehler an und die sps geht in stop.
somit ist mir der fehler 80b1 auch recht unerklärlich, vorausgesetzt ich habe das richtig abgeleitet die F's wegzulassen.

mfg


----------



## Larry Laffer (3 September 2008)

... welches MW meldet denn den Fehler ?
MW99 oder MW100 ?
Du weißt schon, dass die beiden MW's sich um ein Byte überschneiden ? Es könnte also sein, dass du eigentlich eine ganz andere Fehlermeldung erhälst ... Versuch doch vielleicht mal MW98 und MW 100 und schreib dann etwas zu dem Status. 
Hast du die DB's auch in die Steuerung übertragen ?

Gruß
LL


----------



## jr-sps (3 September 2008)

Beide MW's melden den Fehler. Das mit dem überschneidende Byte habe ich nicht beachtet. Danke für den Hinweis! Werd ich gleich mal ausprobieren.
Die DB's sind in die Steuerung übertragen...


----------



## Larry Laffer (3 September 2008)

... was mir noch gerade aufgefallen ist ...

In der HW-Konfig hast du den E-A-Bereich mit 4 Worten deklariert. Möglich, dass das System sich dran stört. Trag doch mal an die SFC's statt "Byte 8" als ANY-Pointer "Word 4" an. Vielleicht hilft das ...


----------



## jr-sps (3 September 2008)

ok, das mit dem MW's hab ich probiert, hat aber leider nichts gebracht.
Das Umändern in Word 4 hat auch nicht geholfen...trotzdem vielen Dank für den Hinweis!


----------



## Larry Laffer (3 September 2008)

Schade ... 

Einen letzten habe ich noch ... wegen der Fehler-Meldung ...
Mach doch bitte die beiden DB's einfach mal ein paar Byte gräßer als benötigt. Das ist zwar ziemlich weit hergeholt, aber ich sehe sonst keinen möglichen Fehler mehr in dem Projekt ...


----------



## jr-sps (3 September 2008)

nun habe ich folgendes probiert...
ich habe die zugriffsbreite beginnend von 1byte je um 1byte erhöht.
bis 4 byte hat das ganze funktioniert und beim fünften byte habe ich den üblichen fehler erhalten.

meine überlegung war es nun einfach zweimal 4 bytes zu senden, jedoch denke ich, dass dies nicht richtig funktionieren wird, oder?


----------



## Larry Laffer (3 September 2008)

... dann wäre es ja auf jeden Fall einfacher, du schreibst :
	
	



```
L PED 256
T DB81.DBD0
L PED 260
T DB81.DBD4
 
und für den Rücktransfer :
 
L DB80.DBD0
T PAD 256
L DB80.DBD4
T PAD 260
```


----------



## jr-sps (3 September 2008)

ok ich werde das mal eben probieren und melde mich gleich mit ergebnissen....


----------



## jr-sps (3 September 2008)

Jawoll das hat geklappt, danke dir!
Neue Abfragen herzustellen ist allerdings etwas umständlich. Mal schaun ob ich das noch vereinfachen kann.


----------



## Larry Laffer (3 September 2008)

... wobei ich gestehen muss, dass ich dieses Verhalten des SFC14 / 15 nicht nachvollziehen kann.
Mir ist allerdings auch aufgefallen, dass *Godi* in einem anderen Thread ein ganz ähnliches (für mich genauso unverständliches) Problem hatte ...

Gruß
LL


----------



## HaDi (3 September 2008)

Hier noch ein paar unsortierte Gedanken von mir dazu:
Vielleicht hilft es ja, in der HW-Konfig 2 separate Module, jeweils eins für die Ein- und eins für die Ausgangssdaten einzufügen.
Wenn man allerdings mit L PED und T PAD arbeitet, kann man sich doch eigentlich die SFCs komplett sparen, oder ?
Man könnte ja auch die HW-Konfig ins Prozessabbild legen und dann direkt mit EB/EW/ED bzw. AB/AW/AD und ohne SFC14/15 arbeiten.

Grüße von HaDi


----------



## jr-sps (4 September 2008)

die übertragung mit dem geposteten code funktioniert soweit. ich habe versucht, das ganze mit

```
U      e0.0
```
an einen angeschlossenen Taster zu binden damit die anfrage nicht die ganze zeit gesendet wird. dabei musste ich jedoch feststellen, dass die anfrage beim starten der sps (auch bei nicht gedrücktem taster) scheinbar gesendet wird und auch der aktuelle messwert empfangen wird. im weiteren programmverlauf lässt sich die anfrage leider nicht durch drücken des tasters senden. im db steht weiterhin der messwert zur zeit des starts der sps.
wenn man die passenden eingangswörter betrachtet so scheint deren wert immer '0' zu sein.

ich habe den code der anfrage vom db mit folgendem code unabhängig gemacht:

```
u    e0.0
l    dw#16#01000201
t    pad    256
l    dw#16#69000000
t    pad    260
```
die anfrage wird nun auch korrekt gesendet und eine gültige antwort erscheint im db. auch dies funktioniert aber leider nur nach (oder während) eines neustarts der sps.
kann sich jemand dieses verhalten erklären?

viele grüße
jr-sps


----------



## Larry Laffer (4 September 2008)

... Lade- und Transferbefehle werden unmittelbar ausgeführt. Wenn du das von einem Ereignis abhängig machen willst dann geht das nur so :
	
	



```
U E 0.0
SPBN nTx
 
L DBD x
T PAD y
 
nTx: nop 0
```
 
Hier wäre dann vielleicht auch eine Flanken-Abfrage zusätzlich ganz nett (aber nicht gezwungenermassen).

Gruß
LL


----------

