Vernetzen von 2 S7 315-2DP über Profibus

Zuviel Werbung?
-> Hier kostenlos registrieren
genau.
die max länge für einen ea eintrag beträgt 32 byte. du kannst aber mehrere definieren

wenn du direkt den db kopieren willst, nimmts du die bausteine aus dem simatic-net cp-ordner.
das klappt aber nur wenn du cp's einsetzt.
 
nimmst du sfc20

CALL SFC 20
SRCBLK :=P#DB100.DBX0.0 BYTE 100
RET_VAL:=MW0
DSTBLK :=P#A 128.0 BYTE 100
NOP 0
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Einen CP hab' ich, der ist allerdings nicht für Profibus gedacht, sondern für Ethernet.

Dort gibt es eine GET_CPU300BK mit dem ich angeblich Daten an eine Remote CPU senden kann.

Leider brauche ich hierfür eine Verbindung die ich nicht erstellen kann.

Oder gibt es hierfür auch andere Bausteine die ohne Verbindung funktionieren?
 
habe so ein verbindung auch noch nicht gemacht.
aber ich glaube du brauchst auf beiden seiten eine cp.
 
Wenn ich das richtig verstehe verschiebe ich die Daten bei dem Teilnehmer bei dem ich die Ausgänge definiert habe in diese und lese sie anschließend von dem anderen Teilnehmer aus den Eingängen.

Habe ich das richtig verstanden?
 
Ja du schiebst die Daten in die Ausgänge und liest sie an der anderen SPS an den Eingängen wieder aus.

Eine andere Möglichkeit wäre vielleicht der Austausch über MPI mit
X-PUT und X-GET. Jedoch muss man dort selber kontrollien ob die Verbindung aufgebaut wurde.
 
über mpi gehts ganz einfach über globaldaten. dp ist aber besser.

ich muss mich teils korrigieren.
die sfc 20 kann nicht in die peripherie schreiben.(also ab byte 127)

dafür musst du sfc14/15 nehmen

L 256 //anfangsadresse wo's hin soll
T #PAW_Addr_temp
CALL SFC 15
LADDR :=#PAW_Addr_temp
RECORD :=P#DB10.DBX 0.0 BYTE 100
RET_VAL:=#Ret_Val_SFC15
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich die Hilfe richtig verstehe, dann schiebe ich Daten der SPS 1 von dem Datenbaustein in die Ausgänge.

An der 2. SPS muss ich mit der gleichen Methode die Eingänge wieder auslesen, wenn die Daten dort über Adresse 127 liegen, oder?

Gibt es irgendetwas das bei der Vergabe der Adressen zu beachten ist?

Oder kann ich die Daten in jeden Bereich der SPS schreiben, unabhängig vom Programm und den verwendeten Baugruppen?
 
du bist nur an die vorgaben der cpu gebunden.

normale e/a's bei der 315er gehen bis 127. die pew/paw bis 766.

der vorteil wenn du den bereich bis 127 benutzt ist der, das du die bits in deinem programm direkt (z.b. u E 120.0) ansprechen kannst. darüber musst du diese in merker bzw datenworte transferieren.

der nachteil ist, das du bei 100 byte nicht mehr viel platz für normale e/a's hast.
 
Danke für eure Hilfe und eure Geduld!

Das ist wohl der längste Thread, den ich in diesem Forum erstellt habe.

Soweit funktioniert alles, den SFC15 hab' ich noch nicht getestet. Ich denke ich werde mich auf den Bereich von 0-126 beschränken, das sollte eigentlich ausreichen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nur ein kommentar.

Es funktioniert mit datenaustauch über E/A peripherie.

Aber Datenaustauch wird nicht funktionieren über PUT/GET befehle.
Der Grund ist, die 315-2DP kann ein Server im DP Netz nur sein, nicht client.
Das bedeutet: Die 315 können nicht eine Datenübertragung selber einleiten. Der ist auch der Grund, warum Sie nicht einen Verbindung in Netpro zwischen zwei 315s einbinden können.
Um PUT/GET zu verwenden, müssen Sie mindestens ein S7-400 oder ein CP Modul in einem des S7-300's benutzen.
 
Das Problem ist das keine neue Hardware zugekauft werden soll, deshalb muss ich mich mit den beiden 315-2DP SPSen begnügen.

Mit einem Profibus - CP oder einer S7 - 400 würde das ganze wahrscheinlich einfacher gehen, aber diese stehen leider nicht zur Verfügung.

Das sollte in der Beschreibung der PUT/GET Befehle stehen, das man die Daten nicht ohne Zusatzhardware über diese Befehle austauschen kann.

In der Beschreibung steht nur "liest Daten aus einem definierten Bereich einer Remote - CPU", weshalb ich annahm das dies für alle CPUs gilt.


Beim Datenaustausch über die EA - Peripherie benötige ich an jeder SPS eine freie Eingangs- und eine freie Ausgangskarte, damit die Daten in beide Richtungen übertragen werden können, oder?
 
@CrazyCat

Nein, du brauchst keine freihen EA-Karten, die für den Datenaustausch festgelegten EA-Bereiche werden von den Profibus-CP (denen in der CPU selbst) direkt beschrieben und können auch direkt ausgelesen werden.
 
Du kannst in den Prozessabbild-Bereich gehen, bis 127, dann kannst du die E/A direkt lesen und schreiben, oder in den Bereich oberhalb des PA, dann mußt du die Daten erst in einen DB (oder Merkerbereich) einlesen und am Ende des OB1 wieder zurückschreiben (Ich glaube SFC14/15?).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Darf's auch gemächlicher sein?

Datenbaustein (hier DB121) mit SFC67 in die eigene CPU kopieren:

ORGANIZATION_BLOCK OB 35
TITLE = "Cyclic Interrupt"
AUTHOR : Werner54
VERSION : 0.1

VAR_TEMP
OB35_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
OB35_STRT_INF : BYTE ; //16#36 (OB 35 has started)
OB35_PRIORITY : BYTE ; //Priority of OB Execution
OB35_OB_NUMBR : BYTE ; //35 (Organization block 35, OB35)
OB35_RESERVED_1 : BYTE ; //Reserved for system
OB35_RESERVED_2 : BYTE ; //Reserved for system
OB35_PHASE_OFFSET : WORD ; //Phase offset (msec)
OB35_RESERVED_3 : INT ; //Reserved for system
OB35_EXC_FREQ : INT ; //Frequency of execution (msec)
OB35_DATE_TIME : DATE_AND_TIME ; //Date and time OB35 started
SFC67_RET_VAL : INT ; //Rückgabewert aus SFC 67
RET_VALUE : INT ;
SFC67_BUSY : BOOL ; //Empfangen abgeschlossen/läuft
RETURN : BOOL ;
END_VAR
BEGIN
NETWORK
TITLE =Kommunikation mit Kommunikationspartner über MPI-Bus
//DB121 wird von DBB0 bis DBB55 übertragen)
//Im Kommunikationspartner sind für die Übertragung KEINE Eingriffe erforderlich!
CALL SFC 67 (//Aufruf des Bausteins X_GET
REQ := TRUE,//Übertrage Daten (Ja/Nein)?
CONT := TRUE,//Verbindung aufrecht erhalten (Ja/Nein)?
DEST_ID := W#16#3,//MPI-Adresse des Kommunikationspartners
VAR_ADDR := P#DB121.DBX0.0 BYTE 56,//Pointer auf die Variablenadresse im Kommunikationspartner
RET_VAL := #SFC67_RET_VAL,//Statusanzeige, negativ wenn ein Fehler auftritt
BUSY := #SFC67_BUSY,//SFC aktiv?
RD := P#DB121.DBX0.0 BYTE 56);//Pointer auf die Adresse, in die die Empfangsdaten geschrieben werden
NETWORK
TITLE =Kommunikation mit Kommunikationspartner beendet ?
//Nach erfolreicher Ausführung der SFC67 enthält #SFC67_RET_VAL die Anzahl der
//richtig übertragenen Bytes
U( ;
L #SFC67_RET_VAL;
L 56; // 38 HEX
<>I ;
) ;
L S5T#200MS;
SE T 0; // Timer 0
NOP 0;
NOP 0;
NOP 0;
U T 0;
= #RETURN;
END_ORGANIZATION_BLOCK
 
Zuletzt bearbeitet:
Ich habe nochmals eine Frage:

Ich habe 2 SPSen, eine 315-2DP (Slave) und eine 313C-2DP (Master), gemäß eurer Anleitung miteinander vernetzt.

Wenn ich nun an der Master - SPS Daten in das AW 0 schreibe, so sollten diese gemäß Projektierung an die Slave - SPS ins EW 0 geschrieben werden, von wo aus diese gelesen werden.

Leider erhalte ich am EW0 ausschließlich Nullen.

Das Lesen und Schreiben der Profibusdaten erfolgt ausschließlich im OB1.

Kann mir jemand verraten wo ich (erneut) mit der Fehlersuche beginnen soll? :confused: :confused: :confused:


€dit: Bei der Verwendung des Befehls SFC15, um die Daten auf diese Art und Weise an die andere Steuerung zu bringen, kann maximal Double - Werte angeben und ich erhalte die Fehlermeldung "Beim Zugriff auf die Peripherie wurde ein (Zugriffs)Fehler erkannt".
Was hat das zu bedeuten?
Die Siemens - Doku verrät leider nichts außer diesem Satz.
 
Zuletzt bearbeitet:
Hallo
Wenn du möchtest schicke ich dir ein Beispielprogramm, das seit 6 Monaten in Betrieb ist (DP Bus 2XCPU 315 2DP).
 
Zurück
Oben