Step 7 S7 Classic Sensor Ein-/Ausgänge außerhalb des Prozessabbildes einlesen u. beschreiben

Hast du die UDTs 'UDT_Keyence_LJ800E_IN' und 'UDT_Keyence_LJ800E_OUT' von eine eksterne Quelle bekommen ?
Wenn ja, gibt es vielleicht auch eine fix-und-fertige Biblioteksbaustein ?
Nein, ich habe eine TIA Projektvorlage erhalten vom Endkunden und da wurden alle EAs per UDT in der Symboltabelle angelegt und zudem werden in TIA ja alle EAs übers PAE/PAA direkt abgebildet
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ja, darauf hab ich geachtet. aber funktioniert scheinbar wirklich nicht mit STAT. oder hängst vielleicht nur damit zusammen, dass ich das Programm hier mit PLC SIM simuliere?! :unsure: ist schon echt teilweise seeehr seltsames Verhalten hier bei der Simulation....
Das sollte PLCSIM schon können… zeig mal ein Screenshot.
 
Definitiv DPRD_DAT und DPWR_DAT um die Daten für jeden einzelne EA Bereich grösser als 4 Byte übertragen.
Die Screenshots mit DRRD_DAT und DPWR_DAT siehen korrekt aus.
edit: Warte mal, es funktioniert nicht mit nur 1 DPRD_DAT und 1 DPWR_DAT für alle E und A Daten auf einmal.
Es muss 1 DPRD_DAT oder 1 DPWR_DAT pro E/A Bereich sein !
'Result Data128 byte', 'Result Data 32 byte', usw. sind einzelne Bereiche !

BLKMOV wird nicht funktionieren.

Schleifen mit Pointer Zugriff auf PEB aund PAB ist sehr problematisch. Die Daten werden nicht konsistent übertragen. Es kann gut sein dass das Keyence Antrieb Zugriffe aus einzel-Daten blokiert.
letzte Variante die ich nun vorbereite...

eine davon muss dann jetz klappen ;)

(ganz am Ende kopiere ich noch auf eine interne statisch IN Struktur; mit den variablen arbeite ich dann im Baustein)
 

Anhänge

  • einzelneDPSlots.png
    einzelneDPSlots.png
    237 KB · Aufrufe: 11
Die Möglichkeiten, aus Peripherieadressen zu lesen, wurden bereits in #10 genannt. Vorschläge mit SFC20 oder SFC14/SFC15 mehrere Bereiche/Steckplätze/Slots auf einmal einzulesen, sind Mythen und funktionieren nicht. Welche CPU genau hast du eigentlich? Kannst du nicht einfach die Prozessabbilder PAE/PAA groß genug einstellen, und die je 300 Bytes E/A im Prozessabbild projektieren? Dann brauchst du gar nicht um das einlesen kümmern (keinen extra Kopiercode aufrufen).
Achtung: Beim Ändern der Größen der Prozessabbilder wird der Speicher neu organisiert, und ich meine, alle Variablen-Aktualdaten gehen verloren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ist ne 416F-3 PN/DP


Das Prozessabbild zu vergrößern ist Kundenseitig nicht gestattet und ich würde auch Folgeprobleme fürchen... es ist hier eine Bestandsanlage die 24/5 läuft bei einer 60sek Taktung, mit viel Datengedöns, da will ich keinen unvorhergesehenen Quereinfluss riskieren; auch bzgl. Aktualdaten, etc.


Dann kommt eh nur der LOOP über die PE/PA oder das einlesen/schreiben per DPRDDAT/DPWTDAT 🤷‍♂️


hab jetzt allerdings ein neues Problem :LOL:

der Slot16 hat in der Hw-Konfig 7 Bytes, wenn ich die 7 Bytes als Array im UDT projektiere, schreibt der DPWTDAT trotzdem auf 8 Bytes weil Step7 das automatisch auf 8 Bytes erweitert.... auch wenn ich gerade nicht sicher bin ob das ein Problem macht... ich geh kurz weinen😭
 

Anhänge

  • einzelneDPSlotsOut.png
    einzelneDPSlotsOut.png
    257,1 KB · Aufrufe: 9
der Slot16 hat in der Hw-Konfig 7 Bytes, wenn ich die 7 Bytes als Array im UDT projektiere, schreibt der DPWTDAT trotzdem auf 8 Bytes weil Step7 das automatisch auf 8 Bytes erweitert.... auch wenn ich gerade nicht sicher bin ob das ein Problem macht
Das Bereich in den DB ist 7 Bytes gross.
STEP7 hat nur den nächsten DB Struktur bei den nächsten gerade Byte-Adresse gestartet.
Es sollte funktionieren.
Es bedeutet 'nur' dass in das STEP7 Anwenderprogramm ist den DB Struktur unterschiedlich zu den E/A Struktur. Also, die Byte-Offsets sind ein bisschen unterschiedlich.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... :unsure: ist schon echt teilweise seeehr seltsames Verhalten hier bei der Simulation....
Hast du es denn mit der Flankenauswertung hin bekommen? Ohne hierfür die Ursache gefunden zu haben, solltest du nicht am lebenden Objekt operieren! Nicht dass sich die Spaltmaße urplötzlich vergrößern.

In #19 verwendest du zum Adressieren das Adressregister 2. Was es bei Verwendung des AR2 in einem FB zu beachten gibt ist dir bekannt?


letzte Variante die ich nun vorbereite...
Das sollte funktionieren, sofern die Slots als "konsistent über gesamte Länge" konfiguriert sind. Sind sie das denn?
Und warum der Umweg über die Arrays? Wenn anstatt der Arrays Structs mit den entsprechenden Datentypen und Symbolen oder eventuell auch UDTs angelegt wären, müsstest du nicht noch einmal umkopieren.
 
Zurück
Oben