Master-Slave Datenübertragen

Rose

Level-1
Beiträge
58
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Kollegen,

ich habe hier zwei CPU 315-2 DP je für Master und Slave eingestellt. Nun möchte ich die alle Daten in DB11 von Slave zu DB12 in Master übertragen, mit SFB 15 kann ich es realisieren. Ein Beispielcode mit SFC 15 habe ich gefunden:

CALL "DPWR_DAT"
LADDR := W#16#64 // Anfangsadresse A 100
RECORD := P#M 10.0 BYTE 16 // Quellbereich für Nutzdaten
RET_VAL := MW100 // Rueckgabewert

meine Frage ist : kann ich mit SFB 15 auch sowas ähnliches schreiben? statt die Anfangsadresse wie kann ich die DB Bereich eingeben? sag mal ich lese die Daten von DB11.DW0 bis DB11.DW20.

vielen Dank im Voraus!

MFG,
rose
 
Zuletzt bearbeitet:
Sfc 15

Hallo Rose,
im Prinzip kannst Du das Problem auf der gleichen Art lösen, und zwar:
RECORD:= P#DB11DBX10.0 BYTE 16

Gruß Ralf
 
Huhu,
vielleicht ist es hilfreich.
Habe zu dem Thema auch gerade erst Hilfe bekommen.

Ich habe es so gelöst:

Code:
      CALL  SFC   14
       LADDR  :=W#16#100
       RET_VAL:=MW100
       RECORD :=P#DB4.DBX0.0 BYTE 12
 
      CALL  SFC   15
       LADDR  :=W#16#100
       RECORD :=P#DB4.DBX12.0 BYTE 12
       RET_VAL:=MW102




und den DB 4
Code:
Appl_Zustandswort_1 WORD W#16#0 Applikationszustandswort 1 vom Umrichter mit der PROFIBUS-Adresse 4 (PZD1) 
Drehzahlistwert DWORD DW#16#0 Drehzahlistwert vom Umrichter mit der PROFIBUS-Adresse 4 (PZD2+3) 
Appl_Zustandswort_2 WORD W#16#0 Applikationszustandswort 2 vom Umrichter mit der PROFIBUS-Adresse 4 (PZD4) 
Positionsistwert DWORD DW#16#0 Positionsistwert vom Umrichter mit der PROFIBUS-Adresse 4 (PZD5+6) 
Appl_Steuerwort_1 WORD W#16#400 Applikationssteuerwort 1 zum Umrichter mit der PROFIBUS-Adresse 4 (PZD1) 
Drehzahlsollwert DWORD DW#16#0 Drehzahlsollwert (Bewertung) zum Umrichter mit der PROFIBUS-Adresse 4 (PZD2+3) 
Appl_Steuerwort_2 WORD W#16#0 Applikationssteuerwort 2 zum Umrichter mit der PROFIBUS-Adresse 4 (PZD4) 
Positionssollwert DWORD DW#16#0 Positionssollwert zum Umrichter mit der PROFIBUS-Adresse 4 (PZD5+6)


Grüsse dir.


Habe da eien Frage,
es ist schon richtig das für weitere FU`s zu den 100 ind LADDR :=W#16#100 immer 12 dazu zähle? Also in HEX dann 10C, 118, 124 etc.
 
maxi schrieb:
Huhu,
vielleicht ist es hilfreich.
Habe zu dem Thema auch gerade erst Hilfe bekommen.

Ich habe es so gelöst:

Code:
      CALL  SFC   14
       LADDR  :=W#16#100
       RET_VAL:=MW100
       RECORD :=P#DB4.DBX0.0 BYTE 12
 
      CALL  SFC   15
       LADDR  :=W#16#100
       RECORD :=P#DB4.DBX12.0 BYTE 12
       RET_VAL:=MW102


hallo maxi,

kannst du vieleicht mir sagen, sind die beide in eine Simatic Station geschrieben oder in zwei verschiedene Slave Stationen? Denn SFC14 und SFC 15 können nur die direkten Datenaustausch zwischen verschiedene DP-Slave realisieren, weiß ich nicht genau, wie kann ich vom Master die gesendete Daten der Sender-Station lesen.

vielen herzliche Dank im Voraus!

Gruß,
Rose
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe gerade das Programm nicht zur Hand,
aber es ist für 1 Slave.
An der laddr= gibt man die Adresse ein. Der eine SFC ist zum schrieben, der andere zum Lesen in den Profibus.
Also ein Slave je einmal beschriben udn einmal gelesen.
 
vielen Dank Maxi, vieleicht habe ich die Adresse falsch eingegeben, die soll mit der im Konfiguration vom Slave eingestellte Adresse übereinstimmen, oder?
 
Zuletzt bearbeitet:
es hat irgendwie nicht geklappt, weiß nicht warum. wenn ich die OB1 beobachte, kriege ich die rechte Tabelle, kann jemand vieleicht mal erklären?
 

Anhänge

  • Unbenannt.JPG
    Unbenannt.JPG
    23,8 KB · Aufrufe: 48
Zuviel Werbung?
-> Hier kostenlos registrieren
8092 In ANY-Referenz ist eine Typangabe ungleich BYTE angegeben.

wenn du das hier symbolisch reinstellst kann man damit nix anfangen.
wie sieht denn dein any-zeiger aus?

einfach mal F1 benutzen!
 
Habe gerade kein Step zur Hand.
Aber bei den SFB müsste doch was mit Wirte udn Read zwischen den "xx" stehen. Und darf sicher nicht 2 mal das gleich stehen.
Kann es sein das du die falschen SFB aufrufst?
 
Habe gerade kein Step zur Hand.
Aber bei den SFB müsste doch was mit Wirte udn Read zwischen den "xx" stehen. Und darf sicher nicht 2 mal das gleich stehen.
Kann es sein das du die falschen SFB aufrufst?

Hi Maxi, meinst du SFB? ich habe hier zwei 315DP und damit kann der Befehlssatz mit den SFB nicht genommen werden. Die 315`ner haben nur Server funktion, deswegen kann ich nur mit SFC versuchen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
8092 In ANY-Referenz ist eine Typangabe ungleich BYTE angegeben.

wenn du das hier symbolisch reinstellst kann man damit nix anfangen.
wie sieht denn dein any-zeiger aus?

einfach mal F1 benutzen!

hi Volker, ich bin noch nicht ganz klar mit dem any-zeiger, habe kein Datentyp ANY im Programm benutzt:confused: weiß nicht wie kann ich diene Frage antworten.
 
das ist mein DB11, ich möchte eigentlich die zahlen ins DP-Mater senden und davon wieder die zahlen auslesen. nun probiere ich zuerst die Daten vom Slave aus und wieder reinkommen, und das klappt auch nicht:(
 

Anhänge

  • Unbenannt.JPG
    Unbenannt.JPG
    36,6 KB · Aufrufe: 17
Die 315`ner haben nur Server funktion, deswegen kann ich nur mit SFC versuchen.

heisst das, das du zwei master hast?
dann geht das sowieso nicht. dazu brauchst du einen dp/dp koppler.

Code:
habe kein Datentyp ANY im Programm benutzt
musst du aber da die sfc diesen erwarten.
wie sieht denn die variable dyn_fehlerdb.... absolut adressiert aus?

so wie du das die sfcs in deinem bild beschaltet hast waren die mit sicherheit rot
welcher bereich soll denn wohin?

TIP:
musst du machen folgendes.
gehe auf sfc15. drückst du f1.
dann kommt fenster mit hilfe. Ahhhhh, so geht das!
dann du gehst du in hilfe tiefer. dort du findest parameter record.
da steht auch datentyp any. du klicken dadrauf. und ahhhh wieder neues hilfefenster wo steht drin wie any-pointer aussehen muss.

f1 funktioniert auf allen befehlen und bausteinen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
heisst das, das du zwei master hast?
dann geht das sowieso nicht. dazu brauchst du einen dp/dp koppler.

erste mal vielen Dank,Volker.
ich habe ein Master und ein Slave, die beide sind 315-2 DP.

musst du aber da die sfc diesen erwarten.
wie sieht denn die variable dyn_fehlerdb.... absolut adressiert aus?

so wie du das die sfcs in deinem bild beschaltet hast waren die mit sicherheit rot
welcher bereich soll denn wohin?.

ja, hmmm, gute Frage, wie kann ich die absolut adresse ergreifen?
 
meine frage war zu schwer.

was soll übertragen werden.
glaube ein db. welcher db? ab welchem datenwort? wieviele worte?

annahme. db12. ab adresse 10. 20 datenworte.

der any-zeiger sieht nun so aus.
p#db12.dbx10.0 byte 40

==>
CALL SFC 15
LADDR :=W#16#64 //anfangsadresse im slave also ab e64.0
RECORD :=P#DB12.DBX 10.0 BYTE 40
RET_VAL:=MW100

du hast auf der master/slaveseite natürlich den pew-bereich ab 64 mit 20 worten in der hwconfig angelegt, oder?
 
jetzt verstehe ich deine Frage, und auch für any-zeiger, aber vorher habe ich doch genau so gemacht. die "dyn_fehlerDB_MUL".FEHLER_1" und "DB12.DBD0" sind automatisch ausgegeben nachdem ich die any-zeiger richtig eingetragen habe.
und die anfangsadresse ist die adresse, die wir im Konfiguration vom Slave eingestellt haben, oder?
 
Zuletzt bearbeitet:
du hast 2 worte deklariert

dann muss der zeiger
p#db12.dbx0.0 byte 4
heissen

nicht dbd0. du must die bitadresse angeben dbx0.0
die ea adresse ist 100
also so

CALL SFC 15
LADDR :=W#16#100 //anfangsadresse im slave also ab e100
RECORD :=P#DB12.DBX 0.0 BYTE 4
RET_VAL:=MW100
 
Zurück
Oben