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.

PreserveVariables


GRM Apr 26, 2017 11:26 PM

Hello,

Under what cincunstaces the variables (using preserve variables) will be erased? a watchdog can erase the values?

Last time i program a station with preserve variables and use a variable to correct an offset in the field, but after some time i note that variable was back to the original value "cero", under what circunstances this can happend? 

i Dont make any change in the program or the station, except download data, i note that some watchdog errors occur in the status table.

Thank you

Regards

PD.-  I want to use preserve variables to calibrate easy in the field some sensors like an evaporation pan, changing the offset and multiplier direct in the public variables, but i want to be shure that this values dont will change over the time (except of course if i change the program or something similar.


GaryTRoberts May 1, 2017 02:21 AM

A watchdog can mess things up.  Depending on the condition that caused the datalogger to watchdog, perserve variables could possibly not happen.

What version of the operating system are you running?  Are you running the latest version?  The could resolve the watchdog issue you are seeing.


GRM May 4, 2017 03:28 PM

Thank you, im tring to update the OS to the latest version, but some stations are very far and is difficult.

Do you know a way to write a constant in the program in some way in the field?

Normally i use public variables and preserve variable to change or calibrate evaporation pans in the field very easy for the client, calculate the coeficients and then write the multiplier and offset direct over the public variables with no need to change the program with new constants.

Do you have any idea?

Thanks!


JDavis May 4, 2017 03:37 PM

This method is a bit involved, but will write values to a file on the datalogger. It will reload those values when the program starts.

 

Public PTemp, batt_volt
Const SettingsCount = 9
Public MySettings(SettingsCount) = {1,2,3,4,5,6,7,8,9} 'Default values
Dim LastSettings(SettingsCount)
Dim FileHandle As Long
Dim myString As String * 128
Dim i As Long
Dim SettingsChanged As Boolean

'Define Data Tables.
DataTable (Test,1,9999) 'Set table size to # of records, or -1 to autoallocate.
  DataInterval (0,15,Sec,10)
  Minimum (1,batt_volt,FP2,0,False)
  Sample (1,PTemp,FP2)
EndTable

'Main Program
BeginProg
  FileHandle =  FileOpen ("USR:Settings.ini","r",0)
  If FileSize(FileHandle) > 1 Then 'If a non-empty file exists
    FileRead (FileHandle,myString,128) 'Read settings to a string
    SplitStr (MySettings(),myString,",",SettingsCount,5) 'Split string into the settings
  EndIf
  FileClose(FileHandle)
  Move (LastSettings(),SettingsCount,MySettings(),SettingsCount)

  Scan (1,Sec,0,0)
    PanelTemp (PTemp,250)
    Battery (batt_volt)


    CallTable Test

    'Write settings to a file if they have changed
    For i = 1 To SettingsCount
      If LastSettings(i) <> MySettings(i) Then SettingsChanged = true
    Next i
    If SettingsChanged Then
      Erase(myString)
      For i = 1 To SettingsCount
        myString &= FormatFloat (MySettings(i),"%g") & ","
      Next i
      FileManage ("USR:Settings.ini",8) 'Delete old settings file
      FileHandle =  FileOpen ("USR:Settings.ini","w",0) 'Open new file
      FileWrite (FileHandle,myString,0) 'Write settings string to file
      FileClose(FileHandle) 'Don't forget to close the file
      SettingsChanged = false
    EndIf
    Move (LastSettings(),SettingsCount,MySettings(),SettingsCount)
  NextScan
EndProg

 


GRM May 8, 2017 03:50 PM

Thank you Jacob,

I will test and see how it works for my aplication

Regards!!

:)

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