The cpd.ini file operates on standard heading (aka section) and key format. Headings are denoted by a starting "[" and a trailing "]". When a reference is made to a heading those charactors should not be included. Any text after a semicolon will be ignored, all comparisons are case insensitive, except as noted. Boolean values will be considered TRUE if they are present and equal to "TRUE", otherwise, they are considered false. The "Global" heading is required, it contains crucial operation parameters, as is the "Disk" heading. All "normal" instruments use a port description, the "Port=" key. It is in the the format of /dev/device:baudPBS, such as "Port=/dev/ttyR0:4800N81", this would use the first rocket port serial port, at 4800 baud, no parity, 8 bits, 1 stop bit. The device is a standard unix device file (addressing a serial port). The baud rate is standard. The (P)arity can be N = None, E = Even, O = Odd. (B)its can range from 6 to 8, inclusive. (S)top bits can be 1 or 2. CPD looks for the ini in the path /etc/cpd.ini with the environment variable "CPD" prepended to it All instruments use the following keys Port=/dev/ttyR0:4800N81 Port descrition, used only on "normal" instruments PortOut=/dev/ttyR0:9600N81 Port descrition, all log records will also be written to this port (blank or not present disables serial port log writing) NiceName=NAME A full length name, used in error printing and displaying ShortName=L A short name (preferably one letter) used to display lists of instruments IsLogging=VALUE Value can be TRUE,FALSE, or GLOBAL, if it is FALSE, the instrument will not write any log files; TRUE will write logs GLOBAL will use GlobalLogging to determine. Not present is the same as GLOBAL LogBase=INSTID Append timestamp "_yyyy-mm-dd_hh:mm" to this and place in directory specfied by LogDir and use as a log file LogPrepend= Prepend this to every log entry, can be blank to specify nothing LogInterval=VALUE Similar to IsLogging, but specifies the interval to rotate logs on [Global] CPDBin=/bin/cpd Pathname relative to $CPD of the binary (or just cpd if it is in $PATH) CPDState=/etc/cpdstate Path, relative to $CPD, of the state file BaseBin=/bin/ Path (with trailing /) to look for binarys, again relative to $CPD Instrument=HEADING:binary Spawn the instrument "binary" using the heading "HEADING". Can also be pause:time, to delay spawning other instruments for time seconds SerSrvBin=/aer/prg/cpd/bin/sersrv Filename of the serial server, if it can't be opened, looks in $CPD/BaseBin If not specified, looks for sersrv in $PATH or $CPD/BaseBin Spancheck=HEADING Identify a heading as a spancheck heading uMAC=HEADING:id Identify a heading as a uMAC and assign it ID "id", When addressing uMACs this is either the digital id or the hundreds digit of an analog in/out channel Aerosol=HEADING Identify heading "HEADING" as the heading used by the aerosol instrument, if not present, defaults to "AEROSOL" Filter=HEADING Identify heading "HEADING" as the filter instrument, defaults to "FILTER" Aeromon=HEADING Identify a heading as aeromon (used by cpx) Clap=CLAP Identify a heading as the clap (used by cpx) ClientPassword=cmdl Use "cmdl" as the password for the client [Disk] LogDir=/aer/prg/cpd/log/ Place log files in this directory, must have the trailing "/" and CPD must have write permissions there LogRotateInterval=hh:mm Rotated log files every hh:mm, first rotation will be hh:mm from CPD start, unless LogFirstRotateOnDay is TRUE, then the first rotation occurs on the day transition GlobalAvgInterval=mm:ss Clear the averages every mm:ss (will start this from the last minute boundary) LogtRotateOnDay=BOOLEAN Force the log rotation on day boundary, regardless of the interval FlushInterval=minutes Flush (force all data to be written) log files every "minutes" StationID=LAB Use "LAB" as the station ID in log files MaxFileSize=64 Force file rotation if a file exceeds this size, in KB. 0 or not present disables GlobalLogging=BOOLEAN When an instrument does not specify logging or specfied "GLOBAL" use this for its logging value GlobalLogInterval=mm:ss When an instrument does not specify a log interval or specifies "GLOBAL", use this, first entry will be on next multiple of mm into hour [SPANCHECK] Heading can differ and multiple instances (with different names) can exist Neph=HEADING Run spancheck on the neph using by "HEADING" Multiple instances are allowed SpanCO2Time=mm:ss Time to measure CO2 on spancheck SpanAirTime=mm:ss Time to measure AIR SpanCO2FlushTime=mm:ss Time to flush CO2 before sampling SpanAirFlushTime=mm:ss Time to flush AIR ClientName=STRING Display "STRING" when addressing this spancheck [GPS] Heading can differ, all normal instrument keys are valid ExtraConfig=SENTENCE Send "SENTENCE", with leading "$" and trailing checksum to the GPS unit on comms init, multiple instances allowed TimeSyncProg=/tmp/gpstimeset GPS timeset program, used for clock autosync must be setuid root DoAutosync=BOOLEAN Enable/Disable automatic clock syncing to GPS time LogFast=BOOLEAN use "averge" time period to control when data are logged, otherwise, use monitor time period MaxClockDeviation=SECONDS Allow SECONDS deviation from GPS clock before autosyncing Waypoint=ID,LAT,LONG Add a waypoint, with ID (max 7 chars), at LAT,LONG [BESTUPS] Heading can differ, all normal instrument keys are valid ACThreshhold=90 When AC line voltage drops below this, consider that we are using the battery [WATLOW] Heading can differ, all normal instrument keys are valid NO INSTRUMENT SPECFIC KEYS [LOVEPID] Heading can differ, all normal instrument keys are valid Address=032 Address of controller, in hex (ex: 032) Have one line for each pid control chained on this serial port ExtraConfig=Addr,COMMAND Send "COMMAND" to the control at address, adds the addresssing info and checksum, multiple instances allowed, send before initial setpoints ManualMode_XX=TRUE Use manual output mode (instead of setpoint) for a given control, XX is the address SP_init=Addr,SP1,SP2 Initially sets setpoints 1 and 2 to given values on the control at this address, sp1 or sp2 can be omitted to set just one, multiple instances allowed, SP_init is optional SoftwarePID_X=P:I:D:pv_cal:out_cal[:P,min,max][:I,min,max][:D,min,max][|P:I:D:pv_cal:out_cal[:P,min,max][:I,min,max][:D,min,max]] Specfity that the control at address X (hex, as above) should use the interval software PID algorithm. P,I,D are the parameters for the algorithm. pv_cal and out_cal are calibration polynomials for the process variable (input) and the output value, respectivly. P,min,max specifies that the entire algorithm should be limited to the range [min,max], before output calibration. I,min,max specifies that the integral term should be limited to the range [min,max] (this is after scaling and is the limit of the entire integral, not just its influence). D,min,max specifies the maxium influence of the dirivative on the algorithm, [min,max] range. The P,I,D limits are all optional (":" delimited, as the other fields), order does not matter. They are assumed to be [-inf,inf] if not present (no limits). A repeat definition can follow the first, dilimited by a "|" (pipe) that specifies a software PID for the 2nd channel. NOTE: if the first is specified and the 2nd is not, the 2nd setpoint will be ignored entirely. [CNC] Heading can differ, all normal instrument keys are valid CNType=TYPE Type can be 3010/3010POLLED/3703/Pulse/CHAN2/ 3022A/3781 (3703 is NOT TESTED), Defaults to Pulse, if CHAN2, Port is invalid, but CNCFrom becomes valid CNCFrom=HEADING Heading to read from if "CHAN2" type Q_cnc_cc_s=FLOWRATE Flowrate in cc/s Run_Averages=FALSE Run/log averages IgnoreFlush=FALSE Ignore (average durring) aerosol flushes [NEPH] Heading can differ, all normal instrument keys are valid InitStr=STRING Send STRING as a command on Neph init SMZ=4 Neph zeroing mode STA=1 Neph averaging time (sec) STB=25 Neph blanking time (sec) STP=3600 Neph time between zero checks (sec) STZ=300 Neph duration of zero checks (sec) SMB=1 Neph backscatter mode SP=75 Lamp power (watts) SPexit=0 Set lamp power to this on exit ZeroAt=SECONDS Start a zero at seconds after the hour, multiple instances allowed Lambda_Green=536.0 Wavelength of Green Lambda_Red=690.0 Wavelength of Red Run_Averages=FALSE Run/log averages IgnoreFlush=FALSE Ignore (average durring) aerosol flushes MaxLampCurrent=7.0 Reduce lamp power by 10% each minute until lamp current falls below this. Zero disables. [NEPHM903] Heading can differ, all normal instrument keys are valid Run_Averages=FALSE Run/log averages IgnoreFlush=FALSE Ignore (average durring) aerosol flushes [CLAP] Heading can differ, all normal instrument keys are valid Analog=FALSE TRUE if the CLAP is running in analog mode, FALSE for serial mode SmoothTC=60 Number of points to smooth with Area_m2=1.783E-5 Sample area in m^2 (serial only) Autodetect=BOTH Autodetect filter change (can be START,STOP, BOTH,NONE) default is NONE Serial_Number=100 Instrument serial number (determines old/new CLAP) Threshold_T=0.02 Require transmittence to be this close to unity to detect a filter change end Threshold_RSD=0.0005 Require RSD to be less then this to detect a filter change end I_Band=0.5 Start a filter change when an instant value spikes by this much precent from the average Chan_Bap_lin=1 uMAC channel for linear Bap (analog only) Chan_Bap_log=2 For log10 Bap Chan_Tr=3 For filter transmittence Chan_Q_slpm=4 For flow rate Cal_Analog_Bap_lin=0.0,1.0E-5 Linear bap calibration (analog only) Cal_Analog_Bap_log=7.0,1.0,1E-6 For log10 Bap Cal_Analog_Tr=0.0,0.2 For filter transmittance Cal_Analog_Q_slpm=0.0,1.0 For flow rate Cal_Bap=0.0,1.0 Global Bap calibration (applies to both serial and analog) Cal_Tr=0.0,1.0 Filter transmittance Cal_Q_slpm=0.0,1.0 Flow rate Cal_TRC=0.710,1.0796 Filter transmittance correction [AETHALOMETER] Heading can differ, all normal instrument keys are valid Timebase=2 Approx time between reports (mins) Lambda_X=Y Set the wavelength of channel X [1-7] to Y The default wavelengths of channels 1-7 are: 370, 470, 521, 565, 700, 430, 950 [UMAC] Heading can differ, all normal instrument keys are valid Addr=0 Address on uMAC chain CountAIch=24 Number of Analog IN channels present CountDch=2 Number of digital channels present MinDch=0 Base digital channel (zero based) InitAO=0.0,3.0 Set the analog out channels to this on startup, comma delimited, this is also the state the channels are put in on cpd terminate InitDO=0000 Hex number representing digital out state on startup, first (left most) two digits are first channel, also the state the channels are put in on cpd terminate ClipNN=min,max Clip (limit values to in the range [min,max]) the analog channel NN (two digit decimal number of the channel to be clipped). Run_Averages=FALSE Run/log averages IgnoreFlush=FALSE Ignore (average durring) aerosol flushes [LOVEPIDUMAC] Behaves like a uMAC, taking process values from Love PID controlers and mapping them to a fake uMAC channel, heading can differ, doesn't use normal instrument keys, is assigned ID like other uMacs MapAnalogIn=channel#:HEAD:Addr Maps the channel # to the process value of the love PID control at given address on the instrument process named by HEADING MapAnalogOut=channel#:HEAD:Addr:OutChan Maps the Anlog output channe channel# in to the PID in HEAD with Addr, setpoint channel OutChan NOTE: when using with aerosol, remember to include calibration lines for the sensors (they are needed even though offset is 0 and slope is 1) [SCHEDULE] Heading can differ, all instrument keys valid, except "Port" Neph=HEADING Neph to zero when time Dig_uMAC=0 uMAC (ID) to use for digital out uMAC_ChanPump=0 uMAC digital channel for the pump uMAC_ChanHeater=0 For the heater (humidifier) uMAC_ChanFlask=0 For the flask Home=GPSWAYPOINT Home location, by GPS waypoint ID Site=GPSWAYPOINT Site location TasksEnabled=TRUE Enable tasks at startup Task=TASKNAME,PARAM Add a task, TASKNAME can be SYSTEMSTARTED; PARAM not required TAKEOFF; PARAM is speed in m/s ENROUTESITE; PARAM is distance in km READYTOSAMPLE; PARAM is seconds ONSITE; PARAM is km ENROUTEHOME; PARAM is km READYTOLAND; PARAM is seconds LANDING; param is speed in m/s [AEROSOL] Heading can differ, all instrument keys valid, except "Port" Dig_uMAC=0 Index of digital uMAC to use Dig_Chan_AnalyzerImpactor=10 Digital channel to use to control the impactor Dig_Chan_Bypass=9 Channel to control the bypass RefNeph=HEADING Use heading as the reference neph WetNeph=HEADING Use heading as the humidfied neph, if not present, will be disabled CNC=HEADING Use heading as CN counter, not present disables CNA=HEADING Use heading as the CN ambient counter, not present disables CLAP=HEADING Use heading as the clap (single wavelenth) PSAP3=HEADING Use heading as the 3 wavelength PSAP SecondsToFlush=10 Seconds to flush (pause sampling) after a valve change SecondsToSpinup=20 Seconds to spinup CN_Out_Lin=BOOLEAN Use linear output for CN output CN_uMAC_Chan=0 Output channel for CN analog out, -1 disables MFC_Set_Q=30.0 Refernce MFC flow at STP MFC_uMAC_Chan=1 Analog out channel for MFC, -1 disables Bypass_On_Contam=FALSE Bypass analyzers on contamination Average_On_Contam=FALSE Include data in averages when contaminated DefaultCut=FINE/COARSE Set the default cut, FINE, 1-um or COARSE, 10-um Cutpoint=mm:ss,FINE/COARSE Create a cutpoint, change the cut to the second parameter, at mm:ss after the hour, multiple instances allowed Chan_X_T=-1 Set the temp sensor channel for sensor "X", X can be the following: Inlet,HumidoPreheat,HumidoControl, Ambient,Sample,Rack,Pumpbox,Heater, Stack,uMAC -1 Disables this channel NOTE: in cp HumidoPreheat is S1 and HumidoControl is S2 Chan_X_RH=-1 Set the RH sensor channel for sensor "X", the same channels as above are valid, -1 also disables Chan_dP_Y=-1 Set the channel for dP sensor "Y", Y can be the following: Pitot,Purge,NephImp,Spare1,Spare2 Chan_Q_Z=-1 Set the channel for flow sensor "Z", Z can be the following: Filter,Analyzer,Spare3,Spare4,Bypass, CNDrier,CN NOTE: Cal_Q_Analyzer MUST match up with Cal_MFC_Out within 1% on the range [5.0,50.0] or it will generate an error Chan_Wind_S=60 Set channel for wind speed sensor Chan_Wind_D=60 For wind direction Chan_V_uMAC For uMAC voltage sensor Chan_P_ambient For ambient pressure sensor Cal_X_T=0.0,1.0 Calibration polynomial for temp sensor X, see above Cal_X_RH=0.0,1.0 For RH sensor X Cal_dP_Y=0.0,1.0 For dP sensor Y, see above Cal_Q_Z=0.0,1.0 For flow sensor Z, see above Cal_Wind_S=0.0,1.0 For wind speed sensor Cal_Wind_D=0.0,1.0 For wind direction Cal_V_uMAC=0.0,1.0 For uMAC voltage sensor Cal_P_ambient=0.0,1.0 For ambient pressure Cal_MFC_Out=0.0,1.0 For MFC output value (and coversion to voltage or setpoint depending on output device) NOTE: this MUST match up with Cal_Q_Analyzer within 1% on the range [5.0,50.0] or it will generate an error [HUMIDOGRAPH] Heading can differ, all instrument keys valid, except "Port" DeviceChanAandB=watlow/lovepid Type of device to send setpoint commands to for the first two channels. Either "watlow" or "lovepid". Defaults to watlow if key not present. Watlow=HEADING Use HEADING as the watlow controller (if device is watlow) LovePIDChanA=HEADING:Addr:SP# Use the control at HEADING, with the specified address, and set the specified setpoint number (1 or 2) for the channel A setpoint (if device is lovepid) Ex: "LOVEPID:032:1" = setpoint 1 on control at address 032 LovePIDChanB=HEADING:Addr:SP# Same as above, but for channel B Pump_uMAC_ch=1 Use this channel as the analog out for the pump PumpRange_uMAC_ch=1 Use this digital output channel to switch the pump range Dig_uMAC=0 Index of digital uMAC to use Scanning=BOOLEAN Initially running setpoints SP_init=ChanA,ChanB,ChanC,ChanD Initally use this as the setpoint, Channels A and B on the watlow, channel C the pump, which ranges from -100.0 to 100.0 percent, channel D is pump range; H or L SP_idle=ChanA,ChanB,ChanC,ChanD Set this setpoint on exit Setpoint=mm:ss,ChA,ChB,ChC,ChD Add a setpoint, that will occur mm:ss after the hour (or just ss after the hour, if no colon is present), same channels as SP_init [FILTER] Heading can differ, all instrument keys valid, except "Port" Neph=HEADING Use heading as a Neph to retrieve temp+pressure Dig_uMAC=0 Use this uMAC ID for digital out uMAC_ChanBypass=14 Use this uMAC digital out channel to control the bypass uMAC_Chan_FN=Chan Use "Chan" on digital out for controlling filter N uMAC_Chan_dp_FN=Chan Use Chan for the dP sensor on filter N uMAC_Chan_Q_Filter=Chan Use uMAC AIN chan for the flow sensor uMAC_Chan_T_Rack=Chan AIN channel for T_Rack uMAC_Chan_T_Sample=Chan AIN channel for T_Sample uMAC_Chan_RH_Sample=Chan AIN channel for RH_Sample uMAC_Chan_T_uMAC=Chan AIN channel for uMAC temperature uMAC_Chan_V_uMAC=Chan AIN channel for uMAC voltage uMAC_ChanMFC=0 Set the MFC AOUT channel HoursEachFilter=24 Sample each filter for this many hours StartHour=0 Start sampling this many hours after midnight, if HoursEachFilter>=24 SecondsOnBlank=10 Pull air through the blank for this many seconds after a filter change MFC_SetQ=30.0 MFC flow at STP DisableRackHeaters=FALSE Disable rack heater control RackHeat=0 Initial rack heat uMAC_Chan_25w_Heater=15 uMAC channel for the 25 watt heater uMAC_Chan_50w_Heaters=14,13 uMAC channels for the two 50 watt heaters Cal_dp_FN=0.0,1.0 Calibration polynomial for dP sensor on filter N Cal_Q_Filter=0.0,1.0 For the filter flow sensor NOTE: this MUST match up with Cal_MFC_Out within 1% on the range [5.0,50.0] or it will generate an error Cal_T_Rack=0.0,1.0 For the T_Rack sensor Cal_T_Sample=0.0,1.0 For T_Sample Cal_RH_Sample=0.0,1.0 For RH_Sample Cal_T_uMAC=0.0,1.0 For the uMAC temperature sensor Cal_V_uMAC=0.0,1.0 For the uMAC voltage Cal_MFC_Out=0.0,1.0 For MFC voltage/setpoint output NOTE: this MUST match up with Cal_Q_Filter within 1% on the range [5.0,50.0] or it will generate an error [AEROMON] Heading can differ, all instrument keys valid, except "Port" Filter=HEADING Use heading as the filter (to log its dP sensors) Max_NephImp_dP=-1.0 Max dP across the Neph impactor, -1.0 disables CNCC_Dirty=100000 Always contaminated if CNC>this CNCC_Clean=500 Never if CNC