I am the Lead Graphic Designer at Colorado Controls, so I am responsible for designing and creating the user interface for building automation systems. I work with our programmers and installers to accurately represent the system in an online format that building operators can utilize to control and monitor their spaces.
I worked at a summer camp in New Mexico for four different summers and one summer I was a blacksmith who also gave tours of a mine and performed a musical concert every night so blacksmithing is a random skill I have.
I’ve really had to learn to go with the flow. Technology in our field and construction in general is constantly changing and schedules are constantly in flux, so learning how to be more flexible and go with the flow has been a huge help.
The New York Regional Mormon Singles Halloween Dance by Elna Baker. It was a bunch of comical short stories compiled together and made me laugh out loud a lot.
I love being outside more than anything! If I could be outside 24/7 I would be. I like to bike, hike, camp, rock climb, and paddle. I really love listening and playing music, so I enjoy going to live concerts. When I’m stuck inside I like reading, watching TV, playing piano, and cooking.
I really would love to go to Australia and spend a month there – it has such a wide variety of things to do and looks insanely beautiful!
I am number two out of four! I am really close with my family, my parents and siblings and nieces and nephew are some of my favorite people even though they all still live in Nebraska. My friends are my chosen family in Colorado. 😊
I’d probably be working outside somehow. I’d love a job where I can be outside in the sunshine as much as possible – maybe working at a national park or an organic farm.
“But, knowing they had the best of love, they clung to what remained. Love lingered – by way of long conversations at night into those stark hours when the mind thins and sharpens and the borrowings of dreams becomes the stuff of all life, by way of deep and intimate kindnesses they developed toward each other, by way of their laughing at the same absurdities and thinking the same things noble and the same things sad.” – F. Scott Fitzgerald, The Beautiful and Damned
— Reliable Controls’ September 2021 Newsletter
“Who’s on First?” was a 1930s comedy sketch made famous by American comedy duo Abbott and Costello. The premise was that Abbott identified players on a baseball team for Costello, but their names and nicknames could be construed as non-responsive answers to Costello’s questions. In the sketch, a statement like “Who’s on first” was ambiguous between the question (Which person is on first base?) and the answer (The name of the person on first base is Who). Costello became increasingly confused and frustrated with Abbott’s explanations, leaving the audience in stitches at their miscommunication. Abbott and Costello proved a misunderstanding can be comical, but this isn’t always the case. Miscommunication or lack of understanding often produces negative results.
Achieving engineering efficiency and understanding how modern building automation strategies work and operate is the goal of engineers and operators alike.For example, a strategy that involves equipment rotation is quite common in building operation. However, its understanding and practical implementation is often misunderstood. Understanding the core concepts and how to implement this strategy in Control-BASIC helps engineers and operators avoid the frustration and confusion that can occur during implementation.
Specifying and deploying an appropriate equipment rotation strategy depends on a variety of factors. For example, a strategy based solely on equipment runtime ensures all components age equally. Conversely, an approach that rotates at a specific time or date ensures operators are likely to be available and can accurately estimate when the switchover occurs. Both strategies are effective methods for equipment rotation and could be combined to create a third strategy that builds on their strengths. The first step to increasing energy efficiency is to create a solid, well-understood equipment rotation strategy. With this in mind, use an equipment rotation strategy with a prescribed order and time as a foundation.
All equipment rotation strategies require the same fundamental information, the most essential of which is the number of devices to rotate. In the following program example, local variable A stores the number of devices to be rotated.
A = 4 (How many devices?)
To add the strength and benefit of knowing who is turning on and when, determine the day and time. Knowing the who and when serves building operators with a routine schedule during their normal working hours to prevent switching, or possible failures, from occurring during non-working hours. In our example, local variables B and C hold this information:
B = TUE (What day to switch?)
C = 8:00:00 (What time to switch?)
Once you know these items, determine who the lead is—in other words, which piece of equipment is currently running. To control multiple pieces of equipment properly, it is advantageous to number the equipment accordingly: Who’s on first? Who’s on second? Third? Fourth? You can then use this lead integer value to program the equipment for each device. Assume any integer higher than the number of actual devices controlling the system will negatively impact the strategy. Use the following code to add a safeguard here that limits this number to the appropriate range of devices:
LEAD = INT( LIMIT( LEAD , 1 , A ) )
The next step is to prevent the strategy from rotating more than once per week. You can use a simple code example to test if the day of the week (DOW) is greater than the switch day (TUE). If this is true, use another local variable as a flag to prevent the lead integer from indexing more than once each week:
IF DOW > B THEN STOP D
If the lead has already rotated this week, the strategy has done its job. If the rotation flag is true, end the program as follows:
IF D THEN END
Now determine if the present day of the week is not the day configured to allow the equipment to rotate:
IF DOW <> B THEN END (Is it Tuesday?)
If it isn’t Tuesday, as in our example, you can end the program. Similarly, determine if the present time is not the time configured to allow the equipment to rotate:
IF TIME < C THEN END (Is it time to switch?)
If it isn’t 8:00:00, as in our example, you can end the program. As the strategy progresses line by line, if the program hasn’t ended, you can determine the appropriate day and time to rotate the lead. The code below advances the lead integer by 1.
LEAD = LEAD + 1
To ensure the lead integer doesn’t count past the number of rotating devices, index it back to a value of 1 to start the entire process again.
IF LEAD > 4 THEN LEAD = 1
Once this strategy is complete, set the rotation flag to prevent any additional rotation throughout the week.
A well-understood and -implemented strategy for equipment rotation increases engineering efficiency by providing a solid communication foundation that engineers and programmers can collaborate on. In addition, knowing the who, when, and how of a control strategy helps you avoid confusion and provides a solution that is no laughing matter.
— Reliable Controls’ October 2021 Newsletter
Moving day. These two words elicit plenty of emotions: excitement about living somewhere new, stress over making sure everything is packed, dread about unpacking countless boxes. No doubt you’ve anticipated moving day for quite some time. You’ve labeled your boxes, wrapped delicate objects, bribed friends with strong backs or called a moving company—all in an effort to ensure your belongings arrive undamaged and in their proper place. Likely throughout this process, you discarded some items and deemed them unworthy of a spot in your new home. “Is this needed?” “Where does this go?” “How is it going to fit?” These are questions you’ve likely asked.
The same can be said for data in a building automation system. Facility operators increasingly add countless sensors and data points to a system, and all are in a constant state of movement around a building automation system. Programmers need to ask similar questions: “Is this data needed?” “Where should the information be placed?” To stay organized, programmers may choose a digital storage box called an array to hold data for use in a program.
Arrays are special software objects in Reliable Controls controllers that contain up to 128 unique values called elements. Array elements can be read from and written to in Control-BASIC. Like any object, arrays are referenced using the array name or the array instance. Unlike an analog value, an array object can contain up to 128 distinct values. As such, it is not sufficient to simply reference the array object; you must also specify the array element when you read or write values. The element is indexed within brackets:
10 A = AY1[ 1 ] : REM ** Read-from Array 1 element 1
20 AY1[ 1 ] = A : REM ** Write-to Array 1 element 1
Arrays are particularly powerful in data-sorting applications because the element reference does not have to be a hard-coded value; it can be a dynamic reference like a local variable. Since the array element reference can be a local variable, you can harness significant power for the purpose of data analysis and structure by dynamically defining the local variable with a programming technique like a looping construct. For example, let’s consider a simple construct used to sort data, such as zone temperatures, using a looping construct and array elements. This construct evaluates minimum, maximum, and average array values. The first step is to feed an array element with the present zone temperatures.
30 RTU01-RMT-AY[ 1 ] = ZN01-RMT
40 RTU01-RMT-AY[ 2 ] = ZN02-RMT
50 RTU01-RMT-AY[ 3 ] = ZN03-RMT
60 RTU01-RMT-AY[ 4 ] = ZN04-RMT
70 RTU01-RMT-AY[ 5 ] = ZN05-RMT
To ensure these values are dynamic and update in real-time, create local variables (A, B) to store the intermediate minimum and maximum values. Next, create and store a total value of valid zone temperatures in local variable C. The total number of valid zone temperatures is stored in local variable D. From there, divide local variables C and D to determine the average zone temperature value.
Once you know these values, it is critical that you continually update them using a FOR loop. For more information about FOR loops, refer to the Control-BASIC Manual in the Dealer Support Center. Since this example needs to evaluate the temperatures between five zones, the looping
construct will cycle five times. This code begins as follows:
90 A = 999 : B = 0 : C = 0 : D = 0
100 FOR E = 1 TO 5
We need the default value of 999 for local variable A to ensure the minimum temperature value is evaluated and populated in the proper array element. The line below evaluates if the zone temperature stored in the array element called by the present iteration (1–5) is less than the intermediate minimum value (A). If so, the intermediate minimum value is indexed to the array element value.
110 IF RTU01-RMT-AY[ E ] < A THEN A = RTU01- RMT-AY[ E ]
This iteration can simply continue and find if the zone temperature stored in the array element called by the present iteration (1-5) is greater than the intermediate maximum value (B). If so, the intermediate maximum value is indexed to the array element value.
120 IF RTU01-RMT-AY[ E ] > B THEN B = RTU01- RMT-AY[ E ]
To solve for local variables C and D, the looping construct can now determine if the zone temperature stored in the array element called by the present iteration (1–5) is valid (>0). If this is true, the intermediate total zone temperature value (C) accumulates the value from the array element, and the valid entry counter (D) is indexed by one.
130 IF RTU01-RMT-AY[ E ] > 0 THEN C = C + RTU01-RMT-AY[ E ] , D = D + 1
Since the looping construct has completed the work of populating all local variables, the looping construct can end.
140 NEXT E
Finally, the local variables can simply set the minimum and maximum zone information in a controller’s value worksheet. To calculate the average zone temperature, divide the intermediate total zone temperature value (C) by the valid entry counter (D).
150 RTU01-RMT-MIN = A
160 RTU01-RMT-MAX = B
170 RTU01-RMT-AVG = C / D
This example is one of many that harness the power of an array to collect, store, and move data around a building automation system. As with moving day, having a proper plan in place to collect, store, and unpack your data will help to alleviate stress. The appropriate use of an
array provides an effective and efficient control solution that helps you keep track of your moving parts.