Started kuka robot integration with hardware

- Modified PackML state machine to be able to disable unused states
- Added PackTag datatypes for recipe handling
- Started recipe parameter description in json file
- Added schema file for recipe json
- Added state machine drawing for packml
This commit is contained in:
2026-01-30 09:09:30 +01:00
parent 3946e45c65
commit 67ba80893f
44 changed files with 2006 additions and 1366 deletions

5
.gitignore vendored
View File

@@ -17,7 +17,7 @@ LineIDs.dbg.bak
# TwinCAT C++ and shared types
# ignoring the TMC file is only useful for plain PLC programming
# as soon as shared data types (via tmc), C++ or in general TcCom-Module are used, the TMC file has to be part of the repository
*.tmc
#*.tmc
*.tmcRefac
# TwinCAT project files
@@ -57,4 +57,5 @@ commit.txt
*.xlsx
# TwinCAT HMI, filter downloaded JSON schema files
json-schema.org
# Drawio backup file
*.bkp

View File

@@ -148,7 +148,6 @@ Global
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (ARMV8-A).ActiveCfg = Release|TwinCAT OS (ARMV8-A)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (ARMV8-A).Build.0 = Release|TwinCAT OS (ARMV8-A)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (x64).ActiveCfg = Release|TwinCAT OS (x64)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (x64).Build.0 = Release|TwinCAT OS (x64)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (x64-E).ActiveCfg = Release|TwinCAT OS (x64-E)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (x64-E).Build.0 = Release|TwinCAT OS (x64-E)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT RT (x64).ActiveCfg = Release|TwinCAT RT (x64)

43
Infineon.tmc Normal file
View File

@@ -0,0 +1,43 @@
<?xml version="1.0"?>
<TcModuleClass>
<DataTypes>
<DataType>
<Name GUID="{339BB0B6-ADBA-4B47-8EE3-13A207970890}">KukaRobot</Name>
<DisplayName TxtId=""><![CDATA[NewEventClass_DisplayText]]></DisplayName>
<EventId>
<Name Id="1">NotInExtMode</Name>
<DisplayName TxtId=""><![CDATA[Robot not in external control mode]]></DisplayName>
<Severity>Error</Severity>
</EventId>
<EventId>
<Name Id="2">EStopActive</Name>
<DisplayName TxtId=""><![CDATA[Robot E-Stop active]]></DisplayName>
<Severity>Error</Severity>
</EventId>
<EventId>
<Name Id="3">OperatorSafetyNotOk</Name>
<DisplayName TxtId=""><![CDATA[Robot operator safety circuit not ok]]></DisplayName>
<Severity>Error</Severity>
</EventId>
<EventId>
<Name Id="4">ErrorResetTimeout</Name>
<DisplayName TxtId=""><![CDATA[Could not clear robot errors]]></DisplayName>
<Severity>Error</Severity>
</EventId>
<EventId>
<Name Id="5">DrivesEnableTimeout</Name>
<DisplayName TxtId=""><![CDATA[Robot drives enable timeout]]></DisplayName>
<Severity>Error</Severity>
</EventId>
<Hides>
<Hide GUID="{456A0777-3241-483C-B513-164C5A2791FC}"/>
<Hide GUID="{8667E78C-B458-4844-A8FF-6F6F9FAB3AD8}"/>
<Hide GUID="{19AD4B51-9848-4D2F-B3C6-0B9D73C65FC8}"/>
<Hide GUID="{AB2C3294-2622-41B3-900A-1D65C96AB69A}"/>
<Hide GUID="{F663CA49-4C12-4553-8D89-6771B31CACAF}"/>
<Hide GUID="{50756BBB-BCBF-4D48-B02D-A67D3118B1C3}"/>
<Hide GUID="{BDB0FE5C-F185-4694-A82E-41F8D3A78B4B}"/>
</Hides>
</DataType>
</DataTypes>
</TcModuleClass>

View File

@@ -1,7 +1,10 @@
<?xml version="1.0"?>
<TcSmProject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2012/07/TcSmProject" TcSmVersion="1.0" TcVersion="3.1.4026.19">
<Project ProjectGUID="{CB97A0B0-7E22-470D-8550-AA318EA46E50}" TargetNetId="5.167.199.178.1.1" Target64Bit="true" ShowHideConfigurations="#x6">
<Project ProjectGUID="{CB97A0B0-7E22-470D-8550-AA318EA46E50}" TargetNetId="5.127.104.206.1.1" Target64Bit="true" ShowHideConfigurations="#x6">
<System>
<Settings MaxCpus="4" NonWinCpus="2">
<Cpu CpuId="2"/>
</Settings>
<Licenses>
<Target>
<ManualSelect>{2752D285-16AD-4E89-AE6C-80E72784D264}</ManualSelect>
@@ -39,4 +42,7 @@
<Device File="Device 5 (EtherCAT).xti" Id="5"/>
</Io>
</Project>
<Mappings>
<MappingInfo Identifier="{00000000-0010-0304-1000-040310000403}" Id="#x02030010"/>
</Mappings>
</TcSmProject>

View File

@@ -8,8 +8,23 @@ VAR
_fbEtcher1 : FB_Etcher;
_fbEtcher2 : FB_Etcher;
_stRobotCmd : ST_PMLc;
_xConfirmAlarms : BOOL;
_xClear : BOOL;
_xReset : BOOL;
_xStart : BOOL;
_stRobotStatus : ST_PMLs;
_stRobotAdmin : ST_PMLa;
_xFirstCycle : BOOL := TRUE;
_stRecipeGripperChange : ST_PackMLRecipe := (
diID := 0,
sName := 'Change gripper'
);
END_VAR
]]></Declaration>
<Implementation>
@@ -17,18 +32,52 @@ END_VAR
_xFirstCycle := FALSE;
END_IF
_fbRobot(xExecute:= , eCMD:= , eCurrentState=> , eCurrentCMD=> );
IF _xClear THEN
_xClear := FALSE;
_stRobotCmd.eCntrlCmd := E_PackMLCmd.CLEAR;
_stRobotCmd.xCmdChangeRequest := TRUE;
END_IF
IF _xReset THEN
_xReset := FALSE;
_stRobotCmd.eCntrlCmd := E_PackMLCmd.RESET;
_stRobotCmd.xCmdChangeRequest := TRUE;
END_IF
IF _xStart THEN
_xStart := FALSE;
_stRobotCmd.eCntrlCmd := E_PackMLCmd.START;
_stRobotCmd.xCmdChangeRequest := TRUE;
END_IF
_fbRobot(
stCommand:= _stRobotCmd,
xReleaseAlarms:= TRUE,
xConfirmAlarms:= _xConfirmAlarms,
stStatus => _stRobotStatus,
stAdmin => _stRobotAdmin,
xReady=> ,
xError=> );
IF _stRobotCmd.xCmdChangeRequest THEN
_stRobotCmd.xCmdChangeRequest := FALSE;
END_IF
_fbHVTester(xOpenChambers:= GVL_SCADA.xOpenAllChambers);
_fbEtcher1(xOpenDoor:= GVL_SCADA.xOpenAllChambers);
_fbEtcher2(xOpenDoor:= GVL_SCADA.xOpenAllChambers);
// Call safety program
PRG_Safety(xConfirmAlarms := GVL_SCADA.xErrAck);
// Reset alarm reset request
GVL_SCADA.xErrAck := FALSE;]]></ST>
GVL_SCADA.xErrAck := FALSE;
IF _xConfirmAlarms THEN
_xConfirmAlarms := FALSE;
END_IF]]></ST>
</Implementation>
</POU>
</TcPlcObject>

View File

@@ -59,7 +59,9 @@ TYPE E_KukaRobot_JobNumberRobot :
PUT_CHUCK_ETCHER1 := 62,
PUT_CHUCK_ETCHER2 := 63,
PUT_CHUCK_INTO_MAGAZINE := 64,
GET_CHUCK_FROM_MAGAZINE := 65
GET_CHUCK_FROM_MAGAZINE := 65,
WARMUP := 80
) WORD := NO_JOB;
END_TYPE
]]></Declaration>

View File

@@ -4,6 +4,9 @@
<Declaration><![CDATA[// Positionen in um <=> 0.001mm
FUNCTION_BLOCK FINAL FB_KukaRobot EXTENDS FB_PackMLGeneric
VAR_INPUT
eRobotJob : E_KukaRobot_JobNumberRobot;
xReleaseAlarms : BOOL;
xConfirmAlarms : BOOL;
END_VAR
VAR_OUTPUT
@@ -56,13 +59,16 @@ VAR
_xError : BOOL;
// ======
// Alarms
// ======
_fbAlarmNotInExtMode : FB_AlarmMessage(stEventEntry := TC_EVENTS.RobotEvents.RobotNotInExtMode, xWithConfirmation := FALSE);
_fbAlarmEStopActive : FB_AlarmMessage(stEventEntry := TC_EVENTS.RobotEvents.RobotEStopActive, xWithConfirmation := FALSE);
_fbAlarmOperatorSafetyNotOk : FB_AlarmMessage(stEventEntry := TC_EVENTS.RobotEvents.OperatorSafetyNotOk, xWithConfirmation := FALSE);
_fbAlarmNotInExtMode : FB_AlarmMessage(stEventEntry := TC_EVENTS.KukaRobot.NotInExtMode, xWithConfirmation := FALSE);
_fbAlarmEStopActive : FB_AlarmMessage(stEventEntry := TC_EVENTS.KukaRobot.EStopActive, xWithConfirmation := FALSE);
_fbAlarmOperatorSafetyNotOk : FB_AlarmMessage(stEventEntry := TC_EVENTS.KukaRobot.OperatorSafetyNotOk, xWithConfirmation := FALSE);
_fbAlarmRobotErrorResetTimeout : FB_AlarmMessage(stEventEntry := TC_EVENTS.KukaRobot.ErrorResetTimeout, xWithConfirmation := TRUE);
_fbAlarmDrivesEnableTimeout : FB_AlarmMessage(stEventEntry := TC_EVENTS.KukaRobot.DrivesEnableTimeout, xWithConfirmation := TRUE);
END_VAR
]]></Declaration>
<Implementation>
@@ -91,6 +97,16 @@ _fbAlarmOperatorSafetyNotOk(
timOnDelay:= T#0S,
timOffDelay:= T#0S);
// Handled by M_Resetting
_fbAlarmDrivesEnableTimeout(
xRelease:= xReleaseAlarms,
xAcknowledge:= xConfirmAlarms);
// Handled by M_Resetting
_fbAlarmRobotErrorResetTimeout(
xRelease:= xReleaseAlarms,
xAcknowledge:= xConfirmAlarms);
// =======================
// Check if robot is ready
@@ -118,9 +134,7 @@ SUPER^();
_uCtrl.stCtrl.bNotDisableAxes := 1;
// Disable move if in T2 for safety reasons
IF (NOT _uState.stState.bT2) THEN
_uCtrl.stCtrl.bEnableMove := 1;
ELSE
IF _uState.stState.bT2 THEN
_uCtrl.stCtrl.bEnableMove := 0;
END_IF
@@ -129,8 +143,8 @@ END_IF
// Write job outputs
// ==================
_uJobs.stJobs.wJobNrForRobot := _eRobotJob;
_uJobs.stJobs.wFinishedJobNrFromPlc := _ePlcJob;
//_uJobs.stJobs.wJobNrForRobot := _eRobotJob;
//_uJobs.stJobs.wFinishedJobNrFromPlc := _ePlcJob;
// =================
@@ -140,15 +154,225 @@ _uJobs.stJobs.wFinishedJobNrFromPlc := _ePlcJob;
xReady := _xRobotReady;
xError := _xError;]]></ST>
</Implementation>
<Method Name="FB_Init" Id="{71a3f6f0-d3bb-4348-acc7-be533d7488d2}">
<Declaration><![CDATA[//FB_Init ist immer implizit verfügbar und wird primär für die Initialisierung verwendet.
//Der Rückgabewert wird nicht ausgewertet. Für gezielte Einflussnahme können Sie
//die Methoden explizit deklarieren und darin mit dem Standard-Initialisierungscode
//zusätzlichen Code bereitstellen. Sie können den Rückgabewert auswerten.
METHOD FB_Init: BOOL
VAR_INPUT
bInitRetains: BOOL; // TRUE: Die Retain-Variablen werden initialisiert (Reset warm / Reset kalt)
bInCopyCode: BOOL; // TRUE: Die Instanz wird danach in den Kopiercode kopiert (Online-Change)
END_VAR]]></Declaration>
<Implementation>
<ST><![CDATA[_stSMConfig.xStoppingDisabled := TRUE;
_stSMConfig.xCompletingDisabled := TRUE;
_stSMConfig.xCompletedDisabled := TRUE;
_stSMConfig.xAbortingDisabled := TRUE;]]></ST>
</Implementation>
</Method>
<Method Name="M_Aborted" Id="{0c0c17ce-5c1c-4640-9d39-f25b22309d5d}">
<Declaration><![CDATA[METHOD M_Aborted
]]></Declaration>
<Implementation>
<ST><![CDATA[// Reset all relevant robot control signals
_uCtrl.stCtrl.bConfMess := 0;
_uCtrl.stCtrl.bExtStart := 0;
_uCtrl.stCtrl.bEnableAxes := 0;
_uCtrl.stCtrl.bEnableMove := 0;
_uCtrl.stCtrl.bNotDisableAxes := 1;
_uCtrl.stCtrl.bAbortJob := 1;
// Reset robot program and plc job number
_uJobs.stJobs.wJobNrForRobot := E_KukaRobot_JobNumberRobot.NO_JOB;
_uJobs.stJobs.wFinishedJobNrFromPlc := E_KukaRobot_JobNumerPLC.NO_JOB;]]></ST>
</Implementation>
</Method>
<Method Name="M_Clearing" Id="{e6152288-8c7d-4b38-bfbc-4f861d76ccc5}">
<Declaration><![CDATA[METHOD M_Clearing
VAR_INST
_tonWait : TON;
END_VAR]]></Declaration>
<Implementation>
<ST><![CDATA[_tonWait(IN := TRUE, PT := T#1S);
_uCtrl.stCtrl.bEnableMove := 1;
_uCtrl.stCtrl.bAbortJob := 0;
IF _tonWait.Q THEN
_tonWait(IN := FALSE, PT := T#1S);
M_StateComplete();
END_IF
]]></ST>
</Implementation>
</Method>
<Method Name="M_Execute" Id="{bc86876c-a8db-4285-b95c-7c6858a2ca66}">
<Declaration><![CDATA[METHOD M_Execute
]]></Declaration>
<Implementation>
<ST><![CDATA[// Wait for robot to be done
IF _awJobStatesFromRobot[0] = 0 THEN
_eCmd := E_PackMLCmd.COMPLETE;
END_IF]]></ST>
</Implementation>
</Method>
<Method Name="M_Held" Id="{22ddbad0-0b66-427e-a2aa-f177f8adbc94}">
<Declaration><![CDATA[METHOD M_Held
]]></Declaration>
<Implementation>
<ST><![CDATA[]]></ST>
</Implementation>
</Method>
<Method Name="M_Holding" Id="{ff8c2c8e-1fe0-4c63-ad7b-790d72bd9217}">
<Declaration><![CDATA[METHOD M_Holding
]]></Declaration>
<Implementation>
<ST><![CDATA[]]></ST>
</Implementation>
</Method>
<Method Name="M_Idle" Id="{025437ab-beb0-4ad6-bdc3-468dec599ff4}">
<Declaration><![CDATA[METHOD M_Idle
]]></Declaration>
<Implementation>
<ST><![CDATA[
]]></ST>
</Implementation>
</Method>
<Method Name="M_Resetting" Id="{dfe4d36a-80aa-4364-bfd8-6ddd41636d59}">
<Declaration><![CDATA[METHOD M_Resetting
VAR_INST
_tonTimeout : TON;
END_VAR]]></Declaration>
<Implementation>
<ST><![CDATA[_tonTimeout(PT := T#10S);
CASE _iSSM OF
0:
_uCtrl.stCtrl.bEnableAxes := 1;
_tonTimeout.IN := TRUE;
// Wait for drives to be ready
IF _uState.stState.bPeriRdy THEN
_uCtrl.stCtrl.bEnableAxes := 0;
_tonTimeout(IN := FALSE);
_iSSM := 10;
END_IF
// Timeout drives ready
IF _tonTimeout.Q THEN
_uCtrl.stCtrl.bEnableAxes := 0;
_fbAlarmDrivesEnableTimeout.xRelease := TRUE;
_tonTimeout(IN := FALSE);
_eCmd := E_PackMLCmd.ABORT;
END_IF
10:
_uCtrl.stCtrl.bConfMess := 1;
_tonTimeout.IN := TRUE;
// Wait for errors to be reset
IF (NOT _uState.stState.bStopMess) THEN
_uCtrl.stCtrl.bConfMess := 0;
_tonTimeout(IN := FALSE);
_iSSM := 20;
END_IF
// Timeout reset errors
IF _tonTimeout.Q THEN
_fbAlarmRobotErrorResetTimeout.xRelease := TRUE;
_tonTimeout(IN := FALSE);
_eCmd := E_PackMLCmd.ABORT;
END_IF
20:
// Start main program
_uCtrl.stCtrl.bExtStart := 1;
_tonTimeout.IN := TRUE;
IF _tonTimeout.Q THEN
_tonTimeout(IN := FALSE);
_eCmd := E_PackMLCmd.ABORT;
END_IF
IF _uState.stState.bProAct THEN
_uCtrl.stCtrl.bExtStart := 0;
_tonTimeout(IN := FALSE);
M_StateComplete();
END_IF
END_CASE]]></ST>
</Implementation>
</Method>
<Method Name="M_Starting" Id="{011f85d8-1225-4288-876f-918df6e4f235}">
<Declaration><![CDATA[METHOD M_Starting
]]></Declaration>
<Implementation>
<ST><![CDATA[// Write robot job number
_uJobs.stJobs.wJobNrForRobot := DINT_TO_WORD(_stRecipe.stProcessVariables.astParameterDInt[0].Value);
// Gripper number
_abToolsAndPositions[0] := DINT_TO_BYTE(_stRecipe.stProcessVariables.astParameterDInt[1].Value);
// If job number is read back correct, go to next state
IF _awJobStatesFromRobot[0] = _uJobs.stJobs.wJobNrForRobot THEN
_uJobs.stJobs.wJobNrForRobot := E_KukaRobot_JobNumberRobot.NO_JOB;
M_StateComplete();
END_IF
// Wrong job read back from robot -> Abort
// IF _awJobStatesFromRobot[0] <> 0 AND _awJobStatesFromRobot[0] <> E_KukaRobot_JobNumberRobot.WARMUP THEN
// _eCmd := E_PackMLCmd.ABORT;
// END_IF
//
// // Robot has error
// IF _dwErrorBits <> 0 THEN
// _eCmd := E_PackMLCmd.ABORT;
// END_IF]]></ST>
</Implementation>
</Method>
<Method Name="M_Stopped" Id="{50813767-4bd7-4147-b5dc-1bbd18ae1555}">
<Declaration><![CDATA[METHOD M_Stopped
]]></Declaration>
<Implementation>
<ST><![CDATA[_uCtrl.stCtrl.bConfMess := 0;
_uCtrl.stCtrl.bEnableAxes := 0;
_uCtrl.stCtrl.bNotDisableAxes := 1;
_uCtrl.stCtrl.bExtStart := 0;
_eRobotJob := E_KukaRobot_JobNumberRobot.NO_JOB;
_ePlcJob := E_KukaRobot_JobNumerPLC.NO_JOB;
]]></ST>
_ePlcJob := E_KukaRobot_JobNumerPLC.NO_JOB;]]></ST>
</Implementation>
</Method>
<Method Name="M_Suspended" Id="{c2db015c-1cd0-491a-8ce6-6c0bffba7631}">
<Declaration><![CDATA[METHOD M_Suspended
]]></Declaration>
<Implementation>
<ST><![CDATA[]]></ST>
</Implementation>
</Method>
<Method Name="M_Suspending" Id="{5b0e5227-d5bb-40c6-a1b8-8e81b852b9b9}">
<Declaration><![CDATA[METHOD M_Suspending
]]></Declaration>
<Implementation>
<ST><![CDATA[]]></ST>
</Implementation>
</Method>
<Method Name="M_Unholding" Id="{786f4949-9630-4ace-9e30-65bea4e87cb2}">
<Declaration><![CDATA[METHOD M_Unholding
]]></Declaration>
<Implementation>
<ST><![CDATA[]]></ST>
</Implementation>
</Method>
<Method Name="M_Unsuspending" Id="{d7ce33fd-cd94-44f1-9289-25a3ab3829eb}">
<Declaration><![CDATA[METHOD M_Unsuspending
]]></Declaration>
<Implementation>
<ST><![CDATA[]]></ST>
</Implementation>
</Method>
</POU>

View File

@@ -13,8 +13,21 @@ STRUCT
// MOVE_ENABLE
bEnableMove : BIT;
// EXT_START
bExtStart : BIT;
// CONF_MESS
bConfMess : BIT;
// Dummy bits
bDummy1 : BIT;
bDummy2 : BIT;
bDummy3 : BIT;
bDummy4 : BIT;
// Abort job with rising edge
bAbortJob : BIT;
END_STRUCT
END_TYPE
]]></Declaration>

View File

@@ -1,29 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<GlobalTextList Name="GlobalTextList" Id="{71e616d8-9f28-44f9-85e4-c09f140a97bd}">
<XmlArchive>
<Data>
<o xml:space="preserve" t="GlobalTextListObject">
<l n="TextList" t="ArrayList" cet="TextListRow">
<o>
<v n="TextID">"134"</v>
<v n="TextDefault">"Rest"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
</l>
<l n="Languages" t="ArrayList" />
<v n="GuidInit">{70dbd3f8-6154-4749-9cca-681da551cf9b}</v>
<v n="GuidReInit">{7f241e67-9115-442d-b41b-9dac33ba1617}</v>
<v n="GuidExitX">{db2ea5fe-8596-4215-8845-f46ef9e4d4dc}</v>
</o>
</Data>
<TypeList>
<Type n="ArrayList">System.Collections.ArrayList</Type>
<Type n="GlobalTextListObject">{63784cbb-9ba0-45e6-9d69-babf3f040511}</Type>
<Type n="Guid">System.Guid</Type>
<Type n="String">System.String</Type>
<Type n="TextListRow">{53da1be7-ad25-47c3-b0e8-e26286dad2e0}</Type>
</TypeList>
</XmlArchive>
</GlobalTextList>
</TcPlcObject>

View File

@@ -23,7 +23,7 @@ TYPE E_PackMLState :
UNSUSPENDING := 14,
RESETTING := 15,
COMPLETING := 16,
COMPLETE := 17
COMPLETED := 17
) DINT := STOPPED;
END_TYPE
]]></Declaration>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<DUT Name="ST_PMLa" Id="{16746b45-38ff-4f58-95c8-eb6734adb976}">
<Declaration><![CDATA[TYPE ST_PMLa :
STRUCT
astProductData : ARRAY[0..(GVL_PackML_Conf.MAX_PRODUCT_DATA-1)] OF ST_PackML_ProductData;
diStopReason : DINT;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<DUT Name="ST_PMLc" Id="{5cf4c850-57ba-42f8-9986-b146207e1b2f}">
<Declaration><![CDATA[TYPE ST_PMLc :
STRUCT
eUnitMode : E_PackMLUnitMode;
xUnitModeChangeRequest : BOOL;
rMachSpeed : REAL;
eCntrlCmd : E_PackMLCmd;
xCmdChangeRequest : BOOL;
// Parameters
astParameterReal : ARRAY[0..(GVL_PackML_Conf.MAX_PARAMS-1)] OF ST_PackMLParamREAL;
astParameterString : ARRAY[0..(GVL_PackML_Conf.MAX_PARAMS-1)] OF ST_PackMLParamSTRING;
astParameterLReal : ARRAY[0..(GVL_PackML_Conf.MAX_PARAMS-1)] OF ST_PackMLParamLREAL;
astParameterDInt : ARRAY[0..(GVL_PackML_Conf.MAX_PARAMS-1)] OF ST_PackMLParamDINT;
// Recipe data
diSelectedRecipe : DINT;
xRecipeChangeRequest : BOOL;
astRecipe : ARRAY[0..(GVL_PackML_Conf.MAX_RECIPES_PER_UNIT - 1)] OF ST_PackMLRecipe;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<DUT Name="ST_PMLs" Id="{dace328e-4599-42b5-ac3b-2a705ec8e2f3}">
<Declaration><![CDATA[TYPE ST_PMLs :
STRUCT
eUnitModeCurrent : E_PackMLUnitMode;
eStateCurrent : E_PackMLState;
rMachSpeed : REAL;
rCurMachSpeed : REAL;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<DUT Name="ST_PackMLPI" Id="{e7198eb6-2cd3-41c0-be59-e7dbcf10a569}">
<Declaration><![CDATA[TYPE ST_PackMLPI :
STRUCT
astParameterReal : ARRAY[0..(GVL_PackML_Conf.MAX_PARAMS-1)] OF ST_PackMLParamREAL;
astParameterString : ARRAY[0..(GVL_PackML_Conf.MAX_PARAMS-1)] OF ST_PackMLParamSTRING;
astParameterLReal : ARRAY[0..(GVL_PackML_Conf.MAX_PARAMS-1)] OF ST_PackMLParamLREAL;
astParameterDInt : ARRAY[0..(GVL_PackML_Conf.MAX_PARAMS-1)] OF ST_PackMLParamDINT;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<DUT Name="ST_PackMLParamDINT" Id="{f9801bf5-a73d-450f-b9fc-a5d8229e4946}">
<Declaration><![CDATA[TYPE ST_PackMLParamDINT :
STRUCT
diID : DINT;
sName : STRING;
sUnit : STRING(6);
Value : DINT;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<DUT Name="ST_PackMLParamLREAL" Id="{195fabe8-44c0-43ec-8434-75e38b68efb7}">
<Declaration><![CDATA[TYPE ST_PackMLParamLREAL :
STRUCT
diID : DINT;
sName : STRING;
sUnit : STRING(6);
Value : LREAL;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<DUT Name="ST_PackMLParamREAL" Id="{373303ba-9979-4979-a439-c899a36baa12}">
<Declaration><![CDATA[TYPE ST_PackMLParamREAL :
STRUCT
diID : DINT;
sName : STRING;
sUnit : STRING(6);
Value : REAL;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<DUT Name="ST_PackMLParamSTRING" Id="{85353d3e-e4c9-4e83-857e-8ce7ed43abaf}">
<Declaration><![CDATA[TYPE ST_PackMLParamSTRING :
STRUCT
diID : DINT;
sName : STRING;
sUnit : STRING(6);
Value : STRING;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<DUT Name="ST_PackMLRecipe" Id="{b453a4b5-bb40-4669-97f2-8d8ab8d3dc26}">
<Declaration><![CDATA[TYPE ST_PackMLRecipe :
STRUCT
diID : DINT;
sName : STRING;
rPrimaryQty : REAL;
stProcessVariables : ST_PackMLPI;
stIngredients : ST_PackMLPI;
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">
<DUT Name="ST_PackML_ProductData" Id="{2af30e31-0927-41d2-9df4-7ed222070c13}">
<Declaration><![CDATA[TYPE ST_PackML_ProductData :
STRUCT
diProcessedCount : DINT;
diDefectiveCount : DINT;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<DUT Name="ST_PackMLStateMachineConfig" Id="{ced5a276-0ad8-4ce9-8d27-4b268a010876}">
<Declaration><![CDATA[TYPE ST_PackMLStateMachineConfig :
STRUCT
xClearingDisabled : BOOL;
// xStoppedDisabled : BOOL;
xStartingDisabled : BOOL;
// xIdleDisabled : BOOL;
xSuspededDisabled : BOOL;
// xExecuteDisabled : BOOL;
xStoppingDisabled : BOOL;
xAbortingDisabled : BOOL;
// xAbortedDisabled : BOOL;
xHoldingDisabled : BOOL;
xHeldDisabled : BOOL;
xUnholdingDisabled : BOOL;
xSuspendingDisabled : BOOL;
xUnsuspendingDisabled : BOOL;
xResettingDisabled : BOOL;
xCompletingDisabled : BOOL;
xCompletedDisabled : BOOL;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -1,244 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<POU Name="FB_PackMLStateMachine" Id="{784ceb84-1721-424f-89d1-422a24198e57}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_PackMLStateMachine
VAR_INPUT
eMode : E_PackMLUnitMode;
eCmd : E_PackMLCmd;
END_VAR
VAR_OUTPUT
eState : E_PackMLState;
eCurrentMode : E_PackMLUnitMode;
xError : BOOL;
END_VAR
VAR
// Internal mode
_eMode : E_PackMLUnitMode;
// Internal state
_eState : E_PackMLState;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[// Check for mode switch
IF eMode <> _eMode THEN
// Only allow mode switch in stopped state
// or in aborted state when target mode ist manual mode
IF (_eState = E_PackMLState.STOPPED) OR (_eState = E_PackMLState.ABORTED AND eMode = E_PackMLUnitMode.MANUAL) THEN
_eMode := eMode;
END_IF
END_IF
// Base state machine
CASE _eState OF
E_PackMLState.STOPPING:
IF eCmd = E_PackMLCmd.ABORT THEN
_eState := E_PackMLState.ABORTING;
END_IF
E_PackMLState.STOPPED:
IF eCmd = E_PackMLCmd.RESET THEN
_eState := E_PackMLState.RESETTING;
END_IF
IF eCmd = E_PackMLCmd.ABORT THEN
_eState := E_PackMLState.ABORTING;
END_IF
E_PackMLState.RESETTING:
IF eCmd = E_PackMLCmd.STOP THEN
_eState := E_PackMLState.STOPPING;
END_IF
IF eCmd = E_PackMLCmd.ABORT THEN
_eState := E_PackMLState.ABORTING;
END_IF
E_PackMLState.IDLE:
IF eCmd = E_PackMLCmd.START THEN
_eState := E_PackMLState.STARTING;
END_IF
IF eCmd = E_PackMLCmd.STOP THEN
_eState := E_PackMLState.STOPPING;
END_IF
IF eCmd = E_PackMLCmd.ABORT THEN
_eState := E_PackMLState.ABORTING;
END_IF
E_PackMLState.STARTING:
IF eCmd = E_PackMLCmd.STOP THEN
_eState := E_PackMLState.STOPPING;
END_IF
IF eCmd = E_PackMLCmd.ABORT THEN
_eState := E_PackMLState.ABORTING;
END_IF
E_PackMLState.EXECUTE:
IF eCmd = E_PackMLCmd.SUSPEND THEN
_eState := E_PackMLState.SUSPENDING;
END_IF
IF eCmd = E_PackMLCmd.HOLD THEN
_eState := E_PackMLState.HOLDING;
END_IF
IF eCmd = E_PackMLCmd.STOP THEN
_eState := E_PackMLState.STOPPING;
END_IF
IF eCmd = E_PackMLCmd.ABORT THEN
_eState := E_PackMLState.ABORTING;
END_IF
E_PackMLState.SUSPENDING:
IF eCmd = E_PackMLCmd.STOP THEN
_eState := E_PackMLState.STOPPING;
END_IF
IF eCmd = E_PackMLCmd.ABORT THEN
_eState := E_PackMLState.ABORTING;
END_IF
E_PackMLState.SUSPENDED:
IF eCmd = E_PackMLCmd.UNSUSPEND THEN
_eState := E_PackMLState.UNSUSPENDING;
END_IF
IF eCmd = E_PackMLCmd.STOP THEN
_eState := E_PackMLState.STOPPING;
END_IF
IF eCmd = E_PackMLCmd.ABORT THEN
_eState := E_PackMLState.ABORTING;
END_IF
E_PackMLState.UNSUSPENDING:
IF eCmd = E_PackMLCmd.STOP THEN
_eState := E_PackMLState.STOPPING;
END_IF
IF eCmd = E_PackMLCmd.ABORT THEN
_eState := E_PackMLState.ABORTING;
END_IF
E_PackMLState.HOLDING:
IF eCmd = E_PackMLCmd.STOP THEN
_eState := E_PackMLState.STOPPING;
END_IF
IF eCmd = E_PackMLCmd.ABORT THEN
_eState := E_PackMLState.ABORTING;
END_IF
E_PackMLState.HELD:
IF eCmd = E_PackMLCmd.UNHOLD THEN
_eState := E_PackMLState.UNHOLDING;
END_IF
IF eCmd = E_PackMLCmd.STOP THEN
_eState := E_PackMLState.STOPPING;
END_IF
IF eCmd = E_PackMLCmd.ABORT THEN
_eState := E_PackMLState.ABORTING;
END_IF
E_PackMLState.UNHOLDING:
IF eCmd = E_PackMLCmd.STOP THEN
_eState := E_PackMLState.STOPPING;
END_IF
IF eCmd = E_PackMLCmd.ABORT THEN
_eState := E_PackMLState.ABORTING;
END_IF
E_PackMLState.COMPLETING:
IF eCmd = E_PackMLCmd.STOP THEN
_eState := E_PackMLState.STOPPING;
END_IF
IF eCmd = E_PackMLCmd.ABORT THEN
_eState := E_PackMLState.ABORTING;
END_IF
E_PackMLState.COMPLETE:
IF eCmd = E_PackMLCmd.RESET THEN
_eState := E_PackMLState.RESETTING;
END_IF
IF eCmd = E_PackMLCmd.STOP THEN
_eState := E_PackMLState.STOPPING;
END_IF
IF eCmd = E_PackMLCmd.ABORT THEN
_eState := E_PackMLState.ABORTING;
END_IF
E_PackMLState.ABORTED:
IF eCmd = E_PackMLCmd.CLEAR THEN
_eState := E_PackMLState.CLEARING;
END_IF
E_PackMLState.CLEARING:
IF eCmd = E_PackMLCmd.ABORT THEN
_eState := E_PackMLState.ABORTING;
END_IF
ELSE
;
END_CASE
// Copy internal state value to fb output
eState := _eState;
eCurrentMode := _eMode;]]></ST>
</Implementation>
<Method Name="M_StateComplete" Id="{e2f1bae5-5059-4baa-8ba2-8dfa58d439e5}">
<Declaration><![CDATA[METHOD M_StateComplete
VAR_INPUT
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[CASE _eState OF
E_PackMLState.STOPPING:
_eState := E_PackMLState.STOPPED;
E_PackMLState.RESETTING:
_eState := E_PackMLState.IDLE;
E_PackMLState.STARTING:
_eState := E_PackMLState.EXECUTE;
E_PackMLState.EXECUTE:
_eState := E_PackMLState.COMPLETING;
E_PackMLState.SUSPENDING:
_eState := E_PackMLState.SUSPENDED;
E_PackMLState.UNSUSPENDING:
_eState := E_PackMLState.EXECUTE;
E_PackMLState.HOLDING:
_eState := E_PackMLState.HELD;
E_PackMLState.UNHOLDING:
_eState := E_PackMLState.EXECUTE;
E_PackMLState.COMPLETING:
_eState := E_PackMLState.COMPLETE;
E_PackMLState.ABORTING:
_eState := E_PackMLState.ABORTED;
E_PackMLState.CLEARING:
_eState := E_PackMLState.STOPPED;
END_CASE
eState := _eState;]]></ST>
</Implementation>
</Method>
</POU>
</TcPlcObject>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<GVL Name="GVL_PackML_Conf" Id="{b46d8e14-5a19-467d-bb78-56321e43ef47}">
<Declaration><![CDATA[{attribute 'qualified_only'}
VAR_GLOBAL CONSTANT
MAX_PARAMS : UINT := 10;
MAX_PRODUCT_DATA : UINT := 10;
MAX_RECIPES_PER_UNIT : UINT := 5;
END_VAR]]></Declaration>
</GVL>
</TcPlcObject>

View File

@@ -3,39 +3,90 @@
<POU Name="FB_PackMLGeneric" Id="{f562a10e-01bc-407d-9fc0-2837d13c10b1}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_PackMLGeneric IMPLEMENTS I_UnitState
VAR_INPUT
// Mode from superior unit
eModeCmd : E_PackMLUnitMode;
// Command for new state from superior unit
eCmd : E_PackMLCmd;
stCommand : ST_PMLc;
END_VAR
VAR_OUTPUT
// Current mode of unit
eMode : E_PackMLUnitMode;
// Unit status
stStatus : ST_PMLs;
// Current state of unit
eState : E_PackMLState;
// xInvalidModeCmd : BOOL;
// Admin data
stAdmin : ST_PMLa;
END_VAR
VAR
// State machine handler
_fbStateMachine : FB_PackMLStateMachine;
// State machine config
_stSMConfig : ST_PackMLStateMachineConfig;
// Internal unit command
_eCmd : E_PackMLCmd;
// Internal unit mode
_eMode : E_PackMLUnitMode;
// Internal unit state
_eState : E_PackMLState;
// Last state
_eLastState : E_PackMLState;
// Current recipe
_stRecipe : ST_PackMLRecipe;
// Trigger for new command
_rtChangeCmdRequest : R_TRIG;
// Trigger for new mode
_rtChangeModeRequest : R_TRIG;
// Trigger change recipe
_rtChangeRecipeRequest : R_TRIG;
// State state machine variable
_iSSM : INT := 0;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[_fbStateMachine(
eMode:= eMode,
eCmd:= eCmd,
eState=> _eState,
<ST><![CDATA[// Handle command change request
_rtChangeCmdRequest(CLK:= stCommand.xCmdChangeRequest);
IF _rtChangeCmdRequest.Q THEN
_eCmd := stCommand.eCntrlCmd;
END_IF
// Hande mode change request
_rtChangeModeRequest(CLK := stCommand.xUnitModeChangeRequest);
IF _rtChangeModeRequest.Q THEN
_eMode := stCommand.eUnitMode;
END_IF
// Handle recipe change rewuest
_rtChangeRecipeRequest(CLK := stCommand.xRecipeChangeRequest);
IF _rtChangeRecipeRequest.Q THEN
_stRecipe := stCommand.astRecipe[stCommand.diSelectedRecipe];
END_IF
// Call PackML state machine handler
_fbStateMachine(
eMode:= _eMode,
eCmd:= _eCmd,
stConfig := _stSMConfig,
eState=> stStatus.eStateCurrent,
eCurrentMode => stStatus.eUnitModeCurrent,
xError=> );
// Reset state state machine
IF _eLastState <> stStatus.eStateCurrent THEN
_iSSM := 0;
_eLastState := stStatus.eStateCurrent;
END_IF
// Call state method according to current state
CASE _eState OF
CASE stStatus.eStateCurrent OF
E_PackMLState.CLEARING:
M_Clearing();
@@ -84,16 +135,13 @@ CASE _eState OF
E_PackMLState.COMPLETING:
M_Completing();
E_PackMLState.COMPLETE:
E_PackMLState.COMPLETED:
M_Complete();
ELSE
;
END_CASE
// Copy internal flags to output
eState := _eState;]]></ST>
END_CASE]]></ST>
</Implementation>
<Method Name="M_Aborted" Id="{db1a684f-e4e1-4d89-a3aa-9b9dfde0508c}">
<Declaration><![CDATA[METHOD M_Aborted
@@ -176,7 +224,11 @@ eState := _eState;]]></ST>
<Declaration><![CDATA[METHOD M_StateComplete
]]></Declaration>
<Implementation>
<ST><![CDATA[_fbStateMachine.M_StateComplete();]]></ST>
<ST><![CDATA[// Reset state state machine
_iSSM := 0;
// Call state change in PackML state manager
_fbStateMachine.M_StateComplete();]]></ST>
</Implementation>
</Method>
<Method Name="M_Stopped" Id="{9f8a09cf-f3be-4d60-b5e4-cd9572fae88c}">

View File

@@ -0,0 +1,428 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<POU Name="FB_PackMLStateMachine" Id="{784ceb84-1721-424f-89d1-422a24198e57}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_PackMLStateMachine
VAR_INPUT
eMode : E_PackMLUnitMode;
eCmd : E_PackMLCmd;
stConfig : ST_PackMLStateMachineConfig;
END_VAR
VAR_OUTPUT
eState : E_PackMLState;
eCurrentMode : E_PackMLUnitMode;
xError : BOOL;
END_VAR
VAR
// Internal mode
_eMode : E_PackMLUnitMode;
// Internal state
_eState : E_PackMLState;
// Rerun state machine
_xRerunSM : BOOL;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[// Check for mode switch
IF eMode <> _eMode THEN
// Only allow mode switch in stopped state
// or in aborted state when target mode ist manual mode
IF (_eState = E_PackMLState.STOPPED) OR (_eState = E_PackMLState.ABORTED AND eMode = E_PackMLUnitMode.MANUAL) THEN
_eMode := eMode;
END_IF
END_IF
REPEAT
_xRerunSM := FALSE;
// Base state machine
CASE _eState OF
E_PackMLState.STOPPING:
IF eCmd = E_PackMLCmd.ABORT THEN
IF (NOT stConfig.xAbortingDisabled) THEN
_eState := E_PackMLState.ABORTING;
ELSE
_eState := E_PackMLState.ABORTED;
END_IF
END_IF
E_PackMLState.STOPPED:
IF eCmd = E_PackMLCmd.RESET THEN
IF (NOT stConfig.xResettingDisabled)THEN
_eState := E_PackMLState.RESETTING;
ELSE
_eState := E_PackMLState.IDLE;
END_IF
END_IF
IF eCmd = E_PackMLCmd.ABORT THEN
IF (NOT stConfig.xAbortingDisabled) THEN
_eState := E_PackMLState.ABORTING;
ELSE
_eState := E_PackMLState.ABORTED;
END_IF
END_IF
E_PackMLState.RESETTING:
IF eCmd = E_PackMLCmd.STOP THEN
IF (NOT stConfig.xStoppingDisabled) THEN
_eState := E_PackMLState.STOPPING;
ELSE
_eState := E_PackMLState.STOPPED;
END_IF
END_IF
IF eCmd = E_PackMLCmd.ABORT THEN
IF (NOT stConfig.xAbortingDisabled) THEN
_eState := E_PackMLState.ABORTING;
ELSE
_eState := E_PackMLState.ABORTED;
END_IF
END_IF
E_PackMLState.IDLE:
IF eCmd = E_PackMLCmd.START THEN
IF (NOT stConfig.xStartingDisabled) THEN
_eState := E_PackMLState.STARTING;
ELSE
_eState := E_PackMLState.EXECUTE;
END_IF
END_IF
IF eCmd = E_PackMLCmd.STOP THEN
IF (NOT stConfig.xStoppingDisabled) THEN
_eState := E_PackMLState.STOPPING;
ELSE
_eState := E_PackMLState.STOPPED;
END_IF
END_IF
IF eCmd = E_PackMLCmd.ABORT THEN
IF (NOT stConfig.xAbortingDisabled) THEN
_eState := E_PackMLState.ABORTING;
ELSE
_eState := E_PackMLState.ABORTED;
END_IF
END_IF
E_PackMLState.STARTING:
IF eCmd = E_PackMLCmd.STOP THEN
IF (NOT stConfig.xStoppingDisabled) THEN
_eState := E_PackMLState.STOPPING;
ELSE
_eState := E_PackMLState.STOPPED;
END_IF
END_IF
IF eCmd = E_PackMLCmd.ABORT THEN
IF (NOT stConfig.xAbortingDisabled) THEN
_eState := E_PackMLState.ABORTING;
ELSE
_eState := E_PackMLState.ABORTED;
END_IF
END_IF
E_PackMLState.EXECUTE:
IF eCmd = E_PackMLCmd.SUSPEND AND (NOT stConfig.xSuspededDisabled) THEN
IF (NOT stConfig.xSuspendingDisabled) THEN
_eState := E_PackMLState.SUSPENDING;
ELSE
_eState := E_PackMLState.SUSPENDED;
END_IF
END_IF
IF eCmd = E_PackMLCmd.HOLD AND (NOT stConfig.xHeldDisabled) THEN
IF (NOT stConfig.xHoldingDisabled) THEN
_eState := E_PackMLState.HOLDING;
ELSE
_eState := E_PackMLState.HELD;
END_IF
END_IF
IF eCmd = E_PackMLCmd.STOP THEN
IF (NOT stConfig.xStoppingDisabled) THEN
_eState := E_PackMLState.STOPPING;
ELSE
_eState := E_PackMLState.STOPPED;
END_IF
END_IF
IF eCmd = E_PackMLCmd.ABORT THEN
IF (NOT stConfig.xAbortingDisabled) THEN
_eState := E_PackMLState.ABORTING;
ELSE
_eState := E_PackMLState.ABORTED;
END_IF
END_IF
IF eCmd = E_PackMLCmd.COMPLETE THEN
IF (NOT stConfig.xCompletedDisabled)THEN
IF (NOT stConfig.xCompletingDisabled) THEN
_eState := E_PackMLState.COMPLETING;
ELSE
_eState := E_PackMLState.COMPLETED;
END_IF
ELSE
IF (NOT stConfig.xResettingDisabled) THEN
_eState := E_PackMLState.RESETTING;
ELSE
_eState := E_PackMLState.IDLE;
END_IF
END_IF
END_IF
E_PackMLState.SUSPENDING:
IF eCmd = E_PackMLCmd.STOP THEN
IF (NOT stConfig.xStoppingDisabled) THEN
_eState := E_PackMLState.STOPPING;
ELSE
_eState := E_PackMLState.STOPPED;
END_IF
END_IF
IF eCmd = E_PackMLCmd.ABORT THEN
IF (NOT stConfig.xAbortingDisabled) THEN
_eState := E_PackMLState.ABORTING;
ELSE
_eState := E_PackMLState.ABORTED;
END_IF
END_IF
E_PackMLState.SUSPENDED:
IF eCmd = E_PackMLCmd.UNSUSPEND THEN
IF (NOT stConfig.xUnsuspendingDisabled) THEN
_eState := E_PackMLState.UNSUSPENDING;
ELSE
_eState := E_PackMLState.EXECUTE;
END_IF
END_IF
IF eCmd = E_PackMLCmd.HOLD AND (NOT stConfig.xHeldDisabled) THEN
IF (NOT stConfig.xHoldingDisabled) THEN
_eState := E_PackMLState.HOLDING;
ELSE
_eState := E_PackMLState.HELD;
END_IF
END_IF
IF eCmd = E_PackMLCmd.STOP THEN
IF (NOT stConfig.xStoppingDisabled) THEN
_eState := E_PackMLState.STOPPING;
ELSE
_eState := E_PackMLState.STOPPED;
END_IF
END_IF
IF eCmd = E_PackMLCmd.ABORT THEN
IF (NOT stConfig.xAbortingDisabled) THEN
_eState := E_PackMLState.ABORTING;
ELSE
_eState := E_PackMLState.ABORTED;
END_IF
END_IF
E_PackMLState.UNSUSPENDING:
IF eCmd = E_PackMLCmd.STOP THEN
IF (NOT stConfig.xStoppingDisabled) THEN
_eState := E_PackMLState.STOPPING;
ELSE
_eState := E_PackMLState.STOPPED;
END_IF
END_IF
IF eCmd = E_PackMLCmd.ABORT THEN
IF (NOT stConfig.xAbortingDisabled) THEN
_eState := E_PackMLState.ABORTING;
ELSE
_eState := E_PackMLState.ABORTED;
END_IF
END_IF
E_PackMLState.HOLDING:
IF eCmd = E_PackMLCmd.STOP THEN
IF (NOT stConfig.xStoppingDisabled) THEN
_eState := E_PackMLState.STOPPING;
ELSE
_eState := E_PackMLState.STOPPED;
END_IF
END_IF
IF eCmd = E_PackMLCmd.ABORT THEN
IF (NOT stConfig.xAbortingDisabled) THEN
_eState := E_PackMLState.ABORTING;
ELSE
_eState := E_PackMLState.ABORTED;
END_IF
END_IF
E_PackMLState.HELD:
IF eCmd = E_PackMLCmd.UNHOLD THEN
IF (NOT stConfig.xUnholdingDisabled) THEN
_eState := E_PackMLState.UNHOLDING;
ELSE
_eState := E_PackMLState.EXECUTE;
END_IF
END_IF
IF eCmd = E_PackMLCmd.STOP THEN
IF (NOT stConfig.xStoppingDisabled) THEN
_eState := E_PackMLState.STOPPING;
ELSE
_eState := E_PackMLState.STOPPED;
END_IF
END_IF
IF eCmd = E_PackMLCmd.ABORT THEN
IF (NOT stConfig.xAbortingDisabled) THEN
_eState := E_PackMLState.ABORTING;
ELSE
_eState := E_PackMLState.ABORTED;
END_IF
END_IF
E_PackMLState.UNHOLDING:
IF eCmd = E_PackMLCmd.STOP THEN
IF (NOT stConfig.xStoppingDisabled) THEN
_eState := E_PackMLState.STOPPING;
ELSE
_eState := E_PackMLState.STOPPED;
END_IF
END_IF
IF eCmd = E_PackMLCmd.ABORT THEN
IF (NOT stConfig.xAbortingDisabled) THEN
_eState := E_PackMLState.ABORTING;
ELSE
_eState := E_PackMLState.ABORTED;
END_IF
END_IF
E_PackMLState.COMPLETING:
IF eCmd = E_PackMLCmd.STOP THEN
IF (NOT stConfig.xStoppingDisabled) THEN
_eState := E_PackMLState.STOPPING;
ELSE
_eState := E_PackMLState.STOPPED;
END_IF
END_IF
IF eCmd = E_PackMLCmd.ABORT THEN
IF (NOT stConfig.xAbortingDisabled) THEN
_eState := E_PackMLState.ABORTING;
ELSE
_eState := E_PackMLState.ABORTED;
END_IF
END_IF
E_PackMLState.COMPLETED:
IF eCmd = E_PackMLCmd.RESET THEN
IF (NOT stConfig.xResettingDisabled)THEN
_eState := E_PackMLState.RESETTING;
ELSE
_eState := E_PackMLState.IDLE;
END_IF
END_IF
IF eCmd = E_PackMLCmd.STOP THEN
IF (NOT stConfig.xStoppingDisabled) THEN
_eState := E_PackMLState.STOPPING;
ELSE
_eState := E_PackMLState.STOPPED;
END_IF
END_IF
IF eCmd = E_PackMLCmd.ABORT THEN
IF (NOT stConfig.xAbortingDisabled) THEN
_eState := E_PackMLState.ABORTING;
ELSE
_eState := E_PackMLState.ABORTED;
END_IF
END_IF
E_PackMLState.ABORTED:
IF eCmd = E_PackMLCmd.CLEAR THEN
IF (NOT stConfig.xClearingDisabled) THEN
_eState := E_PackMLState.CLEARING;
ELSE
_eState := E_PackMLState.STOPPED;
END_IF
END_IF
E_PackMLState.CLEARING:
IF eCmd = E_PackMLCmd.ABORT THEN
IF (NOT stConfig.xAbortingDisabled) THEN
_eState := E_PackMLState.ABORTING;
ELSE
_eState := E_PackMLState.ABORTED;
END_IF
END_IF
ELSE
;
END_CASE
UNTIL (NOT _xRerunSM)
END_REPEAT
// Copy internal state value to fb output
eState := _eState;
eCurrentMode := _eMode;]]></ST>
</Implementation>
<Method Name="M_StateComplete" Id="{e2f1bae5-5059-4baa-8ba2-8dfa58d439e5}">
<Declaration><![CDATA[METHOD M_StateComplete
VAR_INPUT
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[CASE _eState OF
E_PackMLState.STOPPING:
_eState := E_PackMLState.STOPPED;
E_PackMLState.RESETTING:
_eState := E_PackMLState.IDLE;
E_PackMLState.STARTING:
_eState := E_PackMLState.EXECUTE;
E_PackMLState.SUSPENDING:
_eState := E_PackMLState.SUSPENDED;
E_PackMLState.UNSUSPENDING:
_eState := E_PackMLState.EXECUTE;
E_PackMLState.HOLDING:
_eState := E_PackMLState.HELD;
E_PackMLState.UNHOLDING:
_eState := E_PackMLState.EXECUTE;
E_PackMLState.COMPLETING:
IF (NOT stConfig.xCompletedDisabled)THEN
_eState := E_PackMLState.COMPLETED;
ELSE
IF (NOT stConfig.xResettingDisabled) THEN
_eState := E_PackMLState.RESETTING;
ELSE
_eState := E_PackMLState.IDLE;
END_IF
END_IF
E_PackMLState.ABORTING:
_eState := E_PackMLState.ABORTED;
E_PackMLState.CLEARING:
_eState := E_PackMLState.STOPPED;
END_CASE
eState := _eState;]]></ST>
</Implementation>
</Method>
</POU>
</TcPlcObject>

View File

@@ -194,7 +194,7 @@ fbPackML.M_StateComplete();
AssertEquals_DINT(E_PackMLState.COMPLETING, fbPackML.eState, 'Should transition to COMPLETING');
fbPackML.M_StateComplete();
AssertEquals_DINT(E_PackMLState.COMPLETE, fbPackML.eState, 'Should transition to COMPLETE');
AssertEquals_DINT(E_PackMLState.COMPLETED, fbPackML.eState, 'Should transition to COMPLETE');
TEST_FINISHED();]]></ST>
</Implementation>
@@ -221,7 +221,7 @@ AssertEquals_DINT(E_PackMLState.EXECUTE, fbPackML.eState, 'Should reach EXECUTE'
// EXECUTE -> COMPLETING -> COMPLETE
fbPackML.M_StateComplete();
fbPackML.M_StateComplete();
AssertEquals_DINT(E_PackMLState.COMPLETE, fbPackML.eState, 'Should reach COMPLETE');
AssertEquals_DINT(E_PackMLState.COMPLETED, fbPackML.eState, 'Should reach COMPLETE');
// COMPLETE -> RESETTING -> IDLE
fbPackML(eCmd := E_PackMLCmd.RESET);
@@ -425,7 +425,7 @@ fbPackML(eCmd := E_PackMLCmd.START);
fbPackML.M_StateComplete();
fbPackML.M_StateComplete();
fbPackML.M_StateComplete();
AssertEquals_DINT(E_PackMLState.COMPLETE, fbPackML.eState, 'Setup: Should be COMPLETE');
AssertEquals_DINT(E_PackMLState.COMPLETED, fbPackML.eState, 'Setup: Should be COMPLETE');
// Test RESET from COMPLETE
fbPackML(eCmd := E_PackMLCmd.RESET);
@@ -452,7 +452,7 @@ fbPackML(eCmd := E_PackMLCmd.START);
fbPackML.M_StateComplete();
fbPackML.M_StateComplete();
fbPackML.M_StateComplete();
AssertEquals_DINT(E_PackMLState.COMPLETE, fbPackML.eState, 'Setup: Should be COMPLETE');
AssertEquals_DINT(E_PackMLState.COMPLETED, fbPackML.eState, 'Setup: Should be COMPLETE');
// Test STOP from COMPLETE
fbPackML(eCmd := E_PackMLCmd.STOP);

View File

@@ -63,28 +63,56 @@
<Compile Include="01_Stationen\TrayFeeder\FB_TrayFeeder.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="GlobalTextList.TcGTLO">
<SubType>Code</SubType>
</Compile>
<Compile Include="GVLs\GVL_SCADA.TcGVL">
<SubType>Code</SubType>
<LinkAlways>true</LinkAlways>
</Compile>
<Compile Include="LibraryCandidates\PackML\E_PackMLCmd.TcDUT">
<Compile Include="LibraryCandidates\PackML\DUTs\E_PackMLCmd.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="LibraryCandidates\PackML\E_PackMLState.TcDUT">
<Compile Include="LibraryCandidates\PackML\DUTs\E_PackMLState.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="LibraryCandidates\PackML\E_PackMLUnitMode.TcDUT">
<Compile Include="LibraryCandidates\PackML\DUTs\E_PackMLUnitMode.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="LibraryCandidates\PackML\FB_PackMLGeneric.TcPOU">
<Compile Include="LibraryCandidates\PackML\DUTs\PackTags\ST_PackMLParamDINT.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="LibraryCandidates\PackML\FB_PackMLStateMachine.TcPOU">
<Compile Include="LibraryCandidates\PackML\DUTs\PackTags\ST_PackMLParamLREAL.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="LibraryCandidates\PackML\DUTs\PackTags\ST_PackMLParamREAL.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="LibraryCandidates\PackML\DUTs\PackTags\ST_PackMLParamSTRING.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="LibraryCandidates\PackML\DUTs\PackTags\ST_PackMLPI.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="LibraryCandidates\PackML\DUTs\PackTags\ST_PackMLRecipe.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="LibraryCandidates\PackML\DUTs\PackTags\ST_PackML_ProductData.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="LibraryCandidates\PackML\DUTs\PackTags\ST_PMLa.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="LibraryCandidates\PackML\DUTs\PackTags\ST_PMLc.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="LibraryCandidates\PackML\DUTs\PackTags\ST_PMLs.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="LibraryCandidates\PackML\DUTs\ST_PackMLStateMachineConfig.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="LibraryCandidates\PackML\GVL_PackML_Conf.TcGVL">
<SubType>Code</SubType>
<LinkAlways>true</LinkAlways>
</Compile>
<Compile Include="LibraryCandidates\PackML\ITFs\I_UnitState.TcIO">
<SubType>Code</SubType>
</Compile>
@@ -94,6 +122,12 @@
<Compile Include="LibraryCandidates\PackML\ITFs\I_UnitStateWaiting.TcIO">
<SubType>Code</SubType>
</Compile>
<Compile Include="LibraryCandidates\PackML\POUs\FB_PackMLGeneric.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="LibraryCandidates\PackML\POUs\FB_PackMLStateMachine.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="LibraryCandidates\Unittests\FB_PackMLStateMachine_Test.TcPOU">
<SubType>Code</SubType>
</Compile>
@@ -103,13 +137,6 @@
<Compile Include="PlcTask.TcTTO">
<SubType>Code</SubType>
</Compile>
<Compile Include="Visualization Manager.TcVMO">
<SubType>Code</SubType>
</Compile>
<Compile Include="Visu\Visualization.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<Folder Include="01_Stationen\Kuka_Robot" />
@@ -122,10 +149,12 @@
<Folder Include="00_Main" />
<Folder Include="LibraryCandidates" />
<Folder Include="GVLs" />
<Folder Include="LibraryCandidates\PackML\DUTs" />
<Folder Include="LibraryCandidates\PackML\DUTs\PackTags" />
<Folder Include="LibraryCandidates\PackML\POUs" />
<Folder Include="LibraryCandidates\Unittests" />
<Folder Include="LibraryCandidates\PackML" />
<Folder Include="LibraryCandidates\PackML\ITFs" />
<Folder Include="Visu" />
</ItemGroup>
<ItemGroup>
<PlaceholderReference Include="BaseComponents">

392
PLC/PLC.tmc Normal file

File diff suppressed because one or more lines are too long

View File

@@ -5,7 +5,7 @@
<CycleTime>10000</CycleTime>
<Priority>20</Priority>
<PouCall>
<Name>PRG_Test</Name>
<Name>PRG_Main</Name>
</PouCall>
<TaskFBGuid>{40eb18ee-d47c-458f-bba5-88b899fc1567}</TaskFBGuid>
<Fb_init>{6e3535be-c313-4e44-9f98-4268a560c4bf}</Fb_init>

View File

@@ -1,397 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<Visu Name="Visualization" Id="{c7f813ad-d496-46cf-913b-a7293dcf426c}">
<XmlArchive>
<Data>
<o xml:space="preserve" t="VisualObject">
<n n="LastVisuLanguageModelEntry" />
<v n="UniqueIdGenerator">"12"</v>
<o n="VisualElemList" t="VisualElemList">
<l n="VisualElementList" t="VisualElemCollection" cet="GenericVisualElem">
<o>
<a n="ConfiguredComplexInputs" et="ComplexInput" />
<l n="Elements" t="ArrayList" />
<n n="VisualElementDescription" />
<o n="VisualElemMemberList" t="VisualElemMemberList">
<l n="VisualElemMemberList" t="VisualElemMemberCollection" cet="VisualElemMember">
<o>
<v n="Id">571893170L</v>
<v n="Value">"Rest"</v>
</o>
<o>
<v n="Id">1931512087L</v>
<v n="Value">"TOGGLE"</v>
</o>
<o>
<v n="Id">300685745L</v>
<v n="Value">false</v>
</o>
<o>
<v n="Id">2812299069L</v>
<v n="Value">4294967295U</v>
</o>
<o>
<v n="Id">494569607L</v>
<v n="Value">4278190080U</v>
</o>
<o>
<v n="Id">3719097617L</v>
<v n="Value">0</v>
</o>
<o>
<v n="Id">1649127785L</v>
<v n="Value">134</v>
</o>
<o>
<v n="Id">357335551L</v>
<v n="Value">150</v>
</o>
<o>
<v n="Id">2422045748L</v>
<v n="Value">229</v>
</o>
<o>
<v n="Id">2134141914L</v>
<v n="Value">177</v>
</o>
<o>
<v n="Id">4062784938L</v>
<v n="Value">"Element-Switch-PushSwitch-Gray"</v>
</o>
<o>
<v n="Id">550940142L</v>
<v n="Value">248</v>
</o>
<o>
<v n="Id">1473355128L</v>
<v n="Value">238</v>
</o>
<o>
<v n="Id">493260384L</v>
<v n="Value">4294967295U</v>
</o>
<o>
<v n="Id">135947015L</v>
<v n="Value">4278190080U</v>
</o>
<o>
<v n="Id">2678395525L</v>
<v n="Value">1U</v>
</o>
<o>
<v n="Id">2340015797L</v>
<v n="Value">"HCENTER"</v>
</o>
<o>
<v n="Id">2565699834L</v>
<v n="Value">"VCENTER"</v>
</o>
<o>
<v n="Id">296037572L</v>
<v n="Value">""</v>
</o>
<o>
<v n="Id">390574330L</v>
<v n="Value">""</v>
</o>
<o>
<v n="Id">2597686782L</v>
<v n="Value">false</v>
</o>
<o>
<v n="Id">743958181L</v>
<v n="Value">"GVL_SCADA.xErrAck"</v>
</o>
<o>
<v n="Id">3438453433L</v>
<v n="Value">"134"</v>
</o>
</l>
</o>
<v n="VisualElementName">"PushSwitch"</v>
<v n="VisualElementTypeName">"VisuFbElemPushSwitch"</v>
<v n="VisualElementIsRectangle">true</v>
<v n="VisualElementIdentifier">"GenElemInst_1"</v>
<n n="VisualElementOfflinePaintCommands" />
<n n="VisualElementFrameInformation" />
<d n="VisualElementInputActions" t="Hashtable" />
<v n="VisualElementIdentification">{a9fe58e2-2923-486b-83ae-c30f51fc53bc}</v>
<v n="VisualElementOwningObjectGuid">{c7f813ad-d496-46cf-913b-a7293dcf426c}</v>
<a n="LMGuids" et="Guid" />
<d n="SubElements" t="Hashtable" />
<v n="VisualElementId">0</v>
<l n="UserManagementAccessRights" t="ArrayList" />
<v n="AnimationDuration">"0"</v>
<v n="BringToForeground">""</v>
<v n="ElementVersion" t="Byte">1</v>
<n n="TabOrder" />
</o>
</l>
<v n="BackgroundBitmapId">""</v>
<v n="BackgroundColor">16777215</v>
<o n="Background" t="BackgroundSettings">
<n n="BgGradient" />
<n n="BgNamedColor" />
<v n="BgBmpId">""</v>
<v n="BgUseBmp">false</v>
<v n="BgColor">false</v>
<v n="BgUseColor">16777215</v>
<v n="BgUseGradient">false</v>
</o>
<v n="AllElementsHaveDynamicVisibility">false</v>
</o>
<o n="GeneratedLMMDescriptions" t="GeneratedLanguageModelEntriesData">
<o n="GeneratedVisuFbDescription" t="GenericFbDescription">
<d n="FbMethods" t="CaseInsensitiveHashtable" ckt="String" cvt="Guid">
<v>AreAllElementsHidden</v>
<v>a725eb54-6600-588a-9f13-869630ee3e7e</v>
<v>ContainsPoint</v>
<v>ab15b219-793c-4da0-bd07-15f4b9559413</v>
<v>Destruct</v>
<v>3ba10444-2f83-4df5-aa26-6b77c6d0abf6</v>
<v>ElementInfo</v>
<v>4fc818ce-9e66-4929-a86a-b286e246a68d</v>
<v>FB_Exit</v>
<v>77528b4c-c8c4-4f11-a991-6b9fe9e1a3d3</v>
<v>FB_Reinit</v>
<v>1d8a778c-cc51-47a7-a51d-3d9eb8125008</v>
<v>GetCallerNamespace</v>
<v>43a88302-5fea-54cf-b14f-4c85099970ea</v>
<v>GetClientData</v>
<v>cadc6a04-3260-4217-ae88-86a7d1978d67</v>
<v>GetDialogInterface</v>
<v>061c17d4-c1fd-4666-8fbf-29cb1f99ec8e</v>
<v>GetDialogInterfaceSize</v>
<v>e770c9e8-0fe5-4727-bbf9-e82c4cdde02f</v>
<v>GetElementArray</v>
<v>3453a92d-9e41-45ae-b333-a6fd05ecc05f</v>
<v>GetElementIdArray</v>
<v>01969ee2-370e-4639-8b9e-fcc1b5861ed4</v>
<v>GetElementName</v>
<v>5549a8ef-993d-5c8c-a19e-92b606693b43</v>
<v>GetInitializeVersion</v>
<v>87415d8b-3769-4476-ba47-778b9c7d9830</v>
<v>GetInstance</v>
<v>cb71613d-a9c0-4c65-af5b-0bf0cc1cc4a2</v>
<v>GetLocalUsergroup</v>
<v>a16842f4-6e61-487d-a546-e447ff985552</v>
<v>GetName</v>
<v>d299c55d-4dc9-4b9e-b9d7-81bcb628be24</v>
<v>GetNamespace</v>
<v>a00a8d02-710d-4837-b03e-8ac7f3cea203</v>
<v>GetResult</v>
<v>dd0c5ce2-d1c3-42c0-9d55-94b7f2ebfe7f</v>
<v>GetSize</v>
<v>aa96c3a1-2662-437e-b163-bed0cd701cbc</v>
<v>GetSurroundingRect</v>
<v>8a93fd36-40b4-408c-a8fa-f2094bc31dc1</v>
<v>GetTabOrderIdArray</v>
<v>22aa349f-aa1a-5a1e-b8d1-fa8b274978fc</v>
<v>GetText</v>
<v>26faf652-11c0-4434-b399-bdd6c186874b</v>
<v>GetTextProperties</v>
<v>76184248-eb5e-40ac-82e0-1b69e783afd2</v>
<v>GetTooltip</v>
<v>a0e4cc76-8d43-462d-b328-fda892a64d2d</v>
<v>GetTranslator</v>
<v>409c1071-0ab9-46d9-9cb0-f29de52cf28e</v>
<v>GetUpdateRects</v>
<v>df55534a-e997-42c4-9622-83f8a02d6684</v>
<v>HandleInput</v>
<v>0612a83a-5c13-462f-b5b0-94227cd1d4b4</v>
<v>HasInputAccess</v>
<v>27cfb0a9-611b-41e2-a755-37c98bd69211</v>
<v>HasInputAccessIntern</v>
<v>63cc92a5-408f-57e0-87e9-b2033b2b12ef</v>
<v>HasVisibilityAccess</v>
<v>f11fc703-d33e-412b-9764-588a000bede4</v>
<v>HasVisibilityAccessIntern</v>
<v>12b8a5d1-0920-5c63-846f-df1f593d4075</v>
<v>Initialize</v>
<v>28e2b0d4-7ee2-4256-bcf3-9b3d048989d7</v>
<v>IsAntialiasingInactive</v>
<v>2a637b19-2d31-4c64-a5a2-a50b98a54f46</v>
<v>Paint</v>
<v>359a8f28-6be2-40a9-b444-a14b59912a36</v>
<v>SetClientData</v>
<v>84598ba9-869d-4d41-af71-685b89f2e17f</v>
<v>SetContainerSize</v>
<v>d54f5458-6e96-5c6d-9516-413a21c534b5</v>
<v>SetDialogInterface</v>
<v>f991bc46-9bfd-4b50-87ce-4a160df90f4e</v>
<v>SetResult</v>
<v>31cc2a76-5ca2-40be-9c81-4ce91ffc8ceb</v>
<v>SetStaticState</v>
<v>a71f3a37-1f69-40b3-8810-7fbb9613ce2e</v>
<v>SetVisuFlagsInternal</v>
<v>c86bc3f1-839c-44f7-a86e-8c31b378e47d</v>
<v>Update</v>
<v>86c23628-283c-4cd6-9a8e-4fe213a72b01</v>
</d>
<d n="FbProperties" t="CaseInsensitiveHashtable" ckt="String" cvt="Guid">
<v>__getContainer</v>
<v>acc951a7-0e09-4639-b624-f1acf9de535a</v>
<v>__getVisu</v>
<v>699a8058-a362-4d94-b2bf-8d83cc15d117</v>
</d>
<v n="FbName">"NotImportant"</v>
<v n="FbGuid">{c7f813ad-d496-46cf-913b-a7293dcf426c}</v>
</o>
<v n="GeneratedGlobalVisuVarsGuid">{c3710736-16ea-4749-a94b-9a7cef0d94d9}</v>
<v n="GeneratedGlobalTheVisuVarlistGuid">{848dba92-ad40-4262-a0e6-c897149b4673}</v>
<v n="GeneratedGlobalVisuConstants">{4542b91b-c173-423b-a2e4-55fe1dcd4438}</v>
<d n="GeneratedAllElementsEntries" t="Hashtable" />
<o n="VisuRegDesc" t="GenericFbDescription">
<d n="FbMethods" t="CaseInsensitiveHashtable" ckt="String" cvt="Guid">
<v>FB_Exit</v>
<v>d076fe0e-7df0-431f-b3a9-736edf093162</v>
<v>FB_Init</v>
<v>28fb6bb3-47cc-457f-82ec-a2ee72ded81b</v>
<v>FB_Reinit</v>
<v>ee89efe4-78d3-4256-a7b0-564fc198a1d2</v>
</d>
<d n="FbProperties" t="CaseInsensitiveHashtable" />
<v n="FbName">"NotImportant"</v>
<v n="FbGuid">{cb986f24-4b1d-4e53-8e13-066c36701683}</v>
</o>
<v n="VisuRegisterGvl">{833946e1-5ee1-443a-a77a-490182229e46}</v>
<n n="SettingsPou" />
<n n="MemManPou" />
<o n="InputsPou" t="GenericFbDescription">
<d n="FbMethods" t="CaseInsensitiveHashtable" ckt="String" cvt="Guid">
<v>abstrGetDefaultCursor</v>
<v>f71cf66f-d4e9-4025-b35a-6cbbe1d389fb</v>
<v>ExecuteDialogClosed</v>
<v>e1501d0a-e558-483c-a9a5-a357640775bf</v>
<v>ExecuteKeyDown</v>
<v>4950c656-5a4e-4a24-a04d-c68e5fa80bc4</v>
<v>ExecuteKeyUp</v>
<v>cf6a31c1-32e2-4079-9359-06f71f51ac03</v>
<v>ExecuteLooseCapture</v>
<v>81003bd8-702b-46c6-8576-55b4cb3d6508</v>
<v>ExecuteMouseClick</v>
<v>38ba0b28-4b12-4493-9592-7295d83cee3f</v>
<v>ExecuteMouseDblClick</v>
<v>d096b23e-54a3-422f-b2ad-5cab7f415d68</v>
<v>ExecuteMouseDown</v>
<v>fd2a0ed4-cfa0-4c81-ac3a-154c476085bf</v>
<v>ExecuteMouseEnter</v>
<v>3eb196da-dbad-4a33-b599-c92ac619c961</v>
<v>ExecuteMouseLeave</v>
<v>4d127b58-1b2d-4421-a7a2-590f2ab04eb8</v>
<v>ExecuteMouseMove</v>
<v>ecfc61c4-6132-4304-b084-52c22b62b091</v>
<v>ExecuteMouseUp</v>
<v>97842947-afb6-4377-a1e0-497a4fad1b3a</v>
<v>ExecuteValueChanged</v>
<v>5134f3a0-6cfd-4802-91ba-4bc2ef3ec14f</v>
<v>GetElementInfo</v>
<v>18b304d4-0e71-4837-a644-83684312ccc5</v>
<v>Initialize</v>
<v>8f927b74-8f36-4a18-b313-e9657129d589</v>
</d>
<d n="FbProperties" t="CaseInsensitiveHashtable" />
<v n="FbName">"NotImportant"</v>
<v n="FbGuid">{c5c7227b-e260-46ca-81aa-66e288af04d0}</v>
</o>
<v n="DialogDut">{f68c5176-54d2-4538-b87e-5801589c0396}</v>
</o>
<v n="LastUsedIdForIdentifier">3</v>
<o n="TextDocument" t="TextDocument">
<v n="TextBlobForSerialisation">"VAR_IN_OUT
END_VAR"</v>
<n n="LineInfoPersistence" />
</o>
<v n="GvlCreated">false</v>
<n n="LMEntry" />
<v n="ProfileCompatibilityId">4140216668L</v>
<v n="LMVerMinor">0</v>
<v n="LMVerMajor">1</v>
<o n="Hotkeys" t="HotkeyConfiguration">
<v n="IdMin">481037385728L</v>
<v n="IdMax">549755813887L</v>
<v n="Id">481037385728L</v>
<v n="IdMask">549754765312L</v>
<v n="IdStep">1048576L</v>
<l2 n="Inputs" />
</o>
<o n="VisuSizeManager" t="VisualObjectSizeManager">
<d2 n="Size" ckt="Int32" cvt="VisualObjectSize">
<v>0</v>
<o>
<v n="Width">363</v>
<v n="Height">327</v>
</o>
<v>1</v>
<o>
<v n="Width">363</v>
<v n="Height">327</v>
</o>
<v>2</v>
<o>
<v n="Width">363</v>
<v n="Height">327</v>
</o>
</d2>
<v n="Version">2</v>
</o>
<n n="FrameInterfaceDataModel" />
</o>
</Data>
<TypeList>
<Type n="ArrayList">System.Collections.ArrayList</Type>
<Type n="BackgroundSettings">{1038f12c-dd4b-4f96-87a3-a350fe8f3552}</Type>
<Type n="Boolean">System.Boolean</Type>
<Type n="Byte">System.Byte</Type>
<Type n="CaseInsensitiveHashtable">{7df88604-7ac5-4e36-91c4-55e4fdad3e68}</Type>
<Type n="ComplexInput">{1de566f6-72a7-494c-9353-9a418172c96e}</Type>
<Type n="GeneratedLanguageModelEntriesData">{703465dc-4679-4ff2-bcc3-c57d0a204da3}</Type>
<Type n="GenericFbDescription">{40d6dd8d-dfd0-493a-8e29-c9a35e1e6539}</Type>
<Type n="GenericVisualElem">{f86c2928-8614-4cca-824b-e819ac4d58c4}</Type>
<Type n="Guid">System.Guid</Type>
<Type n="Hashtable">System.Collections.Hashtable</Type>
<Type n="HotkeyConfiguration">{6b108d46-58af-4e41-a3f4-174d8f160cc4}</Type>
<Type n="Int32">System.Int32</Type>
<Type n="Int64">System.Int64</Type>
<Type n="String">System.String</Type>
<Type n="TextDocument">{f3878285-8e4f-490b-bb1b-9acbb7eb04db}</Type>
<Type n="UInt32">System.UInt32</Type>
<Type n="VisualElemCollection">{ef9d0b20-c96e-48db-b361-2ded4063150e}</Type>
<Type n="VisualElemList">{f285c9a3-7019-446b-b98c-ccec3a0af8fa}</Type>
<Type n="VisualElemMember">{c694e3a2-5c0b-4177-ab35-cb06bd5a6a02}</Type>
<Type n="VisualElemMemberCollection">{a4b83bea-3742-489c-9fe8-d96d68dba7ab}</Type>
<Type n="VisualElemMemberList">{17e26cd1-bb9b-47fe-a3d5-18fcd63b9c96}</Type>
<Type n="VisualObject">{f18bec89-9fef-401d-9953-2f11739a6808}</Type>
<Type n="VisualObjectSize">{6ad3e88f-aee2-4766-a7ea-a8790037ef51}</Type>
<Type n="VisualObjectSizeManager">{5f612b0e-b404-455f-8177-27864e9f5332}</Type>
</TypeList>
</XmlArchive>
<ObjectProperties>
<XmlArchive>
<Data>
<o xml:space="preserve" t="VisualProperty">
<v n="VisuUsageType">0</v>
<v n="SizeX">1024</v>
<v n="SizeY">768</v>
<v n="IsStartVisu">false</v>
<v n="VisuSizeMode" t="VisualVisuSizeMode">AutoDetect</v>
<v n="Internal">false</v>
<v n="DialogIsOpaque">false</v>
<v n="DialogIsOpaqueIsSet">false</v>
<v n="UseParentSizeProperties">true</v>
<n n="ToolboxCategory" />
<n n="ToolboxImageId" />
<v n="IsCustomCategory">false</v>
</o>
</Data>
<TypeList>
<Type n="Boolean">System.Boolean</Type>
<Type n="Int32">System.Int32</Type>
<Type n="VisualProperty">{477d844b-9b2a-407e-90a4-d36fd6dde2fc}</Type>
<Type n="VisualVisuSizeMode">{34718b76-91f6-43de-8c65-b77e0b1ee621}</Type>
</TypeList>
</XmlArchive>
</ObjectProperties>
</Visu>
</TcPlcObject>

View File

@@ -1,593 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<VisuManager Name="Visualization Manager" Id="{99e7ae05-3563-4b1c-a1fe-76e9619e2955}">
<XmlArchive>
<Data>
<o xml:space="preserve" t="VisualManagerObject">
<v n="UseUnicodeStrings" t="UnicodeSupport">Undefined</v>
<v n="UseOverlay" t="OverlaySupport">Undefined</v>
<o n="ViewSettings" t="VisualManagerViewSettings">
<n n="StartVisu" />
<v n="StartVisu33">"Visualization"</v>
<v n="OpenTargetvisu">false</v>
<v n="BestFit">false</v>
<v n="ClientSizeMode" t="VisualClientSizeMode">AutoDetect</v>
<v n="ClientSizeX">2000</v>
<v n="ClientSizeY">2000</v>
<v n="ExtendedSettings">false</v>
<v n="PaintBufferSize">50000</v>
<v n="MemorybufferSize">400000</v>
<v n="VisuInternal">false</v>
<v n="CurrentVisuGlobal">false</v>
<v n="FileTransferMode">true</v>
<v n="VisuStyle">"Default, 3.1.9.0 (Beckhoff Automation GmbH)"</v>
<v n="MaxNumOfClients">100</v>
<n n="Language" />
<v n="NumpadDialog">"VisuDialogs.Numpad"</v>
<v n="KeypadDialog">"VisuDialogs.Keypad"</v>
<v n="InputWithLimitsDialog">"VisuDialogs.TextinputWithLimits"</v>
<v n="UseInputWithLimits">false</v>
<v n="TouchHandlingActive">false</v>
<v n="TouchScrollbarsActive">false</v>
<v n="SemiTransparentDrawingActive">true</v>
<v n="UpdateColorvariablesAfterActivationDone">true</v>
<v n="TransferSvgAndConvertedImages">false</v>
<v n="LoginDialog">"VisuUserManagement.VUM_Login"</v>
<v n="ChangePasswordDialog">"VisuUserManagement.VUM_ChangePassword"</v>
<v n="ChangeConfigDialog">"VisuUserManagement.VUM_UserManagementWide"</v>
<v n="GuidShowChangePasswordDialogFunction">{00000000-0000-0000-0000-000000000000}</v>
<v n="GuidShowChangeConfigDialogFunction">{00000000-0000-0000-0000-000000000000}</v>
<v n="UseStandardKeyboardHandling">true</v>
<v n="PaintDeactiveElementsGrayedOut">true</v>
<o n="GlobalOpenNumpadKeypadSettings" t="VisualManagerGlobalOpenNumpadKeypadSettings">
<v n="GlobalOpenNumpadKeypadType" t="GlobalOpenNumpadKeypadType">OpenCentered</v>
<n n="PositionX" />
<n n="PositionY" />
</o>
<v n="UseBackgroundForModalDialog">true</v>
<v n="AnimationDuration">200</v>
<v n="ConvertImages">false</v>
<v n="ConversionType">""</v>
<v n="BackImage">""</v>
<v n="BackImageTop">0</v>
<v n="BackImageLeft">0</v>
<v n="BackImageBot">0</v>
<v n="BackImageRight">0</v>
<v n="BackImageWarning">true</v>
<v n="BackImageLimit">true</v>
<v n="ResponsiveVisualizationSize">true</v>
</o>
<o n="RegisterDesc" t="GenericFbDescription">
<d n="FbMethods" t="CaseInsensitiveHashtable" ckt="String" cvt="Guid">
<v>FB_Exit</v>
<v>3b10f3d4-3918-46ea-8c63-adbf43a8a336</v>
<v>FB_Init</v>
<v>9df8d017-b198-465e-8e55-f69841ae986f</v>
<v>FB_Reinit</v>
<v>359af835-44f2-492f-a13c-f66f07fb0cd2</v>
</d>
<d n="FbProperties" t="CaseInsensitiveHashtable" />
<v n="FbName">"NotImportant"</v>
<v n="FbGuid">{f71ed0ce-2435-440b-9610-dc8f551135be}</v>
</o>
<o n="TargetProperties" t="VisualizationTargetProperties">
<o n="AvailableKeys" t="DeviceBasedHotkeysProvider">
<v n="Modifiers">7</v>
<v n="DevType">4096</v>
<v n="DevId">"1002 0004"</v>
<v n="DevVersion">"1.0.0.8"</v>
<v n="BaseProvider">{cb73a13e-6ccc-4bc6-8859-f5aa98bb116b}</v>
<l n="Keys" t="ArrayList" cet="DeviceBasedHotkeyItem">
<o>
<v n="FromBase">true</v>
<v n="KeyCode">48</v>
<v n="CanonicalName">"0"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">49</v>
<v n="CanonicalName">"1"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">50</v>
<v n="CanonicalName">"2"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">51</v>
<v n="CanonicalName">"3"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">52</v>
<v n="CanonicalName">"4"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">53</v>
<v n="CanonicalName">"5"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">54</v>
<v n="CanonicalName">"6"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">55</v>
<v n="CanonicalName">"7"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">56</v>
<v n="CanonicalName">"8"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">57</v>
<v n="CanonicalName">"9"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">65</v>
<v n="CanonicalName">"A"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">107</v>
<v n="CanonicalName">"ADDITION"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">66</v>
<v n="CanonicalName">"B"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">8</v>
<v n="CanonicalName">"BACKSPACE"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">67</v>
<v n="CanonicalName">"C"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">110</v>
<v n="CanonicalName">"COMMA"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">68</v>
<v n="CanonicalName">"D"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">46</v>
<v n="CanonicalName">"DELETE"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">111</v>
<v n="CanonicalName">"DIVIDE"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">40</v>
<v n="CanonicalName">"DOWN"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">69</v>
<v n="CanonicalName">"E"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">35</v>
<v n="CanonicalName">"END"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">27</v>
<v n="CanonicalName">"ESCAPE"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">70</v>
<v n="CanonicalName">"F"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">112</v>
<v n="CanonicalName">"F1"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">121</v>
<v n="CanonicalName">"F10"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">122</v>
<v n="CanonicalName">"F11"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">123</v>
<v n="CanonicalName">"F12"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">113</v>
<v n="CanonicalName">"F2"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">114</v>
<v n="CanonicalName">"F3"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">115</v>
<v n="CanonicalName">"F4"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">116</v>
<v n="CanonicalName">"F5"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">117</v>
<v n="CanonicalName">"F6"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">118</v>
<v n="CanonicalName">"F7"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">119</v>
<v n="CanonicalName">"F8"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">120</v>
<v n="CanonicalName">"F9"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">71</v>
<v n="CanonicalName">"G"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">72</v>
<v n="CanonicalName">"H"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">36</v>
<v n="CanonicalName">"HOME"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">73</v>
<v n="CanonicalName">"I"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">45</v>
<v n="CanonicalName">"INSERT"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">74</v>
<v n="CanonicalName">"J"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">75</v>
<v n="CanonicalName">"K"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">76</v>
<v n="CanonicalName">"L"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">37</v>
<v n="CanonicalName">"LEFT"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">77</v>
<v n="CanonicalName">"M"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">106</v>
<v n="CanonicalName">"MULTIPLY"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">78</v>
<v n="CanonicalName">"N"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">96</v>
<v n="CanonicalName">"NUM0"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">97</v>
<v n="CanonicalName">"NUM1"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">98</v>
<v n="CanonicalName">"NUM2"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">99</v>
<v n="CanonicalName">"NUM3"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">100</v>
<v n="CanonicalName">"NUM4"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">101</v>
<v n="CanonicalName">"NUM5"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">102</v>
<v n="CanonicalName">"NUM6"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">103</v>
<v n="CanonicalName">"NUM7"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">104</v>
<v n="CanonicalName">"NUM8"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">105</v>
<v n="CanonicalName">"NUM9"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">79</v>
<v n="CanonicalName">"O"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">80</v>
<v n="CanonicalName">"P"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">19</v>
<v n="CanonicalName">"PAUSE"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">42</v>
<v n="CanonicalName">"PRINT"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">81</v>
<v n="CanonicalName">"Q"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">82</v>
<v n="CanonicalName">"R"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">13</v>
<v n="CanonicalName">"RETURN_KEY"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">39</v>
<v n="CanonicalName">"RIGHT"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">83</v>
<v n="CanonicalName">"S"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">32</v>
<v n="CanonicalName">"SPACE"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">109</v>
<v n="CanonicalName">"SUBTRACT"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">84</v>
<v n="CanonicalName">"T"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">9</v>
<v n="CanonicalName">"TAB"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">85</v>
<v n="CanonicalName">"U"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">38</v>
<v n="CanonicalName">"UP"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">86</v>
<v n="CanonicalName">"V"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">87</v>
<v n="CanonicalName">"W"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">88</v>
<v n="CanonicalName">"X"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">89</v>
<v n="CanonicalName">"Y"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">90</v>
<v n="CanonicalName">"Z"</v>
</o>
</l>
</o>
</o>
<o n="ConfiguredHotkeys" t="HotkeyConfiguration">
<v n="IdMin">481037385728L</v>
<v n="IdMax">549755813887L</v>
<v n="Id">481037385728L</v>
<v n="IdMask">549754765312L</v>
<v n="IdStep">1048576L</v>
<l2 n="Inputs" />
</o>
<o n="DefInpHandlerGuids" t="GenericFbDescription">
<d n="FbMethods" t="CaseInsensitiveHashtable" ckt="String" cvt="Guid">
<v>abstrGetDefaultCursor</v>
<v>cc321d7f-2f37-4b53-bce2-a9bd974a8681</v>
<v>ExecuteDialogClosed</v>
<v>3bcbc0ce-81cd-4911-8914-44188c177411</v>
<v>ExecuteKeyDown</v>
<v>fc479f4f-e138-4aaa-b6d6-697590969705</v>
<v>ExecuteKeyUp</v>
<v>156daac4-6443-4540-9838-4cc30c6e8821</v>
<v>ExecuteLooseCapture</v>
<v>0626945c-155a-452e-99e1-bc92ccdce784</v>
<v>ExecuteMouseClick</v>
<v>1b7b169c-830d-4535-a164-ba6f8d1bf165</v>
<v>ExecuteMouseDblClick</v>
<v>b1f03962-2989-414f-a5bb-812a75d56c3b</v>
<v>ExecuteMouseDown</v>
<v>028a586e-2455-441f-8a8d-00d127345483</v>
<v>ExecuteMouseEnter</v>
<v>e2b598c7-7a39-486e-9017-323dac257c30</v>
<v>ExecuteMouseLeave</v>
<v>4718b2dc-1651-40fd-9361-ef7d890a938b</v>
<v>ExecuteMouseMove</v>
<v>03e1fd3f-3a59-4354-a91c-81e5a0428954</v>
<v>ExecuteMouseUp</v>
<v>047888b5-4c63-4490-9a8c-d7184e3c26ce</v>
<v>ExecuteValueChanged</v>
<v>d7dc51a1-595c-4e58-86b1-6d8e24a5fb22</v>
<v>FB_Exit</v>
<v>e93ac5c5-9b6e-4ca7-8d80-5d9bcb7edb63</v>
<v>FB_Init</v>
<v>fbbfef41-6677-40ae-8e1d-435b00930c8d</v>
<v>FB_Reinit</v>
<v>341a7933-16e7-4fa3-a7a8-6e3d2f3c148c</v>
<v>GetElementInfo</v>
<v>0ca14ef6-3126-4c73-9f23-beb3d2c12e33</v>
<v>Init</v>
<v>ebbdcf07-6ef1-440f-91b4-94e62b85242c</v>
<v>Initialize</v>
<v>d51c9946-c924-4a41-9a42-6e79c7023378</v>
</d>
<d n="FbProperties" t="CaseInsensitiveHashtable" />
<v n="FbName">"NotImportant"</v>
<v n="FbGuid">{5b10dcd0-a6a2-4394-8d7e-fc1a897d49c8}</v>
</o>
<n n="InstantiationStorage" />
<n n="VisuUserManagement" />
<v n="UseLocalUserMgmt">true</v>
<v n="UseUserMgmtInPlc">true</v>
<n n="RemoteUserMgmtPath" />
<n n="FontsConfig" />
<n n="FontDownloadConfig" />
<n n="VisuInitializationCode" />
<n n="FontSettings" />
<v n="GuidVisuSettingsPou">{7b398c37-b8f2-44fa-92e6-cd0ac4432e05}</v>
<v n="GuidVisuSettingsPouInit">{b7af0301-7d32-4dec-821a-a12a7de2afe2}</v>
<v n="GuidVisuSettingsPouReInit">{b114b7fc-7845-4db6-b717-6ef08132d0b3}</v>
<v n="GuidVisuSettingsPouBoolMethod">{f6e93e7a-f026-47f1-9ad6-9ad85a537957}</v>
<v n="GuidVisuSettingsPouDIntMethod">{05d2daea-b06a-4275-855d-b7edf1e9a29d}</v>
<v n="GuidVisuSettingsPouStringMethod">{699620e8-1df5-45c4-8a2d-7f8ef1544fd5}</v>
<v n="GuidVisuSettingsPouReservedMethod">{db37476f-f0fb-4fa9-8a33-33f55c6ee3e6}</v>
<v n="GuidMemManInitPou">{37f8aba3-8d02-4b60-b71d-909d434464e0}</v>
<v n="GuidMemManInitPouInit">{db09399b-72ff-43d1-8c3a-e078e68c9297}</v>
<v n="GuidMemManInitPouReInit">{6864ac69-a0df-43f7-bcd5-4b9c7dc64b57}</v>
<v n="GuidStartVisuInitPou">{406a9ed5-2529-4fd5-9ad9-3ae887dda070}</v>
<v n="GuidStartVisuInitPouInit">{a4b8d7f7-933b-40f3-9d72-9fe1ba44d7ed}</v>
<v n="GuidStartVisuInitPouReInit">{129b0553-f73f-4a63-a791-589dde777670}</v>
<v n="GuidVisuGVL0">{9003aa7f-2db3-4a80-9478-ff56da7ce674}</v>
<v n="GuidVisuGVL1">{c5aeb04a-4e37-466e-adb7-6e1defc764ae}</v>
<v n="GuidVisuGVL2">{94a93fd8-eed7-425b-b4e7-d49ab50e79cc}</v>
<v n="GuidVisuGVL_3">{bdccb31c-de80-4c34-8469-8d8f1b48172b}</v>
<v n="GuidReservedPou">{b8e3eef6-1f94-489e-bb87-7da6cde40255}</v>
<v n="GuidVisuGVL3">{ac528ee4-49b0-4bb2-8b8d-0881d5ce92e3}</v>
<v n="GuidReservedPouInit">{cb123efe-50d6-4c66-b719-5a9abc7b78be}</v>
<v n="GuidVisuGVL4">{925e8f6d-a925-4ccb-9007-f4aa925f657b}</v>
<v n="GuidVisuGVL5">{0e5d2904-0f49-4ca0-873b-e30003524293}</v>
<v n="GuidLicenseGVL">{469f8113-0911-47c3-8ac7-302e738f100d}</v>
<v n="GuidGlobalClientManagerGVL">{c8fed093-737d-41c7-b196-fe237ae7ae11}</v>
<v n="GuidVisuUserMgmtInitPou">{be83b5db-04d7-49b4-95f4-135b529cdb8c}</v>
<v n="GuidVisuUserMgmtInitPouInit">{63abefd0-8bc2-4603-9bff-e90b8c47d6fe}</v>
<v n="GuidBeforeCompileCommonGVL">{c256e1fd-f3b9-4401-8b5a-a0bb6db81a94}</v>
<v n="GuidVisuGVL6">{14dbfc96-fd74-4e8a-afb4-01575aa81bde}</v>
<v n="GuidReservedPouMethod1">{e291df9c-0ae4-40f9-aaf6-c7479d74a4b2}</v>
<v n="GuidReservedPouReInit">{d9548cb4-7280-404a-a145-5a8f38a9e691}</v>
<v n="GuidReservedPouMethod0">{d5955983-4cbf-4785-9324-6a3ae3b62362}</v>
<v n="GuidReservedPouMethod2">{b155374e-21a8-4e99-83be-933da117fdc3}</v>
</o>
</Data>
<TypeList>
<Type n="ArrayList">System.Collections.ArrayList</Type>
<Type n="Boolean">System.Boolean</Type>
<Type n="CaseInsensitiveHashtable">{7df88604-7ac5-4e36-91c4-55e4fdad3e68}</Type>
<Type n="DeviceBasedHotkeyItem">{11a86981-4b02-4f98-b432-96e385cb41b7}</Type>
<Type n="DeviceBasedHotkeysProvider">{c91fc5aa-1e38-43b2-9a05-c52cc5d7f5b6}</Type>
<Type n="GenericFbDescription">{40d6dd8d-dfd0-493a-8e29-c9a35e1e6539}</Type>
<Type n="GlobalOpenNumpadKeypadType">{550f8ee0-c42e-42f0-b253-4fadf0c12bdf}</Type>
<Type n="Guid">System.Guid</Type>
<Type n="HotkeyConfiguration">{6b108d46-58af-4e41-a3f4-174d8f160cc4}</Type>
<Type n="Int32">System.Int32</Type>
<Type n="Int64">System.Int64</Type>
<Type n="OverlaySupport">{05125339-dc8c-4673-b403-e21bec548370}</Type>
<Type n="String">System.String</Type>
<Type n="UnicodeSupport">{19611221-ebd3-4607-86d2-9822fbe84c30}</Type>
<Type n="VisualClientSizeMode">{c37fe731-4f69-4d98-82fe-4f9aefbe200d}</Type>
<Type n="VisualizationTargetProperties">{997fedbb-1888-4256-b61c-2933d8056bfd}</Type>
<Type n="VisualManagerGlobalOpenNumpadKeypadSettings">{422ed780-41e9-4352-8132-b322b16154c1}</Type>
<Type n="VisualManagerObject">{4d3fdb8f-ab50-4c35-9d3a-d4bb9bb9a628}</Type>
<Type n="VisualManagerViewSettings">{ec9b2ec6-92a2-4856-be72-7866fb274c64}</Type>
</TypeList>
</XmlArchive>
</VisuManager>
</TcPlcObject>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<GlobalVariables Crc="1014630079" Id="ea7909c7-35b4-4cd7-83db-e07b116fca76" FileFormatVersion="1.0">
<GlobalVariables Crc="2932312680" Id="ea7909c7-35b4-4cd7-83db-e07b116fca76" FileFormatVersion="1.0">
<Variable Id="4cc646d4-cb75-49c7-affe-9611956ba512">
<Name>Com_Err</Name>
<SourceUsages>
@@ -45,21 +45,6 @@
</AliasDeviceIoUsage>
</TargetUsages>
</Variable>
<Variable Id="51cff873-4be8-4461-826b-418c7d5907f1">
<Name>RunStop</Name>
<SourceUsages>
<AliasDeviceIoUsage Id="1d3adfbf-3b45-404e-81aa-79d0123e6c7b">
<SdsId>9</SdsId>
<ChannelId>1</ChannelId>
<FunctionId>1131179973</FunctionId>
</AliasDeviceIoUsage>
</SourceUsages>
<TargetUsages>
<GroupPortUsage Id="45552e43-5e15-423e-bd90-16ab4175610f">
<ModelElementId>08fab2e8-8d41-4915-ba0f-0c17dc36ad64</ModelElementId>
</GroupPortUsage>
</TargetUsages>
</Variable>
<Variable Id="f6bf5921-0b9a-4305-9be1-483ad63e057f">
<Name>ComStartUp</Name>
<SourceUsages>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<TargetSystemConfig Crc="3657269247" Version="1.5">
<TargetSystemConfig Crc="3821398253" Version="1.5">
<TargetSystemType>HSafetyPLC</TargetSystemType>
<TargetSystemSubType>EL1918</TargetSystemSubType>
<IsExternalDevice>false</IsExternalDevice>
@@ -7,7 +7,7 @@
<TargetSystemObjectName>PC_K01_KL02 (EL1918)</TargetSystemObjectName>
<SoftwareVersion>02 (V01.08) </SoftwareVersion>
<SerialNumber>3885647</SerialNumber>
<ProjectCRC>12630</ProjectCRC>
<ProjectCRC>32969</ProjectCRC>
<MapProjectCRC>false</MapProjectCRC>
<MapSerialNumber>false</MapSerialNumber>
<VersionNumber>1</VersionNumber>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<safetyApplication Crc="3250625055" xmlns:dm0="http://schemas.microsoft.com/VisualStudio/2008/DslTools/Core" dslVersion="1.5.0.0" Id="d197abde-1e46-4da1-af49-0c5e8acb0bf2" name="" mapState="false" mapDiag="false" groupOrderId="0" passificationAllowed="false" temporaryDeactivationAllowed="false" permamentDeactivationAllowed="false" xmlid="0" analogFBOutputReplacementValues="Zero" verifyAnalogFBInputsIfStart="false" userFbId="00000000-0000-0000-0000-000000000000" xmlns="http://schemas.microsoft.com/dsltools/SafetyApplicationLanguage">
<safetyApplication Crc="1147292257" xmlns:dm0="http://schemas.microsoft.com/VisualStudio/2008/DslTools/Core" dslVersion="1.5.0.0" Id="d197abde-1e46-4da1-af49-0c5e8acb0bf2" name="" mapState="false" mapDiag="false" groupOrderId="0" passificationAllowed="false" temporaryDeactivationAllowed="false" permamentDeactivationAllowed="false" xmlid="0" analogFBOutputReplacementValues="Zero" verifyAnalogFBInputsIfStart="false" userFbId="00000000-0000-0000-0000-000000000000" xmlns="http://schemas.microsoft.com/dsltools/SafetyApplicationLanguage">
<networks>
<safetyApplicationHasNetworks Id="980a2a23-c4cd-4476-8c84-c716c4cfd6d9">
<Network Id="cf310e0f-e61c-4ed8-80c0-d6a8048dade1" name="Network8" networkName="Network8" intId="72" networkOrderId="0">
@@ -1409,13 +1409,7 @@
<twinSAFEGroupAliasPort Id="42bc74d9-b76c-4dae-9237-ba96960c8144" name="ErrAck" sdsId="0" channelId="0" portName="ErrAck" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="2c1cb575-ba65-4f0b-a20f-8685362b0eb8">
<twinSAFEGroupAliasPort Id="08fab2e8-8d41-4915-ba0f-0c17dc36ad64" name="RunStop" sdsId="0" channelId="0" portName="RunStop" functionId="0">
<groupPortGlobalVariableReferences>
<twinSAFEGroupAliasPortHasGroupPortGlobalVariableReferences Id="3bedaf7f-6ed2-4c00-b2a0-8476c3bf14c7">
<groupPortGlobalVariableReference Id="5b97f5d6-fc75-4113-9fdd-1520d015ba69" variableId="51cff873-4be8-4461-826b-418c7d5907f1" lastKnownPath="GVL1.RunStop" />
</twinSAFEGroupAliasPortHasGroupPortGlobalVariableReferences>
</groupPortGlobalVariableReferences>
</twinSAFEGroupAliasPort>
<twinSAFEGroupAliasPort Id="08fab2e8-8d41-4915-ba0f-0c17dc36ad64" name="RunStop" sdsId="0" channelId="0" portName="RunStop" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="4a8ce6af-8cd3-4ff1-a9f4-1f5b7f79ad2f">
<twinSAFEGroupAliasPort Id="198acedc-3e31-43e2-8caa-29478a13a987" name="ModuleFault" sdsId="0" channelId="0" portName="ModuleFault" functionId="0" />

View File

@@ -544,7 +544,7 @@
<ImageData Id="1020">424de6000000000000007600000028000000100000000e000000010004000000000070000000000000000000000010000000000000001c120800244aa500203262002462ee001c273f00245ad500243a7c001c222b001c1a1e002472fc00244fb7001c2a4d00243a7100246afc0024428d001c1a1300d5bbbbbbedddddddddb8777fcdd9dd9dd580ffffcddddddd9e7780f47b5dd9ddd3d35cb700e9ddd9ddd9d9de88a9ddddd9dddd9abb3dddddddddd99e04d9dd9dddddddd20adddddd9dd9d958b9ddd9ddddddd18cddddddd9dd5554e99d999d1dd9b07b2ee111e1add5bb777774bb6add</ImageData>
<ImageData Id="1021">424de6000000000000007600000028000000100000000e000000010004000000000070000000000000000000000000000000000000000000000000008000008000000080800080000000800080008080000080808000c0c0c0000000ff0000ff000000ffff00ff000000ff00ff00ffff0000ffffff00bb1111113bbbbbbbbb1000001bbbbbbbbb0000001bbbbbbbb300000001bbbbbbbbbbb110003bbbbbbbbbbbb3003bbbbbbbbbbbb311bbbbbbbbbbbbb300bbbbbbbbbbbbb103bbbbbbbbbbbbb01bbbbbbbbbbbb301bbbbbbbbbbbbb03bbbbbbb3bbb1001133333333bb3110000001113bb</ImageData>
</ImageDatas>
<Device Id="1" Disabled="true" DevType="111" DevFlags="#x0003" AmsPort="28673" AmsNetId="0.0.0.0.2.1" RemoteName="Device 1 (EtherCAT)" InfoImageId="2">
<Device Id="1" DevType="111" DevFlags="#x0003" AmsPort="28673" AmsNetId="0.0.0.0.2.1" RemoteName="Device 1 (EtherCAT)" InfoImageId="2">
<Name>__FILENAME__</Name>
<AddressInfo>
<Pnp>
@@ -556,6 +556,9 @@
<Image Id="1" AddrType="9" ImageType="3">
<Name>Image</Name>
</Image>
<Image Id="5" AddrType="10" ImageType="3">
<Name>Prozessabbild-2</Name>
</Image>
<Box Id="24" BoxType="9099">
<Name>Etcher1ChuckPresent (EP1018-0001)</Name>
<ImageId>1000</ImageId>
@@ -35037,19 +35040,19 @@ Bit 8 - 15 : reserved]]></Comment>
<Var>
<Name>HEAD</Name>
<Type GUID="{D46F6451-58CF-4853-A5DB-DA36D1D59A28}" Namespace="IO">ECAT_HEAD</Type>
<BitOffs>12416</BitOffs>
<BitOffs>1184</BitOffs>
</Var>
<Var>
<Name>DATA</Name>
<Type GUID="{18071995-0000-0000-0000-001300000200}">ARRAY [0..511] OF BYTE</Type>
<BitOffs>12496</BitOffs>
<BitOffs>1264</BitOffs>
</Var>
<Var>
<Name>CNT</Name>
<Comment><![CDATA[Working counter
After receiving]]></Comment>
<Type>UINT</Type>
<BitOffs>16592</BitOffs>
<BitOffs>5360</BitOffs>
</Var>
</Vars>
<Vars VarGrpType="2">
@@ -35057,19 +35060,19 @@ After receiving]]></Comment>
<Var>
<Name>HEAD</Name>
<Type GUID="{D46F6451-58CF-4853-A5DB-DA36D1D59A28}" Namespace="IO">ECAT_HEAD</Type>
<BitOffs>12416</BitOffs>
<BitOffs>1184</BitOffs>
</Var>
<Var>
<Name>DATA</Name>
<Type GUID="{18071995-0000-0000-0000-001300000200}">ARRAY [0..511] OF BYTE</Type>
<BitOffs>12496</BitOffs>
<BitOffs>1264</BitOffs>
</Var>
<Var>
<Name>CNT</Name>
<Comment><![CDATA[Working counter
Before sending]]></Comment>
<Type>UINT</Type>
<BitOffs>16592</BitOffs>
<BitOffs>5360</BitOffs>
</Var>
</Vars>
</EtherCATCmd>

View File

@@ -1440,7 +1440,7 @@ External Setpoint Generation:
<SvbTask Priority="8" CycleTime="100000" AmsPort="511">
<Name>NC-Task 1 SVB</Name>
</SvbTask>
<Axis Id="1" CreateSymbols="true" AxisType="1">
<Axis Id="1" CreateSymbols="true" AxisType="1" SimulationMode="true">
<Name>Etcher1Chuck</Name>
<AxisPara>
<General UnitName="°" UnitFlags="#x00000004"/>
@@ -1585,7 +1585,7 @@ External Setpoint Generation:
</Var>
</Vars>
</Axis>
<Axis Id="3" CreateSymbols="true" AxisType="1" GroupId="2">
<Axis Id="3" CreateSymbols="true" AxisType="1" SimulationMode="true" GroupId="2">
<Name>Etcher1BSR</Name>
<AxisPara>
<General UnitName="°"/>
@@ -1729,7 +1729,7 @@ External Setpoint Generation:
</Var>
</Vars>
</Axis>
<Axis Id="2" CreateSymbols="true" AxisType="1" GroupId="3">
<Axis Id="2" CreateSymbols="true" AxisType="1" SimulationMode="true" GroupId="3">
<Name>Etcher2Chuck</Name>
<AxisPara>
<General UnitName="°" UnitFlags="#x00000004"/>
@@ -1874,7 +1874,7 @@ External Setpoint Generation:
</Var>
</Vars>
</Axis>
<Axis Id="4" CreateSymbols="true" AxisType="1">
<Axis Id="4" CreateSymbols="true" AxisType="1" SimulationMode="true">
<Name>Etcher2BSR</Name>
<AxisPara>
<General UnitName="°"/>
@@ -2018,7 +2018,7 @@ External Setpoint Generation:
</Var>
</Vars>
</Axis>
<Axis Id="5" CreateSymbols="true" AxisType="1">
<Axis Id="5" CreateSymbols="true" AxisType="1" SimulationMode="true">
<Name>AlignerXAxis</Name>
<AxisPara>
<Dynamic Acceleration="15" Deceleration="15" Jerk="45"/>
@@ -2177,7 +2177,7 @@ External Setpoint Generation:
</Var>
</Vars>
</Axis>
<Axis Id="6" CreateSymbols="true" AxisType="1">
<Axis Id="6" CreateSymbols="true" AxisType="1" SimulationMode="true">
<Name>AlignerYAxis</Name>
<AxisPara>
<Dynamic Acceleration="15" Deceleration="15" Jerk="45"/>

View File

@@ -18,4 +18,55 @@
<TaskPouOid Prio="20" OTCID="#x08502001"/>
</TaskPouOids>
</Instance>
<Mappings>
<OwnerA>
<OwnerB Name="TIID^Device 1 (EtherCAT)^PC_K01_KL01 (EK1100)^PC_K01_KL02 (EL1918)">
<Link VarA="PlcTask Inputs^PRG_Safety._xComStartup" VarB="StandardInputs^Standard Out Var 12" Size="1"/>
<Link VarA="PlcTask Outputs^PRG_Safety._xErrorAck" VarB="StandardOutputs^Standard In Var 212" Size="1"/>
<Link VarA="PlcTask Outputs^PRG_Safety._xLockDoor" VarB="StandardOutputs^Standard In Var 192" Size="1"/>
<Link VarA="PlcTask Outputs^PRG_Safety._xRun" VarB="StandardOutputs^Standard In Var 9" Size="1"/>
</OwnerB>
<OwnerB Name="TIID^Device 1 (EtherCAT)^RobotMain">
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot._abMirrorToolsAndPositions" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 4 (Greifer/Drehteller/Positionen)"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot._asiMotorTemps1To4" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 8 (Motor Temp)"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot._asiMotorTemps5To8" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 9 (Motor Temp)"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot._awJobStatesFromRobot" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 2 (JobAktiv/JobEnde)"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot._diMirrorOffsetPosX" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 5 (Offset X)"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot._diMirrorOffsetPosY" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 6 (Offset Y)"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot._diMirrorThickness" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 7 (Thickness)"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot._dwErrorBits" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 1 (Errorbits)"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot._dwJobForPLC" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 3 (JobForPLC)"/>
<Link VarA="PlcTask Inputs^PRG_Main._fbRobot._uState" VarB="Module 3 (Default IO)^Std. In (64 Bytes)^Input DWORD 0 (Status)"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbRobot._abToolsAndPositions" VarB="Module 3 (Default IO)^Std. Out (64 Bytes)^Output DWORD 2 (Greifer/Drehteller/Positionen)"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbRobot._diOffsetPosX" VarB="Module 3 (Default IO)^Std. Out (64 Bytes)^Output DWORD 3 (Offset X)"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbRobot._diOffsetPosY" VarB="Module 3 (Default IO)^Std. Out (64 Bytes)^Output DWORD 4 (Offset Y)"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbRobot._diThickness" VarB="Module 3 (Default IO)^Std. Out (64 Bytes)^ Output DWORD 5 (Thickness)"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbRobot._uCtrl" VarB="Module 3 (Default IO)^Std. Out (64 Bytes)^Output DWORD 0 (CMDs)"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbRobot._uJobs" VarB="Module 3 (Default IO)^Std. Out (64 Bytes)^Output DWORD 1 (JobNr/PLCJobNr)"/>
</OwnerB>
<OwnerB Name="TIID^Device 1 (EtherCAT)^Box 44 (EX260-SEC1)">
<Link VarA="PlcTask Outputs^PRG_Main._fbHVTester._xCloseDoor1" VarB="Byte 0^Output[3]" Size="1"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbHVTester._xCloseDoor2" VarB="Byte 0^Output[1]" Size="1"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbHVTester._xOpenDoor1" VarB="Byte 0^Output[2]" Size="1"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbHVTester._xOpenDoor2" VarB="Byte 0^Output[0]" Size="1"/>
</OwnerB>
<OwnerB Name="TIID^Device 1 (EtherCAT)^HV_K01_KL01^HV_K01_KL07 (EL2008)">
<Link VarA="PlcTask Outputs^PRG_Main._fbHVTester._xCloseChamber1" VarB="Channel 6^HV Hot_CloseChamber" Size="1"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbHVTester._xCloseChamber2" VarB="Channel 3^HV Cold_CloseChamber" Size="1"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbHVTester._xOpenChamber1" VarB="Channel 5^HV Hot_OpenChamber" Size="1"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbHVTester._xOpenChamber2" VarB="Channel 2^HV Cold_OpenChamber" Size="1"/>
</OwnerB>
<OwnerB Name="TIID^Device 1 (EtherCAT)^K01_KL01 (EK1100)^K01_KL02 (EL1018)">
<Link VarA="PlcTask Inputs^PRG_Safety._xRequestOpenDoor" VarB="Channel 4^MainDoorUnlock" Size="1"/>
</OwnerB>
<OwnerB Name="TIID^Device 1 (EtherCAT)^K20_QM01 (EX260-SEC1)">
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher2._xCloseDoor" VarB="Byte 0^Output[1]" Size="1"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher2._xOpenDoor" VarB="Byte 0^Output[0]" Size="1"/>
</OwnerB>
<OwnerB Name="TIID^Device 1 (EtherCAT)^K21_QM01 (EX260-SEC1)">
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._xCloseDoor" VarB="Byte 0^Output[1]" Size="1"/>
<Link VarA="PlcTask Outputs^PRG_Main._fbEtcher1._xOpenDoor" VarB="Byte 0^Output[0]" Size="1"/>
</OwnerB>
</OwnerA>
</Mappings>
</TcSmItem>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0"?>
<TcSmItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2012/07/TcSmProject" TcSmVersion="1.0" TcVersion="3.1.4026.19" ClassName="CSafetyPlcProjDef">
<Project GUID="{16E7B360-DCD5-431E-9380-EF0E96A38071}" Name="TwinSAFE" PrjFilePath="..\..\TwinSAFE\TwinSAFE.splcproj" TmcFilePath="..\..\TwinSAFE\TwinSAFE.tmc" GeneralArchiveSettings="#x000f" TargetArchiveSettings="#x0007" FileArchiveSettings="#x000e">
<Project Disabled="true" GUID="{16E7B360-DCD5-431E-9380-EF0E96A38071}" Name="TwinSAFE" PrjFilePath="..\..\TwinSAFE\TwinSAFE.splcproj" TmcFilePath="..\..\TwinSAFE\TwinSAFE.tmc" GeneralArchiveSettings="#x000f" TargetArchiveSettings="#x0007" FileArchiveSettings="#x000e">
<Instance File="TwinSAFE Instance.xti"/>
</Project>
</TcSmItem>

10
doc/.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,10 @@
{
"json.schemas": [
{
"fileMatch": [
"./recipe_data.json"
],
"url": "./recipe_data_schema.json"
}
]
}

285
doc/StateMachines.drawio Normal file
View File

@@ -0,0 +1,285 @@
<mxfile host="Electron" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/29.3.0 Chrome/140.0.7339.249 Electron/38.7.2 Safari/537.36" version="29.3.0" pages="2">
<diagram name="Complete_SM" id="ftpb_kXLDtCrtDVQ6dMH">
<mxGraphModel dx="1301" dy="896" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="MSPdzodM52y7OSiT-G8--59" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" value="" vertex="1">
<mxGeometry height="400" width="800" x="40" y="80" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--41" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" target="MSPdzodM52y7OSiT-G8--40">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--4" parent="1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Stopped" vertex="1">
<mxGeometry height="40" width="80" x="80" y="520" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--56" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" target="MSPdzodM52y7OSiT-G8--55">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--5" parent="1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Stopping" vertex="1">
<mxGeometry height="40" width="80" x="240" y="520" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--16" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" target="MSPdzodM52y7OSiT-G8--4">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--15" parent="1" style="ellipse;fillColor=strokeColor;html=1;" value="" vertex="1">
<mxGeometry height="30" width="30" x="105" y="670" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--58" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--50" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" target="MSPdzodM52y7OSiT-G8--55">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="440" y="580" />
<mxPoint x="200" y="580" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--50" parent="1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Clearing" vertex="1">
<mxGeometry height="40" width="80" x="400" y="520" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--53" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--51" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" target="MSPdzodM52y7OSiT-G8--52">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--51" parent="1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Aborting" vertex="1">
<mxGeometry height="40" width="80" x="680" y="520" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--54" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--52" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" target="MSPdzodM52y7OSiT-G8--50">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--52" parent="1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Aborted" vertex="1">
<mxGeometry height="40" width="80" x="560" y="520" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--57" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--55" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" target="MSPdzodM52y7OSiT-G8--4">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--55" parent="1" style="ellipse;fillColor=strokeColor;html=1;" value="" vertex="1">
<mxGeometry height="20" width="20" x="190" y="530" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--60" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--59" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.3;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;" target="MSPdzodM52y7OSiT-G8--5">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--49" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--48" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.981;exitY=0.298;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitPerimeter=0;" target="MSPdzodM52y7OSiT-G8--36">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--48" parent="1" style="rounded=1;whiteSpace=wrap;html=1;" value="" vertex="1">
<mxGeometry height="200" width="160" x="340" y="200" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--47" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--44" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1.008;exitY=0.098;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitPerimeter=0;" target="MSPdzodM52y7OSiT-G8--32">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--44" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" value="" vertex="1">
<mxGeometry height="160" width="120" x="360" y="220" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--11" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" target="MSPdzodM52y7OSiT-G8--9">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--2" parent="1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Idle" vertex="1">
<mxGeometry height="40" width="80" x="80" y="240" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--8" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" target="MSPdzodM52y7OSiT-G8--2">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--7" parent="1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Resetting" vertex="1">
<mxGeometry height="40" width="80" x="80" y="320" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--23" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" target="MSPdzodM52y7OSiT-G8--22">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--9" parent="1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Starting" vertex="1">
<mxGeometry height="40" width="80" x="200" y="240" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--21" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" target="MSPdzodM52y7OSiT-G8--18">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--3" parent="1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Execute" vertex="1">
<mxGeometry height="40" width="80" x="380" y="240" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--25" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" target="MSPdzodM52y7OSiT-G8--24">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--14" parent="1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Suspended" vertex="1">
<mxGeometry height="40" width="80" x="380" y="320" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--19" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" target="MSPdzodM52y7OSiT-G8--14">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--18" parent="1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Suspending" vertex="1">
<mxGeometry height="40" width="80" x="520" y="320" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--28" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--22" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" target="MSPdzodM52y7OSiT-G8--3">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--22" parent="1" style="ellipse;fillColor=strokeColor;html=1;" value="" vertex="1">
<mxGeometry height="20" width="20" x="310" y="250" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--27" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" target="MSPdzodM52y7OSiT-G8--22">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--24" parent="1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Unsuspending" vertex="1">
<mxGeometry height="40" width="80" x="240" y="320" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--29" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--30" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" target="MSPdzodM52y7OSiT-G8--33">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--30" parent="1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Held" vertex="1">
<mxGeometry height="40" width="80" x="380" y="120" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--31" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--32" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" target="MSPdzodM52y7OSiT-G8--30">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--32" parent="1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Holding" vertex="1">
<mxGeometry height="40" width="80" x="520" y="120" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--34" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--33" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" target="MSPdzodM52y7OSiT-G8--22">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--33" parent="1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Unholding" vertex="1">
<mxGeometry height="40" width="80" x="240" y="120" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--39" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--36" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" target="MSPdzodM52y7OSiT-G8--38">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--36" parent="1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Completing" vertex="1">
<mxGeometry height="40" width="80" x="600" y="240" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--43" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--38" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" target="MSPdzodM52y7OSiT-G8--40">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="760" y="440" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--38" parent="1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Completed" vertex="1">
<mxGeometry height="40" width="80" x="720" y="240" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--42" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--40" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" target="MSPdzodM52y7OSiT-G8--7">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="MSPdzodM52y7OSiT-G8--40" parent="1" style="ellipse;fillColor=strokeColor;html=1;" value="" vertex="1">
<mxGeometry height="20" width="20" x="110" y="430" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram name="Kuka_Robot" id="H1vC8POeMy0M4dT3gOif">
<mxGraphModel dx="1106" dy="762" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-0" />
<mxCell id="Z4hdVuXi7llSv1JNwN2g-1" parent="Z4hdVuXi7llSv1JNwN2g-0" />
<mxCell id="kZ-qJAZda7UxfiRZ7m-w-1" edge="1" parent="Z4hdVuXi7llSv1JNwN2g-1" source="Z4hdVuXi7llSv1JNwN2g-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" target="Z4hdVuXi7llSv1JNwN2g-13">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-17" parent="Z4hdVuXi7llSv1JNwN2g-1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" value="" vertex="1">
<mxGeometry height="400" width="800" x="40" y="80" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-2" edge="1" parent="Z4hdVuXi7llSv1JNwN2g-1" source="Z4hdVuXi7llSv1JNwN2g-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" target="Z4hdVuXi7llSv1JNwN2g-49">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-3" parent="Z4hdVuXi7llSv1JNwN2g-1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Stopped" vertex="1">
<mxGeometry height="40" width="80" x="80" y="520" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-6" edge="1" parent="Z4hdVuXi7llSv1JNwN2g-1" source="Z4hdVuXi7llSv1JNwN2g-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" target="Z4hdVuXi7llSv1JNwN2g-3">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-7" parent="Z4hdVuXi7llSv1JNwN2g-1" style="ellipse;fillColor=strokeColor;html=1;" value="" vertex="1">
<mxGeometry height="30" width="30" x="105" y="670" as="geometry" />
</mxCell>
<mxCell id="kZ-qJAZda7UxfiRZ7m-w-0" edge="1" parent="Z4hdVuXi7llSv1JNwN2g-1" source="Z4hdVuXi7llSv1JNwN2g-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;">
<mxGeometry relative="1" as="geometry">
<mxPoint x="280" y="540" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-13" parent="Z4hdVuXi7llSv1JNwN2g-1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Aborted" vertex="1">
<mxGeometry height="40" width="80" x="560" y="520" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-16" edge="1" parent="Z4hdVuXi7llSv1JNwN2g-1" source="Z4hdVuXi7llSv1JNwN2g-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.3;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" target="Z4hdVuXi7llSv1JNwN2g-3">
<mxGeometry relative="1" as="geometry">
<mxPoint x="280" y="520" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-19" parent="Z4hdVuXi7llSv1JNwN2g-1" style="rounded=1;whiteSpace=wrap;html=1;" value="" vertex="1">
<mxGeometry height="200" width="160" x="340" y="200" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-20" edge="1" parent="Z4hdVuXi7llSv1JNwN2g-1" source="Z4hdVuXi7llSv1JNwN2g-21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1.008;exitY=0.098;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitPerimeter=0;" target="Z4hdVuXi7llSv1JNwN2g-41">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-21" parent="Z4hdVuXi7llSv1JNwN2g-1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" value="" vertex="1">
<mxGeometry height="160" width="120" x="360" y="220" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-22" edge="1" parent="Z4hdVuXi7llSv1JNwN2g-1" source="Z4hdVuXi7llSv1JNwN2g-23" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" target="Z4hdVuXi7llSv1JNwN2g-27">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-23" parent="Z4hdVuXi7llSv1JNwN2g-1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Idle" vertex="1">
<mxGeometry height="40" width="80" x="80" y="240" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-24" edge="1" parent="Z4hdVuXi7llSv1JNwN2g-1" source="Z4hdVuXi7llSv1JNwN2g-25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" target="Z4hdVuXi7llSv1JNwN2g-23">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-25" parent="Z4hdVuXi7llSv1JNwN2g-1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Resetting" vertex="1">
<mxGeometry height="40" width="80" x="80" y="320" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-26" edge="1" parent="Z4hdVuXi7llSv1JNwN2g-1" source="Z4hdVuXi7llSv1JNwN2g-27" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" target="Z4hdVuXi7llSv1JNwN2g-35">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-27" parent="Z4hdVuXi7llSv1JNwN2g-1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Starting" vertex="1">
<mxGeometry height="40" width="80" x="200" y="240" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-28" edge="1" parent="Z4hdVuXi7llSv1JNwN2g-1" source="Z4hdVuXi7llSv1JNwN2g-29" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" target="Z4hdVuXi7llSv1JNwN2g-33">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-29" parent="Z4hdVuXi7llSv1JNwN2g-1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Execute" vertex="1">
<mxGeometry height="40" width="80" x="380" y="240" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-30" edge="1" parent="Z4hdVuXi7llSv1JNwN2g-1" source="Z4hdVuXi7llSv1JNwN2g-31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" target="Z4hdVuXi7llSv1JNwN2g-37">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-31" parent="Z4hdVuXi7llSv1JNwN2g-1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Suspended" vertex="1">
<mxGeometry height="40" width="80" x="380" y="320" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-32" edge="1" parent="Z4hdVuXi7llSv1JNwN2g-1" source="Z4hdVuXi7llSv1JNwN2g-33" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" target="Z4hdVuXi7llSv1JNwN2g-31">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-33" parent="Z4hdVuXi7llSv1JNwN2g-1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Suspending" vertex="1">
<mxGeometry height="40" width="80" x="520" y="320" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-34" edge="1" parent="Z4hdVuXi7llSv1JNwN2g-1" source="Z4hdVuXi7llSv1JNwN2g-35" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" target="Z4hdVuXi7llSv1JNwN2g-29">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-35" parent="Z4hdVuXi7llSv1JNwN2g-1" style="ellipse;fillColor=strokeColor;html=1;" value="" vertex="1">
<mxGeometry height="20" width="20" x="310" y="250" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-36" edge="1" parent="Z4hdVuXi7llSv1JNwN2g-1" source="Z4hdVuXi7llSv1JNwN2g-37" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" target="Z4hdVuXi7llSv1JNwN2g-35">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-37" parent="Z4hdVuXi7llSv1JNwN2g-1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Unsuspending" vertex="1">
<mxGeometry height="40" width="80" x="240" y="320" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-38" edge="1" parent="Z4hdVuXi7llSv1JNwN2g-1" source="Z4hdVuXi7llSv1JNwN2g-39" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" target="Z4hdVuXi7llSv1JNwN2g-43">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-39" parent="Z4hdVuXi7llSv1JNwN2g-1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Held" vertex="1">
<mxGeometry height="40" width="80" x="380" y="120" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-40" edge="1" parent="Z4hdVuXi7llSv1JNwN2g-1" source="Z4hdVuXi7llSv1JNwN2g-41" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" target="Z4hdVuXi7llSv1JNwN2g-39">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-41" parent="Z4hdVuXi7llSv1JNwN2g-1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Holding" vertex="1">
<mxGeometry height="40" width="80" x="520" y="120" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-42" edge="1" parent="Z4hdVuXi7llSv1JNwN2g-1" source="Z4hdVuXi7llSv1JNwN2g-43" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" target="Z4hdVuXi7llSv1JNwN2g-35">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-43" parent="Z4hdVuXi7llSv1JNwN2g-1" style="html=1;align=center;verticalAlign=top;rounded=1;absoluteArcSize=1;arcSize=10;dashed=0;whiteSpace=wrap;" value="Unholding" vertex="1">
<mxGeometry height="40" width="80" x="240" y="120" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-48" edge="1" parent="Z4hdVuXi7llSv1JNwN2g-1" source="Z4hdVuXi7llSv1JNwN2g-49" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" target="Z4hdVuXi7llSv1JNwN2g-25">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Z4hdVuXi7llSv1JNwN2g-49" parent="Z4hdVuXi7llSv1JNwN2g-1" style="ellipse;fillColor=strokeColor;html=1;" value="" vertex="1">
<mxGeometry height="20" width="20" x="110" y="430" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

63
doc/recipe_data.json Normal file
View File

@@ -0,0 +1,63 @@
{
"metadata": {
"version": "1.0",
"description": "Beschreibung der Rezeptparameter",
"maxParams": 5
},
"processVariables": {
"real": [
{
"index": 0,
"id": 1,
"name": "Temperatur",
"unit": "degC",
"min": 0.0,
"max": 60.5
},
{
"index": 1,
"id": 2,
"name": "Dummy 1",
"unit": "mm",
"min": 0.0,
"max": 100.0
}
],
"string": [
{
"index": "0",
"id": 4,
"name": "Dummy string",
"unit": ""
}
],
"lreal": [
{
"index": 0,
"id": 5,
"name": "Test lreal",
"unit": "um",
"min": -123000.3,
"max": 450000.264
}
],
"dint": [
{
"index": 0,
"id": 6,
"name": "Greifer Nummer",
"unit": "",
"min": 1,
"max": 3
},
{
"index": 1,
"id": 7,
"name": "Teller nummer",
"unit": "",
"min": 1,
"max": 3
}
]
}
}

View File

@@ -0,0 +1,87 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "PackTagV3ProcessVariablesSSOT",
"type": "object",
"required": ["metadata", "processVariables"],
"properties": {
"metadata": {
"type": "object",
"required": ["version", "description", "maxParams"],
"properties": {
"version": { "type": "string" },
"description": { "type": "string" },
"maxParams": { "type": "integer", "minimum": 1 }
},
"additionalProperties": false
},
"processVariables": {
"type": "object",
"properties": {
"real": {
"type": "array",
"items": {
"type": "object",
"required": ["index", "id", "name", "unit", "min", "max"],
"properties": {
"index": { "type": "integer", "minimum": 0 },
"id": { "type": "integer", "minimum": 0 },
"name": { "type": "string", "maxLength": 80 },
"unit": { "type": "string", "maxLength": 6 },
"min": { "type": "number" },
"max": { "type": "number" }
},
"additionalProperties": false
}
},
"lreal": {
"type": "array",
"items": {
"type": "object",
"required": ["index", "id", "name", "unit", "min", "max"],
"properties": {
"index": { "type": "integer", "minimum": 0 },
"id": { "type": "integer", "minimum": 0 },
"name": { "type": "string", "maxLength": 80 },
"unit": { "type": "string", "maxLength": 6 },
"min": { "type": "number" },
"max": { "type": "number" }
},
"additionalProperties": false
}
},
"dint": {
"type": "array",
"items": {
"type": "object",
"required": ["index", "id", "name", "unit", "min", "max"],
"properties": {
"index": { "type": "integer", "minimum": 0 },
"id": { "type": "integer", "minimum": 0 },
"name": { "type": "string", "maxLength": 80 },
"unit": { "type": "string", "maxLength": 6 },
"min": { "type": "integer" },
"max": { "type": "integer" }
},
"additionalProperties": false
}
},
"string": {
"type": "array",
"items": {
"type": "object",
"required": ["index", "id", "name", "unit"],
"properties": {
"index": { "type": [ "integer", "string" ] },
"id": { "type": "integer", "minimum": 0 },
"name": { "type": "string", "maxLength": 80 },
"unit": { "type": "string", "maxLength": 6 }
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}