assindia
Level-1
- Beiträge
- 6
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Hallo,
ich arbeite zur Zeit an einer Volumenbestimmung, die mit Hilfe einer Bürette und einem Liquid Sensor realisiert werden soll.
Dazu habe ich folgenden Code geschrieben. Jedoch stürzt der ganze Controller ab sobald ich in While gehe, oder zumindest das Signal Burette.Active kommt.
Zur Info: Den Satzmerker bTEST habe ich nur erstellt weil ich für die Testzwecke noch kein zweites Signal MeasurementActive bekomme.
Ich sehe darin keinen Fehler.
Kann mir einer weiter helfen?
Danke
Code:
bSensor := LiquidVolumeIN.bLiquidsensor;
fVelocity := LiquidVolumeIN.nVelocityBurette; (* [ml/min] *)
(* Für Testaufbau *)
fbHoldMeasurement( SET := LiquidVolumeIN.bBuretteActive, RESET1 := ,
Q1 => bTEST );
WHILE LiquidVolumeIN.bBuretteActive AND (*LiquidVolumeIN.bMeasurementVolActive *)bTEST DO
fbR_TRIG( CLK := bSensor, (* trigger when LiquidSensor turn to TRUE *)
Q => bRisingEdge);
IF bRisingEdge THEN (* get first timestamp *)
fbGetSystemTime( timeLoDW => GetSystemTime1OUT.timeLoDW,
timeHiDW => GetSystemTime1OUT.timeHiDW );
bRisingEdge := FALSE;
END_IF;
fbF_TRIG( CLK := bSensor, (* trigger when LiquidSensor turn to FALSE *)
Q => bFallingEdge );
IF bFallingEdge THEN (* get second timestamp *)
fbGetSystemTime( timeLoDW => GetsystemTime2OUT.timeLoDW,
timeHiDW => GetSystemTime2OUT.timeHiDW );
nCurActiveSensorTimeLo := GetSystemTime2OUT.timeLoDW - GetSystemTime1OUT.timeLoDW;
nCurActiveSensorTimeHi := GetSystemTime2OUT.timeHiDW - GetSystemTime1OUT.timeHiDW;
nComActiveSensorTimeLo := nComActiveSensorTimeLo + nCurActiveSensorTimeLo;
nComActiveSensorTimeHi := nComActiveSensorTimeHi + nCurActiveSensorTimeHi;
bFallingEdge := FALSE;
END_IF;
END_WHILE;
IF NOT LiquidVolumeIN.bBuretteActive AND(* LiquidVolumeIN.bMeasurementVolActive*) bTEST AND nComActiveSensorTimeLo <> 0 THEN
fVolume := (fVelocity / 60000) * ((nComActiveSensorTimeHi *429496.7295) + (nComActiveSensorTimeLo / 10000)); (* calculation volume *)
nComActiveSensorTimeLo := 0;
nComActiveSensorTimeHi := 0;
LiquidVolumeOUT.fSampleVolume := fVolume;
LiquidVolumeOUT.bMeasurementComplete := TRUE;
(* Für Testaufbau *)
fbHoldMeasurement.RESET1 := LiquidVolumeOUT.bMeasurementComplete;
END_IF;
ich arbeite zur Zeit an einer Volumenbestimmung, die mit Hilfe einer Bürette und einem Liquid Sensor realisiert werden soll.
Dazu habe ich folgenden Code geschrieben. Jedoch stürzt der ganze Controller ab sobald ich in While gehe, oder zumindest das Signal Burette.Active kommt.
Zur Info: Den Satzmerker bTEST habe ich nur erstellt weil ich für die Testzwecke noch kein zweites Signal MeasurementActive bekomme.
Ich sehe darin keinen Fehler.

Danke

Code:
bSensor := LiquidVolumeIN.bLiquidsensor;
fVelocity := LiquidVolumeIN.nVelocityBurette; (* [ml/min] *)
(* Für Testaufbau *)
fbHoldMeasurement( SET := LiquidVolumeIN.bBuretteActive, RESET1 := ,
Q1 => bTEST );
WHILE LiquidVolumeIN.bBuretteActive AND (*LiquidVolumeIN.bMeasurementVolActive *)bTEST DO
fbR_TRIG( CLK := bSensor, (* trigger when LiquidSensor turn to TRUE *)
Q => bRisingEdge);
IF bRisingEdge THEN (* get first timestamp *)
fbGetSystemTime( timeLoDW => GetSystemTime1OUT.timeLoDW,
timeHiDW => GetSystemTime1OUT.timeHiDW );
bRisingEdge := FALSE;
END_IF;
fbF_TRIG( CLK := bSensor, (* trigger when LiquidSensor turn to FALSE *)
Q => bFallingEdge );
IF bFallingEdge THEN (* get second timestamp *)
fbGetSystemTime( timeLoDW => GetsystemTime2OUT.timeLoDW,
timeHiDW => GetSystemTime2OUT.timeHiDW );
nCurActiveSensorTimeLo := GetSystemTime2OUT.timeLoDW - GetSystemTime1OUT.timeLoDW;
nCurActiveSensorTimeHi := GetSystemTime2OUT.timeHiDW - GetSystemTime1OUT.timeHiDW;
nComActiveSensorTimeLo := nComActiveSensorTimeLo + nCurActiveSensorTimeLo;
nComActiveSensorTimeHi := nComActiveSensorTimeHi + nCurActiveSensorTimeHi;
bFallingEdge := FALSE;
END_IF;
END_WHILE;
IF NOT LiquidVolumeIN.bBuretteActive AND(* LiquidVolumeIN.bMeasurementVolActive*) bTEST AND nComActiveSensorTimeLo <> 0 THEN
fVolume := (fVelocity / 60000) * ((nComActiveSensorTimeHi *429496.7295) + (nComActiveSensorTimeLo / 10000)); (* calculation volume *)
nComActiveSensorTimeLo := 0;
nComActiveSensorTimeHi := 0;
LiquidVolumeOUT.fSampleVolume := fVolume;
LiquidVolumeOUT.bMeasurementComplete := TRUE;
(* Für Testaufbau *)
fbHoldMeasurement.RESET1 := LiquidVolumeOUT.bMeasurementComplete;
END_IF;