TIA Kommunikation S7-1500 mit PN Device

TimeOUT

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

ich habe ein Projekt zur Ansteuerung eines Profinet-Slaves bekommen. Das Projekt ist vorher in Step7 entwickelt worden und soll nun für das TIA Portal aufgerüstet werden.

Das Problem tritt bei der Kommunikation mit dem PROFINET IO-Device auf.
In Netzwerk 2 des FB32 wird SFC15 (DPWR_DAT) aufgerufen. In Step 7 wurde der RECORD Parameter mittels "zusammengebastelten" Any-Ptr belegt, was auch damals wunderbar funktioniert hat. Allerdings funktioniert das in TIA nicht mehr und er verlangt den Datentyp VARIANT.

Ich habe mich schon durch unzählige Hilfen gelesen, aber es möchte nicht funktionieren (Fehler: 8092 wird immer zurückgeliefert)
Soweit ich das verstanden habe kann ich doch dort die Struktur angeben, welche ich übertragen möchte ohne vorher einen Pointer zu erstellen.

Code:
      CALL  DPWR_DAT
         LADDR   :=264
         RECORD  :="InstDB".Head_1.OutData
         RET_VAL :=#Head_1.Ret_Val_SFC15

In der BLKMOV Funktion wird neuedings auch VARIANT verlangt. In der Hilfe wird mittels Pointer und der Anfangsadrersse der zu übertragenden Daten gearbeitet. Aber mit den neuen optiomierten FB's ist es mir doch (ohne extra Umstellung der Bausteineigenschaften) eigentlich nicht "erlaubt" mit den absolut Adrerssen zu arbeiten, erwünscht ist das Arbeiten mit den symbolischen Namen.

Die Hilfe verwirrt mich, warum wird es so verlangt aber selbst in den Hilfen anders durchgeführt??

Habe das Projekt mal angehängt und im FB den Aufruf in Netzwerk 2 markiert.

Vielen Dank schon mal im Voraus

Gruss
 

Anhänge

  • Projekt1.rar
    1,9 MB · Aufrufe: 5
Die Fehlermeldung besagt doch: "Am Parameter RECORD wurde ein anderer Datentyp als (Array of) Bitfolge oder Ganzzahl angegeben."

Du kannst keinen STRUCT übergeben... da liegt das Problem...
(und ich glaube, bin mir aber grad nicht sicher, mag das TIA nicht, wenn man Sachen aus einem Instanz-Datenbaustein lesen, schreiben will, sofern es nicht im FB selber ist. Aber wie es mit DPWR_DAT im FB aussieht kann ich nicht sagen).
Aber probier doch einfach statt RECORD:= "InstDB".Head_1.OutData das hier RECORD:=#Head_1.OutData

Nur der Datentyp wäre noch falsch...
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Okay

Ich habe noch einen globalen DB erstellt (bereits im hochgeladenen Projekt "DBTest" [DB1])
Dort verwende ich eine UDT, welcher meine Output-Daten speichert.
Müsste ich nicht dann mit RECORD= "DBTest".Data das Problem beheben?
Funktioniert aber leider auch nciht.
 
Hallo shutdown,

das ghabe ich in der Zwischenzeit probiert und so funktioniert es auch.
Allerdings finde ich, dass das nicht so eine schöne Lösung ist, da meine Bytes in der Struktur je nach Funktion einen Namen hatten.
In einem Array haben sie ja alle den gleichen namen nur unterschiedliche Indizes.
Wenn es allerdings nicht anders funktioniert, muss es wohl so sein.

Danke dir
 
Hallo,

habe es jetzt hinbekommen.
Eine Kleinigkeit wäre da allerdings noch. Ich benutze BLKMOV um die 64 Byte aus dem einem Array im "TestDB" in ein anderes 64-Byte Array im "TestDB" zu kopieren.

BLKMOV möchte aber keine symbolischen Adressen an den Eingängen übergeben bekommen... sondern nur absolute mittels Pointer...
Aber spricht das nicht gegen das optimierte Zugriffsprinzip??
In meinem Fall:

Code:
      CALL  BLKMOV
         blk_type:=Variant
         SRCBLK  :=P#DB2.DBX256.0 BYTE 64 
         RET_VAL :=#RetVal_SFC20
         DSTBLK  :=P#DB2.DBX64.0 BYTE 64

Optimaler wäre doch aber:

Code:
      CALL  BLKMOV
         blk_type:=Variant
         SRCBLK  :="DBTest2".Memory //P#DB2.DBX256.0 BYTE 64 
         RET_VAL :=#RetVal_SFC20
         DSTBLK  :="DBTest2".Head1_InData //P#DB2.DBX64.0 BYTE 64

oder nicht?
Zweiteres funktioniert nur wenn DB nicht optimiert ist :???:
Angenommen der Name/Nummer des DB's wird geändert passt TIA doch die Pointer nicht autom. an!?

Gruss
 
Capture_kk.PNG


Code:
      CALL  MOVE_BLK
         value_type:=Byte
         count_type:=UInt
         IN    :="DBTest2".Memory[0]
         COUNT :=10
         OUT   :="DBTest2".Head1_InData[0]
Wie schaut es mit dieser Anweisung aus?

Vllt wäre MOVE_BLK_VARIANT eine Alternative. Schau in der Hilfe nach, wie was eingestellt werden muss.

BLKMOV findest du unter "Verschieben --> Weitere" und dieser arbeitet mit Pointer, also absolut... Da steht auch als Hindweis:
Hinweis Die Variablen der Anweisung können Sie nur in Datenbausteinen verwenden, bei denen das Attribut "optimierter Bausteinzugriff" nicht gesetzt ist. Wenn die Variable mit der Remanenzeinstellung "Im IDB setzen" deklariert wurde, können Sie die Variablen auch "mit optimiertem Zugriff" verwenden.
Und wenn mich nicht alles täuscht, ist das nicht "beste" Variante
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Super!!

Ich hatte es mit MOVE_BLK auch schon probiert, aber da hat es nicht funktioniert...
Grund: Mir war nicht bewusst, dass man die beiden Auswahlkästchen auch eintragen muss :rolleyes: Peinlich
Aber so funktioniert es, auch mit optimierten Zugriff.

Perfekt

Vielen Dank!!
 
Eine Frage hätte ich dann doch nochmal:

Gibt es im TIA Portal eine vorgefertigte Funkltion, welche mir auch Strukturen mit unterschiedlichen Datentypen an eine Baugruppe überträgt?
Oder muss ich notgedrungen meine "gemischten" Datentyp Strukturen auflösen und in Byte_Arrays umwandeln?

Gruß
 
Zurück
Oben