Principle of Operation

by | May 16, 2020 | Grid Connect Installation-Group

This document details the Solar Tracking Operational Logic and the Definitions of Elements pertaining to a strategy for new and orphaned Solar Trackers.

Series 2400 is a Universal program based on the National Renewable Energy Laboratory (NREL) Solar Positioning Algorithm for controlling AC or DC (Brushed & Brushless) Motors, Hydraulic Pistons and other mechanical devices for highly accurate Solar Tracking at an affordable price.

It is scalable from 1 to hundreds of trackers in a Grid Connected installation (1 or 2 axis).



An RTU (Programmable Logic Controller) is defined as the central control device which provides communications to the Cloud back-haul, external devices and control logic to a number of stations.

There are 3 Hardware Platforms available:

  1. 113 (VT-IPM2M-113 SPA) Supports 1 Altitude & 1 Azimuth or 2 Azimuth or 2 Altitude Masters
  2. 135 (VT-MIPM-135 SPA) Supports 2 Altitude & 2 Azimuth or 4 Azimuth or 4 Altitude Masters



A  station is defined as “the final control element to the DC relays or  AC contactors which move tracker motors. They also receive sensor input from inclinometers or Hall pulses and limit switches.

Depending on the field requirements, each station can be an RTU using its onboard I/O or expanded using Remote I/O. An 135 can be expanded to 10 Remote I/O stations (Groups).

Model Type RTU

(available number of axis)

  • 113 – 2 motors
  • 135 – 4 motors
  • E2 remote I/O – 16 motors



Each Station controls a finite number tracker motors in each group depending on RTU type.

SPA Types

There are 2 separately configurable axis which are defined in the registers where applicable with AX1 & AX2 as a prefix. Trackers can configured for multiple types of control defined here:

  1. Azimuth (Northern Hemisphere) in both axis AX1 & AX2 or part of a 2 axis Altitude & Azimuth positioning strategy where the Azimuth control range is 0-360 degrees. Each axis can be defined either type.
  2. Altitude in both axis AX1 & AX2 or part of a 2 axis Altitude & Azimuth positioning strategy where the Altitude control range is 0-90 degrees (soft limits -10 to 100 degs.)
  3. Altitude 0-180 degrees where the Azimuth is fixed or in the Latitudes+23 1/2 deg. to -23 1/2 deg. (soft limits -10 to 180 degs.)
  4. Azimuth (+23 1/2 deg. to -23 1/2 deg. Latitude where the sun tracks both North and South at different time during the year. The control logic will detect this setting and change the SPA Type to 4 if 1 or 5 is entered. The control range is -90 deg (270 relative) to +270 degs. See Limit Switch Installation for special settings.
  5. Azimuth (Southern Hemisphere) The control logic will detect this setting based on the Latitude and change the SPA Type to 5 if 1 or 4 is entered. The control range is -135 deg (225 relative) to +135 degs. (soft limits 145 to -145 degs.) See Limit Switch Installation for special settings.
  6. Any other entry will be over written which will define the axis as Undefined. This will create an Alarm (112) which will cause the Permissive be FALSE thereby all trackers on that axis will stop.

Registers (Toolkit)

  • AX20 AX1_SPAtype
  • AX21 AX2_SPAtype

Master – Slave


Trackers can be expanded by creating slaves which follow the Master. When pairing one or more Slaves to a Master these are the requirements:

  1. Master and Slaves shall have the same motors and gear ratios.
  2. Minimum limits switches which interrupt the output voltage (NC) to the motor when tripped.
  3. The Minimum limit switches must stop the trackers in the same position otherwise any variation will result in an error throughout the day.

Tags (Registers)


All Registers are visible by type in the Toolkit Test I/O shown in the right column.

User Inputs are generally found in the Input type and have << in the Tag Description.

Process Outputs are generally found in the Output type and have .. in the Tag Description and should not be changed in Test I/O. Onboard Inputs are found in the Input type but have .. in the Tag Description. 

Registers which are allocated to the RTU function have a common name that define their purpose.

Registers allocated to follow the following naming convention:

Begin with the axis number AX1 or AX2

followed by text descriptive of function ie. “pv”

then followed by station number ie. “_01”

then followed by group number ie. “_1”

Results: AX1pv_01_1

Registers (Toolkit)

  • AX – Analog In
  • AY – Analog Out
  • X – Digital In
  • Y – Digital Out
  • FI – Float In
  • FO – Float Out
  • LI – Long In
  • LO – Long Out




RTU Alarms

Station Alarms

Each Master Tracker has Alarms.

Alarm Codes

  • AY11 rtuAlarmCode
  • AY101.. AX1alarm_01_1..  


Auto Calibration

Auto Calibration applies only to trackers whose axis have Hall Effect or other pulse type input for the sensor. Analog inclinometers can only be calibrated by proper entry of scale (inclinomScale) and offset (inclinomOffSet) values provided by the inclinometer manufacturer. 

Automatic evening calibration can be enabled through enableNightCal which selects a period before sunrise to take the tracker at of evening Stow and touch the Minimum Limit Switch. After this completes, the tracker will move to a pre-position to begin tracking.

 This command will automatically be pre-empted by Wind High Alarm windHalarm or windHHalarm or a Stow command.

Each time the tracker encounters the Minimum Limit Switch and the Calibrate binary is TRUE, the calculated Present Value (Pv) takes the value of the auto-calibration register specific to its axis. This value applies to all trackers which the logic assumes all have approximately the same position at rest. Small variations are compensated for using the Correction (deg.) discussed later in this document.

Typical of mechanical Limit Switches there is an intrinsic dead band between the actuation moving home and the release when tracking. This introduces an error that can be 5 or 10 degrees. This error can be determined by a sensor reading when the Limit Switch is closed and a second at a point right after the Switch releases. The Sensor reading minus the Pv reading is the error which can be entered into the AX1limitSWdb  or  AX2limitSWdb register. 

  • DI X17 Stow
  • DI X18 AX1calibrate
  • DI X19 AX2calibrate
  • DI X20 prePosition
  • DI X29 enableNightCal
  • DO Y17 windHalarm
  • DO Y18 windHHalarm
  • FI4 AX1calibrateLS
  • FI5 AX2calibrateLS
  • FI6 AX1limitSWdb
  • FI7 AX1limitSWdb   



This Calibration refers to a function automatically performed prior to sunrise but it can also be toggled with the register AX1calibrate and AX2calibrate at any time.  The duration is defined in the register calPeriod. 

calPeriod is defined as the time in seconds for a individual tracker to move from the furthest position (usually due West) to the Minimum Limit Switch. It should include an extra 30 seconds to allow for any unforeseen delay. The logic will calculate the number of trackers x the individual calPeriod to allow enough time for an entire field to re-calibrate prior to sunrise.

The calibrate command accomplishes 2 things:

  1. Bring all trackers in a station to the Minimum Limit Switch to auto-calibrate.
  2. Hold this position to allow Slaves to realign starting position. The hold period in seconds is defined in the calRelayHold register.

Calibration will automatically time out and return to tracking or night stow however a high wind alarm (registers windHalarm or windHHalarm) will take precedence over a calibrate command.

Register Calibrated indicates a successful completion of the calPeriod.

prePosition is invoked after night Calibration and is turned OFF automatically at sunrise for tracking to begin.

    • DI X18 AX1calibrate
    • DI X19 AX2calibrate
    • DI X20 prePosition
    • AI AX28 calPeriod
    • AI AX29 calRelayHold
    • DO Y16 Calibrated
    • DO Y17 windHalarm
    • DO Y18 windHHalarm
    • FO1701 SPA_SUNRISE
    • FO1702 SPA_SUNSET
    • FO1706 calStartTime


Correction (deg.)

While tracking or in manual, a correction factor in fractional degrees can be entered specific to each tracker. This value is added to the Calculated Pv and applies to both pulse counts or analog sensors.

A Negative number (-) will result in moving to the East. Conversely a Positive number will move West. The control logic will limit the correction range from -20 to +20 degs. See Advanced.

The results should be a linear change in position. If the resultant correction is too large or not enough then change the value proportionately.

Example: A correction of -2.5 still leaves the tracker 1.2 degrees ahead of the sun, then enter -3.7


The control logic will accept correction values of 50 to 150. This is treated as a percentage % of the Calculated Pv.


  • 150 will result in the Calculated Pv x 150%  (50% more)
  • 100 will result in the Calculated Pv x 100%  (no change)
  • 50 will result in the Calculated Pv x 50%  (1/2 the value)

All values not between 150 to 50 or 20 to -20 will be defaulted to 0.

Starting at FI501

  • FI501 AX1corrPv_01_1  (Axis 1)
  • FI509 AX2corrPv_01_1  (Axis 2)

For multiple trackers, station number and group number changes.

Cycle (Solar Position)

The solar position cycle cycleSP defines in seconds  1-900 how often the control logic program modules are scanned for large remote I/O fields. This reduces network traffic and provides more stable control overall.

The modules affected:

  • Pv (present value) calculation of the position of the tracker.
  • Alarms
  • Permissives
  • AI AX20 cycleSP


Dead-band (Control)

Dead-band is a control element which defines in degrees, how much should the Present Value (Pv) fall behind the Sun’s set point (Sp) before the motor is called to move.

Dead-band can be set by individual Axis which will be common to all Trackers.

RTU’s with local I/O can be set as close as 0.1 degrees but this may cause instability by overshooting the Sp and the dead-band may have to be increased. This is typical in brushed motors where there can be run on after the power to the motor is OFF. If that run on is greater than the dead-band the logic will reverse the motor perhaps in an endless cycle of forward and back.

The user may set an acceptable over shoot value in degrees to prevent the reversal.

Remote I/O systems are allowed a minimum of 1.0 degree dead-band.

Brushless motors (servos) have a breaking mechanism which allows closer control.

  • FI0 AX1deadband
  • FI1 AX2deadband
  • FI2 AX1overShootDB
  • FI3 AX1overShootDB  


Directions in Degrees


All directions fractional in degrees are Cardinal 0-360. Zero being North clockwise to East 90, South 180, West 270. This applies to Zenith, Azimuth, Altitude (90-Zenith), Sp (Set Point), Pv (Present Value) and all other Limit, Calibration values.



masterEnable – Required for all Automatic Control functions

enableEnterprise – configures RTU to utilize Remote IO with 1 to 10 Stations

enableRemoteIO – Enable Modbus Polling for Remote DI DO

enableLocalIO – Enable local I/O for 113/135 Series

enableWind – Enable Wind Alarm to Stow Tracker

enableBackTrack – Enable Back Tracking for Single Axis (Altitude)

enableNightCal – Automatically Calibrate at Night & Pre-position before Sunrise. This will continually move the Master tracker towards the Minimum Limit Switch until it stops the movement or it hits the Soft Limit in which case an Alarm will occur. This will have to be cleared in order to resume tracking in Auto.

Registers (Toolkit)

  • DI X15 masterEnable
  • DI X21 enableEnterprise
  • DI X22 enableRemoteIO
  • DI X23 enableLocalIO
  • DI X24 enableWind
  • DI X28 enableBackTrack
  • DI X29 enableNightCal

Force Pv

On a new installation, the user can use the forcePv variable to approximate the tracker position or calibrate a known position while in operation.

The default value is -999.90 which indicates no change to the logic. Once a valid number is entered and the relays for this tracker are OFF the netPv is calculated and stored as the present position Pv in degrees (ie. AX1pv_01_1) and in counts (ie. (AX1netPv_01_1) .

The user input is restricted by the following:

  • The user input cannot be less than the Soft Limit Minimum defined for the Axis (FI8  AX1softLimitMin & FI10  AX2softLimitMin )
  • The user input cannot exceed the Soft Limit Maximum defined for the Axis (FI9  AX1softLimitMax & FI11  AX2softLimitMax )
  • The Force value will be taken at face value and correction factor (FI501 AX1corrPv_01_1 & FI509 AX2corrPv_01_1 ) and Limit Switch dead band (FI6 AX1limitSWdb & FI7 AX2limitSWdb) are not considered.

Force Pv (deg) Starting at  F1101

  • AX1forcePv_01_1  (Axis 1)
  • AX2forcePv_01_1  (Axis 2)

Force Pv (deg) Starting at  FO101

  • AX1pv_01_1  (Axis 1)
  • AX2pv_01_1  (Axis 2)

Net Pv (counts) Starting at  LO101

  • AX1netPv_01_1  (Axis 1)
  • AX2netPv_01_1  (Axis 2)

For multiple trackers, station number and group number changes.

Manual Control (local)

Local Manual Control allow the user to invoke movement through local toggle switches for each axis (up & down / East & West). This is enabled through the Auto/Manual Switch. ON=Auto OFF=Manual. Models 113 & 135.


Registers (Toolkit)

  • DI X8 autoManual

Move Period

movePeriod is a period in seconds that defines how long the control logic allows motor movement in auto. Even if the set point is not reached the logic will start over to ascertain the next move if any.

This is primarily for remote I/O applications where communications are lost and the command to move should stop. The remote I/O are configured with a watchdog time to automatically turn OFF output after 3 seconds.


Registers (Toolkit)

  • DI X8 autoManual


Making a tracker Group non-Operational is achieved by setting the Analog Out register to 1000. This is done through the View/Tags and Alarms page.

This is the only value that can be manually input by the user, any attempt to enter other values will revert back to the actual Alarm value for the Group.

Once the register changes to 1000, the Group Permissive will be False and the Group will go into soft Manual with Manual Commands OFF. When changing back to Operational, enter zero in the alarm register. The user will have to change soft Manual to soft Auto in the Motor Control screen.


Registers (Toolkit)

  • AY 101 AX1alarm_01_1..nn
  • AY 109 AX2alarm_01_1..nn


Each individual tracker has a permissive which allows motor movement. Each scan prior to movement, the control logic checks for any improper setting, command, Limit Switch encounter or alarm and will determine a DO TRUE (movement is permitted) or FALSE (movement is not permitted).


  • DO Y1001..n  AX1permis_01..n
  • DO Y1009..n  AX2permis_01.. n


prePosition is a command for trackers to per-emptively position themselves prior to sunrise to maximize production.

Azimuth trackers move to the calculated Azimuth of the sun at tomorrow’s sunrise. This bearing in degrees is automatically calculated by the logic.

Altitude trackers move to the Minimum Limit Switch.

The user can give a prePosition command for testing which must be turned OFF manually.

prePosition is invoked after night Calibration and is turned OFF automatically at sunrise for tracking to begin.


  • AI AX20 AX1_SPAtype
  • AI AX21 AX2_SPAtype
  • DI X20 prePosition

Azimuth is determined by type:

 AX1_SPAtype = 1, 4 or 5

AX2_SPAtype = 1, 4 or 5

Relative Azimuth

relativeAzimuth is a variable for trackers to operate in the Latitudes below 23 1/2 degrees in the Northern Hemisphere and all Latitudes in the Southern Hemisphere

As the sun moves West through a Northerly path it must transition 0 deg. North to 359 degs. which is impractical for control. To correct for this the control logic converts degrees West of 0 to negative numbers if the Sun entry direction is Northerly.

Register (Toolkit)

  • FO1708  relativeAzimuth

Sensor (feedback)

The control logic can be configured for pulse inputs (Hall Effect sensor) or analog inputs (inclinometer). The analog input can be configured in software for 4-20mA, 0-5VDC & 0-10VDC but need to be wired accordingly.

Acceptable inputs are: 

  1. Hall Effect pulse or other digital square input pulse.
  2. Analog input from an inclinometer of the following types:

4 – 20 mA



Any other input will default to 3 indicating “not defined” and triggering an alarm.

Registers (Toolkit)

  • AI AX22 AX1_sensor
  • AI AX 23 AX2_sensor

Soft Limits

Soft Limits are governed by the operation range and prevents the motors from traveling beyond the physical Limit Switches in case of switch failure. Using Soft Limits in lieu of mechanical Limit Switches is never recommended. Once a soft limit is reached the automatic tracking will be suspended until there is human intervention. See procedure to release link

Minimum & Maximum Soft Limits are defined for both axis individually.

  • AX1softLimitMin
  • AX1softLimitMax
  • AX2softLimitMin
  • AX2softLimitMax

Particular attention must be paid to settings in Latatudes below 23 1/2 deg.

In special applications where a physical limit switch is not used for maximum travel and the field owner or operator considers it safe. By enabling binaries AX1enabSoftLSmax or  AX2enabSoftLSmax, the Soft Limit Max can be used as a virtual Limit Switch stopping movement 2 degrees before the Solt Limit is reached thereby avoiding the suspension of automatic tracking.


Register (Toolkit)

  • FI8  AX1softLimitMin
  • FI9  AX1softLimitMaxFI10  AX2softLimitMinFI10  AX2softLimitMin

  • DI X25  AX1enabSoftLSmax
  • DI X26  AX2enabSoftLSmax

Station Status

Station Status Modules binaries provide network connection status of each Station’s DI & DO IO modules. (Up to 10) TRUE = connection.

  • DI X901-910 staStatusDO_01-10
  • DI X926-935 staStatusDI_01-10



At sunset the Master trackers automatically proceed to night stowage position. The user can force a Stow through the Stow register at any time.

The Stow position is defined in degrees and is defined for each Axis in registers AX1stow & AX2stow

A user can also use the Stow positions for other purposes such as testing positions of the Tracker(s). The Stow command affects all trackers controlled by the RTU.

Individual tracker movement is achieved through the use of Soft Manual commands.

  • X17 Stow
  • FI12 AX1stow
  • FI13 AX2stow


Test Commands

User may execute the following Tests by issuing the following Command Numbers to the test register:

10 – This test sets all Stations associated with an RTU to Manual Control by making stationAM_01 thru stationAM_09 = TRUE

11 – This test sets all Stations associated with an RTU to Automatic Control by making stationAM_01 thru stationAM_09 = FALSE

12 – This test sets all AXIS 1 Trackers in all Stations associated with an RTU to Manual Control by making AX1softAM_01_1 thru AX1softAM_09_8 = FALSE

13 – This test sets all AXIS 1 Trackers in all Stations associated with an RTU to Automatic Control by making AX1softAM_01_1 thru AX1softAM_09_8 = TRUE

14 – This test sets all AXIS 2 Trackers in all Stations associated with an RTU to Manual  Control by making AX1softAM_01_1 thru AX1softAM_09_8 = FALSE

15 – This test sets all AXIS 2 Trackers in all Stations associated with an RTU to Automatic  Control by making AX1softAM_01_1 thru AX1softAM_09_8 = TRUE

16 – This test sets all AXIS 1 Trackers in all Stations associated with an RTU position (degrees) to the Stow value by making AX1netPv_01_1 thru AX1netPv_09_8 = AX1stow

17 – This test sets all AXIS 2 Trackers in all Stations associated with an RTU position (degrees) to the Stow value by making AX2netPv_01_1 thru AX2netPv_09_8 = AX2stow

991 – Simulator. This test simulates pulses without Remote IO when in Enterprise Mode. All Control elements function without Modbus transfers enabled.

12345678 – Cycles the 32 Digital Outputs of each DO module associated with the Station. With a special wiring harness the outputs are connected to the Digital Inputs mimicking Hall Inputs & Minimum Limit Switch Inputs.

This tests:

  • Station Status
  • Modbus Read/Write to IO Modules
  • Wiring continuity and correctness
  • DI Module properly configured to Count Up
  • LI7 test



  • LI7 test
  • DI  X101-109 stationAM_01-09
  • DI X301-X444  AX1softAM_01_1 – AX2softAM_09_8
  • LO101 – LO244  AX1netPv_01_1 thru AX2netPv_09_8

Wiring Designation

Wiring is dependent on hardware platform (113/135), Axis Type configuration (Azimuth or Altitude ) and sensor used. The wiring designation defines which drawing to use:

MX-1111P :  Axis 1 & 2 – Azimuth (DI pulse as sensor)

MX-2222P  :  Axis 1 & 2 – Altitude  (DI pulse as sensor)

MX-2222A  :  Axis 1 & 2 – Altitude  (Analog input sensor)

MX-1122PP :  Axis 1 Azimuth – Axis 2 Altitude  (DI pulse as sensor)

MX-1122PA :  Axis 1 Azimuth – Axis 2 Altitude  (DI  & Analog sensors )

MX-2211PP :  Axis 1 Altitude – Axis 2 Azimuth  (DI pulse as sensor)

MX-2211AP :  Axis 1 Altitude – Axis 2 Azimuth  (Analog & DI sensors )


Registers (Toolkit)

  • AI AX20 AX1_SPAtype
  • AI AX21 AX2_SPAtype
  • AI AX22 AX1_sensor
  • AI AX 23 AX2_sensor


 Watchdog/Heartbeat Monitor is defined in the remote I/O configuration.

The checkbox “Watchdog CPU Monitor” defines the internal CPU monitor has detected a CPU fault.

I/O Poll Timeout settings

Timeout 3 seconds

Checkbox “Drop physical Outputs”