zweiter Baustein hinzugefügt
This commit is contained in:
+220
@@ -0,0 +1,220 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Document>
|
||||
<Engineering version="V20" />
|
||||
<SW.Blocks.GlobalDB ID="0">
|
||||
<AttributeList>
|
||||
<Interface><Sections xmlns="http://www.siemens.com/automation/Openness/SW/Interface/v5">
|
||||
<Section Name="Static">
|
||||
<Member Name="str_StorageManagement" Datatype="Struct">
|
||||
<Member Name="udt_Lvl1Release" Datatype=""udt_Lv1StorageRelease"" />
|
||||
<Member Name="udt_HandshakeMESStorage" Datatype=""udt_HandshakeMessageFromMES"">
|
||||
<AttributeList>
|
||||
<BooleanAttribute Name="SetPoint" SystemDefined="true">true</BooleanAttribute>
|
||||
</AttributeList>
|
||||
</Member>
|
||||
</Member>
|
||||
<Member Name="Str_StorageRemoval" Datatype="Struct">
|
||||
<Member Name="udt_HandshakeMESStorage" Datatype=""udt_HandshakeMessageFromMES"">
|
||||
<AttributeList>
|
||||
<BooleanAttribute Name="SetPoint" SystemDefined="true">true</BooleanAttribute>
|
||||
</AttributeList>
|
||||
</Member>
|
||||
<Member Name="arrudt_StorageRemovalHandshakeTROsLvl1" Datatype="Array[1..12] of "UDT_MFR_StoreTRO"">
|
||||
<AttributeList>
|
||||
<BooleanAttribute Name="SetPoint" SystemDefined="true">true</BooleanAttribute>
|
||||
</AttributeList>
|
||||
<Sections>
|
||||
<Section Name="None" />
|
||||
</Sections>
|
||||
<Subelement Path="1">
|
||||
<Comment>
|
||||
<MultiLanguageText Lang="de-DE">Block 211</MultiLanguageText>
|
||||
</Comment>
|
||||
</Subelement>
|
||||
<Subelement Path="2">
|
||||
<Comment>
|
||||
<MultiLanguageText Lang="de-DE">Block 212</MultiLanguageText>
|
||||
</Comment>
|
||||
</Subelement>
|
||||
<Subelement Path="3">
|
||||
<Comment>
|
||||
<MultiLanguageText Lang="de-DE">Block 213</MultiLanguageText>
|
||||
</Comment>
|
||||
</Subelement>
|
||||
<Subelement Path="4">
|
||||
<Comment>
|
||||
<MultiLanguageText Lang="de-DE">Block 214</MultiLanguageText>
|
||||
</Comment>
|
||||
</Subelement>
|
||||
<Subelement Path="5">
|
||||
<Comment>
|
||||
<MultiLanguageText Lang="de-DE">Block 221</MultiLanguageText>
|
||||
</Comment>
|
||||
</Subelement>
|
||||
<Subelement Path="6">
|
||||
<Comment>
|
||||
<MultiLanguageText Lang="de-DE">Block 222</MultiLanguageText>
|
||||
</Comment>
|
||||
</Subelement>
|
||||
<Subelement Path="7">
|
||||
<Comment>
|
||||
<MultiLanguageText Lang="de-DE">Block 223</MultiLanguageText>
|
||||
</Comment>
|
||||
</Subelement>
|
||||
<Subelement Path="8">
|
||||
<Comment>
|
||||
<MultiLanguageText Lang="de-DE">Block 224</MultiLanguageText>
|
||||
</Comment>
|
||||
</Subelement>
|
||||
<Subelement Path="9">
|
||||
<Comment>
|
||||
<MultiLanguageText Lang="de-DE">Block 231</MultiLanguageText>
|
||||
</Comment>
|
||||
</Subelement>
|
||||
<Subelement Path="10">
|
||||
<Comment>
|
||||
<MultiLanguageText Lang="de-DE">Block 232</MultiLanguageText>
|
||||
</Comment>
|
||||
</Subelement>
|
||||
<Subelement Path="11">
|
||||
<Comment>
|
||||
<MultiLanguageText Lang="de-DE">Block 233</MultiLanguageText>
|
||||
</Comment>
|
||||
</Subelement>
|
||||
<Subelement Path="12">
|
||||
<Comment>
|
||||
<MultiLanguageText Lang="de-DE">Block 234</MultiLanguageText>
|
||||
</Comment>
|
||||
</Subelement>
|
||||
</Member>
|
||||
<Member Name="strMES" Datatype="Struct">
|
||||
<Member Name="udt_InOutMessageToMesBlk111" Datatype=""udt_HandshakeMessageToMES"">
|
||||
<AttributeList>
|
||||
<BooleanAttribute Name="ExternalAccessible" SystemDefined="true">false</BooleanAttribute>
|
||||
<BooleanAttribute Name="ExternalVisible" SystemDefined="true">false</BooleanAttribute>
|
||||
<BooleanAttribute Name="ExternalWritable" SystemDefined="true">false</BooleanAttribute>
|
||||
</AttributeList>
|
||||
</Member>
|
||||
<Member Name="udt_InOutMessageToMesBlk112" Datatype=""udt_HandshakeMessageToMES"">
|
||||
<AttributeList>
|
||||
<BooleanAttribute Name="SetPoint" SystemDefined="true">true</BooleanAttribute>
|
||||
</AttributeList>
|
||||
</Member>
|
||||
<Member Name="udt_InOutMessageToMesBlk113" Datatype=""udt_HandshakeMessageToMES"">
|
||||
<AttributeList>
|
||||
<BooleanAttribute Name="SetPoint" SystemDefined="true">true</BooleanAttribute>
|
||||
</AttributeList>
|
||||
</Member>
|
||||
<Member Name="udt_InOutMessageToMesBlk114" Datatype=""udt_HandshakeMessageToMES"">
|
||||
<AttributeList>
|
||||
<BooleanAttribute Name="SetPoint" SystemDefined="true">true</BooleanAttribute>
|
||||
</AttributeList>
|
||||
</Member>
|
||||
<Member Name="udt_InOutMessageToMesBlk121" Datatype=""udt_HandshakeMessageToMES"">
|
||||
<AttributeList>
|
||||
<BooleanAttribute Name="SetPoint" SystemDefined="true">true</BooleanAttribute>
|
||||
</AttributeList>
|
||||
</Member>
|
||||
<Member Name="udt_InOutMessageToMesBlk122" Datatype=""udt_HandshakeMessageToMES"">
|
||||
<AttributeList>
|
||||
<BooleanAttribute Name="SetPoint" SystemDefined="true">true</BooleanAttribute>
|
||||
</AttributeList>
|
||||
</Member>
|
||||
<Member Name="udt_InOutMessageToMesBlk123" Datatype=""udt_HandshakeMessageToMES"">
|
||||
<AttributeList>
|
||||
<BooleanAttribute Name="SetPoint" SystemDefined="true">true</BooleanAttribute>
|
||||
</AttributeList>
|
||||
</Member>
|
||||
<Member Name="udt_InOutMessageToMesBlk124" Datatype=""udt_HandshakeMessageToMES"">
|
||||
<AttributeList>
|
||||
<BooleanAttribute Name="SetPoint" SystemDefined="true">true</BooleanAttribute>
|
||||
</AttributeList>
|
||||
</Member>
|
||||
<Member Name="udt_InOutMessageToMesBlk131" Datatype=""udt_HandshakeMessageToMES"">
|
||||
<AttributeList>
|
||||
<BooleanAttribute Name="SetPoint" SystemDefined="true">true</BooleanAttribute>
|
||||
</AttributeList>
|
||||
</Member>
|
||||
<Member Name="udt_InOutMessageToMesBlk132" Datatype=""udt_HandshakeMessageToMES"">
|
||||
<AttributeList>
|
||||
<BooleanAttribute Name="SetPoint" SystemDefined="true">true</BooleanAttribute>
|
||||
</AttributeList>
|
||||
</Member>
|
||||
<Member Name="udt_InOutMessageToMesBlk133" Datatype=""udt_HandshakeMessageToMES"">
|
||||
<AttributeList>
|
||||
<BooleanAttribute Name="SetPoint" SystemDefined="true">true</BooleanAttribute>
|
||||
</AttributeList>
|
||||
</Member>
|
||||
<Member Name="udt_InOutMessageToMesBlk134" Datatype=""udt_HandshakeMessageToMES"">
|
||||
<AttributeList>
|
||||
<BooleanAttribute Name="SetPoint" SystemDefined="true">true</BooleanAttribute>
|
||||
</AttributeList>
|
||||
</Member>
|
||||
</Member>
|
||||
<Member Name="str_TelegramMES" Datatype="Struct">
|
||||
<Member Name="udtIn_DataMES" Datatype=""UDT_Telegram_CReqM"" />
|
||||
</Member>
|
||||
<Member Name="udt_StorageBlockSequencerData" Datatype=""udt_StorageSite"" />
|
||||
<Member Name="udt_CarrierNeeded" Datatype=""udt_CarrierNeeded"">
|
||||
<AttributeList>
|
||||
<BooleanAttribute Name="SetPoint" SystemDefined="true">true</BooleanAttribute>
|
||||
</AttributeList>
|
||||
</Member>
|
||||
</Member>
|
||||
</Section>
|
||||
</Sections></Interface>
|
||||
<MemoryLayout>Optimized</MemoryLayout>
|
||||
<MemoryReserve>100</MemoryReserve>
|
||||
<Name>DB_HandshakeStorage</Name>
|
||||
<Namespace />
|
||||
<Number>64</Number>
|
||||
<ProgrammingLanguage>DB</ProgrammingLanguage>
|
||||
</AttributeList>
|
||||
<ObjectList>
|
||||
<MultilingualText ID="1" CompositionName="Comment">
|
||||
<ObjectList>
|
||||
<MultilingualTextItem ID="2" CompositionName="Items">
|
||||
<AttributeList>
|
||||
<Culture>cs-CZ</Culture>
|
||||
<Text />
|
||||
</AttributeList>
|
||||
</MultilingualTextItem>
|
||||
<MultilingualTextItem ID="3" CompositionName="Items">
|
||||
<AttributeList>
|
||||
<Culture>de-DE</Culture>
|
||||
<Text />
|
||||
</AttributeList>
|
||||
</MultilingualTextItem>
|
||||
<MultilingualTextItem ID="4" CompositionName="Items">
|
||||
<AttributeList>
|
||||
<Culture>en-US</Culture>
|
||||
<Text />
|
||||
</AttributeList>
|
||||
</MultilingualTextItem>
|
||||
</ObjectList>
|
||||
</MultilingualText>
|
||||
<MultilingualText ID="5" CompositionName="Title">
|
||||
<ObjectList>
|
||||
<MultilingualTextItem ID="6" CompositionName="Items">
|
||||
<AttributeList>
|
||||
<Culture>cs-CZ</Culture>
|
||||
<Text />
|
||||
</AttributeList>
|
||||
</MultilingualTextItem>
|
||||
<MultilingualTextItem ID="7" CompositionName="Items">
|
||||
<AttributeList>
|
||||
<Culture>de-DE</Culture>
|
||||
<Text />
|
||||
</AttributeList>
|
||||
</MultilingualTextItem>
|
||||
<MultilingualTextItem ID="8" CompositionName="Items">
|
||||
<AttributeList>
|
||||
<Culture>en-US</Culture>
|
||||
<Text />
|
||||
</AttributeList>
|
||||
</MultilingualTextItem>
|
||||
</ObjectList>
|
||||
</MultilingualText>
|
||||
</ObjectList>
|
||||
</SW.Blocks.GlobalDB>
|
||||
</Document>
|
||||
File diff suppressed because it is too large
Load Diff
+1180
File diff suppressed because it is too large
Load Diff
+657
@@ -0,0 +1,657 @@
|
||||
FUNCTION_BLOCK "FB_LV1BlockStorageManagement"
|
||||
{ S7_Optimized_Access := 'TRUE' }
|
||||
VERSION : 0.1
|
||||
VAR_INPUT
|
||||
stIn_JamDataBlock : Struct
|
||||
stIn_JamData01 : Struct
|
||||
udt_JamData01_1 : "stJamData";
|
||||
udt_JamData01_2 : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData02 : Struct
|
||||
udt_JamData02_1 : "stJamData";
|
||||
udt_JamData02_2 : "stJamData";
|
||||
udt_JamData02_3 : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData03 : Struct
|
||||
udt_JamData03_1 : "stJamData";
|
||||
udt_JamData03_2 : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData04 : Struct
|
||||
udt_JamData04_1 : "stJamData";
|
||||
udt_JamData04_2 : "stJamData";
|
||||
udt_JamData04_3 : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData05 : Struct
|
||||
udt_JamData05_1 : "stJamData";
|
||||
udt_JamData05_2 : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData06 : Struct
|
||||
udt_JamData06_1 : "stJamData";
|
||||
udt_JamData06_2 : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData07 : Struct
|
||||
udt_JamData07_1 : "stJamData";
|
||||
udt_JamData07_2 : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData08 : Struct
|
||||
udt_JamData08_1 : "stJamData";
|
||||
udt_JamData08_2 : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData09 : Struct
|
||||
udt_JamData09_1 : "stJamData";
|
||||
udt_JamData09_2 : "stJamData";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
nIn_StorageMode : USInt; // 0 = uneven; 1= even
|
||||
xInQuit : Bool;
|
||||
wsIn_ObjectName : WString[50];
|
||||
nInBlockDestination1 : Int;
|
||||
nInBlockDestination2 : Int;
|
||||
nInBlockDestination3 : Int;
|
||||
nInBlockDestination4 : Int;
|
||||
END_VAR
|
||||
|
||||
VAR_OUTPUT
|
||||
xOut_StorageRelease : Bool;
|
||||
END_VAR
|
||||
|
||||
VAR_IN_OUT
|
||||
xError : Bool;
|
||||
nErrorID : USInt;
|
||||
xInOut_CapacityConfigChanged : Bool;
|
||||
arrudt_Storage1n1 : Array[1.."cNoLines"] of "stStorageLine";
|
||||
udt_Storage1n1BlockData : "UDT_StorageBlockData";
|
||||
arrudt_Storage1n2 : Array[1.."cNoLines"] of "stStorageLine";
|
||||
udt_Storage1n2BlockData : "UDT_StorageBlockData";
|
||||
arrudt_Storage1n3 : Array[1.."cNoLines"] of "stStorageLine";
|
||||
udt_Storage1n3BlockData : "UDT_StorageBlockData";
|
||||
arrudt_Storage1n4 : Array[1.."cNoLines"] of "stStorageLine";
|
||||
udt_Storage1n4BlockData : "UDT_StorageBlockData";
|
||||
udtInOut_CarrierAtScanner : "stCarrier";
|
||||
END_VAR
|
||||
|
||||
VAR
|
||||
st_AreaDisabledLevel1 { S7_SetPoint := 'False'} : "udt_AreaDisabledLv1";
|
||||
nTempCalculateStorageCapacity : USInt;
|
||||
str_CapacityStorageBlock { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Struct
|
||||
nCapacityStorage001 { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : UInt;
|
||||
nCapacityStorage002 { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : UInt;
|
||||
nCapacityStorage003 { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : UInt;
|
||||
nCapacityStorage004 { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : UInt;
|
||||
END_STRUCT;
|
||||
n_Block11IDX : USInt;
|
||||
n_CarrierTyp : USInt;
|
||||
stTROCarrier : Struct
|
||||
st_Data { S7_SetPoint := 'False'} : "stCarrier";
|
||||
str_Type { S7_SetPoint := 'True'} : String;
|
||||
END_STRUCT;
|
||||
stTROCarrierLast : Struct
|
||||
st_Data { S7_SetPoint := 'False'} : "stCarrier";
|
||||
str_Type { S7_SetPoint := 'True'} : String;
|
||||
END_STRUCT;
|
||||
stTROCarrierClear : Struct
|
||||
st_Data { S7_SetPoint := 'False'} : "stCarrier";
|
||||
str_Type { S7_SetPoint := 'True'} : String;
|
||||
END_STRUCT;
|
||||
xDestinationGranted : Bool;
|
||||
PrgAlarm_Failmessage {InstructionName := 'Program_Alarm'; LibVersion := '1.0'; S7_SetPoint := 'False'} : Program_Alarm;
|
||||
wsErrorMessage1 : WString[50];
|
||||
wsErrorMessage2 : WString[50];
|
||||
wsErrorMessage3 : WString[50];
|
||||
END_VAR
|
||||
|
||||
VAR_TEMP
|
||||
nTempMinBefuellungBlock : USInt;
|
||||
nTempLinieIDX : USInt;
|
||||
nTempRetVal : Int;
|
||||
tTempLocalTime {InstructionName := 'DTL'; LibVersion := '1.0'} : DTL;
|
||||
stTemp_ErrorString1 : WString[50];
|
||||
n_TempSell : Int;
|
||||
END_VAR
|
||||
|
||||
VAR CONSTANT
|
||||
cAreaEmpty : Byte := 16#1;
|
||||
cAreaOK : Byte;
|
||||
"~~~~~~~~~~~CarrierType~~~~~~~~~~~~~" : Byte;
|
||||
c000_undefinert : USInt;
|
||||
c001_CarrierKurz : USInt := 1;
|
||||
c002_CarrierLang : USInt := 2;
|
||||
c003_CarrierLeer : USInt := 3;
|
||||
"~~~~~~~~~~~StorageMode~~~~~~~~~~~~~" : USInt;
|
||||
c000_uneven : USInt;
|
||||
c001_even : USInt := 1;
|
||||
"~~~~~~~~~~~ErrorID~~~~~~~~~~~~~" : USInt;
|
||||
c000_KeinFehler : USInt;
|
||||
c010_CarrierDatenFehlerhaft : USInt := 10;
|
||||
c020_KeinZielVerfuegbar : USInt := 20;
|
||||
END_VAR
|
||||
|
||||
|
||||
BEGIN
|
||||
|
||||
REGION Info
|
||||
(* Company: Schönenberger Systeme GmbH / (C) Copyright (2022). All rights reserved.
|
||||
-----------------------------------------------------------------------------------------
|
||||
Title: FB_LV1BlockStorageManagement
|
||||
Comment/Function: manages storage in to the individual storage Blocks on Level 1
|
||||
Library/Family: -
|
||||
Author: department: "Automatisierung" ; person in charge / contact: C.Nottelmann (Automated Intelligence)
|
||||
Target System: CPU 1518F-4 PN/DP
|
||||
Engineering: TIA Portal V20
|
||||
Restrictions: -
|
||||
Requirements: -
|
||||
-----------------------------------------------------------------------------------------
|
||||
Change log table:
|
||||
Version | Date | Signature (Safety) | Expert in charge | Changes applied
|
||||
------------|------------|--------------------|------------------|-----------------------
|
||||
001.000.000 | 2025-05-08 | - | | Header added on 08.05.2025
|
||||
|
||||
*)
|
||||
END_REGION
|
||||
|
||||
REGION Local Time
|
||||
|
||||
|
||||
// read local time for timestamp ------------------------------------------
|
||||
#nTempRetVal := RD_LOC_T(#tTempLocalTime);
|
||||
|
||||
|
||||
|
||||
|
||||
END_REGION
|
||||
|
||||
REGION calculate max storage size of Block x
|
||||
// Lagergröße der Blöcke berechnen
|
||||
IF "FirstScan" OR #xInOut_CapacityConfigChanged
|
||||
THEN
|
||||
FOR #nTempCalculateStorageCapacity := 1 TO 22 DO
|
||||
IF #nTempCalculateStorageCapacity >= 1 AND #nTempCalculateStorageCapacity <= 21
|
||||
THEN
|
||||
IF #nTempCalculateStorageCapacity = 1
|
||||
THEN
|
||||
#str_CapacityStorageBlock.nCapacityStorage001 := 0;
|
||||
#str_CapacityStorageBlock.nCapacityStorage002 := 0;
|
||||
#str_CapacityStorageBlock.nCapacityStorage003 := 0;
|
||||
#str_CapacityStorageBlock.nCapacityStorage004 := 0;
|
||||
|
||||
|
||||
END_IF;
|
||||
|
||||
|
||||
|
||||
IF NOT #arrudt_Storage1n1[#nTempCalculateStorageCapacity].stData.Status.bByte.%X2
|
||||
THEN
|
||||
#str_CapacityStorageBlock.nCapacityStorage001 := #str_CapacityStorageBlock.nCapacityStorage001 + #arrudt_Storage1n1[#nTempCalculateStorageCapacity].stData.Config.nCapacitySet;
|
||||
END_IF;
|
||||
IF NOT #arrudt_Storage1n2[#nTempCalculateStorageCapacity].stData.Status.bByte.%X2
|
||||
THEN
|
||||
#str_CapacityStorageBlock.nCapacityStorage002 := #str_CapacityStorageBlock.nCapacityStorage002 + #arrudt_Storage1n2[#nTempCalculateStorageCapacity].stData.Config.nCapacitySet;
|
||||
END_IF;
|
||||
IF NOT #arrudt_Storage1n3[#nTempCalculateStorageCapacity].stData.Status.bByte.%X2
|
||||
THEN
|
||||
#str_CapacityStorageBlock.nCapacityStorage003 := #str_CapacityStorageBlock.nCapacityStorage003 + #arrudt_Storage1n3[#nTempCalculateStorageCapacity].stData.Config.nCapacitySet;
|
||||
END_IF;
|
||||
IF NOT #arrudt_Storage1n4[#nTempCalculateStorageCapacity].stData.Status.bByte.%X2
|
||||
THEN
|
||||
#str_CapacityStorageBlock.nCapacityStorage004 := #str_CapacityStorageBlock.nCapacityStorage004 + #arrudt_Storage1n4[#nTempCalculateStorageCapacity].stData.Config.nCapacitySet;
|
||||
END_IF;
|
||||
|
||||
|
||||
|
||||
END_IF;
|
||||
END_FOR;
|
||||
|
||||
#xInOut_CapacityConfigChanged := False;
|
||||
|
||||
END_IF;
|
||||
END_REGION
|
||||
|
||||
|
||||
|
||||
REGION Error/ Jam Group Areas
|
||||
|
||||
REGION Block 1
|
||||
|
||||
#st_AreaDisabledLevel1.str_Block.xSection01disabled := #stIn_JamDataBlock.stIn_JamData01.udt_JamData01_1.Status.bByte <> #cAreaOK
|
||||
AND #stIn_JamDataBlock.stIn_JamData01.udt_JamData01_1.Status.bByte <> #cAreaEmpty
|
||||
AND #stIn_JamDataBlock.stIn_JamData01.udt_JamData01_2.Status.bByte <> #cAreaOK
|
||||
AND #stIn_JamDataBlock.stIn_JamData01.udt_JamData01_2.Status.bByte <> #cAreaEmpty;
|
||||
|
||||
#st_AreaDisabledLevel1.str_Block.xSection02disabled := #stIn_JamDataBlock.stIn_JamData02.udt_JamData02_1.Status.bByte <> #cAreaOK
|
||||
AND #stIn_JamDataBlock.stIn_JamData02.udt_JamData02_1.Status.bByte <> #cAreaEmpty
|
||||
AND #stIn_JamDataBlock.stIn_JamData02.udt_JamData02_2.Status.bByte <> #cAreaOK
|
||||
AND #stIn_JamDataBlock.stIn_JamData02.udt_JamData02_2.Status.bByte <> #cAreaEmpty
|
||||
AND #stIn_JamDataBlock.stIn_JamData02.udt_JamData02_3.Status.bByte <> #cAreaOK
|
||||
AND #stIn_JamDataBlock.stIn_JamData02.udt_JamData02_3.Status.bByte <> #cAreaEmpty;
|
||||
|
||||
|
||||
#st_AreaDisabledLevel1.str_Block.xSection03disabled := #stIn_JamDataBlock.stIn_JamData03.udt_JamData03_1.Status.bByte <> #cAreaOK
|
||||
AND #stIn_JamDataBlock.stIn_JamData03.udt_JamData03_1.Status.bByte <> #cAreaEmpty
|
||||
AND #stIn_JamDataBlock.stIn_JamData03.udt_JamData03_2.Status.bByte <> #cAreaOK
|
||||
AND #stIn_JamDataBlock.stIn_JamData03.udt_JamData03_2.Status.bByte <> #cAreaEmpty;
|
||||
|
||||
#st_AreaDisabledLevel1.str_Block.xSection04disabled := #stIn_JamDataBlock.stIn_JamData04.udt_JamData04_1.Status.bByte <> #cAreaOK
|
||||
AND #stIn_JamDataBlock.stIn_JamData04.udt_JamData04_1.Status.bByte <> #cAreaEmpty
|
||||
AND #stIn_JamDataBlock.stIn_JamData04.udt_JamData04_2.Status.bByte <> #cAreaOK
|
||||
AND #stIn_JamDataBlock.stIn_JamData04.udt_JamData04_2.Status.bByte <> #cAreaEmpty
|
||||
AND #stIn_JamDataBlock.stIn_JamData04.udt_JamData04_3.Status.bByte <> #cAreaOK
|
||||
AND #stIn_JamDataBlock.stIn_JamData04.udt_JamData04_3.Status.bByte <> #cAreaEmpty;
|
||||
|
||||
|
||||
#st_AreaDisabledLevel1.str_Block.xSection05disabled := #stIn_JamDataBlock.stIn_JamData05.udt_JamData05_1.Status.bByte <> #cAreaOK
|
||||
AND #stIn_JamDataBlock.stIn_JamData05.udt_JamData05_1.Status.bByte <> #cAreaEmpty
|
||||
AND #stIn_JamDataBlock.stIn_JamData05.udt_JamData05_2.Status.bByte <> #cAreaOK
|
||||
AND #stIn_JamDataBlock.stIn_JamData05.udt_JamData05_2.Status.bByte <> #cAreaEmpty;
|
||||
|
||||
|
||||
|
||||
#st_AreaDisabledLevel1.str_Block.xSection06disabled := #stIn_JamDataBlock.stIn_JamData06.udt_JamData06_1.Status.bByte <> #cAreaOK
|
||||
AND #stIn_JamDataBlock.stIn_JamData06.udt_JamData06_1.Status.bByte <> #cAreaEmpty
|
||||
AND #stIn_JamDataBlock.stIn_JamData06.udt_JamData06_2.Status.bByte <> #cAreaOK
|
||||
AND #stIn_JamDataBlock.stIn_JamData06.udt_JamData06_2.Status.bByte <> #cAreaEmpty;
|
||||
|
||||
|
||||
#st_AreaDisabledLevel1.str_Block.xSection07disabled := #stIn_JamDataBlock.stIn_JamData07.udt_JamData07_1.Status.bByte <> #cAreaOK
|
||||
AND #stIn_JamDataBlock.stIn_JamData07.udt_JamData07_1.Status.bByte <> #cAreaEmpty
|
||||
AND #stIn_JamDataBlock.stIn_JamData07.udt_JamData07_2.Status.bByte <> #cAreaOK
|
||||
AND #stIn_JamDataBlock.stIn_JamData07.udt_JamData07_2.Status.bByte <> #cAreaEmpty;
|
||||
|
||||
|
||||
#st_AreaDisabledLevel1.str_Block.xSection08disabled := #stIn_JamDataBlock.stIn_JamData08.udt_JamData08_1.Status.bByte <> #cAreaOK
|
||||
AND #stIn_JamDataBlock.stIn_JamData08.udt_JamData08_1.Status.bByte <> #cAreaEmpty
|
||||
AND #stIn_JamDataBlock.stIn_JamData08.udt_JamData08_2.Status.bByte <> #cAreaOK
|
||||
AND #stIn_JamDataBlock.stIn_JamData08.udt_JamData08_2.Status.bByte <> #cAreaEmpty;
|
||||
|
||||
|
||||
|
||||
#st_AreaDisabledLevel1.str_Block.xBlockdisabled := #st_AreaDisabledLevel1.str_Block.xSection01disabled
|
||||
OR #st_AreaDisabledLevel1.str_Block.xSection02disabled;
|
||||
|
||||
|
||||
#xOut_StorageRelease := NOT #st_AreaDisabledLevel1.str_Block.xBlockdisabled;
|
||||
|
||||
END_REGION
|
||||
END_REGION
|
||||
|
||||
REGION Carrier prüfen
|
||||
IF #udtInOut_CarrierAtScanner.nBarcode > 10000
|
||||
// AND #udtInOut_CarrierAtScanner.nDestination = 0
|
||||
// AND #udtInOut_CarrierAtScanner.bStatus.%X3
|
||||
AND NOT #udtInOut_CarrierAtScanner.bStatus.%X1 //Wenn Loaded nicht gesetzt nehmen wir einfach an das der Carrier leer ist...
|
||||
THEN
|
||||
#n_CarrierTyp := #c003_CarrierLeer; //leer
|
||||
ELSIF #udtInOut_CarrierAtScanner.nBarcode > 10000
|
||||
// AND #udtInOut_CarrierAtScanner.nDestination = 0
|
||||
AND #udtInOut_CarrierAtScanner.bStatus.%X3
|
||||
AND #udtInOut_CarrierAtScanner.bStatus.%X1
|
||||
THEN
|
||||
#n_CarrierTyp := #c001_CarrierKurz; ///kurz und beladen
|
||||
ELSE
|
||||
// #udtInOut_CarrierAtScanner.nBarcode > 10000
|
||||
// AND #udtInOut_CarrierAtScanner.nDestination = 0
|
||||
// AND NOT #udtInOut_CarrierAtScanner.bStatus.%X3
|
||||
// AND NOT #udtInOut_CarrierAtScanner.bStatus.%X1
|
||||
// THEN
|
||||
#n_CarrierTyp := #c000_undefinert; // kein Carrier oder undefiniert
|
||||
END_IF;
|
||||
END_REGION
|
||||
|
||||
REGION Find Destination
|
||||
IF NOT #xDestinationGranted
|
||||
THEN
|
||||
CASE #n_CarrierTyp OF
|
||||
#c000_undefinert:
|
||||
#xError := True;
|
||||
#nErrorID := #c010_CarrierDatenFehlerhaft;
|
||||
#c001_CarrierKurz:
|
||||
|
||||
CASE #nIn_StorageMode OF
|
||||
|
||||
#c000_uneven:
|
||||
REGION Uneven
|
||||
//Blöcken werden ungleich gefüllt
|
||||
FOR #n_Block11IDX := 1 TO 21 DO
|
||||
IF #n_Block11IDX >= 1 AND #n_Block11IDX <= 21
|
||||
THEN
|
||||
|
||||
|
||||
IF NOT #st_AreaDisabledLevel1.str_Block.xSection01disabled AND #arrudt_Storage1n1[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n1[#n_Block11IDX].stData.Config.nCapacityMax
|
||||
AND #arrudt_Storage1n1[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n1[#n_Block11IDX].stData.Config.nCapacitySet
|
||||
AND #udt_Storage1n1BlockData.nCountTotal < #str_CapacityStorageBlock.nCapacityStorage001
|
||||
AND NOT #arrudt_Storage1n1[#n_Block11IDX].stData.Config.bByte.%X3
|
||||
AND NOT #xDestinationGranted
|
||||
THEN
|
||||
#stTROCarrier.st_Data.nDestination := #nInBlockDestination1;//11100;
|
||||
// #udt_Storage1n1BlockData.nCountReserved += 1;
|
||||
#xDestinationGranted := True;
|
||||
EXIT;
|
||||
ELSIF NOT #st_AreaDisabledLevel1.str_Block.xSection02disabled AND #arrudt_Storage1n2[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n2[#n_Block11IDX].stData.Config.nCapacityMax
|
||||
AND #arrudt_Storage1n2[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n2[#n_Block11IDX].stData.Config.nCapacitySet
|
||||
AND #udt_Storage1n2BlockData.nCountTotal < #str_CapacityStorageBlock.nCapacityStorage002
|
||||
AND NOT #arrudt_Storage1n2[#n_Block11IDX].stData.Config.bByte.%X3
|
||||
AND NOT #xDestinationGranted
|
||||
THEN
|
||||
#stTROCarrier.st_Data.nDestination := #nInBlockDestination1;//11200;
|
||||
// #udt_Storage1n2BlockData.nCountReserved += 1;
|
||||
#xDestinationGranted := True;
|
||||
EXIT;
|
||||
ELSIF NOT #st_AreaDisabledLevel1.str_Block.xSection03disabled AND #arrudt_Storage1n3[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n3[#n_Block11IDX].stData.Config.nCapacityMax
|
||||
AND #arrudt_Storage1n3[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n3[#n_Block11IDX].stData.Config.nCapacitySet
|
||||
AND #udt_Storage1n3BlockData.nCountTotal < #str_CapacityStorageBlock.nCapacityStorage003
|
||||
AND NOT #arrudt_Storage1n3[#n_Block11IDX].stData.Config.bByte.%X3
|
||||
AND NOT #xDestinationGranted
|
||||
THEN
|
||||
#stTROCarrier.st_Data.nDestination := #nInBlockDestination1;//11300;
|
||||
// #udt_Storage1n3BlockData.nCountReserved += 1;
|
||||
#xDestinationGranted := True;
|
||||
EXIT;
|
||||
ELSIF NOT #st_AreaDisabledLevel1.str_Block.xSection04disabled AND #arrudt_Storage1n4[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n4[#n_Block11IDX].stData.Config.nCapacityMax
|
||||
AND #arrudt_Storage1n4[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n4[#n_Block11IDX].stData.Config.nCapacitySet
|
||||
AND #udt_Storage1n4BlockData.nCountTotal < #str_CapacityStorageBlock.nCapacityStorage004
|
||||
AND NOT #arrudt_Storage1n4[#n_Block11IDX].stData.Config.bByte.%X3
|
||||
AND NOT #xDestinationGranted
|
||||
THEN
|
||||
#stTROCarrier.st_Data.nDestination := #nInBlockDestination1;//11400;
|
||||
// #udt_Storage1n4BlockData.nCountReserved += 1;
|
||||
#xDestinationGranted := True;
|
||||
EXIT;
|
||||
|
||||
END_IF;
|
||||
|
||||
END_IF;
|
||||
IF #n_Block11IDX = 21 AND #stTROCarrier.st_Data.nDestination = 0
|
||||
THEN
|
||||
#xError := True;
|
||||
#nErrorID := #c020_KeinZielVerfuegbar;
|
||||
END_IF;
|
||||
END_FOR;
|
||||
END_REGION
|
||||
#c001_even:
|
||||
REGION Even
|
||||
//Minimale Befüllung in der Linie ermitteln
|
||||
#nTempMinBefuellungBlock := #arrudt_Storage1n1[1].stData.Status.nCount;
|
||||
FOR #nTempLinieIDX := 2 TO 12 DO
|
||||
IF #arrudt_Storage1n1[#nTempLinieIDX].stData.Status.nCount < #nTempMinBefuellungBlock THEN
|
||||
#nTempMinBefuellungBlock := #arrudt_Storage1n1[#nTempLinieIDX].stData.Status.nCount;
|
||||
END_IF;
|
||||
IF #arrudt_Storage1n2[#nTempLinieIDX].stData.Status.nCount < #nTempMinBefuellungBlock THEN
|
||||
#nTempMinBefuellungBlock := #arrudt_Storage1n2[#nTempLinieIDX].stData.Status.nCount;
|
||||
END_IF;
|
||||
IF #arrudt_Storage1n3[#nTempLinieIDX].stData.Status.nCount < #nTempMinBefuellungBlock THEN
|
||||
#nTempMinBefuellungBlock := #arrudt_Storage1n3[#nTempLinieIDX].stData.Status.nCount;
|
||||
END_IF;
|
||||
IF #arrudt_Storage1n4[#nTempLinieIDX].stData.Status.nCount < #nTempMinBefuellungBlock THEN
|
||||
#nTempMinBefuellungBlock := #arrudt_Storage1n4[#nTempLinieIDX].stData.Status.nCount;
|
||||
END_IF;
|
||||
END_FOR;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
FOR #n_Block11IDX := 1 TO 21 DO
|
||||
IF #n_Block11IDX >= 1 AND #n_Block11IDX <= 21
|
||||
THEN
|
||||
|
||||
IF NOT #st_AreaDisabledLevel1.str_Block.xSection01disabled AND #arrudt_Storage1n1[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n1[#n_Block11IDX].stData.Config.nCapacityMax
|
||||
AND #arrudt_Storage1n1[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n1[#n_Block11IDX].stData.Config.nCapacitySet
|
||||
AND #arrudt_Storage1n1[#n_Block11IDX].stData.Status.nCount = #nTempMinBefuellungBlock
|
||||
AND #udt_Storage1n1BlockData.nCountTotal < #str_CapacityStorageBlock.nCapacityStorage001
|
||||
AND NOT #arrudt_Storage1n1[#n_Block11IDX].stData.Config.bByte.%X3
|
||||
AND NOT #xDestinationGranted
|
||||
THEN
|
||||
#stTROCarrier.st_Data.nDestination := 11100;
|
||||
// #udt_Storage1n1BlockData.nCountReserved += 1;
|
||||
#xDestinationGranted := True;
|
||||
EXIT;
|
||||
ELSIF NOT #st_AreaDisabledLevel1.str_Block.xSection02disabled AND #arrudt_Storage1n2[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n2[#n_Block11IDX].stData.Config.nCapacityMax
|
||||
AND #arrudt_Storage1n2[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n2[#n_Block11IDX].stData.Config.nCapacitySet
|
||||
AND #arrudt_Storage1n2[#n_Block11IDX].stData.Status.nCount = #nTempMinBefuellungBlock
|
||||
AND #udt_Storage1n2BlockData.nCountTotal < #str_CapacityStorageBlock.nCapacityStorage002
|
||||
AND NOT #arrudt_Storage1n2[#n_Block11IDX].stData.Config.bByte.%X3
|
||||
AND NOT #xDestinationGranted
|
||||
THEN
|
||||
#stTROCarrier.st_Data.nDestination := 11200;
|
||||
// #udt_Storage1n2BlockData.nCountReserved += 1;
|
||||
#xDestinationGranted := True;
|
||||
EXIT;
|
||||
ELSIF NOT #st_AreaDisabledLevel1.str_Block.xSection03disabled AND #arrudt_Storage1n3[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n3[#n_Block11IDX].stData.Config.nCapacityMax
|
||||
AND #arrudt_Storage1n3[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n3[#n_Block11IDX].stData.Config.nCapacitySet
|
||||
AND #arrudt_Storage1n3[#n_Block11IDX].stData.Status.nCount = #nTempMinBefuellungBlock
|
||||
AND #udt_Storage1n3BlockData.nCountTotal < #str_CapacityStorageBlock.nCapacityStorage003
|
||||
AND NOT #arrudt_Storage1n3[#n_Block11IDX].stData.Config.bByte.%X3
|
||||
AND NOT #xDestinationGranted
|
||||
THEN
|
||||
#stTROCarrier.st_Data.nDestination := 11300;
|
||||
// #udt_Storage1n3BlockData.nCountReserved += 1;
|
||||
#xDestinationGranted := True;
|
||||
EXIT;
|
||||
ELSIF NOT #st_AreaDisabledLevel1.str_Block.xSection04disabled AND #arrudt_Storage1n4[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n4[#n_Block11IDX].stData.Config.nCapacityMax
|
||||
AND #arrudt_Storage1n4[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n4[#n_Block11IDX].stData.Config.nCapacitySet
|
||||
AND #arrudt_Storage1n4[#n_Block11IDX].stData.Status.nCount = #nTempMinBefuellungBlock
|
||||
AND #udt_Storage1n4BlockData.nCountTotal < #str_CapacityStorageBlock.nCapacityStorage004
|
||||
AND NOT #arrudt_Storage1n4[#n_Block11IDX].stData.Config.bByte.%X3
|
||||
AND NOT #xDestinationGranted
|
||||
THEN
|
||||
#stTROCarrier.st_Data.nDestination := 11400;
|
||||
// #udt_Storage1n4BlockData.nCountReserved += 1;
|
||||
#xDestinationGranted := True;
|
||||
EXIT;
|
||||
END_IF;
|
||||
END_IF;
|
||||
IF #n_Block11IDX = 21 AND #stTROCarrier.st_Data.nDestination = 0
|
||||
THEN
|
||||
#xError := True;
|
||||
#nErrorID := #c020_KeinZielVerfuegbar;
|
||||
END_IF;
|
||||
END_FOR;
|
||||
|
||||
END_REGION
|
||||
END_CASE;
|
||||
|
||||
#c003_CarrierLeer:
|
||||
|
||||
CASE #nIn_StorageMode OF
|
||||
|
||||
#c000_uneven:
|
||||
REGION Uneven
|
||||
//Blöcken werden ungleich gefüllt
|
||||
FOR #n_Block11IDX := 1 TO 21 DO
|
||||
IF #n_Block11IDX >= 1 AND #n_Block11IDX <= 21
|
||||
THEN
|
||||
|
||||
|
||||
IF NOT #st_AreaDisabledLevel1.str_Block.xSection01disabled AND #arrudt_Storage1n1[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n1[#n_Block11IDX].stData.Config.nCapacityMax
|
||||
AND #arrudt_Storage1n1[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n1[#n_Block11IDX].stData.Config.nCapacitySet
|
||||
AND #udt_Storage1n1BlockData.nCountTotal < #str_CapacityStorageBlock.nCapacityStorage001
|
||||
AND #arrudt_Storage1n1[#n_Block11IDX].stData.Config.bByte.%X3
|
||||
AND NOT #xDestinationGranted
|
||||
THEN
|
||||
#stTROCarrier.st_Data.nDestination := #nInBlockDestination1;
|
||||
// #udt_Storage1n1BlockData.nCountReserved += 1;
|
||||
#xDestinationGranted := True;
|
||||
EXIT;
|
||||
ELSIF NOT #st_AreaDisabledLevel1.str_Block.xSection02disabled AND #arrudt_Storage1n2[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n2[#n_Block11IDX].stData.Config.nCapacityMax
|
||||
AND #arrudt_Storage1n2[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n2[#n_Block11IDX].stData.Config.nCapacitySet
|
||||
AND #udt_Storage1n2BlockData.nCountTotal < #str_CapacityStorageBlock.nCapacityStorage002
|
||||
AND #arrudt_Storage1n2[#n_Block11IDX].stData.Config.bByte.%X3
|
||||
AND NOT #xDestinationGranted
|
||||
THEN
|
||||
#stTROCarrier.st_Data.nDestination := #nInBlockDestination2;
|
||||
// #udt_Storage1n2BlockData.nCountReserved += 1;
|
||||
#xDestinationGranted := True;
|
||||
EXIT;
|
||||
ELSIF (* NOT #st_AreaDisabledLevel1.str_Block.xSection03disabled AND #arrudt_Storage1n3[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n3[#n_Block11IDX].stData.Config.nCapacityMax
|
||||
AND #arrudt_Storage1n3[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n3[#n_Block11IDX].stData.Config.nCapacitySet
|
||||
AND #udt_Storage1n3BlockData.nCountTotal < #str_CapacityStorageBlock.nCapacityStorage003 *)
|
||||
//AND
|
||||
#arrudt_Storage1n3[#n_Block11IDX].stData.Config.bByte.%X3
|
||||
AND NOT #xDestinationGranted
|
||||
THEN
|
||||
#stTROCarrier.st_Data.nDestination := #nInBlockDestination3;
|
||||
// #udt_Storage1n3BlockData.nCountReserved += 1;
|
||||
#xDestinationGranted := True;
|
||||
EXIT;
|
||||
ELSIF NOT #st_AreaDisabledLevel1.str_Block.xSection04disabled AND #arrudt_Storage1n4[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n4[#n_Block11IDX].stData.Config.nCapacityMax
|
||||
AND #arrudt_Storage1n4[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n4[#n_Block11IDX].stData.Config.nCapacitySet
|
||||
AND #udt_Storage1n4BlockData.nCountTotal < #str_CapacityStorageBlock.nCapacityStorage004
|
||||
AND #arrudt_Storage1n4[#n_Block11IDX].stData.Config.bByte.%X3
|
||||
AND NOT #xDestinationGranted
|
||||
THEN
|
||||
#stTROCarrier.st_Data.nDestination := #nInBlockDestination4;
|
||||
// #udt_Storage1n4BlockData.nCountReserved += 1;
|
||||
#xDestinationGranted := True;
|
||||
EXIT;
|
||||
END_IF;
|
||||
|
||||
END_IF;
|
||||
IF #n_Block11IDX = 21 AND #stTROCarrier.st_Data.nDestination = 0
|
||||
THEN
|
||||
#xError := True;
|
||||
#nErrorID := #c020_KeinZielVerfuegbar;
|
||||
END_IF;
|
||||
END_FOR;
|
||||
END_REGION
|
||||
#c001_even:
|
||||
REGION Even
|
||||
//Minimale Befüllung in der Linie ermitteln
|
||||
#nTempMinBefuellungBlock := #arrudt_Storage1n1[1].stData.Status.nCount;
|
||||
FOR #nTempLinieIDX := 2 TO 12 DO
|
||||
IF #arrudt_Storage1n1[#nTempLinieIDX].stData.Status.nCount < #nTempMinBefuellungBlock THEN
|
||||
#nTempMinBefuellungBlock := #arrudt_Storage1n1[#nTempLinieIDX].stData.Status.nCount;
|
||||
END_IF;
|
||||
IF #arrudt_Storage1n2[#nTempLinieIDX].stData.Status.nCount < #nTempMinBefuellungBlock THEN
|
||||
#nTempMinBefuellungBlock := #arrudt_Storage1n2[#nTempLinieIDX].stData.Status.nCount;
|
||||
END_IF;
|
||||
IF #arrudt_Storage1n3[#nTempLinieIDX].stData.Status.nCount < #nTempMinBefuellungBlock THEN
|
||||
#nTempMinBefuellungBlock := #arrudt_Storage1n3[#nTempLinieIDX].stData.Status.nCount;
|
||||
END_IF;
|
||||
IF #arrudt_Storage1n4[#nTempLinieIDX].stData.Status.nCount < #nTempMinBefuellungBlock THEN
|
||||
#nTempMinBefuellungBlock := #arrudt_Storage1n4[#nTempLinieIDX].stData.Status.nCount;
|
||||
END_IF;
|
||||
END_FOR;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
FOR #n_Block11IDX := 1 TO 21 DO
|
||||
IF #n_Block11IDX >= 1 AND #n_Block11IDX <= 21
|
||||
THEN
|
||||
|
||||
IF NOT #st_AreaDisabledLevel1.str_Block.xSection01disabled AND #arrudt_Storage1n1[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n1[#n_Block11IDX].stData.Config.nCapacityMax
|
||||
AND #arrudt_Storage1n1[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n1[#n_Block11IDX].stData.Config.nCapacitySet
|
||||
AND #arrudt_Storage1n1[#n_Block11IDX].stData.Status.nCount = #nTempMinBefuellungBlock
|
||||
AND #udt_Storage1n1BlockData.nCountTotal < #str_CapacityStorageBlock.nCapacityStorage001
|
||||
AND #arrudt_Storage1n1[#n_Block11IDX].stData.Config.bByte.%X3
|
||||
AND NOT #xDestinationGranted
|
||||
THEN
|
||||
#stTROCarrier.st_Data.nDestination := 11100;
|
||||
// #udt_Storage1n1BlockData.nCountReserved += 1;
|
||||
#xDestinationGranted := True;
|
||||
EXIT;
|
||||
ELSIF NOT #st_AreaDisabledLevel1.str_Block.xSection02disabled AND #arrudt_Storage1n2[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n2[#n_Block11IDX].stData.Config.nCapacityMax
|
||||
AND #arrudt_Storage1n2[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n2[#n_Block11IDX].stData.Config.nCapacitySet
|
||||
AND #arrudt_Storage1n2[#n_Block11IDX].stData.Status.nCount = #nTempMinBefuellungBlock
|
||||
AND #udt_Storage1n2BlockData.nCountTotal < #str_CapacityStorageBlock.nCapacityStorage002
|
||||
AND #arrudt_Storage1n2[#n_Block11IDX].stData.Config.bByte.%X3
|
||||
AND NOT #xDestinationGranted
|
||||
THEN
|
||||
#stTROCarrier.st_Data.nDestination := 11200;
|
||||
// #udt_Storage1n2BlockData.nCountReserved += 1;
|
||||
#xDestinationGranted := True;
|
||||
EXIT;
|
||||
ELSIF NOT #st_AreaDisabledLevel1.str_Block.xSection03disabled AND #arrudt_Storage1n3[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n3[#n_Block11IDX].stData.Config.nCapacityMax
|
||||
AND #arrudt_Storage1n3[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n3[#n_Block11IDX].stData.Config.nCapacitySet
|
||||
AND #arrudt_Storage1n3[#n_Block11IDX].stData.Status.nCount = #nTempMinBefuellungBlock
|
||||
AND #udt_Storage1n3BlockData.nCountTotal < #str_CapacityStorageBlock.nCapacityStorage003
|
||||
AND #arrudt_Storage1n3[#n_Block11IDX].stData.Config.bByte.%X3
|
||||
AND NOT #xDestinationGranted
|
||||
THEN
|
||||
#stTROCarrier.st_Data.nDestination := 11300;
|
||||
// #udt_Storage1n3BlockData.nCountReserved += 1;
|
||||
#xDestinationGranted := True;
|
||||
EXIT;
|
||||
ELSIF NOT #st_AreaDisabledLevel1.str_Block.xSection04disabled AND #arrudt_Storage1n4[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n4[#n_Block11IDX].stData.Config.nCapacityMax
|
||||
AND #arrudt_Storage1n4[#n_Block11IDX].stData.Status.nCount < #arrudt_Storage1n4[#n_Block11IDX].stData.Config.nCapacitySet
|
||||
AND #arrudt_Storage1n4[#n_Block11IDX].stData.Status.nCount = #nTempMinBefuellungBlock
|
||||
AND #udt_Storage1n4BlockData.nCountTotal < #str_CapacityStorageBlock.nCapacityStorage004
|
||||
AND #arrudt_Storage1n4[#n_Block11IDX].stData.Config.bByte.%X3
|
||||
AND NOT #xDestinationGranted
|
||||
THEN
|
||||
#stTROCarrier.st_Data.nDestination := 11400;
|
||||
// #udt_Storage1n4BlockData.nCountReserved += 1;
|
||||
#xDestinationGranted := True;
|
||||
EXIT;
|
||||
|
||||
END_IF;
|
||||
|
||||
IF #n_Block11IDX = 21 AND #stTROCarrier.st_Data.nDestination = 0
|
||||
THEN
|
||||
#xError := True;
|
||||
#nErrorID := #c020_KeinZielVerfuegbar;
|
||||
END_IF;
|
||||
END_IF;
|
||||
END_FOR;
|
||||
|
||||
END_REGION
|
||||
END_CASE;
|
||||
|
||||
END_CASE;
|
||||
END_IF;
|
||||
END_REGION
|
||||
|
||||
REGION Error
|
||||
|
||||
//Quit setzt Error Word zurück
|
||||
IF #xInQuit
|
||||
THEN
|
||||
#xError := False;
|
||||
END_IF;
|
||||
|
||||
IF #xError AND #nErrorID = #c010_CarrierDatenFehlerhaft
|
||||
THEN
|
||||
#wsErrorMessage1 := WString#'Carrier';
|
||||
#wsErrorMessage2 := DINT_TO_WSTRING(#udtInOut_CarrierAtScanner.nBarcode);
|
||||
// #wsErrorMessage3 := WSTRING#'Daten nicht eindeutig';
|
||||
ELSIF #xError AND #nErrorID = #c020_KeinZielVerfuegbar
|
||||
THEN
|
||||
#wsErrorMessage1 := WString#'Carrier';
|
||||
#wsErrorMessage2 := DINT_TO_WSTRING(#udtInOut_CarrierAtScanner.nBarcode);
|
||||
//#wsErrorMessage3 := WSTRING#'kein Ziel verfuegbar';
|
||||
ELSIF #xError AND #nErrorID = #c000_KeinFehler
|
||||
THEN
|
||||
#wsErrorMessage1 := WString#'';
|
||||
#wsErrorMessage2 := WString#'';
|
||||
#wsErrorMessage3 := WSTRING#'';
|
||||
|
||||
END_IF;
|
||||
|
||||
#PrgAlarm_Failmessage(SIG := FALSE, //xError,
|
||||
TIMESTAMP := #tTempLocalTime,
|
||||
SD_1 := #wsIn_ObjectName,
|
||||
SD_2 := #wsErrorMessage1,
|
||||
SD_3 := #wsErrorMessage2,
|
||||
SD_4 := #nErrorID);
|
||||
|
||||
END_REGION
|
||||
|
||||
REGION Output Mapping
|
||||
IF #xDestinationGranted
|
||||
THEN
|
||||
#udtInOut_CarrierAtScanner.nDestination := #stTROCarrier.st_Data.nDestination;
|
||||
END_IF;
|
||||
END_REGION
|
||||
|
||||
REGION Reset
|
||||
IF #udtInOut_CarrierAtScanner.nBarcode = 0 OR (#stTROCarrierLast.st_Data.nBarcode <> #udtInOut_CarrierAtScanner.nBarcode)
|
||||
THEN
|
||||
#xDestinationGranted := False;
|
||||
#stTROCarrier.st_Data.nDestination := 0;
|
||||
#udtInOut_CarrierAtScanner.nDestination := 0;
|
||||
END_IF;
|
||||
END_REGION
|
||||
|
||||
#stTROCarrierLast.st_Data.nBarcode := #udtInOut_CarrierAtScanner.nBarcode;
|
||||
END_FUNCTION_BLOCK
|
||||
|
||||
+108
@@ -0,0 +1,108 @@
|
||||
FUNCTION_BLOCK "FB_LineEmptyAnalyze"
|
||||
{ S7_Optimized_Access := 'TRUE' }
|
||||
VERSION : 0.1
|
||||
VAR_INPUT
|
||||
arLineBlk { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Array[1.."cNoLines"] of "stStorageLine"; // Daten pro Linie
|
||||
END_VAR
|
||||
|
||||
VAR_OUTPUT
|
||||
str_OutState : Struct
|
||||
n_LineMAX : USInt;
|
||||
arr_OrderLines : Array[1..21] of USInt;
|
||||
arr_StorageLvl : Array[1..21] of USInt;
|
||||
END_STRUCT;
|
||||
END_VAR
|
||||
|
||||
VAR
|
||||
udt_Blk { S7_SetPoint := 'False'} : "udt_LineStoreAnalyse";
|
||||
END_VAR
|
||||
|
||||
VAR_TEMP
|
||||
str_TempBlk : Struct
|
||||
tmpValue : Int;
|
||||
tmpIDX : Int;
|
||||
arr_StorageLvl : Array[1..21] of USInt;
|
||||
arr_Indizes : Array[1..21] of USInt;
|
||||
END_STRUCT;
|
||||
END_VAR
|
||||
|
||||
|
||||
BEGIN
|
||||
|
||||
REGION Info
|
||||
(* Company: Schönenberger Systeme GmbH / (C) Copyright (2022). All rights reserved.
|
||||
-----------------------------------------------------------------------------------------
|
||||
Title: FB_LineEmptyAnalyze
|
||||
Comment/Function: Analyze Empty Line level
|
||||
Library/Family: -
|
||||
Author: department: "Automatisierung" ; person in charge / contact: C.Nottelmann (Automated Intelligence)
|
||||
Target System: CPU 1518F-4 PN/DP
|
||||
Engineering: TIA Portal V20
|
||||
Restrictions: -
|
||||
Requirements: -
|
||||
-----------------------------------------------------------------------------------------
|
||||
Change log table:
|
||||
Version | Date | Signature (Safety) | Expert in charge | Changes applied
|
||||
------------|------------|--------------------|------------------|-----------------------
|
||||
001.000.000 | 2025-08-26 | - | | Header added on 26.08.2025
|
||||
|
||||
*)
|
||||
END_REGION
|
||||
|
||||
|
||||
|
||||
// Füllgrad der Linien auswerten
|
||||
FOR #udt_Blk.str_Static.n_StorageLvlIdx := 1 TO "cNoLines"(* 19 *) DO
|
||||
#udt_Blk.str_Static.n_loaded := 0; // Zähler zurücksetzen
|
||||
FOR #udt_Blk.str_Static.n_HelpIDX := 1 TO "cNoPositions"(* 108 *) DO
|
||||
IF #arLineBlk[#udt_Blk.str_Static.n_StorageLvlIdx].arCarrier[#udt_Blk.str_Static.n_HelpIDX].nBarcode <> 0
|
||||
AND NOT #arLineBlk[#udt_Blk.str_Static.n_StorageLvlIdx].arCarrier[#udt_Blk.str_Static.n_HelpIDX].bStatus.%X1 // Wenn Barcode ungleich 0, ist die Position belegt
|
||||
THEN
|
||||
#udt_Blk.str_Static.n_loaded += 1; // Zähler erhöhen
|
||||
END_IF;
|
||||
END_FOR;
|
||||
|
||||
|
||||
#udt_Blk.str_State.arr_StorageLvl[#udt_Blk.str_Static.n_StorageLvlIdx] := #udt_Blk.str_Static.n_loaded; // Ergebnis in Output schreiben
|
||||
#str_TempBlk.arr_StorageLvl[#udt_Blk.str_Static.n_StorageLvlIdx] := #udt_Blk.str_Static.n_loaded; // Für Sortierung merken
|
||||
#str_TempBlk.arr_Indizes[#udt_Blk.str_Static.n_StorageLvlIdx] := #udt_Blk.str_Static.n_StorageLvlIdx; // Ursprünglichen Index merken
|
||||
|
||||
END_FOR;
|
||||
|
||||
// Sortieren nach Füllgrad (absteigend)
|
||||
FOR #udt_Blk.str_Static.n_StorageLvlIdx := 1 TO "cNoLines"(* 18 *) DO
|
||||
FOR #udt_Blk.str_Static.n_HelpIDX := #udt_Blk.str_Static.n_StorageLvlIdx + 1 TO "cNoLines"(* 19 *) DO
|
||||
IF #str_TempBlk.arr_StorageLvl[#udt_Blk.str_Static.n_StorageLvlIdx] < #str_TempBlk.arr_StorageLvl[#udt_Blk.str_Static.n_HelpIDX]
|
||||
// Wenn aktueller Füllgrad kleiner als nächster, dann tauschen
|
||||
THEN
|
||||
//Füllgrad tauschen
|
||||
#str_TempBlk.tmpValue := #str_TempBlk.arr_StorageLvl[#udt_Blk.str_Static.n_StorageLvlIdx];
|
||||
#str_TempBlk.arr_StorageLvl[#udt_Blk.str_Static.n_StorageLvlIdx] := #str_TempBlk.arr_StorageLvl[#udt_Blk.str_Static.n_HelpIDX];
|
||||
#str_TempBlk.arr_StorageLvl[#udt_Blk.str_Static.n_HelpIDX] := #str_TempBlk.tmpValue;
|
||||
|
||||
//Indizes mitziehen
|
||||
#str_TempBlk.tmpIDX := #str_TempBlk.arr_Indizes[#udt_Blk.str_Static.n_StorageLvlIdx];
|
||||
#str_TempBlk.arr_Indizes[#udt_Blk.str_Static.n_StorageLvlIdx] := #str_TempBlk.arr_Indizes[#udt_Blk.str_Static.n_HelpIDX];
|
||||
#str_TempBlk.arr_Indizes[#udt_Blk.str_Static.n_HelpIDX] := #str_TempBlk.tmpIDX;
|
||||
|
||||
END_IF;
|
||||
|
||||
END_FOR;
|
||||
|
||||
;
|
||||
END_FOR;
|
||||
|
||||
//Ergebnis zuweisen
|
||||
#udt_Blk.str_State.arr_OrderLines := #str_TempBlk.arr_Indizes; // Sortierte Indizes in den Output schreiben
|
||||
#udt_Blk.str_State.n_LineMAX := #str_TempBlk.arr_Indizes[1]; // Index der Linie mit dem höchsten Füllgrad (an erster Stelle)
|
||||
|
||||
|
||||
//Output Mapping
|
||||
#str_OutState := #udt_Blk.str_State;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
END_FUNCTION_BLOCK
|
||||
|
||||
+107
@@ -0,0 +1,107 @@
|
||||
FUNCTION_BLOCK "FB_LineLvlAnalyze"
|
||||
{ S7_Optimized_Access := 'TRUE' }
|
||||
VERSION : 0.1
|
||||
VAR_INPUT
|
||||
arLineBlk { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Array[1.."cNoLines"] of "stStorageLine"; // Daten pro Linie
|
||||
END_VAR
|
||||
|
||||
VAR_OUTPUT
|
||||
str_OutState : Struct
|
||||
n_LineMAX : USInt;
|
||||
arr_OrderLines : Array[1.."cNoLines"] of USInt;
|
||||
arr_StorageLvl : Array[1.."cNoLines"] of USInt;
|
||||
END_STRUCT;
|
||||
END_VAR
|
||||
|
||||
VAR
|
||||
udt_Blk { S7_SetPoint := 'False'} : "udt_LineStoreAnalyse";
|
||||
END_VAR
|
||||
|
||||
VAR_TEMP
|
||||
str_TempBlk : Struct
|
||||
tmpValue : Int;
|
||||
tmpIDX : Int;
|
||||
arr_StorageLvl : Array[1.."cNoLines"] of USInt;
|
||||
arr_Indizes : Array[1.."cNoLines"] of USInt;
|
||||
END_STRUCT;
|
||||
END_VAR
|
||||
|
||||
|
||||
BEGIN
|
||||
|
||||
REGION Info
|
||||
(* Company: Schönenberger Systeme GmbH / (C) Copyright (2022). All rights reserved.
|
||||
-----------------------------------------------------------------------------------------
|
||||
Title: FB_LineLvlAnalyze
|
||||
Comment/Function: Analyze storage level
|
||||
Library/Family: -
|
||||
Author: department: "Automatisierung" ; person in charge / contact: C.Nottelmann (Automated Intelligence)
|
||||
Target System: CPU 1518F-4 PN/DP
|
||||
Engineering: TIA Portal V20
|
||||
Restrictions: -
|
||||
Requirements: -
|
||||
-----------------------------------------------------------------------------------------
|
||||
Change log table:
|
||||
Version | Date | Signature (Safety) | Expert in charge | Changes applied
|
||||
------------|------------|--------------------|------------------|-----------------------
|
||||
001.000.000 | 2025-08-26 | - | | Header added on 26.08.2025
|
||||
|
||||
*)
|
||||
END_REGION
|
||||
|
||||
|
||||
|
||||
// Füllgrad der Linien auswerten
|
||||
FOR #udt_Blk.str_Static.n_StorageLvlIdx := 1 TO "cNoLines"(* 19 *) DO
|
||||
#udt_Blk.str_Static.n_loaded := 0; // Zähler zurücksetzen
|
||||
FOR #udt_Blk.str_Static.n_HelpIDX := 1 TO "cNoPositions"(* 108 *) DO
|
||||
IF #arLineBlk[#udt_Blk.str_Static.n_StorageLvlIdx].arCarrier[#udt_Blk.str_Static.n_HelpIDX].nBarcode <> 0 // Wenn Barcode ungleich 0, ist die Position belegt
|
||||
THEN
|
||||
#udt_Blk.str_Static.n_loaded += 1; // Zähler erhöhen
|
||||
END_IF;
|
||||
END_FOR;
|
||||
|
||||
|
||||
#udt_Blk.str_State.arr_StorageLvl[#udt_Blk.str_Static.n_StorageLvlIdx] := #udt_Blk.str_Static.n_loaded; // Ergebnis in Output schreiben
|
||||
#str_TempBlk.arr_StorageLvl[#udt_Blk.str_Static.n_StorageLvlIdx] := #udt_Blk.str_Static.n_loaded; // Für Sortierung merken
|
||||
#str_TempBlk.arr_Indizes[#udt_Blk.str_Static.n_StorageLvlIdx] := #udt_Blk.str_Static.n_StorageLvlIdx; // Ursprünglichen Index merken
|
||||
|
||||
END_FOR;
|
||||
|
||||
// Sortieren nach Füllgrad (absteigend)
|
||||
FOR #udt_Blk.str_Static.n_StorageLvlIdx := 1 TO "cNoLines"(* 18 *) DO
|
||||
FOR #udt_Blk.str_Static.n_HelpIDX := #udt_Blk.str_Static.n_StorageLvlIdx + 1 TO "cNoLines"(* 19 *) DO
|
||||
IF #str_TempBlk.arr_StorageLvl[#udt_Blk.str_Static.n_StorageLvlIdx] < #str_TempBlk.arr_StorageLvl[#udt_Blk.str_Static.n_HelpIDX]
|
||||
// Wenn aktueller Füllgrad kleiner als nächster, dann tauschen
|
||||
THEN
|
||||
//Füllgrad tauschen
|
||||
#str_TempBlk.tmpValue := #str_TempBlk.arr_StorageLvl[#udt_Blk.str_Static.n_StorageLvlIdx];
|
||||
#str_TempBlk.arr_StorageLvl[#udt_Blk.str_Static.n_StorageLvlIdx] := #str_TempBlk.arr_StorageLvl[#udt_Blk.str_Static.n_HelpIDX];
|
||||
#str_TempBlk.arr_StorageLvl[#udt_Blk.str_Static.n_HelpIDX] := #str_TempBlk.tmpValue;
|
||||
|
||||
//Indizes mitziehen
|
||||
#str_TempBlk.tmpIDX := #str_TempBlk.arr_Indizes[#udt_Blk.str_Static.n_StorageLvlIdx];
|
||||
#str_TempBlk.arr_Indizes[#udt_Blk.str_Static.n_StorageLvlIdx] := #str_TempBlk.arr_Indizes[#udt_Blk.str_Static.n_HelpIDX];
|
||||
#str_TempBlk.arr_Indizes[#udt_Blk.str_Static.n_HelpIDX] := #str_TempBlk.tmpIDX;
|
||||
|
||||
END_IF;
|
||||
|
||||
END_FOR;
|
||||
|
||||
;
|
||||
END_FOR;
|
||||
|
||||
//Ergebnis zuweisen
|
||||
#udt_Blk.str_State.arr_OrderLines := #str_TempBlk.arr_Indizes; // Sortierte Indizes in den Output schreiben
|
||||
#udt_Blk.str_State.n_LineMAX := #str_TempBlk.arr_Indizes[1]; // Index der Linie mit dem höchsten Füllgrad (an erster Stelle)
|
||||
|
||||
|
||||
//Output Mapping
|
||||
#str_OutState := #udt_Blk.str_State;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
END_FUNCTION_BLOCK
|
||||
|
||||
+196
@@ -0,0 +1,196 @@
|
||||
FUNCTION_BLOCK "FB_Lvl1AdditionalRouting"
|
||||
{ S7_Optimized_Access := 'TRUE' }
|
||||
VERSION : 0.1
|
||||
VAR_INPUT
|
||||
udt_IN_MES : "UDT_Payload_CReqM";
|
||||
x_CarrierLoaded : Bool;
|
||||
xF2HEmptyCarrierNeeded : Bool;
|
||||
xAMREmptyCarrierNeeded : Bool;
|
||||
END_VAR
|
||||
|
||||
VAR_IN_OUT
|
||||
arCarrier : Array[*] of "stCarrier";
|
||||
END_VAR
|
||||
|
||||
VAR
|
||||
nSequence : Int;
|
||||
nBarcodeSave : DInt;
|
||||
END_VAR
|
||||
|
||||
VAR_TEMP
|
||||
nTempUpperBound : DInt;
|
||||
nTempLowerBound : DInt;
|
||||
END_VAR
|
||||
|
||||
VAR CONSTANT
|
||||
c000Wait : Int := 0;
|
||||
c002SaveBarcode : Int := 2;
|
||||
c010AnalyzeCarrier : Int := 10;
|
||||
c020SetDestination : Int := 20;
|
||||
c030WaitCarrierGone : Int := 30;
|
||||
c120AnalyzeEmptyNeeded : Int := 120;
|
||||
END_VAR
|
||||
|
||||
|
||||
BEGIN
|
||||
|
||||
REGION Info
|
||||
(* Company: Schönenberger Systeme GmbH / (C) Copyright (2022). All rights reserved.
|
||||
-----------------------------------------------------------------------------------------
|
||||
Title: FB_Lvl1AdditionalRouting
|
||||
Comment/Function: Desitnation for Carrier in lvl 1
|
||||
Library/Family: -
|
||||
Author: department: "Automatisierung" ; person in charge / contact: C.Nottelmann (Automated Intelligence)
|
||||
Target System: CPU 1518F-4 PN/DP
|
||||
Engineering: TIA Portal V20
|
||||
Restrictions: -
|
||||
Requirements: -
|
||||
-----------------------------------------------------------------------------------------
|
||||
Change log table:
|
||||
Version | Date | Signature (Safety) | Expert in charge | Changes applied
|
||||
------------|------------|--------------------|------------------|-----------------------
|
||||
001.000.000 | 2025-10-16 | - | | Header added on 16.10.2025
|
||||
|
||||
*)
|
||||
END_REGION
|
||||
|
||||
REGION
|
||||
|
||||
//Scan Result von UH05 erforderlich
|
||||
|
||||
|
||||
END_REGION
|
||||
|
||||
REGION Check Array Size
|
||||
|
||||
#nTempLowerBound := LOWER_BOUND(ARR := #arCarrier, DIM := 1);
|
||||
#nTempUpperBound := UPPER_BOUND(ARR := #arCarrier, DIM := 1);
|
||||
|
||||
|
||||
END_REGION
|
||||
|
||||
|
||||
|
||||
REGION Sequence
|
||||
|
||||
CASE #nSequence OF
|
||||
#c000Wait:
|
||||
//Action
|
||||
|
||||
|
||||
//Transition
|
||||
IF #arCarrier[#nTempLowerBound].nBarcode >0
|
||||
AND #arCarrier[#nTempLowerBound].nBarcode <> #nBarcodeSave
|
||||
THEN
|
||||
#nSequence := #c002SaveBarcode;
|
||||
END_IF;
|
||||
|
||||
#c002SaveBarcode:
|
||||
//Action
|
||||
#nBarcodeSave := #arCarrier[#nTempLowerBound].nBarcode;
|
||||
|
||||
//Transition
|
||||
#nSequence := #c010AnalyzeCarrier;
|
||||
|
||||
#c010AnalyzeCarrier:
|
||||
//Action
|
||||
IF #x_CarrierLoaded AND #arCarrier[#nTempLowerBound].bStatus.%X0
|
||||
THEN
|
||||
#arCarrier[#nTempLowerBound].bStatus.%X1 := True;
|
||||
END_IF;
|
||||
|
||||
//Transition
|
||||
IF #arCarrier[#nTempLowerBound].bStatus.%X1
|
||||
THEN
|
||||
#nSequence := #c020SetDestination;
|
||||
ELSIF NOT #arCarrier[#nTempLowerBound].bStatus.%X1
|
||||
THEN
|
||||
#nSequence := #c120AnalyzeEmptyNeeded;
|
||||
ELSIF NOT #arCarrier[#nTempLowerBound].bStatus.%X0
|
||||
THEN
|
||||
#nSequence := #c000Wait;
|
||||
END_IF;
|
||||
|
||||
//Wenn Loaded -> Destination von MES
|
||||
//Wenn nicht Loaded -> Prüfen über Schnittstelle ob F2H oder AMR Carrier braucht
|
||||
//Wenn nicht Ziel Jam1110_1
|
||||
//
|
||||
|
||||
#c020SetDestination:
|
||||
//Action
|
||||
IF #arCarrier[#nTempLowerBound].nBarcode = #udt_IN_MES.nBarcode
|
||||
THEN
|
||||
#arCarrier[#nTempLowerBound].nDestination := DINT_TO_INT( #udt_IN_MES.nDestination);
|
||||
END_IF;
|
||||
|
||||
//Transition
|
||||
IF #arCarrier[#nTempLowerBound].nDestination > 0
|
||||
THEN
|
||||
#nSequence := #c030WaitCarrierGone;
|
||||
ELSIF NOT #arCarrier[#nTempLowerBound].bStatus.%X0
|
||||
THEN
|
||||
#nSequence := #c000Wait;
|
||||
END_IF;
|
||||
|
||||
#c030WaitCarrierGone:
|
||||
//Action
|
||||
|
||||
|
||||
//Transition
|
||||
IF NOT #arCarrier[#nTempLowerBound].bStatus.%X0
|
||||
OR #arCarrier[#nTempLowerBound].nBarcode <> #nBarcodeSave
|
||||
THEN
|
||||
#nSequence := #c000Wait;
|
||||
END_IF;
|
||||
|
||||
#c120AnalyzeEmptyNeeded:
|
||||
//Action
|
||||
IF #xAMREmptyCarrierNeeded THEN
|
||||
#arCarrier[#nTempLowerBound].bStatus.%X8 := True;
|
||||
ELSIF #xF2HEmptyCarrierNeeded THEN
|
||||
#arCarrier[#nTempLowerBound].bStatus.%X9 := True;
|
||||
END_IF;
|
||||
|
||||
//Transition
|
||||
IF #arCarrier[#nTempLowerBound].bStatus.%X8 OR
|
||||
#arCarrier[#nTempLowerBound].bStatus.%X9
|
||||
THEN
|
||||
#nSequence := #c030WaitCarrierGone;
|
||||
ELSIF NOT #arCarrier[#nTempLowerBound].bStatus.%X0
|
||||
OR #arCarrier[#nTempLowerBound].nBarcode <> #nBarcodeSave
|
||||
THEN
|
||||
#nSequence := #c000Wait;
|
||||
END_IF;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
END_CASE;
|
||||
|
||||
|
||||
|
||||
|
||||
END_REGION
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
END_FUNCTION_BLOCK
|
||||
|
||||
+374
@@ -0,0 +1,374 @@
|
||||
FUNCTION_BLOCK "FB_RearrangeSequencer"
|
||||
{ S7_Optimized_Access := 'TRUE' }
|
||||
VERSION : 0.1
|
||||
VAR_INPUT
|
||||
x_In_Reset : Bool;
|
||||
n_In_BlockID : Int;
|
||||
END_VAR
|
||||
|
||||
VAR_IN_OUT
|
||||
udt_InOutStorageSite : "udt_StorageSite";
|
||||
END_VAR
|
||||
|
||||
VAR
|
||||
arrint_PairA : Array[1..4] of Int;
|
||||
arrint_PairB : Array[1..4] of Int;
|
||||
xFoundPair : Bool;
|
||||
xFoundSingle : Bool;
|
||||
nNextPair : Int;
|
||||
nNextSingle : Int;
|
||||
nStartPair : Int;
|
||||
nCheckPair : Int;
|
||||
nPairIdx : Int;
|
||||
nStartSingle : Int;
|
||||
nCheckSingle : Int;
|
||||
nSingleIdx : Int;
|
||||
arrGlobalIndexOfBlockPos : Array[0..4] of Int;
|
||||
nBlockPosIdx : Int;
|
||||
nGlobalStorageIdx : Int;
|
||||
END_VAR
|
||||
|
||||
VAR_TEMP
|
||||
nPairLoopIndex : Int;
|
||||
nStartPairIndex : Int;
|
||||
nCheckPairIndex : Int;
|
||||
nSingleLoopIndex : Int;
|
||||
nStartSingleIndex : Int;
|
||||
nCheckSingleIndex : Int;
|
||||
ActivePosA : Int; // aktuelle aktive Position A im Block (1–4)
|
||||
ActivePosB : Int; // aktuelle aktive Position B im Block (1–4)
|
||||
GlobalIndexA : Int; // globaler Index des aktiven Lagers A (1–12)
|
||||
GlobalIndexB : Int; // globaler Index des aktiven Lagers B (1–12)
|
||||
END_VAR
|
||||
|
||||
|
||||
BEGIN
|
||||
|
||||
REGION Info
|
||||
(* Company: Schönenberger Systeme GmbH / (C) Copyright (2022). All rights reserved.
|
||||
-----------------------------------------------------------------------------------------
|
||||
Title: FB_rearrangeSequencer
|
||||
Comment/Function: Manage the rearrange releases
|
||||
Library/Family: -
|
||||
Author: department: "Automatisierung" ; person in charge / contact: C.Nottelmann (Automated Intelligence)
|
||||
Target System: CPU 1518F-4 PN/DP
|
||||
Engineering: TIA Portal V20
|
||||
Restrictions: -
|
||||
Requirements: -
|
||||
-----------------------------------------------------------------------------------------
|
||||
Change log table:
|
||||
Version | Date | Signature (Safety) | Expert in charge | Changes applied
|
||||
------------|------------|--------------------|------------------|-----------------------
|
||||
001.000.000 | 2025-11-10 | - | | Header added on 10.11.2025
|
||||
|
||||
*)
|
||||
END_REGION
|
||||
|
||||
|
||||
|
||||
REGION Allowed Combinations
|
||||
|
||||
// erlaubte Paare in Block-Positionen
|
||||
// Pair A [1, 2, 2, 1]
|
||||
#arrint_PairA[1] := 1;
|
||||
#arrint_PairA[2] := 2;
|
||||
#arrint_PairA[3] := 2;
|
||||
#arrint_PairA[4] := 1;
|
||||
|
||||
// Pair B [3, 4, 3, 4]
|
||||
#arrint_PairB[1] := 3;
|
||||
#arrint_PairB[2] := 4;
|
||||
#arrint_PairB[3] := 3;
|
||||
#arrint_PairB[4] := 4;
|
||||
|
||||
|
||||
END_REGION
|
||||
|
||||
REGION Block Mapping
|
||||
|
||||
// Block 1: Lager 1..4 → Pos 1..4
|
||||
#udt_InOutStorageSite.arrudt_Storage[1].udt_RearrangeStorageCtrl.nBlockID := 1;
|
||||
#udt_InOutStorageSite.arrudt_Storage[1].udt_RearrangeStorageCtrl.nPosInBlock := 1;
|
||||
#udt_InOutStorageSite.arrudt_Storage[2].udt_RearrangeStorageCtrl.nBlockID := 1;
|
||||
#udt_InOutStorageSite.arrudt_Storage[2].udt_RearrangeStorageCtrl.nPosInBlock := 2;
|
||||
#udt_InOutStorageSite.arrudt_Storage[3].udt_RearrangeStorageCtrl.nBlockID := 1;
|
||||
#udt_InOutStorageSite.arrudt_Storage[3].udt_RearrangeStorageCtrl.nPosInBlock := 3;
|
||||
#udt_InOutStorageSite.arrudt_Storage[4].udt_RearrangeStorageCtrl.nBlockID := 1;
|
||||
#udt_InOutStorageSite.arrudt_Storage[4].udt_RearrangeStorageCtrl.nPosInBlock := 4;
|
||||
|
||||
// Block 2: Lager 5..8 → Pos 1..4
|
||||
#udt_InOutStorageSite.arrudt_Storage[5].udt_RearrangeStorageCtrl.nBlockID := 2;
|
||||
#udt_InOutStorageSite.arrudt_Storage[5].udt_RearrangeStorageCtrl.nPosInBlock := 1;
|
||||
#udt_InOutStorageSite.arrudt_Storage[6].udt_RearrangeStorageCtrl.nBlockID := 2;
|
||||
#udt_InOutStorageSite.arrudt_Storage[6].udt_RearrangeStorageCtrl.nPosInBlock := 2;
|
||||
#udt_InOutStorageSite.arrudt_Storage[7].udt_RearrangeStorageCtrl.nBlockID := 2;
|
||||
#udt_InOutStorageSite.arrudt_Storage[7].udt_RearrangeStorageCtrl.nPosInBlock := 3;
|
||||
#udt_InOutStorageSite.arrudt_Storage[8].udt_RearrangeStorageCtrl.nBlockID := 2;
|
||||
#udt_InOutStorageSite.arrudt_Storage[8].udt_RearrangeStorageCtrl.nPosInBlock := 4;
|
||||
|
||||
// Block 3: Lager 9..12 → Pos 1..4
|
||||
#udt_InOutStorageSite.arrudt_Storage[9].udt_RearrangeStorageCtrl.nBlockID := 3;
|
||||
#udt_InOutStorageSite.arrudt_Storage[9].udt_RearrangeStorageCtrl.nPosInBlock := 1;
|
||||
#udt_InOutStorageSite.arrudt_Storage[10].udt_RearrangeStorageCtrl.nBlockID := 3;
|
||||
#udt_InOutStorageSite.arrudt_Storage[10].udt_RearrangeStorageCtrl.nPosInBlock := 2;
|
||||
#udt_InOutStorageSite.arrudt_Storage[11].udt_RearrangeStorageCtrl.nBlockID := 3;
|
||||
#udt_InOutStorageSite.arrudt_Storage[11].udt_RearrangeStorageCtrl.nPosInBlock := 3;
|
||||
#udt_InOutStorageSite.arrudt_Storage[12].udt_RearrangeStorageCtrl.nBlockID := 3;
|
||||
#udt_InOutStorageSite.arrudt_Storage[12].udt_RearrangeStorageCtrl.nPosInBlock := 4;
|
||||
|
||||
|
||||
|
||||
|
||||
END_REGION
|
||||
|
||||
|
||||
|
||||
REGION Logik
|
||||
|
||||
|
||||
|
||||
// ---- Reset ----
|
||||
IF #x_In_Reset THEN
|
||||
#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiceOne := 0;
|
||||
#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiveTwo := 0;
|
||||
#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.xIsPair := FALSE;
|
||||
#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nLastPairSelected := 0;
|
||||
#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nLastSingle := 0;
|
||||
|
||||
// Grants im Block zurücksetzen
|
||||
FOR #nGlobalStorageIdx := 1 TO 12 DO
|
||||
IF #udt_InOutStorageSite.arrudt_Storage[#nGlobalStorageIdx].udt_RearrangeStorageCtrl.nBlockID = #n_In_BlockID THEN
|
||||
#udt_InOutStorageSite.arrudt_Storage[#nGlobalStorageIdx].udt_RearrangeStorageState.xRearrangeGrant := FALSE;
|
||||
#udt_InOutStorageSite.arrudt_Storage[#nGlobalStorageIdx].udt_RearrangeStorageState.xIsInPair := FALSE;
|
||||
END_IF;
|
||||
END_FOR;
|
||||
|
||||
ELSE
|
||||
// ---- Mapping: finde globale Lager-Indices für Pos 1..4 dieses Blocks ----
|
||||
FOR #nBlockPosIdx := 1 TO 4 DO
|
||||
#arrGlobalIndexOfBlockPos[#nBlockPosIdx] := 0;
|
||||
FOR #nGlobalStorageIdx := 1 TO 12 DO
|
||||
IF (#udt_InOutStorageSite.arrudt_Storage[#nGlobalStorageIdx].udt_RearrangeStorageCtrl.nBlockID = #n_In_BlockID)
|
||||
AND (#udt_InOutStorageSite.arrudt_Storage[#nGlobalStorageIdx].udt_RearrangeStorageCtrl.nPosInBlock = #nBlockPosIdx) THEN
|
||||
#arrGlobalIndexOfBlockPos[#nBlockPosIdx] := #nGlobalStorageIdx;
|
||||
EXIT;
|
||||
END_IF;
|
||||
END_FOR;
|
||||
END_FOR;
|
||||
|
||||
// ---- Kandidatensuche: Paar (beide UML-Req und ggf. Block-Ready) ----
|
||||
#xFoundPair := FALSE;
|
||||
#nNextPair := 0;
|
||||
//Startindex bestimmen
|
||||
#nStartPair := #udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nLastPairSelected + 1;
|
||||
IF #nStartPair > 4 THEN
|
||||
#nStartPair := 1;
|
||||
END_IF;
|
||||
|
||||
#nCheckPair := #nStartPair;
|
||||
// Schleife über alle 4 möglichen Paar-Kombinationen (1,3), (2,4), (2,3), (1,4)
|
||||
FOR #nPairLoopIndex := 1 TO 4 DO
|
||||
// Prüfen, ob beide Positionen im Block gültig belegt sind
|
||||
IF (#arrGlobalIndexOfBlockPos[#arrint_PairA[#nCheckPair]] <> 0) AND (#arrGlobalIndexOfBlockPos[#arrint_PairB[#nCheckPair]] <> 0)
|
||||
THEN
|
||||
// Beide Lager aktiviert und haben Umlageranforderung?
|
||||
IF #udt_InOutStorageSite.arrudt_Storage[#arrGlobalIndexOfBlockPos[#arrint_PairA[#nCheckPair]]].udt_RearrangeStorageCtrl.xEnableReaarrange
|
||||
AND #udt_InOutStorageSite.arrudt_Storage[#arrGlobalIndexOfBlockPos[#arrint_PairB[#nCheckPair]]].udt_RearrangeStorageCtrl.xEnableReaarrange
|
||||
AND #udt_InOutStorageSite.arrudt_Storage[#arrGlobalIndexOfBlockPos[#arrint_PairA[#nCheckPair]]].udt_RearrangeStorageCtrl.xRearrangeRequest
|
||||
AND #udt_InOutStorageSite.arrudt_Storage[#arrGlobalIndexOfBlockPos[#arrint_PairB[#nCheckPair]]].udt_RearrangeStorageCtrl.xRearrangeRequest
|
||||
AND (NOT #udt_InOutStorageSite.arrudt_Storage[ #arrGlobalIndexOfBlockPos[ #arrint_PairA[#nCheckPair] ] ].udt_RearrangeStorageState.xRemoveGrant) AND
|
||||
(NOT #udt_InOutStorageSite.arrudt_Storage[ #arrGlobalIndexOfBlockPos[ #arrint_PairB[#nCheckPair] ] ].udt_RearrangeStorageState.xRemoveGrant) AND
|
||||
(NOT #udt_InOutStorageSite.arrudt_Storage[ #arrGlobalIndexOfBlockPos[ #arrint_PairA[#nCheckPair] ] ].udt_RearrangeStorageState.xRemoveBusy) AND
|
||||
(NOT #udt_InOutStorageSite.arrudt_Storage[ #arrGlobalIndexOfBlockPos[ #arrint_PairB[#nCheckPair] ] ].udt_RearrangeStorageState.xRemoveBusy)
|
||||
AND (NOT #udt_InOutStorageSite.arrudt_Storage[#arrGlobalIndexOfBlockPos[#arrint_PairA[#nCheckPair]]].udt_RearrangeStorageState.xEmptyBusy)
|
||||
AND (NOT #udt_InOutStorageSite.arrudt_Storage[#arrGlobalIndexOfBlockPos[#arrint_PairB[#nCheckPair]]].udt_RearrangeStorageState.xEmptyBusy)
|
||||
|
||||
THEN
|
||||
// optional: Block muss für Umlagern bereit sein
|
||||
IF (#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupCtrl.xReadyRearrange) THEN
|
||||
#nNextPair := #nCheckPair;
|
||||
#xFoundPair := TRUE;
|
||||
EXIT;
|
||||
END_IF;
|
||||
END_IF;
|
||||
END_IF;
|
||||
#nCheckPair := #nCheckPair + 1;
|
||||
IF #nCheckPair > 4 THEN
|
||||
#nCheckPair := 1;
|
||||
END_IF;
|
||||
END_FOR;
|
||||
|
||||
|
||||
// ---- Kandidatensuche: Single (falls kein Paar) ----
|
||||
#xFoundSingle := FALSE;
|
||||
#nNextSingle := 0;
|
||||
IF NOT #xFoundPair THEN
|
||||
#nStartSingle := #udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nLastSingle + 1;
|
||||
IF #nStartSingle > 4 THEN
|
||||
#nStartSingle := 1;
|
||||
END_IF;
|
||||
#nCheckSingle := #nStartSingle;
|
||||
FOR #nSingleIdx := 1 TO 4 DO
|
||||
IF (#arrGlobalIndexOfBlockPos[#nCheckSingle] <> 0)
|
||||
AND #udt_InOutStorageSite.arrudt_Storage[#arrGlobalIndexOfBlockPos[#nCheckSingle]].udt_RearrangeStorageCtrl.xEnableReaarrange
|
||||
AND #udt_InOutStorageSite.arrudt_Storage[#arrGlobalIndexOfBlockPos[#nCheckSingle]].udt_RearrangeStorageCtrl.xRearrangeRequest
|
||||
AND #udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupCtrl.xReadyRearrange AND
|
||||
// Interlocks: keine parallele Auslager-Aktivität/Grant
|
||||
(NOT #udt_InOutStorageSite.arrudt_Storage[ #arrGlobalIndexOfBlockPos[#nCheckSingle] ].udt_RearrangeStorageState.xRemoveGrant) AND
|
||||
(NOT #udt_InOutStorageSite.arrudt_Storage[ #arrGlobalIndexOfBlockPos[#nCheckSingle] ].udt_RearrangeStorageState.xRemoveBusy)
|
||||
THEN
|
||||
#nNextSingle := #nCheckSingle;
|
||||
#xFoundSingle := TRUE;
|
||||
EXIT;
|
||||
END_IF;
|
||||
#nCheckSingle := #nCheckSingle + 1;
|
||||
IF #nCheckSingle > 4 THEN
|
||||
#nCheckSingle := 1;
|
||||
END_IF;
|
||||
END_FOR;
|
||||
END_IF;
|
||||
|
||||
|
||||
// ---- Zustand aktualisieren ----
|
||||
// aktiv laufende Grants auf diesen Block bezogen pflegen
|
||||
// (Mitglieder dürfen unabhängig fertig werden)
|
||||
//
|
||||
// A)
|
||||
// Wenn nichts aktiv: starten (Paar vor Single)
|
||||
|
||||
IF (#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiceOne = 0)
|
||||
AND (#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiveTwo = 0) THEN
|
||||
// alle Grants dieses Blocks resetten
|
||||
FOR #nBlockPosIdx := 1 TO 4 DO
|
||||
IF #arrGlobalIndexOfBlockPos[#nBlockPosIdx] <> 0 THEN
|
||||
#udt_InOutStorageSite.arrudt_Storage[#arrGlobalIndexOfBlockPos[#nBlockPosIdx]].udt_RearrangeStorageState.xRearrangeGrant := FALSE;
|
||||
#udt_InOutStorageSite.arrudt_Storage[#arrGlobalIndexOfBlockPos[#nBlockPosIdx]].udt_RearrangeStorageState.xIsInPair := FALSE;
|
||||
END_IF;
|
||||
END_FOR;
|
||||
// Paar gefunden
|
||||
IF #xFoundPair THEN
|
||||
#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiceOne := #arrint_PairA[#nNextPair];
|
||||
#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiveTwo := #arrint_PairB[#nNextPair];
|
||||
#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.xIsPair := TRUE;
|
||||
|
||||
// Grants setzen
|
||||
IF #arrGlobalIndexOfBlockPos[#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiceOne] <> 0 THEN
|
||||
#udt_InOutStorageSite.arrudt_Storage[#arrGlobalIndexOfBlockPos[#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiceOne]].udt_RearrangeStorageState.xRearrangeGrant := TRUE;
|
||||
#udt_InOutStorageSite.arrudt_Storage[#arrGlobalIndexOfBlockPos[#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiceOne]].udt_RearrangeStorageState.xIsInPair := TRUE;
|
||||
END_IF;
|
||||
IF #arrGlobalIndexOfBlockPos[#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiveTwo] <> 0 THEN
|
||||
#udt_InOutStorageSite.arrudt_Storage[#arrGlobalIndexOfBlockPos[#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiveTwo]].udt_RearrangeStorageState.xRearrangeGrant := TRUE;
|
||||
#udt_InOutStorageSite.arrudt_Storage[#arrGlobalIndexOfBlockPos[#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiveTwo]].udt_RearrangeStorageState.xIsInPair := TRUE;
|
||||
END_IF;
|
||||
//Single gefunden
|
||||
ELSIF #xFoundSingle THEN
|
||||
#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiceOne := #nNextSingle;
|
||||
#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiveTwo := 0;
|
||||
#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.xIsPair := FALSE;
|
||||
|
||||
IF #arrGlobalIndexOfBlockPos[#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiceOne] <> 0 THEN
|
||||
#udt_InOutStorageSite.arrudt_Storage[#arrGlobalIndexOfBlockPos[#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiceOne]].udt_RearrangeStorageState.xRearrangeGrant := TRUE;
|
||||
#udt_InOutStorageSite.arrudt_Storage[#arrGlobalIndexOfBlockPos[#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiceOne]].udt_RearrangeStorageState.xIsInPair := FALSE;
|
||||
END_IF;
|
||||
END_IF;
|
||||
|
||||
// B)
|
||||
// Wenn aktiv: Fortschritt überwachen, Mitglieder ggf. freigeben
|
||||
ELSE
|
||||
// aktive globale Indizes ermitteln
|
||||
#ActivePosA := #udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiceOne;
|
||||
#ActivePosB := #udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiveTwo;
|
||||
|
||||
#GlobalIndexA := 0;
|
||||
#GlobalIndexB := 0;
|
||||
|
||||
IF (#ActivePosA >= 1) AND (#ActivePosA <= 4) THEN
|
||||
#GlobalIndexA := #arrGlobalIndexOfBlockPos[#ActivePosA];
|
||||
END_IF;
|
||||
|
||||
IF (#ActivePosB >= 1) AND (#ActivePosB <= 4) THEN
|
||||
#GlobalIndexB := #arrGlobalIndexOfBlockPos[#ActivePosB];
|
||||
END_IF;
|
||||
|
||||
// Mitglied A fertig?
|
||||
IF (#GlobalIndexA <> 0) THEN //nur reingehen wenn <> 0
|
||||
IF #udt_InOutStorageSite.arrudt_Storage[#GlobalIndexA].udt_RearrangeStorageState.xRearrangeGrant
|
||||
AND (#udt_InOutStorageSite.arrudt_Storage[#GlobalIndexA].udt_RearrangeStorageState.xRearrange_Done
|
||||
OR (NOT #udt_InOutStorageSite.arrudt_Storage[#GlobalIndexA].udt_RearrangeStorageCtrl.xRearrangeRequest)
|
||||
OR (NOT #udt_InOutStorageSite.arrudt_Storage[#GlobalIndexA].udt_RearrangeStorageCtrl.xEnableReaarrange))
|
||||
THEN
|
||||
#udt_InOutStorageSite.arrudt_Storage[#GlobalIndexA].udt_RearrangeStorageState.xRearrangeGrant := FALSE;
|
||||
#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiceOne := 0;
|
||||
END_IF;
|
||||
END_IF;
|
||||
|
||||
// Mitglied B fertig?
|
||||
IF (#GlobalIndexB <> 0) THEN //nur reingehen wenn <> 0
|
||||
IF #udt_InOutStorageSite.arrudt_Storage[#GlobalIndexB].udt_RearrangeStorageState.xRearrangeGrant
|
||||
AND (#udt_InOutStorageSite.arrudt_Storage[#GlobalIndexB].udt_RearrangeStorageState.xRearrange_Done
|
||||
OR (NOT #udt_InOutStorageSite.arrudt_Storage[#GlobalIndexB].udt_RearrangeStorageCtrl.xRearrangeRequest)
|
||||
OR (NOT #udt_InOutStorageSite.arrudt_Storage[#GlobalIndexB].udt_RearrangeStorageCtrl.xEnableReaarrange))
|
||||
THEN
|
||||
#udt_InOutStorageSite.arrudt_Storage[#GlobalIndexB].udt_RearrangeStorageState.xRearrangeGrant := FALSE;
|
||||
#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiveTwo := 0;
|
||||
END_IF;
|
||||
END_IF;
|
||||
|
||||
|
||||
// wenn beide 0 -> Abschluss & Nachfolge (Paar vor Single)
|
||||
IF (#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiceOne = 0) AND (#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiveTwo = 0) THEN
|
||||
// Fairnessmarker setzen
|
||||
IF #xFoundPair THEN
|
||||
#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nLastPairSelected := #nNextPair;
|
||||
ELSIF #xFoundSingle THEN
|
||||
#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nLastSingle := #nNextSingle;
|
||||
END_IF;
|
||||
|
||||
// direkt Nachfolge starten
|
||||
FOR #nBlockPosIdx := 1 TO 4 DO
|
||||
IF #arrGlobalIndexOfBlockPos[#nBlockPosIdx] <> 0 THEN
|
||||
#udt_InOutStorageSite.arrudt_Storage[#arrGlobalIndexOfBlockPos[#nBlockPosIdx]].udt_RearrangeStorageState.xIsInPair := FALSE;
|
||||
END_IF;
|
||||
END_FOR;
|
||||
|
||||
IF #xFoundPair THEN
|
||||
#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiceOne := #arrint_PairA[#nNextPair];
|
||||
#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiveTwo := #arrint_PairB[#nNextPair];
|
||||
#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.xIsPair := TRUE;
|
||||
|
||||
IF #arrGlobalIndexOfBlockPos[#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiceOne] <> 0 THEN
|
||||
#udt_InOutStorageSite.arrudt_Storage[#arrGlobalIndexOfBlockPos[#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiceOne]].udt_RearrangeStorageState.xRearrangeGrant := TRUE;
|
||||
#udt_InOutStorageSite.arrudt_Storage[#arrGlobalIndexOfBlockPos[#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiceOne]].udt_RearrangeStorageState.xIsInPair := TRUE;
|
||||
END_IF;
|
||||
IF #arrGlobalIndexOfBlockPos[#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiveTwo] <> 0 THEN
|
||||
#udt_InOutStorageSite.arrudt_Storage[#arrGlobalIndexOfBlockPos[#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiveTwo]].udt_RearrangeStorageState.xRearrangeGrant := TRUE;
|
||||
#udt_InOutStorageSite.arrudt_Storage[#arrGlobalIndexOfBlockPos[#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiveTwo]].udt_RearrangeStorageState.xIsInPair := TRUE;
|
||||
END_IF;
|
||||
|
||||
ELSIF #xFoundSingle THEN
|
||||
#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiceOne := #nNextSingle;
|
||||
#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiveTwo := 0;
|
||||
#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.xIsPair := FALSE;
|
||||
|
||||
IF #arrGlobalIndexOfBlockPos[#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiceOne] <> 0 THEN
|
||||
#udt_InOutStorageSite.arrudt_Storage[#arrGlobalIndexOfBlockPos[#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.nActiceOne]].udt_RearrangeStorageState.xRearrangeGrant := TRUE;
|
||||
END_IF;
|
||||
ELSE
|
||||
#udt_InOutStorageSite.arrudt_BlockGroup[#n_In_BlockID].udt_BlockGroupState.xIsPair := FALSE;
|
||||
END_IF;
|
||||
END_IF;
|
||||
END_IF;
|
||||
END_IF;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
END_REGION
|
||||
END_FUNCTION_BLOCK
|
||||
|
||||
+96
@@ -0,0 +1,96 @@
|
||||
FUNCTION_BLOCK "FB_RearrangeStartCoordination"
|
||||
{ S7_Optimized_Access := 'TRUE' }
|
||||
VERSION : 0.1
|
||||
VAR_INPUT
|
||||
xInReset : Bool;
|
||||
xInRearrangeStartDelay : Time;
|
||||
END_VAR
|
||||
|
||||
VAR_IN_OUT
|
||||
udt_InOutStorageSite : "udt_StorageSite";
|
||||
END_VAR
|
||||
|
||||
VAR
|
||||
arrbMarkLatch : Array[1..12] of Bool;
|
||||
arrtonUmlStart {InstructionName := 'TON_TIME'; LibVersion := '1.0'; S7_SetPoint := 'False'} : Array[1..12] of TON_TIME;
|
||||
nLagerIndex { S7_SetPoint := 'True'} : Int;
|
||||
nblkId : Int;
|
||||
END_VAR
|
||||
|
||||
|
||||
BEGIN
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// -------- Reset ----------
|
||||
IF #xInReset THEN
|
||||
FOR #nLagerIndex := 1 TO 12 DO
|
||||
#arrbMarkLatch[#nLagerIndex] := FALSE;
|
||||
#arrtonUmlStart[#nLagerIndex](IN := FALSE,
|
||||
PT := #xInRearrangeStartDelay);
|
||||
#udt_InOutStorageSite.arrudt_Storage[#nLagerIndex].udt_RearrangeStorageCtrl.xMarkPulse := FALSE;
|
||||
// keine Requests offen lassen ??
|
||||
// #udt_InOutStorageSite.arrudt_Storage[nLagerIndex].udt_RearrangeStorageCtrl.xRearrangeRequest := FALSE;
|
||||
END_FOR;
|
||||
END_IF;
|
||||
|
||||
|
||||
|
||||
// -------- Hauptlogik pro Lager ----------
|
||||
FOR #nLagerIndex := 1 TO 12 DO
|
||||
|
||||
// erstes Mark-Telegramm "fangen"
|
||||
IF #udt_InOutStorageSite.arrudt_Storage[#nLagerIndex].udt_RearrangeStorageCtrl.xMarkPulse AND (NOT #arrbMarkLatch[#nLagerIndex]) THEN
|
||||
// Nur starten, wenn Lager gerade nichts anderes tut
|
||||
IF (NOT #udt_InOutStorageSite.arrudt_Storage[#nLagerIndex].udt_RearrangeStorageState.xRearrangeBusy)
|
||||
AND (NOT #udt_InOutStorageSite.arrudt_Storage[#nLagerIndex].udt_RearrangeStorageState.xRearrangeGrant)
|
||||
AND (NOT #udt_InOutStorageSite.arrudt_Storage[#nLagerIndex].udt_RearrangeStorageState.xRemoveBusy)
|
||||
AND (NOT #udt_InOutStorageSite.arrudt_Storage[#nLagerIndex].udt_RearrangeStorageState.xRemoveGrant)
|
||||
AND (NOT #udt_InOutStorageSite.arrudt_Storage[#nLagerIndex].udt_RearrangeStorageState.xEmptyBusy) THEN
|
||||
#arrbMarkLatch[#nLagerIndex] := TRUE; // Zeitfenster scharf schalten
|
||||
END_IF;
|
||||
END_IF;
|
||||
|
||||
// MarkPulse verbrauchen (1-Zyklus-Impuls)
|
||||
#udt_InOutStorageSite.arrudt_Storage[#nLagerIndex].udt_RearrangeStorageCtrl.xMarkPulse := FALSE;
|
||||
|
||||
//TON läuft, solange Latch aktiv
|
||||
#arrtonUmlStart[#nLagerIndex](IN := #arrbMarkLatch[#nLagerIndex],
|
||||
PT := #xInRearrangeStartDelay);
|
||||
|
||||
// Wenn Wartezeit abgelaufen: Umlagern anfordern (UmlReq setzen)
|
||||
IF #arrtonUmlStart[#nLagerIndex].Q THEN
|
||||
#nblkId := #udt_InOutStorageSite.arrudt_Storage[#nLagerIndex].udt_RearrangeStorageCtrl.nBlockID;
|
||||
IF (#nblkId >= 1) AND (#nblkId <= 3) AND #udt_InOutStorageSite.arrudt_BlockGroup[#nblkId].udt_BlockGroupCtrl.xReadyRearrange THEN
|
||||
// Interlocks (keine Kollision mit Aus-/Empty)
|
||||
IF (NOT #udt_InOutStorageSite.arrudt_Storage[#nLagerIndex].udt_RearrangeStorageState.xRemoveBusy)
|
||||
AND (NOT #udt_InOutStorageSite.arrudt_Storage[#nLagerIndex].udt_RearrangeStorageState.xRemoveGrant)
|
||||
AND (NOT #udt_InOutStorageSite.arrudt_Storage[#nLagerIndex].udt_RearrangeStorageState.xEmptyBusy) THEN
|
||||
#udt_InOutStorageSite.arrudt_Storage[#nLagerIndex].udt_RearrangeStorageCtrl.xRearrangeRequest := TRUE; // bleibt TRUE bis angenommen
|
||||
END_IF;
|
||||
END_IF;
|
||||
END_IF;
|
||||
|
||||
// Wenn Unterlogik angenommen hat (Uml_Busy=TRUE), Fenster schließen
|
||||
IF #udt_InOutStorageSite.arrudt_Storage[#nLagerIndex].udt_RearrangeStorageState.xRearrangeBusy THEN
|
||||
#arrbMarkLatch[#nLagerIndex] := FALSE; // TON fällt ab
|
||||
// Request kann (muss nicht) zurückgenommen werden – ich empfehle:
|
||||
#udt_InOutStorageSite.arrudt_Storage[#nLagerIndex].udt_RearrangeStorageCtrl.xRearrangeRequest := FALSE;
|
||||
END_IF;
|
||||
|
||||
// Sicherheit: Nach Done definitiv Latch/Req aus
|
||||
// IF #udt_InOutStorageSite.arrudt_Storage[#nLagerIndex].udt_RearrangeStorageState.xRearrange_Done THEN
|
||||
// #arrbMarkLatch[#nLagerIndex] := FALSE;
|
||||
// #udt_InOutStorageSite.arrudt_Storage[#nLagerIndex].udt_RearrangeStorageCtrl.xRearrangeRequest := FALSE;
|
||||
// END_IF;
|
||||
|
||||
END_FOR;
|
||||
END_FUNCTION_BLOCK
|
||||
|
||||
+964
@@ -0,0 +1,964 @@
|
||||
FUNCTION_BLOCK "FB_StockRemovalBLKModul"
|
||||
{ S7_Optimized_Access := 'TRUE' }
|
||||
VERSION : 0.1
|
||||
VAR_INPUT
|
||||
n_InBlkID : UInt;
|
||||
x_InStartBlk : Bool;
|
||||
x_InQuit : Bool;
|
||||
n_JamCapacityAMR : UInt;
|
||||
n_JamCapacityAMRCriticalAmount : UInt;
|
||||
n_JamCapacityF2H : UInt;
|
||||
n_JamCapacityF2HCriticalAmount : UInt;
|
||||
n_JamCapacityEmpty : UInt;
|
||||
n_JamCapacityEmptyCriticalAmount : UInt;
|
||||
sIn_ObjectName : String[50];
|
||||
END_VAR
|
||||
|
||||
VAR_IN_OUT
|
||||
arrudt_Line : Array[1.."cNoLines"] of "stStorageLine";
|
||||
arrJamCarrier : Array[*] of "stCarrier";
|
||||
str_InOut_FillingChart : Struct
|
||||
n_BLK : Int;
|
||||
udt_LineLvlBlk : "udt_LineLvl";
|
||||
END_STRUCT;
|
||||
str_InOut_EmptyChart : Struct
|
||||
n_BLK : Int;
|
||||
udt_LineLvlBlk : "udt_LineLvl";
|
||||
END_STRUCT;
|
||||
x_Error : Bool;
|
||||
n_ErrorID : Int;
|
||||
n_ErrorBLKID : Int;
|
||||
udt_InOutMFRTRO : "UDT_MFR_StoreTRO";
|
||||
udt_HMI : "udt_LinienSortierungHMI";
|
||||
udt_INOUT_Handshake : "udt_StockRemovalBlkHandshake";
|
||||
udt_INOUT_HandshakeEmpty : "udt_StockRemovalBlkHandshake";
|
||||
udt_InOutHandshakeMessageToMes : "udt_HandshakeMessageToMES";
|
||||
END_VAR
|
||||
|
||||
VAR
|
||||
n_NextLine { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : USInt;
|
||||
n_RearrangeSequence : UInt;
|
||||
n_CollectLineIDXSave : UInt;
|
||||
n_filledLineCounter : UInt;
|
||||
tonr_StartRemoval {InstructionName := 'TONR_TIME'; LibVersion := '1.0'; S7_SetPoint := 'False'} : TONR_TIME;
|
||||
nMaxFilledLine : USInt;
|
||||
nMaxFilledLineSAve : USInt;
|
||||
n_filledLineCounter_1 : USInt;
|
||||
n_rearrangeLineCounter : USInt;
|
||||
n_CollectLineIDX : USInt;
|
||||
n_GetCarrierAmountIDX : Int;
|
||||
n_GetCarrierAmount : USInt;
|
||||
n_CheckCarrierOnListIDX : Int;
|
||||
n_StockRemovalSequence : UInt;
|
||||
n_SearchSortedBlkIDXSave : UInt;
|
||||
n_SearchSortedLineIDXSave : UInt;
|
||||
n_SearchSortedBlkIDX : USInt;
|
||||
n_SearchSortedLineIDX : USInt;
|
||||
n_DestiantionIDX : Int;
|
||||
str_CurrentTask : String[50];
|
||||
PrgAlarm_Failmessage {InstructionName := 'Program_Alarm'; LibVersion := '1.0'; S7_SetPoint := 'False'} : Program_Alarm;
|
||||
wsErrorMessage : WString[50];
|
||||
n_CurrentDonorLine : Int; // n_CurrentDonorLine
|
||||
n_CurrentDonorCount : Int; // Anzahl Carrier in dieser Donorlinie
|
||||
n_CurrentDonorType : Int; // 1=EmptyCarrier, 2=LoadedCarrier
|
||||
n_CurrentTakerLine : Int; // Aktuelle Takerlinie
|
||||
n_CurrentTakerFree : Int; // Freie Slots in der Takerlinie
|
||||
n_SelectedDonorPos : Int; // Position des Carriers in der Donorlinie
|
||||
n_SelectedTakerPos : Int; // Freier Slot in der Takerlinie
|
||||
n_RearrangedCounter : Int; // Anzahl bereits verschobener Carrier
|
||||
n_RemainingDonor : Int; // Restanzahl Carrier in Donorlinie
|
||||
n_MaxEmptyLine : Int;
|
||||
lfb_MessageToMES { S7_SetPoint := 'False'} : "FB_UpdateMessage";
|
||||
str_MessageUpdate : Struct
|
||||
str_Ctrl : Struct
|
||||
x_SendMessage : Bool;
|
||||
arrstr_MessageData : Array[1.."cNoPositions"] of Struct
|
||||
n_MessageType : USInt;
|
||||
n_PartID : DInt;
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
str_State : Struct
|
||||
x_Ready : Bool;
|
||||
x_Busy : Bool;
|
||||
x_Done : Bool;
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
udt_Handshake_intern { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'; S7_SetPoint := 'False'} : "udt_StockRemovalBlkHandshake";
|
||||
END_VAR
|
||||
|
||||
VAR_TEMP
|
||||
nTempRetVal : Int;
|
||||
tTempLocalTime {InstructionName := 'DTL'; LibVersion := '1.0'} : DTL;
|
||||
nTempCntEmpty : Int; // empty counter
|
||||
nTempCntLoaded : Int; // loaded counter
|
||||
nTempCntFree : Int; // free counter
|
||||
t_Typ : Int;
|
||||
t_donorMetric : Int;
|
||||
idxLineAnalyze : Int; // Linienindex bei Analyse (Typbestimmung)
|
||||
idxLineSearchTaker : Int; // Linienindex bei Suche nach Taker
|
||||
idxCarrierAnalyze : Int; // Carrierindex beim Analysieren einer Linie
|
||||
idxCarrierSearchTaker : Int; // Carrierindex bei Analyse einer Taker-Linie
|
||||
idxCarrierDonorFind : Int; // Carrierindex beim Finden der Quellposition (Donor)
|
||||
idxCarrierTakerFind : Int; // Carrierindex beim Finden der Zielposition (Taker)
|
||||
idxCarrierDonorCheck : Int; // Carrierindex beim Prüfen der Donor-Linie nach Umlagerung
|
||||
nTempUpperBound : DInt;
|
||||
nTempLowBound : DInt;
|
||||
END_VAR
|
||||
|
||||
VAR CONSTANT
|
||||
"~~~~~~~~MessageType~~~~~~" : Bool;
|
||||
c01_PartFound : USInt := 1;
|
||||
c02_PartNotFound : USInt := 2;
|
||||
"~~~~~~~~RearrangeSequence~~~~~" : Bool;
|
||||
c0000_Wait : UInt;
|
||||
c0005_WaitForTimer : UInt := 5;
|
||||
c0010_SearchLine : UInt := 10;
|
||||
c0020_CalculateAmount : UInt := 20;
|
||||
c0030_StartRearrange : UInt := 30;
|
||||
c0040_CheckCarrier : UInt := 40;
|
||||
c0045_SendMessage : UInt;
|
||||
c0050_ResetTRO : UInt := 50;
|
||||
c0060_CheckMoreLines : UInt := 60;
|
||||
c0070_StartStockRemove : UInt := 70;
|
||||
c0075_WaitStockRemovalDone : UInt := 75;
|
||||
c0080_ResetRemoval : UInt := 80;
|
||||
c0090_SetDone : UInt := 90;
|
||||
c0900_Error : UInt := 900;
|
||||
c0100_SearchLineAdvanced : UInt := 100;
|
||||
c0110_SearchTakerLine : UInt := 110;
|
||||
c0120_SelectCarrierFromDonor : UInt := 120;
|
||||
c0130_FindFreeTakerPos : UInt := 130;
|
||||
c0140_MoveCarrier : UInt := 140;
|
||||
c0143_WaitTRODone : UInt := 143;
|
||||
c0145_ResetTRO : UInt := 145;
|
||||
c0150_CheckDonorEmpty : UInt := 150;
|
||||
c0160_Done : UInt := 160;
|
||||
c0170_NoTakerFound : UInt := 170;
|
||||
c0175_NoCarrierFound : UInt := 175;
|
||||
"~~~~~ErrorID~~~~~" : Int;
|
||||
c0010_NoLineFound : Int := 10;
|
||||
"~~~~~StockRemovalSequence~~~~~" : Int;
|
||||
c0020_CheckCapacity : UInt := 20;
|
||||
c0025_SetDestination : UInt := 25;
|
||||
c0030_SetTRO : UInt := 30;
|
||||
c0040_WaitTRODone : UInt := 40;
|
||||
c0100_SetDestinationEmpty : UInt := 100;
|
||||
c0110_SetTRO : UInt := 110;
|
||||
c0120_WaitTRODone : UInt := 120;
|
||||
c0130_ResetTRO : UInt := 130;
|
||||
"~~~~~~Destination~~~~~" : UInt;
|
||||
c001_AMR : Int := 1;
|
||||
c002_F2H : Int := 2;
|
||||
c003_EmptyCarrier : Int := 3;
|
||||
"~~~~~~~CarrierStatusbit~~~~~~~~~~~~~~~~~" : Int;
|
||||
cCarrLoaded : Word := 16#0002;
|
||||
"~~~~~~~LinienTypen~~~~~~~~~" : Word;
|
||||
cLineFree : Int;
|
||||
cLineEmpty : Int := 1;
|
||||
cLineLoaded : Int := 2;
|
||||
cLineMixed : Int := 3;
|
||||
cLckFull : Byte := 16#04; // %X2 Full Carrier
|
||||
cLckEmpty : Byte := 16#08; // %X3 EmptyCarrier
|
||||
cLckMixed : Byte := 16#10; // %X4 MixedCarrier
|
||||
END_VAR
|
||||
|
||||
|
||||
BEGIN
|
||||
|
||||
REGION Info
|
||||
(* Company: Schönenberger Systeme GmbH / (C) Copyright (2022). All rights reserved.
|
||||
-----------------------------------------------------------------------------------------
|
||||
Title: FB_StockRemovalBLKModul
|
||||
Comment/Function: manages stock removal for a single block
|
||||
Library/Family: -
|
||||
Author: department: "Automatisierung" ; person in charge / contact: C.Nottelmann (Automated Intelligence)
|
||||
Target System: CPU 1518F-4 PN/DP
|
||||
Engineering: TIA Portal V20
|
||||
Restrictions: -
|
||||
Requirements: -
|
||||
-----------------------------------------------------------------------------------------
|
||||
Change log table:
|
||||
Version | Date | Signature (Safety) | Expert in charge | Changes applied
|
||||
------------|------------|--------------------|------------------|-----------------------
|
||||
001.000.000 | 2025-07-28 | - | | Header added on 28.07.2025
|
||||
|
||||
*)
|
||||
END_REGION
|
||||
|
||||
REGION LocalTime
|
||||
// read local time for timestamp ------------------------------------------
|
||||
#nTempRetVal := RD_LOC_T(#tTempLocalTime);
|
||||
END_REGION
|
||||
|
||||
REGION Times
|
||||
|
||||
#tonr_StartRemoval(IN:=#n_RearrangeSequence = #c0005_WaitForTimer,
|
||||
PT:=#udt_HMI.udt_BlockRemovalModul.str_Ctrl.t_StartDelayTime);
|
||||
|
||||
END_REGION
|
||||
|
||||
REGION Check Array
|
||||
#nTempUpperBound := UPPER_BOUND(ARR := #arrJamCarrier, DIM := 1);
|
||||
#nTempLowBound := LOWER_BOUND(ARR := #arrJamCarrier, DIM := 1);
|
||||
|
||||
END_REGION
|
||||
|
||||
|
||||
//gibt Rückmeldung das er startet über den Handshake, alle anderen werden gesperrt.
|
||||
//Alle sperren und per Fpr Schleife den Rückmeldenden starten
|
||||
//
|
||||
|
||||
|
||||
|
||||
REGION Umlagern
|
||||
// Carrier beim Umlagern mit Ziel versehen
|
||||
CASE #n_RearrangeSequence OF
|
||||
#c0000_Wait:
|
||||
REGION c0000_Wait
|
||||
///Action
|
||||
#x_Error := FALSE;
|
||||
#n_ErrorID := 0;
|
||||
#n_ErrorBLKID := 0;
|
||||
#udt_INOUT_Handshake.str_State.b_Busy := False;
|
||||
#n_CollectLineIDXSave := 1; //Rücksetzen des gespeicherten Index
|
||||
#n_filledLineCounter := 1;
|
||||
#str_CurrentTask := 'Bereit zum Einlagern';
|
||||
//Transition
|
||||
IF #udt_INOUT_Handshake.str_Ctrl.b_Start OR (#udt_HMI.udt_BlockRemovalModul.str_Ctrl.x_StartRearrange
|
||||
AND NOT #udt_INOUT_Handshake.str_Ctrl.b_Start
|
||||
AND NOT #udt_INOUT_HandshakeEmpty.str_Ctrl.b_Start)
|
||||
OR #udt_INOUT_HandshakeEmpty.str_Ctrl.b_Start
|
||||
THEN
|
||||
#n_RearrangeSequence := #c0005_WaitForTimer;
|
||||
END_IF;
|
||||
END_REGION
|
||||
|
||||
#c0005_WaitForTimer:
|
||||
REGION c0005_WaitForTimer
|
||||
//Action
|
||||
#udt_INOUT_Handshake.str_State.b_Busy := True;
|
||||
|
||||
//Transition
|
||||
IF #tonr_StartRemoval.Q AND NOT #udt_INOUT_HandshakeEmpty.str_Ctrl.b_Start
|
||||
THEN
|
||||
#n_RearrangeSequence := #c0010_SearchLine;
|
||||
ELSIF #udt_INOUT_HandshakeEmpty.str_Ctrl.b_Start
|
||||
THEN
|
||||
;
|
||||
ELSIF #udt_HMI.udt_BlockRemovalModul.str_Ctrl.x_Cancel
|
||||
THEN
|
||||
#n_RearrangeSequence := #c0000_Wait;
|
||||
END_IF;
|
||||
END_REGION
|
||||
|
||||
#c0010_SearchLine:
|
||||
REGION c0010_SearchLine
|
||||
//Action
|
||||
|
||||
#nMaxFilledLineSAve := #str_InOut_FillingChart.udt_LineLvlBlk.arr_OrderLines[#n_filledLineCounter];
|
||||
#str_CurrentTask := 'Leere Linie zum Umsortieren wird gesucht';
|
||||
|
||||
FOR #n_CollectLineIDX := 2 TO 21 DO
|
||||
IF #arrudt_Line[#n_CollectLineIDX].stData.Status.nCount = 0
|
||||
THEN
|
||||
#arrudt_Line[#n_CollectLineIDX].stData.Status.bByte.%X5 := True; // zum Sortieren reserviert
|
||||
#n_CollectLineIDXSave := #n_CollectLineIDX;
|
||||
EXIT;
|
||||
END_IF;
|
||||
END_FOR;
|
||||
|
||||
|
||||
//Transition
|
||||
IF #arrudt_Line[#n_CollectLineIDXSave].stData.Status.bByte.%X5
|
||||
THEN
|
||||
#n_RearrangeSequence := #c0020_CalculateAmount;
|
||||
ELSIF NOT #arrudt_Line[#n_CollectLineIDXSave].stData.Status.bByte.%X5
|
||||
THEN
|
||||
#n_RearrangeSequence := #c0100_SearchLineAdvanced;
|
||||
END_IF;
|
||||
END_REGION
|
||||
|
||||
|
||||
|
||||
#c0020_CalculateAmount:
|
||||
REGION c0020_CalculateAmount
|
||||
//Action
|
||||
FOR #n_GetCarrierAmountIDX := 1 TO "cNoPositions" DO
|
||||
IF #arrudt_Line[#nMaxFilledLineSAve].arCarrier[#n_GetCarrierAmountIDX].bStatus.%X5
|
||||
THEN
|
||||
IF #arrudt_Line[#nMaxFilledLineSAve].arCarrier[#n_GetCarrierAmountIDX].bStatus.%X8 AND #n_JamCapacityAMR > #n_JamCapacityAMRCriticalAmount
|
||||
THEN
|
||||
#arrudt_Line[#nMaxFilledLineSAve].arCarrier[#n_GetCarrierAmountIDX].nDestination := UINT_TO_INT(#n_InBlkID * 100 + #n_CollectLineIDXSave);
|
||||
ELSIF #arrudt_Line[#nMaxFilledLineSAve].arCarrier[#n_GetCarrierAmountIDX].bStatus.%X9 AND #n_JamCapacityF2H > #n_JamCapacityF2HCriticalAmount
|
||||
THEN
|
||||
#arrudt_Line[#nMaxFilledLineSAve].arCarrier[#n_GetCarrierAmountIDX].nDestination := UINT_TO_INT(#n_InBlkID * 100 + #n_CollectLineIDXSave);
|
||||
ELSE
|
||||
#arrudt_Line[#nMaxFilledLineSAve].arCarrier[#n_GetCarrierAmountIDX].nDestination := UINT_TO_INT(#n_InBlkID * 100 + #nMaxFilledLineSAve);
|
||||
END_IF;
|
||||
|
||||
#n_GetCarrierAmount := #n_GetCarrierAmountIDX;
|
||||
END_IF;
|
||||
|
||||
END_FOR;
|
||||
|
||||
//Transition
|
||||
#n_RearrangeSequence := #c0030_StartRearrange;
|
||||
END_REGION
|
||||
|
||||
#c0030_StartRearrange:
|
||||
REGION c0030_StartRearrange
|
||||
//Action
|
||||
#udt_InOutMFRTRO.UDT_Ctrl.nAmount := #n_GetCarrierAmount;
|
||||
#udt_InOutMFRTRO.UDT_Ctrl.nMode := 1;
|
||||
#udt_InOutMFRTRO.UDT_Ctrl.xStart := True;
|
||||
#str_CurrentTask := 'Umsortieren gestartet';
|
||||
|
||||
|
||||
//Transition
|
||||
#n_RearrangeSequence := #c0040_CheckCarrier;
|
||||
END_REGION
|
||||
|
||||
#c0040_CheckCarrier:
|
||||
REGION c0040_CheckCarrier
|
||||
//Action
|
||||
//Handshake erforderlich, sonst mehrfach Zählung
|
||||
FOR #n_CheckCarrierOnListIDX := #nTempLowBound TO #nTempUpperBound DO //"cNoPositions"
|
||||
IF #udt_InOutMFRTRO.UDT_Scan.nBarcode = #arrJamCarrier[#n_CheckCarrierOnListIDX].nBarcode
|
||||
AND #arrJamCarrier[#n_CheckCarrierOnListIDX].bStatus.%X5
|
||||
THEN
|
||||
#n_rearrangeLineCounter += 1;
|
||||
#str_MessageUpdate.str_Ctrl.arrstr_MessageData[#n_CheckCarrierOnListIDX].n_MessageType := #c01_PartFound;
|
||||
#str_MessageUpdate.str_Ctrl.arrstr_MessageData[#n_CheckCarrierOnListIDX].n_PartID := #arrJamCarrier[#n_CheckCarrierOnListIDX].nBarcode;
|
||||
|
||||
;
|
||||
END_IF;
|
||||
END_FOR;
|
||||
|
||||
//Transition
|
||||
IF #udt_InOutMFRTRO.UDT_State.xReady OR #udt_HMI.udt_BlockRemovalModul.str_Ctrl.x_Cancel
|
||||
THEN
|
||||
#n_RearrangeSequence := #c0050_ResetTRO;
|
||||
END_IF;
|
||||
END_REGION
|
||||
|
||||
|
||||
#c0050_ResetTRO:
|
||||
REGION c0050_ResetTRO
|
||||
//Action
|
||||
#udt_InOutMFRTRO.UDT_Ctrl.xStart := FALSE;
|
||||
#udt_InOutMFRTRO.UDT_Ctrl.nAmount := 0;
|
||||
#udt_InOutMFRTRO.UDT_Ctrl.nMode := 0;
|
||||
#n_filledLineCounter += 1;
|
||||
IF #n_filledLineCounter > 21
|
||||
THEN
|
||||
#n_filledLineCounter := 21;
|
||||
END_IF;
|
||||
|
||||
|
||||
|
||||
//Transition
|
||||
#n_RearrangeSequence := #c0060_CheckMoreLines;
|
||||
END_REGION
|
||||
|
||||
#c0060_CheckMoreLines:
|
||||
REGION c0060_CheckMoreLines
|
||||
//Actions
|
||||
|
||||
#n_NextLine := #str_InOut_FillingChart.udt_LineLvlBlk.arr_OrderLines[#n_filledLineCounter];
|
||||
IF #n_NextLine = 0
|
||||
THEN
|
||||
#n_NextLine := 1;
|
||||
END_IF;
|
||||
//Transitions
|
||||
IF #str_InOut_FillingChart.udt_LineLvlBlk.arr_StorageLvl[#n_NextLine] > 0
|
||||
AND #arrudt_Line[#n_CollectLineIDX].stData.Config.nCapacitySet - #n_rearrangeLineCounter > #str_InOut_FillingChart.udt_LineLvlBlk.arr_StorageLvl[#n_NextLine]
|
||||
// Absicherung Linie in die umsortiert wird nicht voll
|
||||
THEN
|
||||
#n_RearrangeSequence := #c0020_CalculateAmount;
|
||||
ELSE
|
||||
#arrudt_Line[#n_CollectLineIDXSave].stData.Status.bByte.%X5 := False;
|
||||
#arrudt_Line[#n_CollectLineIDXSave].stData.Status.bByte.%X6 := TRUE; // Sortieren abgeschlossen
|
||||
#udt_HMI.udt_BlockRemovalModul.str_Ctrl.x_StartRearrange := False;
|
||||
#udt_HMI.udt_BlockRemovalModul.str_Ctrl.x_Cancel := False;
|
||||
#str_CurrentTask := 'Umsortieren beendet';
|
||||
#n_RearrangeSequence := #c0070_StartStockRemove;
|
||||
END_IF;
|
||||
END_REGION
|
||||
|
||||
#c0070_StartStockRemove:
|
||||
//Action
|
||||
#udt_Handshake_intern.str_Ctrl.b_RemoveRelease := True;
|
||||
|
||||
//Transition
|
||||
IF #udt_Handshake_intern.str_State.b_Busy
|
||||
THEN
|
||||
#n_RearrangeSequence := #c0075_WaitStockRemovalDone;
|
||||
END_IF;
|
||||
|
||||
#c0075_WaitStockRemovalDone:
|
||||
//Action
|
||||
|
||||
|
||||
//Transition
|
||||
IF #udt_Handshake_intern.str_State.b_Done
|
||||
THEN
|
||||
#n_RearrangeSequence := #c0080_ResetRemoval;
|
||||
END_IF;
|
||||
|
||||
#c0080_ResetRemoval:
|
||||
//Action
|
||||
#udt_Handshake_intern.str_Ctrl.b_RemoveRelease := False;
|
||||
|
||||
//Transition
|
||||
IF #str_InOut_FillingChart.udt_LineLvlBlk.arr_StorageLvl[#n_NextLine] > 0
|
||||
OR #str_InOut_FillingChart.udt_LineLvlBlk.arr_StorageLvl[#n_NextLine + 1] > 0
|
||||
THEN
|
||||
#n_RearrangeSequence := #c0020_CalculateAmount;
|
||||
ELSE
|
||||
#n_RearrangeSequence := #c0090_SetDone;
|
||||
END_IF;
|
||||
|
||||
#c0090_SetDone:
|
||||
//Action
|
||||
#udt_INOUT_Handshake.str_State.b_Busy := False;
|
||||
#udt_INOUT_Handshake.str_State.b_Done := True;
|
||||
|
||||
//Transition
|
||||
IF NOT #udt_INOUT_Handshake.str_Ctrl.b_Start
|
||||
THEN
|
||||
#n_RearrangeSequence := #c0000_Wait;
|
||||
END_IF;
|
||||
|
||||
|
||||
|
||||
#c0100_SearchLineAdvanced:
|
||||
REGION c0100_SearchLineAdvanced
|
||||
//Donorlinie suchen (am wenigsten befüllt, sortenrein)
|
||||
//Action
|
||||
#n_CurrentDonorLine := 0;
|
||||
#n_CurrentDonorCount := 32767; // "unendlich"
|
||||
#n_CurrentDonorType := 0; // 1=EmptyCarrier, 2=LoadedCarrier
|
||||
|
||||
FOR #idxLineAnalyze := 1 TO "cNoLines" DO
|
||||
#nTempCntLoaded := 0;
|
||||
#nTempCntEmpty := 0;
|
||||
|
||||
FOR #idxCarrierAnalyze := 1 TO "cNoPositions" DO
|
||||
IF #arrudt_Line[#idxLineAnalyze].arCarrier[#idxCarrierAnalyze].nBarcode > 0 THEN
|
||||
IF #arrudt_Line[#idxLineAnalyze].arCarrier[#idxCarrierAnalyze].bStatus.%X1 THEN
|
||||
#nTempCntLoaded += 1;
|
||||
ELSE
|
||||
#nTempCntEmpty += 1;
|
||||
END_IF;
|
||||
END_IF;
|
||||
END_FOR;
|
||||
|
||||
// Linie ist sortenrein LOADED
|
||||
IF (#nTempCntLoaded > 0) AND (#nTempCntEmpty = 0) THEN
|
||||
IF #nTempCntLoaded < #n_CurrentDonorCount THEN
|
||||
#n_CurrentDonorLine := #idxLineAnalyze;
|
||||
#n_CurrentDonorCount := #nTempCntLoaded;
|
||||
#n_CurrentDonorType := 2;
|
||||
END_IF;
|
||||
END_IF;
|
||||
|
||||
// Linie ist sortenrein EMPTY
|
||||
IF (#nTempCntEmpty > 0) AND (#nTempCntLoaded = 0) THEN
|
||||
IF #nTempCntEmpty < #n_CurrentDonorCount THEN
|
||||
#n_CurrentDonorLine := #idxLineAnalyze;
|
||||
#n_CurrentDonorCount := #nTempCntEmpty;
|
||||
#n_CurrentDonorType := 1;
|
||||
END_IF;
|
||||
END_IF;
|
||||
END_FOR;
|
||||
|
||||
// Transition
|
||||
IF #n_CurrentDonorLine > 0 THEN
|
||||
#n_RearrangeSequence := #c0110_SearchTakerLine;
|
||||
ELSE
|
||||
#n_RearrangeSequence := #c0170_NoTakerFound; // Fehlerbehandlung
|
||||
END_IF;
|
||||
END_REGION
|
||||
|
||||
|
||||
#c0110_SearchTakerLine:
|
||||
REGION c0110_SearchTakerLine
|
||||
//Takerlinie suchen (kompatibel + freie Slots)
|
||||
//Action
|
||||
#n_CurrentTakerLine := 0;
|
||||
#n_CurrentTakerFree := -1;
|
||||
|
||||
FOR #idxLineSearchTaker := 1 TO "cNoLines" DO
|
||||
IF #idxLineSearchTaker = #n_CurrentDonorLine THEN
|
||||
CONTINUE;
|
||||
END_IF;
|
||||
|
||||
#nTempCntLoaded := 0;
|
||||
#nTempCntEmpty := 0;
|
||||
#nTempCntFree := 0;
|
||||
|
||||
FOR #idxCarrierSearchTaker := 1 TO "cNoPositions" DO
|
||||
IF #arrudt_Line[#idxLineSearchTaker].arCarrier[#idxCarrierSearchTaker].nBarcode = 0 THEN
|
||||
#nTempCntFree := #nTempCntFree + 1;
|
||||
ELSIF #arrudt_Line[#idxLineSearchTaker].arCarrier[#idxCarrierSearchTaker].bStatus.%X1 THEN
|
||||
#nTempCntLoaded := #nTempCntLoaded + 1;
|
||||
ELSE
|
||||
#nTempCntEmpty := #nTempCntEmpty + 1;
|
||||
END_IF;
|
||||
END_FOR;
|
||||
|
||||
// Linie ist sortenrein LOADED
|
||||
IF (#nTempCntLoaded > 0) AND (#nTempCntEmpty = 0) THEN
|
||||
IF (#n_CurrentDonorType = 2) AND (#nTempCntFree > 0) AND (#nTempCntFree > #n_CurrentTakerFree) THEN
|
||||
#n_CurrentTakerLine := #idxLineSearchTaker;
|
||||
#n_CurrentTakerFree := #nTempCntFree;
|
||||
END_IF;
|
||||
END_IF;
|
||||
|
||||
// Linie ist sortenrein EMPTY
|
||||
IF (#nTempCntEmpty > 0) AND (#nTempCntLoaded = 0) THEN
|
||||
IF (#n_CurrentDonorType = 1) AND (#nTempCntFree > 0) AND (#nTempCntFree > #n_CurrentTakerFree) THEN
|
||||
#n_CurrentTakerLine := #idxLineSearchTaker;
|
||||
#n_CurrentTakerFree := #nTempCntFree;
|
||||
END_IF;
|
||||
END_IF;
|
||||
|
||||
// Linie ist FREE
|
||||
IF (#nTempCntLoaded = 0) AND (#nTempCntEmpty = 0) THEN
|
||||
IF (#nTempCntFree > 0) AND (#nTempCntFree > #n_CurrentTakerFree) THEN
|
||||
#n_CurrentTakerLine := #idxLineSearchTaker;
|
||||
#n_CurrentTakerFree := #nTempCntFree;
|
||||
END_IF;
|
||||
END_IF;
|
||||
END_FOR;
|
||||
|
||||
// Transition
|
||||
IF #n_CurrentTakerLine > 0 THEN
|
||||
#n_RearrangeSequence := #c0120_SelectCarrierFromDonor;
|
||||
ELSE
|
||||
#n_RearrangeSequence := #c0170_NoTakerFound;
|
||||
END_IF;
|
||||
END_REGION
|
||||
|
||||
|
||||
#c0120_SelectCarrierFromDonor:
|
||||
REGION c0120_SelectCarrierFromDonor
|
||||
//Carrier im Donor finden (letzte belegte Position)
|
||||
//Action
|
||||
#n_SelectedDonorPos := 0;
|
||||
|
||||
FOR #idxCarrierDonorFind := 1 TO "cNoPositions" DO
|
||||
IF #arrudt_Line[#n_CurrentDonorLine].arCarrier[#idxCarrierDonorFind].nBarcode > 0 THEN
|
||||
IF (#n_CurrentDonorType = 2) AND (#arrudt_Line[#n_CurrentDonorLine].arCarrier[#idxCarrierDonorFind].bStatus.%X1) THEN
|
||||
#n_SelectedDonorPos := #idxCarrierDonorFind;
|
||||
EXIT;
|
||||
ELSIF (#n_CurrentDonorType = 1) AND (NOT #arrudt_Line[#n_CurrentDonorLine].arCarrier[#idxCarrierDonorFind].bStatus.%X1) THEN
|
||||
#n_SelectedDonorPos := #idxCarrierDonorFind;
|
||||
EXIT;
|
||||
END_IF;
|
||||
END_IF;
|
||||
END_FOR;
|
||||
|
||||
// Transition
|
||||
IF #n_SelectedDonorPos > 0 THEN
|
||||
#n_RearrangeSequence := #c0130_FindFreeTakerPos;
|
||||
ELSE
|
||||
#n_RearrangeSequence := #c0175_NoCarrierFound;
|
||||
END_IF;
|
||||
END_REGION
|
||||
|
||||
|
||||
#c0130_FindFreeTakerPos:
|
||||
REGION c0130_FindFreeTakerPos
|
||||
//Erste freie Position im Taker suchen
|
||||
//Action
|
||||
#n_SelectedTakerPos := 0;
|
||||
|
||||
FOR #idxCarrierTakerFind := 1 TO "cNoPositions" DO
|
||||
IF #arrudt_Line[#n_CurrentTakerLine].arCarrier[#idxCarrierTakerFind].nBarcode = 0 THEN
|
||||
#n_SelectedTakerPos := #idxCarrierTakerFind;
|
||||
EXIT;
|
||||
END_IF;
|
||||
END_FOR;
|
||||
|
||||
// Transition
|
||||
IF #n_SelectedTakerPos > 0 THEN
|
||||
#n_RearrangeSequence := #c0140_MoveCarrier;
|
||||
ELSE
|
||||
#n_RearrangeSequence := #c0170_NoTakerFound;
|
||||
END_IF;
|
||||
END_REGION
|
||||
|
||||
|
||||
#c0140_MoveCarrier:
|
||||
REGION c0140_MoveCarrier
|
||||
//Carrier von Donor nach Taker verschieben
|
||||
// Action
|
||||
#udt_InOutMFRTRO.UDT_Ctrl.nAmount := 1;
|
||||
#udt_InOutMFRTRO.UDT_Ctrl.nMode := 1;
|
||||
#udt_InOutMFRTRO.UDT_Ctrl.xStart := True;
|
||||
#str_CurrentTask := 'Linie frei machen gestartet';
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Transition
|
||||
#n_RearrangeSequence := #c0150_CheckDonorEmpty;
|
||||
END_REGION
|
||||
|
||||
#c0143_WaitTRODone:
|
||||
REGION c0143_WaitTRODone
|
||||
// Warten bis verschieben beendet
|
||||
//Action
|
||||
|
||||
|
||||
//Transition
|
||||
IF #udt_InOutMFRTRO.UDT_State.xReady
|
||||
THEN
|
||||
#n_RearrangeSequence := #c0145_ResetTRO;
|
||||
END_IF;
|
||||
END_REGION
|
||||
|
||||
#c0145_ResetTRO:
|
||||
REGION c0145_ResetTRO
|
||||
//TRO zuruecksetzen
|
||||
//Action
|
||||
#udt_InOutMFRTRO.UDT_Ctrl.nAmount := 1;
|
||||
#udt_InOutMFRTRO.UDT_Ctrl.nMode := 1;
|
||||
#udt_InOutMFRTRO.UDT_Ctrl.xStart := True;
|
||||
|
||||
// Donor-Slot leeren
|
||||
#arrudt_Line[#n_CurrentDonorLine].arCarrier[#n_SelectedDonorPos].nBarcode := 0;
|
||||
#arrudt_Line[#n_CurrentDonorLine].arCarrier[#n_SelectedDonorPos].nDestination := 0;
|
||||
#arrudt_Line[#n_CurrentDonorLine].arCarrier[#n_SelectedDonorPos].bStatus := 0;
|
||||
|
||||
#n_RearrangedCounter := #n_RearrangedCounter + 1;
|
||||
|
||||
//Transition
|
||||
#n_RearrangeSequence := #c0150_CheckDonorEmpty;
|
||||
END_REGION
|
||||
|
||||
|
||||
#c0150_CheckDonorEmpty:
|
||||
REGION c0150_CheckDonorEmpty
|
||||
//Prüfen ob Donorlinie jetzt leer ist
|
||||
#n_RemainingDonor := 0;
|
||||
|
||||
FOR #idxCarrierDonorCheck := 1 TO "cNoPositions" DO
|
||||
IF #arrudt_Line[#n_CurrentDonorLine].arCarrier[#idxCarrierDonorCheck].nBarcode > 0 THEN
|
||||
#n_RemainingDonor := #n_RemainingDonor + 1;
|
||||
END_IF;
|
||||
END_FOR;
|
||||
|
||||
// Transition
|
||||
IF #n_RemainingDonor = 0 THEN
|
||||
|
||||
#n_RearrangeSequence := #c0160_Done;
|
||||
ELSE
|
||||
#n_RearrangeSequence := #c0110_SearchTakerLine; // weitermachen
|
||||
END_IF;
|
||||
END_REGION
|
||||
|
||||
|
||||
#c0160_Done:
|
||||
REGION c0160_Done
|
||||
// Fertig
|
||||
#str_CurrentTask := 'Linie frei machen abgeschlossen';
|
||||
#n_RearrangeSequence := #c0010_SearchLine;
|
||||
#n_NextLine := 1;
|
||||
END_REGION
|
||||
|
||||
// --------------------------------------------------------
|
||||
// Fehlerpfade
|
||||
// --------------------------------------------------------
|
||||
#c0170_NoTakerFound:
|
||||
REGION c0170_NoTakerFound
|
||||
//Action
|
||||
#x_Error := TRUE;
|
||||
#n_ErrorID := 1001;
|
||||
#str_CurrentTask := 'Kein Taker gefunden';
|
||||
//Transition
|
||||
#n_RearrangeSequence := #c0900_Error;
|
||||
END_REGION
|
||||
|
||||
#c0175_NoCarrierFound:
|
||||
REGION c0175_NoCarrierFound
|
||||
//Action
|
||||
#x_Error := TRUE;
|
||||
#n_ErrorID := 1002;
|
||||
#str_CurrentTask := 'Kein Carrier im Donor gefunden';
|
||||
|
||||
//Transition
|
||||
#n_RearrangeSequence := #c0900_Error;
|
||||
END_REGION
|
||||
|
||||
|
||||
|
||||
#c0900_Error:
|
||||
REGION c0900_Error
|
||||
//Actions
|
||||
|
||||
|
||||
//Transitions
|
||||
IF #x_InQuit
|
||||
THEN
|
||||
#n_RearrangeSequence := #c0000_Wait;
|
||||
END_IF;
|
||||
END_REGION
|
||||
|
||||
END_CASE;
|
||||
|
||||
END_REGION
|
||||
|
||||
REGION HMI
|
||||
#udt_HMI.udt_Common.n_ErrorBLKID := #n_ErrorBLKID;
|
||||
#udt_HMI.udt_Common.n_ErrorID := #n_ErrorID;
|
||||
#udt_HMI.udt_Common.x_Error := #x_Error;
|
||||
|
||||
#udt_HMI.udt_BlockRemovalModul.str_State.x_FreigabeBtnRearrenge := NOT #udt_INOUT_Handshake.str_Ctrl.b_Start AND NOT #udt_INOUT_HandshakeEmpty.str_Ctrl.b_Start;
|
||||
#udt_HMI.udt_BlockRemovalModul.str_State.x_FreigabeBtnRemoval := NOT #udt_Handshake_intern.str_State.b_Busy;
|
||||
|
||||
END_REGION
|
||||
|
||||
REGION Auslagern
|
||||
|
||||
CASE #n_StockRemovalSequence OF
|
||||
|
||||
#c0000_Wait:
|
||||
//Action
|
||||
#n_SearchSortedBlkIDXSave := 1;
|
||||
#n_SearchSortedLineIDXSave := 1;
|
||||
#udt_Handshake_intern.str_State.b_Busy := FALSE;
|
||||
//Transition
|
||||
IF #udt_Handshake_intern.str_Ctrl.b_RemoveRelease AND NOT #udt_INOUT_HandshakeEmpty.str_Ctrl.b_RemoveRelease
|
||||
OR (#udt_HMI.udt_BlockRemovalModul.str_Ctrl.x_StartRemoval AND #udt_HMI.udt_BlockRemovalModul.str_Ctrl.n_RemovalLine > 0)
|
||||
THEN
|
||||
#n_StockRemovalSequence := #c0010_SearchLine;
|
||||
ELSIF #udt_INOUT_HandshakeEmpty.str_Ctrl.b_RemoveRelease
|
||||
THEN
|
||||
#n_MaxEmptyLine := #str_InOut_EmptyChart.udt_LineLvlBlk.n_LineMAX;
|
||||
#n_StockRemovalSequence := #c0100_SetDestinationEmpty;
|
||||
|
||||
END_IF;
|
||||
|
||||
#c0010_SearchLine:
|
||||
//Action
|
||||
#n_SearchSortedBlkIDXSave := 1;
|
||||
#n_SearchSortedLineIDXSave := 1;
|
||||
#udt_Handshake_intern.str_State.b_Busy := True;
|
||||
#udt_Handshake_intern.str_State.b_Done := False;
|
||||
FOR #n_SearchSortedBlkIDX := 1 TO 12 DO
|
||||
|
||||
FOR #n_SearchSortedLineIDX := 1 TO 21 DO
|
||||
IF #arrudt_Line[#n_SearchSortedLineIDX].stData.Status.bByte.%X6
|
||||
THEN
|
||||
#n_SearchSortedBlkIDXSave := #n_SearchSortedBlkIDX;
|
||||
#n_SearchSortedLineIDXSave := #n_SearchSortedLineIDX;
|
||||
EXIT;
|
||||
END_IF;
|
||||
END_FOR;
|
||||
|
||||
END_FOR;
|
||||
|
||||
//Transition
|
||||
IF #arrudt_Line[#n_SearchSortedLineIDXSave].stData.Status.bByte.%X6
|
||||
OR (#udt_HMI.udt_BlockRemovalModul.str_Ctrl.x_StartRemoval AND #udt_HMI.udt_BlockRemovalModul.str_Ctrl.n_RemovalLine >0
|
||||
AND NOT #udt_Handshake_intern.str_Ctrl.b_RemoveRelease
|
||||
AND NOT #udt_INOUT_HandshakeEmpty.str_Ctrl.b_RemoveRelease
|
||||
AND NOT #udt_INOUT_Handshake.str_State.b_Busy )
|
||||
THEN
|
||||
#n_StockRemovalSequence := #c0020_CheckCapacity;
|
||||
END_IF;
|
||||
|
||||
#c0020_CheckCapacity:
|
||||
//Action
|
||||
#str_CurrentTask := 'Auslagern wird vorbereitet';
|
||||
IF #udt_HMI.udt_BlockRemovalModul.str_Ctrl.x_StartRemoval
|
||||
AND NOT #udt_Handshake_intern.str_Ctrl.b_RemoveRelease
|
||||
AND NOT #udt_INOUT_HandshakeEmpty.str_Ctrl.b_RemoveRelease
|
||||
AND NOT #udt_INOUT_Handshake.str_State.b_Busy
|
||||
THEN
|
||||
IF #udt_HMI.udt_BlockRemovalModul.str_Ctrl.n_RemovalLine > 0 AND #udt_HMI.udt_BlockRemovalModul.str_Ctrl.n_RemovalLine < 22
|
||||
THEN
|
||||
#n_SearchSortedLineIDXSave := #udt_HMI.udt_BlockRemovalModul.str_Ctrl.n_RemovalLine;
|
||||
END_IF;
|
||||
END_IF;
|
||||
//Transition
|
||||
//IF Capacity JAms > Line Count Then
|
||||
#n_StockRemovalSequence := #c0025_SetDestination;
|
||||
|
||||
#c0025_SetDestination:
|
||||
//Action
|
||||
FOR #n_DestiantionIDX := 1 TO "cNoPositions" DO
|
||||
IF #arrudt_Line[#n_SearchSortedLineIDXSave].arCarrier[#n_DestiantionIDX].nBarcode > 0
|
||||
THEN
|
||||
IF #arrudt_Line[#n_SearchSortedLineIDXSave].arCarrier[#n_DestiantionIDX].bStatus.%X8
|
||||
THEN
|
||||
#arrudt_Line[#n_SearchSortedLineIDXSave].arCarrier[#n_DestiantionIDX].nDestination := #c001_AMR;
|
||||
ELSIF #arrudt_Line[#n_SearchSortedLineIDXSave].arCarrier[#n_DestiantionIDX].bStatus.%X9
|
||||
THEN
|
||||
#arrudt_Line[#n_SearchSortedLineIDXSave].arCarrier[#n_DestiantionIDX].nDestination := #c002_F2H;
|
||||
END_IF;
|
||||
END_IF;
|
||||
|
||||
END_FOR;
|
||||
|
||||
|
||||
|
||||
//Transition
|
||||
#n_StockRemovalSequence := #c0030_SetTRO;
|
||||
|
||||
#c0030_SetTRO:
|
||||
//Action
|
||||
|
||||
#udt_InOutMFRTRO.UDT_Ctrl.nMode := 3;
|
||||
#udt_InOutMFRTRO.UDT_Ctrl.nLine := #n_SearchSortedLineIDXSave;
|
||||
#udt_InOutMFRTRO.UDT_Ctrl.xStart := True;
|
||||
#str_CurrentTask := 'Auslagern wurde gestartet';
|
||||
//Transition
|
||||
IF #udt_InOutMFRTRO.UDT_State.xBusy
|
||||
THEN
|
||||
#n_StockRemovalSequence := #c0040_WaitTRODone;
|
||||
END_IF;
|
||||
|
||||
|
||||
#c0040_WaitTRODone:
|
||||
//Action
|
||||
//
|
||||
#str_CurrentTask := 'Auslagern wurde gestartet';
|
||||
//Transition
|
||||
IF #udt_InOutMFRTRO.UDT_State.xReady OR #udt_HMI.udt_BlockRemovalModul.str_Ctrl.x_Cancel
|
||||
THEN
|
||||
#n_StockRemovalSequence := #c0050_ResetTRO;
|
||||
END_IF;
|
||||
|
||||
#c0050_ResetTRO:
|
||||
//Action
|
||||
#udt_InOutMFRTRO.UDT_Ctrl.xStart := False;
|
||||
#udt_InOutMFRTRO.UDT_Ctrl.nMode := 0;
|
||||
#arrudt_Line[#n_SearchSortedLineIDXSave].stData.Status.bByte.%X6 := False;
|
||||
#str_CurrentTask := 'Auslagern beendet';
|
||||
#udt_HMI.udt_BlockRemovalModul.str_Ctrl.n_RemovalLine := 0;
|
||||
#udt_HMI.udt_BlockRemovalModul.str_Ctrl.x_Cancel := False;
|
||||
#udt_HMI.udt_BlockRemovalModul.str_Ctrl.x_StartRearrange := False;
|
||||
#udt_HMI.udt_BlockRemovalModul.str_Ctrl.x_StartRemoval := False;
|
||||
#udt_Handshake_intern.str_State.b_Done := True;
|
||||
//Transiton
|
||||
IF NOT #udt_Handshake_intern.str_Ctrl.b_RemoveRelease
|
||||
THEN
|
||||
#n_StockRemovalSequence := #c0000_Wait;
|
||||
END_IF;
|
||||
#c0100_SetDestinationEmpty:
|
||||
//Action
|
||||
#udt_INOUT_HandshakeEmpty.str_State.b_Busy := True;
|
||||
#udt_INOUT_HandshakeEmpty.str_State.b_Done := False;
|
||||
FOR #n_DestiantionIDX := 1 TO "cNoPositions" DO
|
||||
IF #n_MaxEmptyLine >= 1 AND #n_MaxEmptyLine <= 21
|
||||
THEN
|
||||
IF #arrudt_Line[#n_MaxEmptyLine].arCarrier[#n_DestiantionIDX].nBarcode > 0
|
||||
THEN
|
||||
IF NOT #arrudt_Line[#n_MaxEmptyLine].arCarrier[#n_DestiantionIDX].bStatus.%X1
|
||||
THEN
|
||||
#arrudt_Line[#n_MaxEmptyLine].arCarrier[#n_DestiantionIDX].nDestination := #c003_EmptyCarrier;
|
||||
ELSE
|
||||
#arrudt_Line[#n_MaxEmptyLine].arCarrier[#n_DestiantionIDX].nDestination := UINT_TO_INT(#n_InBlkID * 100 + #n_MaxEmptyLine);
|
||||
|
||||
END_IF;
|
||||
END_IF;
|
||||
END_IF;
|
||||
END_FOR;
|
||||
|
||||
//Transition
|
||||
#n_StockRemovalSequence := #c0110_SetTRO;
|
||||
|
||||
#c0110_SetTRO:
|
||||
//Action
|
||||
#udt_InOutMFRTRO.UDT_Ctrl.nMode := 3;
|
||||
#udt_InOutMFRTRO.UDT_Ctrl.nLine := #n_MaxEmptyLine;
|
||||
#udt_InOutMFRTRO.UDT_Ctrl.xStart := True;
|
||||
#str_CurrentTask := 'Auslagern wurde gestartet';
|
||||
//Transition
|
||||
IF #udt_InOutMFRTRO.UDT_State.xBusy
|
||||
THEN
|
||||
#n_StockRemovalSequence := #c0120_WaitTRODone;
|
||||
END_IF;
|
||||
|
||||
#c0120_WaitTRODone:
|
||||
//Action
|
||||
//
|
||||
//Transition
|
||||
IF #udt_InOutMFRTRO.UDT_State.xReady
|
||||
THEN
|
||||
#n_StockRemovalSequence := #c0120_WaitTRODone;
|
||||
END_IF;
|
||||
|
||||
#c0130_ResetTRO:
|
||||
//Action
|
||||
#udt_InOutMFRTRO.UDT_Ctrl.xStart := FALSE;
|
||||
#udt_InOutMFRTRO.UDT_Ctrl.nMode := 0;
|
||||
#udt_InOutMFRTRO.UDT_Ctrl.nLine := 0;
|
||||
#udt_INOUT_HandshakeEmpty.str_State.b_Busy := False;
|
||||
#udt_INOUT_HandshakeEmpty.str_State.b_Done := True;
|
||||
#str_CurrentTask := 'Auslagern wurde beendet';
|
||||
|
||||
//Transition
|
||||
IF NOT #udt_INOUT_HandshakeEmpty.str_Ctrl.b_Start
|
||||
THEN
|
||||
#n_StockRemovalSequence := #c0000_Wait;
|
||||
END_IF;
|
||||
|
||||
|
||||
END_CASE;
|
||||
END_REGION
|
||||
|
||||
REGION Errors
|
||||
//Quit setzt Error Word zurück
|
||||
IF #x_InQuit
|
||||
THEN
|
||||
#x_Error := False;
|
||||
END_IF;
|
||||
|
||||
IF #x_Error AND #n_ErrorID = #c0010_NoLineFound
|
||||
THEN
|
||||
#wsErrorMessage := WSTRING#'Keine Linie zum Sortieren gefunden';
|
||||
|
||||
END_IF;
|
||||
|
||||
#PrgAlarm_Failmessage(SIG := #x_Error,
|
||||
TIMESTAMP := #tTempLocalTime,
|
||||
SD_1 := #sIn_ObjectName,
|
||||
SD_2 := #wsErrorMessage);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
END_REGION
|
||||
|
||||
REGION Send Message To MES
|
||||
|
||||
#lfb_MessageToMES(x_InSendMessage:=#str_MessageUpdate.str_Ctrl.x_SendMessage,
|
||||
arrstr_InOutMessageData:=#str_MessageUpdate.str_Ctrl.arrstr_MessageData,
|
||||
x_OutReady=>#str_MessageUpdate.str_State.x_Ready,
|
||||
x_OutBusy=>#str_MessageUpdate.str_State.x_Busy,
|
||||
x_OutDone=>#str_MessageUpdate.str_State.x_Done,
|
||||
udt_InOutHandshakeMES:=#udt_InOutHandshakeMessageToMes);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
END_REGION
|
||||
|
||||
REGION HMI Mapping
|
||||
|
||||
//#udt_HMI.str_TRO.udt_MFR_TRO := #udt_InOutMFRTRO;
|
||||
#udt_HMI.udt_Common.string_CurrentTask := #str_CurrentTask;
|
||||
|
||||
END_REGION
|
||||
|
||||
|
||||
|
||||
END_FUNCTION_BLOCK
|
||||
|
||||
+1182
File diff suppressed because it is too large
Load Diff
+206
@@ -0,0 +1,206 @@
|
||||
FUNCTION_BLOCK "FB_StockRemovalSequencerUDT"
|
||||
{ S7_Optimized_Access := 'TRUE' }
|
||||
VERSION : 0.1
|
||||
VAR_INPUT
|
||||
xReset : Bool;
|
||||
nMaxEmptyBLK : Int;
|
||||
nMaxEmptyLine : Int;
|
||||
udt_In_CarrierNeeded : "udt_CarrierNeeded";
|
||||
END_VAR
|
||||
|
||||
VAR_IN_OUT
|
||||
udt_InOutStorageSite : "udt_StorageSite";
|
||||
END_VAR
|
||||
|
||||
VAR
|
||||
xCandidateFound : Bool;
|
||||
nNextGlobalIndex : Int; // 1..12
|
||||
nStartSearchIndex : Int; // Round-Robin Start
|
||||
nCheckSearchIndex : Int; // aktuell geprüfter Index
|
||||
nSearchLoopIndex : Int; // Schleifenvariable 1..12
|
||||
nCandidateBlockId : Int; // 1..3
|
||||
nCandLager : Int;
|
||||
nCandLine : Int;
|
||||
nBlkID : Int;
|
||||
nPendingLagerIndex : Int;
|
||||
nLagerIndex : Int;
|
||||
END_VAR
|
||||
|
||||
VAR_TEMP
|
||||
nResetIdx : Int;
|
||||
END_VAR
|
||||
|
||||
|
||||
BEGIN
|
||||
|
||||
REGION Info
|
||||
(* Company: Schönenberger Systeme GmbH / (C) Copyright (2022). All rights reserved.
|
||||
-----------------------------------------------------------------------------------------
|
||||
Title: FB_StockRemovalSequencerUDT
|
||||
Comment/Function: Manage the stock remove releases
|
||||
Library/Family: -
|
||||
Author: department: "Automatisierung" ; person in charge / contact: C.Nottelmann (Automated Intelligence)
|
||||
Target System: CPU 1518F-4 PN/DP
|
||||
Engineering: TIA Portal V20
|
||||
Restrictions: -
|
||||
Requirements: -
|
||||
-----------------------------------------------------------------------------------------
|
||||
Change log table:
|
||||
Version | Date | Signature (Safety) | Expert in charge | Changes applied
|
||||
------------|------------|--------------------|------------------|-----------------------
|
||||
001.000.000 | 2025-11-10 | - | | Header added on 10.11.2025
|
||||
|
||||
*)
|
||||
END_REGION
|
||||
|
||||
|
||||
|
||||
IF #xReset THEN
|
||||
#udt_InOutStorageSite.nRemove_LastServed := 0;
|
||||
#udt_InOutStorageSite.nRemove_ActiveIDX := 0;
|
||||
#udt_InOutStorageSite.nRemove_Busy := FALSE;
|
||||
FOR #nSearchLoopIndex := 1 TO 12 DO
|
||||
#udt_InOutStorageSite.arrudt_Storage[#nSearchLoopIndex].udt_RearrangeStorageState.xRemoveGrant := FALSE;
|
||||
END_FOR;
|
||||
|
||||
ELSE
|
||||
// ---------------- Kandidatensuche (nur wenn nicht aktiv) ----------------
|
||||
#xCandidateFound := FALSE;
|
||||
#nNextGlobalIndex := 0;
|
||||
|
||||
#nStartSearchIndex := #udt_InOutStorageSite.nRemove_LastServed + 1;
|
||||
IF #nStartSearchIndex > 12 THEN
|
||||
#nStartSearchIndex := 1;
|
||||
END_IF;
|
||||
#nCheckSearchIndex := #nStartSearchIndex;
|
||||
|
||||
FOR #nSearchLoopIndex := 1 TO 12 DO
|
||||
#nCandidateBlockId := #udt_InOutStorageSite.arrudt_Storage[#nCheckSearchIndex].udt_RearrangeStorageCtrl.nBlockID;
|
||||
|
||||
IF (#udt_InOutStorageSite.arrudt_Storage[#nCheckSearchIndex].udt_RearrangeStorageCtrl.xEnableRemove) AND
|
||||
(#udt_InOutStorageSite.arrudt_Storage[#nCheckSearchIndex].udt_RearrangeStorageCtrl.xRemoveRequest) AND
|
||||
(#udt_InOutStorageSite.arrudt_Storage[#nCheckSearchIndex].udt_RearrangeStorageState.xRearrange_Done) AND // erst nach Umlagerung sinnvoll
|
||||
(NOT #udt_InOutStorageSite.arrudt_Storage[#nCheckSearchIndex].udt_RearrangeStorageState.xRearrangeBusy) AND
|
||||
(NOT #udt_InOutStorageSite.arrudt_Storage[#nCheckSearchIndex].udt_RearrangeStorageState.xRearrangeGrant) AND
|
||||
(#nCandidateBlockId >= 1) AND (#nCandidateBlockId <= 3) AND
|
||||
(#udt_InOutStorageSite.arrudt_BlockGroup[#nCandidateBlockId].udt_BlockGroupCtrl.xReadyRemove)
|
||||
THEN
|
||||
#nNextGlobalIndex := #nCheckSearchIndex;
|
||||
#xCandidateFound := TRUE;
|
||||
EXIT;
|
||||
END_IF;
|
||||
|
||||
#nCheckSearchIndex := #nCheckSearchIndex + 1;
|
||||
IF #nCheckSearchIndex > 12 THEN
|
||||
#nCheckSearchIndex := 1;
|
||||
END_IF;
|
||||
END_FOR;
|
||||
|
||||
// ---------------- Ablauf: global exakt ein Lager ----------------
|
||||
IF NOT #udt_InOutStorageSite.nRemove_Busy THEN
|
||||
// Alles zurücksetzen
|
||||
FOR #nSearchLoopIndex := 1 TO 12 DO
|
||||
#udt_InOutStorageSite.arrudt_Storage[#nSearchLoopIndex].udt_RearrangeStorageState.xRemoveGrant := FALSE;
|
||||
END_FOR;
|
||||
#udt_InOutStorageSite.nRemove_ActiveIDX := 0;
|
||||
|
||||
// Starten, wenn Kandidat da
|
||||
IF #xCandidateFound THEN
|
||||
#udt_InOutStorageSite.nRemove_ActiveIDX := #nNextGlobalIndex;
|
||||
#udt_InOutStorageSite.arrudt_Storage[#udt_InOutStorageSite.nRemove_ActiveIDX].udt_RearrangeStorageState.xRemoveGrant := TRUE;
|
||||
#udt_InOutStorageSite.nRemove_Busy := TRUE;
|
||||
END_IF;
|
||||
|
||||
ELSE
|
||||
// aktiver Auftrag überwachen
|
||||
IF (#udt_InOutStorageSite.arrudt_Storage[#udt_InOutStorageSite.nRemove_ActiveIDX].udt_RearrangeStorageState.xRemoveDone) OR
|
||||
(NOT #udt_InOutStorageSite.arrudt_Storage[#udt_InOutStorageSite.nRemove_ActiveIDX].udt_RearrangeStorageCtrl.xRemoveRequest) OR
|
||||
(NOT #udt_InOutStorageSite.arrudt_Storage[#udt_InOutStorageSite.nRemove_ActiveIDX].udt_RearrangeStorageCtrl.xEnableRemove) THEN
|
||||
|
||||
// Abschluss
|
||||
#udt_InOutStorageSite.arrudt_Storage[#udt_InOutStorageSite.nRemove_ActiveIDX].udt_RearrangeStorageState.xRemoveGrant := FALSE;
|
||||
#udt_InOutStorageSite.nRemove_LastServed := #udt_InOutStorageSite.nRemove_ActiveIDX;
|
||||
#udt_InOutStorageSite.nRemove_ActiveIDX := 0;
|
||||
#udt_InOutStorageSite.nRemove_Busy := FALSE;
|
||||
|
||||
// Optional: sofort Folgekandidat starten
|
||||
IF #xCandidateFound THEN
|
||||
#udt_InOutStorageSite.nRemove_ActiveIDX := #nNextGlobalIndex;
|
||||
#udt_InOutStorageSite.arrudt_Storage[#udt_InOutStorageSite.nRemove_ActiveIDX].udt_RearrangeStorageState.xRemoveGrant := TRUE;
|
||||
#udt_InOutStorageSite.nRemove_Busy := TRUE;
|
||||
END_IF;
|
||||
ELSE
|
||||
// Exklusivität absichern
|
||||
FOR #nSearchLoopIndex := 1 TO 12 DO
|
||||
#udt_InOutStorageSite.arrudt_Storage[#nSearchLoopIndex].udt_RearrangeStorageState.xRemoveGrant :=
|
||||
(#nSearchLoopIndex = #udt_InOutStorageSite.nRemove_ActiveIDX);
|
||||
END_FOR;
|
||||
END_IF;
|
||||
END_IF;
|
||||
END_IF;
|
||||
|
||||
REGION Empty Carrier
|
||||
|
||||
// Prüfen, ob ein Lager noch im Handover-Fenster hängt:
|
||||
// (= Snapshot gesetzt aber Empty_Busy noch FALSE)
|
||||
#nPendingLagerIndex := 0;
|
||||
FOR #nLagerIndex := 1 TO 12 DO
|
||||
IF #udt_InOutStorageSite.arrudt_Storage[#nLagerIndex].udt_RearrangeStorageState.xEmptySelLineValid
|
||||
AND (NOT #udt_InOutStorageSite.arrudt_Storage[#nLagerIndex].udt_RearrangeStorageState.xEmptyBusy) THEN
|
||||
#nPendingLagerIndex := #nLagerIndex;
|
||||
EXIT;
|
||||
END_IF;
|
||||
END_FOR;
|
||||
|
||||
// Falls Pending existiert: NICHT umschalten, denselben Request weiter behaupten
|
||||
IF #nPendingLagerIndex <> 0 THEN
|
||||
#udt_InOutStorageSite.arrudt_Storage[#nPendingLagerIndex].udt_RearrangeStorageCtrl.xEmptyReq := TRUE; // bis Busy kommt
|
||||
ELSE
|
||||
//Sonst neuen Kandidaten auswerten und SNAPSHOT+Request setzen
|
||||
|
||||
#nCandLager := #nMaxEmptyBLK; // 1..12
|
||||
#nCandLine := #nMaxEmptyLine; // 1..21
|
||||
|
||||
IF (#nCandLager >= 1) AND (#nCandLager <= 12) THEN
|
||||
// lokale Interlocks + Ready des Blocks
|
||||
#nBlkID := #udt_InOutStorageSite.arrudt_Storage[#nCandLager].udt_RearrangeStorageCtrl.nBlockID;
|
||||
IF #udt_InOutStorageSite.arrudt_BlockGroup[#nBlkID].udt_BlockGroupCtrl.xReadyRemove
|
||||
AND (NOT #udt_InOutStorageSite.arrudt_Storage[#nCandLager].udt_RearrangeStorageState.xRearrangeBusy)
|
||||
AND (NOT #udt_InOutStorageSite.arrudt_Storage[#nCandLager].udt_RearrangeStorageState.xRearrangeGrant)
|
||||
AND (NOT #udt_InOutStorageSite.arrudt_Storage[#nCandLager].udt_RearrangeStorageState.xRemoveBusy)
|
||||
AND (NOT #udt_InOutStorageSite.arrudt_Storage[#nCandLager].udt_RearrangeStorageState.xRemoveGrant)
|
||||
AND (NOT #udt_InOutStorageSite.arrudt_Storage[#nCandLager].udt_RearrangeStorageState.xEmptyBusy)
|
||||
AND (#udt_In_CarrierNeeded.xF2HEmptyNeeded OR #udt_In_CarrierNeeded.xInboundEmptyNeeded)
|
||||
//AND Inbound braucht Leere Carrier
|
||||
//AND F2H braucht Leere Carrier
|
||||
THEN
|
||||
|
||||
// SNAPSHOT zusammen mit der Anfrage
|
||||
IF NOT #udt_InOutStorageSite.arrudt_Storage[#nCandLager].udt_RearrangeStorageState.xEmptySelLineValid THEN
|
||||
#udt_InOutStorageSite.arrudt_Storage[#nCandLager].udt_RearrangeStorageState.nEmptySelLine :=INT_TO_USINT(#nCandLine);
|
||||
#udt_InOutStorageSite.arrudt_Storage[#nCandLager].udt_RearrangeStorageState.xEmptySelLineValid := TRUE;
|
||||
END_IF;
|
||||
|
||||
// Anfrage für leere Auslagerung (Start entsteht in der Unterlogik-Bridge)
|
||||
#udt_InOutStorageSite.arrudt_Storage[#nCandLager].udt_RearrangeStorageCtrl.xEmptyReq := TRUE;
|
||||
END_IF;
|
||||
END_IF;
|
||||
END_IF;
|
||||
|
||||
// Request automatisch zurücknehmen, sobald der Job losläuft
|
||||
FOR #nResetIdx := 1 TO 12 DO
|
||||
IF #udt_InOutStorageSite.arrudt_Storage[#nResetIdx].udt_RearrangeStorageState.xEmptyBusy THEN
|
||||
#udt_InOutStorageSite.arrudt_Storage[#nResetIdx].udt_RearrangeStorageCtrl.xEmptyReq := FALSE;
|
||||
END_IF;
|
||||
END_FOR;
|
||||
|
||||
END_REGION
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
END_FUNCTION_BLOCK
|
||||
|
||||
+1773
File diff suppressed because it is too large
Load Diff
+917
@@ -0,0 +1,917 @@
|
||||
FUNCTION_BLOCK "FB_StorageManagementCall"
|
||||
{ S7_Optimized_Access := 'TRUE' }
|
||||
VERSION : 0.1
|
||||
VAR
|
||||
Lfb_StoreBLk1 { S7_SetPoint := 'False'} : "FB_LV1BlockStorageManagement";
|
||||
Lfb_StoreBLk2 : "FB_LV1BlockStorageManagement";
|
||||
Lfb_StoreBLk3 : "FB_LV1BlockStorageManagement";
|
||||
Lfb_StorageRemoval : "Fb_StockRemovalManagementLvl1";
|
||||
stIn_JamDataBlock1 : Struct
|
||||
stIn_JamData1101 : Struct
|
||||
udt_JamData1101_1 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1101_2 { S7_SetPoint := 'False'} : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData1102 : Struct
|
||||
udt_JamData1102_1 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1102_2 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1102_3 { S7_SetPoint := 'False'} : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData1103 : Struct
|
||||
udt_JamData1103_1 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1103_2 { S7_SetPoint := 'False'} : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData1104 : Struct
|
||||
udt_JamData1104_1 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1104_2 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1104_3 { S7_SetPoint := 'False'} : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData1105 : Struct
|
||||
udt_JamData1105_1 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1105_2 { S7_SetPoint := 'False'} : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData1106 : Struct
|
||||
udt_JamData1106_1 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1106_2 { S7_SetPoint := 'False'} : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData1107 : Struct
|
||||
udt_JamData1107_1 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1107_2 { S7_SetPoint := 'False'} : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData1108 : Struct
|
||||
udt_JamData1108_1 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1108_2 { S7_SetPoint := 'False'} : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData1109 : Struct
|
||||
udt_JamData1109_1 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1109_2 { S7_SetPoint := 'False'} : "stJamData";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamDataBlock2 : Struct
|
||||
stIn_JamData1201 : Struct
|
||||
udt_JamData1201_1 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1201_2 { S7_SetPoint := 'False'} : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData1202 : Struct
|
||||
udt_JamData1202_1 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1202_2 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1202_3 { S7_SetPoint := 'False'} : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData1203 : Struct
|
||||
udt_JamData1203_1 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1203_2 { S7_SetPoint := 'False'} : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData1204 : Struct
|
||||
udt_JamData1204_1 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1204_2 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1204_3 { S7_SetPoint := 'False'} : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData1205 : Struct
|
||||
udt_JamData1205_1 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1205_2 { S7_SetPoint := 'False'} : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData1206 : Struct
|
||||
udt_JamData1206_1 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1206_2 { S7_SetPoint := 'False'} : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData1207 : Struct
|
||||
udt_JamData1207_1 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1207_2 { S7_SetPoint := 'False'} : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData1208 : Struct
|
||||
udt_JamData1208_1 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1208_2 { S7_SetPoint := 'False'} : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData1209 : Struct
|
||||
udt_JamData1209_1 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1209_2 { S7_SetPoint := 'False'} : "stJamData";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamDataBlock3 : Struct
|
||||
stIn_JamData1301 : Struct
|
||||
udt_JamData1301_1 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1301_2 { S7_SetPoint := 'False'} : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData1302 : Struct
|
||||
udt_JamData1302_1 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1302_2 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1302_3 { S7_SetPoint := 'False'} : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData1303 : Struct
|
||||
udt_JamData1303_1 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1303_2 { S7_SetPoint := 'False'} : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData1304 : Struct
|
||||
udt_JamData1304_1 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1304_2 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1304_3 { S7_SetPoint := 'False'} : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData1305 : Struct
|
||||
udt_JamData1305_1 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1305_2 { S7_SetPoint := 'False'} : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData1306 : Struct
|
||||
udt_JamData1306_1 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1306_2 { S7_SetPoint := 'False'} : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData1307 : Struct
|
||||
udt_JamData1307_1 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1307_2 { S7_SetPoint := 'False'} : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData1308 : Struct
|
||||
udt_JamData1308_1 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1308_2 { S7_SetPoint := 'False'} : "stJamData";
|
||||
END_STRUCT;
|
||||
stIn_JamData1309 : Struct
|
||||
udt_JamData1309_1 { S7_SetPoint := 'False'} : "stJamData";
|
||||
udt_JamData1309_2 { S7_SetPoint := 'False'} : "stJamData";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamCarrierBlock1 : Struct
|
||||
stIn_JamCarrier1101 : Struct
|
||||
udt_JamCarrier1101_1 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1101_1"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1101_2 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1101_2"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamCarrier1102 : Struct
|
||||
udt_JamCarrier1102_1 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1102_1"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1102_2 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1102_2"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1102_3 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1102_3"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamCarrier1103 : Struct
|
||||
udt_JamCarrier1103_1 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1103_1"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1103_2 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1103_2"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamCarrier1104 : Struct
|
||||
udt_JamCarrier1104_1 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1104_1"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1104_2 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1104_2"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1104_3 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1104_3"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamCarrier1105 : Struct
|
||||
udt_JamCarrier1105_1 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1105_1"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1105_2 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1105_2"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamCarrier1106 : Struct
|
||||
udt_JamCarrier1106_1 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1106_1"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1106_2 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1106_2"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamCarrier1107 : Struct
|
||||
udt_JamCarrier1107_1 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1107_1"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1107_2 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1107_2"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamCarrier1108 : Struct
|
||||
udt_JamCarrier1108_1 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1108_1"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1108_2 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1108_2"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamCarrier1109 : Struct
|
||||
udt_JamCarrier1109_1 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1109_1"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1109_2 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1109_2"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamCarrierBlock2 : Struct
|
||||
stIn_JamCarrier1201 : Struct
|
||||
udt_JamCarrier1201_1 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1201_1"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1201_2 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1201_2"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamCarrier1202 : Struct
|
||||
udt_JamCarrier1202_1 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1202_1"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1202_2 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1202_2"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1202_3 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1202_3"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamCarrier1203 : Struct
|
||||
udt_JamCarrier1203_1 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1203_1"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1203_2 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1203_2"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamCarrier1204 : Struct
|
||||
udt_JamCarrier1204_1 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1204_1"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1204_2 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1204_2"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1204_3 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1204_3"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamCarrier1205 : Struct
|
||||
udt_JamCarrier1205_1 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1205_1"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1205_2 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1205_2"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamCarrier1206 : Struct
|
||||
udt_JamCarrier1206_1 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1206_1"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1206_2 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1206_2"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamCarrier1207 : Struct
|
||||
udt_JamCarrier1207_1 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1207_1"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1207_2 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1207_2"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamCarrier1208 : Struct
|
||||
udt_JamCarrier1208_1 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1208_1"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1208_2 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1208_2"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamCarrier1209 : Struct
|
||||
udt_JamCarrier1209_1 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1209_1"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1209_2 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1209_2"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamCarrierBlock3 : Struct
|
||||
stIn_JamCarrier1301 : Struct
|
||||
udt_JamCarrier1301_1 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1301_1"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1301_2 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1301_2"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamCarrier1302 : Struct
|
||||
udt_JamCarrier1302_1 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1302_1"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1302_2 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1302_2"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1302_3 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1302_3"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamCarrier1303 : Struct
|
||||
udt_JamCarrier1303_1 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1303_1"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1303_2 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1303_2"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamCarrier1304 : Struct
|
||||
udt_JamCarrier1304_1 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1304_1"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1304_2 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1304_2"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1304_3 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1304_3"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamCarrier1305 : Struct
|
||||
udt_JamCarrier1305_1 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1305_1"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1305_2 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1305_2"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamCarrier1306 : Struct
|
||||
udt_JamCarrier1306_1 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1306_1"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1306_2 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1306_2"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamCarrier1307 : Struct
|
||||
udt_JamCarrier1307_1 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1307_1"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1307_2 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1307_2"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamCarrier1308 : Struct
|
||||
udt_JamCarrier1308_1 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1308_1"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1308_2 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1308_2"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
stIn_JamCarrier1309 : Struct
|
||||
udt_JamCarrier1309_1 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1309_1"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
udt_JamCarrier1309_2 : Struct
|
||||
arCarrier { S7_SetPoint := 'False'} : Array[1.."cJam1309_2"] of "stCarrier";
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
END_STRUCT;
|
||||
END_VAR
|
||||
|
||||
|
||||
BEGIN
|
||||
|
||||
REGION Info
|
||||
(* Company: Schönenberger Systeme GmbH / (C) Copyright (2022). All rights reserved.
|
||||
-----------------------------------------------------------------------------------------
|
||||
Title: FB_StorageManagementCall
|
||||
Comment/Function: Call all Storage Management FBs
|
||||
Library/Family: -
|
||||
Author: department: "Automatisierung" ; person in charge / contact: C.Nottelmann (Automated Intelligence)
|
||||
Target System: CPU 1518F-4 PN/DP
|
||||
Engineering: TIA Portal V20
|
||||
Restrictions: -
|
||||
Requirements: -
|
||||
-----------------------------------------------------------------------------------------
|
||||
Change log table:
|
||||
Version | Date | Signature (Safety) | Expert in charge | Changes applied
|
||||
------------|------------|--------------------|------------------|-----------------------
|
||||
001.000.000 | 2025-07-10 | - | | Header added on 10.07.2025
|
||||
|
||||
*)
|
||||
END_REGION
|
||||
|
||||
REGION Storage Management / Store
|
||||
REGION Mapping
|
||||
REGION Block 1
|
||||
// 1101
|
||||
#stIn_JamDataBlock1.stIn_JamData1101.udt_JamData1101_1.Config := "DB_JamArea1101".stJam1101_1.stData.Config;
|
||||
#stIn_JamDataBlock1.stIn_JamData1101.udt_JamData1101_1.Status := "DB_JamArea1101".stJam1101_1.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock1.stIn_JamData1101.udt_JamData1101_2.Config := "DB_JamArea1101".stJam1101_2.stData.Config;
|
||||
#stIn_JamDataBlock1.stIn_JamData1101.udt_JamData1101_2.Status := "DB_JamArea1101".stJam1101_2.stData.Status;
|
||||
|
||||
//2102
|
||||
#stIn_JamDataBlock1.stIn_JamData1102.udt_JamData1102_1.Config := "DB_JamArea1102".stJam1102_1.stData.Config;
|
||||
#stIn_JamDataBlock1.stIn_JamData1102.udt_JamData1102_1.Status := "DB_JamArea1102".stJam1102_1.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock1.stIn_JamData1102.udt_JamData1102_2.Config := "DB_JamArea1102".stJam1102_2.stData.Config;
|
||||
#stIn_JamDataBlock1.stIn_JamData1102.udt_JamData1102_2.Status := "DB_JamArea1102".stJam1102_2.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock1.stIn_JamData1102.udt_JamData1102_3.Config := "DB_JamArea1102".stJam1102_3.stData.Config;
|
||||
#stIn_JamDataBlock1.stIn_JamData1102.udt_JamData1102_3.Status := "DB_JamArea1102".stJam1102_3.stData.Status;
|
||||
|
||||
|
||||
|
||||
//1103
|
||||
#stIn_JamDataBlock1.stIn_JamData1103.udt_JamData1103_1.Config := "DB_JamArea1103".stJam1103_1.stData.Config;
|
||||
#stIn_JamDataBlock1.stIn_JamData1103.udt_JamData1103_1.Status := "DB_JamArea1103".stJam1103_1.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock1.stIn_JamData1103.udt_JamData1103_2.Config := "DB_JamArea1103".stJam1103_2.stData.Config;
|
||||
#stIn_JamDataBlock1.stIn_JamData1103.udt_JamData1103_2.Status := "DB_JamArea1103".stJam1103_2.stData.Status;
|
||||
|
||||
//1104
|
||||
#stIn_JamDataBlock1.stIn_JamData1104.udt_JamData1104_1.Config := "DB_JamArea1104".stJam1104_1.stData.Config;
|
||||
#stIn_JamDataBlock1.stIn_JamData1104.udt_JamData1104_1.Status := "DB_JamArea1104".stJam1104_1.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock1.stIn_JamData1104.udt_JamData1104_2.Config := "DB_JamArea1104".stJam1104_2.stData.Config;
|
||||
#stIn_JamDataBlock1.stIn_JamData1104.udt_JamData1104_2.Status := "DB_JamArea1104".stJam1104_2.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock1.stIn_JamData1104.udt_JamData1104_3.Config := "DB_JamArea1104".stJam1104_3.stData.Config;
|
||||
#stIn_JamDataBlock1.stIn_JamData1104.udt_JamData1104_3.Status := "DB_JamArea1104".stJam1104_3.stData.Status;
|
||||
|
||||
// #stIn_JamDataBlock1.stIn_JamData1104.udt_JamData1104_4.Config := "DB_JamArea1104".stJam1104_4.stData.Config;
|
||||
// #stIn_JamDataBlock1.stIn_JamData1104.udt_JamData1104_4.Status := "DB_JamArea1104".stJam1104_4.stData.Status;
|
||||
|
||||
//1105
|
||||
#stIn_JamDataBlock1.stIn_JamData1105.udt_JamData1105_1.Config := "DB_JamArea1105".stJam1105_1.stData.Config;
|
||||
#stIn_JamDataBlock1.stIn_JamData1105.udt_JamData1105_1.Status := "DB_JamArea1105".stJam1105_1.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock1.stIn_JamData1105.udt_JamData1105_2.Config := "DB_JamArea1105".stJam1105_2.stData.Config;
|
||||
#stIn_JamDataBlock1.stIn_JamData1105.udt_JamData1105_2.Status := "DB_JamArea1105".stJam1105_2.stData.Status;
|
||||
|
||||
//1106
|
||||
#stIn_JamDataBlock1.stIn_JamData1106.udt_JamData1106_1.Config := "DB_JamArea1106".stJam1106_1.stData.Config;
|
||||
#stIn_JamDataBlock1.stIn_JamData1106.udt_JamData1106_1.Status := "DB_JamArea1106".stJam1106_1.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock1.stIn_JamData1106.udt_JamData1106_2.Config := "DB_JamArea1106".stJam1106_2.stData.Config;
|
||||
#stIn_JamDataBlock1.stIn_JamData1106.udt_JamData1106_2.Status := "DB_JamArea1106".stJam1106_2.stData.Status;
|
||||
|
||||
//1107
|
||||
#stIn_JamDataBlock1.stIn_JamData1107.udt_JamData1107_1.Config := "DB_JamArea1107".stJam1107_1.stData.Config;
|
||||
#stIn_JamDataBlock1.stIn_JamData1107.udt_JamData1107_1.Status := "DB_JamArea1107".stJam1107_1.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock1.stIn_JamData1107.udt_JamData1107_2.Config := "DB_JamArea1107".stJam1107_2.stData.Config;
|
||||
#stIn_JamDataBlock1.stIn_JamData1107.udt_JamData1107_2.Status := "DB_JamArea1107".stJam1107_2.stData.Status;
|
||||
|
||||
//1108
|
||||
#stIn_JamDataBlock1.stIn_JamData1108.udt_JamData1108_1.Config := "DB_JamArea1108".stJam1108_1.stData.Config;
|
||||
#stIn_JamDataBlock1.stIn_JamData1108.udt_JamData1108_1.Status := "DB_JamArea1108".stJam1108_1.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock1.stIn_JamData1108.udt_JamData1108_2.Config := "DB_JamArea1108".stJam1108_2.stData.Config;
|
||||
#stIn_JamDataBlock1.stIn_JamData1108.udt_JamData1108_2.Status := "DB_JamArea1108".stJam1108_2.stData.Status;
|
||||
|
||||
//1109
|
||||
#stIn_JamDataBlock1.stIn_JamData1109.udt_JamData1109_1.Config := "DB_JamArea1109".stJam1109_1.stData.Config;
|
||||
#stIn_JamDataBlock1.stIn_JamData1109.udt_JamData1109_1.Status := "DB_JamArea1109".stJam1109_1.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock1.stIn_JamData1109.udt_JamData1109_2.Config := "DB_JamArea1109".stJam1109_2.stData.Config;
|
||||
#stIn_JamDataBlock1.stIn_JamData1109.udt_JamData1109_2.Status := "DB_JamArea1109".stJam1109_2.stData.Status;
|
||||
END_REGION
|
||||
|
||||
REGION Block 2
|
||||
// 1201
|
||||
#stIn_JamDataBlock2.stIn_JamData1201.udt_JamData1201_1.Config := "DB_JamArea1201".stJam1201_1.stData.Config;
|
||||
#stIn_JamDataBlock2.stIn_JamData1201.udt_JamData1201_1.Status := "DB_JamArea1201".stJam1201_1.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock2.stIn_JamData1201.udt_JamData1201_2.Config := "DB_JamArea1201".stJam1201_2.stData.Config;
|
||||
#stIn_JamDataBlock2.stIn_JamData1201.udt_JamData1201_2.Status := "DB_JamArea1201".stJam1201_2.stData.Status;
|
||||
|
||||
//1202
|
||||
#stIn_JamDataBlock2.stIn_JamData1202.udt_JamData1202_1.Config := "DB_JamArea1202".stJam1202_1.stData.Config;
|
||||
#stIn_JamDataBlock2.stIn_JamData1202.udt_JamData1202_1.Status := "DB_JamArea1202".stJam1202_1.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock2.stIn_JamData1202.udt_JamData1202_2.Config := "DB_JamArea1202".stJam1202_2.stData.Config;
|
||||
#stIn_JamDataBlock2.stIn_JamData1202.udt_JamData1202_2.Status := "DB_JamArea1202".stJam1202_2.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock2.stIn_JamData1202.udt_JamData1202_3.Config := "DB_JamArea1202".stJam1202_3.stData.Config;
|
||||
#stIn_JamDataBlock2.stIn_JamData1202.udt_JamData1202_3.Status := "DB_JamArea1202".stJam1202_3.stData.Status;
|
||||
|
||||
|
||||
|
||||
//1203
|
||||
#stIn_JamDataBlock2.stIn_JamData1203.udt_JamData1203_1.Config := "DB_JamArea1203".stJam1203_1.stData.Config;
|
||||
#stIn_JamDataBlock2.stIn_JamData1203.udt_JamData1203_1.Status := "DB_JamArea1203".stJam1203_1.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock2.stIn_JamData1203.udt_JamData1203_2.Config := "DB_JamArea1203".stJam1203_2.stData.Config;
|
||||
#stIn_JamDataBlock2.stIn_JamData1203.udt_JamData1203_2.Status := "DB_JamArea1203".stJam1203_2.stData.Status;
|
||||
|
||||
//1204
|
||||
#stIn_JamDataBlock2.stIn_JamData1204.udt_JamData1204_1.Config := "DB_JamArea1204".stJam1204_1.stData.Config;
|
||||
#stIn_JamDataBlock2.stIn_JamData1204.udt_JamData1204_1.Status := "DB_JamArea1204".stJam1204_1.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock2.stIn_JamData1204.udt_JamData1204_2.Config := "DB_JamArea1204".stJam1204_2.stData.Config;
|
||||
#stIn_JamDataBlock2.stIn_JamData1204.udt_JamData1204_2.Status := "DB_JamArea1204".stJam1204_2.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock2.stIn_JamData1204.udt_JamData1204_3.Config := "DB_JamArea1204".stJam1204_3.stData.Config;
|
||||
#stIn_JamDataBlock2.stIn_JamData1204.udt_JamData1204_3.Status := "DB_JamArea1204".stJam1204_3.stData.Status;
|
||||
|
||||
|
||||
|
||||
//1205
|
||||
#stIn_JamDataBlock2.stIn_JamData1205.udt_JamData1205_1.Config := "DB_JamArea1205".stJam1205_1.stData.Config;
|
||||
#stIn_JamDataBlock2.stIn_JamData1205.udt_JamData1205_1.Status := "DB_JamArea1205".stJam1205_1.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock2.stIn_JamData1205.udt_JamData1205_2.Config := "DB_JamArea1205".stJam1205_2.stData.Config;
|
||||
#stIn_JamDataBlock2.stIn_JamData1205.udt_JamData1205_2.Status := "DB_JamArea1205".stJam1205_2.stData.Status;
|
||||
|
||||
//1206
|
||||
#stIn_JamDataBlock2.stIn_JamData1206.udt_JamData1206_1.Config := "DB_JamArea1206".stJam1206_1.stData.Config;
|
||||
#stIn_JamDataBlock2.stIn_JamData1206.udt_JamData1206_1.Status := "DB_JamArea1206".stJam1206_1.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock2.stIn_JamData1206.udt_JamData1206_2.Config := "DB_JamArea1206".stJam1206_2.stData.Config;
|
||||
#stIn_JamDataBlock2.stIn_JamData1206.udt_JamData1206_2.Status := "DB_JamArea1206".stJam1206_2.stData.Status;
|
||||
|
||||
//1207
|
||||
#stIn_JamDataBlock2.stIn_JamData1207.udt_JamData1207_1.Config := "DB_JamArea1207".stJam1207_1.stData.Config;
|
||||
#stIn_JamDataBlock2.stIn_JamData1207.udt_JamData1207_1.Status := "DB_JamArea1207".stJam1207_1.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock2.stIn_JamData1207.udt_JamData1207_2.Config := "DB_JamArea1207".stJam1207_2.stData.Config;
|
||||
#stIn_JamDataBlock2.stIn_JamData1207.udt_JamData1207_2.Status := "DB_JamArea1207".stJam1207_2.stData.Status;
|
||||
|
||||
//1208
|
||||
#stIn_JamDataBlock2.stIn_JamData1208.udt_JamData1208_1.Config := "DB_JamArea1208".stJam1208_1.stData.Config;
|
||||
#stIn_JamDataBlock2.stIn_JamData1208.udt_JamData1208_1.Status := "DB_JamArea1208".stJam1208_1.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock2.stIn_JamData1208.udt_JamData1208_2.Config := "DB_JamArea1208".stJam1208_2.stData.Config;
|
||||
#stIn_JamDataBlock2.stIn_JamData1208.udt_JamData1208_2.Status := "DB_JamArea1208".stJam1208_2.stData.Status;
|
||||
|
||||
//1209
|
||||
#stIn_JamDataBlock2.stIn_JamData1209.udt_JamData1209_1.Config := "DB_JamArea1209".stJam1209_1.stData.Config;
|
||||
#stIn_JamDataBlock2.stIn_JamData1209.udt_JamData1209_1.Status := "DB_JamArea1209".stJam1209_1.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock2.stIn_JamData1209.udt_JamData1209_2.Config := "DB_JamArea1209".stJam1209_2.stData.Config;
|
||||
#stIn_JamDataBlock2.stIn_JamData1209.udt_JamData1209_2.Status := "DB_JamArea1209".stJam1209_2.stData.Status;
|
||||
|
||||
END_REGION
|
||||
|
||||
REGION Block 3
|
||||
|
||||
// 1301
|
||||
#stIn_JamDataBlock3.stIn_JamData1301.udt_JamData1301_1.Config := "DB_JamArea1301".stJam1301_1.stData.Config;
|
||||
#stIn_JamDataBlock3.stIn_JamData1301.udt_JamData1301_1.Status := "DB_JamArea1301".stJam1301_1.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock3.stIn_JamData1301.udt_JamData1301_2.Config := "DB_JamArea1301".stJam1301_2.stData.Config;
|
||||
#stIn_JamDataBlock3.stIn_JamData1301.udt_JamData1301_2.Status := "DB_JamArea1301".stJam1301_2.stData.Status;
|
||||
|
||||
//1302
|
||||
#stIn_JamDataBlock3.stIn_JamData1302.udt_JamData1302_1.Config := "DB_JamArea1302".stJam1302_1.stData.Config;
|
||||
#stIn_JamDataBlock3.stIn_JamData1302.udt_JamData1302_1.Status := "DB_JamArea1302".stJam1302_1.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock3.stIn_JamData1302.udt_JamData1302_2.Config := "DB_JamArea1302".stJam1302_2.stData.Config;
|
||||
#stIn_JamDataBlock3.stIn_JamData1302.udt_JamData1302_2.Status := "DB_JamArea1302".stJam1302_2.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock3.stIn_JamData1302.udt_JamData1302_3.Config := "DB_JamArea1302".stJam1302_3.stData.Config;
|
||||
#stIn_JamDataBlock3.stIn_JamData1302.udt_JamData1302_3.Status := "DB_JamArea1302".stJam1302_3.stData.Status;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//1303
|
||||
#stIn_JamDataBlock3.stIn_JamData1303.udt_JamData1303_1.Config := "DB_JamArea1303".stJam1303_1.stData.Config;
|
||||
#stIn_JamDataBlock3.stIn_JamData1303.udt_JamData1303_1.Status := "DB_JamArea1303".stJam1303_1.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock3.stIn_JamData1303.udt_JamData1303_2.Config := "DB_JamArea1303".stJam1303_2.stData.Config;
|
||||
#stIn_JamDataBlock3.stIn_JamData1303.udt_JamData1303_2.Status := "DB_JamArea1303".stJam1303_2.stData.Status;
|
||||
|
||||
//1304
|
||||
#stIn_JamDataBlock3.stIn_JamData1304.udt_JamData1304_1.Config := "DB_JamArea1304".stJam1304_1.stData.Config;
|
||||
#stIn_JamDataBlock3.stIn_JamData1304.udt_JamData1304_1.Status := "DB_JamArea1304".stJam1304_1.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock3.stIn_JamData1304.udt_JamData1304_2.Config := "DB_JamArea1304".stJam1304_2.stData.Config;
|
||||
#stIn_JamDataBlock3.stIn_JamData1304.udt_JamData1304_2.Status := "DB_JamArea1304".stJam1304_2.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock3.stIn_JamData1304.udt_JamData1304_3.Config := "DB_JamArea1304".stJam1304_3.stData.Config;
|
||||
#stIn_JamDataBlock3.stIn_JamData1304.udt_JamData1304_3.Status := "DB_JamArea1304".stJam1304_3.stData.Status;
|
||||
|
||||
|
||||
|
||||
//1305
|
||||
#stIn_JamDataBlock3.stIn_JamData1305.udt_JamData1305_1.Config := "DB_JamArea1305".stJam1305_1.stData.Config;
|
||||
#stIn_JamDataBlock3.stIn_JamData1305.udt_JamData1305_1.Status := "DB_JamArea1305".stJam1305_1.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock3.stIn_JamData1305.udt_JamData1305_2.Config := "DB_JamArea1305".stJam1305_2.stData.Config;
|
||||
#stIn_JamDataBlock3.stIn_JamData1305.udt_JamData1305_2.Status := "DB_JamArea1305".stJam1305_2.stData.Status;
|
||||
|
||||
//1306
|
||||
#stIn_JamDataBlock3.stIn_JamData1306.udt_JamData1306_1.Config := "DB_JamArea1306".stJam1306_1.stData.Config;
|
||||
#stIn_JamDataBlock3.stIn_JamData1306.udt_JamData1306_1.Status := "DB_JamArea1306".stJam1306_1.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock3.stIn_JamData1306.udt_JamData1306_2.Config := "DB_JamArea1306".stJam1306_2.stData.Config;
|
||||
#stIn_JamDataBlock3.stIn_JamData1306.udt_JamData1306_2.Status := "DB_JamArea1306".stJam1306_2.stData.Status;
|
||||
|
||||
//1307
|
||||
#stIn_JamDataBlock3.stIn_JamData1307.udt_JamData1307_1.Config := "DB_JamArea1307".stJam1307_1.stData.Config;
|
||||
#stIn_JamDataBlock3.stIn_JamData1307.udt_JamData1307_1.Status := "DB_JamArea1307".stJam1307_1.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock3.stIn_JamData1307.udt_JamData1307_2.Config := "DB_JamArea1307".stJam1307_2.stData.Config;
|
||||
#stIn_JamDataBlock3.stIn_JamData1307.udt_JamData1307_2.Status := "DB_JamArea1307".stJam1307_2.stData.Status;
|
||||
|
||||
//1308
|
||||
#stIn_JamDataBlock3.stIn_JamData1308.udt_JamData1308_1.Config := "DB_JamArea1308".stJam1308_1.stData.Config;
|
||||
#stIn_JamDataBlock3.stIn_JamData1308.udt_JamData1308_1.Status := "DB_JamArea1308".stJam1308_1.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock3.stIn_JamData1308.udt_JamData1308_2.Config := "DB_JamArea1308".stJam1308_2.stData.Config;
|
||||
#stIn_JamDataBlock3.stIn_JamData1308.udt_JamData1308_2.Status := "DB_JamArea1308".stJam1308_2.stData.Status;
|
||||
|
||||
//1309
|
||||
#stIn_JamDataBlock3.stIn_JamData1309.udt_JamData1309_1.Config := "DB_JamArea1309".stJam1309_1.stData.Config;
|
||||
#stIn_JamDataBlock3.stIn_JamData1309.udt_JamData1309_1.Status := "DB_JamArea1309".stJam1309_1.stData.Status;
|
||||
|
||||
#stIn_JamDataBlock3.stIn_JamData1309.udt_JamData1309_2.Config := "DB_JamArea1309".stJam1309_2.stData.Config;
|
||||
#stIn_JamDataBlock3.stIn_JamData1309.udt_JamData1309_2.Status := "DB_JamArea1309".stJam1309_2.stData.Status;
|
||||
|
||||
|
||||
END_REGION
|
||||
|
||||
END_REGION
|
||||
|
||||
REGION Call
|
||||
|
||||
#Lfb_StoreBLk1(nInBlockDestination1 := "cDest11100",
|
||||
nInBlockDestination2 := "cDest11200",
|
||||
nInBlockDestination3 := "cDest11300",
|
||||
nInBlockDestination4 := "cDest11400",
|
||||
stIn_JamDataBlock := #stIn_JamDataBlock1,
|
||||
wsIn_ObjectName := WSTRING#'Storage Management Level1 Block1',
|
||||
xOut_StorageRelease => "DB_HandshakeStorage".str_StorageManagement.udt_Lvl1Release.b_StorageReleaseBlock1xx,
|
||||
arrudt_Storage1n1 := "DB_Storage1.1.1".arLine,
|
||||
udt_Storage1n1BlockData := "DB_Storage1.1.1".stStorageBlockData,
|
||||
arrudt_Storage1n2 := "DB_Storage1.1.2".arLine,
|
||||
udt_Storage1n2BlockData := "DB_Storage1.1.2".stStorageBlockData,
|
||||
arrudt_Storage1n3 := "DB_Storage1.1.3".arLine,
|
||||
udt_Storage1n3BlockData := "DB_Storage1.1.3".stStorageBlockData,
|
||||
arrudt_Storage1n4 := "DB_Storage1.1.4".arLine,
|
||||
udt_Storage1n4BlockData := "DB_Storage1.1.4".stStorageBlockData,
|
||||
udtInOut_CarrierAtScanner := "DB_JamArea1102".stJam1102_1.arCarrier[1]);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#Lfb_StoreBLk2(nInBlockDestination1 := "cDest12100",
|
||||
nInBlockDestination2 := "cDest12200",
|
||||
nInBlockDestination3 := "cDest12300",
|
||||
nInBlockDestination4 := "cDest12400",
|
||||
wsIn_ObjectName:=WSTRING#'Storage Management Level1 Block2',
|
||||
xOut_StorageRelease=>"DB_HandshakeStorage".str_StorageManagement.udt_Lvl1Release.b_StorageReleaseBlock2xx,
|
||||
arrudt_Storage1n1:="DB_Storage1.2.1".arLine,
|
||||
udt_Storage1n1BlockData:="DB_Storage1.2.1".stStorageBlockData,
|
||||
arrudt_Storage1n2:="DB_Storage1.2.2".arLine,
|
||||
udt_Storage1n2BlockData:="DB_Storage1.2.2".stStorageBlockData,
|
||||
arrudt_Storage1n3:="DB_Storage1.2.3".arLine,
|
||||
udt_Storage1n3BlockData:="DB_Storage1.2.3".stStorageBlockData,
|
||||
arrudt_Storage1n4:="DB_Storage1.2.4".arLine,
|
||||
udt_Storage1n4BlockData:="DB_Storage1.2.4".stStorageBlockData,
|
||||
udtInOut_CarrierAtScanner:="DB_JamArea1202".stJam1202_1.arCarrier[1]);
|
||||
|
||||
|
||||
#Lfb_StoreBLk3(nInBlockDestination1 := "cDest13100",
|
||||
nInBlockDestination2 := "cDest13200",
|
||||
nInBlockDestination3 := "cDest13300",
|
||||
nInBlockDestination4 := "cDest13400",
|
||||
wsIn_ObjectName:=WSTRING#'Storage Management Level1 Block3',
|
||||
xOut_StorageRelease=>"DB_HandshakeStorage".str_StorageManagement.udt_Lvl1Release.b_StorageReleaseBlock3xx,
|
||||
arrudt_Storage1n1:="DB_Storage1.3.1".arLine,
|
||||
udt_Storage1n1BlockData:="DB_Storage1.3.1".stStorageBlockData,
|
||||
arrudt_Storage1n2:="DB_Storage1.3.2".arLine,
|
||||
udt_Storage1n2BlockData:="DB_Storage1.3.2".stStorageBlockData,
|
||||
arrudt_Storage1n3:="DB_Storage1.3.3".arLine,
|
||||
udt_Storage1n3BlockData:="DB_Storage1.3.3".stStorageBlockData,
|
||||
arrudt_Storage1n4:="DB_Storage1.3.4".arLine,
|
||||
udt_Storage1n4BlockData:="DB_Storage1.3.4".stStorageBlockData,
|
||||
udtInOut_CarrierAtScanner:="DB_JamArea1304".stJam1304_1.arCarrier[1]);
|
||||
|
||||
|
||||
|
||||
|
||||
END_REGION
|
||||
|
||||
END_REGION
|
||||
|
||||
REGION Storage Removal
|
||||
|
||||
REGION Mapping
|
||||
REGION Block 1
|
||||
////1101
|
||||
#stIn_JamCarrierBlock1.stIn_JamCarrier1101.udt_JamCarrier1101_1.arCarrier := "DB_JamArea1101".stJam1101_1.arCarrier;
|
||||
#stIn_JamCarrierBlock1.stIn_JamCarrier1101.udt_JamCarrier1101_2.arCarrier := "DB_JamArea1101".stJam1101_2.arCarrier;
|
||||
|
||||
////1102
|
||||
#stIn_JamCarrierBlock1.stIn_JamCarrier1102.udt_JamCarrier1102_1.arCarrier := "DB_JamArea1102".stJam1102_1.arCarrier;
|
||||
#stIn_JamCarrierBlock1.stIn_JamCarrier1102.udt_JamCarrier1102_2.arCarrier := "DB_JamArea1102".stJam1102_2.arCarrier;
|
||||
#stIn_JamCarrierBlock1.stIn_JamCarrier1102.udt_JamCarrier1102_3.arCarrier := "DB_JamArea1102".stJam1102_3.arCarrier;
|
||||
|
||||
////1103
|
||||
#stIn_JamCarrierBlock1.stIn_JamCarrier1103.udt_JamCarrier1103_1.arCarrier := "DB_JamArea1103".stJam1103_1.arCarrier;
|
||||
#stIn_JamCarrierBlock1.stIn_JamCarrier1103.udt_JamCarrier1103_2.arCarrier := "DB_JamArea1103".stJam1103_2.arCarrier;
|
||||
|
||||
////1104
|
||||
#stIn_JamCarrierBlock1.stIn_JamCarrier1104.udt_JamCarrier1104_1.arCarrier := "DB_JamArea1104".stJam1104_1.arCarrier;
|
||||
#stIn_JamCarrierBlock1.stIn_JamCarrier1104.udt_JamCarrier1104_2.arCarrier := "DB_JamArea1104".stJam1104_2.arCarrier;
|
||||
#stIn_JamCarrierBlock1.stIn_JamCarrier1104.udt_JamCarrier1104_3.arCarrier := "DB_JamArea1104".stJam1104_3.arCarrier;
|
||||
|
||||
////1105
|
||||
#stIn_JamCarrierBlock1.stIn_JamCarrier1105.udt_JamCarrier1105_1.arCarrier := "DB_JamArea1105".stJam1105_1.arCarrier;
|
||||
#stIn_JamCarrierBlock1.stIn_JamCarrier1105.udt_JamCarrier1105_2.arCarrier := "DB_JamArea1105".stJam1105_2.arCarrier;
|
||||
|
||||
////1106
|
||||
#stIn_JamCarrierBlock1.stIn_JamCarrier1106.udt_JamCarrier1106_1.arCarrier := "DB_JamArea1106".stJam1106_1.arCarrier;
|
||||
#stIn_JamCarrierBlock1.stIn_JamCarrier1106.udt_JamCarrier1106_2.arCarrier := "DB_JamArea1106".stJam1106_2.arCarrier;
|
||||
|
||||
////1107
|
||||
#stIn_JamCarrierBlock1.stIn_JamCarrier1107.udt_JamCarrier1107_1.arCarrier := "DB_JamArea1107".stJam1107_1.arCarrier;
|
||||
#stIn_JamCarrierBlock1.stIn_JamCarrier1107.udt_JamCarrier1107_2.arCarrier := "DB_JamArea1107".stJam1107_2.arCarrier;
|
||||
|
||||
////1108
|
||||
#stIn_JamCarrierBlock1.stIn_JamCarrier1108.udt_JamCarrier1108_1.arCarrier := "DB_JamArea1108".stJam1108_1.arCarrier;
|
||||
#stIn_JamCarrierBlock1.stIn_JamCarrier1108.udt_JamCarrier1108_2.arCarrier := "DB_JamArea1108".stJam1108_2.arCarrier;
|
||||
|
||||
////1109
|
||||
#stIn_JamCarrierBlock1.stIn_JamCarrier1109.udt_JamCarrier1109_1.arCarrier := "DB_JamArea1109".stJam1109_1.arCarrier;
|
||||
#stIn_JamCarrierBlock1.stIn_JamCarrier1109.udt_JamCarrier1109_2.arCarrier := "DB_JamArea1109".stJam1109_2.arCarrier;
|
||||
|
||||
|
||||
END_REGION
|
||||
|
||||
REGION Block 2
|
||||
////1201
|
||||
#stIn_JamCarrierBlock2.stIn_JamCarrier1201.udt_JamCarrier1201_1.arCarrier := "DB_JamArea1201".stJam1201_1.arCarrier;
|
||||
#stIn_JamCarrierBlock2.stIn_JamCarrier1201.udt_JamCarrier1201_2.arCarrier := "DB_JamArea1201".stJam1201_2.arCarrier;
|
||||
|
||||
////1202
|
||||
#stIn_JamCarrierBlock2.stIn_JamCarrier1202.udt_JamCarrier1202_1.arCarrier := "DB_JamArea1202".stJam1202_1.arCarrier;
|
||||
#stIn_JamCarrierBlock2.stIn_JamCarrier1202.udt_JamCarrier1202_2.arCarrier := "DB_JamArea1202".stJam1202_2.arCarrier;
|
||||
#stIn_JamCarrierBlock2.stIn_JamCarrier1202.udt_JamCarrier1202_3.arCarrier := "DB_JamArea1202".stJam1202_3.arCarrier;
|
||||
|
||||
////1203
|
||||
#stIn_JamCarrierBlock2.stIn_JamCarrier1203.udt_JamCarrier1203_1.arCarrier := "DB_JamArea1203".stJam1203_1.arCarrier;
|
||||
#stIn_JamCarrierBlock2.stIn_JamCarrier1203.udt_JamCarrier1203_2.arCarrier := "DB_JamArea1203".stJam1203_2.arCarrier;
|
||||
|
||||
////1204
|
||||
#stIn_JamCarrierBlock2.stIn_JamCarrier1204.udt_JamCarrier1204_1.arCarrier := "DB_JamArea1204".stJam1204_1.arCarrier;
|
||||
#stIn_JamCarrierBlock2.stIn_JamCarrier1204.udt_JamCarrier1204_2.arCarrier := "DB_JamArea1204".stJam1204_2.arCarrier;
|
||||
#stIn_JamCarrierBlock2.stIn_JamCarrier1204.udt_JamCarrier1204_3.arCarrier := "DB_JamArea1204".stJam1204_3.arCarrier;
|
||||
|
||||
////1205
|
||||
#stIn_JamCarrierBlock2.stIn_JamCarrier1205.udt_JamCarrier1205_1.arCarrier := "DB_JamArea1205".stJam1205_1.arCarrier;
|
||||
#stIn_JamCarrierBlock2.stIn_JamCarrier1205.udt_JamCarrier1205_2.arCarrier := "DB_JamArea1205".stJam1205_2.arCarrier;
|
||||
|
||||
////1206
|
||||
#stIn_JamCarrierBlock2.stIn_JamCarrier1206.udt_JamCarrier1206_1.arCarrier := "DB_JamArea1206".stJam1206_1.arCarrier;
|
||||
#stIn_JamCarrierBlock2.stIn_JamCarrier1206.udt_JamCarrier1206_2.arCarrier := "DB_JamArea1206".stJam1206_2.arCarrier;
|
||||
|
||||
////1207
|
||||
#stIn_JamCarrierBlock2.stIn_JamCarrier1207.udt_JamCarrier1207_1.arCarrier := "DB_JamArea1207".stJam1207_1.arCarrier;
|
||||
#stIn_JamCarrierBlock2.stIn_JamCarrier1207.udt_JamCarrier1207_2.arCarrier := "DB_JamArea1207".stJam1207_2.arCarrier;
|
||||
|
||||
////1208
|
||||
#stIn_JamCarrierBlock2.stIn_JamCarrier1208.udt_JamCarrier1208_1.arCarrier := "DB_JamArea1208".stJam1208_1.arCarrier;
|
||||
#stIn_JamCarrierBlock2.stIn_JamCarrier1208.udt_JamCarrier1208_2.arCarrier := "DB_JamArea1208".stJam1208_2.arCarrier;
|
||||
|
||||
////1209
|
||||
#stIn_JamCarrierBlock2.stIn_JamCarrier1209.udt_JamCarrier1209_1.arCarrier := "DB_JamArea1209".stJam1209_1.arCarrier;
|
||||
#stIn_JamCarrierBlock2.stIn_JamCarrier1209.udt_JamCarrier1209_2.arCarrier := "DB_JamArea1209".stJam1209_2.arCarrier;
|
||||
|
||||
|
||||
|
||||
END_REGION
|
||||
|
||||
REGION Block 3
|
||||
////1301
|
||||
#stIn_JamCarrierBlock3.stIn_JamCarrier1301.udt_JamCarrier1301_1.arCarrier := "DB_JamArea1301".stJam1301_1.arCarrier;
|
||||
#stIn_JamCarrierBlock3.stIn_JamCarrier1301.udt_JamCarrier1301_2.arCarrier := "DB_JamArea1301".stJam1301_2.arCarrier;
|
||||
|
||||
////1302
|
||||
#stIn_JamCarrierBlock3.stIn_JamCarrier1302.udt_JamCarrier1302_1.arCarrier := "DB_JamArea1302".stJam1302_1.arCarrier;
|
||||
#stIn_JamCarrierBlock3.stIn_JamCarrier1302.udt_JamCarrier1302_2.arCarrier := "DB_JamArea1302".stJam1302_2.arCarrier;
|
||||
#stIn_JamCarrierBlock3.stIn_JamCarrier1302.udt_JamCarrier1302_3.arCarrier := "DB_JamArea1302".stJam1302_3.arCarrier;
|
||||
|
||||
////1303
|
||||
#stIn_JamCarrierBlock3.stIn_JamCarrier1303.udt_JamCarrier1303_1.arCarrier := "DB_JamArea1303".stJam1303_1.arCarrier;
|
||||
#stIn_JamCarrierBlock3.stIn_JamCarrier1303.udt_JamCarrier1303_2.arCarrier := "DB_JamArea1303".stJam1303_2.arCarrier;
|
||||
|
||||
////1304
|
||||
#stIn_JamCarrierBlock3.stIn_JamCarrier1304.udt_JamCarrier1304_1.arCarrier := "DB_JamArea1304".stJam1304_1.arCarrier;
|
||||
#stIn_JamCarrierBlock3.stIn_JamCarrier1304.udt_JamCarrier1304_2.arCarrier := "DB_JamArea1304".stJam1304_2.arCarrier;
|
||||
#stIn_JamCarrierBlock3.stIn_JamCarrier1304.udt_JamCarrier1304_3.arCarrier := "DB_JamArea1304".stJam1304_3.arCarrier;
|
||||
|
||||
////1305
|
||||
#stIn_JamCarrierBlock3.stIn_JamCarrier1305.udt_JamCarrier1305_1.arCarrier := "DB_JamArea1305".stJam1305_1.arCarrier;
|
||||
#stIn_JamCarrierBlock3.stIn_JamCarrier1305.udt_JamCarrier1305_2.arCarrier := "DB_JamArea1305".stJam1305_2.arCarrier;
|
||||
|
||||
////1306
|
||||
#stIn_JamCarrierBlock3.stIn_JamCarrier1306.udt_JamCarrier1306_1.arCarrier := "DB_JamArea1306".stJam1306_1.arCarrier;
|
||||
#stIn_JamCarrierBlock3.stIn_JamCarrier1306.udt_JamCarrier1306_2.arCarrier := "DB_JamArea1306".stJam1306_2.arCarrier;
|
||||
|
||||
////1307
|
||||
#stIn_JamCarrierBlock3.stIn_JamCarrier1307.udt_JamCarrier1307_1.arCarrier := "DB_JamArea1307".stJam1307_1.arCarrier;
|
||||
#stIn_JamCarrierBlock3.stIn_JamCarrier1307.udt_JamCarrier1307_2.arCarrier := "DB_JamArea1307".stJam1307_2.arCarrier;
|
||||
|
||||
////1308
|
||||
#stIn_JamCarrierBlock3.stIn_JamCarrier1308.udt_JamCarrier1308_1.arCarrier := "DB_JamArea1308".stJam1308_1.arCarrier;
|
||||
#stIn_JamCarrierBlock3.stIn_JamCarrier1308.udt_JamCarrier1308_2.arCarrier := "DB_JamArea1308".stJam1308_2.arCarrier;
|
||||
|
||||
////1309
|
||||
#stIn_JamCarrierBlock3.stIn_JamCarrier1309.udt_JamCarrier1309_1.arCarrier := "DB_JamArea1309".stJam1309_1.arCarrier;
|
||||
#stIn_JamCarrierBlock3.stIn_JamCarrier1309.udt_JamCarrier1309_2.arCarrier := "DB_JamArea1309".stJam1309_2.arCarrier;
|
||||
|
||||
|
||||
|
||||
END_REGION
|
||||
|
||||
|
||||
END_REGION
|
||||
|
||||
|
||||
REGION Call
|
||||
#Lfb_StorageRemoval(
|
||||
udt_IN_MES:="DB_HandshakeStorage".Str_StorageRemoval.str_TelegramMES.udtIn_DataMES.stPayload,
|
||||
n_JamCapacityAMRCriticalAmount := 90,
|
||||
n_JamCapacityF2HCriticalAmount:=90,
|
||||
t_IN_RemovalWaitTime := T#600s,
|
||||
stStorage111BlockData:="DB_Storage1.1.1".stStorageBlockData,
|
||||
stStorage112BlockData:="DB_Storage1.1.2".stStorageBlockData,
|
||||
stStorage113BlockData:="DB_Storage1.1.3".stStorageBlockData,
|
||||
stStorage114BlockData:="DB_Storage1.1.4".stStorageBlockData,
|
||||
stStorage121BlockData:="DB_Storage1.2.1".stStorageBlockData,
|
||||
stStorage122BlockData:="DB_Storage1.2.2".stStorageBlockData,
|
||||
stStorage123BlockData:="DB_Storage1.2.3".stStorageBlockData,
|
||||
stStorage124BlockData:="DB_Storage1.2.4".stStorageBlockData,
|
||||
stStorage131BlockData:="DB_Storage1.3.1".stStorageBlockData,
|
||||
stStorage132BlockData:="DB_Storage1.3.2".stStorageBlockData,
|
||||
stStorage133BlockData:="DB_Storage1.3.3".stStorageBlockData,
|
||||
stStorage134BlockData:="DB_Storage1.3.4".stStorageBlockData,
|
||||
arrudt_InOut_MESPart := "DB_Prozessdaten".strStorageRemoval.arrudt_BufferTelegram,
|
||||
arLineBlk111 := "DB_Storage1.1.1".arLine,
|
||||
arLineBlk112 := "DB_Storage1.1.2".arLine,
|
||||
arLineBlk113 := "DB_Storage1.1.3".arLine,
|
||||
arLineBlk114 := "DB_Storage1.1.4".arLine,
|
||||
arLineBlk121 := "DB_Storage1.2.1".arLine,
|
||||
arLineBlk122 := "DB_Storage1.2.2".arLine,
|
||||
arLineBlk123 := "DB_Storage1.2.3".arLine,
|
||||
arLineBlk124 := "DB_Storage1.2.4".arLine,
|
||||
arLineBlk131 := "DB_Storage1.3.1".arLine,
|
||||
arLineBlk132 := "DB_Storage1.3.2".arLine,
|
||||
arLineBlk133 := "DB_Storage1.3.3".arLine,
|
||||
arLineBlk134 := "DB_Storage1.3.4".arLine,
|
||||
udt_InOut_HandshakeDataMES := "DB_HandshakeStorage".Str_StorageRemoval.udt_HandshakeMESStorage,
|
||||
arrudt_InOutMFRTRO := "DB_HandshakeStorage".Str_StorageRemoval.arrudt_StorageRemovalHandshakeTROsLvl1,
|
||||
arrstr_InOut_FillingChart := "DB_Prozessdaten".strStorageRemoval.arrstr_InOut_FillingChart,
|
||||
arrstr_InOut_EmptyChart := "DB_Prozessdaten".strStorageRemoval.arrstr_InOut_EmptyChart,
|
||||
arrudt_HMILines := "DB_Interface_HMI".stAuslagern.arLineSorted,//"DB_Prozessdaten".stAuslagernTEMP.arLineSorted,
|
||||
udt_InOutMessageToMesBlk111 := "DB_HandshakeStorage".Str_StorageRemoval.strMES.udt_InOutMessageToMesBlk111,
|
||||
udt_InOutMessageToMesBlk112 := "DB_HandshakeStorage".Str_StorageRemoval.strMES.udt_InOutMessageToMesBlk112,
|
||||
udt_InOutMessageToMesBlk113 := "DB_HandshakeStorage".Str_StorageRemoval.strMES.udt_InOutMessageToMesBlk113,
|
||||
udt_InOutMessageToMesBlk114 := "DB_HandshakeStorage".Str_StorageRemoval.strMES.udt_InOutMessageToMesBlk114,
|
||||
udt_InOutMessageToMesBlk121 := "DB_HandshakeStorage".Str_StorageRemoval.strMES.udt_InOutMessageToMesBlk121,
|
||||
udt_InOutMessageToMesBlk122 := "DB_HandshakeStorage".Str_StorageRemoval.strMES.udt_InOutMessageToMesBlk122,
|
||||
udt_InOutMessageToMesBlk123 := "DB_HandshakeStorage".Str_StorageRemoval.strMES.udt_InOutMessageToMesBlk123,
|
||||
udt_InOutMessageToMesBlk124 := "DB_HandshakeStorage".Str_StorageRemoval.strMES.udt_InOutMessageToMesBlk124,
|
||||
udt_InOutMessageToMesBlk131 := "DB_HandshakeStorage".Str_StorageRemoval.strMES.udt_InOutMessageToMesBlk131,
|
||||
udt_InOutMessageToMesBlk132 := "DB_HandshakeStorage".Str_StorageRemoval.strMES.udt_InOutMessageToMesBlk132,
|
||||
udt_InOutMessageToMesBlk133 := "DB_HandshakeStorage".Str_StorageRemoval.strMES.udt_InOutMessageToMesBlk133,
|
||||
udt_InOutMessageToMesBlk134 := "DB_HandshakeStorage".Str_StorageRemoval.strMES.udt_InOutMessageToMesBlk134,
|
||||
stIn_JamCarrierBlock1:=#stIn_JamCarrierBlock1,
|
||||
stIn_JamCarrierBlock2:=#stIn_JamCarrierBlock2,
|
||||
stIn_JamCarrierBlock3:=#stIn_JamCarrierBlock3,
|
||||
udt_InOutStorageBlockSequencerData:="DB_HandshakeStorage".Str_StorageRemoval.udt_StorageBlockSequencerData
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
END_REGION
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
END_REGION
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
END_FUNCTION_BLOCK
|
||||
|
||||
@@ -0,0 +1,165 @@
|
||||
FUNCTION_BLOCK "FB_UpdateMessage"
|
||||
{ S7_Optimized_Access := 'TRUE' }
|
||||
VERSION : 0.1
|
||||
VAR_INPUT
|
||||
x_InSendMessage : Bool;
|
||||
END_VAR
|
||||
|
||||
VAR_OUTPUT
|
||||
x_OutReady : Bool;
|
||||
x_OutBusy : Bool;
|
||||
x_OutDone : Bool;
|
||||
END_VAR
|
||||
|
||||
VAR_IN_OUT
|
||||
udt_InOutHandshakeMES : "udt_HandshakeMessageToMES";
|
||||
arrstr_InOutMessageData : Array[1.."cNoPositions"] of Struct
|
||||
n_MessageType : USInt; // 0:= ungueltig; 1:= gefunden: 2:= nicht gefunden
|
||||
n_PartID : DInt;
|
||||
END_STRUCT;
|
||||
END_VAR
|
||||
|
||||
VAR
|
||||
n_Sequence : UInt;
|
||||
xError : Bool;
|
||||
n_tempSearchIdxsave : Int;
|
||||
END_VAR
|
||||
|
||||
VAR_TEMP
|
||||
n_tempSearchIdx : Int;
|
||||
END_VAR
|
||||
|
||||
VAR CONSTANT
|
||||
c01_PartGefunden : UInt := 1;
|
||||
c02_PartNichtGefunden : UInt := 2;
|
||||
c000_CheckNoError : UInt := 0;
|
||||
c010_WaitForStart : UInt := 10;
|
||||
c020_SetNewMessage : UInt := 20;
|
||||
c030_SendMessage : UInt := 30;
|
||||
c040_ResetMessageData : UInt := 40;
|
||||
END_VAR
|
||||
|
||||
|
||||
BEGIN
|
||||
|
||||
REGION Info
|
||||
(* Company: Schönenberger Systeme GmbH / (C) Copyright (2022). All rights reserved.
|
||||
-----------------------------------------------------------------------------------------
|
||||
Title: FB_UpdateMessage
|
||||
Comment/Function: Send Message to MES
|
||||
Library/Family: -
|
||||
Author: department: "Automatisierung" ; person in charge / contact: C.Nottelmann (Automated Intelligence)
|
||||
Target System: CPU 1518F-4 PN/DP
|
||||
Engineering: TIA Portal V20
|
||||
Restrictions: -
|
||||
Requirements: -
|
||||
-----------------------------------------------------------------------------------------
|
||||
Change log table:
|
||||
Version | Date | Signature (Safety) | Expert in charge | Changes applied
|
||||
------------|------------|--------------------|------------------|-----------------------
|
||||
001.000.000 | 2025-08-26 | - | | Header added on 26.08.2025
|
||||
|
||||
*)
|
||||
END_REGION
|
||||
|
||||
|
||||
CASE #n_Sequence OF
|
||||
#c000_CheckNoError:
|
||||
//Action
|
||||
|
||||
|
||||
|
||||
//Transition
|
||||
IF NOT #udt_InOutHandshakeMES.str_State.b_Error
|
||||
THEN
|
||||
#n_Sequence := #c010_WaitForStart;
|
||||
END_IF;
|
||||
|
||||
#c010_WaitForStart:
|
||||
//Action
|
||||
#x_OutDone := False;
|
||||
#x_OutReady := True;
|
||||
|
||||
//Transition
|
||||
FOR #n_tempSearchIdx := 1 TO "cNoPositions" DO
|
||||
IF #x_InSendMessage AND #arrstr_InOutMessageData[#n_tempSearchIdx].n_PartID > 0 AND #arrstr_InOutMessageData[#n_tempSearchIdx].#n_MessageType > 0
|
||||
THEN
|
||||
#n_tempSearchIdxsave := #n_tempSearchIdx;
|
||||
#n_Sequence := #c020_SetNewMessage;
|
||||
END_IF;
|
||||
EXIT;
|
||||
END_FOR;
|
||||
|
||||
|
||||
|
||||
|
||||
#c020_SetNewMessage:
|
||||
//Action
|
||||
#udt_InOutHandshakeMES.str_Ctrl.b_NewMessage := True;
|
||||
#x_OutReady := False;
|
||||
#x_OutBusy := True;
|
||||
|
||||
//Transition
|
||||
IF #udt_InOutHandshakeMES.str_State.b_Ready
|
||||
THEN
|
||||
#n_Sequence := #c030_SendMessage;
|
||||
END_IF;
|
||||
|
||||
|
||||
#c030_SendMessage:
|
||||
//Action
|
||||
IF #arrstr_InOutMessageData[#n_tempSearchIdxsave].#n_MessageType = #c01_PartGefunden
|
||||
THEN
|
||||
#udt_InOutHandshakeMES.str_Ctrl.udt_MessageData.nReasonCode := #c01_PartGefunden;
|
||||
|
||||
ELSIF #arrstr_InOutMessageData[#n_tempSearchIdxsave].#n_MessageType = #c02_PartNichtGefunden
|
||||
THEN
|
||||
#udt_InOutHandshakeMES.str_Ctrl.udt_MessageData.nReasonCode := #c02_PartNichtGefunden;
|
||||
|
||||
ELSE
|
||||
;
|
||||
END_IF;
|
||||
|
||||
#udt_InOutHandshakeMES.str_Ctrl.udt_MessageData.nBarcode := #arrstr_InOutMessageData[#n_tempSearchIdxsave].#n_PartID;
|
||||
|
||||
|
||||
|
||||
|
||||
//Transtition
|
||||
IF #udt_InOutHandshakeMES.str_State.b_MessageReceived
|
||||
THEN
|
||||
#n_Sequence := #c040_ResetMessageData;
|
||||
END_IF;
|
||||
|
||||
#c040_ResetMessageData:
|
||||
//Action
|
||||
#x_OutBusy := False;
|
||||
#x_OutDone := True;
|
||||
#arrstr_InOutMessageData[#n_tempSearchIdxsave].#n_MessageType := 0;
|
||||
#arrstr_InOutMessageData[#n_tempSearchIdxsave].n_PartID := 0;
|
||||
#udt_InOutHandshakeMES.str_Ctrl.udt_MessageData.nReasonCode := 0;
|
||||
#udt_InOutHandshakeMES.str_Ctrl.udt_MessageData.nBarcode:= 0;
|
||||
#udt_InOutHandshakeMES.str_Ctrl.b_NewMessage := False;
|
||||
#n_tempSearchIdxsave := 1;
|
||||
|
||||
//Transition
|
||||
IF NOT #udt_InOutHandshakeMES.str_State.b_MessageReceived
|
||||
THEN
|
||||
#n_Sequence := #c000_CheckNoError;
|
||||
END_IF;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
END_CASE;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
END_FUNCTION_BLOCK
|
||||
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
TypeGuid: a394caf2-9e35-454c-b109-30b66c22bddd
|
||||
VersionGuid: 9a9ac382-d0ec-462d-9753-478a90c82276
|
||||
+6839
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user