DB Werte an DP/DP Koppler

superkato

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

ich hab mal dafür ein extra Thread aufgemacht weil das sonst im anderen vielleicht untergeht.

Ich hab jetzt mein DB20 (1Byte) als Eingang und mein DB21(8Byte bzw. 2 Doppelworte) als Ausgang.

In meinem Profibus DP hab ich den DP/DP Koppler (Profibus DP Adresse 10) reingehauen und auch dort die Eingänge und Ausgänge parametriert bzw. in die Steckplätze geschoben.

Wie bringe ich nun meine DB's an den DP/DP Koppler bzw. wie weise ich die zu?

Steckplatz 1:
1 Byte Eingang
DP Kennung=8DE
E-Adresse:0

Steckplatz 2:
8 Byte Ausgang
DP Kennung=39
A-Adresse: 0...7


mfg
skato
 
Code:
//Eingänge aus DP-Koppler einlesen und in DB schieben
L EB0
T DB20.DBB0

//Ausgänge aus DB einlesen und in DP-Koppler schieben
L DB21.DBB0
T AB0
...
L DB21.DBB7
T AB7

hf & gl
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
...//Ausgänge aus DB einlesen und in DP-Koppler schieben
L DB21.DBB0
T AB0
...
L DB21.DBB7
T AB7

Das byteweise Schreiben auf die Peripherie mag ja klappen, so lange da nur einzelne Bitsignale drin sind, dann merkst Du von Dateninkonsistenz selten was.
Wenn da aber Worte oder Doppelworte als Werte (Zahlen, kardinal oder Real) drin liegen, kannst Du Dir damit Probleme einhandeln. Also besser bis vier Byte die Wort- oder Doppelwort-Befehle benutzen und bei größeren Bereichen die entsprechenden Systemfunktionen zum Schreiben oder Lesen der DP-Peripherie benutzen.
Gruß
Erich
 
Das byteweise Schreiben auf die Peripherie mag ja klappen, so lange da nur einzelne Bitsignale drin sind, dann merkst Du von Dateninkonsistenz selten was.
Wenn da aber Worte oder Doppelworte als Werte (Zahlen, kardinal oder Real) drin liegen, kannst Du Dir damit Probleme einhandeln. Also besser bis vier Byte die Wort- oder Doppelwort-Befehle benutzen und bei größeren Bereichen die entsprechenden Systemfunktionen zum Schreiben oder Lesen der DP-Peripherie benutzen.
Gruß
Erich

Da ja aber AB und nicht PAB verwendet wird macht das ja nichts da das AB eh erst am Zyklusende auf die Peripherie geschrieben wird!
 
Ah, OK danke!

also ist es generell so als würde ich mit einem DP Slave arbeiten.

Wenn ich z.B. die PB-DP-Slave Adresse 245 hab, dann nutze ich

L EB 245
T DB21.DBB0

...

wenn ich aber jetzt vom EB 245 nur das erste bit haben will dann benutz ich

Also das nullte bit vom Byte 245 zu Das Bit 0.3 im DB21

L EB 245.0
T DB21.DBX0.3

ist das so korrekt?

mfg
sk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da ja aber AB und nicht PAB verwendet wird macht das ja nichts da das AB eh erst am Zyklusende auf die Peripherie geschrieben wird!
Passiert das immer konsistent?
Ich habe noch nie drüber nachgedacht.
Wenn ich Wert auf konsistente Daten lege, hole ich sie immer selbst ab, bzw schreibe sie weg.
Gruß
Erich
 
Ah, OK danke!

also ist es generell so als würde ich mit einem DP Slave arbeiten.

Wenn ich z.B. die PB-DP-Slave Adresse 245 hab, dann nutze ich

L EB 245
T DB21.DBB0

...

wenn ich aber jetzt vom EB 245 nur das erste bit haben will dann benutz ich

Also das nullte bit vom Byte 245 zu Das Bit 0.3 im DB21

L EB 245.0
T DB21.DBX0.3

ist das so korrekt?

mfg
sk

byte_to_bit ?

Code:
L EB 244
T DB21.DBB0
L EB 245
T DB21.DBB1

oder

Code:
L EW 244
T DB21.DBW0


dann

Code:
U DB21.DBX0.0
=....
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
By the way.
Der Datenaustausch über der DP/DP-Koppler wird mit ein anzahl Bytes konfiguriert. Darunter spezifizieren man ob das Bereich konsistent werden soll oder nicht.
Wenn das ganze Bereich konsistent werden muss (empfohlen), und es ist grösser als 4 bytes, und es befindet sich ausserhalb vom Prosezabbild, dann muss man SFC14 und SFC15 verwenden.
 
Wenn ich z.B. die PB-DP-Slave Adresse 245 hab, dann nutze ich

L EB 245
T DB21.DBB0

Achtung!
Nicht die DP-Adresse mit der zugewiesenen E-Adresse verwechseln.

Über die DP-Adresse wird (bei deinem Bespiel) das DP/DP-Koppler-Modul erreicht. Diesem Modul hast du in der HW-Config Eingänge/Ausgänge zugewiesen.

Diese E/A musst du als Adresse im Programm benutzen.

Noch ne Anmerkung:
EB245 (EB=im PAE, ProzessAbbild der Eingänge) ist nicht bei allen CPUs verfügbar, meist 0..127. CPU-Daten nachsehen.
Falls du auf Adressen oberhalb des PAEs zugreifen willst, must du
L PEB, PEW oder PED verwenden, je nach Zugriffsbreite.
(B=Byte=8Bit, W=Word=2Byte=16Bit, D=Doppelword=4Byte=32Bit)
Das gleiche gilt auch für die Ausgänge.

Beachte auch den Hinweis von JesperMP
Falls du was nicht verstehst, nachfragen!

Gruß Roland
 
Achtung!

...


Beachte auch den Hinweis von JesperMP
Falls du was nicht verstehst, nachfragen!

Gruß Roland

- Ich benutze eine 314C-2DP ... http://support.automation.siemens.c...d=content&prodLstStart=21&prodLstSort=MLFBSTR

- Ich verstehe das von JesperMP nicht. Was ist denn der unterschied überhaupt zu konsistent. Ich hab das nur gemacht weil man mir gesagt hat ich soll konsistent benutzen.

ich hab an meinem Profibus DP Netz , noch 4 weitere Geräte mit den Adressen 4 bis 7 diese haben auch Eingänge und Ausgänge der höchste Wert ist bei dem letzem Slave E 351 und der A 327.

Dort sind bspw. im Byte 350, 7 Bits drin die jeweils für verschiedene Stauts-Funktionen stehen (Motor einschalten, pausieren, lampe einschalten, etc. jeweils ein Bit)

ich hatte vor diese Bytes bzw. das EB 351 in einen DB zu laden un dann den die Werte aus dem DB zu nutzen. bzw. diese dann wieder an den DP/DP koppler senden bspw. an das A210 oder so.

ist das problematisch? ich versteh das nicht ganz mit dem ProzessAbbild Problem.

Danke für die Hilfe !
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
- Ich verstehe das von JesperMP nicht. Was ist denn der unterschied überhaupt zu konsistent. Ich hab das nur gemacht weil man mir gesagt hat ich soll konsistent benutzen.

ich hab an meinem Profibus DP Netz , noch 4 weitere Geräte mit den Adressen 4 bis 7 diese haben auch Eingänge und Ausgänge der höchste Wert ist bei dem letzem Slave E 351 und der A 327.

Dort sind bspw. im Byte 350, 7 Bits drin die jeweils für verschiedene Stauts-Funktionen stehen (Motor einschalten, pausieren, lampe einschalten, etc. jeweils ein Bit)

ich hatte vor diese Bytes bzw. das EB 351 in einen DB zu laden un dann den die Werte aus dem DB zu nutzen. bzw. diese dann wieder an den DP/DP koppler senden bspw. an das A210 oder so.

ist das problematisch? ich versteh das nicht ganz mit dem ProzessAbbild Problem.

Also,
Das Prozessabbild der Eingänge PAE ist ein Speicherbereich, inden die CPU am Anfang des Zyklus den Zustand aller Eingänge die im PAE-Bereich sind, ablegt. Dieser Bereich ist normal E0.0 bis 127.7, bei manchen CPUs auch grösser einstellbar. Vorteil davon ist, dass wenn in deinem Programm an verschiedenen Stellen der gleiche Eingang abgefragt wird, dieser innerhalb dem Bearbeitungszyklus den gleichen Zustand hat. Auch wenn er sich mittlerweile schon geändert hat. Dies wird erst mit dem nächsten Zyklus erkannt.

Genauso werden alle Ausgänge im PAA (ProzessAbild der Ausgänge)
nicht sofort an der Anweisung im Programm, sondern am Ende des Zyklus nach "außen" geschrieben.

Dadurch sind diese Ein- und Ausgänge konsistent, d.h. ihr Zustand (0 oder 1) entspricht dem gleichen Zeitpunkt.

Im Gegensatz dazu:
Wird auf Ein-Ausgänge oberhalb des PAE/PAA zugegriffen, erfolgt konsistenter Zugriff nur innerhalb der Zugriffsbreite.

L PEW Liest genau an dieser Anweisung im Programm ein EingangsWord

wird jetzt danach ein weiteres Word mit L PEW gelesen und die beiden Wörter beinhalten zusammengehörige Informationen, dann kann/ist der gelesene Zustand nicht konsistent, da er zu verschiedenen Zeitpunkten gelesen wurde.
Dies ist ganz wichtig bei DP-Moduln, wie Frequenzumformern usw., da diese meist mehrere Wörter als Schnittstelle benutzen.
Die Info vom/zum FU muss konsistent erfolgen.

Die Konsistenz ist auch ausserhalb des PAE/PAA gegeben, wenn mit Byte, Word oder Doppelword auf zusammengehörige Daten zugeriffen werden kann.
Sind es mehr als 4Byte, muss mit SFC14, bzw SFC15 zugegriffen werden.

Wieso sind eigentlich deine Adressen so hoch (350..)
Trag doch niedrigere ein (evtl Haken "Systemvorgabe" entfernen.

Wenn du im PAE/PAA-Bereich jede Menge frei hast, nimm doch dort welche.

Gruß Roland
 
ahh ich verstehe! ok das konnte ich nicht wissen.
Also ist es auch sinnvoll die E- und A-Adressen der slaves runterzusetzen. Die eingestellten Werte waren ja Systemvorgaben.
Dann stell ich das mal so um das es bei 1 anfängt.

Kann sich das ggf. überschneiden wenn ich etwas im MW10 oder MD20 speichere? oder sind die speichern voneinander getrennt bzw. haben nichts mit einandner zu tun?
 
Dann stell ich das mal so um das es bei 1 anfängt.

Kann sich das ggf. überschneiden wenn ich etwas im MW10 oder MD20 speichere? oder sind die speichern voneinander getrennt bzw. haben nichts mit einandner zu tun?

Überschneiden kann sich da nix. Eingänge, Ausgänge und Merker haben jeweils ihre eigenen Bereiche.

Aber mit 1 würde ich nicht anfangen. Immer gradzahlig.
Für diese DP-Geschichte würde ich einen Bereich im oberen PAE/PAA wählen
zB 64, 80 oder 96, damit für "normale" Peripherie mit 0 begonnen werden kann (muss nicht).
Auch würde ich pro DP-Modul die Ein und Ausgänge mit der gleichen Startadresse belegen (ausser du kannst dir den Luxus nicht leisten, da viel Peripherie).
Ist alles Ansichtsache.

Gruß Roland
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ah ok :) gut zu wissen. also ich hab das jetzt so gemacht (siehe bilder)

Die Perepherie also die hardware eingänge sind allerdings im letzten PA PE Bereich weil vorgabe.






SO nun muss ich aber mal anfangen die Bits in die DB's zu schreiben sonst werd ich nicht fertig :D

Und wenns mehr als 4 Bytes sind werde ich die SFC's verwenden wie empfohlen.
 
Das ist ja schon ein Adressen-Durcheinander, aber OK.

Wenn du mal nicht weiterweist, einfach die Programmstelle markieren und F1 drücken.

Viel Erfolg
 
Vielen Dank! Ich hab wirklich eine Menge gelernt. Nebenbei bau ich ein HMI auf das mir entsprechende Status Meldungen anzeigt. Da komm ich ganz gut mit dem Handbuch und PDF's zurecht.


Eine kleine Frage wäre noch.

Kann für DB Bit's keine Symbolnamen geben ? z.B.
DB20.DBX0.7 = "Watchdog"

In der Symboltabelle akzeptiert der das nicht.

Ich schulde dir ein Kaffe !
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank! Ich hab wirklich eine Menge gelernt. Nebenbei bau ich ein HMI auf das mir entsprechende Status Meldungen anzeigt. Da komm ich ganz gut mit dem Handbuch und PDF's zurecht.


Eine kleine Frage wäre noch.

Kann für DB Bit's keine Symbolnamen geben ? z.B.
DB20.DBX0.7 = "Watchdog"

In der Symboltabelle akzeptiert der das nicht.

Ich schulde dir ein Kaffe !

Nee Symbole für DB-Bits gehen nicht! Nur für die DBs
 
Nee Symbole für DB-Bits gehen nicht! Nur für die DBs

Will heißen:
Du kannst im DB (bei dir DB20) einem Bit (zB DBX0.7) bei "Name" schon Symbolik eintragen (zB. Watchdog).
Wenn du jetzt noch in der Symbolliste diesem DB20 eine Symbolik zuweist,
(zB My_DB), so wird bei einer Anweisung zB U DB20.DBX0.7 (falls du MIT Symbolik eingestellt hast) U My_DB.Watchdog erscheinen.

Ich hoffe, ich konnte es rüberbringen...

Gruß Roland
 
Zurück
Oben