<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>231 on Gabe Fierro</title><link>https://gtf.fyi/categories/231/</link><description>Recent content in 231 on Gabe Fierro</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sun, 22 Feb 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://gtf.fyi/categories/231/index.xml" rel="self" type="application/rss+xml"/><item><title>Binding to 231</title><link>https://gtf.fyi/posts/brick/binding-to-231/</link><pubDate>Sun, 22 Feb 2026 15:00:00 -0700</pubDate><guid>https://gtf.fyi/posts/brick/binding-to-231/</guid><description>&lt;h2 id="background"&gt;Background&lt;/h2&gt;
&lt;p&gt;Control Description Language (CDL) is a subset of Modelica which portably specifies control sequences for building systems.
It has recently been standardized and published as ASHRAE Standard 231.
CDL represents control sequences as a directed graph of control blocks, which have inputs and outputs, and may be composed of other control blocks.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s an example block:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ttl" data-lang="ttl"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-weight:bold"&gt;@prefix&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;S231P:&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#963"&gt;&amp;lt;https://data.ashrae.org/S231P#&amp;gt;&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;.&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-weight:bold"&gt;@prefix&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;cdl:&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#963"&gt;&amp;lt;http://example.org#cdl_models.Controls.&amp;gt;&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;.&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-weight:bold"&gt;@prefix&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;quantitykind:&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#963"&gt;&amp;lt;http://qudt.org/vocab/quantitykind#&amp;gt;&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;.&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-weight:bold"&gt;@prefix&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;qudt:&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#963"&gt;&amp;lt;http://qudt.org/schema/qudt#&amp;gt;&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;.&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-weight:bold"&gt;@prefix&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;unit:&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#963"&gt;&amp;lt;http://qudt.org/vocab/unit#&amp;gt;&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;.&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#080;font-weight:bold"&gt;@prefix&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;xsd:&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#963"&gt;&amp;lt;http://www.w3.org/2001/XMLSchema#&amp;gt;&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;.&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;cdl:&lt;/span&gt;&lt;span style="color:#070"&gt;Controller&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#339;font-weight:bold"&gt;a&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;S231P:&lt;/span&gt;&lt;span style="color:#070"&gt;Block&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;S231P:&lt;/span&gt;&lt;span style="color:#070"&gt;containsBlock&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;cdl:&lt;/span&gt;&lt;span style="color:#070"&gt;Controller&lt;/span&gt;.&lt;span style="color:#f00;background-color:#faa"&gt;loaShe&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;cdl:&lt;/span&gt;&lt;span style="color:#070"&gt;Controller&lt;/span&gt;.&lt;span style="color:#f00;background-color:#faa"&gt;single_zone_ratchet_base&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;S231P:&lt;/span&gt;&lt;span style="color:#070"&gt;hasInput&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;cdl:&lt;/span&gt;&lt;span style="color:#070"&gt;Controller&lt;/span&gt;.&lt;span style="color:#f00;background-color:#faa"&gt;TZon&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;cdl:&lt;/span&gt;&lt;span style="color:#070"&gt;Controller&lt;/span&gt;.&lt;span style="color:#f00;background-color:#faa"&gt;TZonCooSetCur&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;cdl:&lt;/span&gt;&lt;span style="color:#070"&gt;Controller&lt;/span&gt;.&lt;span style="color:#f00;background-color:#faa"&gt;TZonHeaSetCur&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;S231P:&lt;/span&gt;&lt;span style="color:#070"&gt;hasOutput&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;cdl:&lt;/span&gt;&lt;span style="color:#070"&gt;Controller&lt;/span&gt;.&lt;span style="color:#f00;background-color:#faa"&gt;TZonCooSetCom&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;cdl:&lt;/span&gt;&lt;span style="color:#070"&gt;Controller&lt;/span&gt;.&lt;span style="color:#f00;background-color:#faa"&gt;TZonHeaSetCom&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;S231P:&lt;/span&gt;&lt;span style="color:#070"&gt;hasParameter&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;cdl:&lt;/span&gt;&lt;span style="color:#070"&gt;Controller&lt;/span&gt;.&lt;span style="color:#f00;background-color:#faa"&gt;loadShedHourEnd&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;cdl:&lt;/span&gt;&lt;span style="color:#070"&gt;Controller&lt;/span&gt;.&lt;span style="color:#f00;background-color:#faa"&gt;loadShedHourStart&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;cdl:&lt;/span&gt;&lt;span style="color:#070"&gt;Controller&lt;/span&gt;.&lt;span style="color:#f00;background-color:#faa"&gt;occStaHourEnd&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;cdl:&lt;/span&gt;&lt;span style="color:#070"&gt;Controller&lt;/span&gt;.&lt;span style="color:#f00;background-color:#faa"&gt;occStaHourStart&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;cdl:&lt;/span&gt;&lt;span style="color:#070"&gt;Controller&lt;/span&gt;.&lt;span style="color:#f00;background-color:#faa"&gt;reboundDuration&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;cdl:&lt;/span&gt;&lt;span style="color:#070"&gt;Controller&lt;/span&gt;.&lt;span style="color:#f00;background-color:#faa"&gt;samplePeriodRatchet&lt;/span&gt;,&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;cdl:&lt;/span&gt;&lt;span style="color:#070"&gt;Controller&lt;/span&gt;.&lt;span style="color:#f00;background-color:#faa"&gt;samplePeriodRebound&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;;&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;S231P:&lt;/span&gt;&lt;span style="color:#070"&gt;label&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="background-color:#fff0f0"&gt;&amp;#34;Controller&amp;#34;&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;.&lt;span style="color:#bbb"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;s231P:hasInput&lt;/code&gt; and &lt;code&gt;s231P:hasOutput&lt;/code&gt; relationships point to the names of the inputs and outputs of the block, which
are commonly things like setpoints, sensors, alarms, commands.
The block above has inputs for the current zone temperature (&lt;code&gt;TZon&lt;/code&gt;), the current cooling setpoint (&lt;code&gt;TZonCooSetCur&lt;/code&gt;), and the current heating setpoint (&lt;code&gt;TZonHeaSetCur&lt;/code&gt;); it has outputs for the cooling setpoint command (&lt;code&gt;TZonCooSetCom&lt;/code&gt;) and the heating setpoint command (&lt;code&gt;TZonHeaSetCom&lt;/code&gt;).
To be able to use CDL to specify control sequences for a particular building, we need to be able to connect the inputs and outputs of the control blocks to the actual points in the building that they refer to.
This tells any CDL execution engine which points to read from and write to when executing the control sequence.&lt;/p&gt;</description></item></channel></rss>