The SDIRecorder() aCv command facilitates using the SDI-12 standard Start
Concurrent command (aCv!) without the back-to-back measurement sequence
normal to the CR1000 implementation of aCv!.
Consider an application wherein four SDI-12 temperature sensors need to be near-
simultaneously measured at a five minute interval within a program that scans
every five seconds. The sensors requires 95 seconds to respond with data after a
measurement request. Complicating the application is the need for minimum
power usage, so the sensors must power down after each measurement.
This application provides a focal point for considering several measurement
strategies. The simplest measurement is to issue a M! measurement command to
each sensor as shown in the following CRBasic example:
Public BatteryVolt
Public Temp1, Temp2, Temp3, Temp4
BeginProg
Scan(5,Sec,0,0)
'Non-SDI-12 measurements here
SDI12Recorder(Temp1,1,0,"M!",1.0,0)
SDI12Recorder(Temp2,1,1,"M!",1.0,0)
SDI12Recorder(Temp3,1,2,"M!",1.0,0)
SDI12Recorder(Temp4,1,3,"M!",1.0,0)
NextScan
EndProg
However, the code sequence has three problems:
1. It does not allow measurement of non-SDI-12 sensors at the required frequency
because the SDI12Recorder() instruction takes too much time.
2. It does not achieve required five-minute sample rate because each
SDI12Recorder() instruction will take about 95 seconds to complete before
the next SDI12Recorder() instruction begins, resulting is a real scan rate of
about 6.5 minutes.
3. There is a 95 s time skew between each sensor measurement.
Problem 1 can be remedied by putting the SDI-12 measurements in a
SlowSequence scan. Doing so allows the SDI-12 routine to run its course
without affecting measurement of other sensors, as follows:
Public BatteryVolt
Public Temp(4)
BeginProg
Scan(5,Sec,0,0)
'Non-SDI-12 measurements here
NextScan
SlowSequence
Scan(5,Min,0,0)
SDI12Recorder(Temp(1),1,0,"M!",1.0,0)
SDI12Recorder(Temp(2),1,1,"M!",1.0,0)
SDI12Recorder(Temp(3),1,2,"M!",1.0,0)
274