Initial
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
|
||||
<EnumerationTextList Name="eSpinnerKUKAMoveType" Id="{80a44484-0cbf-4b9e-afa6-9431fd8ad2c6}">
|
||||
<Declaration><![CDATA[{attribute 'qualified_only'}
|
||||
{attribute 'strict'}
|
||||
{attribute 'to_string'}
|
||||
TYPE eSpinnerKUKAMoveType :
|
||||
(
|
||||
NoMoveType := 0,
|
||||
MovePosition,
|
||||
MovePositionWithCorrection,
|
||||
MovePreposition,
|
||||
MovePrepositionWithCorrection,
|
||||
MoveNozzlePosition,
|
||||
MoveNozzleTestPositionWithCorrection
|
||||
);
|
||||
END_TYPE
|
||||
]]></Declaration>
|
||||
<XmlArchive>
|
||||
<Data>
|
||||
<o xml:space="preserve" t="TextListEnumerationTextListObject">
|
||||
<l n="TextList" t="ArrayList" cet="TextListRow">
|
||||
<o>
|
||||
<v n="TextID">"NoMoveType"</v>
|
||||
<v n="TextDefault">"0"</v>
|
||||
<l n="LanguageTexts" t="ArrayList" cet="String">
|
||||
<v>No Move</v>
|
||||
</l>
|
||||
</o>
|
||||
<o>
|
||||
<v n="TextID">"MovePosition"</v>
|
||||
<v n="TextDefault">""</v>
|
||||
<l n="LanguageTexts" t="ArrayList" cet="String">
|
||||
<v>Move Direct Position</v>
|
||||
</l>
|
||||
</o>
|
||||
<o>
|
||||
<v n="TextID">"MovePositionWithCorrection"</v>
|
||||
<v n="TextDefault">""</v>
|
||||
<l n="LanguageTexts" t="ArrayList" cet="String">
|
||||
<v>Move Direct Position With Correction</v>
|
||||
</l>
|
||||
</o>
|
||||
<o>
|
||||
<v n="TextID">"MovePreposition"</v>
|
||||
<v n="TextDefault">""</v>
|
||||
<l n="LanguageTexts" t="ArrayList" cet="String">
|
||||
<v>Move Predefined Position</v>
|
||||
</l>
|
||||
</o>
|
||||
<o>
|
||||
<v n="TextID">"MovePrepositionWithCorrection"</v>
|
||||
<v n="TextDefault">""</v>
|
||||
<l n="LanguageTexts" t="ArrayList" cet="String">
|
||||
<v>Move Predefined Position With Correction</v>
|
||||
</l>
|
||||
</o>
|
||||
<o>
|
||||
<v n="TextID">"MoveNozzlePosition"</v>
|
||||
<v n="TextDefault">""</v>
|
||||
<l n="LanguageTexts" t="ArrayList" cet="String">
|
||||
<v>Move Nozzle Test Position</v>
|
||||
</l>
|
||||
</o>
|
||||
<o>
|
||||
<v n="TextID">"MoveNozzleTestPositionWithCorrection"</v>
|
||||
<v n="TextDefault">""</v>
|
||||
<l n="LanguageTexts" t="ArrayList" cet="String">
|
||||
<v>Move Nozzle Test Position With Correction</v>
|
||||
</l>
|
||||
</o>
|
||||
<o>
|
||||
<v n="TextID">""</v>
|
||||
<v n="TextDefault">""</v>
|
||||
<l n="LanguageTexts" t="ArrayList" cet="String">
|
||||
<v></v>
|
||||
</l>
|
||||
</o>
|
||||
</l>
|
||||
<l n="Languages" t="ArrayList" cet="String">
|
||||
<v>en</v>
|
||||
</l>
|
||||
<v n="GuidInit">{bacb1960-6b36-4e2e-a112-56dd5b24cfa8}</v>
|
||||
<v n="GuidReInit">{8f9c7e24-ce9f-4f40-a976-2ee2cf2748d8}</v>
|
||||
<v n="GuidExitX">{99aed97d-ad35-4ff4-9bf6-659376fc6ddf}</v>
|
||||
</o>
|
||||
</Data>
|
||||
<TypeList>
|
||||
<Type n="ArrayList">System.Collections.ArrayList</Type>
|
||||
<Type n="Guid">System.Guid</Type>
|
||||
<Type n="String">System.String</Type>
|
||||
<Type n="TextListEnumerationTextListObject">{4b60233c-f940-4beb-b331-82133b520151}</Type>
|
||||
<Type n="TextListRow">{53da1be7-ad25-47c3-b0e8-e26286dad2e0}</Type>
|
||||
</TypeList>
|
||||
</XmlArchive>
|
||||
</EnumerationTextList>
|
||||
</TcPlcObject>
|
||||
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.13">
|
||||
<DUT Name="sNozzleCalibrationConfig" Id="{61c7112e-90a5-4b55-b14e-19cade2dc0bc}">
|
||||
<Declaration><![CDATA[TYPE sNozzleCalibrationConfig :
|
||||
STRUCT
|
||||
CalibrationPosition : sPosition;
|
||||
ReferencePosition : sPoint;
|
||||
END_STRUCT
|
||||
END_TYPE
|
||||
]]></Declaration>
|
||||
</DUT>
|
||||
</TcPlcObject>
|
||||
12
PLC/2 Spinner/POUs/Peripherie/KUKA/DUTs/sPosition.TcDUT
Normal file
12
PLC/2 Spinner/POUs/Peripherie/KUKA/DUTs/sPosition.TcDUT
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
|
||||
<DUT Name="sPosition" Id="{ba18163e-1273-4daf-9207-13d420a9e96b}">
|
||||
<Declaration><![CDATA[TYPE sPosition :
|
||||
STRUCT
|
||||
Position : sPosition_6Axis;
|
||||
Nozzle : USINT(1..6) := 1;
|
||||
END_STRUCT
|
||||
END_TYPE
|
||||
]]></Declaration>
|
||||
</DUT>
|
||||
</TcPlcObject>
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.11">
|
||||
<DUT Name="sRobotPrePosition" Id="{c47e8a17-f5d4-4f35-8b95-71b36ea07688}">
|
||||
<Declaration><![CDATA[TYPE sRobotPrePosition :
|
||||
STRUCT
|
||||
PrePosition : ARRAY[0..MaxNumberOfSizes] OF sPosition;
|
||||
END_STRUCT
|
||||
END_TYPE]]></Declaration>
|
||||
</DUT>
|
||||
</TcPlcObject>
|
||||
870
PLC/2 Spinner/POUs/Peripherie/KUKA/Spinner_KUKA_FB.TcPOU
Normal file
870
PLC/2 Spinner/POUs/Peripherie/KUKA/Spinner_KUKA_FB.TcPOU
Normal file
@@ -0,0 +1,870 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
|
||||
<POU Name="Spinner_KUKA_FB" Id="{b7de581d-7536-439f-99c3-faee33285c23}" SpecialFunc="None">
|
||||
<Declaration><![CDATA[FUNCTION_BLOCK Spinner_KUKA_FB EXTENDS Peripherie_FB
|
||||
VAR_INPUT
|
||||
Config : REFERENCE TO sSpinnerRobotConfig;
|
||||
|
||||
|
||||
rOutProgrammNumber : USINT;
|
||||
|
||||
bOut_DRIVES_OFF : BOOL;
|
||||
bOut_DRIVES_ON : BOOL;
|
||||
bOut_MOVE_ENABLE : BOOL;
|
||||
bOut_EXT_START : BOOL;
|
||||
bOut_CONF_MESS : BOOL;
|
||||
bOut_PGBO_VALID : BOOL;
|
||||
bOut_PGBO_PARITY : BOOL;
|
||||
|
||||
|
||||
bOut_Jog_A_P : BOOL;
|
||||
bOut_Jog_A_N : BOOL;
|
||||
|
||||
bOut_Jog_B_P : BOOL;
|
||||
bOut_Jog_B_N : BOOL;
|
||||
|
||||
bOut_Jog_C_P : BOOL;
|
||||
bOut_Jog_C_N : BOOL;
|
||||
|
||||
bOut_EndOfCycle : BOOL;
|
||||
|
||||
bOutStartPos : BOOL;
|
||||
|
||||
bOutJobAcknowledgement : BOOL;
|
||||
|
||||
rOutXCord : LREAL;
|
||||
rOutYCord : lreal;
|
||||
rOutZCord : lreal;
|
||||
rOutACord : lreal;
|
||||
rOutBCord : lreal;
|
||||
rOutCCord : LREAL;
|
||||
|
||||
rOutOverride : LREAL;
|
||||
|
||||
rOutTargetSpeed : LREAL := 10;
|
||||
|
||||
EndofCyle : BOOL;
|
||||
|
||||
|
||||
sTargetPosition : sPosition;
|
||||
|
||||
|
||||
|
||||
rOutNozzleNumber : USINT(0..6) := 0;
|
||||
|
||||
|
||||
bIn_PERI_RDY AT %I* : BOOL;
|
||||
bIn_USER_SAF : BOOL;
|
||||
bIn_ROB_STOPPED : BOOL;
|
||||
bIn_STOPMESS : BOOL;
|
||||
bIn_PGNO_REG : BOOL;
|
||||
bIn_APPL_RUN : BOOL;
|
||||
bIn_T1 AT %I* : BOOL;
|
||||
bIn_T2 AT %I* : BOOL;
|
||||
bIn_EXT AT %I* : BOOL;
|
||||
bInI_O_ACTCONF : BOOL;
|
||||
bInPrimaryHomePosition : BOOL;
|
||||
bIn_PRO_ACT : BOOL;
|
||||
|
||||
bInProgramReady : BOOL;
|
||||
|
||||
bInGoToAutoMode : BOOL;
|
||||
|
||||
bInStartPos : BOOL;
|
||||
|
||||
bOutInitialPosition : BOOL;
|
||||
|
||||
bInChangeProgram : BOOL;
|
||||
rInTargetProgram : USINT;
|
||||
|
||||
|
||||
ExternalModeErrorIndex : INT;
|
||||
HomePositionErrorIndex : INT;
|
||||
|
||||
bOutProcessProgramIsStarted : BOOL;
|
||||
|
||||
|
||||
MoveType : eSpinnerKUKAMoveType;
|
||||
rInTargetPredefinedPosition : INT;
|
||||
rInTargetPredefinedPositionSize : INT := 1;
|
||||
ProcessType : eSpinnerRecipeProcessType;
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
bInJobDone : BOOL;
|
||||
bInPosReady : BOOL;
|
||||
|
||||
bInInitialPosition : BOOL;
|
||||
|
||||
rInProgrammNumber : USINT;
|
||||
|
||||
bInProcessPositionStart : BOOL;
|
||||
bInProcessPositionStop : BOOL;
|
||||
|
||||
bOutInProcessPosition : BOOL;
|
||||
|
||||
rInXCord : LREAL;
|
||||
rInYCord : LREAL;
|
||||
rInZCord : LREAL;
|
||||
rInACord : LREAL;
|
||||
rInBCord : LREAL;
|
||||
rInCCord : LREAL;
|
||||
END_VAR
|
||||
VAR
|
||||
RobotOutData AT %Q* : ARRAY [0..3] OF DINT;
|
||||
|
||||
OutXCord AT %Q* : DINT;
|
||||
OutYCord AT %Q* : DINT;
|
||||
OutZCord AT %Q* : DINT;
|
||||
OutACord AT %Q* : DINT;
|
||||
OutBCord AT %Q* : DINT;
|
||||
OutCCord AT %Q* : DINT;
|
||||
|
||||
OutTargetSpeed AT %Q* : DINT;
|
||||
OutOverride AT %Q* : DINT;
|
||||
|
||||
RobotInData AT %I* : ARRAY [0..3] OF DINT;
|
||||
InXCord AT %I* : DINT;
|
||||
InYCord AT %I* : DINT;
|
||||
InZCord AT %I* : DINT;
|
||||
InACord AT %I* : DINT;
|
||||
InBCord AT %I* : DINT;
|
||||
InCCord AT %I* : DINT;
|
||||
|
||||
|
||||
// rIn_Axis6 AT %I* : DINT;
|
||||
bOutAutoDone : BOOL;
|
||||
|
||||
i, ParityCounter : SINT;
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[IF iStationStatus.Soll.Stop THEN
|
||||
bOutAutoDone := FALSE;
|
||||
bOut_DRIVES_OFF := FALSE;
|
||||
bOut_DRIVES_ON := FALSE;
|
||||
bOut_MOVE_ENABLE := FALSE;
|
||||
bOut_EXT_START := FALSE;
|
||||
bOut_CONF_MESS := FALSE;
|
||||
bOut_PGBO_VALID := FALSE;
|
||||
|
||||
bOutStartPos := FALSE;
|
||||
bOut_EndOfCycle := FALSE;
|
||||
bInGoToAutoMode := FALSE;
|
||||
bInStartPos := FALSE;
|
||||
|
||||
bInProcessPositionStart := FALSE;
|
||||
bOutInProcessPosition := FALSE;
|
||||
INIT();
|
||||
StartPos();
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
|
||||
IO();
|
||||
MAIN();
|
||||
ErrorHandling();]]></ST>
|
||||
</Implementation>
|
||||
<Method Name="ChangeProgram" Id="{d62769ec-84f1-4164-b932-589cedea8876}">
|
||||
<Declaration><![CDATA[METHOD ChangeProgram : BOOL
|
||||
VAR_INPUT
|
||||
In : USINT;
|
||||
Stop : BOOL := FALSE;
|
||||
END_VAR
|
||||
VAR_INST
|
||||
Step : INT;
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[IF Stop THEN
|
||||
Step := 0;
|
||||
RETURN;
|
||||
END_IF
|
||||
CASE Step OF
|
||||
0:
|
||||
rOutProgrammNumber := In;
|
||||
IF rInProgrammNumber = In THEN
|
||||
Step := 10;
|
||||
ELSE
|
||||
Step := 50;
|
||||
END_IF
|
||||
10:
|
||||
IF bIn_PGNO_REG THEN
|
||||
Step := 20;
|
||||
ELSE
|
||||
Step := 90;
|
||||
END_IF
|
||||
20:
|
||||
bOut_PGBO_VALID := TRUE;
|
||||
IF NOT bIn_PGNO_REG THEN
|
||||
bOut_PGBO_VALID := FALSE;
|
||||
Step := 10;
|
||||
END_IF
|
||||
50:
|
||||
IF bIn_PGNO_REG THEN
|
||||
Step := 10;
|
||||
ELSE
|
||||
Step := Step +1;
|
||||
END_IF
|
||||
51:
|
||||
bOut_EndOfCycle := TRUE;
|
||||
IF bIn_PGNO_REG THEN
|
||||
bOut_EndOfCycle := FALSE;
|
||||
Step := 20;
|
||||
END_IF
|
||||
90:
|
||||
IF bInProgramReady THEN
|
||||
Step := 95;
|
||||
END_IF
|
||||
95:
|
||||
// IF bInJobDone OR bInError THEN
|
||||
// rOutJobType := 99;
|
||||
// ELSE
|
||||
// rOutJobType := 0;
|
||||
Step := 100;
|
||||
// END_IF
|
||||
100:
|
||||
ChangeProgram := TRUE;
|
||||
Step := 0;
|
||||
END_CASE]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="INIT" Id="{27828ab4-3b04-4d85-b156-9f8bd96454de}">
|
||||
<Declaration><![CDATA[METHOD INIT : BOOL
|
||||
VAR_INPUT
|
||||
END_VAR
|
||||
VAR_INST
|
||||
Step : INT;
|
||||
Timer : TON;
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[IF iStationStatus.Soll.Stop THEN
|
||||
Step := 0;
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
IF Error THEN
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
IF SpinnerNoRobotInit THEN
|
||||
INIT := TRUE;
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
CASE Step OF
|
||||
0:
|
||||
bOut_MOVE_ENABLE := FALSE;
|
||||
bOut_DRIVES_OFF := FALSE;
|
||||
bOut_DRIVES_ON := FALSE;
|
||||
bOut_EXT_START := FALSE;
|
||||
bOUT_CONF_MESS := FALSE;
|
||||
|
||||
bOutAutoDone := FALSE;
|
||||
|
||||
Timer(IN := TRUE, PT := T#1S);
|
||||
IF Timer.Q THEN
|
||||
Timer(IN := FALSE, PT := T#1S);
|
||||
Step := 10;
|
||||
END_IF
|
||||
10:
|
||||
IF bIn_EXT THEN
|
||||
Step := 15;
|
||||
ELSE
|
||||
error_index := AlarmSend(iStation, ExternalModeErrorIndex, TRUE, eReportType.Info, sAvailableResponse.Cancel, FALSE);
|
||||
Error := TRUE;
|
||||
END_IF
|
||||
15:
|
||||
IF bInPrimaryHomePosition THEN
|
||||
Step := 20;
|
||||
ELSE
|
||||
error_index := AlarmSend(iStation, HomePositionErrorIndex, TRUE, eReportType.Info, sAvailableResponse.Cancel, FALSE);
|
||||
Error := TRUE;
|
||||
END_IF
|
||||
20:
|
||||
bOut_MOVE_ENABLE := TRUE;
|
||||
bOut_DRIVES_OFF := TRUE;
|
||||
Step := Step +1;
|
||||
21:
|
||||
IF bIn_ROB_STOPPED THEN
|
||||
Step := 30;
|
||||
END_IF
|
||||
30:
|
||||
IF bIn_PERI_RDY THEN
|
||||
Step := 40;
|
||||
ELSE
|
||||
bOut_DRIVES_ON := TRUE;
|
||||
Step := Step +1;
|
||||
END_IF
|
||||
31:
|
||||
IF bIn_PERI_RDY THEN
|
||||
bOut_DRIVES_ON := FALSE;
|
||||
Step := 40;
|
||||
END_IF
|
||||
40:
|
||||
IF bInI_O_ACTCONF THEN
|
||||
Step := 50;
|
||||
END_IF
|
||||
50:
|
||||
IF bIn_STOPMESS THEN
|
||||
bOUT_CONF_MESS := TRUE;
|
||||
Step := Step +1;
|
||||
ELSE
|
||||
Step := 60;
|
||||
END_IF
|
||||
51:
|
||||
Timer(IN := TRUE, PT := T#1S);
|
||||
IF Timer.Q THEN
|
||||
Timer(IN := FALSE, PT := T#3S);
|
||||
Step := 0;
|
||||
END_IF
|
||||
IF NOT bIn_STOPMESS THEN
|
||||
Timer(IN := FALSE, PT := T#3S);
|
||||
bOUT_CONF_MESS := FALSE;
|
||||
Step := 60;
|
||||
END_IF
|
||||
60:
|
||||
IF bIn_PRO_ACT THEN
|
||||
Step := 100;
|
||||
ELSE
|
||||
bOut_EXT_START := TRUE;
|
||||
Step := Step +1;
|
||||
END_IF
|
||||
61:
|
||||
IF bIn_PRO_ACT THEN
|
||||
Step := 100;
|
||||
END_IF
|
||||
100:
|
||||
Step := 0;
|
||||
bOutAutoDone := TRUE;
|
||||
bInGoToAutoMode := FALSE;
|
||||
INIT := TRUE;
|
||||
END_CASE]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="Initialization" Id="{42e45945-4235-4a49-bad5-9d465706b12b}">
|
||||
<Declaration><![CDATA[METHOD Initialization : BOOL
|
||||
VAR_INPUT
|
||||
iStation : INT;
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[PeripherieInitialization(iStation);
|
||||
|
||||
iMediaArray[eSpinnerMedienNamen.GoToAuto].ServiceName[0] := 'Auto Mode$NStart';
|
||||
iMediaArray[eSpinnerMedienNamen.GoToAuto].bReferenceControl REF= bInGoToAutoMode;
|
||||
|
||||
|
||||
iMediaArray[eSpinnerMedienNamen.KUKA_PositionProcessStart].ServiceName[0] := 'Program$NStart';
|
||||
iMediaArray[eSpinnerMedienNamen.KUKA_PositionProcessStart].bReferenceControl REF= bInProcessPositionStart;
|
||||
iMediaArray[eSpinnerMedienNamen.KUKA_PositionProcessStart].InputAvailable := TRUE;
|
||||
iMediaArray[eSpinnerMedienNamen.KUKA_PositionProcessStart].NoErrorInput := TRUE;
|
||||
iMediaArray[eSpinnerMedienNamen.KUKA_PositionProcessStart].bReferenceResetControl := bInProcessPositionStop;
|
||||
|
||||
iMediaArray[eSpinnerMedienNamen.KUKA_PositionProcessStop].ServiceName[0] := 'Program$NStop';
|
||||
iMediaArray[eSpinnerMedienNamen.KUKA_PositionProcessStop].bReferenceControl REF= bInProcessPositionStop;
|
||||
iMediaArray[eSpinnerMedienNamen.KUKA_PositionProcessStop].InputAvailable := TRUE;
|
||||
iMediaArray[eSpinnerMedienNamen.KUKA_PositionProcessStop].NoErrorInput := TRUE;
|
||||
iMediaArray[eSpinnerMedienNamen.KUKA_PositionProcessStop].bReferenceResetControl := bInProcessPositionStart;
|
||||
|
||||
iMediaArray[eSpinnerMedienNamen.KUKA_StartMove].ServiceName[0] := 'Move$NStart';
|
||||
iMediaArray[eSpinnerMedienNamen.KUKA_StartMove].bReferenceControl REF= bInStartPos;
|
||||
iMediaArray[eSpinnerMedienNamen.KUKA_StartMove].InputAvailable := TRUE;
|
||||
|
||||
|
||||
]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="IO" Id="{73f1e15d-7020-416a-8945-167e995069c2}">
|
||||
<Declaration><![CDATA[METHOD IO : BOOL
|
||||
VAR_INPUT
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[MEMMOVE(ADR(RobotOutData[0]), ADR(rOutProgrammNumber), 1);
|
||||
|
||||
ParityCounter := 0;
|
||||
FOR i := 0 TO 7 DO
|
||||
IF GETBIT32(rOutProgrammNumber, i) THEN
|
||||
ParityCounter := ParityCounter +1;
|
||||
END_IF
|
||||
END_FOR
|
||||
|
||||
bOut_PGBO_PARITY := ParityCounter.0;
|
||||
|
||||
RobotOutData[0].8 := bOut_DRIVES_OFF;
|
||||
RobotOutData[0].9 := bOut_DRIVES_ON;
|
||||
RobotOutData[0].10 := bOut_MOVE_ENABLE;
|
||||
RobotOutData[0].11 := bOut_EXT_START;
|
||||
RobotOutData[0].12 := bOut_CONF_MESS;
|
||||
RobotOutData[0].13 := bOut_PGBO_VALID;
|
||||
RobotOutData[0].14 := bOut_PGBO_PARITY;
|
||||
|
||||
RobotOutData[0].30 := bOutStartPos;
|
||||
|
||||
RobotOutData[1].2 := bOutInitialPosition;
|
||||
RobotOutData[1].25 := bOut_EndOfCycle;
|
||||
|
||||
RobotOutData[3].0 := bOut_Jog_A_P;
|
||||
RobotOutData[3].1 := bOut_Jog_A_N;
|
||||
RobotOutData[3].2 := bOut_Jog_B_P;
|
||||
RobotOutData[3].3 := bOut_Jog_B_N;
|
||||
RobotOutData[3].4 := bOut_Jog_C_P;
|
||||
RobotOutData[3].5 := bOut_Jog_C_N;
|
||||
|
||||
MEMMOVE(ADR(RobotOutData[2]), ADR(rOutNozzleNumber), 1);
|
||||
RobotOutData[2].8 := bOutJobAcknowledgement;
|
||||
|
||||
bInJobDone := RobotInData[2].8;
|
||||
bInPosReady := RobotInData[1].1;
|
||||
|
||||
MEMMOVE(ADR(rInProgrammNumber), ADR(RobotInData[0]), 1);
|
||||
bIn_USER_SAF := RobotInData[0].9;
|
||||
bIn_ROB_STOPPED := RobotInData[0].10;
|
||||
bIn_STOPMESS := RobotInData[0].11;
|
||||
bIn_PGNO_REG := RobotInData[0].12;
|
||||
bIn_APPL_RUN := RobotInData[0].13;
|
||||
bInI_O_ACTCONF := RobotInData[0].17;
|
||||
bInPrimaryHomePosition := RobotInData[0].22;
|
||||
bInInitialPosition := RobotInData[1].2;
|
||||
bIn_PRO_ACT := RobotInData[1].6;
|
||||
bInProgramReady := RobotInData[1].26;
|
||||
|
||||
|
||||
OutXCord := LREAL_TO_DINT(rOutXCord*1000);
|
||||
OutYCord := LREAL_TO_DINT(rOutYCord*1000);
|
||||
OutZCord := LREAL_TO_DINT(rOutZCord*1000);
|
||||
OutACord := LREAL_TO_DINT(rOutACord*1000);
|
||||
OutBCord := LREAL_TO_DINT(rOutBCord*1000);
|
||||
OutCCord := LREAL_TO_DINT(rOutCCord*1000);
|
||||
OutTargetSpeed := LREAL_TO_DINT(rOutTargetSpeed*1000);
|
||||
OutOverride := LREAL_TO_DINT(rOutOverride*1000);
|
||||
|
||||
rInXCord := DINT_TO_LREAL(InXCord)/1000;
|
||||
rInYCord := DINT_TO_LREAL(InYCord)/1000;
|
||||
rInZCord := DINT_TO_LREAL(InZCord)/1000;
|
||||
rInACord := DINT_TO_LREAL(InACord)/1000;
|
||||
rInBCord := DINT_TO_LREAL(InBCord)/1000;
|
||||
rInCCord := DINT_TO_LREAL(InCCord)/1000;]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="MAIN" Id="{68d29e6f-6c80-4cef-a27c-643e5194b3cb}">
|
||||
<Declaration><![CDATA[METHOD MAIN : BOOL
|
||||
VAR_INPUT
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[IF bIn_T1 THEN
|
||||
bOut_MOVE_ENABLE := TRUE;
|
||||
bOut_DRIVES_ON := FALSE;
|
||||
bOut_PGBO_VALID := FALSE;
|
||||
bOut_EXT_START := FALSE;
|
||||
|
||||
bOutInProcessPosition := FALSE;
|
||||
bInStartPos := FALSE;
|
||||
|
||||
ProcessProgramStart();
|
||||
ProcessProgramStop();
|
||||
StartPos();
|
||||
END_IF
|
||||
|
||||
IF bInGoToAutoMode THEN
|
||||
INIT();
|
||||
END_IF
|
||||
|
||||
IF bInStartPos THEN
|
||||
IF StartPos() THEN
|
||||
bInStartPos := FALSE;
|
||||
END_IF
|
||||
END_IF
|
||||
|
||||
IF bInChangeProgram THEN
|
||||
IF ChangeProgram(rInTargetProgram) THEN
|
||||
bInChangeProgram := FALSE;
|
||||
END_IF
|
||||
END_IF
|
||||
|
||||
IF bInProcessPositionStart THEN
|
||||
IF ProcessProgramStart() THEN
|
||||
bInProcessPositionStart := FALSE;
|
||||
bOutInProcessPosition := TRUE;
|
||||
END_IF
|
||||
END_IF
|
||||
|
||||
IF bInProcessPositionStop THEN
|
||||
IF ProcessProgramStop() THEN
|
||||
bInProcessPositionStop := FALSE;
|
||||
bOutInProcessPosition := FALSE;
|
||||
END_IF
|
||||
END_IF
|
||||
|
||||
|
||||
iMediaArray[eSpinnerMedienNamen.GoToAuto].Invisible := (bIn_PRO_ACT AND bIn_PERI_RDY) OR bIn_T1 OR bIn_T2;
|
||||
|
||||
iMediaArray[eSpinnerMedienNamen.KUKA_PositionProcessStart].Invisible := bOutInProcessPosition OR NOT (bIn_PRO_ACT AND bIn_PERI_RDY);
|
||||
|
||||
|
||||
iMediaArray[eSpinnerMedienNamen.KUKA_PositionProcessStop].Invisible := FALSE;
|
||||
IF NOT bOutInProcessPosition THEN
|
||||
iMediaArray[eSpinnerMedienNamen.KUKA_PositionProcessStop].Invisible := TRUE;
|
||||
END_IF
|
||||
|
||||
IF ABS(rInXCord) > 10 THEN
|
||||
iMediaArray[eSpinnerMedienNamen.KUKA_PositionProcessStop].Invisible := TRUE;
|
||||
END_IF
|
||||
|
||||
IF ABS(rInYCord) > 10 THEN
|
||||
iMediaArray[eSpinnerMedienNamen.KUKA_PositionProcessStop].Invisible := TRUE;
|
||||
END_IF
|
||||
|
||||
|
||||
IF ABS(rInZCord) > 60 THEN
|
||||
iMediaArray[eSpinnerMedienNamen.KUKA_PositionProcessStop].Invisible := TRUE;
|
||||
END_IF
|
||||
|
||||
iMediaArray[eSpinnerMedienNamen.KUKA_StartMove].Invisible := NOT bOutInProcessPosition;
|
||||
|
||||
|
||||
CASE MoveType OF
|
||||
eSpinnerKUKAMoveType.NoMoveType:
|
||||
iMediaArray[eSpinnerMedienNamen.KUKA_StartMove].Invisible := TRUE;
|
||||
eSpinnerKUKAMoveType.MoveNozzlePosition:
|
||||
IF rOutNozzleNumber = 0 THEN
|
||||
iMediaArray[eSpinnerMedienNamen.KUKA_StartMove].Invisible := TRUE;
|
||||
END_IF
|
||||
END_CASE
|
||||
|
||||
]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="MoveNozzleTestPosition" Id="{c4e47cbd-d9b5-48f4-b4c0-e1aad8255b4c}">
|
||||
<Declaration><![CDATA[METHOD MoveNozzleTestPosition : BOOL
|
||||
VAR_INPUT
|
||||
END_VAR
|
||||
VAR_INST
|
||||
Step : INT;
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[IF iStationStatus.Soll.Stop THEN
|
||||
Step := 0;
|
||||
bInProcessPositionMove := FALSE;
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
CASE Step OF
|
||||
0:
|
||||
rOutXCord := LREAL_TO_DINT(Config.NozzleCalibration[rInTargetTestPosition].CalibrationPosition.X * 1000);
|
||||
rOutYCord := LREAL_TO_DINT(Config.NozzleCalibration[rInTargetTestPosition].CalibrationPosition.Y * 1000);
|
||||
rOutZCord := LREAL_TO_DINT(Config.NozzleCalibration[rInTargetTestPosition].CalibrationPosition.Z * 1000);
|
||||
|
||||
rOutACord := LREAL_TO_DINT(Config.NozzleCalibration[rInTargetTestPosition].CalibrationPosition.A * 1000);
|
||||
rOutBCord := LREAL_TO_DINT(Config.NozzleCalibration[rInTargetTestPosition].CalibrationPosition.B * 1000);
|
||||
rOutCCord := LREAL_TO_DINT(Config.NozzleCalibration[rInTargetTestPosition].CalibrationPosition.C * 1000);
|
||||
|
||||
rOutNozzleNumber := rInTargetTestPosition;
|
||||
|
||||
rOutTargetSpeed := LREAL_TO_DINT(rInServiceTargetSpeed*1000);
|
||||
IF NOT bStartPos THEN
|
||||
bStartPos := TRUE;
|
||||
Step := 10;
|
||||
END_IF
|
||||
10:
|
||||
IF NOT bStartPos THEN
|
||||
Step := 20;
|
||||
END_IF
|
||||
20:
|
||||
bInProcessPositionMove := FALSE;
|
||||
MoveNozzleTestPosition := TRUE;
|
||||
Step := 0;
|
||||
END_CASE]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="ProcessProgramMove" Id="{ad686a99-8e85-4563-a057-6802952e64cb}">
|
||||
<Declaration><![CDATA[METHOD ProcessProgramMove : BOOL
|
||||
VAR_INPUT
|
||||
END_VAR
|
||||
VAR_INST
|
||||
Step : INT;
|
||||
Size : INT;
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[IF iStationStatus.Soll.Stop THEN
|
||||
Step := 0;
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
CASE Step OF
|
||||
0:
|
||||
Size := rInServieTargetSize;
|
||||
rOutXCord := LREAL_TO_DINT(Config.PrePosition[rInTargetPrePosition].PrePosition[Size].X * 1000);
|
||||
rOutYCord := LREAL_TO_DINT(Config.PrePosition[rInTargetPrePosition].PrePosition[Size].Y * 1000);
|
||||
rOutZCord := LREAL_TO_DINT(Config.PrePosition[rInTargetPrePosition].PrePosition[Size].Z * 1000);
|
||||
rOutACord := LREAL_TO_DINT(Config.PrePosition[rInTargetPrePosition].PrePosition[Size].A * 1000);
|
||||
rOutBCord := LREAL_TO_DINT(Config.PrePosition[rInTargetPrePosition].PrePosition[Size].B * 1000);
|
||||
rOutCCord := LREAL_TO_DINT(Config.PrePosition[rInTargetPrePosition].PrePosition[Size].C * 1000);
|
||||
rOutNozzleNumber := Config.PrePosition[rInTargetPrePosition].PrePosition[Size].Tool;
|
||||
rOutTargetSpeed := LREAL_TO_DINT(rInServiceTargetSpeed*1000);
|
||||
|
||||
IF NOT bStartPos THEN
|
||||
bStartPos := TRUE;
|
||||
Step := 10;
|
||||
END_IF
|
||||
10:
|
||||
IF NOT bStartPos THEN
|
||||
Step := 20;
|
||||
END_IF
|
||||
20:
|
||||
ProcessProgramMove := TRUE;
|
||||
Step := 0;
|
||||
END_CASE]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="ProcessProgramStart" Id="{ee1c82ed-2606-46ce-a1aa-efe14750f8c3}">
|
||||
<Declaration><![CDATA[METHOD ProcessProgramStart : BOOL
|
||||
VAR_INST
|
||||
Step : int;
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[IF SpinnerNoRobotInit THEN
|
||||
Step := 0;
|
||||
ProcessProgramStart := TRUE;
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
IF iStationStatus.Soll.Stop OR bIn_T1 THEN
|
||||
Step := 0;
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
|
||||
IF bOutInProcessPosition THEN
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
IF bIn_T1 THEN
|
||||
Step := 0;
|
||||
bInProcessPositionStart := FALSE;
|
||||
bInStartPos := FALSE;
|
||||
bOutInProcessPosition := FALSE;
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
CASE Step OF
|
||||
0:
|
||||
rOutProgrammNumber := 1;
|
||||
bOutStartPos := FALSE;
|
||||
Step := 10;
|
||||
10:
|
||||
IF bIn_PGNO_REG THEN
|
||||
Step := 20;
|
||||
ELSE
|
||||
Step := 30;
|
||||
END_IF
|
||||
20:
|
||||
bOut_PGBO_VALID := TRUE;
|
||||
IF NOT bIn_PGNO_REG THEN
|
||||
bOut_PGBO_VALID := FALSE;
|
||||
Step := 10;
|
||||
END_IF
|
||||
30:
|
||||
CASE iStation OF
|
||||
FirstSpinner:
|
||||
IF rInXCord <> 100.545 THEN
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
IF rInYCord <> 41.407 THEN
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
IF rInZCord <> 46.312 THEN
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
IF rInACord <> 24.945 THEN
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
IF rInBCord <> -1.029 THEN
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
IF rInCCord <> 0.146 THEN
|
||||
RETURN;
|
||||
END_IF
|
||||
LastSpinner:
|
||||
IF rInXCord <> 100.545 THEN
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
IF rInYCord <> 41.407 THEN
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
IF rInZCord <> 46.312 THEN
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
IF rInACord <> 24.945 THEN
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
IF rInBCord <> -1.029 THEN
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
IF rInCCord <> 0.146 THEN
|
||||
RETURN;
|
||||
END_IF
|
||||
END_CASE
|
||||
|
||||
Step := 40;
|
||||
40:
|
||||
bOutStartPos := FALSE;
|
||||
IF bInPosReady THEN
|
||||
Step := 50;
|
||||
END_IF
|
||||
50:
|
||||
ProcessProgramStart := TRUE;
|
||||
Step := 0;
|
||||
END_CASE]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="ProcessProgramStop" Id="{5672c6cc-102b-4413-af57-80d69ab271eb}">
|
||||
<Declaration><![CDATA[METHOD ProcessProgramStop : BOOL
|
||||
VAR_INPUT
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[IF SpinnerNoRobotInit THEN
|
||||
ProcessProgramStop := TRUE;
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
bOut_EndOfCycle := TRUE;
|
||||
IF bIn_PGNO_REG THEN
|
||||
bOut_EndOfCycle := FALSE;
|
||||
ProcessProgramStop := TRUE;
|
||||
END_IF
|
||||
]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Method Name="StartPos" Id="{3e7fdc5d-8bcc-4484-ae9e-ecf58febe9c6}">
|
||||
<Declaration><![CDATA[METHOD StartPos : BOOL
|
||||
VAR_INPUT
|
||||
END_VAR
|
||||
VAR_INST
|
||||
Step : INT;
|
||||
END_VAR]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[IF iStationStatus.Soll.Stop OR bIn_T1 THEN
|
||||
Step := 0;
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
IF SpinnerNoRobotInit THEN
|
||||
StartPos := TRUE;
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
|
||||
IF bIn_T1 THEN
|
||||
Step := 0;
|
||||
bInProcessPositionStart := FALSE;
|
||||
bInStartPos := FALSE;
|
||||
bOutInProcessPosition := FALSE;
|
||||
RETURN;
|
||||
END_IF
|
||||
|
||||
CASE Step OF
|
||||
0:
|
||||
CASE MoveType OF
|
||||
eSpinnerKUKAMoveType.NoMoveType:
|
||||
StartPos := TRUE;
|
||||
Step := 0;
|
||||
RETURN;
|
||||
eSpinnerKUKAMoveType.MovePosition:
|
||||
;
|
||||
eSpinnerKUKAMoveType.MovePreposition:
|
||||
sTargetPosition := Config.PrePosition[rInTargetPredefinedPosition][ProcessType].PrePosition[rInTargetPredefinedPositionSize];
|
||||
|
||||
rOutXCord := sTargetPosition.X;
|
||||
rOutYCord := sTargetPosition.Y;
|
||||
rOutZCord := sTargetPosition.Z;
|
||||
rOutACord := sTargetPosition.A;
|
||||
rOutBCord := sTargetPosition.B;
|
||||
rOutCCord := sTargetPosition.C;
|
||||
rOutNozzleNumber := sTargetPosition.Tool;
|
||||
eSpinnerKUKAMoveType.MovePrepositionWithCorrection:
|
||||
sTargetPosition := Config.PrePosition[rInTargetPredefinedPosition][ProcessType].PrePosition[rInTargetPredefinedPositionSize];
|
||||
|
||||
rOutXCord := sTargetPosition.X;
|
||||
rOutYCord := sTargetPosition.Y;
|
||||
rOutZCord := sTargetPosition.Z;
|
||||
rOutACord := sTargetPosition.A;
|
||||
rOutBCord := sTargetPosition.B;
|
||||
rOutCCord := sTargetPosition.C;
|
||||
rOutNozzleNumber := sTargetPosition.Tool;
|
||||
|
||||
IF rOutNozzleNumber > 0 THEN
|
||||
rOutACord := rOutACord - rNozzleCalibration[rOutNozzleNumber].Y;
|
||||
rOutCCord := rOutCCord - rNozzleCalibration[rOutNozzleNumber].X;
|
||||
END_IF
|
||||
eSpinnerKUKAMoveType.MoveNozzlePosition:
|
||||
sTargetPosition := Config.NozzleCalibration[rOutNozzleNumber].CalibrationPosition;
|
||||
|
||||
rOutXCord := sTargetPosition.X;
|
||||
rOutYCord := sTargetPosition.Y;
|
||||
rOutZCord := sTargetPosition.Z;
|
||||
rOutACord := sTargetPosition.A;
|
||||
rOutBCord := sTargetPosition.B;
|
||||
rOutCCord := sTargetPosition.C;
|
||||
eSpinnerKUKAMoveType.MovePositionWithCorrection:
|
||||
IF rOutNozzleNumber > 0 THEN
|
||||
rOutACord := rOutACord - rNozzleCalibration[rOutNozzleNumber].Y;
|
||||
rOutCCord := rOutCCord - rNozzleCalibration[rOutNozzleNumber].X;
|
||||
END_IF
|
||||
eSpinnerKUKAMoveType.MoveNozzleTestPositionWithCorrection:
|
||||
sTargetPosition := Config.NozzleCalibration[rOutNozzleNumber].CalibrationPosition;
|
||||
|
||||
rOutXCord := sTargetPosition.X;
|
||||
rOutYCord := sTargetPosition.Y;
|
||||
rOutZCord := sTargetPosition.Z;
|
||||
rOutACord := sTargetPosition.A;
|
||||
rOutBCord := sTargetPosition.B;
|
||||
rOutCCord := sTargetPosition.C;
|
||||
|
||||
IF rOutNozzleNumber > 0 THEN
|
||||
rOutACord := rOutACord - rNozzleCalibration[rOutNozzleNumber].Y;
|
||||
rOutCCord := rOutCCord - rNozzleCalibration[rOutNozzleNumber].X;
|
||||
END_IF
|
||||
END_CASE
|
||||
|
||||
bOutStartPos := FALSE;
|
||||
IF bInPosReady THEN
|
||||
Step := 10;
|
||||
END_IF
|
||||
10:
|
||||
bOutStartPos := TRUE;
|
||||
IF NOT bInPosReady THEN
|
||||
bOutStartPos := FALSE;
|
||||
Step := 20;
|
||||
END_IF
|
||||
20:
|
||||
IF bInJobDone THEN
|
||||
bOutJobAcknowledgement := TRUE;
|
||||
Step := Step +1;
|
||||
END_IF
|
||||
21:
|
||||
IF NOT bInJobDone THEN
|
||||
bOutJobAcknowledgement := FALSE;
|
||||
bOutStartPos := FALSE;
|
||||
Step := 30;
|
||||
END_IF
|
||||
30:
|
||||
StartPos := TRUE;
|
||||
Step := 0;
|
||||
END_CASE]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
</POU>
|
||||
</TcPlcObject>
|
||||
File diff suppressed because it is too large
Load Diff
11107
PLC/2 Spinner/POUs/Peripherie/KUKA/VISUs/VISU_SPINNER_KUKA_SERVICE.TcVIS
Normal file
11107
PLC/2 Spinner/POUs/Peripherie/KUKA/VISUs/VISU_SPINNER_KUKA_SERVICE.TcVIS
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user