# S7-400 in bestehendes Modbus System als Slave



## Zyrano (17 September 2009)

Hallo,

ich stelle gerade eine Quantum Steuerung auf eine S7-400 um und muss diese als Slave an den Modbus anbinden. Dabei handelt es sich um eine Punkt zu Punkt Verbindung mit dem Leitrechner.

Der Modbus-Master ist ein nicht näher bestimmter Leitrechner der vorher aus der Quantum einige Register verarbeitet hat.

Folgende Register hat der Master vom Slave gelesen: 41200 - 41207
Folgende Register hat der Master an den Slave geschrieben: 41210 - 41218

Nun ist es mein Ziel die neue S7- 400 so in den Modbus einzufügen, das ich am Master keine veränderungen anbringen muss.

Für die Modbus Anbindung nutze ich die CP441-2 und den Ladbaren Treiber zur Modbus Punkt-zu-Punkt Verbindung als Slave von Siemens.

In der S7 habe ich die Relevanten Register in DB 40(lesen) und DB41(schreiben untergebracht.

Meine Frage ist jetzt, wie kann ich mit Hilfe des Modbus Treibers diese DBs so an den Modbus ausgeben, dass sie für den Master als Register 41200usw... erscheinen?

Vielen Dank schonmal für eure Hilfe


----------



## MarkusP210 (24 September 2009)

Hallo

Du must mit den FBs 7 und 8 (P_SEND_RK resp. P_RCV_RK) die Telegramme an den Master senden resp. vom Master empfangen.

Den Aufbau des Tgm-Inhalts findest Du unter:
http://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf

Nach Deinem Beschrieb musst Du Register übertragen, was dem Function-Code 10 Hex entspricht.

Gruss

Markus


----------



## Zyrano (25 September 2009)

Hi,

danke schonmal für deine Hilfe.

Also ich denke mal, ich gehe richtig in der Annahme dass der FB7 (Receive) für die DBWs (oder Register) zuständig ist die empfangen werden sollen und der FB8(send) für die zu sendenden.

Nun habe ich aber einen CP441-2 und in der Beschreibung von FB7 & FB8 ist immer die Rede vom CP341. Ist das irrelevant oder funktionieren die nur mit einer 300er Steuerung?

Und vielleicht könntest du mir kurz bei der Syntax helfen. Der DB Aufruf ist ja recht umfangreicht. Wie würde es aussehen wenn ich die Register 41210 - 41218 jeden Zyklus im DB41 unterbringen will.

Oder hast du evtl eine genauere Beschreibung der FBs?

Vielen Dank.



```
CALL  "P_RCV_RK" , "DB_zu_FB7"
       EN_R    :=TRUE
       R       :=
       LADDR   :=
       DB_NO   :=  
       DBB_NO  :=
       L_TYP   :=
       L_NO    :=
       L_OFFSET:=
       L_CF_BYT:=
       L_CF_BIT:=
       NDR     :=
       ERROR   :=
       LEN     :=
       STATUS  :=
```


----------



## uncle_tom (25 September 2009)

der Send und Receive FB ( FB7/FB8 ) wird doch nur beim Modbus-Master Treiber benötigt.

Beim Modbus-Slave Treiber gibt es den FB80 bzw. den FB180 und die zugehörige CP-Parametrierung in der Hardwarekonfig.

Das kann man aber auch alles nachlesen - dafür gibt es ein prima Handbuch bei Siemens Link

Wenn du den Slave-Treiber (Dongle, CD) hast, dann ist das Handbuch auch auf der CD mit drauf !

Der Modbus-Slave Treiber mappt die Modbus-Register auf Siemens Datenbausteine. Dafür wird bei der Parametrierung ein Offset-DB festgelegt. Weiterhin gibt es dann eine Umrechnungsformel (Modbus-Register - DB Datenwort).
Das steht auch alles im Handbuch mit drin !

Die von dir verwendeten DB´s 40/41 wirst du so nicht auf die Modbus-Register 41200 - 41218 gemappt bekommen - da wirst du wohl oder übel die DB-Adressen nochmal ändern müssen.

Lesen muss man können !


----------



## Zyrano (25 September 2009)

Ja, ich hab das Handbuch auch gelesen. 

Das Problem ist eben, dass der Leitrechner über Modbus auf die Register 41200 usw zugreifen will.

Versteh ich das in der Anleitung denn jetzt so richtig. Ich gebe in der Hardwarekoknfiguration beim FC16: DB40 für meine Register an.

Register 40001 entspricht dann DB40.DBW 0.0
Register 40002 dann DB40.DBW2.0
usw...

Da maximal 512 Register in einen DB können wäre dann:
Register 41200 = DB42.DBW350.0
(Also muss ich wohl meine DBs umstricken)

Ich fand diese Lösung ein wenig unschön, deswegen hatte ich nachgefragt. Bei der Sache mit dem FB7 und FB8 hatte ich jetzt gehofft das ich das ein wenig eleganter aufbauen könnte, da ja der FB80 beim CP341 auch auf diese beiden FBs zugreift.

Vielleicht hätte ich das ein wenig erwähnen sollen, damit du nicht glaubst ich hätte mich mit dem Thema nicht näher befasst.

Gruss
Zy


----------



## MarkusP210 (25 September 2009)

Ok, meine S7 war natürlich Master, das hatte ich übersehen.

Gruss

Markus


----------



## uncle_tom (25 September 2009)

Wenn du als Start-DB 40 angibst. Dann beginnen hier die Modbus-Adressen ab Register 0.

Deine Modbusregister 40001 und folgende liegen dann irgendwo bei DB117 !

Der Siemens-Treiber ist hier nicht sonderlich elegant aufgebaut !

Du wirst also nicht drum herumkommen deine DB-Nummern zu ändern. Das ganze ist natürlich dann blöd, wenn z.B. der DB117 bereits verwendet wird.

Den FB7 und FB8 kannst du vergessen, die werden nur vom Modbus-Master Treiber benötigt.


----------



## Zyrano (25 September 2009)

Danke nochmal für eure Hilfe.

Ich hatte das bei MODICON Steuerungen und bei MODBUS bis jetzt so verstanden, dass "Register 0" = "40000" ist.

Man spricht in den Anleitungen meist von Register 0 bis 9999
die vorangestellte 4 zeigt in der MODICON Steuerung oder im MODBUS lediglich, dass es sich hierbei um ein Register handelt.

Wenn das so richtig ist, dann ist "Register 41200" das "1200. Register".
folglich eben auch das 1200 DBW ab DB 40. Daher bin ich jetzt erstmal davon ausgegangen, dass meine Register irgendwo im DB42 liegen müssen.

Aber vielleicht liege ich da ja auch falsch. Wenn es nicht klappt habe ich somit schonmal einen Ansatz wie ich weiter überlegen kann. 

Besten Dank.

Gruss
Zy


----------



## Zyrano (1 Oktober 2009)

So, ich habe mir die S7 jetzt mal hier aufgebaut und probiert eine Modbus Verbindung herzustellen.

In der CP 441-2 habe ich eine RS232 Karte. Den FB180 habe ich in OB1 aufgerufen und dieser gibt auch keine Fehler von sich (CP_START_ERROR = 0)
Zusätzlich ist in der Hardware die Verbindung projektiert und mein entsprechender DB als Parameter beim Modbus Protokoll angegeben.

Gibt es eine Möglichkeit die Verbindung zu testen, da der zugehörige Modbus Master leider noch nicht zugänglich ist. Mir würde ja reichen, dass ich sehen kann welche Register über den Modbus übertragen werden.

Zu Testzwecken habe ich die RS232 Schnittstelle der CP mit der Com1 Schnittstelle von meinem Notebook über ein Nullmodem Kabel Verbunden. Dabei geht auch die ExtF-LED an der CP aus. Leider konnte ich mit MODSCAN keine Übertragung über den Modbus nachvollziehen. Das Bit CP_NDR beim FB180 bleibt komischerweise immer auf false.

Habt ihr noch eine Idee wie ich die Verbindung am besten testen kann?
Kann ich mir in der S7 irgendwo angucken welche Register angefordert werden?

Vielen Dank


----------

