Hi,
I can't succeed to make a program doing a relatively simple thing :
Record TableFile every X time (in real life 24 hours, in my test 1 minute) and make a Table File, then rename this Table file with a specific format that contain a time maker.
Here is my code :
'CR1000 'Declare Variables and Units Const QL = 90 'queue buffer size - 1 fichier / jour donc 90 jours de buffer Public Outstat As Boolean Const LoggerID="AVP" Public rTime(9) Alias rTime(1) = Year 'assign the alias Year to rTime(1) Alias rTime(9) = Day_of_Year 'assign the alias Day_of_Year to rTime(9) Public BattV Pubbyelic PTemp_C Public T107_C_1 Public T107_C_2 Public T107_C_3 Public T107_C_4 Public T107_C_5 Public T107_C_6 Public T107_C_7 Public SR50A(2) Public TCDT Public DBTCDT Public BP_kPa Public Rain_mm Public WS_ms Public WindDir Public LCount Public DiffV(9) Public Mult(9)={1,1,1,1,1,1,1,1,1} Public Offs(9)={0,0,0,0,0,0,0,0,0} Alias SR50A(1)=DT Alias SR50A(2)=Q Units BattV=Volts Units PTemp_C=Deg C Units T107_C_1=Deg C Units T107_C_2=Deg C Units T107_C_3=Deg C Units T107_C_4=Deg C Units T107_C_5=Deg C Units T107_C_6=Deg C Units T107_C_7=Deg C Units BP_kPa=kPa Units Rain_mm=mm Units WS_ms=meters/second Units WindDir=degrees Units DiffV=mV 'Define Data Tables DataTable(meteo,True,-1) RealTime( rTime ) DataInterval(0,1,Min,10) Average(1,PTemp_C,FP2,False) Average(1,T107_C_1,FP2,False) Sample(1,DT,FP2) Sample(1,Q,FP2) Sample(1,TCDT,FP2) Sample(1,DBTCDT,FP2) Average(1,BP_kPa,FP2,False) Totalize(1,Rain_mm,FP2,False) Average(1,WS_ms,FP2,False) Maximum(1,WS_ms,FP2,False,True) WindVector(1,WS_ms,WindDir,FP2,False,10,0,0) FieldNames("WS_ms_S_WVT,WindDir_D1_WVT,WindDir_SD1_WVT") TableFile ("USR:meteo",8,-1,0,1,Min,Outstat,0) FileRename("USR:meteo0.dat","USR:"+Year+"_"+Day_of_Year+"_"+rTime(4)+"_"+rTime(5)+"_meteo_"+LoggerID+".dat") EndTable DataTable(hydro,True,-1) 'RealTime( rTime ) DataInterval(0,1,Min,10) Minimum(1,BattV,FP2,False,False) Average(1,T107_C_1,FP2,False) Average(1,T107_C_2,FP2,False) Average(1,T107_C_3,FP2,False) Average(1,T107_C_4,FP2,False) Average(1,T107_C_5,FP2,False) Average(1,T107_C_6,FP2,False) Average(1,T107_C_7,FP2,False) Average(1,DiffV(1),FP2,False) Average(1,DiffV(2),FP2,False) Average(1,DiffV(3),FP2,False) Average(1,DiffV(4),FP2,False) Average(1,DiffV(5),FP2,False) Average(1,DiffV(6),FP2,False) Average(1,DiffV(7),FP2,False) Average(1,DiffV(8),FP2,False) Average(1,DiffV(9),FP2,False) TableFile ("USR:hydro",8,-1,0,1,Min,Outstat,0) FileRename("USR:hydro0.dat","USR:"+Year+"_"+Day_of_Year+"_"+rTime(4)+"_"+rTime(5)+"_hydro_"+LoggerID+".dat") EndTable DataTable(soh,True,-1) 'RealTime( rTime ) DataInterval(0,1,Min,10) Average(1,BattV,FP2,False) Maximum(1,BattV,FP2,False,False) Minimum(1,BattV,FP2,False,False) Average(1,PTemp_C,FP2,False) Maximum(1,PTemp_C,FP2,False,True) TableFile ("USR:soh",8,-1,0,1,Min,Outstat,0) FileRename("USR:soh0.dat","USR:"+Year+"_"+Day_of_Year+"_"+rTime(4)+"_"+rTime(5)+"_soh_"+LoggerID+".dat") EndTable 'Main Program BeginProg SetStatus("USRDriveSize",1000000) 'pour CR1000 uniquement 'Main Scan Scan(10,Sec,1,0) 'Default Datalogger Battery Voltage measurement 'BattV' Battery(BattV) 'Default Wiring Panel Temperature measurement 'PTemp_C' PanelTemp(PTemp_C,_60Hz) '107 Temperature Probe (CSL) measurement 'T107_C_1' Therm107(T107_C_1,1,1,1,0,_60Hz,1,0) '107 Temperature Probe (CSL) measurement 'T107_C_2' Therm107(T107_C_2,1,2,1,0,_60Hz,1,0) '107 Temperature Probe (CSL) measurement 'T107_C_3' Therm107(T107_C_3,1,3,1,0,_60Hz,1,0) '107 Temperature Probe (CSL) measurement 'T107_C_4' Therm107(T107_C_4,1,4,1,0,_60Hz,1,0) '107 Temperature Probe (CSL) measurement 'T107_C_5' Therm107(T107_C_5,1,5,2,0,_60Hz,1,0) '107 Temperature Probe (CSL) measurement 'T107_C_6' Therm107(T107_C_6,1,6,2,0,_60Hz,1,0) '107 Temperature Probe (CSL) measurement 'T107_C_7' Therm107(T107_C_7,1,7,2,0,_60Hz,1,0) 'SR50A Sonic Ranging Sensor (SDI-12 Output) measurements 'DT', 'Q', 'TCDT', and 'DBTCDT' SDI12Recorder(SR50A(),7,"0","M1!",1,0) TCDT=DT*SQR((PTemp_C+273.15)/273.15) DBTCDT=1.60-TCDT 'CS106 Barometric Pressure Sensor measurement 'BP_kPa' If TimeIntoInterval(59,60,Min) Then PortSet(3,1) If TimeIntoInterval(0,60,Min) Then VoltSE(BP_kPa,1,mV2500,10,1,0,_60Hz,0.240,591.7104) BP_kPa=BP_kPa*0.1 PortSet(3,0) EndIf '52202/52203 Rain Gage (CSL) measurement 'Rain_mm' PulseCount(Rain_mm,1,1,2,0,0.1,0) '05103 Wind Speed & Direction Sensor (CSL) measurements 'WS_ms' and 'WindDir' PulseCount(WS_ms,1,2,1,1,0.098,0) BrHalf(WindDir,1,mV2500,11,2,1,2500,True,0,_60Hz,355,0) If WindDir>=360 Or WindDir<0 Then WindDir=0 'Turn AM16/32 Multiplexer On PortSet(2,1) Delay(0,150,mSec) LCount=1 SubScan(0,uSec,9) 'Switch to next AM16/32 Multiplexer channel PulsePort(1,10000) 'Generic Differential Voltage measurements 'DiffV()' on the AM16/32 Multiplexer VoltDiff(DiffV(LCount),1,mV250,7,True,0,_60Hz,Mult(LCount),Offs(LCount)) LCount=LCount+1 NextSubScan 'Turn AM16/32 Multiplexer Off PortSet(2,0) Delay(0,150,mSec) 'Call Data Tables and Store Data CallTable meteo CallTable hydro CallTable soh NextScan SlowSequence Scan (10,Sec,3,0) NetworkTimeProtocol ("51.255.197.148",0,100) 'ntp.pool... RealTime(rTime) ' Call Rename EndSequence NextScan EndProg
I tried to put the "FileRename" function in a sub sequence, a slowsequence in the main, didn't works neither.
Something I miss ?
Thanks,
bye.
Use the OutStat within your scan to trigger when to rename the file. Use a string variable in TableFile for the last file name. Use that as the old file name in FileRename.
The code should go in your scan.
If OutStat Then FileRename(LastFileName,"USR:"+Year+"_"+Day_of_Year+"_"+rTime(4)+"_"+rTime(5)+"_soh_"+LoggerID+".dat") EndIf
Hi,
yes, perfect, it's working now.
I make 3 lastFileName (1, 2 and 3) and 3 Outstat (same) variables, for my 3 tablefile, I m' not sure that was the better way but at least, it works !
Thanks JDavis.
Hi,
well, I have take back this program for another campbell : CR310.
It's work but only for the fisrt file created. After the files just get a number to increment (file2.dat, file3.dat, etc.).
Here is my code :
'Declare Variables and Units Public BattV Public PTemp_C Public HalfBr Const LoggerID="HAR2" Public Outstat1 As Boolean Public Outstat2 As Boolean Public LastFileName1 As String * 20 Public LastFileName2 As String * 20 Public rTime(9) Units BattV=Volts Units PTemp_C=Deg C Units HalfBr=mV/mV 'Define Data Tables DataTable(extenso,True,-1) DataInterval(0,1,Min,10) Average(1,BattV,FP2,False) Average(1,HalfBr,FP2,False) StdDev(1,HalfBr,FP2,False) TableFile ("CPU:exten",8,-1,0,10,min,Outstat1,LastFileName1) EndTable DataTable(soh,True,-1) DataInterval(0,1,Min,10) Minimum(1,BattV,FP2,False,False) Minimum(1,PTemp_C,FP2,False,False) TableFile ("CPU:soh",8,-1,0,10,min,Outstat2,LastFileName2) EndTable 'Main Program BeginProg 'Main Scan Scan(10,Sec,1,0) 'Default CR300 Datalogger Battery Voltage measurement 'BattV' Battery(BattV) 'Default CR300 Datalogger Processor Temperature measurement 'PTemp_C' PanelTemp(PTemp_C,4000) 'Generic Half Bridge measurements 'HalfBr' BrHalf(HalfBr,1,mV2500,1,VX1,1,2500,False,500,50,1,0) 'Call Data Tables and Store Data CallTable extenso CallTable soh If Outstat1 Then FileRename(LastFileName1,"CPU:"+rTime(1)+"_"+rTime(9)+"_"+rTime(4)+"_"+rTime(5)+"_extenso_"+LoggerID+".dat") EndIf If Outstat2 Then FileRename(LastFileName2,"CPU:"+rTime(1)+"_"+rTime(9)+"_"+rTime(4)+"_"+rTime(5)+"_soh_"+LoggerID+".dat") EndIf NextScan SlowSequence Scan (10,Sec,3,0) NetworkTimeProtocol ("51.255.197.148",0,100) 'ntp.pool... RealTime(rTime) EndSequence NextScan EndProg
Where am I wrong ?
Again, I have put a record every 10 minutes, but on the field it will be 24 Hr.
Bye.
Little add :
If I delete data file with Device Configuration Utility in the CR3100, the next file is well created, and the next one, wrong.
I can't figure what's wrong in the prog.
Well, I have find. Very sneaky, it's three line before the end's program : I close the slowsequence before nextscan.
Just to invert this two lines, and it's work.
Sometimes ...
hello, there is any way to send the renamed file via mail as attachment??