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.


Log in or register to post/reply in the forum.

Connect Screen: Station Status


kokihualpa Jun 7, 2020 10:53 AM

Dear

What exactly mean In tha section Station Status: Program Errors>"skipped system scans". What system are omited?. The main scan? I want to know where exactly I have to find the errors?.


jtrauntvein Jun 7, 2020 10:02 PM

As the data logger executes its program, it is actually doing several tasks more or less at once (with the exception of the Granite 9 and Granite 10 models, data logger CPUs are single core so the various tasks take turns using the CPU).  Some of these tasks are under the control of the data logger program such as the main scan and slow sequences.  Others, such as communications are driven by the operating system.  Different tasks are assigned different priorities so that, if two tasks need access to the CPU at the same time, the task with the higher priority will be granted access first while the task with the lower priority will be made to wait.

One of the operating system sponsored tasks is the system scan which periodically performs calibration measurements in the background.  It is in part due to this task that the datalogger is able to maintain its measurement accuracy and accurate time keeping over a variety of temperature fluctuations.  This background calibration is referred to as the system scan and it operates at a lower priority than your program scans and slow sequences.  I may be mistaken, but I believe that it also operates at a lower priority than communications tasks.

So, long story somewhat shorter... The system scan is a background calibration task that must be run periodically in order to assure the accuracy of measurements as well as the real-time clock.  If the CPU is too busy running higher priority tasks such as your main scan and/or slow sequences, this task can be held off past it's designed interval.  Each time that this happens, the datalogger increments the status table counter that you asked about.

You can probably afford an occasional missed system scan especially if temperature conditions are somewhat stable.  However, if this variable is growing regularly, it is a sign that your program is crowding the datalogger resources and you should reconsider the speed of your scans and the amount of communication taking place 

I hope that this helps.


kokihualpa Jun 8, 2020 07:01 PM

I fixed all the times I can but that variable keep growing. I dont know what else to do.

This is the extract of the program code:

'Variables comunicacion serial
Public Instring(51) As String * 50,Espera As Boolean
Dim OutstringNO(12) As String *20 ={"no","no2","nox","flow","ozonator flow","pres","conv temp","cooler temp","pmt temp","react temp","internal temp","flags"}
Dim OutstringBeta(13) As String * 5 ={"#","C","J8","JI","JB","JC","JD","JE","JH","JF","JG","JQ","JO"}
Dim OutstringBC(13) As String * 5 ={"#","C","m1","JJ","J0","J1","J2","J6","J5","J3","J4","JQ","JM"}
Dim SplitResult(10) As String * 12
Public prompt1 As String * 50,prompt2 As String * 50,VAR1,VAR2
Public P3BC1,RegFlowBC,P3PM1,RegHeatPM1,RegFlowPM1,P3PM10,RegHeatPM10,RegFlowPM10,PM10,PM1,BC1,NO,NO2,NOx,Smplflow42i,Ozflow42i,Tint42i
Public Pch42i,mBC1,mPM1,mPM10,FBC1,FPM1,FPM10,T1BC1,T2BC1,T3BC1,T4BC1,T1PM1,T2PM1,T3PM1,T4PM1,T1PM10,T2PM10,T3PM10,T4PM10,P1BC1,P2BC1
Public P1PM1,P2PM1,P1PM10,P2PM10,tempconv42i,temppmt42i,tempreact42i,tempcooler42i,RegHeatBC
Public statusPM10 As String * 30,statusPM1 As String * 30,statusBC As String * 30,flag42i As String * 10
Dim j
Public outstat,LastFileName(6) As String * 100, Attach As String * 200

DataTable(Horario,True,-1)
DataInterval(0,10,Min,10)
TableFile ("USR:E22HorarioBckp",8,1,0,1,Day,outstat,LastFileName(1))
Average(1,Batt_Volt,IEEE4,False)
Average(1,PM10,IEEE4,False)
Average(1,PM1,IEEE4,False)
Average(1,BC1,IEEE4,False)
Average(1,NO,IEEE4,False)
Average(1,NO2,IEEE4,False)
Average(1,NOx,IEEE4,False)
EndTable

DataTable(NO2Horario,True,-1)
DataInterval(0,60,Min,10)
TableFile ("USR:E22NO2HorarioBckp",8,1,0,1,Day,outstat,LastFileName(2))
Average(1,NO2,IEEE4,False)
Sample(1,ECANO2,IEEE4)
EndTable

DataTable(PM10Diario,True,-1)
DataInterval(0,24,Hr,10)
TableFile ("USR:E22PM10DiarioBckp",8,1,0,1,Day,outstat,LastFileName(3))
Average(1,PM10,IEEE4,False)
Sample(1,ECAPM10,IEEE4)
EndTable

DataTable(STATUS1_E22,True,-1)
DataInterval(0,10,Min,10)
TableFile ("USR:E22Status1Bckp",8,1,0,1,Day,outstat,LastFileName(4))
Sample(1,socket1,IEEE4)
Sample(1,socket2,IEEE4)
Sample(1,Batt_Volt,IEEE4)
Sample(1,Smplflow42i,IEEE4)
Sample(1,Ozflow42i,IEEE4)
Sample(1,Tint42i,IEEE4)
Sample(1,Pch42i,IEEE4)
Sample(1,tempconv42i,IEEE4)
Sample(1,temppmt42i,IEEE4)
Sample(1,tempreact42i,IEEE4)
Sample(1,tempcooler42i,IEEE4)
Sample(1,flag42i,String)

EndTable

DataTable(STATUS2_E22,True,-1)
DataInterval(0,10,Min,10)
TableFile ("USR:E22Status2Bckp",8,1,0,1,Day,outstat,LastFileName(5))
Sample(1,mBC1,IEEE4)
Sample(1,FBC1,IEEE4)
Sample(1,T1BC1,IEEE4)
Sample(1,T2BC1,IEEE4)
Sample(1,T3BC1,IEEE4)
Sample(1,T4BC1,IEEE4)
Sample(1,P1BC1,IEEE4)
Sample(1,P2BC1,IEEE4)
Sample(1,P3BC1,IEEE4)
Sample(1,mPM1,IEEE4)
Sample(1,FPM1,IEEE4)
Sample(1,T1PM1,IEEE4)
Sample(1,T2PM1,IEEE4)
Sample(1,T3PM1,IEEE4)
Sample(1,T4PM1,IEEE4)
Sample(1,P1PM1,IEEE4)
Sample(1,P2PM1,IEEE4)
Sample(1,P3PM1,IEEE4)
Sample(1,mPM10,IEEE4)
Sample(1,FPM10,IEEE4)
Sample(1,T1PM10,IEEE4)
Sample(1,T2PM10,IEEE4)
Sample(1,T3PM10,IEEE4)
Sample(1,T4PM10,IEEE4)
Sample(1,P1PM10,IEEE4)
Sample(1,P2PM10,IEEE4)
Sample(1,P3PM10,IEEE4)
Sample(1,statusPM10,String)
Sample(1,statusPM1,String)
Sample(1,statusBC,String)
Sample(1,PTemp,IEEE4)
EndTable

DataTable(STATUS3_E22,True,-1)
DataInterval(0,10,Min,10)
TableFile ("USR:E22Status3Bckp",8,1,0,1,Day,outstat,LastFileName(6))
Sample(1,RegHeatBC,IEEE4)
Sample(1,RegFlowBC,IEEE4)
Sample(1,RegHeatPM1,IEEE4)
Sample(1,RegFlowPM1,IEEE4)
Sample(1,RegHeatPM10,IEEE4)
Sample(1,RegFlowPM10,IEEE4)
Sample(1,Lith_Volt,IEEE4)
Sample(1,VAR1,IEEE4)
Sample(1,VAR2,IEEE4)
EndTable

'Main Program
BeginProg
FileCopy (Status.ProgName,"CPU:Default.CR1")
PortSet (9,1)
PPPOpen

Scan(60,Sec,1,0)

'Default Datalogger Battery Voltage measurement Batt_Volt:
Battery(Batt_Volt)
Batt_Volt=Round (Batt_Volt,1)
PanelTemp (PTemp,250)
PTemp=Round(PTemp,2)
Lith_Volt=Round(Status.LithiumBattery,2)

'Lecturas por puerto Serie
SerialOpen (Com1,9600,0,0,50)
SerialOpen (Com2,9600,14,0,50)
SerialOpen (Com3,9600,14,0,50)
SerialOpen (Com4,9600,14,0,50)
'Lectura de puerto serial Analizador 42i
For j=1 To 12
cuenta18=0
Espera=false
SerialFlush(Com1)
SerialOut (Com1,CHR(170)+OutstringNO(j)+CHR(13),"",0,10)
While (Espera=false)
If SerialInChk(Com1)<10 Then
cuenta18=cuenta18+1
If cuenta18 > 1000 Then Espera = True
Else
SerialIn (Instring(j),Com1,20,13,40)
Select Case j
Case 1 To 3
SplitStr (SplitResult(),Instring(j)," ",4,5)
Instring(j)=SplitResult(2)
Case 4 To 10
SplitStr (SplitResult(),Instring(j)," ",4,0)
Instring(j)=SplitResult(1)
Case 11
SplitStr (SplitResult(),Instring(j)," ",8,5)
Instring(j)=Left(SplitResult(7),4)
Case 12
SplitStr (SplitResult(),Instring(j)," ",4,5)
Instring(j)=Left(SplitResult(2),8)
EndSelect
Espera=true
EndIf
Wend
Next j
'Lectura de puerto serial Monitor de Particulas BC MAAP
For j=1 To 13
cuenta18=0
Espera=false
SerialFlush(Com2)
SerialOut (Com2,OutstringBC(j)+CRLF,"",0,10)
While (Espera=false)
If SerialInChk(Com2)<1 Then
cuenta18=cuenta18+1
If cuenta18 > 4000 Then Espera = True
Else
SerialIn (Instring(12+j),Com2,100,13,40)
Espera=true
EndIf
Wend
Next j
'Lectura de puerto serial Monitor de Particulas PM1
For j=1 To 13
cuenta18=0
Espera=false
SerialFlush(Com3)
SerialOut (Com3,OutstringBeta(j)+CRLF,"",0,10)
While (Espera=false)
If SerialInChk(Com3)<1 Then
cuenta18=cuenta18+1
If cuenta18 > 4000 Then Espera = True
Else
SerialIn (Instring(25+j),Com3,100,13,40)
Espera=true
EndIf
Wend
Next j
'Lectura de puerto serial Monitor de Particulas PM10
For j=1 To 13
cuenta18=0
Espera=false
SerialFlush(Com4)
SerialOut (Com4,OutstringBeta(j)+CRLF,"",0,10)
While (Espera=false)
If SerialInChk(Com4)<1 Then
cuenta18=cuenta18+1
If cuenta18 > 4000 Then Espera = True
Else
SerialIn (Instring(38+j),Com4,100,13,40)
Espera=true
EndIf
Wend
Next j
NO=Instring(1) 'Concentracion de NO
NO2=Instring(2) 'Concentracion de NO2
NOx=Instring(3) 'Concentracion de NOx
Smplflow42i=Instring(4) 'Flujo de muestra 42i
Ozflow42i=Instring(5) 'Flujo de Ozono 42i
Pch42i=Instring(6) 'Presion de la camara de reaccion 42i
tempconv42i=Instring(7) 'Temperatura del Convertidor de NO2 42i
tempcooler42i=Instring(8) 'Temperatura del cooler 42i
temppmt42i=Instring(9) 'Temperatura del PMT (cooler PMT) 42i
tempreact42i=Instring(10) 'Temperatura de la camara de reaccion 42i
Tint42i=Instring(11) 'Temperatura interna 42i
flag42i=Instring(12) 'Flags 42i
statusBC=Instring(13) 'status y error MAAP
BC1=Instring(14) 'Concentracion de hollin MAAP
mBC1=Instring(15) 'Masa de hollin MAAP
FBC1=Instring(16) 'Flujo MAAP
T1BC1=Instring(17) 'Temperatura Ambiente MAAP
T2BC1=Instring(18) 'Temperatura sobre el filtro MAAP
T3BC1=Instring(19) 'Temperatura bajo el filtro MAAP
T4BC1=Instring(20) 'Temperatura del calefactor MAAP
P3BC1=Instring(21) 'Presion Barometrica MAAP
P1BC1=Instring(22) 'Presion orificio subsonico MAAP
P2BC1=Instring(23) 'Presion de la Bomba MAAP
RegHeatBC=Instring(24) '% Regulacion del Calefactor MAAP
RegFlowBC=Instring(25) '% Regulacion del Flujo MAAP
statusPM1=Instring(26) 'status y error Beta PM1
PM1=Instring(27) 'Concentracion de PM1 Beta
mPM1=Instring(28) 'Masa de PM1 Beta
FPM1=Instring(29) 'Flujo Beta PM1
T1PM1=Instring(30) 'Temperatura Ambiente Beta PM1
T2PM1=Instring(31) 'Temperatura sobre el filtro Beta PM1
T3PM1=Instring(32) 'Temperatura bajo el filtro Beta PM1
T4PM1=Instring(33) 'Temperatura del calefactor Beta PM1
P3PM1=Instring(34) 'Presion Barometrica Beta PM1
P1PM1=Instring(35) 'Presion diferencial de orificio subsonico en Pa Beta PM1
P2PM1=Instring(36) 'Presion de camara de vacio de baja presion en hPa Beta PM1
RegHeatPM1=Instring(37) '% Regulacion del Calefactor Beta PM1
RegFlowPM1=Instring(38) '% Regulacion del Flujo Beta PM1
statusPM10=Instring(39) 'status y error Beta PM10
PM10=Instring(40) 'Concentracion de PM10 Beta
mPM10=Instring(41) 'Masa de PM10 Beta
FPM10=Instring(42) 'Flujo Beta PM10
T1PM10=Instring(43) 'Temperatura Ambiente Beta PM10
T2PM10=Instring(44) 'Temperatura sobre el filtro Beta PM10
T3PM10=Instring(45) 'Temperatura bajo el filtro Beta PM10
T4PM10=Instring(46) 'Temperatura del calefactor Beta PM10
P3PM10=Instring(47) 'Presion Barometrica Beta PM10
P1PM10=Instring(48) 'Presion diferencial de orificio subsonico en Pa Beta PM10
P2PM10=Instring(49) 'Presion de camara de vacio de baja presion en hPa Beta PM10
RegHeatPM10=Instring(50) '% Regulacion del Calefactor Beta PM10
RegFlowPM10=Instring(51) '% Regulacion del Flujo Beta PM10
P3BC1=Round(P3BC1*0.75,2)
RegFlowBC=Round((RegFlowBC*100)/4096,2)
P3PM1=Round(P3PM1*0.75,2)
RegHeatPM1=Round((RegHeatPM1*100)/4095,2)
RegFlowPM1=Round((RegFlowPM1*100)/4095,2)
P3PM10=Round(P3PM10*0.75,2)
RegHeatPM10=Round((RegHeatPM10*100)/4095,2)
RegFlowPM10=Round((RegFlowPM10*100)/4095,2)
''Analizador 42i
If NO2<0 Then
NO2=""
NO=""
NOx=""
wNO2=true
If NO<0 Then
NO=""
wNO=true
If NOx<0 Then
NOx=""
wNOx=true
Else

wNOx=false
EndIf
Else

wNO=false
EndIf
Else

wNO2=false
EndIf

If BC1 <=0 Then
BC1=""
wBC1=true
Else
wBC1=false
EndIf

If PM1<=0 Then
PM1=""
wPM1=true
Else
wPM1=false
'PM1=PM1+0.2
EndIf

If PM10 <=0 Then
PM10=""
wPM10=true
Else
wPM10=false
EndIf

CallTable(Horario)
CallTable(STATUS1_E22)
CallTable(STATUS2_E22)
CallTable(STATUS3_E22)
CallTable(NO2Horario)
CallTable(PM10Diario)
NextScan

Log in or register to post/reply in the forum.