﻿<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--Compares the ACC of a Timer to the PRE of a Timer and outputs the time remaining in an HH:MM:SS format-->
<RSLogix5000Content SchemaRevision="1.0" SoftwareRevision="32.00" TargetName="Time_Remaining" TargetType="AddOnInstructionDefinition" TargetRevision="1.0 " TargetLastEdited="2019-04-04T19:13:33.576Z" ContainsContext="true" Owner="Brian Stilson, Parkway Electric" ExportDate="Thu Apr 04 15:13:40 2019" ExportOptions="References NoRawData L5KData DecoratedData Context Dependencies ForceProtectedEncoding AllProjDocTrans">
<Controller Use="Context" Name="PLC_F7451_43220">
<DataTypes Use="Context">
</DataTypes>
<AddOnInstructionDefinitions Use="Context">
<AddOnInstructionDefinition Use="Target" Name="Time_Remaining" Revision="1.0" ExecutePrescan="false" ExecutePostscan="false" ExecuteEnableInFalse="false" CreatedDate="2019-04-04T17:43:16.691Z" CreatedBy="PG\brian.stilson" EditedDate="2019-04-04T19:13:33.576Z" EditedBy="PG\brian.stilson" SoftwareRevision="v32.00"
>
<Description>
<![CDATA[Compares the ACC of a Timer to the PRE of a Timer and outputs the time remaining in an HH:MM:SS format]]>
</Description>
<Parameters>
<Parameter Name="EnableIn" TagType="Base" DataType="BOOL" Usage="Input" Radix="Decimal" Required="false" Visible="false" ExternalAccess="Read Only">
<Description>
<![CDATA[Enable Input - System Defined Parameter]]>
</Description>
</Parameter>
<Parameter Name="EnableOut" TagType="Base" DataType="BOOL" Usage="Output" Radix="Decimal" Required="false" Visible="false" ExternalAccess="Read Only">
<Description>
<![CDATA[Enable Output - System Defined Parameter]]>
</Description>
</Parameter>
<Parameter Name="Timer" TagType="Base" DataType="TIMER" Usage="InOut" Required="true" Visible="true" Constant="false">
<Description>
<![CDATA[Input Timer]]>
</Description>
</Parameter>
<Parameter Name="Out_TimeRemaining" TagType="Base" DataType="STRING" Usage="InOut" Required="true" Visible="true" Constant="false"/>
</Parameters>
<LocalTags>
<LocalTag Name="dintSecRemaining" DataType="DINT" Radix="Decimal" ExternalAccess="None">
<Description>
<![CDATA[Seconds Remaining]]>
</Description>
<DefaultData Format="L5K">
<![CDATA[0]]>
</DefaultData>
<DefaultData Format="Decorated">
<DataValue DataType="DINT" Radix="Decimal" Value="0"/>
</DefaultData>
</LocalTag>
<LocalTag Name="intHrsRemaining" DataType="DINT" Radix="Decimal" ExternalAccess="None">
<Description>
<![CDATA[Whole Hours Remaining]]>
</Description>
<DefaultData Format="L5K">
<![CDATA[0]]>
</DefaultData>
<DefaultData Format="Decorated">
<DataValue DataType="DINT" Radix="Decimal" Value="0"/>
</DefaultData>
</LocalTag>
<LocalTag Name="fltHrsRemaining" DataType="REAL" Radix="Float" ExternalAccess="Read/Write">
<Description>
<![CDATA[Decimal Hours Remaining]]>
</Description>
<DefaultData Format="L5K">
<![CDATA[0.00000000e+000]]>
</DefaultData>
<DefaultData Format="Decorated">
<DataValue DataType="REAL" Radix="Float" Value="0.0"/>
</DefaultData>
</LocalTag>
<LocalTag Name="fltMinRemaining" DataType="REAL" Radix="Float" ExternalAccess="None">
<Description>
<![CDATA[Decimal Minutes Remaining]]>
</Description>
<DefaultData Format="L5K">
<![CDATA[0.00000000e+000]]>
</DefaultData>
<DefaultData Format="Decorated">
<DataValue DataType="REAL" Radix="Float" Value="0.0"/>
</DefaultData>
</LocalTag>
<LocalTag Name="intMinRemaining" DataType="DINT" Radix="Decimal" ExternalAccess="None">
<Description>
<![CDATA[Whole Minutes Remaining]]>
</Description>
<DefaultData Format="L5K">
<![CDATA[0]]>
</DefaultData>
<DefaultData Format="Decorated">
<DataValue DataType="DINT" Radix="Decimal" Value="0"/>
</DefaultData>
</LocalTag>
<LocalTag Name="fltSecRemaining" DataType="REAL" Radix="Float" ExternalAccess="None">
<Description>
<![CDATA[Decimal Seconds Remaining]]>
</Description>
<DefaultData Format="L5K">
<![CDATA[0.00000000e+000]]>
</DefaultData>
<DefaultData Format="Decorated">
<DataValue DataType="REAL" Radix="Float" Value="0.0"/>
</DefaultData>
</LocalTag>
<LocalTag Name="intSecRemaining" DataType="DINT" Radix="Decimal" ExternalAccess="None">
<Description>
<![CDATA[Whole Seconds Remaining]]>
</Description>
<DefaultData Format="L5K">
<![CDATA[0]]>
</DefaultData>
<DefaultData Format="Decorated">
<DataValue DataType="DINT" Radix="Decimal" Value="0"/>
</DefaultData>
</LocalTag>
<LocalTag Name="strTimeRemaining_Temp" DataType="STRING" ExternalAccess="None">
<DefaultData Format="L5K">
<![CDATA[[0,'$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00']]]>
</DefaultData>
<DefaultData Format="String" Length="0">
<![CDATA['']]>
</DefaultData>
</LocalTag>
<LocalTag Name="strHrsRemaining" DataType="STRING" ExternalAccess="None">
<Description>
<![CDATA[Hours Remaining String]]>
</Description>
<DefaultData Format="L5K">
<![CDATA[[0,'$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00']]]>
</DefaultData>
<DefaultData Format="String" Length="0">
<![CDATA['']]>
</DefaultData>
</LocalTag>
<LocalTag Name="strSecRemaining" DataType="STRING" ExternalAccess="None">
<DefaultData Format="L5K">
<![CDATA[[0,'$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00']]]>
</DefaultData>
<DefaultData Format="String" Length="0">
<![CDATA['']]>
</DefaultData>
</LocalTag>
<LocalTag Name="strMinRemaining" DataType="STRING" ExternalAccess="None">
<DefaultData Format="L5K">
<![CDATA[[0,'$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00']]]>
</DefaultData>
<DefaultData Format="String" Length="0">
<![CDATA['']]>
</DefaultData>
</LocalTag>
<LocalTag Name="strColon" DataType="STRING" ExternalAccess="None">
<DefaultData Format="L5K">
<![CDATA[[1,':$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00']]]>
</DefaultData>
<DefaultData Format="String" Length="1">
<![CDATA[':']]>
</DefaultData>
</LocalTag>
<LocalTag Name="strZero" DataType="STRING" ExternalAccess="None">
<DefaultData Format="L5K">
<![CDATA[[1,'0$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00']]]>
</DefaultData>
<DefaultData Format="String" Length="1">
<![CDATA['0']]>
</DefaultData>
</LocalTag>
</LocalTags>
<Routines>
<Routine Name="Logic" Type="ST">
<Description>
<![CDATA[Compares the ACC of a Timer to the PRE of a Timer and outputs the time remaining in an HH:MM:SS format]]>
</Description>
<STContent>
<Line Number="0">
<![CDATA[// This add-on Instruction analyzes the PRE and ACC terms of the Timer and outputs]]>
</Line>
<Line Number="1">
<![CDATA[// the time remaining as a string in HH:MM:SS Format]]>
</Line>
<Line Number="2">
<![CDATA[]]>
</Line>
<Line Number="3">
<![CDATA[// Determine the remaining time on the timer and Convert to Seconds]]>
</Line>
<Line Number="4">
<![CDATA[dintSecRemaining := (Timer.PRE - Timer.ACC) / 1000;]]>
</Line>
<Line Number="5">
<![CDATA[]]>
</Line>
<Line Number="6">
<![CDATA[// Determine the decimal Hours remaining]]>
</Line>
<Line Number="7">
<![CDATA[fltHrsRemaining := dintSecRemaining / 3600;]]>
</Line>
<Line Number="8">
<![CDATA[]]>
</Line>
<Line Number="9">
<![CDATA[// Determine the whole Hours remaining]]>
</Line>
<Line Number="10">
<![CDATA[intHrsRemaining := TRUNC(fltHrsRemaining);]]>
</Line>
<Line Number="11">
<![CDATA[]]>
</Line>
<Line Number="12">
<![CDATA[// Determine the decimal Minutes remaining]]>
</Line>
<Line Number="13">
<![CDATA[fltMinRemaining := (fltHrsRemaining - intHrsRemaining) * 60;]]>
</Line>
<Line Number="14">
<![CDATA[]]>
</Line>
<Line Number="15">
<![CDATA[// Determine the whole Minutes remaining]]>
</Line>
<Line Number="16">
<![CDATA[intMinRemaining := TRUNC(fltMinRemaining);]]>
</Line>
<Line Number="17">
<![CDATA[]]>
</Line>
<Line Number="18">
<![CDATA[// Determine the decimal Seconds Remaining]]>
</Line>
<Line Number="19">
<![CDATA[fltSecRemaining := (fltMinRemaining - intMinRemaining) * 60;]]>
</Line>
<Line Number="20">
<![CDATA[]]>
</Line>
<Line Number="21">
<![CDATA[// Determine the whole Seconds remaining]]>
</Line>
<Line Number="22">
<![CDATA[intSecRemaining := TRUNC(fltSecRemaining);]]>
</Line>
<Line Number="23">
<![CDATA[]]>
</Line>
<Line Number="24">
<![CDATA[// To prevent display anomalies from Timer overlow, zero out all numbers if Timer is done.]]>
</Line>
<Line Number="25">
<![CDATA[IF Timer.DN then]]>
</Line>
<Line Number="26">
<![CDATA[	intHrsRemaining := 0;]]>
</Line>
<Line Number="27">
<![CDATA[	intMinRemaining := 0;]]>
</Line>
<Line Number="28">
<![CDATA[	intSecRemaining := 0;]]>
</Line>
<Line Number="29">
<![CDATA[end_if;]]>
</Line>
<Line Number="30">
<![CDATA[]]>
</Line>
<Line Number="31">
<![CDATA[//Assemble the Output String]]>
</Line>
<Line Number="32">
<![CDATA[If intHrsRemaining < 10 then]]>
</Line>
<Line Number="33">
<![CDATA[	DTOS(intHrsRemaining,strHrsRemaining);]]>
</Line>
<Line Number="34">
<![CDATA[	CONCAT(strZero,strHrsRemaining,strHrsRemaining);]]>
</Line>
<Line Number="35">
<![CDATA[else]]>
</Line>
<Line Number="36">
<![CDATA[	DTOS(intHrsRemaining,strHrsRemaining);]]>
</Line>
<Line Number="37">
<![CDATA[end_if;]]>
</Line>
<Line Number="38">
<![CDATA[]]>
</Line>
<Line Number="39">
<![CDATA[If intMinRemaining < 10 then]]>
</Line>
<Line Number="40">
<![CDATA[	DTOS(intMinRemaining,strMinRemaining);]]>
</Line>
<Line Number="41">
<![CDATA[	CONCAT(strZero,strMinRemaining,strMinRemaining);]]>
</Line>
<Line Number="42">
<![CDATA[else]]>
</Line>
<Line Number="43">
<![CDATA[	DTOS(intMinRemaining,strMinRemaining);]]>
</Line>
<Line Number="44">
<![CDATA[end_if;]]>
</Line>
<Line Number="45">
<![CDATA[]]>
</Line>
<Line Number="46">
<![CDATA[If intSecRemaining < 10 then]]>
</Line>
<Line Number="47">
<![CDATA[	DTOS(intSecRemaining,strSecRemaining);]]>
</Line>
<Line Number="48">
<![CDATA[	CONCAT(strZero,strSecRemaining,strSecRemaining);]]>
</Line>
<Line Number="49">
<![CDATA[else]]>
</Line>
<Line Number="50">
<![CDATA[	DTOS(intSecRemaining,strSecRemaining);]]>
</Line>
<Line Number="51">
<![CDATA[end_if;]]>
</Line>
<Line Number="52">
<![CDATA[]]>
</Line>
<Line Number="53">
<![CDATA[CONCAT(strHrsRemaining,strColon,strTimeRemaining_Temp);]]>
</Line>
<Line Number="54">
<![CDATA[CONCAT(strTimeRemaining_Temp,strMinRemaining,strTimeRemaining_Temp);]]>
</Line>
<Line Number="55">
<![CDATA[CONCAT(strTimeRemaining_Temp,strColon,strTimeRemaining_Temp);]]>
</Line>
<Line Number="56">
<![CDATA[CONCAT(strTimeRemaining_Temp,strSecRemaining,Out_TimeRemaining);]]>
</Line>
</STContent>
</Routine>
</Routines>
</AddOnInstructionDefinition>
</AddOnInstructionDefinitions>
</Controller>
</RSLogix5000Content>
