![]() |
Search   |
|
|
This is the source code that uses the
Sun, TMY weather, and Collector classes to build a very simple solar collector
simulation. Even though it is a very simple simulation, it does
incorporate actual hour by hour weather, and accurate modeling of a solar
collector based on its efficiency curve.
.
This is just to take a look at before you download -- if you want to download it, then download all the solar classes here: Solar Tools Source
An slightly more complex example simulation that includes storage and report writing is included in the download package.
'Solar Analysis Tools - 'Copyright (C) 2005 Gary Reysa www.BuildItSolar.com (gary@BuildItSolar.com)
' This program is free software; you can redistribute it and/or modify it ' under the terms of the GNU General Public License as published by the Free ' Software Foundation; either version 2 of the License, or (at your option) ' any later version.
' This program is distributed in the hope that it will be useful and encourage ' further development of solar tools, but WITHOUT ANY WARRANTY; without even ' the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ' See the GNU General Public License for more details.
'Really Simple Simulation Example:
'This is a bare minimum simulation that still makes use of 'hourly weather data, and models a solar collector faithfully.
' Its to show how simple a simulation that uses actual weather ' and a collector defined by an efficiency curve can be. ' Note how the collector efficiency varies greatly with the ' weather (cloudyness). ' The next step would be to include realistic variation of ' the collector inlet temperature (Ti). This will also have ' an effect on collector efficiency, as higher inlet temperatures ' reduce efficiency by increasing collector losses. ' The other (slightly more complex) example includes a storage ' tank in the simulation, and provides realistice collector inlet temperature.
Imports System.io Imports System.Math
Module OutHouse Const DegPerRad As Single = 57.3
' Main simulation loop
Sub Runsimulation()
Dim SV As New VectorCls ' vector to store current direction to sun
Dim Idn, Idif As Single ' solar direct and diffuse radiation
Dim Tix As Integer
Dim Efic, Qout, Incidence, IColTot As Single
' Set the values in ths Sun object that do not change during simulation
' Make a TMY object to fetch and store the hr by hr weather
Dim TMY As TMYcls = New TMYcls() ' to store hour by hour weather
Dim T As TMYstruc ' stores current hour of weather
'read in a TMY weather data set
TMY.ReadTMYFile("Billings.TM2")
' this TMY weather file must be on your current dir --
' in Visual Studio this seems to be the bin dir for the project you are in.
' This mehtod opens the file, and reads the full years worth of weather into
' memory.
' Make a Sun
Dim Sun As New SunCls()
'Set the values in the Sun object that remain constant during simulation
Sun.Latitude = 46 / DegPerRad ' Local latitude
Sun.Longitude = 110 / DegPerRad ' Local longitude
Sun.Altitude = 0 ' Altitude above sea level
Sun.Year = 2001 ' just use 2001
' Make a Collector
Dim OHCol As New CollectorEcurveCls ' collector with efficiency curve defined
' Set the values in the Collector object that do not change during simulation
OHCol.Area = 150 ' collector area
OHCol.Azimuth = 0 / DegPerRad ' Collector azimuth (bearing)
OHCol.Tilt = 90 / DegPerRad ' Collector tilt
OHCol.Slope = -0.805 ' Slope of the efficiency curve
OHCol.YIntercept = 0.725 ' Y intercept of efficiency curves
' Main simulation loop:
' works like this:
' For each hour in simulation
' Get weather and sun intensity for this hour from TMY object
' Get sun direction for this hour from Sun object
' Get Collector heat output (if any) for this hour from Collector object
' Report on how collector is doing
' Next Hour
'
' Write a header for the simulation display output
Console.WriteLine("Mon Day Hr Tamb SunIdn SunElev SunAz IncidAng Icoltot Qout Efic")
' Do a simulation for a few days in November
For Tix = TMY.TMYrecIndexForDate(11, 6, 8) To TMY.TMYrecIndexForDate(11, 11, 18)
'WEATHER:
' Get the weather for the hour
T = TMY.TMYrec(Tix)
' Get the sun intensities from the weather data for this hour
Idn = T.Idn
' Estimate the diffuse on collector from the horizontal diffuse reported in TMY
Idif = T.Ihorzdif * ((1 + Cos(OHCol.Tilt))) / 2
'SUN:
' Update the sun to the current hour
' This allows the Sun object to figure out where the Sun is in the
' sky (information the collector needs to know)
Sun.DayOfMonth = T.Day
Sun.Month = T.Month
Sun.ASThr = T.Hour
' Get the direction to the sun
SV = Sun.ToSunVector()
' COLLECTOR:
' Update the Collector object to this hour
OHCol.SunVector = SV ' tell it sun direction
OHCol.Idn = Idn ' tell it sun intensity -- direct and diffuse
OHCol.Idif = Idif
OHCol.Ta = T.Tdb ' tell it outside temperature
OHCol.Ti = 100 ' tell it what its inlet temperature will be
'Get some collector results
IColTot = OHCol.Icoltot
Qout = OHCol.QOut
Efic = OHCol.Efic
Incidence = OHCol.IncidAngle
'Display some results
Console.WriteLine("{0,4} {1,4} {2,4} {3,5:F0} {4,5:F0} {5,5:F0} {6,6:F0} {7,6:F0} {8,6:F0} {9,8:F0} {10,6:F2}", _
T.Month, T.Day, T.Hour, _
T.Tdb, T.Idn, Sun.AltAng * DegPerRad, Sun.AzimuthAng * DegPerRad, Incidence * DegPerRad, IColTot, Qout, Efic)
Next
End Sub 'RunSimulation
Sub Main()
Console.BufferWidth = 120
Console.BufferHeight = 300
Runsimulation()
Console.WriteLine("Done")
Console.WriteLine("Hit <enter> to continue")
Console.ReadLine()
End Sub
End Module