TIA S7-1500 Indirekt adressierung Eingänge

Dafür brauchst Du die Anweisung PEEK
oder Du legst über die Eingangsadressen ein Word-Array (das muß eventuell ein UDT sein), das kannst Du dann symbolisch ansprechen.

Harald
 
Was willst du denn erreichen ? Bei der 1500er gibts eventuell elegantere Lösungen

Aus Pflichtenheft: Ich muss 2048 Eingänge abfragen und Ereignisse generieren. Die Ereignisse müssen einen Zeitstempel von 1 ms haben.
Es gibt sicher verschiedene Lösungen. Die "Prozess"-CPU haben ein Zykluszeit von vielleicht 15-20ms.


  • Hardware-Interrupt? Ja, aber 2048 ist viel. Zu viel?

  • Zyklische Interrupt? Ja, muss aber sehr schnell erledigt werden.

  • Oder alle 2048 zyklisch abfragen mit ein vorgeschaltete "Zeitstempel-CPU",, die mit <1ms Zykluszeit läuft.

Vorschläge? :D
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok... mit so schnellen zeitdiskreten Abfragen von Digital-Eingängen habe ich leider keine Erfahrung. Aber darf man fragen was an den Eingängen dranhängt ? Können die überhaupt alle 1ms einen neuen Wert bereitstellen ?
 
Die Eingänge kommen aus Profinet-teilnehmern. Sie ändern sich nicht alle 1ms aber die steigende Flanke muss erfasst werden mit 1ms genauigkeit...
 
Aus Pflichtenheft: Ich muss 2048 Eingänge abfragen und Ereignisse generieren.
Was heisst "Ereignisse generieren"? Ich hatte Dich zunächst so verstanden, dass Du die 2048 Eingänge beobachten und Änderungen protokollieren sollst mit Zeitstempeln, die nicht ungenauer als 1 ms sein sollen.
Müssen die Ergebnisse Deiner "Beobachtung" denn auch in derselben ms noch erstellt und "weitergeleitet" werden? Oder kannst Du Dir für die Aufbereitung der Informationen auch die 15...20 ms ZyklusZeit der ProzessCPUs oder ggfs sogar noch länger Zeit lassen?
Mit wievielen ZustandsÄnderungen musst Du denn rechnen? Musst Du steigende und fallende Flanke protokollieren?

Ich würde es so "anpacken":
1. im 1-ms-Takt:
- die 64 DD (vollgepackt mit den 2048 Bits) doppelwortweise auf Flanken testen (d.h. es müsste irgendwo auch 64 Doppelworte mit den 2048 Flankenmerkern geben).
- Wenn Unterschied zwischen aktuellem DD und "FlankenMerkerDD" festgestellt wird:
. einen Eintrag in einem FiFo vornehmen, der beinhaltet:
. - Zeitstempel,
. - Code, der Rückschluss auf die entsprechenden Eingänge zulässt,
. - aktuellen Zustand der 32 Bit in 1 DD, sowie
. - vorausgegangenen Zustand der 32 Bit in 1 DD ("FlankenMerker").
. im FlankenMerkerArray das aktuelle DD aktualisieren.
2. in "geruhsamem Takt":
Diesen FiFo kannst Du dann "in relativer Ruhe" auswerten. Aus jedem FiFo-Eintrag sind dann 1 … 32 EinzelMeldungen zu generieren.

Gruss, Heinileini
 
Zuletzt bearbeitet:
Aus Pflichtenheft: Ich muss 2048 Eingänge abfragen und Ereignisse generieren. Die Ereignisse müssen einen Zeitstempel von 1 ms haben.
Es gibt sicher verschiedene Lösungen. Die "Prozess"-CPU haben ein Zykluszeit von vielleicht 15-20ms.


  • Hardware-Interrupt? Ja, aber 2048 ist viel. Zu viel?
  • Zyklische Interrupt? Ja, muss aber sehr schnell erledigt werden.
  • Oder alle 2048 zyklisch abfragen mit ein vorgeschaltete "Zeitstempel-CPU",, die mit <1ms Zykluszeit läuft.

Vorschläge? :D

Welcher Prozess benötigt denn bei 2048 Eingängen, eine Genauigkeit von 1ms über alle Eingänge um ein Ereignis zu erfassen?
Allein die räumliche Verteilung von 2048 Eingängen an einer schnelle Maschine oder einem schnellen Prozess, wird in der Regel so sein das der ganze Prozess länger als 1 ms dauert.
Hier ist sicherlich eher gemeint das im Meldesystem der Hacken bei "Zeit in Millisekunden" gesetzt ist.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was heisst "Ereignisse generieren"? Ich hatte Dich zunächst so verstanden, dass Du die 2048 Eingänge beobachten und Änderungen protokollieren sollst mit Zeitstempeln, die nicht ungenauer als 1 ms sein sollen.
Müssen die Ergebnisse Deiner "Beobachtung" denn auch in derselben ms noch erstellt und "weitergeleitet" werden? Oder kannst Du Dir für die Aufbereitung der Informationen auch die 15...20 ms ZyklusZeit der ProzessCPUs oder ggfs sogar noch länger Zeit lassen?
Mit wievielen ZustandsÄnderungen musst Du denn rechnen? Musst Du steigende und fallende Flanke protokollieren?

Ich würde es so "anpacken":
1. im 1-ms-Takt:
- die 64 DD (vollgepackt mit den 2048 Bits) doppelwortweise auf Flanken testen (d.h. es müsste irgendwo auch 64 Doppelworte mit den 2048 Flankenmerkern geben).
- Wenn Unterschied zwischen aktuellem DD und "FlankenMerkerDD" festgestellt wird:
. einen Eintrag in einem FiFo vornehmen, der beinhaltet:
. - Zeitstempel,
. - Code, der Rückschluss auf die entsprechenden Eingänge zulässt,
. - aktuellen Zustand der 32 Bit in 1 DD, sowie
. - vorausgegangenen Zustand der 32 Bit in 1 DD ("FlankenMerker").
. im FlankenMerkerArray das aktuelle DD aktualisieren.
2. in "geruhsamem Takt":
Diesen FiFo kannst Du dann "in relativer Ruhe" auswerten. Aus jedem FiFo-Eintrag sind dann 1 … 32 EinzelMeldungen zu generieren.

Gruss, Heinileini

*ACK* Danke schön, dass werde ich definitiv ausprobieren!
 
Zurück
Oben