Digitale Eingänge "Architectur" - Wie?

Not-Aus

Level-2
Beiträge
82
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Alle,

In unsere Anlagen gibt es bis zu ungefähr 2000 digitale Eingänge. Wie kann ich:


  • Symbolische Zugriff
  • Zugriff von "zentrale" Funktionen wie: "überschreiben"/test. aus HMI, Prellüberwachung und quittung, Parameter ändern
  • Performante Kode

gleichzeitig erreichen?

Ich denke es ist eine Architektur-Frage? Jede Eingang ein "treiber"-FB?, globale Datenbaustein mit FOR-Schleife?, jede Eingang ein art integer-ID? usw, usw

Wie macht man dass? :D

Danke!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Meine versuche bis jetzt:

  • 2000 FBs: Offenbar nicht leicht zu programmieren, und nicht Performant
  • FC-Aufruf -> die in global DB reinschreiben. Zu viele aufrufe, nicht schnell zu programmieren, nicht Performant.
  • Direkt in global DB via Index. FOR-schleifen prozessiert alle Eingänge. Schnell und performant, aber kein symbolische zugriff
  • Direkt in global DB via globale konstante als Index. Schnell und performant, "quasi symbolisch" via globale konstante.
  • andere Lösungen?
 
Deine 2000 Eingänge werden ja wohl verschiedene Funktionen haben / benötigen.
Ich würde die benötigten Funktionen im Symbolkommentar hinterlegen und dann mit Openness entsprechende Bausteine / Programmlogik erzeugen lassen

Gruß
Blockmove
 
Vielleicht jede "Signal" mit ein integer "ID" assozieren und ins Array und Bool (für symbolische zugriff) gleichzeitig ablegen?

Wo steckt ihr normalerweise Prellüberwachung, Simulieren und so was?

Danke!
 
Direkt in global DB via Index. FOR-schleifen prozessiert alle Eingänge. Schnell und performant, aber kein symbolische zugriff
Symbolisch ist es mehr oder weniger machbar, aber eben indirekt.


Je nachdem wie groß Deine zusammenhängenden Bereiche der Eingänge sind würde ich das aufteilen. Wenn die alle in Reih und Glied kommen wäre es einfach...Array[1..2000] - glaub ich aber nicht. Daher dann immer in 4, vllt. 8 Byte ziehen oder so.
Als Anwenderdatentyp würde ich ein Array [1..32] of bool z.B. für 4 Eingangsbytes erstellen.
Dann in der PLC-Variablentabelle %E0.0 mit Datentyp Deines Anwenderdatentypes anlegen.
Eine Globale DB mit z.B. Namen "Eingang".
Darin ein Array [1..32] of bool mit Namen "index".
In diesem index dann im Array an jedem der einzelnen [1..32]-indexe im Kommentar den symbolischen Namen angeben. (PLC-Variablen einfach alle markieren und hier reinkopieren, geht in einem Rutsch).


Wenn Du die Anzeige mit Kennzeichnung am Operanden machst im FUP z.B., dann wird das Symbol Eingang.index[1] mit dem Kommentar darüber versehen. Also symbolisch abrufbar, wenn auch ungewöhnlich.


Nun brauchst Du natürlich einen FB in der eben die Simulation Ja/Nein und wenn ja den simulierten Wert an den out Eingang.Index Logik schickt.
In dem FB Simulation als array[1..32] of bool sowie simulierter_wert als array[1..32] of bool sowie EAtatsächlich als array[1..32] wo die PLC-Variable mit dem Array angeschrieben wird.


Die entsprechende Logik hinein via For-Schleife und der Globale DB hat dann einen gespeicherten Simulationswert oder aber eben den echten Eingang wenn Du nichts daran änderst.
Das der FB im OB1 ziemlich am Anfang muss dürfte klar sein.


So habe ich das mal für eine Förderstrecke gemacht in welcher wir alle Initiatioren simulieren wollten und diese dann alle in die Eingangsbereiche I40.0 bis I200.0 aneinandergereiht haben.
Etwas besseres viel mir dazu nicht ein.


Für die Simulation habe ich natürlich nicht in der HMI alles eingetippt. Da habe ich einfach eine index-Variable im Global-DB abgelegt sowie die Betriebsmittelkennzeichnung als string in einem array.
Mit dem Panel dann nur den Index hoch-runter setzen pro Buttondruck, dann wird der index per fb, kann ja der gleiche sein, vom string ausgelesen und auf den gleichen index kann man dann auch Simulation ja/nein bzw. den zu simulierenden Wert angeben sowie den aktuellen Zustand. Zwar immer nur einer aber das sollte nicht das grosse Problem darstellen. Wenn man unbedingt mehrere braucht dann ebenfalls den Index und mehrere Reihen untereinander, z.B. jeweils ein Byte programmieren mit Index1, 2,3,4 und im FB den Index1=Index+1 etc. machen, womit auch diese gleichzeitig dargestellt und geändert werden können. Dann gilt Dein Haupt-Index also für das Byte und die einzelnen Bits müssen schon noch durchprogrammiert werden.


Bei Deinen 2000 Eingängen dürfte die Schleife wegen Performance kein Problem sein. Ne 1200er hat leer 1ms und mit 250 Bytes in einer Schleife etwa 5-6ms Zyklus. Was Du hast weiß ich nicht, aber, langsamer kann es ja nicht sein.
Prellüberwachung und Quittung ... ungenutzt - Entprellt wird durch den Filter der SPS, wenn ich es unbedingt länger gefiltert haben will dann mit einem Zykluszähler. Bei Analogwerten allerdings mit einer Mittelwertbestimmung auf Zeit.
 

Similar threads

S
Antworten
19
Aufrufe
11K
steinthomas
S
Zurück
Oben