<?xml version="1.0" encoding="utf-8"?>
<Templates format="2" protocolVersion="83">
  <Template id="a3f7c2d1-8e4b-4f6a-91c3-2d5e7b9f0a1c" revision="1.0">
    <SuggestedCCUParameters>
      <Baudrate>19200</Baudrate>
      <Parity>None</Parity>
      <StopBits>One</StopBits>
      <DataBits>8</DataBits>
      <UseAsciiCommunication>False</UseAsciiCommunication>
      <DelayBetweenRequests>-1</DelayBetweenRequests>
      <ReadWriteTimeout>1000</ReadWriteTimeout>
    </SuggestedCCUParameters>
    <RevisionHistory>
      <Revision id="a3f7c2d1-8e4b-4f6a-91c3-2d5e7b9f0a1c">Initial slim template — Gt03.0 register map, DC Input #1 only, no power control, no diagnostics.</Revision>
    </RevisionHistory>
    <Name>ABB TRIO Solar Inverter (Gt03)</Name>
    <CcuModel>ModbusRtuCCU</CcuModel>
    <Producer>ABB</Producer>
    <Model>TRIO-20.0/27.6/50.0/60.0-TL-OUTD</Model>
    <Description>ABB TRIO solar inverter Modbus RTU template for the Gt03.0 register map (TRIO-20.0/27.6/50.0/60.0-TL-OUTD).</Description>
    <Category>2</Category>
    <ImportParameters>
      <Parameter>
        <Id>SlaveId</Id>
        <Name>Modbus Slave ID</Name>
        <Value>2</Value>
      </Parameter>
    </ImportParameters>
    <Module>
      <Name>ABB TRIO Inverter</Name>
      <Id>-1</Id>
      <Model>ModbusModule</Model>
      <DeviceProperties>
        <SlaveId>$[SlaveId]</SlaveId>
        <MaxPrefetchGroupSize>32</MaxPrefetchGroupSize>
        <PrefetchModeId>0</PrefetchModeId>
        <ReadScript>VAR gs := MODBUSR(A, 1049, UInt16);
IF(gs = 6, ADDINFO(0, &quot;Running&quot;));
IF(gs = 1, ADDINFO(1, &quot;Wait Sun / Grid&quot;));
IF(gs = 8, ADDINFO(2, &quot;Pause&quot;));
IF(gs = 25, ADDERROR(0, &quot;Remote OFF&quot;));
IF(gs = 9, ADDERROR(1, &quot;Ground Fault&quot;));
IF(gs = 10, ADDERROR(2, &quot;OTH Fault&quot;));
IF(gs = 13, ADDERROR(3, &quot;Self-Test Fail&quot;));
IF(gs = 15, ADDERROR(4, &quot;Leak Fault&quot;));
IF(gs = 16, ADDERROR(5, &quot;Waiting for manual reset&quot;));
IF(gs = 31, ADDERROR(6, &quot;Temperature Fault&quot;));
IF(gs = 32, ADDERROR(7, &quot;Fan Stuck&quot;));
IF(gs = 115, ADDERROR(8, &quot;Arc Fault&quot;));
VAR al := MODBUSR(A, 1050, UInt16);
IF(al = 0, ADDINFO(10, &quot;No Alarm&quot;));
IF(al = 1, ADDWARNING(11, &quot;W001 Sun Low&quot;));
IF(al = 2, ADDERROR(12, &quot;E001 Input OC&quot;));
IF(al = 3, ADDWARNING(13, &quot;W002 Input UV&quot;));
IF(al = 4, ADDERROR(14, &quot;E002 Input OV&quot;));
IF(al = 7, ADDERROR(15, &quot;E004 Bulk OV&quot;));
IF(al = 8, ADDERROR(16, &quot;E005 Comm. Error&quot;));
IF(al = 9, ADDERROR(17, &quot;E006 Output OC&quot;));
IF(al = 13, ADDWARNING(18, &quot;W003 Grid Fail&quot;));
IF(al = 16, ADDERROR(19, &quot;E012 DC/DC Fail&quot;));
IF(al = 19, ADDERROR(20, &quot;E014 Over Temp.&quot;));
IF(al = 21, ADDERROR(21, &quot;E016 Inverter Fail&quot;));
IF(al = 23, ADDERROR(22, &quot;E018 Ground Fault&quot;));
IF(al = 38, ADDERROR(23, &quot;E025 Riso Low&quot;));
IF(al = 47, ADDWARNING(24, &quot;W010 Fan Fail&quot;));
IF(al = 50, ADDERROR(25, &quot;E035 Remote Off&quot;));
IF(al = 56, ADDERROR(26, &quot;E038 Fan Stuck&quot;));
VAR dr := MODBUSR(A, 1053, UInt16);
IF(dr != 0, ADDWARNING(30, &quot;Derating active (code &quot; + TOSTRING(dr, &quot;F0&quot;) + &quot;)&quot;));</ReadScript>
      </DeviceProperties>
      <Devices>
        <Device>
          <Name>AC Power and Energy</Name>
          <Id>-2</Id>
          <Model>ModbusElectricityMeter</Model>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>15000</InternalPollInterval>
            <PrefetchModeId>0</PrefetchModeId>
            <ReadDemand>MODBUSR(A, 1093, Float)</ReadDemand>
            <ReadTotalConsumption>MODBUSR(A, 1071, UInt32)</ReadTotalConsumption>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Daily Energy</Name>
          <Id>-3</Id>
          <Model>ModbusVariable</Model>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>60000</InternalPollInterval>
            <PrefetchModeId>0</PrefetchModeId>
            <IsReadOnly>True</IsReadOnly>
            <ReadState>MODBUSR(A, 1069, UInt32)</ReadState>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>AC Voltage</Name>
          <Id>-4</Id>
          <Model>ModbusAnalogInput</Model>
          <DeviceProperties>
            <DeviceType>11001</DeviceType>
            <InternalPollInterval>15000</InternalPollInterval>
            <PrefetchModeId>0</PrefetchModeId>
            <ReadInputLevel>MODBUSR(A, 1089, Float)</ReadInputLevel>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>AC Current</Name>
          <Id>-5</Id>
          <Model>ModbusAnalogInput</Model>
          <DeviceProperties>
            <DeviceType>11001</DeviceType>
            <InternalPollInterval>15000</InternalPollInterval>
            <PrefetchModeId>0</PrefetchModeId>
            <ReadInputLevel>MODBUSR(A, 1091, Float)</ReadInputLevel>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Grid Frequency</Name>
          <Id>-6</Id>
          <Model>ModbusAnalogInput</Model>
          <DeviceProperties>
            <DeviceType>11001</DeviceType>
            <InternalPollInterval>15000</InternalPollInterval>
            <PrefetchModeId>0</PrefetchModeId>
            <ReadInputLevel>MODBUSR(A, 1105, Float)</ReadInputLevel>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>DC Input #1 Power</Name>
          <Id>-7</Id>
          <Model>ModbusAnalogInput</Model>
          <DeviceProperties>
            <DeviceType>11001</DeviceType>
            <InternalPollInterval>15000</InternalPollInterval>
            <PrefetchModeId>0</PrefetchModeId>
            <ReadInputLevel>MODBUSR(A, 1107, Float)</ReadInputLevel>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>DC Input #1 Voltage</Name>
          <Id>-8</Id>
          <Model>ModbusAnalogInput</Model>
          <DeviceProperties>
            <DeviceType>11001</DeviceType>
            <InternalPollInterval>15000</InternalPollInterval>
            <PrefetchModeId>0</PrefetchModeId>
            <ReadInputLevel>MODBUSR(A, 1109, Float)</ReadInputLevel>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>DC Input #1 Current</Name>
          <Id>-9</Id>
          <Model>ModbusAnalogInput</Model>
          <DeviceProperties>
            <DeviceType>11001</DeviceType>
            <InternalPollInterval>15000</InternalPollInterval>
            <PrefetchModeId>0</PrefetchModeId>
            <ReadInputLevel>MODBUSR(A, 1111, Float)</ReadInputLevel>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>Inverter Temperature</Name>
          <Id>-10</Id>
          <Model>ModbusTemperatureSensor</Model>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>30000</InternalPollInterval>
            <PrefetchModeId>0</PrefetchModeId>
            <TemperatureCalibration>0</TemperatureCalibration>
            <ReadTemperature>MODBUSR(A, 1121, Float)</ReadTemperature>
          </DeviceProperties>
        </Device>
        <Device>
          <Name>DC Box Temperature</Name>
          <Id>-11</Id>
          <Model>ModbusTemperatureSensor</Model>
          <DeviceProperties>
            <DeviceType>0</DeviceType>
            <InternalPollInterval>30000</InternalPollInterval>
            <PrefetchModeId>0</PrefetchModeId>
            <TemperatureCalibration>0</TemperatureCalibration>
            <ReadTemperature>MODBUSR(A, 1119, Float)</ReadTemperature>
          </DeviceProperties>
        </Device>
      </Devices>
    </Module>
  </Template>
</Templates>
