Issue
Customer requires a program to calculate sunrise and sunset times for Sheffield using Sigma programmable objects.
Product Line
Satchwell BAS & SigmaEnvironment
Satchwell BAS & Sigma
Cause
There is no built-in function in Sigma to calculate sunrise/sunset times. A custom program is needed to determine these values based on date and location.
Resolution
To review sunrise/sunset times for a specific location:
- Visit the Sunrise/Sunset Almanac Tool.
- Enter the desired location and click GO.
- Select Almanac > Sunrise/Sunset.
- Choose the required month to view the data.
Alternatively, use the following Sigma programmable objects to calculate these values directly.
Programmable Objects
Object 1 – Day of the Year Calculation
10 XInt = DAY
20 IF MONTH >= 2 THEN XInt = XInt + 31
30 XFlo = FLOAT(YEAR)
40 XFlo = XFlo / 4.00000
50 XFlo = FRAC(XFlo)
60 IF XFlo = 0.000000 THEN YInt = 1 ELSE YInt = 0
70 IF YInt = 0 AND MONTH >= 3 THEN XInt = XInt + 28
80 IF YInt = 1 AND MONTH >= 3 THEN XInt = XInt + 29
90 IF MONTH >= 4 THEN XInt = XInt + 31
100 IF MONTH >= 5 THEN XInt = XInt + 30
110 IF MONTH >= 6 THEN XInt = XInt + 31
120 IF MONTH >= 7 THEN XInt = XInt + 30
130 IF MONTH >= 8 THEN XInt = XInt + 31
140 IF MONTH >= 9 THEN XInt = XInt + 31
150 IF MONTH >= 10 THEN XInt = XInt + 30
160 IF MONTH >= 11 THEN XInt = XInt + 31
170 IF MONTH >= 12 THEN XInt = XInt + 30
180 RETURN VIA TEXT
200 VALUE XIntObject 2 – Sunrise Time Calculation
10 XFlo = POINT 0|1
20 YFlo = FLOAT(YEAR)
30 YFlo = YFlo / 4.00000
40 YFlo = FRAC(YFlo)
50 IF YFlo = 0.000000 THEN YInt = 1 ELSE YInt = 0
60 IF YInt = 1 AND MONTH >= 3 THEN XFlo = XFlo - 1.00000
70 ZFlo = LOOKUP(1001, XFlo)
80 ZFlo = ZFlo / 60.0000
90 YFlo = FRAC(ZFlo)
100 ZFlo = ZFlo - YFlo
110 YFlo = YFlo * 60.0000
120 YFlo = YFlo / 100.000
130 ZFlo = ZFlo + YFlo
140 RETURN VIA TEXT
203 VALUE ZFloObject 3 – Sunset Time Calculation
(Same logic as Object 2, using different lookup values)
Object 4 – Sunrise/Sunset Interlock
10 XFlo = POINT 0|2
20 YFlo = FRAC(XFlo)
30 XFlo = XFlo - YFlo
40 YFlo = YFlo * 100.000
50 IF HOUR >= INT(XFlo + 1.00000) THEN GOTO 90
60 IF HOUR = INT(XFlo) THEN GOTO 100
70 XInt = 0
80 RETURN FALSE "Plant Off"
90 XInt = 1
100 IF MINUTE >= INT(YFlo) THEN XInt = 1
110 XFlo = POINT 0|3
120 YFlo = FRAC(XFlo)
130 XFlo = XFlo - YFlo
140 YFlo = YFlo * 100.000
150 IF HOUR >= INT(XFlo) THEN GOTO 170
160 GOTO 180
170 IF HOUR >= INT(XFlo + 1.00000) OR MINUTE >= INT(YFlo) THEN XInt = 0
180 IF XInt = 1 THEN RETURN TRUE "Plant On"
190 RETURN FALSE "Plant Off"
Attachments
- Sunrise-Sunset Times.zip – Includes lookup table and object files.