MTN6_PLC/PLC/AOIs/Banner_ZMX_Control_AOI.L5X

440 lines
16 KiB
XML

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RSLogix5000Content SchemaRevision="1.0" SoftwareRevision="36.00" TargetName="Banner_ZMX_Control" TargetType="AddOnInstructionDefinition" TargetClass="Standard" TargetRevision="1.2 " TargetLastEdited="2025-06-17T14:41:08.899Z" ContainsContext="true" ExportDate="Thu Jul 03 11:59:48 2025" ExportOptions="NoRawData L5KData DecoratedData Context Dependencies ForceProtectedEncoding AllProjDocTrans">
<Controller Use="Context" Name="MCM04">
<AddOnInstructionDefinitions Use="Context">
<AddOnInstructionDefinition Use="Target" Name="Banner_ZMX_Control" Class="Standard" Revision="1.2" ExecutePrescan="false" ExecutePostscan="false" ExecuteEnableInFalse="false" CreatedDate="2022-12-21T15:11:52.057Z" CreatedBy="DUKE\jpreisen" EditedDate="2025-06-17T14:41:08.899Z" EditedBy="LCIBATUMI\ilia.gurielidze"
SoftwareRevision="v36.00">
<RevisionNote>
<![CDATA[Cyclic operation timing adjusted. Now waits 600 msecs instead of 300 after Cyclic Bit is turned on. Also the error timer is now 5 seconds instead of 3.]]>
</RevisionNote>
<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="BinFill_Update" TagType="Base" DataType="BOOL" Usage="InOut" Radix="Decimal" Required="true" Visible="true" Constant="false"/>
<Parameter Name="Cyclic_Update" TagType="Base" DataType="BOOL" Usage="InOut" Radix="Decimal" Required="true" Visible="true" Constant="false"/>
<Parameter Name="ZMX_Raw_Inputs" TagType="Base" DataType="INT" Dimensions="68" Usage="InOut" Radix="Decimal" Required="true" Visible="true" Constant="false"/>
<Parameter Name="ZMX_Raw_Outputs" TagType="Base" DataType="INT" Dimensions="40" Usage="InOut" Radix="Decimal" Required="true" Visible="true" Constant="false"/>
<Parameter Name="ZMX_Status" TagType="Base" DataType="BOOL" Usage="Input" Radix="Decimal" Required="true" Visible="true" ExternalAccess="Read/Write">
<DefaultData Format="Decorated">
<DataValue DataType="BOOL" Radix="Decimal" Value="0"/>
</DefaultData>
</Parameter>
<Parameter Name="ZMX" TagType="Base" DataType="Banner_ZMX_Data" Usage="InOut" Required="true" Visible="true" Constant="false"/>
<Parameter Name="Parameter_Update" TagType="Base" DataType="Banner_ZMX_Full_Recipe" Usage="InOut" Required="true" Visible="true" Constant="false">
<Comments>
<Comment Operand=".TRIGGER_MODE">
<![CDATA[Check Data 1]]>
</Comment>
<Comment Operand=".PEAK_HEIGHT_LIMIT_SETPOINT">
<![CDATA[Check Data 2]]>
</Comment>
<Comment Operand=".DISCRETE_OUTPUT_1_CONTROL_MODE">
<![CDATA[Check Data 3]]>
</Comment>
<Comment Operand=".DISCRETE_OUTPUT_2_CONTROL_MODE">
<![CDATA[Check Data 4]]>
</Comment>
<Comment Operand=".ROI_ANCHOR_X">
<![CDATA[Check Data 5]]>
</Comment>
<Comment Operand=".ROI_ANCHOR_Y">
<![CDATA[Check Data 6]]>
</Comment>
<Comment Operand=".ROI_ANCHOR_Z">
<![CDATA[Check Data 7]]>
</Comment>
<Comment Operand=".ROI_LENGTH_X">
<![CDATA[Check Data 8]]>
</Comment>
<Comment Operand=".ROI_LENGTH_Y">
<![CDATA[Check Data 9]]>
</Comment>
<Comment Operand=".ROI_LENGTH_Z">
<![CDATA[Check Data 10]]>
</Comment>
</Comments>
</Parameter>
<Parameter Name="Busy" TagType="Base" DataType="BOOL" Usage="Output" Radix="Decimal" Required="false" Visible="true" ExternalAccess="Read/Write">
<DefaultData Format="Decorated">
<DataValue DataType="BOOL" Radix="Decimal" Value="0"/>
</DefaultData>
</Parameter>
<Parameter Name="Done" TagType="Base" DataType="BOOL" Usage="Output" Radix="Decimal" Required="false" Visible="true" ExternalAccess="Read/Write">
<DefaultData Format="Decorated">
<DataValue DataType="BOOL" Radix="Decimal" Value="0"/>
</DefaultData>
</Parameter>
<Parameter Name="Bin_Error" TagType="Base" DataType="BOOL" Usage="Output" Radix="Decimal" Required="false" Visible="true" ExternalAccess="Read Only">
<DefaultData Format="Decorated">
<DataValue DataType="BOOL" Radix="Decimal" Value="0"/>
</DefaultData>
</Parameter>
<Parameter Name="Cyclic_Error" TagType="Base" DataType="BOOL" Usage="Output" Radix="Decimal" Required="false" Visible="true" ExternalAccess="Read/Write">
<DefaultData Format="Decorated">
<DataValue DataType="BOOL" Radix="Decimal" Value="0"/>
</DefaultData>
</Parameter>
<Parameter Name="Comms_Error" TagType="Base" DataType="BOOL" Usage="Output" Radix="Decimal" Required="false" Visible="true" ExternalAccess="Read/Write">
<DefaultData Format="Decorated">
<DataValue DataType="BOOL" Radix="Decimal" Value="0"/>
</DefaultData>
</Parameter>
<Parameter Name="Sensor_Fault" TagType="Base" DataType="INT" Usage="Output" Radix="Decimal" Required="false" Visible="true" ExternalAccess="Read Only">
<DefaultData Format="Decorated">
<DataValue DataType="INT" Radix="Decimal" Value="0"/>
</DefaultData>
</Parameter>
<Parameter Name="Config_Error" TagType="Base" DataType="INT" Usage="Output" Radix="Decimal" Required="false" Visible="true" ExternalAccess="Read Only">
<DefaultData Format="Decorated">
<DataValue DataType="INT" Radix="Decimal" Value="0"/>
</DefaultData>
</Parameter>
</Parameters>
<LocalTags>
<LocalTag Name="Local" DataType="DINT" Radix="Decimal" ExternalAccess="None">
<DefaultData Format="Decorated">
<DataValue DataType="DINT" Radix="Decimal" Value="0"/>
</DefaultData>
</LocalTag>
<LocalTag Name="InData" DataType="INT" Dimensions="70" Radix="Decimal" ExternalAccess="None">
<DefaultData Format="Decorated">
<Array DataType="INT" Dimensions="70" Radix="Decimal">
<Element Index="[0]" Value="0"/>
<Element Index="[1]" Value="0"/>
<Element Index="[2]" Value="0"/>
<Element Index="[3]" Value="0"/>
<Element Index="[4]" Value="0"/>
<Element Index="[5]" Value="0"/>
<Element Index="[6]" Value="0"/>
<Element Index="[7]" Value="0"/>
<Element Index="[8]" Value="0"/>
<Element Index="[9]" Value="0"/>
<Element Index="[10]" Value="0"/>
<Element Index="[11]" Value="0"/>
<Element Index="[12]" Value="0"/>
<Element Index="[13]" Value="0"/>
<Element Index="[14]" Value="0"/>
<Element Index="[15]" Value="0"/>
<Element Index="[16]" Value="0"/>
<Element Index="[17]" Value="0"/>
<Element Index="[18]" Value="0"/>
<Element Index="[19]" Value="0"/>
<Element Index="[20]" Value="0"/>
<Element Index="[21]" Value="0"/>
<Element Index="[22]" Value="0"/>
<Element Index="[23]" Value="0"/>
<Element Index="[24]" Value="0"/>
<Element Index="[25]" Value="0"/>
<Element Index="[26]" Value="0"/>
<Element Index="[27]" Value="0"/>
<Element Index="[28]" Value="0"/>
<Element Index="[29]" Value="0"/>
<Element Index="[30]" Value="0"/>
<Element Index="[31]" Value="0"/>
<Element Index="[32]" Value="0"/>
<Element Index="[33]" Value="0"/>
<Element Index="[34]" Value="0"/>
<Element Index="[35]" Value="0"/>
<Element Index="[36]" Value="0"/>
<Element Index="[37]" Value="0"/>
<Element Index="[38]" Value="0"/>
<Element Index="[39]" Value="0"/>
<Element Index="[40]" Value="0"/>
<Element Index="[41]" Value="0"/>
<Element Index="[42]" Value="0"/>
<Element Index="[43]" Value="0"/>
<Element Index="[44]" Value="0"/>
<Element Index="[45]" Value="0"/>
<Element Index="[46]" Value="0"/>
<Element Index="[47]" Value="0"/>
<Element Index="[48]" Value="0"/>
<Element Index="[49]" Value="0"/>
<Element Index="[50]" Value="0"/>
<Element Index="[51]" Value="0"/>
<Element Index="[52]" Value="0"/>
<Element Index="[53]" Value="0"/>
<Element Index="[54]" Value="0"/>
<Element Index="[55]" Value="0"/>
<Element Index="[56]" Value="0"/>
<Element Index="[57]" Value="0"/>
<Element Index="[58]" Value="0"/>
<Element Index="[59]" Value="0"/>
<Element Index="[60]" Value="0"/>
<Element Index="[61]" Value="0"/>
<Element Index="[62]" Value="0"/>
<Element Index="[63]" Value="0"/>
<Element Index="[64]" Value="0"/>
<Element Index="[65]" Value="0"/>
<Element Index="[66]" Value="0"/>
<Element Index="[67]" Value="0"/>
<Element Index="[68]" Value="0"/>
<Element Index="[69]" Value="0"/>
</Array>
</DefaultData>
</LocalTag>
<LocalTag Name="Timer1" DataType="TIMER" ExternalAccess="None">
<DefaultData Format="Decorated">
<Structure DataType="TIMER">
<DataValueMember Name="PRE" DataType="DINT" Radix="Decimal" Value="3000"/>
<DataValueMember Name="ACC" DataType="DINT" Radix="Decimal" Value="0"/>
<DataValueMember Name="EN" DataType="BOOL" Value="0"/>
<DataValueMember Name="TT" DataType="BOOL" Value="0"/>
<DataValueMember Name="DN" DataType="BOOL" Value="0"/>
</Structure>
</DefaultData>
</LocalTag>
<LocalTag Name="Timer2" DataType="TIMER" ExternalAccess="None">
<DefaultData Format="Decorated">
<Structure DataType="TIMER">
<DataValueMember Name="PRE" DataType="DINT" Radix="Decimal" Value="5000"/>
<DataValueMember Name="ACC" DataType="DINT" Radix="Decimal" Value="0"/>
<DataValueMember Name="EN" DataType="BOOL" Value="0"/>
<DataValueMember Name="TT" DataType="BOOL" Value="0"/>
<DataValueMember Name="DN" DataType="BOOL" Value="0"/>
</Structure>
</DefaultData>
</LocalTag>
<LocalTag Name="Value" DataType="DINT" Dimensions="2" Radix="Decimal" ExternalAccess="None">
<DefaultData Format="Decorated">
<Array DataType="DINT" Dimensions="2" Radix="Decimal">
<Element Index="[0]" Value="0"/>
<Element Index="[1]" Value="0"/>
</Array>
</DefaultData>
</LocalTag>
</LocalTags>
<Routines>
<Routine Name="Logic" Type="RLL">
<RLLContent>
<Rung Number="0" Type="N">
<Comment>
<![CDATA[Convert Raw data into usable data.]]>
</Comment>
<Text>
<![CDATA[CPS(ZMX_Raw_Inputs[0],InData[0],8)CPS(ZMX_Raw_Inputs[15],InData[16],27)CPS(ZMX_Raw_Inputs[45],InData[47],14)CPS(InData[0],ZMX.Data_In,1)CPS(ZMX.Data_Out,ZMX_Raw_Outputs[0],42);]]>
</Text>
</Rung>
<Rung Number="1" Type="N">
<Comment>
<![CDATA[Unevenness Calculation]]>
</Comment>
<Text>
<![CDATA[CPT(Value[0],(ZMX.Data_In.Peak_Height*100)/ZMX.Data_In.ROI_Height_Z);]]>
</Text>
</Rung>
<Rung Number="2" Type="N">
<Text>
<![CDATA[[GT(Value[0],100) MOVE(100,Value[1]) ,LE(Value[0],100) MOVE(Value[0],Value[1]) ,SUB(Value[1],ZMX.Data_In.Fill_Level_Percent,ZMX.Unevenness) ];]]>
</Text>
</Rung>
<Rung Number="3" Type="N">
<Comment>
<![CDATA[Sensor Fault Codes
0 = Online
1 = EEPROM Timeout
2 = EEPROM Failure
4 = Acquistion Error
5 = Internal Temperature Error
6 = Illumination Temperature Error
7 = Main Sensor Temperature Error
8 = Acquistion Error 2
11 = Laser Operation Error
20 = Internal Test Error
21 = Internal Read Error
22 = Internal Write Error
30 = Laser Power Test Error
31 = Laser Power Read Error
32 = Laser Power Write Error
1000 = Acquistion Error 3
1011 to 1017 = Internal Flash Errors
30000 to 32000 = Boot Loader Error]]>
</Comment>
<Text>
<![CDATA[MOVE(ZMX.Data_In.Sensor_Fault_Code,Sensor_Fault);]]>
</Text>
</Rung>
<Rung Number="4" Type="N">
<Comment>
<![CDATA[Configuration Error Codes
110 = Illumintion power < 1
111 = Illumincatino Power > 100
120 = Invalid Trigger Mode
130 = Trigger Period < 200 ms
131 = Trigger Perdio > 60000 ms
140 = Pitch Angle < -4500
141 = Pitch Angle > 4500
150 = Roll Angle < -4500
151 = Roll Angle > 4500
160 = Yaw Angle < -18000
161 = Yaw Angle > 18000
300 = Invalid Discrete Output
2000 = Anchor Point X < -2500
2001 = Anchor Point X > 2500
2010 = Anchor Point Y < -2500
2011 = Anchor Point Y > 2500
2020 = Anchor Point Z < -2500
2021 = Anchor Point Z > 2500
2030 = Bin Length X < 50
2031 = Bin Length X > 5000
2040 = Bin Width < 50
2041 = Bin Width > 5000
2050 = Bin Width < 50
2051 = Bin Width > 5000
2052 = Invalid Bin Height
2060 = Fill Level Setpoint < 0
2061 = Fill Level Setpoint > 200
2080 = Peak Height Setpoint < 0
2081 = Peak Height Setpoint > Bin Height Z
2100 = Discrete Out 1 Selection Invalid
2110 = Discrete Out 2 Selectino Invalid]]>
</Comment>
<Text>
<![CDATA[MOVE(ZMX.Data_In.Conf_Error_Code,Config_Error);]]>
</Text>
</Rung>
<Rung Number="5" Type="N">
<Comment>
<![CDATA[Communication Check Logic
Not Available at thsi time.]]>
</Comment>
<Text>
<![CDATA[XIC(ZMX_Status)OTE(Comms_Error);]]>
</Text>
</Rung>
<Rung Number="6" Type="N">
<Comment>
<![CDATA[*** Bin Fill Update Section ***]]>
</Comment>
<Text>
<![CDATA[NOP();]]>
</Text>
</Rung>
<Rung Number="7" Type="N">
<Comment>
<![CDATA[Stop any manual update of the ZMX.]]>
</Comment>
<Text>
<![CDATA[XIO(BinFill_Update)OTU(ZMX.Data_Out.Control_Bits.0);]]>
</Text>
</Rung>
<Rung Number="8" Type="N">
<Comment>
<![CDATA[Check that data updated correctly.]]>
</Comment>
<Text>
<![CDATA[XIC(Local.0)[XIO(ZMX.Data_In.Input_Ack.15) XIC(ZMX.Data_In.Input_Ack.0) OTL(Local.1) ,XIC(Timer1.DN) OTL(Bin_Error) OTL(Local.1) ];]]>
</Text>
</Rung>
<Rung Number="9" Type="N">
<Comment>
<![CDATA[Move data from the recipe into the output assembly. The data will be sent to the ZMX after this. ]]>
</Comment>
<Text>
<![CDATA[XIC(BinFill_Update)XIO(Local.0)EQ(Timer1.ACC,0)CPS(Parameter_Update.Fill_Level_Limit_Setpoint_Percent,ZMX.Data_Out.Fill_Level_Limit_Setpoint_Percent,12)OTL(Busy)OTU(Bin_Error)OTU(Done)OTL(Local.0);]]>
</Text>
</Rung>
<Rung Number="10" Type="N">
<Comment>
<![CDATA[Start Timer. Timer used to determine when an update error has occurred.]]>
</Comment>
<Text>
<![CDATA[XIC(Local.0)TON(Timer1,?,?);]]>
</Text>
</Rung>
<Rung Number="11" Type="N">
<Comment>
<![CDATA[Activate bit that controls the data update.]]>
</Comment>
<Text>
<![CDATA[XIC(Local.0)GE(Timer1.ACC,300)OTL(ZMX.Data_Out.Control_Bits.0);]]>
</Text>
</Rung>
<Rung Number="12" Type="N">
<Comment>
<![CDATA[Reset tags used for this operation. Set bit to done.]]>
</Comment>
<Text>
<![CDATA[XIC(Local.1)OTU(ZMX.Data_Out.Control_Bits.0)MOVE(0,Local)OTU(Busy)OTL(Done)OTU(BinFill_Update);]]>
</Text>
</Rung>
<Rung Number="13" Type="N">
<Comment>
<![CDATA[*** Update Cyclic Data Section ***]]>
</Comment>
<Text>
<![CDATA[NOP();]]>
</Text>
</Rung>
<Rung Number="14" Type="N">
<Text>
<![CDATA[XIO(Cyclic_Update)OTU(ZMX.Data_Out.Control_Bits.14);]]>
</Text>
</Rung>
<Rung Number="15" Type="N">
<Comment>
<![CDATA[Wait for cyclic update completion.]]>
</Comment>
<Text>
<![CDATA[XIC(Local.11)XIO(Local.12)EQ(Parameter_Update.Trigger_Mode,ZMX.Data_In.Trigger_Mode)EQ(Parameter_Update.Trigger_Period,ZMX.Data_In.Trigger_Period)EQ(Parameter_Update.Illumination_Power,ZMX.Data_In.Illumination_Power_Percent)EQ(Parameter_Update.Pitch_Angle,ZMX.Data_In.Pitch_Angle)EQ(Parameter_Update.Roll_Angle,ZMX.Data_In.Roll_Angle)EQ(Parameter_Update.Yaw_Angle,ZMX.Data_In.Yaw_Angle)EQ(Parameter_Update.Discrete_IO_Polarity,ZMX.Data_In.Discrete_IO_Polarity)OTL(Local.12);]]>
</Text>
</Rung>
<Rung Number="16" Type="N">
<Comment>
<![CDATA[Generate error for cyclic update.]]>
</Comment>
<Text>
<![CDATA[XIC(Local.11)XIO(Local.12)XIC(Timer2.DN)OTL(Cyclic_Error)OTL(Local.12);]]>
</Text>
</Rung>
<Rung Number="17" Type="N">
<Comment>
<![CDATA[When Cyclic request is activated start update process.]]>
</Comment>
<Text>
<![CDATA[XIC(Cyclic_Update)XIO(Local.10)EQ(Timer2.ACC,0)OTL(Busy)OTU(Cyclic_Error)OTU(Done)OTL(ZMX.Data_Out.Control_Bits.14)OTL(Local.10);]]>
</Text>
</Rung>
<Rung Number="18" Type="N">
<Comment>
<![CDATA[Start Timer. Timer used to determine when an update error has occurred.]]>
</Comment>
<Text>
<![CDATA[XIC(Local.10)TON(Timer2,?,?);]]>
</Text>
</Rung>
<Rung Number="19" Type="N">
<Comment>
<![CDATA[Move data to update cyclic parameters.]]>
</Comment>
<Text>
<![CDATA[XIC(Local.10)XIO(Local.12)GE(Timer2.ACC,600)CPS(Parameter_Update.Trigger_Mode,ZMX.Data_Out.Trigger_Mode,3)CPS(Parameter_Update.Pitch_Angle,ZMX.Data_Out.Pitch_Angle,3)MOVE(Parameter_Update.Discrete_IO_Polarity,ZMX.Data_Out.Discrete_IO_Polarity)OTL(Local.11);]]>
</Text>
</Rung>
<Rung Number="20" Type="N">
<Comment>
<![CDATA[Complete Cyclic Update operation. Reset tags used for process.]]>
</Comment>
<Text>
<![CDATA[XIC(Local.12)OTU(Busy)OTL(Done)MOVE(0,Local)OTU(Cyclic_Update);]]>
</Text>
</Rung>
</RLLContent>
</Routine>
</Routines>
<Dependencies>
<Dependency Type="DataType" Name="Banner_ZMX_Full_Recipe"/>
<Dependency Type="DataType" Name="Banner_ZMX_Data"/>
</Dependencies>
</AddOnInstructionDefinition>
</AddOnInstructionDefinitions>
</Controller>
</RSLogix5000Content>