This commit is contained in:
2026-01-08 11:08:17 +01:00
commit fe882dc444
311 changed files with 511562 additions and 0 deletions

View File

@@ -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>

View File

@@ -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>

View 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>

View File

@@ -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>

View 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

File diff suppressed because it is too large Load Diff