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:

Dynamisches Wiegen 1:

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.