Some improvements and fixes
- Added robot schift params for aligning etcher 1 position - Added HMI Interface to robot fb - Added machine LED's at main cabinet - Aligner now works in auto mode - Added HMI interface to etcher station - Added cReleaseAlarms to HeatCoolPlates - Added HMI interface to HVTester - STarted tray feeder response parsing - Fixed some packml base state machine bugs
This commit is contained in:
@@ -7,10 +7,12 @@ VAR
|
||||
_fbHVTester : FB_HVTester;
|
||||
_fbEtcher1 : FB_Etcher;
|
||||
_fbEtcher2 : FB_Etcher;
|
||||
_fbTrayFeederInput : FB_TrayFeeder(sIPAddr := '192.168.0.41', udiPort := 1337);
|
||||
_fbTrayFeederInput : FB_TrayFeeder(sIPAddr := '192.168.1.10', udiPort := 5000);
|
||||
_fbHeatCoolPlates : FB_HeatCoolPlates;
|
||||
_fbAligner : FB_Aligner;
|
||||
|
||||
_xReleaseAlarms : BOOL;
|
||||
|
||||
_xConfirmAlarms : BOOL;
|
||||
|
||||
_stRobotCmd : ST_PMLc;
|
||||
@@ -43,7 +45,10 @@ VAR
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[IF _xClear THEN
|
||||
<ST><![CDATA[// Data from safety
|
||||
_xReleaseAlarms := PRG_Safety.xEStopOk;
|
||||
|
||||
IF _xClear THEN
|
||||
_xClear := FALSE;
|
||||
_fbRobot.M_Clear();
|
||||
END_IF
|
||||
@@ -86,40 +91,46 @@ _fbRobot(
|
||||
stCommand:= _stRobotCmd,
|
||||
stJobParams := _stRobotJobParams,
|
||||
stUnitFeedbacks := _stUnitFeedbacks,
|
||||
xReleaseAlarms:= TRUE,
|
||||
xReleaseAlarms:= _xReleaseAlarms,
|
||||
xConfirmAlarms:= GVL_SCADA.xErrAck,
|
||||
stStatus => _stRobotStatus,
|
||||
stAdmin => _stRobotAdmin,
|
||||
xReady=> ,
|
||||
xError=> );
|
||||
stPackMLHMIInterface := GVL_SCADA.stMachine.stKukaRobot);
|
||||
|
||||
IF _stRobotCmd.xCmdChangeRequest THEN
|
||||
_stRobotCmd.xCmdChangeRequest := FALSE;
|
||||
END_IF
|
||||
|
||||
_fbHVTester(xOpenChambers:= GVL_SCADA.xOpenAllChambers);
|
||||
_fbHVTester(xOpenChambers:= GVL_SCADA.xOpenAllChambers, stPackMLHMIInterface := GVL_SCADA.stMachine.stHVTester);
|
||||
|
||||
_fbEtcher1(
|
||||
xOpenDoor:= GVL_SCADA.xOpenAllChambers,
|
||||
xOpenChuckClamp := GVL_SCADA.xOpenChuckClampEtcher1,
|
||||
xConfirmAlarms := GVL_SCADA.xErrAck);
|
||||
xReleaseAlarms := _xReleaseAlarms,
|
||||
xConfirmAlarms := GVL_SCADA.xErrAck,
|
||||
stPackMLHMIInterface := GVL_SCADA.stMachine.stEtcher1);
|
||||
|
||||
_fbEtcher2(
|
||||
xOpenDoor:= GVL_SCADA.xOpenAllChambers,
|
||||
xOpenChuckClamp := GVL_SCADA.xOpenChuckClampEtcher2,
|
||||
xConfirmAlarms := GVL_SCADA.xErrAck);
|
||||
xReleaseAlarms := _xReleaseAlarms,
|
||||
xConfirmAlarms := GVL_SCADA.xErrAck,
|
||||
stPackMLHMIInterface := GVL_SCADA.stMachine.stEtcher2);
|
||||
|
||||
_fbTrayFeederInput(
|
||||
stCommand:= ,
|
||||
xReleaseAlarms := _xReleaseAlarms,
|
||||
xConfirmAlarms := GVL_SCADA.xErrAck,
|
||||
stStatus=> GVL_SCADA.stTrayFeederInputState,
|
||||
stAdmin=> GVL_SCADA.stTRayFeederInputAdmin);
|
||||
stAdmin=> GVL_SCADA.stTRayFeederInputAdmin,
|
||||
stPackMLHMIInterface := GVL_SCADA.stMachine.stTrayFeeder);
|
||||
|
||||
_fbHeatCoolPlates(
|
||||
stHMIInterface := GVL_SCADA.stHCPlatesHMIInterface,
|
||||
xReleaseAlarms := _xReleaseAlarms,
|
||||
xConfirmAlarms:= GVL_SCADA.xErrAck);
|
||||
|
||||
_fbAligner(stCommand:= , stStatus=> , stAdmin=> , xConfirmAlarms:= GVL_SCADA.xErrAck);
|
||||
_fbAligner(stCommand:= , stStatus=> , stAdmin=> , xConfirmAlarms:= GVL_SCADA.xErrAck, stPackMLHMIInterface := GVL_SCADA.stMachine.stAligner);
|
||||
|
||||
|
||||
// Call safety program
|
||||
@@ -136,48 +147,72 @@ CASE _iState OF
|
||||
IF _xStartCycle THEN
|
||||
_xStartCycle := FALSE;
|
||||
|
||||
// Only start with robot in idle
|
||||
// Only start with robot in idle then put into aligner
|
||||
IF _stRobotStatus.eStateCurrent = E_PackMLState.IDLE THEN
|
||||
_stRobotJobParams.eJob := E_KukaRobot_JobNumberRobot.PUT_INTO_ALIGNER;
|
||||
_fbRobot.M_Start();
|
||||
_iState := 10;
|
||||
END_IF
|
||||
END_IF
|
||||
|
||||
// Grab from position 1
|
||||
// Wait for part in aligner
|
||||
10:
|
||||
// Prepare robot command
|
||||
_stRobotJobParams.eJob := E_KukaRobot_JobNumberRobot.GET_FROM_INPUT;
|
||||
_stRobotJobParams.rPosX := 88.0;
|
||||
_stRobotJobParams.rPosY := 79.0;
|
||||
_stRobotJobParams.byGripperSide := 3;
|
||||
|
||||
_stRobotCmd.eCntrlCmd := E_PackMLCmd.START;
|
||||
_stRobotCmd.xCmdChangeRequest := TRUE;
|
||||
|
||||
_iState := 20;
|
||||
|
||||
// Wait for Robot to be done
|
||||
20:
|
||||
IF (_stRobotStatus.eStateCurrent = E_PackMLState.IDLE) THEN
|
||||
_iState := 30;
|
||||
_fbAligner.M_Start();
|
||||
_iState := 20;
|
||||
END_IF
|
||||
|
||||
// Job aborted
|
||||
IF (_stRobotStatus.eStateCurrent = E_PackMLState.ABORTED) OR (_stRobotStatus.eStateCurrent = E_PackMLState.STOPPED) THEN
|
||||
_iState := 900;
|
||||
// IF (_stRobotStatus.eStateCurrent = E_PackMLState.ABORTED) OR (_stRobotStatus.eStateCurrent = E_PackMLState.STOPPED) THEN
|
||||
// _iState := 900;
|
||||
// END_IF
|
||||
|
||||
// Wait for aligner to be done then get it with the robot
|
||||
20:
|
||||
IF (_fbAligner.stStatus.eStateCurrent = E_PackMLState.COMPLETED) THEN
|
||||
_stRobotJobParams.eJob := E_KukaRobot_JobNumberRobot.GET_FROM_ALIGNER;
|
||||
_fbRobot.M_Start();
|
||||
_iState := 40;
|
||||
END_IF
|
||||
|
||||
// Put part onto aligner
|
||||
30:
|
||||
_stRobotJobParams.eJob := E_KukaRobot_JobNumberRobot.PUT_INTO_ALIGNER;
|
||||
|
||||
_stRobotCmd.eCntrlCmd := E_PackMLCmd.START;
|
||||
_stRobotCmd.xCmdChangeRequest := TRUE;
|
||||
|
||||
_iState := 40;
|
||||
|
||||
// Align blank
|
||||
// Get from aligner done, reset aligner
|
||||
40:
|
||||
;
|
||||
IF (_stRobotStatus.eStateCurrent = E_PackMLState.IDLE) THEN
|
||||
_fbAligner.M_Reset();
|
||||
_iState := 45;
|
||||
END_IF
|
||||
|
||||
45: // Wait for start to put into etcher
|
||||
IF _xStartCycle THEN
|
||||
_xStartCycle := FALSE;
|
||||
_stRobotJobParams.eJob := E_KukaRobot_JobNumberRobot.PUT_INTO_ETCHER1;
|
||||
_fbRobot.M_Start();
|
||||
_iState := 50;
|
||||
END_IF
|
||||
|
||||
// Wait for robot to be done
|
||||
50:
|
||||
IF (_stRobotStatus.eStateCurrent = E_PackMLState.IDLE) THEN
|
||||
_iState := 60;
|
||||
END_IF
|
||||
|
||||
// Wait for start then get it from the etcher
|
||||
60:
|
||||
IF _xStartCycle THEN
|
||||
_xStartCycle := FALSE;
|
||||
_stRobotJobParams.eJob := E_KukaRobot_JobNumberRobot.GET_FROM_ETCHER1;
|
||||
_fbRobot.M_Start();
|
||||
_iState := 70;
|
||||
END_IF
|
||||
|
||||
// Done with getting it from the etcher
|
||||
70:
|
||||
IF (_stRobotStatus.eStateCurrent = E_PackMLState.IDLE) THEN
|
||||
_stRobotJobParams.eJob := E_KukaRobot_JobNumberRobot.PUT_INTO_ALIGNER;
|
||||
_fbRobot.M_Start();
|
||||
_iState := 10;
|
||||
END_IF
|
||||
|
||||
|
||||
ELSE
|
||||
// Nothing to do here
|
||||
@@ -188,6 +223,8 @@ END_CASE
|
||||
// DEBUG
|
||||
// =====
|
||||
|
||||
|
||||
|
||||
_tofTriggerTime(IN := _xStartTrigger, PT := T#1S);
|
||||
IF _xStartTrigger THEN
|
||||
_xStartTrigger := FALSE;
|
||||
|
||||
@@ -19,6 +19,9 @@ VAR
|
||||
xErrorAck AT %Q* : BOOL;
|
||||
xLockDoor AT %Q* : BOOL := TRUE;
|
||||
|
||||
xLEDMachineOn AT %Q* : BOOL;
|
||||
xLEDMachineOff AT %Q* : BOOL;
|
||||
|
||||
_rtDoorUnlock : R_TRIG;
|
||||
_tofErrorAck : TOF;
|
||||
|
||||
@@ -38,7 +41,9 @@ END_IF
|
||||
_tofErrorAck(IN:= xConfirmAlarms, PT:= T#500MS, Q=> xErrorAck, ET=> );
|
||||
|
||||
// Copy internal signals to outputs
|
||||
xStopRobot := _xStopRobot;]]></ST>
|
||||
xStopRobot := _xStopRobot;
|
||||
xLEDMachineOn := xEStopOk;
|
||||
xLEDMachineOff := (NOT xEStopOk);]]></ST>
|
||||
</Implementation>
|
||||
</POU>
|
||||
</TcPlcObject>
|
||||
16
PLC/00_Main/ST_HMI_Machine.TcDUT
Normal file
16
PLC/00_Main/ST_HMI_Machine.TcDUT
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<DUT Name="ST_HMI_Machine" Id="{60f4c1e9-5df6-4709-9b42-c771abc6cf78}">
|
||||
<Declaration><![CDATA[TYPE ST_HMI_Machine :
|
||||
STRUCT
|
||||
stAligner : ST_HMI_PackML;
|
||||
stEtcher1 : ST_HMI_PackML;
|
||||
stEtcher2 : ST_HMI_PackML;
|
||||
stHVTester : ST_HMI_PackML;
|
||||
stKukaRobot : ST_HMI_PackML;
|
||||
stTrayFeeder : ST_HMI_PackML;
|
||||
END_STRUCT
|
||||
END_TYPE
|
||||
]]></Declaration>
|
||||
</DUT>
|
||||
</TcPlcObject>
|
||||
Reference in New Issue
Block a user