Dynamisches Wiegen
In diesem Beispiel wird gezeigt, wie der Prozess des dynamischen Wiegens mit der Weighing SPS-Bibliothek funktioniert.
Download: SampleDynamicWeighing (*.tnzip)
Beschreibung
Das Eingangssignal, ein verrauschtes Trapezsignal, wird im MAIN-Programm über die Methode GenerateInputs()
mit einem Signalgenerator erzeugt. Das simulierte Signal wird dem Funktionsbaustein FB_DynamicWeighing (fbDynamicWeighing
) übergeben, der es intern an weitere Funktionsbausteine weiterleitet. Dazu zählen die Filterung mit dem Baustein FB_WG_ComboFilter (fbComboFilter
), die Skalierung mit dem Baustein FB_WG_Scaling (fbScale
) sowie die Auswertung mit dem Baustein FB_WG_Weighing (fbWeighing
).
Programmparameter
Die Tabelle unten zeigt eine Liste mit wichtigen Parametern für die Konfiguration der verwendeten Funktionsbausteine.
Variable | Beschreibung | Standardwert |
---|---|---|
fRawAmplitudeSignal | Amplitude des Trapezsignals | 1000.0 |
fAbsoluteNoise | Absoluter Rauschbetrag | 200.0 |
fFrequency | Grundfrequenz des Trapezsignals | 1.0 Hz |
bActivateSlope | Ein driftendes Testsignal wird aktiviert/deaktiviert | FALSE |
bAddWeight | Addiert einmalig ein Offset-Wert zum Testsignal | FALSE |
eAutoTareType | Auswahl für das automatische Tarieren | E_WG_AutoTareType.eContinously |
Folgende globale Konstanten werden definiert.
Variable | Beschreibung | Standardwert |
---|---|---|
cOversamples | Anzahl von Oversamples des Eingangskanals | 10 |
cSamplingRate | Samplerate des Eingangskanals in Hz | 1000 |
Implementierung:
Zunächst werden die entsprechenden Strukturen und Funktionsbausteine deklariert und initialisiert:
// Filter
stParamsComboFilter : ST_WG_ComboFilter :=
(
nOrder : =6,
fCutoff : =10.0,
fSamplingRate : =TO_LREAL(cSamplingRate),
nSamplesToFilter : =200,
bReset := FALSE
);
fbComboFilter := FB_WG_ComboFilter:=(stConfig := stParamsComboFilter);
// Scaling
stParamsScale : ST_WG_Scaling : =
(
fRawLow : =0.0,
fReferenceLow : =0.0,
fRawHigh : =1000.0,
fReferenceHigh : =100.0
);
fbScale : FB_WG_Scaling : =(stConfig : =stParamsScale, eTraceLevel : =TcEventSeverity.Info);
// Weighing
stParamsWeighing : ST_WG_Weighing : =
(
nWindowLength : =100,
Validation:=(nValidationSamples : =100, fThresholdWeight : =20.0, fMaxStd : =5.0, fMaxWeightDeviation : =0.0),
AutoTare : =(nValidationSamples : =100, fThresholdWeight : =10.0, fMaxStd:=1.0, fMaxWeightDeviation : =0.0)
);
fbWeighing : FB_WG_Weighing : =(stConfig : =stParamsWeighing);
Im Implementierungsteil werden die Funktionsbausteininstanzen über die entsprechenden Call()
Methoden ausgeführt.
// Execute weighing
IF NOT fbComboFilter.Call(ADR(aInput), SIZEOF(aInput), ADR(aOutFilter), SIZEOF(aOutFilter)) THEN
SetError(fbComboFilter);
END_IF
IF NOT fbScale.Call(ADR(aOutFilter), SIZEOF(aOutFilter), ADR(aOutScaling), SIZEOF(aOutScaling)) THEN
SetError(fbScale);
END_IF
IF NOT fbWeighing.Call(ADR(aOutScaling), SIZEOF(aOutScaling)) THEN
SetError(fbWeighing);
END_IF
Automatisches Tarieren:
Die Instanz fbScale
lässt sich über die fbWeighing
-Instanz wie folgt automatisch tarieren:
// Execute AutoTare
IF NOT fbWeighing.AutoTare(fbScale, eAutoTareType)THEN
SetError(fbWeighing);
END_IF
In Abhängigkeit vom eAutoTareType-Initialisierungswert gibt es folgende Fallunterscheidung:

E_WG_AutoTareType.eEnd
(oben): fbScale
wird mit dem Wert fAutoTareOffset
tariert, wenn bNewAutoTareResult
gleich TRUE
ist. E_WG_AutoTareType.eContinously
(unten): fbScale
wird mit dem Wert fAutoTareOffset
tariert, wenn fAutoTareOffset
ungleich 0 ist. Nach dem Tarieren wird jedes Mal automatisch ein fbWeighing.Reset()
ausgeführt.