TIA Struktur beschreiben mit Peripheriewerten

mrtommyt

Level-2
Beiträge
135
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
irgendwie stoße ich immer wieder auf das gleiche Problem. Folgendes: ein Achsantrieb soll über PN eingebunden werden. Hierzu stellt der Hersteller einen Variablenhaushalt auf Seite des Antriebs zur Verfügung. Aus diesen bastel ich mir einen schönen PLC-Datentyp, welcher aus Strukturen besteht. Diese bestehen teilweise aus Dint, Int aber auch Bool´s.
Jetzt ist es so, das in der HW zB. nur Module mit 4Wörtern zur Übertragung angeboten werden. Diese möchte ich natürlich meiner Struktur zuordnen.
Über DPRD_DAT ziehe ich mir diese nun in einen Temporären Bereich.
#tError := DPRD_DAT(LADDR := "MCON~Input_4_word_1", RECORD => #tStatusMCON."4_Word_1");
...

Diesen würde ich jetzt gerne meinem Struct aus dem PLC-Datentyp überstülpen und da haperts irgendwie...

Jemand ne schöne Idee? evtl. Blckmov (da komm ich aber nich wirklich klar mit;) ).

schonmal Danke vorab.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
in der Hardwarekonfig musst du den Modulen ja eine Eingang, bzw. Ausgangsadresse zuweisen. Richtig?
Wenn du dann in einer Variablentabelle eine Variable mit Datentyp deiner Struktur anlegst, kannst du die Anfangsadresse übergeben. Sollte reichen
 
Aus diesen bastel ich mir einen schönen PLC-Datentyp, welcher aus Strukturen besteht. Diese bestehen teilweise aus Dint, Int aber auch Bool´s
Dies scheint mir mehr als was in 4 Wörter gepackt werden kann.
Wenn nur 4 Wörter übertragen werden, dann gibt es vermutlich eine Telegramm-Mechanismus der die Daten über mehrere Schreib oder Lese Zyklen sendet.
Um welchen Antrieb handelt es ?
Vielleicht gibt es ein Programmbeispiel oder ein Bibliotek den man verwenden kann.
 
Also es werden 14 x 4Wörter übertragen. Es ist ein Controller von IAI. Die Struktur, welche ich mir angelegt habe besteht z.B. wie folgt:
1. Wort als Struct mit Bools
2. Wort als Struct mit Bools
3.-8. Wort jeweils einzelne Wörter
Array 1..6 of struct
Dint
Dint
int
int
int
int

da ich aber über DPRD-DAT nur die vier Wörter jeweils lesen kann (14x) bin ich jetzt dabei das zu vereinzeln…

bin leider höchstwahrscheinlich Montag am Rechner…
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dann würde ich vom DPRD_DAT weg gehen, ansonsten musst du die Variablen händisch zusammenstückeln.

Einfach einen UDT definieren, der den ganzen Adressraum abdeckt und diesen dann über den Ein-/Ausgangsbereich legen.
 
da ich aber über DPRD-DAT nur die vier Wörter jeweils lesen kann (14x) bin ich jetzt dabei das zu vereinzeln…
Mit DPWR_DAT und DPRD_DAT kann man so viele Daten übertragen wie es in eine Gruppe von konsistente Daten konfiguriert ist.
Vielleicht hat man von versehen die Profinet Daten in konsistente Gruppen von nur 4 Wörter konfiguriert ?

Kannst du ein Bild von die Hardware Konfiguration für den Gerät posten, wo man die E/A Bereiche sehen kann ?
 
Zuletzt bearbeitet:
Hab mal ein paar Bilder reinhängt, ist aber noch nicht vollständig. Mir ist das zu umständlich dieses Bitgeklimper...ich denke mal ihr wisst was ich mein.
 

Anhänge

  • HW_01.png
    HW_01.png
    67,7 KB · Aufrufe: 59
  • PLC-Datentyp_01.png
    PLC-Datentyp_01.png
    143,2 KB · Aufrufe: 57
  • Read_01.png
    Read_01.png
    200,3 KB · Aufrufe: 57
Hab mal ein paar Bilder reinhängt, ist aber noch nicht vollständig. Mir ist das zu umständlich dieses Bitgeklimper...ich denke mal ihr wisst was ich mein.
Das sieht Faul aus.
Kann es wirklich sein, dass 14 Eingangsbereiche und 14 Ausgangsbereiche konfiguriert sind ?
Und die Symbolische Namen sind "Input_word_xx" obwohl 4 Bytes pro Bereich konfiguriert sind, also ein Doppel-Wort, nicht ein Wort.

Das eintippen von jeden Signal sollte nicht notwendig sein. Man erstellt ein Struktur, eventuel ein verschacktelte Struktur und kopiere dies in ein Rutch. Entweder mit DPRD_DAT oder wie ioStart und circlehook vorschlägt man legt die EA als ein Struktur an.

Es sieht verdächtig aus.
Genau welchen Gerät ist es ?
Gibt es ein Dokumentation oder ein TIA Beispielprojekt für das Gerät ?
 
Ja Jesper, es sind 14 x4 E und 14x4A und nicht Doppelwörter, sonder Vierfachwörter....siehe Bilder.
Es handelt sich um eine IAI MCON-Steuerung mit 4Achsen, verteilt auf drei Achskarten.
Beispielprojekte habe ich leider nicht dazu gefunden/bekommen.
Mit einer Struct über den EA-Bereich habe ich noch nicht gearbeitet. Meint Ihr , das ein EA-Bereich eingelesen und der auf die Strucktur geschoben wird? Also ohne DPR_DAT sondern mit dem erwähnten Block_move?
 

Anhänge

  • 2022-11-11 (4).png
    2022-11-11 (4).png
    796,9 KB · Aufrufe: 27
  • 2022-11-11 (5).png
    2022-11-11 (5).png
    131,6 KB · Aufrufe: 25
  • 2022-11-11 (6).png
    2022-11-11 (6).png
    235,8 KB · Aufrufe: 23
  • 2022-11-11 (7).png
    2022-11-11 (7).png
    228,3 KB · Aufrufe: 27
Hallo,

verwundert mich auch dass der DPRD anscheinend nicht funktionieren soll.
Die Methode den Datentyp direkt in der Symboltabelle mit Eingängen zu deklarieren funktioniert zwar, finde ich persönlich aber nicht so gut.

Vielleicht schaust du dir noch den GETIO Befehl an, der liest auch von einem Submodul alle Daten konsistent ein.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
verwundert mich auch dass der DPRD anscheinend nicht funktionieren soll.
DPRD_DAT/DPWR_DAT müssen für jeden Steckplatz/Slot eines Devices einzeln aufgerufen werden, können nicht mehrere Steckplätze/Slots zusammen lesen/schreiben.
 
Mein Fehler, ich hatte nicht bemerkt es sind 8 Bytes pro 'slot'. Also ja 4 Wörter.

DPRD_DAT dient zu dass man ein ganzen Bereich konsistent lest. Und dann nur wenn die Steuerung ein S7-300 oder S7-400 ist. In S7-1500 sind alle EA Teil von das Prozessabbild und damit konsistent.
Wenn die CPU ein S7-1500 ist, dann ist die einfache Lösung die EA als Struktur anzulegen.
 
Hallo,

verwundert mich auch dass der DPRD anscheinend nicht funktionieren soll.
Die Methode den Datentyp direkt in der Symboltabelle mit Eingängen zu deklarieren funktioniert zwar, finde ich persönlich aber nicht so gut.

Vielleicht schaust du dir noch den GETIO Befehl an, der liest auch von einem Submodul alle Daten konsistent ein.

Aus Interesse, wieso ist es deiner Meinung nach schlecht, E/A's per UDT zu definieren?

Soweit mir bekannt ist, arbeitet der GETIO intern auch mit DPRD_DAT.
Und somit müssen alle Submodule einzeln eingelesen werden und auf die gewollte Struktur händisch gestückelt werden.
Wo ist hier der Vorteil?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Aus Interesse, wieso ist es deiner [Rabi] Meinung nach schlecht, E/A's per UDT zu definieren?
mMn ist da kein Nachteil.
Es wird vermutlich nicht notwendig, aber wenn der Hersteller das Schnittelle ändern wurde, dann musste man nur einmal die UDT modifizieren und nicht jeden Instanz von das Schnittstelle.
 
Aus Interesse, wieso ist es deiner Meinung nach schlecht, E/A's per UDT zu definieren?

Soweit mir bekannt ist, arbeitet der GETIO intern auch mit DPRD_DAT.
Und somit müssen alle Submodule einzeln eingelesen werden und auf die gewollte Struktur händisch gestückelt werden.
Wo ist hier der Vorteil?

Hallo,
hat nichts mit der Möglichkeit an sich zu tun, es passt einfach nicht in mein Programmierschema ;)
 
Zurück
Oben