Histogramm
Dieses Beispiel implementiert ein Histogramm. Der Code ist in zwei Tasks aufgeteilt; eine Steuerungstask welche die Eingangsdaten sammelt, z.B. aus EL3632, und eine sogenannten CM-Task, die das Histogramm errechnet. Das Blockdiagramm unten zeigt die Analysekette.
Den Quellcode für das Beispiel können Sie hier herunterladen:
Histogram_Sample.zip
Blockdiagramm
Programmparameter
Die Tabelle unten zeigt die wichtigsten Parameter, um den Histogramm-Baustein zu konfigurieren:
Histogram Bins |
100 |
Appended Datasets |
10 |
Oversamples |
10 |
Max. Bin Limit |
+3 or +5 |
Min. Bin Limit |
-3 or -5 |
Channels |
1 |
Buffer Length |
100 |
Globale Konstanten
Die oben angegebenen Parameter lassen sich als globale Konstanten definieren:
VAR_GLOBAL CONSTANT
cBufferLength : UDINT := 100;
cChannels : UDINT := 1;
cOversamples : UDINT := 10;
cMaxBins : UDINT := 100;
cAppendedData : UDINT := 10;
cBinLimit_1 : LREAL := 3;
cBinLimit_2 : LREAL := 5;
END_VAR
Code für die MAIN Task
Der folgende Code-Ausschnitt zeigt die Deklaration im MAIN Programm:
PROGRAM MAIN
VAR CONSTANT
cInitSource : ST_MA_MultiArray_InitPars
:= (eTypeCode := eMA_TypeCode_LREAL, nDims := 2, aDimSizes := [1, cBufferLength]);
END_VAR
VAR
nInputSelection : UDINT := 1;
nSample : UDINT;
aEl3632 AT %I* : ARRAY [1..cOversamples] OF INT;
aBuffer : ARRAY [1..cOversamples] OF LREAL;
fbSource : FB_CMA_Source := (stInitPars := cInitSource, nOwnId
:= eID_Source, aDestIDs := [eID_Histogram]);
fbSink : FB_CMA_Sink := (nOwnID := eID_Sink);
aHistReulst : ARRAY [1..cMaxBins+2];
END_VAR
Der folgende Code-Ausschnitt zeigt die Methodenaufrufe im MAIN Programm:
fbSource.Input2D(pDataIn := ADR(aBuffer),
aDataInSize := SIZEOF(aBuffer),
eElementType := eMA_TypeCode_LREAL,
nWorkDim0 := 0,
nWorkDim1 := 1,
pStartIndex := 0,
nOptionPars := 0);
fbSink(pDataOut := ADR(aHistResult),
nDataOutSize := SIZEOF(aHistResult),
eElementType := eMA_TypeCode_UINT64,
nWorkDim0 := 0,
nWorkDim1 := 1,
nElements := 0,
pStartIndex := 0,
nOptionPars := 0);
Code für die CM Task
Die Variablen-Deklaration im MAIN_CM Programm:
VAR CONSTANT
cInitHistArray : ST_CM_HistArray_InitPars := (nChannels := cChannels, nBins := cMaxBins, fMinBinnded := -cBinLimit_1, fMaxBinned := cBinLimit_1);
END_VAR
Die Methodenaufrufe im MAIN_CM Programm:
fbHistArray.CallEx(nAppendData := cAppendData, bReset := );
IF bConfig then
fbHistArray.Configure(pArg := ADR(aHisArrayConfig), nArgSize := SIZEOF(aHistArrayConfig)
END_IF
Die Configure Methode ist optional, ermöglicht aber eine feine Einstellung der Parameter fMinBinned und fMaxBinned während der Laufzeit.
Random Number Generator
Ein Histogramm wird sehr oft als eine visuelle Hilfe verwendet, um die zugrunde liegende Verteilung aller Messwerte zu verstehen, z.B. die Spitzen im Schwingungssignal. Der im Samplecode enthaltene Funktionsgenerator ist für diesen Zweck erweitert. Der Funktionsgenerator kann die üblichen und praxisnahen Zufallszahlen und deren Verteilungen simulieren. Mit der Variablen E_DistributionType können Sie eine Verteilung wie Exponentielle, Normale (oder Gaußsche), Chi-Squared oder Gamma auswählen. Standardmäßig werden die Zufallszahlen aus einer Gleichverteilung erzeugt.
Beachten Sie, dass jede Verteilung ein oder mehrere Parameter erfordert, um die Ausbreitung der Zufallszahlen oder deren Bereich festzustellen. Dies kann über die Eingangsvariable aRange erfolgen. |
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS-Bibliotheken |
---|---|---|
TwinCAT v3.1.4016.12 | PC oder CX (x86, x64) | Tc3_CM (v1.0.19), Tc3_CM_Base, Tc3_MultiArray |