Hello,
first sorry for my bad english skils.
I like to recalibrate the HFP01sc 4 times a day. So this should be not a problem. But the calibration interval should not happen at the same time the day after. So I like to move the calibration time one hour later on the next day. But nothing happens. The calibration never starts. What do I wrong?
Here you can see the program:
Public HFPsc
Public shf_calsc
Const HFP01SC_CAL_1 =(1000/64.7) '64.7 µV/W/m² Snr.:1479
Const OUTPUT_INTERVAL = 10 'Online mean output interval in minutes.
Const END_CAL = OUTPUT_INTERVAL-1 'End HFP01SC insitu calibration one minute before
Public CAL_INTERVAL As Long
'HFP01SC calibration variables.
Dim shf_mV
Dim shf_mV_run
Dim shf_mV_0
Dim shf_mV_180
Dim shf_mV_end
Dim V_Rf
Dim V_Rf_run
Dim V_Rf_180
Dim shf_cal_on As Boolean
Dim sw12_state As Boolean 'State of the switched 12Vdc port.
Alias HFPsc=SHFsc06
Alias shf_calsc=SHFsc06cal
Alias sw12_state=Cal_heat
Units HFPsc=W/(m^2)
'Define Data Tables
DataTable (Data1,True,-1)
DataInterval (0,10,Min,10)
Average(1,SHFsc06,IEEE4,shf_cal_on):FieldNames("SHFsc06")
Sample(1,SHFsc06cal,IEEE4)
Totalize(1,Cal_heat,FP2,False)
EndTable
'Main Program
BeginProg
'set the calibration interval before start scanning
CAL_INTERVAL=360
shf_calsc = HFP01SC_CAL_1
Scan(10,sec,1,0)
'Measure the HFP01SC soil heat flux plates.
VoltDiff (shf_mV_run,1,mV25,1,TRUE,0,_50Hz,1,0)
'Apply calibration to HFP01SC soil heat flux plates.
HFPsc = shf_mV_run*shf_calsc
'Power the HFP01SC heaters.
SW12(sw12_state)
'Measure voltage across the heater (Rf_V).
VoltDiff (V_Rf_run,1,mv5000,2,TRUE,0,_50Hz,0.001,0)
CallTable(Data1)
'If Cal_INTERVAL equal or bigger as 2x the CAL_INTERVAL then reset
If CAL_INTERVAL >= 720 Then
CAL_INTERVAL = 360
EndIf
'Begin HFP01SC calibration one minute into very CAL_INTERVAL minutes.
If ( IfTime (1,CAL_INTERVAL,Min) ) Then
shf_cal_on = TRUE
Move (shf_mV_0,1,shf_mV_run,1)
sw12_state = TRUE
EndIf
If ( IfTime (4,CAL_INTERVAL,Min) ) Then
Move (shf_mV_180,1,shf_mV_run),1)
Move (V_Rf_180,1,V_Rf_run,1)
sw12_state = FALSE
EndIf
'EndSub
'End HFP01SC calibration sequence.
If ( IfTime (9,CAL_INTERVAL,Min) ) Then
Move (shf_mV_end,1,shf_mV_run,1)
'Compute new HFP01SC calibration factors.
shf_calsc = V_Rf_180*V_Rf_180*128.7/ABS (((shf_mV_0+shf_mV_end/2)-shf_mV_180))
shf_cal_on = FALSE
'after calibration ad 60 minutes to the calibration interval
CAL_INTERVAL= CAL_INTERVAL+60
EndIf
NextScan
EndProg
Thanks for answering.
Seems like a logic error.
If you want to do the calibration 4 times per day with a roaming offset, seems to me that you would want
...
Public CAL_OFFSET
...
If IfTime ((CAL_OFFSET + 1),360,Min) Then
...
If IfTime ((CAL_OFFSET + 4),360,Min) Then
...
If IfTime ((CAL_OFFSET + 9),360,Min) Then
...
'restrict CAL_OFFSET to value between 0 and 359
CAL_OFFSET = (CAL_OFFSET + 60) MOD 360
Hi,
My issue is almost similar. I want to recalibrate four HFP01SC two times a day. The interval between calibration is 11 hours.
I tried using the folowing subroutine for calibration:
Sub hfp01sc_cal(Plate As Long,TimeToCalib As Long) 'Begin HFP01SC calibration on a fixed interval for G_x_1_1 (every 660 minutes) If (IfTime(TimeToCalib,FreqCalib,Min)) Then Ecal_on(Plate) = True : Bool(Plate) = 1 Move (Vsen_0(Plate),1,Vsen_run(Plate),1) If Plate = 1 Then SW12(1) Else 'heat ON If Plate = 2 Then PortSet(3,1) Else If Plate = 3 Then PortSet(4,1) Else If Plate = 4 Then PortSet(5,1) EndIf If (IfTime(Timeheat+TimeToCalib,FreqCalib,Min)) Then Move (Vsen_180(Plate),1,Vsen_run(Plate),1) Move (Vcur_180(Plate),1,Vcur_run(Plate),1) If Plate = 1 Then SW12(0) Else 'heat OFF If Plate = 2 Then PortSet(3,0) Else If Plate = 3 Then PortSet(4,0) Else If Plate = 4 Then PortSet(5,0) EndIf If (IfTime(Totalcalibtime+TimeToCalib,FreqCalib,Min)) Then Move (Vsen_end(Plate),1,Vsen_run(Plate),1) 'Compute new HFP01SC calibration factors Vamp(Plate) = ABS(((Vsen_0(Plate)+Vsen_end(Plate))/2)-Vsen_180(Plate)) Esen2(Plate) = 1000*2*Vamp(Plate)*(Rcur^2*Aself)/(Vcur_180(Plate)^2*Rself(Plate)) Ecal_on(Plate) = False : Bool(Plate) = 0 EndIf EndSub
This subroutine is called every 30 seconds (scan rate) with
For i = 1 To 4 Call hfp01sc_cal(Plate(i),TimeToCalib(i)) Next
Variables are declared at the beginning of the program:
BeginProg 'Load HFP01SC resistances of heater + wires Rself(1) = Rself_1 Rself(2) = Rself_2 Rself(3) = Rself_3 Rself(4) = Rself_4 'Load HFP01SC sensor factory sensitivity Esen(1) = Esen_1 Esen(2) = Esen_2 Esen(3) = Esen_3 Esen(4) = Esen_4 'Load HFP01SC factory sensitivity that change over time after each calib processes Esen2(1) = Esen_1 Esen2(2) = Esen_2 Esen2(3) = Esen_3 Esen2(4) = Esen_4 'Load HFP01SC total calibration time and plates TimeToCalib(1) = TimeToCalib_G1 TimeToCalib(2) = TimeToCalib_G2 TimeToCalib(3) = TimeToCalib_G3 TimeToCalib(4) = TimeToCalib_G4 Plate(1) = 1 Plate(2) = 2 Plate(3) = 3 Plate(4) = 4 Scan (30,Sec,3000,0)
Unfortunately, the calculation of the new calibration factors does not work and I do not know why?
So I just tried this subroutine:
'Subroutine de calibration des HFP01SC Sub hfp01sc_cal(Plate As Long) 'Begin HFP01SC calibration on a fixed interval for G_x_1_1 Const FreqCalib = 660 'freq de calibration des plaques en min (2x/jour soit ttes les 11h) Const Timeheat = 6 'duree chauffe = 6 min Const Totalcalibtime = 40 'duree total = 40 min 'decalage des calibrations de 3 heures avec 0 min G1, 180min pour G2, 360min pour G3 et 540min pour G4 Select Case Plate Case 1 If (IfTime(0,FreqCalib,Min)) Then Ecal_on(1) = True : Bool(1) = 1 Move (Vsen_0(1),1,Vsen_run(1),1) SW12(1) 'mise en route de la chauffe EndIf If (IfTime(Timeheat,FreqCalib,Min)) Then Move (Vsen_180(1),1,Vsen_run(1),1) Move (Vcur_180(1),1,Vcur_run(1),1) SW12(0) 'arret de la chauffe EndIf If (IfTime(Totalcalibtime,FreqCalib,Min)) Then Move (Vsen_end(1),1,Vsen_run(1),1) 'Compute new HFP01SC calibration factors Vamp(1) = ABS(((Vsen_0(1)+Vsen_end(1))/2)-Vsen_180(1)) Esen2(1) = 1000*2*Vamp(1)*(Rcur^2*Aself)/(Vcur_180(1)^2*Rself(1)) Ecal_on(1) = False : Bool(1) = 0 EndIf Case 2 If (IfTime(180,FreqCalib,Min)) Then Ecal_on(2) = True : Bool(2) = 1 Move (Vsen_0(2),1,Vsen_run(2),1) PortSet(3,1) 'mise en route de la chauffe EndIf If (IfTime(180+Timeheat,FreqCalib,Min)) Then Move (Vsen_180(2),1,Vsen_run(2),1) Move (Vcur_180(2),1,Vcur_run(2),1) PortSet(3,0)'arret de la chauffe EndIf If (IfTime(180+Totalcalibtime,FreqCalib,Min)) Then Move (Vsen_end(2),1,Vsen_run(2),1) 'Compute new HFP01SC calibration factors Vamp(2) = ABS(((Vsen_0(2)+Vsen_end(2))/2)-Vsen_180(2)) Esen2(2) = 1000*2*Vamp(2)*(Rcur^2*Aself)/(Vcur_180(2)^2*Rself(2)) Ecal_on(2) = False : Bool(2) = 0 EndIf Case 3 If (IfTime(360,FreqCalib,Min)) Then Ecal_on(3) = True : Bool(3) = 1 Move (Vsen_0(3),1,Vsen_run(3),1) PortSet(4,1) 'mise en route de la chauffe EndIf If (IfTime(360+Timeheat,FreqCalib,Min)) Then Move (Vsen_180(3),1,Vsen_run(3),1) Move (Vcur_180(3),1,Vcur_run(3),1) PortSet(4,0) 'arret de la chauffe EndIf If (IfTime(360+Totalcalibtime,FreqCalib,Min)) Then Move (Vsen_end(3),1,Vsen_run(3),1) 'Compute new HFP01SC calibration factors Vamp(3) = ABS(((Vsen_0(3)+Vsen_end(3))/2)-Vsen_180(3)) Esen2(3) = 1000*2*Vamp(3)*(Rcur^2*Aself)/(Vcur_180(3)^2*Rself(3)) Ecal_on(3) = False : Bool(3) = 0 EndIf Case 4 If (IfTime(540,FreqCalib,Min)) Then Ecal_on(4) = True : Bool(4) = 1 Move (Vsen_0(4),1,Vsen_run(4),1) PortSet(5,1) 'mise en route de la chauffe EndIf If (IfTime(540+Timeheat,FreqCalib,Min)) Then Move (Vsen_180(4),1,Vsen_run(4),1) Move (Vcur_180(4),1,Vcur_run(4),1) PortSet(5,0) 'arret de la chauffe EndIf If (IfTime(540+Totalcalibtime,FreqCalib,Min)) Then Move (Vsen_end(4),1,Vsen_run(4),1) 'Compute new HFP01SC calibration factors Vamp(4) = ABS(((Vsen_0(4)+Vsen_end(4))/2)-Vsen_180(4)) Esen2(4) = 1000*2*Vamp(4)*(Rcur^2*Aself)/(Vcur_180(4)^2*Rself(4)) Ecal_on(4) = False : Bool(4) = 0 EndIf EndSelect EndSub
This subroutine gives the same result so I do not know what happens.
If someone have an idea, it will we very welcome.
Best regards,
Hello,
Does anyone have a suggestion to do concerning my script ? I do not know how to manage this.
Best,
Hi again,
I would be very happy if anyone could help me.
Best
There is no people in Campbell Sci able to help me ?
Our full technical support staff does not monitor this forum. If you need assistance from a member of our staff, please submit your question from the Ask a Question page.