ARR_MIN¶
Einleitung¶
Der Funktionsblock ARR_MIN ermittelt das Minimum aller Elemente eines eindimensionalen Arrays vom Typ INT. Der Baustein erwartet ein dynamisches Array (ARRAY[*]) als Ein-/Ausgangsparameter und gibt das kleinste gefundene Element über einen separaten Datenausgang aus. Die Berechnung wird durch das Ereignis REQ angestoßen; das Ergebnis wird nach Fertigstellung mit dem Ereignis CNF quittiert.
Schnittstellenstruktur¶
Ereignis-Eingänge¶
| Ereignis | Mit Daten |
|---|---|
REQ |
A |
Ereignis-Ausgänge¶
| Ereignis | Mit Daten |
|---|---|
CNF |
A (und leerer Datenausgang) |
Daten-Eingänge¶
| Name | Typ | Kommentar |
|---|---|---|
A |
ARRAY[*] OF INT |
Eingabearray (Ein-/Ausgang) |
Daten-Ausgänge¶
| Name | Typ | Kommentar |
|---|---|---|
| (unbenannt) | INT |
Minimalwert des Arrays |
Adapter¶
Keine Adapter vorhanden.
Funktionsweise¶
- Der Algorithmus initialisiert eine temporäre Variable
currentMinmit dem Wert des ersten Array-Elements (ermittelt überLOWER_BOUND(A,1)). - Anschließend wird das Array von Index
LOWER_BOUND(A,1)+1bisUPPER_BOUND(A,1)durchlaufen. - In jeder Iteration wird der aktuelle Wert mit
currentMinverglichen und das Minimum mit der FunktionMIN()aktualisiert. - Nach Abschluss der Schleife wird der endgültige Minimalwert über den unbenannten Datenausgang ausgegeben und das Ereignis
CNFgesendet.
Die Berechnung erfolgt rein sequenziell innerhalb eines einzigen Ausführungsschritts, die Laufzeit steigt linear mit der Array-Größe.
Technische Besonderheiten¶
- Dynamisches Array: Der FB arbeitet mit
ARRAY[*] OF INT, d.h. die tatsächliche Größe des Arrays wird erst zur Laufzeit über die systemeigenen FunktionenLOWER_BOUNDundUPPER_BOUNDbestimmt. - Paketzuordnung: Der Baustein gehört zum Paket
logiBUS::utils::dyn_arrund ist für den Einsatz in Umgebungen vorgesehen, die dynamische Arrays unterstützen. - Ein-/Ausgangsparameter: Der Parameter
Aist alsVAR_IN_OUTdeklariert – das Array wird sowohl gelesen als auch (hier nicht verändert) über den EreignisausgangCNFweitergegeben. - Keine Zustandsmaschine: Der Funktionsblock arbeitet rein funktional; es gibt keine internen Zustände oder Verzögerungen.
Zustandsübersicht¶
Der FB kennt nur zwei implizite Zustände:
- Idle: Warten auf ein REQ-Ereignis.
- Processing: Nach Eintreffen von REQ wird die Berechnung ausgeführt, unmittelbar danach wird CNF gesendet und der FB kehrt in den Idle-Zustand zurück.
Es gibt keine mehrfachen Zustände, Warteschleifen oder zeitgesteuerte Abläufe.
Anwendungsszenarien¶
- Sensorfeldanalyse: Ermittlung der kleinsten Temperatur in einer Reihe von Messwerten.
- Qualitätskontrolle: Suche nach dem minimalen Ausschussmaß in einer Produktionscharge.
- Optimierung: Bestimmung des günstigsten Preises aus einer Liste von Angeboten.
- Vergleichsoperationen: Als Grundbaustein für weitere statistische Auswertungen (z.B. zusammen mit Maximum, Summe).
Vergleich mit ähnlichen Bausteinen¶
- MIN (IEC 61131-3): Der klassische MIN-Baustein vergleicht zwei skalare Werte.
ARR_MINerweitert dieses Konzept auf ein gesamtes Array und spart so eine iterative Verkettung. - ARR_MAX: Ein logisches Gegenstück für das Maximum; der Algorithmus unterscheidet sich nur in der Vergleichsfunktion (
MINvs.MAX). - Statistische Bausteine:
ARR_MINist ein Spezialfall allgemeiner Aggregationsfunktionen (z.B. SUM, MEAN). Der Fokus liegt auf dem Minimum, was eine einfache und schnelle Implementierung ermöglicht.
Fazit¶
ARR_MIN bietet eine kompakte und effiziente Lösung zur Bestimmung des Minimums in dynamischen Integer-Arrays. Dank des einfachen Request/Confirm-Protokolls und der sauberen Paketstruktur lässt er sich leicht in vorhandene 4diac-Industrieanwendungen integrieren. Die Verwendung von LOWER_BOUND/UPPER_BOUND macht ihn unabhängig von der tatsächlichen Array-Größe und erlaubt flexible Anpassungen zur Laufzeit.