'CR1000X Series Datalogger
'Example datalogger program for Apogee Instruments Modbus infrared radiometers (SI-500 series)

'For more technical information regarding the SI-500 IR sensor series' operation as well as default settings and register address lests, please consult the sensor's manual, which can be found online at:
'https://www.apogeeinstruments.com/product-manuals/

'Wiring instructions for this program:
'Sensor White (RS485 + wire) -> C6 Comm port
'Sensor Blue (RS485 - wire) -> C5 Comm port
'Sensor Red (Input Power) -> Datalogger 12V port
'Sensor Green (RS232/RS485 selector wire) -> Datalogger ground port (Powered = RS232, Grounded = RS485)
'Sensor Black (ground wire) -> Datalogger ground port

'If using a datalogger model other than the CR1000X, some adjustments to commands will be necessary

'Explanation of constants and variables used in datalogger program
'BattV = Datalogger battery voltage
'PanelT = Datalogger panel temperature
'IRR(2) = Array to hold output from IR sensor modbus registers: location 1 = target temperature in degrees C, location 2 = detector temperature in degrees C
'DetectorTC = Detector (sensor body) temperature in degrees C
'TargetTC = Target temperature in degrees C
'Errorcode = See CRBasic Editor help for the ModbusMaster function for a list error codes and associated causes (0 = normal operation)

'Declare Public Variables
Public PanelT, BattV
Public IRR(2)
Public Errorcode

'Rename variables
Alias IRR(1) = TargetTC
Alias IRR(2) = DetectorTC

'Define Data Tables.
DataTable (SurfaceT,1,-1)
	DataInterval (0,1,Min,10)
	Minimum (1,BattV,FP2,False,False)
	Sample (1,PanelT,FP2)
	Average(1,DetectorTC,IEEE4,False)
	Average(1,TargetTC,IEEE4,False)
EndTable

'Main Program
BeginProg
	Scan (1,Sec,0,0)
		PanelTemp (PanelT,_60Hz)
		Battery (BattV)
		'Open modbus serial port in RS485 mode
	  SemaphoreGet(3)
		  SerialOpen(ComC5,19200,2,0,256,3)
		  SerialFlush(ComC5)
		SemaphoreRelease(3)
    'Read sensor modbus registers.
    SemaphoreGet(3)
       ModbusMaster(Errorcode,ComC5,19200,1,3,IRR(),1,2,2,100,2)
    SemaphoreRelease(3)
		CallTable SurfaceT
	NextScan
EndProg


