TIA Datenbaustein in PN/PN Koppler schieben

Daniel412

Level-1
Beiträge
31
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen,
ich brauche für ein Projekt ein Datenaustausch von einem DB und einem PN/PN Koppler.
Ich habe meinen PN/PN Koppler wie folgt angelegt.
1655274882917.png
Ich habe zwei DB angelegt einen für In und einen für Out. Diese bestehen aus Real, Bool und Word.
Ich hatte es versucht mit Move_BLK_Variant oder mit den DPWR_DAT oder DPRD_DAT zu verschieben.
Nur dies hat nicht so gut geklappt deswegen würde ich mich über eine Beispiel Programmierung freuen oder ein paar Tipps?
Programmiert wird mit Tia V15.1.
Vielen Dank.

Gruß Daniel
 
Ich weiß nicht wie ich die Adresse des PN PN Koppler an den Eingang LADDR schreibe. An RECORD habe ich den DB gezogen.
Benutze eine CPU 1515F-2 PN
 
Die folgende Tabelle zeigt die Parameter der Anweisung "DPRD_DAT":



ParameterDeklarationDatentypSpeicherbereichBeschreibung
LADDRInputHW_IOE, A, M, L oder KonstanteHardware-Kennung des Moduls, aus dem die Daten gelesen werden sollen.

Die Hardware-Kennung entnehmen sie den Eigenschaften des Moduls in der Gerätesicht oder den Systemtemkonstanten.
RET_VALReturnINTE, A, M, D, LTritt während der Bearbeitung der Anweisung ein Fehler auf, enthält der Rückgabewert einen Fehlercode.
RECORDOutputVARIANTE, A, M, D, LZielbereich für die gelesenen Nutzdaten.


Die Hardwarekenndung findest du an 2 unterschiedlichen Stellen:

PLC-Variablen/Systemkonstanten. Dort dann deinen Koppler bzw. das Hw_SubModule des Eingangsmoduls suchen

oder

In Geräte & Netze/ den Koppler anklicken/ unten das Eigenschaftsfenster öffnen / Reiter Sysxtemkonstanten

Hier ein *LINK* dazu

EDIT:
Gilt natürlich auch für den DPWR_DAT
Zu erwähnen wäre noch, das die Länge im DB auch der I-Länge bzw. Q-Länge des Kopplers entsprechen muss. Für jedes Hw_SubModule kannst du die jeweilige Anweisung aufrufen und entprechend beschalten.

-chris
 
Es hat soweit funktioniert, jetzt habe ich aber noch ein kleines Problem.
Mein DB ist 280 Byte groß und ich habe zweimal OUT in meinen PN PN Koppler mit jeweils 128 byte. Die ersten 128 Byte meines DB in meinen PN PN Koppler zu verschieben ist kein Problem wie kann ich jetzt die nächsten 128 Byte meines DB in mein zweites OUT von dem PN PN Koppler verschieben. In den zweiten PN Koppler ist ja kein Problem aber die Bytes 129-280 von meinem DB bekomm ich nicht angesprochen
Danke
 
Ich habe jetzt folgendes Problem ich habe an den Baustein jetzt dies dran geschrieben
1655298966574.png
Dies ist jetzt der Baustein um meine zweiten 128 Bytes zu senden. Reserve_2 ist jetzt mein 128 Byte und ich sende bis zum 255 Byte. Jetzt bekomm ich aber immer die Meldung 80B1 (Länge des Quellbereichs an Record ist kürzer als die Ausgänge des PN PN Kopplers). Auch wenn ich mehr Bytes anlege in meinem DB kommt die selbe Fehlermeldung.
Wenn ich aber jetzt die Variablen Adressbereich 128-255 in ein extra DB schreibe und dies dann versuch zu verschieben bekomm ich keine Fehlermeldung mehr.
Vllt weiß ja jemand und kann mir sagen von welcher bis welcher Adresse ich in mein PN PN Koppler schieben muss.

Vielen Dank für eure Hilfe
 
Auch wenn ich mehr Bytes anlege in meinem DB kommt die selbe Fehlermeldung.
Die mehr Bytes dürfen nicht irgendwo in dem DB liegen, sondern müssen in der Struktur liegen, die da an RECORD verschaltet wird, so daß die Struktur die Länge 128 Bytes hat. Anscheinend hast Du nur eine einzige Variable mit 4 Byte Länge da verschaltet: %DB107.DBD128
Schau Dir nochmal die Struktur des DB107 an, wo Du die mehr Bytes angelegt hast. Im Zweifelsfall zeige uns die Struktur.

Also im DB107 ab 128.0 müsstest Du am besten eine Struktur Reserve_2 haben, und in die Struktur legst Du Deine Variablen die Du senden willst, im einfachsten Fall ein Array[0..127] OF Byte, so daß die Struktur Reserve_2 genau 128 Bytes lang ist. Danach musst Du die Programmänderungen auch in die SPS laden.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Anscheinend hast Du nur eine einzige Variable mit 4 Byte Länge da verschaltet: %DB107.DBD128
Ich dachte dadurch sag ich das ich ab der Variable %DB107.DBD128 anfange.
Hier mein DB ich würde diesen gerne so beibehalten und nicht ändern.
1655301891544.png
1655301936667.png
bis
1655302029319.png

Vllt kannst du damit ja was anfangen. Dankeschön
 

Anhänge

  • 1655301868189.png
    1655301868189.png
    121 KB · Aufrufe: 10
Im DB107 fasse die zu sendenden Variablen entsprechend den 2 Sendebereichen in 2 Strukturen zusammen:
Code:
Static
  Sendebereich_1 : Struct
    Vorlagetank Wassertemperatur : Real : 0.0
    ...
    Reserve_1 : Real : 124.0
  Sendebereich_2 : Struct
    Reserve_2 : Real : 128.0
    ...
    Static_19 : Real : 252.0
(Erstelle die Zeile "Sendebereich_1 : Struct", dann markiere alle Zeilen mit den Variablen des Bereichs (von 0.0 bis 124.0) und ziehe die Zeilen unter die Struct-Zeile)

An den DPWR_DAT gibst Du dann an RECORD: "NWOW DB 107 NWO_OUT".Sendebereich_2

PS: gewöhne Dir Variablennamen mit Leerzeichen gar nicht erst an, auch wenn die in TIA zulässig sind. In "seriösen" Programmiersprachen gibt es keine Variablennamen mit Leerzeichen.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
NB: Mann darf nicht vergessen das beim PN/PN Koppler mit DPRD_DAT noch ein Byte extra da sein muss => Statusbyte vom Koppler
Und wie @koderko schon meinte, ist es hier definitiv nicht schändlich mit Pointer und BLKMOV zu arbeiten, um deinen Bereich in einem Block zu behalten.
 
NB: Mann darf nicht vergessen das beim PN/PN Koppler mit DPRD_DAT noch ein Byte extra da sein muss => Statusbyte vom Koppler
Hast Du da was mit einem anderen Gerät verwechselt? Bei PN/PN-Koppler gibt es kein extra Statusbyte.

Und wie @koderko schon meinte, ist es hier definitiv nicht schändlich mit Pointer und BLKMOV zu arbeiten, um deinen Bereich in einem Block zu behalten.
koderko zeigte nur die Möglichkeit, wie man unsymbolisch den 128-Byte-Speicherbereich am Eingang RECORD angeben kann, wenn man den Transferbereich nicht zu einer symbolischen Struktur zusammenfasst und mit nicht-"optimierten" DB arbeitet. Man sollte den Bereich heutzutage aber unbedingt symbolisch angeben. Das hat außerdem nichts mit BLKMOV zu tun - BLKMOV geht da sowieso nicht, weil BLKMOV nicht mit Peripherieadressen geht.

Harald
 
Hast Du da was mit einem anderen Gerät verwechselt? Bei PN/PN-Koppler gibt es kein extra Statusbyte.
Nope die GSD PN/PN Koppler von Siemens haben meistens ein DS Byte => IN64 Byte+DS wobei DS DatenStatus ist.

Das hat außerdem nichts mit BLKMOV zu tun - BLKMOV geht da sowieso nicht, weil BLKMOV nicht mit Peripherieadressen geht.
Ist mir schon klar aber jeder PN/PN schreibt ins Prozessabbild und da funktioniert BLKMOV wunderbar.

Man sollte den Bereich heutzutage aber unbedingt symbolisch angeben.
Wenn ich 3 PN/PN Bereiche bekomme, die eine Struktur bilden sollen (ja ist schon so von Fremdfirmen so gemacht worden) dann finde ich ist BLKMOV die sauberste und einfachste Lösung. Denn so ein gewurstel mit Serialize und ich weiss nicht wat find ich ist einfach nur Qutasch, aber alles andere sollte schon symbolisch sein.

Gruß
MCPC10
 
Das wäre mir neu. Habe ich noch nie gesehen.
pnpn.PNG

Das stimmt so natürlich nicht.
Das würde mich aber jetzt wohl interessieren was da nicht gehen soll xD
// Empfangspaket 1 CALL BLKMOV blk_type:=Variant SRCBLK :=P#E20000.0 BYTE 32 RET_VAL :=#Retval DSTBLK :=P#DB2012.DBX0.0 BYTE 32 // Empfangspaket 2 CALL BLKMOV blk_type:=Variant SRCBLK :=P#E20033.0 BYTE 32 RET_VAL :=#Retval DSTBLK :=P#DB2012.DBX32.0 BYTE 32 // Empfangspaket 3 CALL BLKMOV blk_type:=Variant SRCBLK :=P#E20066.0 BYTE 32 RET_VAL :=#Retval DSTBLK :=P#DB2012.DBX64.0 BYTE 32

Gruß
MCPC10
 
Nope die GSD PN/PN Koppler von Siemens haben meistens ein DS Byte => IN64 Byte+DS wobei DS DatenStatus ist.
Ah, man kann ein extra Datenstatusbyte aktivieren, muß aber nicht. Manchem reicht auch ein Bit im ersten Datenbyte.

Ist mir schon klar aber jeder PN/PN schreibt ins Prozessabbild und da funktioniert BLKMOV wunderbar.
Dann bräuchte man gar kein DPRD_DAT.

Wenn ich 3 PN/PN Bereiche bekomme, die eine Struktur bilden sollen (ja ist schon so von Fremdfirmen so gemacht worden)
Warum wird die Struktur dann nicht im DB symbolisch abgebildet?

dann finde ich ist BLKMOV die sauberste und einfachste Lösung. Denn so ein gewurstel mit Serialize und ich weiss nicht wat find ich ist einfach nur Qutasch, aber alles andere sollte schon symbolisch sein.
Mit BLKMOV kann man also wieder prima irgendwelche nicht deklarierten und nicht strukturierten Speicherbereiche absolut adressiert kopieren. Alá Symbolik ist eh nur was für Programmierer die zu viel Zeit haben ;) ?
Das halte ich für überhaupt nicht "sauber." Meine Meinung: bei S7-1500 sollte man BLKMOV endlich nicht mehr brauchen.
Wozu braucht man beim Einlesen mit DPRD_DAT "so ein gewurstel mit Serialize und ich weiss nicht wat"?

Harald
 
Zurück
Oben