Anlagenanbindung, Sicherheit geändert, neue Werkzeuge etc etc.

This commit is contained in:
2021-12-01 11:26:29 +01:00
parent 9b9612a31a
commit 0bbfdc541d
294 changed files with 19213 additions and 12369 deletions

View File

@@ -1,7 +1,9 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version="4.9.2.46" WorkingVersion="4.9"?> <?AutomationStudio Version="4.9.4.92 SP" WorkingVersion="4.9"?>
<Project Description="Lackierzelle" Version="1.00.0" Edition="Standard" EditionComment="Standard" xmlns="http://br-automation.co.at/AS/Project"> <Project Description="Lackierzelle" Version="1.00.0" Edition="Standard" EditionComment="Standard" xmlns="http://br-automation.co.at/AS/Project">
<Communication /> <Communication>
<OnlineConfiguration Name="Fritzmeier-Laser_Hausnetz" DeviceType="TCPIP" DeviceParameters="/IF=tcpip /LOPO=11159 /SA=1" ConnectionParameters="/COMT=2500 /RT=1000 /AM=* /SDT=5 /DAIP=10.4.18.60 /REPO=11159 /ANSL=1 /PT=11169" Description="" />
</Communication>
<ANSIC DefaultIncludes="true" /> <ANSIC DefaultIncludes="true" />
<IEC ExtendedConstants="true" IecExtendedComments="true" KeywordsAsStructureMembers="false" NamingConventions="true" Pointers="true" Preprocessor="false" /> <IEC ExtendedConstants="true" IecExtendedComments="true" KeywordsAsStructureMembers="false" NamingConventions="true" Pointers="true" Preprocessor="false" />
<Motion RestartAcoposParameter="true" RestartInitParameter="true" /> <Motion RestartAcoposParameter="true" RestartInitParameter="true" />

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version="4.9.2.46"?> <?AutomationStudio Version="4.9.4.92 SP"?>
<ProjectSettings xmlns="http://br-automation.co.at/AS/ProjectSettings"> <ProjectSettings xmlns="http://br-automation.co.at/AS/ProjectSettings">
<ConfigurationManager ActiveConfigurationName="Config0" /> <ConfigurationManager ActiveConfigurationName="Config0" />
<Deployment Value="ActiveCpu" /> <Deployment Value="ActiveCpu" />

View File

@@ -21,7 +21,7 @@ G500 ;Nullpunktverschiebung deaktivieren
IF bLaserMidPos IF bLaserMidPos
G01 Z1485 ;Freifahren G01 Z1485 ;Freifahren
G01 X4290 Y447.5 C-10 A0 ;Vorpos Anfahren G01 X4290 Y447.5 C-10 A0 ;Vorpos Anfahren
G01 Z1001.6 M111 ;Laser Kalibrieren G01 Z1001.6 M113 ;Laser Kalibrieren
G01 Z1485 ;Freifahren G01 Z1485 ;Freifahren
./CncHome ;Grundstellung anfahren ./CncHome ;Grundstellung anfahren
MPLOG_WRITE("Kalibrieren beendet") MPLOG_WRITE("Kalibrieren beendet")

View File

@@ -9,6 +9,7 @@ TYPE
gytp_IPGInterfaceOut : STRUCT (*Output to IPG Laser Interface*) gytp_IPGInterfaceOut : STRUCT (*Output to IPG Laser Interface*)
bPilotLaserOn : BOOL := FALSE; (*Pilotlaser Einschalten*) bPilotLaserOn : BOOL := FALSE; (*Pilotlaser Einschalten*)
bEnalbeLaser : BOOL := FALSE; (*Laser mit Programm 0 einschalten*) bEnalbeLaser : BOOL := FALSE; (*Laser mit Programm 0 einschalten*)
bCuttingGasOn : BOOL := FALSE; (*Schneidgas Einschalten*)
uiOutputPower : UINT; (*Laserleistung in W*) uiOutputPower : UINT; (*Laserleistung in W*)
END_STRUCT; END_STRUCT;
gytp_IPGInterface : STRUCT (*IPG Laser Interface*) gytp_IPGInterface : STRUCT (*IPG Laser Interface*)
@@ -17,16 +18,16 @@ TYPE
END_STRUCT; END_STRUCT;
END_TYPE END_TYPE
(*//Interface Raytools-Interface*) (*//Interface Raytools-Laserkopf*)
TYPE TYPE
gytp_RTInterfaceIn : STRUCT (*Inputs from IPG Laser Interface*) gytp_RTInterfaceIn : STRUCT (*Inputs from Raytools Head*)
bHeadIsOk : USINT; (*Kopf ist OK / Kalibriert / Referenziert und keine St<53>rung*) bHeadIsOk : USINT; (*Kopf ist OK / Kalibriert / Referenziert und keine St<53>rung*)
bHeadIsMidPos : BOOL := FALSE; (*Kopf ist in Mittelstellung*) bHeadIsMidPos : BOOL := FALSE; (*Kopf ist in Mittelstellung*)
bHeadIsInFollowpos : BOOL := FALSE; (*Kopf ist is in H<>henregelung*) bHeadIsInFollowpos : BOOL := FALSE; (*Kopf ist is in H<>henregelung*)
bHeadCalibrated : BOOL; (*Kopf ist kalibriert*) bHeadCalibrated : BOOL; (*Kopf ist kalibriert*)
END_STRUCT; END_STRUCT;
gytp_RTInterfaceOut : STRUCT (*Output to IPG Laser Interface*) gytp_RTInterfaceOut : STRUCT (*Output to Raytools Head*)
bMidPos : BOOL := FALSE; (*InMittelpos*) bMidPos : BOOL := FALSE; (*InMittelpos*)
bFollowPos : BOOL := FALSE; (*Position folgen*) bFollowPos : BOOL := FALSE; (*Position folgen*)
bCalibrateLaser : BOOL; (*Kalibrieren*) bCalibrateLaser : BOOL; (*Kalibrieren*)
@@ -37,4 +38,53 @@ TYPE
END_STRUCT; END_STRUCT;
END_TYPE END_TYPE
(*//Interface Linien-Interface*)
TYPE
gytp_LineInterfaceIn : STRUCT (*Eing<6E>nge von Liniensteuerung*)
bLifebeat : BOOL; (*0.0 Lifebeat*)
bModeManual : BOOL := FALSE; (*0.1 Betriebsart Hand*)
bModeAutomatic : BOOL := FALSE; (*0.2 Betriebsart Auto*)
bCycleActive : BOOL; (*0.3 Auto Zyklus aktiv*)
bError : BOOL; (*0.4 St<53>rung aktiv*)
bRequestDoor : BOOL; (*0.5 Anforderung f<>r T<>r<EFBFBD>ffnung Linie*)
bRobOutOfShuttle1 : BOOL; (*1.0 Roboter Au<41>erhalb Kollisionsbereich Shuttle 1*)
bRobOutOfShuttle2 : BOOL; (*1.1 Roboter Au<41>erhalb Kollisionsbereich Shuttle 2*)
bVacuumOnShuttle1 : BOOL; (*2.0 Vakkuum Einschalten Shuttle 1 (nur in Automatik)*)
bVacuumOnShuttle2 : BOOL; (*2.1 Vakkuum Einschalten Shuttle 2 (nur inAutomatik)*)
bPlacedPartShuttle1 : BOOL; (*2.2 Bauteil abgelegt Shuttle 1*)
bPlacedPartShuttle2 : BOOL; (*2.3 Bauteil abgelegt Shuttle 2*)
bPickedPartShuttle1 : BOOL; (*2.4 Bauteil abgeholt Shuttle 1*)
bPickedPartShuttle2 : BOOL; (*2.5 Bauteil abgeholt Shuttle 2*)
usPartIDShuttle1 : USINT; (*Byte 4 Bauteilnummer Shuttle 1*)
usPartIDShuttle2 : USINT; (*Byte 5 Bauteilnummer Shuttle 2*)
END_STRUCT;
gytp_LineInterfaceOut : STRUCT (*Ausgange zur Liniensteuerung*)
bLifebeat : BOOL; (*0.0 Lifebeat (negiert zur<75>ckgespiegelt*)
bModeManual_X : BOOL; (*0.1 Betriebsart Hand (wird direkt in Task gesetzt - Platzhaltervariable)*)
bModeAutomatic_X : BOOL; (*0.2 Betriebsart Auto Hand (wird direkt in Task gesetzt - Platzhaltervariable)*)
bCycleActive : BOOL; (*0.3 Auto Zyklus aktiv*)
bError : BOOL; (*0.4 St<53>rung aktiv*)
bReleaseDoor : BOOL; (*0.5 Freigabe zur T<>r<EFBFBD>ffnung Linie*)
bShuttle1InPos : BOOL; (*1.0 Shuttle 1 in Beladepos *)
bShuttle2InPos : BOOL; (*1.1 Shuttle 2 in Beladepos*)
bVacuumIsOnShuttle1 : BOOL; (*2.0 Vakuum Shuttle 1 ist Ein und Ok*)
bVacuumIsOnShuttle2 : BOOL; (*2.1 Vakuum Shuttle 2 ist Ein und Ok*)
bReadyToPlacePartShuttle1 : BOOL; (*2.2 Bereit zum Bauteil ablegen Shuttle 1*)
bReadyToPlacePartShuttle2 : BOOL; (*2.3 Bereit zum Bauteil ablegen Shuttle 2*)
bFinishedPartReadyShuttle1 : BOOL; (*2.4 Fertiges Bauteil bereit zum Abholen Shuttle 1*)
bFinishedPartReadyShuttle2 : BOOL; (*2.5 Fertiges Bauteil bereit zum Abholen Shuttle 2*)
bFinishedPartIOShuttle1 : BOOL; (*2.6 Fetiges Bauteil IO (Sonst NIO) Shuttle 1*)
bFinishedPartIOShuttle2 : BOOL; (*2.7 Fetiges Bauteil IO (Sonst NIO) Shuttle 2*)
usToolIDShuttle1_X : USINT; (*Byte 4 Werkzeugnummer Shuttle 1 (wird direkt in Task gesetzt - Platzhaltervariable)*)
usTopolIDShuttle2_X : USINT; (*Byte 5 Werkzeugnummer Shuttle 2 (wird direkt in Task gesetzt - Platzhaltervariable)*)
udCutTimeShuttle1 : UDINT; (*Byte 6-9 Schneidzeit Shuttle 1*)
udCutTimeShuttle2 : UDINT; (*Byte 10-13 Schneidzeit Shuttle 2*)
END_STRUCT;
gytp_LineInterface : STRUCT (*Linien Interface*)
In : gytp_LineInterfaceIn; (*von Liniensteuerung*)
Out : gytp_LineInterfaceOut; (*an Liniensteuerung*)
END_STRUCT;
END_TYPE
(**) (**)

View File

@@ -1,7 +1,8 @@
(*//Kommunikationsstrukturen*) (*//Kommunikationsstrukturen*)
VAR RETAIN VAR
gIPGLaserInterface : gytp_IPGInterface; gIPGLaserInterface : gytp_IPGInterface; (*Interface IPG Laser*)
gRTLaserInterface : gytp_RTInterface; gRTLaserInterface : gytp_RTInterface; (*Interface Raytools*)
gLineInterface : gytp_LineInterface; (*Interface Liniensteuerung*)
END_VAR END_VAR
(*Variablen / Strukturen*) (*Variablen / Strukturen*)
VAR VAR

View File

@@ -81,13 +81,23 @@ PROGRAM _CYCLIC
LaserOut.Control.bResetErrors := gMP7121.Button; LaserOut.Control.bResetErrors := gMP7121.Button;
END_IF END_IF
IF gbInErrorPowerSupplyP4 THEN
//Ohne Gas Laser deaktivieren
LaserOut.uiOutPutPower := 0;
END_IF
// Einzelschussmodus // Einzelschussmodus
IF EDGEPOS (Status.bLocalCtrl) THEN
Status.uiShootPower := 350;
FUBs.TON_Shot.PT := t#30ms;
END_IF
IF NOT Status.bLocalCtrl THEN IF NOT Status.bLocalCtrl THEN
Status.bShootMode := FALSE; Status.bShootMode := FALSE;
END_IF END_IF
TON_Shot.IN := (LaserOut.uiOutPutPower > 0) AND LaserOut.Control.bLaserOn AND Status.bShootMode; FUBs.TON_Shot.IN := (LaserOut.uiOutPutPower > 0) AND LaserOut.Control.bLaserOn AND Status.bShootMode;
TON_Shot (); FUBs.TON_Shot ();
IF TON_Shot.Q THEN IF FUBs.TON_Shot.Q THEN
LaserOut.uiOutPutPower := 0; LaserOut.uiOutPutPower := 0;
END_IF END_IF
@@ -95,11 +105,11 @@ PROGRAM _CYCLIC
//Ausg<EFBFBD>nge //Ausg<EFBFBD>nge
//============================================== //==============================================
//Schneidgas //Schneidgas (Mit Laser Einschalten oder <EFBFBD>ber M-Befahl aus CNC Task
TOF_CuttingGas.IN := (LaserOut.uiOutPutPower > 0) AND LaserOut.Control.bLaserOn; FUBs.TOF_CuttingGas.IN := (LaserOut.uiOutPutPower > 0) AND LaserOut.Control.bLaserOn;
TOF_CuttingGas.PT := t#1s; FUBs.TOF_CuttingGas.PT := t#1s;
TOF_CuttingGas (); FUBs.TOF_CuttingGas ();
bOuCuttingGas := TOF_CuttingGas.Q; bOuCuttingGas := FUBs.TOF_CuttingGas.Q OR gIPGLaserInterface.Out.bCuttingGasOn;
//Byte 1 //Byte 1
LaserOut.Control.bRequestLaser := TRUE; LaserOut.Control.bRequestLaser := TRUE;
@@ -145,4 +155,109 @@ PROGRAM _CYCLIC
//Byte 10 //Byte 10
usOuByte[10] := 0; usOuByte[10] := 0;
//Alarme
//======================================================
//Systemwarnung
FUBs.Alarm_SystemWarning.MpLink := gMpAlarmXCore;
FUBs.Alarm_SystemWarning.bInAlarmSignal := LaserIn.Status.bSystemWarning;
FUBs.Alarm_SystemWarning.sInAlName := 'IPGSystemWarning';
FUBs.Alarm_SystemWarning ();
//Softwaresteuerung aktiv
FUBs.Alarm_SoftwareCtrlActive.MpLink := gMpAlarmXCore;
FUBs.Alarm_SoftwareCtrlActive.bInAlarmSignal := LaserIn.Status.bSoftwareCtrlActive;
FUBs.Alarm_SoftwareCtrlActive.sInAlName := 'IPGSoftwareCtrlActive';
FUBs.Alarm_SoftwareCtrlActive ();
//Robotermodus nicht aktiv
FUBs.Alarm_RobotModeNotActive.MpLink := gMpAlarmXCore;
FUBs.Alarm_RobotModeNotActive.bInAlarmSignal := NOT LaserIn.Status.bRobotModeActive AND gbSPLCInSafetyLaserOk;
FUBs.Alarm_RobotModeNotActive.sInAlName := 'IPGRobotModeNotActive';
FUBs.Alarm_RobotModeNotActive ();
//Systemst<EFBFBD>rung
FUBs.Alarm_SystemError.MpLink := gMpAlarmXCore;
FUBs.Alarm_SystemError.bInAlarmSignal := LaserIn.Status.bSystemError AND gbSPLCInSafetyLaserOk;
FUBs.Alarm_SystemError.sInAlName := 'IPGSystemError';
FUBs.Alarm_SystemError ();
//Laserst<EFBFBD>rung
FUBs.Alarm_LaserError.MpLink := gMpAlarmXCore;
FUBs.Alarm_LaserError.bInAlarmSignal := LaserIn.Status2.bLaserError;
FUBs.Alarm_LaserError.sInAlName := 'IPGLaserError';
FUBs.Alarm_LaserError ();
//Laserwarnung
FUBs.Alarm_LaserWarning.MpLink := gMpAlarmXCore;
FUBs.Alarm_LaserWarning.bInAlarmSignal := LaserIn.Status2.bLaserWarning;
FUBs.Alarm_LaserWarning.sInAlName := 'IPGLaserWarning';
FUBs.Alarm_LaserWarning ();
//K<EFBFBD>hlerst<EFBFBD>rung
FUBs.Alarm_ChillerError.MpLink := gMpAlarmXCore;
FUBs.Alarm_ChillerError.bInAlarmSignal := LaserIn.Status2.bChillerError;
FUBs.Alarm_ChillerError.sInAlName := 'IPGChillerError';
FUBs.Alarm_ChillerError ();
//K<EFBFBD>hlerwarnung
FUBs.Alarm_ChillerWarning.MpLink := gMpAlarmXCore;
FUBs.Alarm_ChillerWarning.bInAlarmSignal := LaserIn.Status2.bChillerWarning;
FUBs.Alarm_ChillerWarning.sInAlName := 'IPGChillerWarning';
FUBs.Alarm_ChillerWarning ();
//Sicherheitskreis offen
FUBs.Alarm_SafteyOpen.MpLink := gMpAlarmXCore;
FUBs.Alarm_SafteyOpen.bInAlarmSignal := LaserIn.Status2.bSafetyOpen AND gbSPLCInSafetyLaserOk;
FUBs.Alarm_SafteyOpen.sInAlName := 'IPGSafetyOpen';
FUBs.Alarm_SafteyOpen ();
//Kanalfehler
FUBs.Alarm_ChannelError.MpLink := gMpAlarmXCore;
FUBs.Alarm_ChannelError.bInAlarmSignal := LaserIn.Status2.bChannelError;
FUBs.Alarm_ChannelError.sInAlName := 'IPGChannelError';
FUBs.Alarm_ChannelError ();
//Kanalfehler
FUBs.Alarm_SlotError.MpLink := gMpAlarmXCore;
FUBs.Alarm_SlotError.bInAlarmSignal := LaserIn.Status2.bSlotError;
FUBs.Alarm_SlotError.sInAlName := 'IPGChannelError';
FUBs.Alarm_SlotError ();
//Schrank offen
FUBs.Alarm_CabinetDoorOpen.MpLink := gMpAlarmXCore;
FUBs.Alarm_CabinetDoorOpen.bInAlarmSignal := LaserIn.Status2.bCabinetDoorOpen;
FUBs.Alarm_CabinetDoorOpen.sInAlName := 'IPGCabinetDoorOpen';
FUBs.Alarm_CabinetDoorOpen ();
//Hohe Reflection
FUBs.Alarm_HighBackReflection.MpLink := gMpAlarmXCore;
FUBs.Alarm_HighBackReflection.bInAlarmSignal := LaserIn.Status2.bHighBackReflection;
FUBs.Alarm_HighBackReflection.sInAlName := 'IPGHighBackReflection';
FUBs.Alarm_HighBackReflection ();
//Vrsorgungswarnung
FUBs.Alarm_ModulePowerSupplyWarning.MpLink := gMpAlarmXCore;
FUBs.Alarm_ModulePowerSupplyWarning.bInAlarmSignal := LaserIn.Status2.bModulePowerSupplyWarning;
FUBs.Alarm_ModulePowerSupplyWarning.sInAlName := 'IPGModulePowerSupplyWarning';
FUBs.Alarm_ModulePowerSupplyWarning ();
//Kommunikationsfehler
FUBs.Alarm_CommunicationError.MpLink := gMpAlarmXCore;
FUBs.Alarm_CommunicationError.bInAlarmSignal := NOT bInModulOk OR NOT LaserIn.Status.bLaserAlive;
FUBs.Alarm_CommunicationError.sInAlName := 'IPGCommError';
FUBs.Alarm_CommunicationError ();
//Lokale Steuerung
FUBs.Alarm_LocalMode.MpLink := gMpAlarmXCore;
FUBs.Alarm_LocalMode.bInAlarmSignal := Status.bLocalCtrl;
FUBs.Alarm_LocalMode.sInAlName := 'IPGLocalMode';
FUBs.Alarm_LocalMode ();
//Lokale Steuerung
FUBs.Alarm_Shotmode.MpLink := gMpAlarmXCore;
FUBs.Alarm_Shotmode.bInAlarmSignal := Status.bShootMode;
FUBs.Alarm_Shotmode.sInAlName := 'IPGShotMode';
FUBs.Alarm_Shotmode ();
END_PROGRAM END_PROGRAM

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.7.5.60 SP?> <?AutomationStudio FileVersion="4.9"?>
<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program"> <Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
<Files> <Files>
<File Description="Cyclic code">Cyclic.st</File> <File Description="Cyclic code">Cyclic.st</File>
@@ -8,5 +8,6 @@
<File Description="Local data types" Private="true">Types.typ</File> <File Description="Local data types" Private="true">Types.typ</File>
<File Description="Local variables" Private="true">Variables.var</File> <File Description="Local variables" Private="true">Variables.var</File>
<File Description="IOs" Private="true">IOs.var</File> <File Description="IOs" Private="true">IOs.var</File>
<File Description="Alarme">TxtAlarms.tmx</File>
</Files> </Files>
</Program> </Program>

View File

@@ -1,4 +1,5 @@
VAR VAR
bInModulOk : BOOL;
usInByte : ARRAY[1..32] OF USINT; usInByte : ARRAY[1..32] OF USINT;
usOuByte : ARRAY[1..32] OF USINT; usOuByte : ARRAY[1..32] OF USINT;
bOuCuttingGas : BOOL; bOuCuttingGas : BOOL;

View File

@@ -2,7 +2,7 @@
PROGRAM _INIT PROGRAM _INIT
//Einzelschuss //Einzelschuss
TON_Shot.PT := t#20ms; FUBs.TON_Shot.PT := t#30ms;
Status.bLocalCtrl := FALSE; Status.bLocalCtrl := FALSE;
Status.bShootMode := FALSE; Status.bShootMode := FALSE;

View File

@@ -0,0 +1,94 @@
<?xml version="1.0" encoding="utf-8"?>
<tmx version="1.4">
<header creationtool="B&amp;R Automation Studio" creationtoolversion="4.2" datatype="unknown" segtype="sentence" adminlang="en" srclang="en" o-tmf="TMX">
<note>Change the namespace to define where this text module should be located within the logical structure of your texts</note>
<prop type="x-BR-TS:Namespace">IPG/Alarms</prop>
</header>
<body>
<tu tuid="IPGSystemWarning">
<tuv xml:lang="de">
<seg>Laser: Systemwarnung</seg>
</tuv>
</tu>
<tu tuid="IPGSoftwareCtrlActive">
<tuv xml:lang="de">
<seg>Laser: PC-Steuerung (LaserNet) aktiv</seg>
</tuv>
</tu>
<tu tuid="IPGRobotModeNotActive">
<tuv xml:lang="de">
<seg>Laser: Robotermodus nicht aktiv</seg>
</tuv>
</tu>
<tu tuid="IPGSystemError">
<tuv xml:lang="de">
<seg>Laser: Systemfehler</seg>
</tuv>
</tu>
<tu tuid="IPGLaserError">
<tuv xml:lang="de">
<seg>Laser: Laser Störung</seg>
</tuv>
</tu>
<tu tuid="IPGLaserWarning">
<tuv xml:lang="de">
<seg>Laser: Laser Warnung</seg>
</tuv>
</tu>
<tu tuid="IPGChillerError">
<tuv xml:lang="de">
<seg>Laser: Kühler Störung</seg>
</tuv>
</tu>
<tu tuid="IPGChillerWarning">
<tuv xml:lang="de">
<seg>Laser: Kühler Warnung</seg>
</tuv>
</tu>
<tu tuid="IPGSafetyOpen">
<tuv xml:lang="de">
<seg>Laser: Sicherheitskreis offen</seg>
</tuv>
</tu>
<tu tuid="IPGChannelError">
<tuv xml:lang="de">
<seg>Laser: Kanalstörung</seg>
</tuv>
</tu>
<tu tuid="IPGSlotError">
<tuv xml:lang="de">
<seg>Laser: Ungültige Lasernummer</seg>
</tuv>
</tu>
<tu tuid="IPGCabinetDoorOpen">
<tuv xml:lang="de">
<seg>Laser: Schrank offen</seg>
</tuv>
</tu>
<tu tuid="IPGHighBackReflection">
<tuv xml:lang="de">
<seg>Laser: Rückreflektion zu hoch</seg>
</tuv>
</tu>
<tu tuid="IPGModulePowerSupplyWarning">
<tuv xml:lang="de">
<seg>Laser: Warnung Stromversorgung</seg>
</tuv>
</tu>
<tu tuid="IPGCommError">
<tuv xml:lang="de">
<seg>Laser: Kommunikationsfehler</seg>
</tuv>
</tu>
<tu tuid="IPGLocalMode">
<tuv xml:lang="de">
<seg>Laser: Lokale Steuerung (Einrichten)</seg>
</tuv>
</tu>
<tu tuid="IPGShotMode">
<tuv xml:lang="de">
<seg>Laser: Einzelschussbetrieb</seg>
</tuv>
</tu>
</body>
</tmx>

View File

@@ -1,18 +1,19 @@
TYPE TYPE
typ_Status : STRUCT typ_Status : STRUCT (*Stati*)
bLocalCtrl : BOOL; (*Lokale Steuerung - Interface deaktiviet*) bLocalCtrl : BOOL; (*Lokale Steuerung - Interface deaktiviet*)
bShootMode : BOOL; (*Einzelschuss f<>r lokale Steuerung*) bShootMode : BOOL; (*Einzelschuss f<>r lokale Steuerung*)
uiShootPower : UINT := 350; (*Power Einzelshuss*)
END_STRUCT; END_STRUCT;
typ_In : STRUCT typ_In : STRUCT (*Eingangsdaten IPG*)
Status : {REDUND_UNREPLICABLE} typ_In_Status; Status : {REDUND_UNREPLICABLE} typ_In_Status; (*Status 1*)
uiOutPutPower : UINT; (*Ausgangsleistung [W]*) uiOutPutPower : UINT; (*Ausgangsleistung [W]*)
usOpticalChannel : USINT; (*Optischer Kanal*) usOpticalChannel : USINT; (*Optischer Kanal*)
usProgramNumber : USINT; (*Programmnummer*) usProgramNumber : USINT; (*Programmnummer*)
Status2 : typ_In_Status2; Status2 : typ_In_Status2; (*Status 1*)
usLaserNr : USINT; (*Lasernummer*) usLaserNr : USINT; (*Lasernummer*)
END_STRUCT; END_STRUCT;
typ_In_Status : STRUCT typ_In_Status : STRUCT (*Laserstatus 1*)
bLaserIsAssigned : BOOL; (*Laser ist zugeordnet / Steuerung <20>ber Feldbus*) bLaserIsAssigned : BOOL; (*Laser ist zugeordnet / Steuerung <20>ber Feldbus*)
bLaserIsOn : BOOL; (*Laser ist ein - Spannungsversorgung ist ein*) bLaserIsOn : BOOL; (*Laser ist ein - Spannungsversorgung ist ein*)
bSystemError : BOOL; (*Systemfehler*) bSystemError : BOOL; (*Systemfehler*)
@@ -30,7 +31,7 @@ TYPE
bLaserAlive : BOOL; (*Feldbus aktiv*) bLaserAlive : BOOL; (*Feldbus aktiv*)
bSoftwareCtrlActive : BOOL; (*LaserNet Software aktiv*) bSoftwareCtrlActive : BOOL; (*LaserNet Software aktiv*)
END_STRUCT; END_STRUCT;
typ_In_Status2 : STRUCT typ_In_Status2 : STRUCT (*Laserstatus 2*)
bLaserError : BOOL; (*St<53>rung Laser*) bLaserError : BOOL; (*St<53>rung Laser*)
bLaserWarning : BOOL; (*Warnung Laser*) bLaserWarning : BOOL; (*Warnung Laser*)
bChillerError : BOOL; (*St<53>rung K<>hler*) bChillerError : BOOL; (*St<53>rung K<>hler*)
@@ -45,7 +46,7 @@ TYPE
bHighBackReflection : BOOL; (*R<>ckreflektion zu hoch*) bHighBackReflection : BOOL; (*R<>ckreflektion zu hoch*)
bModulePowerSupplyWarning : BOOL; (*Power Supply Warnung*) bModulePowerSupplyWarning : BOOL; (*Power Supply Warnung*)
END_STRUCT; END_STRUCT;
typ_Out : STRUCT typ_Out : STRUCT (*Ausgangsdaten*)
Control : typ_Out_Ctrl; Control : typ_Out_Ctrl;
uiOutPutPower : UINT; (*Laserleistung [W]*) uiOutPutPower : UINT; (*Laserleistung [W]*)
usOpticalChannel : USINT; (*Optischer Kanal - immer 1*) usOpticalChannel : USINT; (*Optischer Kanal - immer 1*)
@@ -53,7 +54,7 @@ TYPE
uiRampingTime : UINT; (*Rampenzeiten [ms]*) uiRampingTime : UINT; (*Rampenzeiten [ms]*)
usLaserNr : USINT; (*LaserNummer - Immer 0*) usLaserNr : USINT; (*LaserNummer - Immer 0*)
END_STRUCT; END_STRUCT;
typ_Out_Ctrl : STRUCT typ_Out_Ctrl : STRUCT (*Ausgangssteuerung*)
bRequestLaser : BOOL; (*Laser Anfordern - Immer Ein*) bRequestLaser : BOOL; (*Laser Anfordern - Immer Ein*)
bLaserOn : BOOL; (*Laser Spannungsversorgung Ein*) bLaserOn : BOOL; (*Laser Spannungsversorgung Ein*)
bResetErrors : BOOL; (*St<53>rungen quittieren*) bResetErrors : BOOL; (*St<53>rungen quittieren*)
@@ -67,4 +68,25 @@ TYPE
bSyncInput : BOOL; (*Synchronisationseingang an Programm*) bSyncInput : BOOL; (*Synchronisationseingang an Programm*)
bExternalError : BOOL; (*Externer Fehler - False*) bExternalError : BOOL; (*Externer Fehler - False*)
END_STRUCT; END_STRUCT;
typ_FUBs : STRUCT
TON_Shot : TON; (*Einzelschuss*)
TOF_CuttingGas : TOF; (*Schneidgas nachlauf*)
Alarm_SystemWarning : FUB_AlarmSimple; (*Systemwarnung*)
Alarm_SoftwareCtrlActive : FUB_AlarmSimple; (*Lasercontrl Steuerung aktiv*)
Alarm_RobotModeNotActive : FUB_AlarmSimple; (*Lasercontrl Robotermodeus nicht aktiv*)
Alarm_SystemError : FUB_AlarmSimple; (*Systemst<73>rung*)
Alarm_LaserError : FUB_AlarmSimple; (*Laserst<73>rung*)
Alarm_LaserWarning : FUB_AlarmSimple; (*Laserwarnung*)
Alarm_ChillerError : FUB_AlarmSimple; (*K<>hlerst<73>rung*)
Alarm_ChillerWarning : FUB_AlarmSimple; (*K<>hlerwarnung*)
Alarm_SafteyOpen : FUB_AlarmSimple; (*Sicherheit offen*)
Alarm_ChannelError : FUB_AlarmSimple; (*Kanal Offen*)
Alarm_SlotError : FUB_AlarmSimple; (*Ung<6E>ltige Lasernummer*)
Alarm_CabinetDoorOpen : FUB_AlarmSimple; (*Schrank offen*)
Alarm_HighBackReflection : FUB_AlarmSimple; (*R<>ckreflektion zu hoch*)
Alarm_ModulePowerSupplyWarning : FUB_AlarmSimple; (*Power Supply Warning*)
Alarm_CommunicationError : FUB_AlarmSimple; (*Kommunikationsfehler*)
Alarm_LocalMode : FUB_AlarmSimple; (*Laser Lokale Steuerung (Einrichten)*)
Alarm_Shotmode : FUB_AlarmSimple; (*Einzelschussbetrieb*)
END_STRUCT;
END_TYPE END_TYPE

View File

@@ -1,7 +1,7 @@
(*//Strukturen*)
VAR VAR
Status : typ_Status; Status : typ_Status;
LaserOut : typ_Out; LaserOut : typ_Out;
LaserIn : typ_In; LaserIn : typ_In;
TON_Shot : TON; FUBs : typ_FUBs;
TOF_CuttingGas : TOF;
END_VAR END_VAR

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio FileVersion="4.9"?>
<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File Description="Init, cyclic, exit code">Main.st</File>
<File Description="Local data types" Private="true">Types.typ</File>
<File Description="Local variables" Private="true">Variables.var</File>
<File Description="IOs" Private="true">IOs.var</File>
</Files>
</Program>

View File

@@ -0,0 +1,4 @@
VAR
usInByte : ARRAY[1..64] OF USINT;
usOuByte : ARRAY[1..64] OF USINT;
END_VAR

View File

@@ -0,0 +1,70 @@
PROGRAM _INIT
(* Insert code here *)
END_PROGRAM
PROGRAM _CYCLIC
//Eing<EFBFBD>nge von Liniensteuerung
gLineInterface.In.bLifebeat := usInByte[1].0;
gLineInterface.In.bModeManual := usInByte[1].1;
gLineInterface.In.bModeAutomatic := usInByte[1].2;
gLineInterface.In.bCycleActive := usInByte[1].3;
gLineInterface.In.bError := usInByte[1].4;
gLineInterface.In.bRobOutOfShuttle1 := usInByte[2].0;
gLineInterface.In.bRobOutOfShuttle2 := usInByte[2].1;
gLineInterface.In.bVacuumOnShuttle1 := usInByte[3].0;
gLineInterface.In.bVacuumOnShuttle2 := usInByte[3].1;
gLineInterface.In.bPlacedPartShuttle1 := usInByte[3].2;
gLineInterface.In.bPlacedPartShuttle2 := usInByte[3].3;
gLineInterface.In.bPickedPartShuttle1 := usInByte[3].4;
gLineInterface.In.bPickedPartShuttle2 := usInByte[3].5;
gLineInterface.In.usPartIDShuttle1 := usInByte[5];
gLineInterface.In.usPartIDShuttle2 := usInByte[6];
//Signale verarbeiten
gLineInterface.Out.bLifebeat := NOT gLineInterface.In.bLifebeat;
//Ausg<EFBFBD>nge and Liniensteuerung
usOuByte[1].0 := gLineInterface.Out.bLifebeat;
usOuByte[1].1 := (gMachine1.enMode = enMACH_MANUAL) AND gMachine1.bMachineON;
usOuByte[1].2 := (gMachine1.enMode = enMACH_AUTOMATIC) AND gMachine1.bMachineON;
usOuByte[1].3 := gLineInterface.Out.bCycleActive;
usOuByte[1].4 := gLineInterface.Out.bError;
usOuByte[2].0 := gLineInterface.Out.bShuttle1InPos;
usOuByte[2].1 := gLineInterface.Out.bShuttle2InPos;
usOuByte[3].0 := gLineInterface.Out.bVacuumIsOnShuttle1;
usOuByte[3].1 := gLineInterface.Out.bVacuumIsOnShuttle2;
usOuByte[3].2 := gLineInterface.Out.bReadyToPlacePartShuttle1;
usOuByte[3].3 := gLineInterface.Out.bReadyToPlacePartShuttle2;
usOuByte[3].4 := gLineInterface.Out.bFinishedPartReadyShuttle1;
usOuByte[3].5 := gLineInterface.Out.bFinishedPartReadyShuttle2;
usOuByte[3].6 := gLineInterface.Out.bFinishedPartIOShuttle1;
usOuByte[3].7 := gLineInterface.Out.bFinishedPartIOShuttle2;
usOuByte[5] := gToolInterface.Shuttle1.FromTool.usToolID;
usOuByte[6] := gToolInterface.Shuttle2.FromTool.usToolID;
usOuByte[7] := UDINT_TO_USINT (SHR (gLineInterface.Out.udCutTimeShuttle1, 24));
usOuByte[8] := UDINT_TO_USINT (SHR (gLineInterface.Out.udCutTimeShuttle1, 16));
usOuByte[9] := UDINT_TO_USINT (SHR (gLineInterface.Out.udCutTimeShuttle1, 8));
usOuByte[10] := UDINT_TO_USINT (gLineInterface.Out.udCutTimeShuttle1);
usOuByte[11] := UDINT_TO_USINT (SHR (gLineInterface.Out.udCutTimeShuttle2, 24));
usOuByte[12] := UDINT_TO_USINT (SHR (gLineInterface.Out.udCutTimeShuttle2, 16));
usOuByte[13] := UDINT_TO_USINT (SHR (gLineInterface.Out.udCutTimeShuttle2, 8));
usOuByte[14] := UDINT_TO_USINT (gLineInterface.Out.udCutTimeShuttle2);
END_PROGRAM
PROGRAM _EXIT
(* Insert code here *)
END_PROGRAM

View File

@@ -8,5 +8,6 @@
<Object Type="Package" Description="Mobile Panel">MP</Object> <Object Type="Package" Description="Mobile Panel">MP</Object>
<Object Type="Package" Description="IPG Laser">IPG</Object> <Object Type="Package" Description="IPG Laser">IPG</Object>
<Object Type="Package" Description="Schneidkopf">RayTools</Object> <Object Type="Package" Description="Schneidkopf">RayTools</Object>
<Object Type="Program" Language="IEC" Description="Interface zur Linie">LineInterface</Object>
</Objects> </Objects>
</Package> </Package>

View File

@@ -8,31 +8,57 @@ PROGRAM _CYCLIC
gRTLaserInterface.In.bHeadCalibrated := bInCalibrated; gRTLaserInterface.In.bHeadCalibrated := bInCalibrated;
//Interface an Raytools Kopf //Interface an Raytools Kopf
bOuFollowPos := gRTLaserInterface.Out.bFollowPos AND NOT TOF_Error.Q AND bInReady AND NOT bInPosLimits; bOuFollowPos := gRTLaserInterface.Out.bFollowPos AND NOT FUBs.TOF_Error.Q AND bInReady AND NOT bInPosLimits;
bOuMidpos := gRTLaserInterface.Out.bMidPos AND NOT bInMidPosArrived AND NOT TOF_FollowPos.Q AND NOT TOF_Error.Q AND bInReady; bOuMidpos := gRTLaserInterface.Out.bMidPos AND NOT bInMidPosArrived AND NOT FUBs.TOF_FollowPos.Q AND NOT FUBs.TOF_Error.Q AND bInReady;
//AND NOT TON_MidPosTimeout.Q AND NOT TOF_MidPosTimeouterror.Q; //AND NOT TON_MidPosTimeout.Q AND NOT TOF_MidPosTimeouterror.Q;
bOuCalibrate := gRTLaserInterface.Out.bCalibrateLaser AND NOT bInPosLimits; bOuCalibrate := gRTLaserInterface.Out.bCalibrateLaser AND NOT bInPosLimits;
bOuReset := gMP7121.Button OR (NOT bDebug AND NOT bOuFollowPos AND bInAlarm AND TOF_FollowPosAutoErrorReset.Q); bOuReset := gMP7121.Button OR (NOT bDebug AND NOT bOuFollowPos AND bInAlarm AND FUBs.TOF_FollowPosAutoErrorReset.Q);
TOF_FollowPos.IN := bOuFollowPos; FUBs.TOF_FollowPos.IN := bOuFollowPos;
TOF_FollowPos.PT := t#100ms; FUBs.TOF_FollowPos.PT := t#100ms;
TOF_FollowPos (); FUBs.TOF_FollowPos ();
TOF_FollowPosAutoErrorReset.IN := bOuFollowPos; FUBs.TOF_FollowPosAutoErrorReset.IN := bOuFollowPos;
TOF_FollowPosAutoErrorReset.PT := t#350ms; FUBs.TOF_FollowPosAutoErrorReset.PT := t#350ms;
TOF_FollowPosAutoErrorReset (); FUBs.TOF_FollowPosAutoErrorReset ();
TOF_Error.IN := bInAlarm; FUBs.TOF_Error.IN := bInAlarm;
TOF_Error.PT := t#20ms; FUBs.TOF_Error.PT := t#20ms;
TOF_Error (); FUBs.TOF_Error ();
TON_MidPosTimeout.IN := bOuMidpos; FUBs.TON_MidPosTimeout.IN := bOuMidpos;
TON_MidPosTimeout.PT := t#1s; FUBs.TON_MidPosTimeout.PT := t#1s;
TON_MidPosTimeout (); FUBs.TON_MidPosTimeout ();
TOF_MidPosTimeouterror.IN := TON_MidPosTimeout.Q; FUBs.TOF_MidPosTimeouterror.IN := FUBs.TON_MidPosTimeout.Q;
TOF_MidPosTimeouterror.PT := t#20ms; FUBs.TOF_MidPosTimeouterror.PT := t#20ms;
TOF_MidPosTimeouterror (); FUBs.TOF_MidPosTimeouterror ();
//Alarme
//======================================================
//Kopf nicht bereit
FUBs.Alarm_NotReady.MpLink := gMpAlarmXCore;
FUBs.Alarm_NotReady.bInAlarmSignal := NOT bInReady;
FUBs.Alarm_NotReady.sInAlName := 'RaytoolsNotReady';
FUBs.Alarm_NotReady ();
//Kopf nicht kilibriert
FUBs.Alarm_NotCalibrated.MpLink := gMpAlarmXCore;
FUBs.Alarm_NotCalibrated.bInAlarmSignal := NOT bInCalibrated;
FUBs.Alarm_NotCalibrated.sInAlName := 'RaytoolsNotCalibrated';
FUBs.Alarm_NotCalibrated ();
//Kopf Alarm
FUBs.Alarm_Alarm.MpLink := gMpAlarmXCore;
FUBs.Alarm_Alarm.bInAlarmSignal := bInAlarm;
FUBs.Alarm_Alarm.sInAlName := 'RaytoolsAlarm';
FUBs.Alarm_Alarm ();
//Kopf Poslimits
FUBs.Alarm_PosLimits.MpLink := gMpAlarmXCore;
FUBs.Alarm_PosLimits.bInAlarmSignal := bInPosLimits;
FUBs.Alarm_PosLimits.sInAlName := 'RaytoolsPosLimits';
FUBs.Alarm_PosLimits ();
END_PROGRAM END_PROGRAM

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.7.5.60 SP?> <?AutomationStudio FileVersion="4.9"?>
<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program"> <Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
<Files> <Files>
<File Description="Cyclic code">Cyclic.st</File> <File Description="Cyclic code">Cyclic.st</File>
@@ -8,5 +8,6 @@
<File Description="Local data types" Private="true">Types.typ</File> <File Description="Local data types" Private="true">Types.typ</File>
<File Description="Local variables" Private="true">Variables.var</File> <File Description="Local variables" Private="true">Variables.var</File>
<File Description="IOs" Private="true">IOs.var</File> <File Description="IOs" Private="true">IOs.var</File>
<File Description="Alarme">TxtAlarms.tmx</File>
</Files> </Files>
</Program> </Program>

View File

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<tmx version="1.4">
<header creationtool="B&amp;R Automation Studio" creationtoolversion="4.2" datatype="unknown" segtype="sentence" adminlang="en" srclang="en" o-tmf="TMX">
<note>Change the namespace to define where this text module should be located within the logical structure of your texts</note>
<prop type="x-BR-TS:Namespace">Raytools/Alarms</prop>
</header>
<body>
<tu tuid="RaytoolsNotReady">
<tuv xml:lang="de">
<seg>Laserkopf: Nicht bereit</seg>
</tuv>
</tu>
<tu tuid="RaytoolsNotCalibrated">
<tuv xml:lang="de">
<seg>Laserkopf: Nicht Kalibriert</seg>
</tuv>
</tu>
<tu tuid="RaytoolsPosLimits">
<tuv xml:lang="de">
<seg>Laserkopf: Endlage erreicht</seg>
</tuv>
</tu>
<tu tuid="RaytoolsAlarm">
<tuv xml:lang="de">
<seg>Laserkopf: Alarm aktiv</seg>
</tuv>
</tu>
</body>
</tmx>

View File

@@ -0,0 +1,14 @@
TYPE
typ_FUBs : STRUCT
TOF_FollowPos : TOF;
TOF_FollowPosAutoErrorReset : TOF;
TOF_Error : TOF;
TOF_MidPosTimeouterror : TOF;
TON_MidPosTimeout : {REDUND_UNREPLICABLE} TON;
Alarm_NotReady : FUB_AlarmSimple;
Alarm_NotCalibrated : FUB_AlarmSimple;
Alarm_Alarm : FUB_AlarmSimple;
Alarm_PosLimits : FUB_AlarmSimple;
END_STRUCT;
END_TYPE

View File

@@ -1,8 +1,7 @@
VAR VAR
bDebug : BOOL; bDebug : BOOL;
TOF_FollowPos : TOF; END_VAR
TOF_FollowPosAutoErrorReset : TOF; (*//Strukturen*)
TOF_Error : TOF; VAR
TOF_MidPosTimeouterror : TOF; FUBs : typ_FUBs;
TON_MidPosTimeout : TON;
END_VAR END_VAR

View File

@@ -1,324 +0,0 @@
PROGRAM _CYCLIC
strDevice := 'CNC_PrgDir';
strPath := '';
//Parameter
VCCtrl.ListboxEdit.usMinIndex := 0;
VCCtrl.ListboxEdit.usMaxIndex := Parameter.usEditLines;
lstrEditline ACCESS ADR (strLines[VCCtrl.ListboxEdit.usIndexDatapoint]);
FUBs.TON_ReadDir.IN := NOT bReadDir;
FUBs.TON_ReadDir.PT := t#90s;
FUBs.TON_ReadDir ();
IF FUBs.TON_ReadDir.Q THEN
bReadDir := TRUE;
END_IF
CASE enDirStep OF
//auf Befehl warten
//=================================
enDirStep_WAIT:
IF bReadDir THEN
enDirStep := enDirStep_DIRINFO;
bReadDir := FALSE;
END_IF
//Verzeichnisinfo lesen
//=================================
enDirStep_DIRINFO:
FUBs.DirInfo.pDevice := ADR (strDevice);
FUBs.DirInfo.pPath := ADR (strPath);
FUBs.DirInfo.enable := TRUE;
IF (FUBs.DirInfo.status = ERR_OK) THEN
FUBs.DirInfo.enable := FALSE;
States.udFilesInDir := FUBs.DirInfo.filenum;
IF (States.udFilesInDir > 0) THEN
States.udFilesInDir := States.udFilesInDir - 1;
END_IF
VCCtrl.DropDownBoxFile.usMaxIndex := UDINT_TO_USINT (States.udFilesInDir);
udCurrentFile := 0;
enDirStep := enDirStep_READDIR;
ELSIF (FUBs.DirInfo.status < ERR_FUB_ENABLE_FALSE) THEN
//Fehler
FUBStates.DirInfo := FUBs.DirInfo.status;
FUBs.DirInfo.enable := FALSE;
enDirStep := enDirStep_WAIT;
END_IF
//Datei lesen
//=================================
enDirStep_READDIR:
FUBs.DirRead.enable := (udCurrentFile <= States.udFilesInDir);
FUBs.DirRead.entry := udCurrentFile;
FUBs.DirRead.pDevice := ADR (strDevice);
FUBs.DirRead.pPath := ADR (strPath);
FUBs.DirRead.option := fiFILE;
FUBs.DirRead.pData := ADR (DirReadData);
FUBs.DirRead.data_len := SIZEOF (DirReadData);
IF (udCurrentFile > States.udFilesInDir) THEN
enDirStep := enDirStep_WAIT;
ELSIF (FUBs.DirRead.status = ERR_OK) THEN
FUBs.DirRead.enable := FALSE;
enDirStep := enDirStep_BUILDLIST;
ELSIF (FUBs.DirRead.status < ERR_FUB_ENABLE_FALSE) THEN
//Fehler
FUBStates.DirRead := FUBs.DirRead.status;
FUBs.DirRead.enable := FALSE;
enDirStep := enDirStep_WAIT;
END_IF
//Liste Bilden
enDirStep_BUILDLIST:
brsmemcpy (ADR (gstrFilenames[udCurrentFile]), ADR (DirReadData.Filename), SIZEOF (gstrFilenames[0]));
udCurrentFile := udCurrentFile + 1;
enDirStep := enDirStep_READDIR;
END_CASE
//Buttons Anzeigen Verriegeln etc.
VCCtrl.LineDown.usStatus.0 := (enFileStep <> enFileStep_WAITCMD2);
VCCtrl.LineDown.usStatus.1 := (States.udOrgLineOffset[0] >= States.udFileLen);
VCCtrl.LineUp.usStatus.0 := (enFileStep <> enFileStep_WAITCMD2);
VCCtrl.LineUp.usStatus.1 := (States.udOrgLineOffset[0] = 0) AND (VCCtrl.ListboxEdit.usIndexDatapoint = 0);
VCCtrl.ScrollDown.usStatus.0 := (enFileStep <> enFileStep_WAITCMD2);
VCCtrl.ScrollDown.usStatus.1 := (States.udOrgLineOffset[0] >= States.udFileLen);
VCCtrl.ScrollUp.usStatus.0 := (enFileStep <> enFileStep_WAITCMD2);
VCCtrl.ScrollUp.usStatus.1 := (States.udOrgLineOffset[0] = 0);
VCCtrl.Cancel.usStatus.0 := (enFileStep <> enFileStep_WAITCMD2);
VCCtrl.DropDownBoxFile.usStatus.0 := (enFileStep <> enFileStep_WAIT);
VCCtrl.LoadEdit.usStatus.0 := (enFileStep <> enFileStep_WAIT);
CASE enFileStep OF
//auf Befehl warten
//=================================
enFileStep_WAIT:
FUBs.FileOpen.enable := FALSE;
strFile := gstrFilenames[usEditFileSelection];
IF VCCtrl.LoadEdit.bCommand THEN
VCCtrl.LoadEdit.bCommand := FALSE;
VCCtrl.DropDownBoxFile.bCompletion := FALSE;
enFileStep := enFileStep_OPEN;
END_IF
IF (States.udFileHandle > 0) THEN
//Offenes File schlie<EFBFBD>en
FUBs.FileClose.ident := States.udFileHandle;
enFileStep := enFileStep_CLOSE;
END_IF
//Datei <EFBFBD>ffnen
//=================================
enFileStep_OPEN:
FUBs.FileOpen.mode := fiREAD_WRITE;
FUBs.FileOpen.pDevice := ADR (strDevice);
FUBs.FileOpen.pFile := ADR (strFile);
FUBs.FileOpen.enable := TRUE;
IF (FUBs.FileOpen.status = ERR_OK) THEN
FUBs.FileOpen.enable := FALSE;
enFileStep := enFileStep_READLINE;
States.udFileHandle := FUBs.FileOpen.ident;
States.udReadlineOffset := 0;
States.uiCurrentBlockLine := 0;
States.udFileLen := FUBs.FileOpen.filelen;
ELSIF (FUBs.FileOpen.status < ERR_FUB_ENABLE_FALSE) THEN
//Fehler
FUBs.FileOpen.enable := FALSE;
enFileStep := enFileStep_WAIT;
States.udFileHandle := 0;
END_IF
//Datei "Zeile Lesen"
//=================================
enFileStep_READLINE:
FUBs.FileRead.ident := States.udFileHandle;
FUBs.FileRead.offset := States.udReadlineOffset;
FUBs.FileRead.pDest := ADR (strReadBuffer);
FUBs.FileRead.len := SIZEOF (strReadBuffer);
FUBs.FileRead.enable := TRUE;
IF (FUBs.FileRead.status = ERR_OK) THEN
FUBs.FileRead.enable := FALSE;
States.udReadLineLen := FUBs.FileRead.bytesread;
IF (States.udReadLineLen = 0) THEN
enFileStep := enFileStep_WAITCMD2;
FOR usi := UINT_TO_USINT (States.uiCurrentBlockLine) TO Parameter.usEditLines DO
brsmemset (ADR (strLines[usi]), 0, SIZEOF (strLines[usi]));
END_FOR
ELSE
enFileStep := enFileStep_PARSELINE;
END_IF
ELSIF (FUBs.FileRead.status < ERR_FUB_ENABLE_FALSE) THEN
//Fehler
FUBs.FileRead.enable := FALSE;
//Offenes File schlie<EFBFBD>en
FUBs.FileClose.ident := States.udFileHandle;
enFileStep := enFileStep_CLOSE;
END_IF
//Gelesene Zeile parsen
//=================================
enFileStep_PARSELINE:
FOR udi := 0 TO (States.udReadLineLen - 2) DO
IF (brsmemcmp (ADR (strReadBuffer) + udi, ADR (strLineEnd), 2) = 0) THEN
brsmemcpy (ADR (strLines[States.uiCurrentBlockLine]), ADR (strReadBuffer), udi);
//Offset und L<EFBFBD>nge speichern und Zeiter weiterstellen
States.udOrgLineLen[States.uiCurrentBlockLine] := udi;
States.udOrgLineOffset[States.uiCurrentBlockLine] := States.udReadlineOffset;
States.udReadlineOffset := States.udReadlineOffset + udi + 2;
brsmemset (ADR (strLines[States.uiCurrentBlockLine]) + udi, 0, 1);
States.uiCurrentBlockLine := States.uiCurrentBlockLine + 1;
IF States.uiCurrentBlockLine = Parameter.usEditLines THEN
enFileStep := enFileStep_WAITCMD2;
EXIT;
ELSE
brsmemset (ADR (strReadBuffer) + udi, 0, SIZEOF (strReadBuffer));
enFileStep := enFileStep_READLINE;
EXIT;
END_IF
END_IF
END_FOR
//Auf neue Befehle warten
//=================================
enFileStep_WAITCMD2:
IF VCCtrl.ScrollDown.bCommand AND (States.udOrgLineOffset[0] < States.udFileLen) THEN
FOR usi := 0 TO Parameter.usPageLines DO
//Zeilen shiften
brsstrcpy (ADR (strLines[usi]), ADR (strLines[usi + Parameter.usPageLines]));
END_FOR
States.uiCurrentBlockLine := Parameter.usPageLines;
VCCtrl.ScrollDown.bCommand := FALSE;
enFileStep := enFileStep_READLINE;
ELSIF VCCtrl.ScrollUp.bCommand AND (States.udOrgLineOffset[0] > 0) THEN
VCCtrl.ScrollUp.bCommand := FALSE;
States.udReadlineOffset := 0;
States.uiCurrentBlockLine := 0;
enFileStep := enFileStep_READLINE;
ELSIF VCCtrl.LineUp.bCommand THEN
IF (VCCtrl.ListboxEdit.usIndexDatapoint > 0) THEN
VCCtrl.ListboxEdit.usIndexDatapoint := VCCtrl.ListboxEdit.usIndexDatapoint - 1;
ELSIF (States.udOrgLineOffset[0] > 0) THEN
//Seite scrollen
VCCtrl.ScrollUp.bCommand := FALSE;
END_IF
VCCtrl.LineUp.bCommand := FALSE;
ELSIF VCCtrl.LineDown.bCommand THEN
IF (VCCtrl.ListboxEdit.usIndexDatapoint < VCCtrl.ListboxEdit.usMaxIndex) THEN
VCCtrl.ListboxEdit.usIndexDatapoint := VCCtrl.ListboxEdit.usIndexDatapoint + 1;
ELSIF (States.udOrgLineOffset[0] < States.udFileLen) THEN
VCCtrl.ScrollDown.bCommand := TRUE;
END_IF
VCCtrl.LineDown.bCommand := FALSE;
ELSIF VCCtrl.Cancel.bCommand THEN
VCCtrl.Cancel.bCommand := FALSE;
enFileStep := enFileStep_CLOSE;
END_IF
IF VCCtrl.LineEdit.bCompletion THEN
VCCtrl.LineEdit.bCompletion := FALSE;
//Eingabe abgeschlossen
udNewLen := brsstrlen (ADR (lstrEditline));
brsmemset (ADR (strWriteBuffer) + udi, 0, SIZEOF (strWriteBuffer));
brsstrcpy (ADR (strWriteBuffer), ADR (lstrEditline));
brsstrcat (ADR (strWriteBuffer), ADR (strLineEnd));
IF (udNewLen = States.udOrgLineLen[VCCtrl.ListboxEdit.usIndexDatapoint]) THEN
//Gleiche L<EFBFBD>nge einfach <EFBFBD>berschreiben
enFileStep := enFileStep_WRITELINE;
ELSE
enFileStep := enFileStep_READFILEREST;
END_IF
END_IF
//Restliches File auslesen
//=================================
enFileStep_READFILEREST:
FUBs.FileRead.ident := States.udFileHandle;
FUBs.FileRead.offset := States.udOrgLineOffset[VCCtrl.ListboxEdit.usIndexDatapoint] +
States.udOrgLineLen[VCCtrl.ListboxEdit.usIndexDatapoint] + 2;
FUBs.FileRead.pDest := ADR (usBuffer);
FUBs.FileRead.len := SIZEOF (usBuffer);
FUBs.FileRead.enable := TRUE;
IF (FUBs.FileRead.status = ERR_OK) THEN
FUBs.FileRead.enable := FALSE;
States.udReadFileRestLen := FUBs.FileRead.bytesread;
enFileStep := enFileStep_WRITELINE;
ELSIF (FUBs.FileRead.status < ERR_FUB_ENABLE_FALSE) THEN
//Fehler
FUBs.FileRead.enable := FALSE;
//Offenes File schlie<EFBFBD>en
FUBs.FileClose.ident := States.udFileHandle;
enFileStep := enFileStep_CLOSE;
END_IF
//Ge<EFBFBD>nderte Zeile in Datei schreiben
//=================================
enFileStep_WRITELINE:
FUBs.FileWrite.ident := States.udFileHandle;
FUBs.FileWrite.pSrc := ADR (strWriteBuffer);
FUBs.FileWrite.offset := States.udOrgLineOffset[VCCtrl.ListboxEdit.usIndexDatapoint];
FUBs.FileWrite.len := brsstrlen (ADR (strWriteBuffer));
FUBs.FileWrite.option := 0; //No Trunc
FUBs.FileWrite.enable := TRUE;
IF (FUBs.FileWrite.status = ERR_OK) THEN
FUBs.FileWrite.enable := FALSE;
IF (udNewLen = States.udOrgLineLen[VCCtrl.ListboxEdit.usIndexDatapoint]) THEN
//Editierte Zeile ohne L<EFBFBD>ngen<EFBFBD>nderung
enFileStep := enFileStep_WAITCMD2;
ELSE
enFileStep := enFileStep_WriteFILEREST;
END_IF
ELSIF (FUBs.FileWrite.status < ERR_FUB_ENABLE_FALSE) THEN
//Fehler
FUBs.FileWrite.enable := FALSE;
//Offenes File schlie<EFBFBD>en
FUBs.FileClose.ident := States.udFileHandle;
enFileStep := enFileStep_CLOSE;
END_IF
//Restdaten in Datei schreiben
//=================================
enFileStep_WriteFILEREST:
FUBs.FileWrite.ident := States.udFileHandle;
FUBs.FileWrite.pSrc := ADR (usBuffer);
FUBs.FileWrite.offset := States.udOrgLineOffset[VCCtrl.ListboxEdit.usIndexDatapoint] + brsstrlen (ADR (strWriteBuffer));
FUBs.FileWrite.len := States.udReadFileRestLen;
FUBs.FileWrite.option := 1; //With Trunc
FUBs.FileWrite.enable := TRUE;
IF (FUBs.FileWrite.status = ERR_OK) THEN
FUBs.FileWrite.enable := FALSE;
States.udReadlineOffset := States.udOrgLineOffset[VCCtrl.ListboxEdit.usIndexDatapoint];
States.uiCurrentBlockLine := VCCtrl.ListboxEdit.usIndexDatapoint;
enFileStep := enFileStep_READLINE;
ELSIF (FUBs.FileWrite.status < ERR_FUB_ENABLE_FALSE) THEN
//Fehler
FUBs.FileWrite.enable := FALSE;
//Offenes File schlie<EFBFBD>en
FUBs.FileClose.ident := States.udFileHandle;
enFileStep := enFileStep_CLOSE;
END_IF
//Datei schlie<EFBFBD>en
//=================================
enFileStep_CLOSE:
FUBs.FileClose.enable := TRUE;
IF (FUBs.FileClose.status = ERR_OK) OR (FUBs.FileClose.status < ERR_FUB_ENABLE_FALSE) THEN
FUBs.FileClose.enable := FALSE;
States.udFileHandle := 0;
enFileStep := enFileStep_WAIT;
END_IF
END_CASE
FUBs.DirInfo ();
FUBs.DirRead ();
FUBs.FileOpen ();
FUBs.FileRead ();
FUBs.FileWrite ();
FUBs.FileClose ();
END_PROGRAM

View File

@@ -1,7 +0,0 @@
PROGRAM _INIT
Parameter.usEditLines := 12;
Parameter.usPageLines:= 5;
bReadDir := TRUE;
END_PROGRAM

View File

@@ -1,84 +0,0 @@
(*//Schrittketten / Befehle / Bedingungen*)
TYPE
typ_enStepFile :
( (*Schrittkette*)
enFileStep_WAIT := 0, (*Auf Befehl Warten*)
enFileStep_OPEN, (*Datei <20>ffnen*)
enFileStep_READLINE, (*Datei Zeile Lesen*)
enFileStep_PARSELINE, (*Datei Zeile Parsen*)
enFileStep_WAITCMD2, (*Auf Befehl Warten*)
enFileStep_READFILEREST, (*Restliches File Lesen*)
enFileStep_WRITELINE, (*Ge<47>nderte Zeile in Datei Schreiben*)
enFileStep_WriteFILEREST, (*Restliches File Schreiben*)
enFileStep_CLOSE (*Datei Schlie<69>en*)
);
typ_enStepDir :
(
enDirStep_WAIT,
enDirStep_DIRINFO,
enDirStep_READDIR,
enDirStep_BUILDLIST
);
typ_States : STRUCT
udFileHandle : UDINT; (*FileHandle*)
udReadlineOffset : UDINT; (*Offset*)
udFileLen : UDINT; (*Dateil<69>nge*)
udReadLineLen : UDINT; (*Tats. gelesene L<>nge*)
udReadFileRestLen : UDINT; (*Gelesene L<>nge Restl. File*)
udOrgLineLen : ARRAY[0..EDIT_LINES]OF UDINT; (*Zeilen L<>nge (um L<>ngen<65>nderung festzustellen*)
udOrgLineOffset : ARRAY[0..EDIT_LINES]OF UDINT; (*Offeset der Zeile im File*)
uiCurrentBlockLine : UINT; (*Aktuelle Zeile (im Block)*)
udFilesInDir : UDINT; (*Dateien in Verzeichnis*)
END_STRUCT;
typ_FUBstates : STRUCT
DirInfo : UINT;
DirRead : UINT;
END_STRUCT;
typ_Parameter : STRUCT
usEditLines : USINT; (*Anzahl der Zeilen zum Editieren*)
usPageLines : USINT; (*Anzahl der Zeilen zum Bl<42>ttern*)
END_STRUCT;
END_TYPE
(*//FunctionBlocks / Daten*)
TYPE
typ_FUB : STRUCT (*Funktionsbausteine*)
FileOpen : FileOpen := (0);
FileClose : FileClose := (0);
FileRead : FileReadEx := (0); (*Datei Lesen (mit L<>nge Gelesener Daten)*)
FileWrite : FileWriteEx := (0); (*Datei Schreiben (Optional mit Truncate)*)
DirInfo : DirInfo; (*Verzeichnisinfo*)
DirRead : DirRead; (*Verzeichnisinhalt lesen*)
TON_ReadDir : TON;
END_STRUCT;
END_TYPE
(*Insert your comment here.*)
TYPE
enumTabs :
( (*Tabs*)
TAB_TUNE_LOWER_TOOL := 8, (*Tab Tuning Unterwerkzeug*)
TAB_TUNE_UPPER_TOOL := 9, (*Tab Tuning Oberwerkzeug*)
TAB_PROFILE_LOWER_TOOL := 10, (*Tab Profil Unterwerkzeug*)
TAB_PROFILE_UPPER_TOOL := 11 (*Tab Profil Oberwerkzeug*)
);
typ_VCCtrl : STRUCT (*VC Controls*)
Status : typ_VCStatus;
ListboxEdit : gtyp_VCListbox; (*Listbox Editor*)
LineEdit : gtyp_VCString;
DropDownBoxFile : gtyp_VCDropdownbox;
LineUp : gtyp_VCButton;
LineDown : gtyp_VCButton;
ScrollUp : gtyp_VCButton;
ScrollDown : gtyp_VCButton;
Slider : gtyp_VCSlider;
Cancel : gtyp_VCButton;
LoadEdit : gtyp_VCButton;
END_STRUCT;
typ_VCStatus : STRUCT (*VC Statis - Allgemein*)
usDummy : USINT;
END_STRUCT;
END_TYPE

View File

@@ -1,39 +0,0 @@
VAR CONSTANT
EDIT_LINES : USINT := 25;
END_VAR
VAR
bScrollDown : BOOL;
bScrollUp : BOOL;
bReadDir : BOOL;
usi : USINT;
usEditFileSelection : USINT;
udi : UDINT;
udCurrentFile : UDINT;
udNewLen : UDINT;
usBuffer : {REDUND_UNREPLICABLE} ARRAY[0..999999] OF USINT; (*Puffer*)
END_VAR
(*//Strings*)
VAR
strDevice : STRING[80];
strPath : STRING[80];
strFile : STRING[80];
strLineEnd : STRING[3] := '$r$n';
strReadBuffer : STRING[80];
strWriteBuffer : STRING[80];
strLines : ARRAY[0..EDIT_LINES] OF STRING[80];
lstrEditline : REFERENCE TO STRING[80]; (*Editierte Zeile*)
END_VAR
(*//Strukturen*)
VAR
enFileStep : typ_enStepFile;
enDirStep : typ_enStepDir;
States : typ_States;
Parameter : typ_Parameter;
VCCtrl : typ_VCCtrl; (*Seiteninterface spezifisch*)
DirReadData : fiDIR_READ_DATA;
FUBStates : typ_FUBstates;
END_VAR
(*//Funktionsbl<62>cke*)
VAR
FUBs : typ_FUB;
END_VAR

View File

@@ -1,4 +1,84 @@
PROGRAM _CYCLIC PROGRAM _CYCLIC
(* Insert code here *) strDevice := 'CNC_PrgDir';
strPath := '';
//Parameter
FUBs.TON_ReadDir.IN := NOT bReadDir;
FUBs.TON_ReadDir.PT := t#90s;
FUBs.TON_ReadDir ();
IF FUBs.TON_ReadDir.Q THEN
bReadDir := TRUE;
END_IF
CASE enDirStep OF
//auf Befehl warten
//=================================
enDirStep_WAIT:
IF bReadDir THEN
enDirStep := enDirStep_DIRINFO;
bReadDir := FALSE;
END_IF
//Verzeichnisinfo lesen
//=================================
enDirStep_DIRINFO:
FUBs.DirInfo.pDevice := ADR (strDevice);
FUBs.DirInfo.pPath := ADR (strPath);
FUBs.DirInfo.enable := TRUE;
IF (FUBs.DirInfo.status = ERR_OK) THEN
FUBs.DirInfo.enable := FALSE;
States.udFilesInDir := FUBs.DirInfo.filenum;
IF (States.udFilesInDir > 0) THEN
States.udFilesInDir := States.udFilesInDir - 1;
END_IF
VCCtrl.DropDownBoxFile.usMaxIndex := UDINT_TO_USINT (States.udFilesInDir);
udCurrentFile := 0;
enDirStep := enDirStep_READDIR;
ELSIF (FUBs.DirInfo.status < ERR_FUB_ENABLE_FALSE) THEN
//Fehler
FUBStates.DirInfo := FUBs.DirInfo.status;
FUBs.DirInfo.enable := FALSE;
enDirStep := enDirStep_WAIT;
END_IF
//Datei lesen
//=================================
enDirStep_READDIR:
FUBs.DirRead.enable := (udCurrentFile <= States.udFilesInDir);
FUBs.DirRead.entry := udCurrentFile;
FUBs.DirRead.pDevice := ADR (strDevice);
FUBs.DirRead.pPath := ADR (strPath);
FUBs.DirRead.option := fiFILE; //Nur Dateien
FUBs.DirRead.pData := ADR (DirReadData);
FUBs.DirRead.data_len := SIZEOF (DirReadData);
IF (udCurrentFile > States.udFilesInDir) THEN
enDirStep := enDirStep_WAIT;
ELSIF (FUBs.DirRead.status = ERR_OK) THEN
FUBs.DirRead.enable := FALSE;
enDirStep := enDirStep_BUILDLIST;
ELSIF (FUBs.DirRead.status < ERR_FUB_ENABLE_FALSE) THEN
//Fehler
FUBStates.DirRead := FUBs.DirRead.status;
FUBs.DirRead.enable := FALSE;
enDirStep := enDirStep_WAIT;
END_IF
//Liste Bilden
enDirStep_BUILDLIST:
brsmemcpy (ADR (gstrFilenames[udCurrentFile]), ADR (DirReadData.Filename), SIZEOF (gstrFilenames[0]));
udCurrentFile := udCurrentFile + 1;
enDirStep := enDirStep_READDIR;
END_CASE
//Buttons Anzeigen Verriegeln etc.
//VCCtrl.DropDownBoxFile.usStatus.0 := (enFileStep <> enFileStep_WAIT);
FUBs.DirInfo ();
FUBs.DirRead ();
END_PROGRAM END_PROGRAM

View File

@@ -1,9 +1,6 @@
PROGRAM _INIT PROGRAM _INIT
MpFUBs.MpFileManagerConfig.MpLink := ADR (gFileManagerUI); bReadDir := TRUE;
MpFUBs.MpFileManagerUI.MpLink := ADR (gFileManagerUI);
END_PROGRAM END_PROGRAM

View File

@@ -1,8 +1,52 @@
(*//Schrittketten / Befehle / Bedingungen*)
TYPE
typ_enStepDir :
(
enDirStep_WAIT,
enDirStep_DIRINFO,
enDirStep_READDIR,
enDirStep_BUILDLIST
);
typ_States : STRUCT
udFileHandle : UDINT; (*FileHandle*)
udReadlineOffset : UDINT; (*Offset*)
udFileLen : UDINT; (*Dateil<69>nge*)
udReadLineLen : UDINT; (*Tats. gelesene L<>nge*)
udReadFileRestLen : UDINT; (*Gelesene L<>nge Restl. File*)
udOrgLineLen : ARRAY[0..EDIT_LINES]OF UDINT; (*Zeilen L<>nge (um L<>ngen<65>nderung festzustellen*)
udOrgLineOffset : ARRAY[0..EDIT_LINES]OF UDINT; (*Offeset der Zeile im File*)
uiCurrentBlockLine : UINT; (*Aktuelle Zeile (im Block)*)
udFilesInDir : UDINT; (*Dateien in Verzeichnis*)
END_STRUCT;
typ_FUBstates : STRUCT
DirInfo : UINT;
DirRead : UINT;
END_STRUCT;
typ_Parameter : STRUCT
usEditLines : USINT; (*Anzahl der Zeilen zum Editieren*)
usPageLines : USINT; (*Anzahl der Zeilen zum Bl<42>ttern*)
END_STRUCT;
END_TYPE
(*//FunctionBlocks / Daten*) (*//FunctionBlocks / Daten*)
TYPE TYPE
typ_MpFUB : STRUCT (*Funktionsbausteine*) typ_FUB : STRUCT (*Funktionsbausteine*)
MpFileManagerUI : MpFileManagerUI; DirInfo : DirInfo; (*Verzeichnisinfo*)
MpFileManagerConfig : MpFileManagerConfig; DirRead : DirRead; (*Verzeichnisinhalt lesen*)
TON_ReadDir : TON;
END_STRUCT;
END_TYPE
(*Insert your comment here.*)
TYPE
typ_VCCtrl : STRUCT (*VC Controls*)
Status : typ_VCStatus;
DropDownBoxFile : gtyp_VCDropdownbox;
END_STRUCT;
typ_VCStatus : STRUCT (*VC Statis - Allgemein*)
usDummy : USINT;
END_STRUCT; END_STRUCT;
END_TYPE END_TYPE

View File

@@ -1,4 +1,39 @@
(*//Funktionsbl<62>cke*) (*//Funktionsbl<62>cke*)
VAR CONSTANT
EDIT_LINES : USINT := 25;
END_VAR
VAR
bScrollDown : BOOL;
bScrollUp : BOOL;
bReadDir : BOOL;
usi : USINT;
usEditFileSelection : USINT;
udi : UDINT;
udCurrentFile : UDINT;
udNewLen : UDINT;
usBuffer : {REDUND_UNREPLICABLE} ARRAY[0..999999] OF USINT; (*Puffer*)
END_VAR
(*//Strings*)
VAR
strDevice : STRING[80];
strPath : STRING[80];
strFile : STRING[80];
strLineEnd : STRING[3] := '$r$n';
strReadBuffer : STRING[80];
strWriteBuffer : STRING[80];
strLines : ARRAY[0..EDIT_LINES] OF STRING[80];
lstrEditline : REFERENCE TO STRING[80]; (*Editierte Zeile*)
END_VAR
(*//Strukturen*)
VAR
enDirStep : typ_enStepDir;
States : typ_States;
Parameter : typ_Parameter;
VCCtrl : typ_VCCtrl; (*Seiteninterface spezifisch*)
DirReadData : fiDIR_READ_DATA;
FUBStates : typ_FUBstates;
END_VAR
(*//Funktionsbl<62>cke*)
VAR VAR
MpFUBs : typ_MpFUB; FUBs : typ_FUB;
END_VAR END_VAR

View File

@@ -1,10 +1,9 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.3.7.46 SP?> <?AutomationStudio FileVersion="4.9"?>
<Package xmlns="http://br-automation.co.at/AS/Package"> <Package xmlns="http://br-automation.co.at/AS/Package">
<Objects> <Objects>
<Object Type="File" Description="Globale Variablen - File">GlobalFile.var</Object> <Object Type="File" Description="Globale Variablen - File">GlobalFile.var</Object>
<Object Type="File" Description="Package Variablen - File" Private="true">PackageFile.var</Object> <Object Type="File" Description="Package Variablen - File" Private="true">PackageFile.var</Object>
<Object Type="Program" Language="IEC" Description="Simple Texteditor">FileEdit</Object>
<Object Type="Program" Language="IEC" Description="Filemanagement">FileMan</Object> <Object Type="Program" Language="IEC" Description="Filemanagement">FileMan</Object>
</Objects> </Objects>
</Package> </Package>

View File

@@ -17,11 +17,13 @@ END_VAR
VAR VAR
gbSPLCMachineOn : BOOL; gbSPLCMachineOn : BOOL;
gbSPLCJogMode : BOOL; (*Handbetrieb*) gbSPLCJogMode : BOOL; (*Handbetrieb*)
gbSPLCReefeedP4 : BOOL;
END_VAR END_VAR
(*BOOL 106 bis 110*) (*BOOL 106 bis 110*)
VAR VAR
gbSPLCResetEStop : BOOL; gbSPLCResetEStop : BOOL;
gbSPLCResetDoors : BOOL; gbSPLCResetDoors : BOOL;
gbSPLCRefeedError : BOOL;
END_VAR END_VAR
(*BOOL 111 bis 115*) (*BOOL 111 bis 115*)
VAR VAR
@@ -34,10 +36,12 @@ END_VAR
(*BOOL 001 bis 005*) (*BOOL 001 bis 005*)
VAR VAR
gbSPLCInEstopOk : BOOL; (*Safety PLC E-Stop ist Ok*) gbSPLCInEstopOk : BOOL; (*Safety PLC E-Stop ist Ok*)
gbSPLCInSafetyCNCOk : BOOL; (*Safety PLC Sicherheit f<>r CNC Achsen Ok*) gbSPLCInSafetyCNC_SS1Ok : BOOL; (*Safety PLC Sicherheit f<>r CNC Achsen SS1 Ok (auch <20>ber FreigabeTaster)*)
gbSPLCInSafetyShuttle1Ok : BOOL; (*Safety PLC Sicherheit f<>r Shuttle 1 Ok*) gbSPLCInSafetyShuttles_SS1Ok : BOOL; (*Safety PLC Sicherheit f<>r Shuttles SS1 Ok (auch <20>ber FreigabeTaster)*)
gbSPLCInSafetyShuttle2Ok : BOOL; (*Safety PLC Sicherheit f<>r Shuttle 2 Ok*) gbSPLCInSafetyCNC_SLSOk : BOOL; (*Safety PLC Sicherheit f<>r CNC Achsen SLS Ok*)
gbSPLCInSafetyShuttles_SLSOk : BOOL; (*Safety PLC Sicherheit f<>r Shuttle SLS Ok*)
gbSPLCInMaintDoorOk : {REDUND_UNREPLICABLE} BOOL := FALSE; (*Safety PLC Wartungst<73>r ist Geschlossen und Quittiert*) gbSPLCInMaintDoorOk : {REDUND_UNREPLICABLE} BOOL := FALSE; (*Safety PLC Wartungst<73>r ist Geschlossen und Quittiert*)
gbSPLCInSafetyLaserOk : BOOL; (*Safety PLC Sicherheit Laser Ok*)
END_VAR END_VAR
(*BOOL 006 bis 010*) (*BOOL 006 bis 010*)
(*BOOL 011 bis 018*) (*BOOL 011 bis 018*)
@@ -60,11 +64,11 @@ END_VAR
(*----------------------------------------------------------------------------------------------------------------*) (*----------------------------------------------------------------------------------------------------------------*)
VAR VAR
gbSInStopButtonLaser : BOOL; (*Sicherer Eingang 01/02 Equivalent - Not-Halt von Lasersteuerung*) gbSInStopButtonLaser : BOOL; (*Sicherer Eingang 01/02 Equivalent - Not-Halt von Lasersteuerung*)
END_VAR gbSInEStopMachine : BOOL; (*Sicherer Eingang 03/04 Equivalent - Not-Halt von Liniensteuerung*)
(*//Reserve*)
VAR
gbSInMaintDoorLeftOk : BOOL; (*Sicherer Eingang 05/06 Equivalent - Wartungst<73>r Fl<46>gel Links*) gbSInMaintDoorLeftOk : BOOL; (*Sicherer Eingang 05/06 Equivalent - Wartungst<73>r Fl<46>gel Links*)
gbSInMaintDoorRightOk : BOOL; (*Sicherer Eingang 07/08 Equivalent - Wartungst<73>r Fl<46>gel Rechts*) gbSInMaintDoorRightOk : BOOL; (*Sicherer Eingang 07/08 Equivalent - Wartungst<73>r Fl<46>gel Rechts*)
gbSInMachineMaintDoorsClosed : BOOL; (*Sicherer Eingang 09/10 Equivalent - Wartungst<73>ren Linie Geschlossen und Verriegelt*)
gbSInSafteyMachineOk : BOOL; (*Sicherer Eingang 11/12 Equivalent - Sicherheit Linie Ok*)
gbSInGate1Closed : BOOL; (*Sicherer Eingang 13/14 Equivalent - Shuttletor 1 geschlossen*) gbSInGate1Closed : BOOL; (*Sicherer Eingang 13/14 Equivalent - Shuttletor 1 geschlossen*)
gbSInGate2Closed : BOOL; (*Sicherer Eingang 19/20 Equivalent - Shuttletor 2 geschlossen*) gbSInGate2Closed : BOOL; (*Sicherer Eingang 19/20 Equivalent - Shuttletor 2 geschlossen*)
END_VAR END_VAR
@@ -72,26 +76,40 @@ END_VAR
(*IF1.ST10.IF1.ST5 - SO6300 (56K1)*) (*IF1.ST10.IF1.ST5 - SO6300 (56K1)*)
(*----------------------------------------------------------------------------------------------------------------*) (*----------------------------------------------------------------------------------------------------------------*)
VAR VAR
gbSOuOpenBreakZ : BOOL; (*Freigabe Z-Achse Zusatzbremse*) gbSOuOpenMainvalve : BOOL; (*Sicherer Ausgang 01 Hauptventil*)
gbSOuOpenBreakZ : BOOL; (*Sicherer Ausgang 02 Freigabe Z-Achse Zusatzbremse*)
gbSOuVaccumEngineOnShuttle1 : BOOL; (*Sicherer Ausgang 03 Seitenkanalverdichter Shuttle 1 Ein*)
gbSOuVaccumEngineOnShuttle2 : BOOL; (*Sicherer Ausgang 04 Seitenkanalverdichter Shuttle 2 Ein*)
gbSOuP4 : BOOL; (*Sicherer Ausgang 05 Potential P4 Sicherheit f. Tore / Zelle komplett*)
END_VAR END_VAR
(*#################################################################################################################*) (*#################################################################################################################*)
(*IF1.ST10.IF1.ST6 - SO6530 (56K2)*) (*IF1.ST10.IF1.ST6 - SO6530 (56K2)*)
(*----------------------------------------------------------------------------------------------------------------*) (*----------------------------------------------------------------------------------------------------------------*)
VAR VAR
gbSOuP3 : BOOL; (*Potential P3 Nach Nothalt*) gbSOuEStopToLineCtrl : {REDUND_UNREPLICABLE} BOOL := FALSE; (*Nothalt an Linie DO 1/2*)
gbSOuP4 : BOOL; (*Potential P4 Sicherheit f. Tore / Zelle komplett*) gbSOuMaintDoorToLineCtrl : {REDUND_UNREPLICABLE} BOOL := FALSE; (*Wartungstuer an Linie DO 3/4*)
gbSOuSafetyMaintDoorToLineCtrl : {REDUND_UNREPLICABLE} BOOL; (*Sicherheitsbereich T<>ren quittiert an Linie DO 5/6*)
END_VAR END_VAR
(*#################################################################################################################*) (*#################################################################################################################*)
(*IF1.ST10.IF1.ST7 - SO6530 (56K3)*) (*IF1.ST10.IF1.ST7 - SO6530 (56K3)*)
(*----------------------------------------------------------------------------------------------------------------*) (*----------------------------------------------------------------------------------------------------------------*)
VAR VAR
gbSOuEStopLaser : {REDUND_UNREPLICABLE} BOOL := FALSE; (*Nothalt an Laser DO 1/2*) gbSOuEStopLaser : {REDUND_UNREPLICABLE} BOOL := FALSE; (*Nothalt an Laser DO 1/2*)
gbSOuEnableLaser : BOOL; (*Freigabe Laser DO 5/6*) gbSOuGatesToLineCtrl : {REDUND_UNREPLICABLE} BOOL; (*Schuttore zu Liniensteuerung DO 3/4*)
gbSOuEnableLaser : {REDUND_UNREPLICABLE} BOOL; (*Freigabe Laser DO 5/6*)
END_VAR END_VAR
(*#################################################################################################################*) (*#################################################################################################################*)
(*IF1.ST10.IF1.ST8 - DI9371 (60K1)*) (*IF1.ST10.IF1.ST8 - DI9371 (60K1)*)
(*----------------------------------------------------------------------------------------------------------------*) (*----------------------------------------------------------------------------------------------------------------*)
(*//DI 4 R<>ckmeldung K<>hlung in AcpTempera.st*) (*//DI 4 R<>ckmeldung K<>hlung in AcpTempera.st*)
VAR
gbInDropoutFuseVaccumGenShuttle1 : BOOL; (*Sicherungsfall Motorschutz Seitenkanalverdichter Shuttle 1*)
gbInDropoutFuseVaccumGenShuttle2 : BOOL; (*Sicherungsfall Motorschutz Seitenkanalverdichter Shuttle 2*)
gbInRefeedVaccumGenShuttle1 : BOOL; (*R<>ckf<6B>hrkontakt Seitenkanalverdichter Shuttle 1*)
gbInRefeedVaccumGenShuttle2 : BOOL; (*R<>ckf<6B>hrkontakt Seitenkanalverdichter Shuttle 2*)
gbInVaccumSensorShuttle1 : BOOL; (*Vakuumsensor Shuttle 1*)
gbInVaccumSensorShuttle2 : BOOL; (*Vakuumsensor Shuttle 2*)
END_VAR
(*#################################################################################################################*) (*#################################################################################################################*)
(*IF1.ST10.IF1.ST9 - DI9371 (60K2)*) (*IF1.ST10.IF1.ST9 - DI9371 (60K2)*)
(*----------------------------------------------------------------------------------------------------------------*) (*----------------------------------------------------------------------------------------------------------------*)
@@ -130,6 +148,9 @@ END_VAR
(*#################################################################################################################*) (*#################################################################################################################*)
(*IF1.ST10.IF1.ST18 - PS2100 (65K0) //Geschaltende Ausg<73>nge f<>r Tore und Gas*) (*IF1.ST10.IF1.ST18 - PS2100 (65K0) //Geschaltende Ausg<73>nge f<>r Tore und Gas*)
(*----------------------------------------------------------------------------------------------------------------*) (*----------------------------------------------------------------------------------------------------------------*)
VAR
gbInErrorPowerSupplyP4 : BOOL; (*Fehler Stromversorgung P4*)
END_VAR
(*#################################################################################################################*) (*#################################################################################################################*)
(*IF1.ST10.IF1.ST19 - DO9322 (65K1)*) (*IF1.ST10.IF1.ST19 - DO9322 (65K1)*)
(*----------------------------------------------------------------------------------------------------------------*) (*----------------------------------------------------------------------------------------------------------------*)

View File

@@ -0,0 +1,111 @@
FUNCTION_BLOCK FUB_CylinderCheck (*Zylinder<EFBFBD>berwachung*)
VAR_INPUT
bInOutputCylinderFw : BOOL; (*Ausgang Zylinder Ausfahren*)
bInOutputCylinderBw : BOOL; (*Ausgang Zylinder Einfahren*)
bInSensorCylinderFw : BOOL; (*Sensor Zylinder Ausfahren*)
bInSensorCylinderBw : BOOL; (*Sensor Zylinder Einfahren*)
tInCylinderFw : TIME := T#2s; (*<EFBFBD>berwachungszeit Zylinder Ausfahren*)
tInCylinderBw : TIME := T#2s; (*<EFBFBD>berwachungszeit Zylinder Ausfahren*)
END_VAR
VAR_OUTPUT
bOuErrorCylinderFw : BOOL; (*Fehler Zylinder Ausfahren*)
bOuErrorCylinderBw : BOOL; (*Fehler Zylinder Einfahren*)
bOuErrorBothSensorsHigh : BOOL; (*Fehler beide Zynlinderschalter bet<EFBFBD>tigt*)
END_VAR
VAR
TON_CylinderFw : TON;
TON_CylinderBw : TON;
END_VAR
END_FUNCTION_BLOCK
FUNCTION_BLOCK FUB_CylinderCheckAlX (*Zylinder<EFBFBD>berwachung AlarmX*)
VAR_INPUT
MpLink : MpComIdentType; (*MpLink AlarmX*)
bInOutputCylinderFw : BOOL; (*Ausgang Zylinder Ausfahren*)
bInOutputCylinderBw : BOOL; (*Ausgang Zylinder Einfahren*)
bInSensorCylinderFw : BOOL; (*Sensor Zylinder Ausfahren*)
bInSensorCylinderBw : BOOL; (*Sensor Zylinder Einfahren*)
tInCylinderFw : TIME := T#2s; (*<EFBFBD>berwachungszeit Zylinder Ausfahren*)
tInCylinderBw : TIME := T#2s; (*<EFBFBD>berwachungszeit Zylinder Ausfahren*)
sInAlNameCylFw : STRING[80]; (*Alarmname Zylinder Ausfahren*)
sInAlNameCylBw : STRING[80]; (*Alarmname Zylinder Ausfahren*)
sInAlNameCylBothSensorsHigh : STRING[80]; (*Alarmname Zylinder Ausfahren*)
END_VAR
VAR
udAlIdCylinderFw : UDINT; (*Fehler Zylinder Ausfahren*)
udAlIdCylinderBw : UDINT; (*Fehler Zylinder Einfahren*)
udAlIdErrorBothSensorsHigh : UDINT; (*Fehler beide Zynlinderschalter bet<EFBFBD>tigt*)
TON_CylinderFw : TON;
TON_CylinderBw : TON;
END_VAR
END_FUNCTION_BLOCK
FUNCTION_BLOCK FUB_AlarmSimple (*Einfacher Alarm*)
VAR_INPUT
MpLink : MpComIdentType; (*MpLink AlarmX*)
bInAlarmSignal : BOOL; (*Alarmsignal*)
sInAlName : STRING[80]; (*Alarmname*)
END_VAR
VAR
udAlId : UDINT; (*Fehler Zylinder Ausfahren*)
END_VAR
END_FUNCTION_BLOCK
FUNCTION FC_InTolerance : BOOL (*Toleranzpr<EFBFBD>fung (auch f<EFBFBD>r Positionen)*)
VAR_INPUT
lrInValue : LREAL; (*Messwert*)
lrInSetpoint : LREAL; (*Sollwert*)
lrInTolLow : LREAL; (*Untere Toleranz*)
lrInTolUp : LREAL; (*Obere Toleranz*)
END_VAR
END_FUNCTION
FUNCTION FC_MPA_Pos : LREAL (*Position aus I-O Link Daten MPA-Sensor (Sick) berechnen*)
VAR_INPUT
usInPosPart1 : USINT; (*Vorkommastelle (2-9)*)
usInPosPart2 : USINT; (*Vorkommastelle (0-1:=6-7), Nachkommastelle (4-5) *)
END_VAR
VAR
lrPos : LREAL;
END_VAR
END_FUNCTION
FUNCTION FC_MPS_C_Pos : LREAL (*Position aus I-O Link Daten MPS-C-Sensor (Sick) berechnen*)
VAR_INPUT
usInPosPart1 : USINT; (*Vorkommastelle (2-9)*)
usInPosPart2 : USINT; (*Vorkommastelle (0-1:=6-7), Nachkommastelle (4-5) *)
END_VAR
END_FUNCTION
FUNCTION FC_MPS_T_Pos : LREAL (*Position aus I-O Link Daten MPS-T-Sensor (Sick) berechnen*)
VAR_INPUT
usInPosPart1 : USINT; (*Vorkommastelle (2-9)*)
usInPosPart2 : USINT; (*Vorkommastelle (0-1:=6-7), Nachkommastelle (4-5) *)
END_VAR
END_FUNCTION
FUNCTION FC_Scale_MPPAIn : LREAL (*MPPA IO Link Druck Eingangswert skalieren*)
VAR_INPUT
uiInPreasure : UINT;
END_VAR
END_FUNCTION
FUNCTION FC_Scale_MPPAOu : UINT (*MPPA IO Link Druck Sollwert skalieren*)
VAR_INPUT
lrInPreasure : LREAL;
END_VAR
END_FUNCTION
FUNCTION FC_Scale_Torque5 : LREAL (*Drehmomentsensor 5Nm (10V) skalieren*)
VAR_INPUT
iInTorque : INT;
END_VAR
END_FUNCTION
FUNCTION FC_BIP_Pos : LREAL (*Position aus I-O Link Daten BIP-Sensor (Balluf) berechnen*)
VAR_INPUT
usInPosPart1 : USINT; (*Vorkommastelle (2-9)*)
usInPosPart2 : USINT; (*Vorkommastelle (0-1:=6-7), Nachkommastelle (4-5) *)
END_VAR
END_FUNCTION

View File

@@ -0,0 +1,3 @@
VAR CONSTANT
END_VAR

View File

@@ -0,0 +1,5 @@
FUNCTION FC_BIP_Pos
//Part 2 Bit 3 - Out Of Sensor
FC_BIP_Pos := 0.01 * UINT_TO_LREAL (SHL (USINT_TO_UINT (usInPosPart1), 4) + SHR (USINT_TO_UINT (usInPosPart2), 4));
END_FUNCTION

View File

@@ -0,0 +1,5 @@
FUNCTION FC_MPA_Pos
lrPos := UINT_TO_LREAL (SHL (USINT_TO_UINT (usInPosPart1), 2) + USINT_TO_UINT (SHR (usInPosPart2, 6)));
FC_MPA_Pos := lrPos + 0.1 * USINT_TO_LREAL (SHR (usInPosPart2, 4) AND 2#0011);
END_FUNCTION

View File

@@ -0,0 +1,4 @@
FUNCTION FC_MPS_C_Pos
FC_MPS_C_Pos := 0.05 * UINT_TO_LREAL (SHL (USINT_TO_UINT (usInPosPart1), 4) + SHR (USINT_TO_UINT (usInPosPart2), 4));
END_FUNCTION

View File

@@ -0,0 +1,4 @@
FUNCTION FC_MPS_T_Pos
FC_MPS_T_Pos := UINT_TO_LREAL (SHL (USINT_TO_UINT (usInPosPart1), 8) + USINT_TO_UINT (usInPosPart2)) / 128.0;
END_FUNCTION

View File

@@ -0,0 +1,5 @@
FUNCTION FC_Scale_MPPAIn
//Einganswert in mBar
FC_Scale_MPPAIn := UINT_TO_LREAL (uiInPreasure) / 1000.0;
END_FUNCTION

View File

@@ -0,0 +1,5 @@
FUNCTION FC_Scale_MPPAOu
//Ausgangswert in mBar
FC_Scale_MPPAOu := LREAL_TO_UINT ( lrInPreasure * 1000.0);
END_FUNCTION

View File

@@ -0,0 +1,9 @@
FUNCTION FC_Scale_Torque5
//NCTE 5.0 Nm Sensor
//1V := - 5Nm
//5V := 0Nm
//9V := +5Nm
// >> 4V := 5Nm
FC_Scale_Torque5 := (INT_TO_LREAL (iInTorque) / 3276.7 - 5.0) / 4.0 * 5.0;
END_FUNCTION

View File

@@ -0,0 +1,12 @@
FUNCTION_BLOCK FUB_AlarmSimple
//Einfacher Alarm mit automatischer R<EFBFBD>cksetzung
IF bInAlarmSignal THEN
IF (udAlId = 0) THEN
udAlId := MpAlarmXSet (MpLink, sInAlName);
END_IF
ELSIF (udAlId > 0) THEN
MpAlarmXResetID (MpLink, udAlId);
udAlId := 0;
END_IF
END_FUNCTION_BLOCK

View File

@@ -11,5 +11,4 @@ FUNCTION_BLOCK FUB_CylinderCheck
bOuErrorCylinderBw := TON_CylinderBw.Q; bOuErrorCylinderBw := TON_CylinderBw.Q;
bOuErrorBothSensorsHigh := bInSensorCylinderFw AND bInSensorCylinderBw; bOuErrorBothSensorsHigh := bInSensorCylinderFw AND bInSensorCylinderBw;
END_FUNCTION_BLOCK END_FUNCTION_BLOCK

View File

@@ -0,0 +1,39 @@
FUNCTION_BLOCK FUB_CylinderCheckAlX
TON_CylinderFw.IN := bInOutputCylinderFw AND (bInSensorCylinderBw OR NOT bInSensorCylinderFw);
TON_CylinderFw.PT := tInCylinderFw;
TON_CylinderFw ();
TON_CylinderBw.IN := bInOutputCylinderBw AND (bInSensorCylinderFw OR NOT bInSensorCylinderBw);
TON_CylinderBw.PT := tInCylinderBw;
TON_CylinderBw ();
IF TON_CylinderFw.Q AND (brsstrlen (ADR (sInAlNameCylFw)) > 0) THEN
IF (udAlIdCylinderFw = 0) THEN
udAlIdCylinderFw := MpAlarmXSet (MpLink, sInAlNameCylFw);
END_IF
ELSIF (udAlIdCylinderFw > 0) THEN
MpAlarmXResetID (MpLink, udAlIdCylinderFw);
udAlIdCylinderFw := 0;
END_IF
IF TON_CylinderBw.Q AND (brsstrlen (ADR (sInAlNameCylBw)) > 0) THEN
IF (udAlIdCylinderBw = 0) THEN
udAlIdCylinderBw := MpAlarmXSet (MpLink, sInAlNameCylBw);
END_IF
ELSIF (udAlIdCylinderBw > 0) THEN
MpAlarmXResetID (MpLink, udAlIdCylinderBw);
udAlIdCylinderBw := 0;
END_IF
IF (bInSensorCylinderFw AND bInSensorCylinderBw) AND (brsstrlen (ADR (sInAlNameCylBothSensorsHigh)) > 0) THEN
IF (udAlIdErrorBothSensorsHigh = 0) THEN
udAlIdCylinderBw := MpAlarmXSet (MpLink, sInAlNameCylBothSensorsHigh);
END_IF
ELSIF (udAlIdErrorBothSensorsHigh > 0) THEN
MpAlarmXResetID (MpLink, udAlIdErrorBothSensorsHigh);
udAlIdCylinderBw := 0;
END_IF
END_FUNCTION_BLOCK

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio FileVersion="4.9"?>
<Library SubType="IEC" xmlns="http://br-automation.co.at/AS/Library">
<Files>
<File Description="Exported data types">Types.typ</File>
<File Description="Exported constants">Constants.var</File>
<File Description="Exported functions and function blocks">Common.fun</File>
<File Description="Zylinderüberwachung">FUB_CylinderCheck.st</File>
<File Description="Zylinderüberwachung Alarm X">FUB_CylinderCheckAlX.st</File>
<File Description="Einfacher Alarm Alarm X">FUB_AlarmSimple.st</File>
<File Description="Toleranzprüfung">FC_InTol.st</File>
<File Description="Position aus I-O Link Daten MPA-Sensor (Sick) berechnen">FC_MPA_Pos.st</File>
<File Description="Position aus I-O Link Daten MPS-C-Sensor (Sick) berechnen">FC_MPS_C_Pos.st</File>
<File Description="Position aus I-O Link Daten MPS-T-Sensor (Sick) berechnen">FC_MPS_T_Pos.st</File>
<File Description="MPPA IOlink Druck Eingangswert skalieren">FC_Scale_MPPAIn.st</File>
<File Description="MPPA IOLink Druck Ausgangswert skalieren">FC_Scale_MPPAOu.st</File>
<File Description="Drehmomentsensor 5Nm (10V) skalieren">FC_Scale_Torque5.st</File>
<File Description="Position aus I-O Link Daten BIP-Sensor (Balluf) berechnen">FC_BIP_Pos.st</File>
</Files>
</Library>

View File

@@ -0,0 +1,3 @@
TYPE
END_TYPE

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio FileVersion="4.9"?>
<Package xmlns="http://br-automation.co.at/AS/Package">
<Objects>
<Object Type="Library" Language="IEC" Description="Allgemeine Funktionen">Common</Object>
</Objects>
</Package>

View File

@@ -15,6 +15,15 @@ END_VAR
(*//-----------------------------------------------------------------------------------------------------*) (*//-----------------------------------------------------------------------------------------------------*)
(*//Funktionsbl<62>cke*) (*//Funktionsbl<62>cke*)
(*//-----------------------------------------------------------------------------------------------------*) (*//-----------------------------------------------------------------------------------------------------*)
(*//Remanente Variablen*)
(*//-----------------------------------------------------------------------------------------------------*)
VAR CONSTANT
MAX_RECIPE : UINT := 40;
END_VAR
VAR RETAIN
gRecipies : ARRAY[1..MAX_RECIPE] OF gtyp_Recipe; (*Rezepte*)
END_VAR
(*//-----------------------------------------------------------------------------------------------------*)
(*//Permamente Variablen*) (*//Permamente Variablen*)
(*//-----------------------------------------------------------------------------------------------------*) (*//-----------------------------------------------------------------------------------------------------*)
VAR RETAIN VAR RETAIN
@@ -28,9 +37,3 @@ VAR RETAIN
gAxRestorePosAxisShuttle2 : {REDUND_UNREPLICABLE} McAcpAxRestorePosType; (*!!Permanent*) gAxRestorePosAxisShuttle2 : {REDUND_UNREPLICABLE} McAcpAxRestorePosType; (*!!Permanent*)
gCalibrationDone : gtyp_CalibrationDone; (*!!Permanent Achskalibrierung erledigt*) gCalibrationDone : gtyp_CalibrationDone; (*!!Permanent Achskalibrierung erledigt*)
END_VAR END_VAR
VAR CONSTANT
MAX_RECIPE : UINT := 20;
END_VAR
VAR RETAIN
gRecipies : ARRAY[1..MAX_RECIPE] OF gtyp_Recipe; (*Rezepte*)
END_VAR

View File

@@ -14,6 +14,30 @@ TYPE
bReqDoorOpen : BOOL; (*Anforderung T<>r <20>ffnen*) bReqDoorOpen : BOOL; (*Anforderung T<>r <20>ffnen*)
bRelDoorOpen : BOOL; (*Freigabe T<>r <20>ffnen*) bRelDoorOpen : BOOL; (*Freigabe T<>r <20>ffnen*)
END_STRUCT; END_STRUCT;
gtyp_ToolInterface : STRUCT (*Werkzeuginterface*)
Shuttle1 : gtyp_ToolInterface_Struct;
Shuttle2 : gtyp_ToolInterface_Struct;
END_STRUCT;
gtyp_ToolInterface_Struct : STRUCT (*Werkzeuginterface*)
Tool_State : gen_ToolState;
usPartID : USINT; (*Bauteil ID von Linie*)
FromTool : gtyp_ToolInterface_FromTool; (*von Werkzeug*)
ToTool : gtyp_ToolInterface_ToTool; (*an Werkzeug*)
END_STRUCT;
gtyp_ToolInterface_FromTool : STRUCT (*Werkzeuginterface vom Werkzeug*)
bToolLocked : BOOL; (*Werkzeug Verriegelt*)
bVaccumIsOn : BOOL; (*Vakkum ist ein*)
usToolID : USINT; (*Werkzeug ID Ausgelesen*)
END_STRUCT;
gtyp_ToolInterface_ToTool : STRUCT (*Werkzeuginterface*)
bVaccumOn : BOOL; (*Vakkum einschalten*)
END_STRUCT;
gen_ToolState :
(
enTOOL_EMPTY, (*Werkzeug leer*)
enTOOL_NEW_PART, (*Werkzeug hat neues Teil geladen*)
enTOOL_PART_FINISHED (*Werkzeug hat fertiges Teil geladen*)
);
gtyp_CalibrationDone : STRUCT (*Status Achse kalibriert*) gtyp_CalibrationDone : STRUCT (*Status Achse kalibriert*)
bAxisX : BOOL; bAxisX : BOOL;
bAxisX1 : BOOL; bAxisX1 : BOOL;

View File

@@ -2,7 +2,6 @@
TYPE TYPE
gtyp_Results : STRUCT (*Ergebnisse*) gtyp_Results : STRUCT (*Ergebnisse*)
Cmd : gtyp_ResultCmd; Cmd : gtyp_ResultCmd;
strSerialNr : STRING[50]; (*Seriennummer*)
diCycleTime : DINT; (*Zykluszeit [s]*) diCycleTime : DINT; (*Zykluszeit [s]*)
diEStopTime : DINT; (*Unterbrechungen [s]*) diEStopTime : DINT; (*Unterbrechungen [s]*)
END_STRUCT; END_STRUCT;

View File

@@ -1,61 +1,12 @@
TYPE TYPE
gtyp_Recipe : STRUCT (*Prozessgrenzwerte*) gtyp_Recipe : STRUCT (*Rezept*)
strCaption : STRING[15] := 'Default'; (*Bezeichnung Bauteil*) strCaption : STRING[40] := 'Default'; (*Bezeichnung Bauteil*)
strCNCPrg : STRING[80] := ''; (*CNCProgramm - Aufruf*) strCNCPrg : STRING[40] := ''; (*CNCProgramm - Aufruf*)
usPartID : USINT := 0; (*TeileNummer zur Identifikaton von Linie*)
usToolID : USINT := 0; (*Werkzeug ID*) usToolID : USINT := 0; (*Werkzeug ID*)
lrFeedrate : LREAL; (*Vorschub [mm/min]*)
uiLaserPowerMin : UINT; (*Minimale Laserleistung*) uiLaserPowerMin : UINT; (*Minimale Laserleistung*)
uiLaserPower : UINT; (*Minimale Laserleistung*) uiLaserPower : UINT; (*Minimale Laserleistung*)
END_STRUCT; END_STRUCT;
gTyp_Tool : STRUCT (*Werkzeugdaten*)
Status : gTyp_ToolState; (*Stati*)
SysPar : gTyp_ToolSysParameter; (*Systemparameter*)
ProcPar : gTyp_ToolProcParameter; (*Prozessparameter*)
END_STRUCT;
gTyp_ToolState : STRUCT (*Werkzeugstati*)
strPartNrLowerTool : STRING[80]; (*ArtikelNr Unterwerkzeug*)
strPartNrUpperTool : STRING[80]; (*ArtikelNr OberWerkzeug*)
strPartExtraPart1 : STRING[80]; (*ArtikelNr Zusatzteil 1*)
strPartExtraPart2 : STRING[80]; (*ArtikelNr Zusatzteil 2*)
strCartBatch : STRING[20]; (*Kleber Charge*)
strCartExpDate : STRING[20]; (*Kleber MHD*)
strCartNr : STRING[20]; (*Kleber GebindeNr*)
bCartrigeTouched : BOOL; (*Status: L<>nge der Mischd<68>se angetastet*)
bCartrigeUnderPressure : BOOL; (*Status: Kolben auf Kartiusche unter Druck*)
bSampleShotDone : BOOL; (*Status: Probeschuss abgegeben*)
usCurrentGlueLine : USINT; (*Status: Aktuelle Klebelinie*)
diTimeLastGlueing : DINT; (*Status: Zeitstempel letzte Kleberabgabe [<5B>s]*)
lrGlueStartPos : LREAL; (*Status: Position Kleber gestartet*)
lrGlueEndPos : LREAL; (*Status: Position Kleber Ende*)
lrNozzleOffset : LREAL; (*Status: Offset nach Einmessen der Mischd<68>se*)
udintSerialNr : UDINT; (*Status: Seriennummer Bauteil*)
END_STRUCT;
gTyp_ToolProcParameter : STRUCT (*Prozessparameter*)
strCartSystem : STRING[20]; (*Parameter: Bez Klebesystem*)
strPartID : STRING[10]; (*Parameter: Bauteil Kurzbezeichnung*)
strCustomerID : STRING[20]; (*Parameter: Kunden Artikelnummer*)
bManualOperation : BOOL; (*Parameter: Zwischenstop f<>r Handklebeauftrag*)
bManualOperationPost : BOOL; (*Parameter: Zwischenstop f<>r Bauteile einelgen nach Klebeauftrag*)
bExtraPart1 : BOOL; (*Parameter: Zusatzteil 1*)
bExtraPart2 : BOOL; (*Parameter: Zusatzteil 2*)
diMaxOpenTime : DINT; (*Parameter: Max Offene Zeit bis D<>se verklebt [<5B>s]*)
diPressTime : DINT; (*Parameter: Presszeit [<5B>s]*)
rTouchForce : REAL; (*Parameter: Kraft zum antasten einer neuen Kartusche*)
rTouchForceProcess : REAL; (*Parameter: Kraft zum antasten der Kartusche im Prozees*)
rGlueAmmount : ARRAY[1..10]OF REAL; (*Parameter: Klebermenge [g/mm] pro Spur*)
lrGlueAmmountSampleshot : REAL; (*Parameter: Klebermenge [g] Probeschuss*)
lrEstGlueAmmountTotal : REAL; (*Parameter: Gesamte Klebermenge die ca. Ben<65>tigt wird*)
rTemperatureLowerTool : REAL; (*Parameter: Temperatur Unterwerkzeug*)
rTemperatureUpperTool : REAL; (*Parameter: Temperatur Oberwerkzeug*)
lrFeedrate : LREAL; (*Parameter: Vorschubrate [mm/min]*)
lrGlueGap : LREAL; (*Parameter: Klebespalt*)
END_STRUCT;
gTyp_ToolSysParameter : STRUCT (*Systemparameter*)
rSpecGlueAmmount : REAL; (*Sysparameter Klebermenge / Kartuschenhub [g/mm]*)
lrGlueEmptyPos : LREAL; (*Sysparameter Kleber zu Ende Position [mm]*)
lrToolOffsetX : LREAL; (*Sysparameter Werkzeugoffset X (nur bedingt Einstellbar)*)
lrToolOffsetY : LREAL; (*Sysparameter Werkzeugoffset Y (nur bedingt Einstellbar*)
strToolCaption : STRING[25]; (*Werkzeugname*)
strCNCPrg : STRING[20]; (*CNC Programm*)
END_STRUCT;
END_TYPE END_TYPE

View File

@@ -1,4 +1,6 @@
(*Remanent*) VAR RETAIN
gToolInterface : gtyp_ToolInterface; (*Werkzeuginterface*)
END_VAR
(*Permanent*) (*Permanent*)
VAR RETAIN VAR RETAIN
gCounter : gtyp_PartCounter; (*Z<>hler*) gCounter : gtyp_PartCounter; (*Z<>hler*)

View File

@@ -1,5 +1,5 @@
//Dynamische Variablen zuweisen
ACTION DoDynVars: ACTION DoDynVars:
//Dynamische Variablen zuweisen
lMachine ACCESS ADR (gMachine1); lMachine ACCESS ADR (gMachine1);
lRecipe ACCESS ADR (gRecipies[uiRecipe + 1]); lRecipe ACCESS ADR (gRecipies[uiRecipe + 1]);
lCmdInterface ACCESS ADR (gCmd1); lCmdInterface ACCESS ADR (gCmd1);
@@ -163,37 +163,38 @@ ACTION DoDynVars:
END_ACTION END_ACTION
//Stati Sicherheiszonen
ACTION DoSafetyStates: ACTION DoSafetyStates:
//Sicherheitszonen - Stati //Sicherheit SS1 CNC / Achsen Ok
States.bSafetyCNCAxisOk := gbSPLCInSafetyCNCOk OR gMachine1.bSimulation; States.bSafetyCNCAxisSS1Ok := gbSPLCInSafetyCNC_SS1Ok OR gMachine1.bSimulation;
FUBs.TOF_SafetyCNCOk.IN := States.bSafetyCNCAxisOk; FUBs.TOF_SafetyCNCSS1Ok.IN := States.bSafetyCNCAxisSS1Ok;
FUBs.TOF_SafetyCNCOk.PT := t#180ms; FUBs.TOF_SafetyCNCSS1Ok.PT := t#180ms;
FUBs.TOF_SafetyCNCOk (); FUBs.TOF_SafetyCNCSS1Ok ();
States.bSafetyCNCAxisOkDelayed := FUBs.TOF_SafetyCNCOk.Q; States.bSafetyCNCAxisSS1OkDelayed := FUBs.TOF_SafetyCNCSS1Ok.Q;
//SLS
States.bSafetyCNCAxisSLSOk := gbSPLCInSafetyCNC_SLSOk;
States.bSafetyShuttle1Ok := gbSPLCInSafetyShuttle1Ok OR gMachine1.bSimulation;
FUBs.TOF_SafetyShuttle1Ok.IN := States.bSafetyShuttle1Ok; //Sicherheit SS1 f. Schuttle Ok
FUBs.TOF_SafetyShuttle1Ok.PT := t#100ms; States.bSafetyShuttlesSS1Ok := gbSPLCInSafetyShuttles_SS1Ok OR gMachine1.bSimulation;
FUBs.TOF_SafetyShuttle1Ok (); FUBs.TOF_SafetyShuttleSS1Ok.IN := States.bSafetyShuttlesSS1Ok;
States.bSafetyShuttle1OkDelayed := FUBs.TOF_SafetyShuttle1Ok.Q; FUBs.TOF_SafetyShuttleSS1Ok.PT := t#100ms;
FUBs.TOF_SafetyShuttleSS1Ok ();
States.bSafetyShuttle2Ok := gbSPLCInSafetyShuttle2Ok OR gMachine1.bSimulation; States.bSafetyShuttleSS1OkDelayed := FUBs.TOF_SafetyShuttleSS1Ok.Q;
FUBs.TOF_SafetyShuttle2Ok.IN := States.bSafetyShuttle2Ok; //SLS
FUBs.TOF_SafetyShuttle2Ok.PT := t#100ms; States.bSafetyShuttlesSLSOk := gbSPLCInSafetyShuttles_SLSOk;
FUBs.TOF_SafetyShuttle2Ok ();
States.bSafetyShuttle2OkDelayed := FUBs.TOF_SafetyShuttle2Ok.Q;
//Wartungst<EFBFBD>ren Ok (Verz<EFBFBD>gern wg. Achsupdates) //Wartungst<EFBFBD>ren Ok (Verz<EFBFBD>gern wg. Achsupdates)
FUBs.TON_SimulationOn.IN := gMachine1.bMachineON AND gMachine1.bSimulation; FUBs.TON_SimulationOn.IN := gMachine1.bMachineON AND gMachine1.bSimulation;
FUBs.TON_SimulationOn.PT := t#1s; FUBs.TON_SimulationOn.PT := t#1s;
FUBs.TON_SimulationOn (); FUBs.TON_SimulationOn ();
//FixMe Tore
States.bSafetyLaserOk := gbSPLCInMaintDoorOk OR FUBs.TON_SimulationOn.Q; States.bSafetyLaserOk := gbSPLCInSafetyLaserOk OR FUBs.TON_SimulationOn.Q;
END_ACTION END_ACTION
//Ist Positinen Stati bilden
ACTION DoPosStates: ACTION DoPosStates:
//Ist Positionen abfragen
//Werte in ACS Achs Korrdinatensystem (Einzelachswerte weichen ab wg. Verschiebung) //Werte in ACS Achs Korrdinatensystem (Einzelachswerte weichen ab wg. Verschiebung)
States.PosState.bHomeX := MpFUB.AxBasic_X.IsHomed AND FC_InTolerance (MpFUB.MpCNC5Axis.X, pParamPositions.HomePos.lrX, -0.1, 0.1); States.PosState.bHomeX := MpFUB.AxBasic_X.IsHomed AND FC_InTolerance (MpFUB.MpCNC5Axis.X, pParamPositions.HomePos.lrX, -0.1, 0.1);
States.PosState.bHomeY := MpFUB.AxBasic_Y.IsHomed AND FC_InTolerance (MpFUB.MpCNC5Axis.Y, pParamPositions.HomePos.lrY, -0.1, 0.1); States.PosState.bHomeY := MpFUB.AxBasic_Y.IsHomed AND FC_InTolerance (MpFUB.MpCNC5Axis.Y, pParamPositions.HomePos.lrY, -0.1, 0.1);
@@ -204,9 +205,11 @@ ACTION DoPosStates:
//Laser oberhalb von Shuttle //Laser oberhalb von Shuttle
States.PosState.bLaserAboveShuttle := MpFUB.AxBasic_Z.IsHomed AND (MpFUB.MpCNC5Axis.Z > pParamPositions.lrLaserAboveShuttle); States.PosState.bLaserAboveShuttle := MpFUB.AxBasic_Z.IsHomed AND (MpFUB.MpCNC5Axis.Z > pParamPositions.lrLaserAboveShuttle);
States.PosState.bHomeShuttle := MpFUB.AxBasic_Shuttle.IsHomed AND FC_InTolerance (MpFUB.AxBasic_Shuttle.Position, pParamPositions.lrHomePosShuttle, -0.75, 0.75); States.PosState.bHomeShuttle1 := MpFUB.AxBasic_Shuttle.IsHomed AND FC_InTolerance (MpFUB.AxBasic_Shuttle.Position, pParamPositions.lrHomePosShuttle1, -0.25, 0.25);
States.PosState.bWorkposShuttle := MpFUB.AxBasic_Shuttle.IsHomed AND FC_InTolerance (MpFUB.AxBasic_Shuttle.Position, pParamPositions.lrWorkPosShuttle, -0.75, 0.75); States.PosState.bWorkposShuttle1 := MpFUB.AxBasic_Shuttle.IsHomed AND FC_InTolerance (MpFUB.AxBasic_Shuttle.Position, pParamPositions.lrWorkPosShuttle1, -0.25, 0.25);
States.PosState.bHomeShuttle2 := MpFUB.AxBasic_Shuttle2.IsHomed AND FC_InTolerance (MpFUB.AxBasic_Shuttle2.Position, pParamPositions.lrHomePosShuttle2, -0.25, 0.25);
States.PosState.bWorkposShuttle2 := MpFUB.AxBasic_Shuttle2.IsHomed AND FC_InTolerance (MpFUB.AxBasic_Shuttle2.Position, pParamPositions.lrWorkPosShuttle2, -0.25, 0.25);
//Pos Abweichungen Gantry //Pos Abweichungen Gantry
States.PosState.lrDiffX_Virtual := ABS (States.RealAxisPos.lrVX - States.RealAxisPos.lrX); States.PosState.lrDiffX_Virtual := ABS (States.RealAxisPos.lrVX - States.RealAxisPos.lrX);
States.PosState.lrDiffX_X1 := ABS (States.RealAxisPos.lrX - States.RealAxisPos.lrX1); States.PosState.lrDiffX_X1 := ABS (States.RealAxisPos.lrX - States.RealAxisPos.lrX1);
@@ -230,15 +233,18 @@ ACTION DoPosStates:
END_IF END_IF
END_IF END_IF
(*
//Ist Positionen Zylinder //Ist Positionen Zylinder
States.CylinderPosState.bFrontGateOpen := NOT Valves.bCloseGate AND gbInFrontGateOpen; States.CylinderPosState.bGateShuttle1Open := Valves.bOpenGateShuttle1 AND bInGateIsOpenShuttle1;
States.CylinderPosState.bFrontGateClosed := Valves.bCloseGate AND gbSInFrontGateOk; States.CylinderPosState.bGateShuttle1Closed := Valves.bCloseGateShuttle1 AND NOT Valves.bOpenGateShuttle1 AND gbSInGate1Closed;
*) States.CylinderPosState.bGateShuttle2Open := Valves.bOpenGateShuttle2 AND bInGateIsOpenShuttle2;
States.CylinderPosState.bGateShuttle2Closed := Valves.bCloseGateShuttle2 AND NOT Valves.bOpenGateShuttle2 AND gbSInGate2Closed;
END_ACTION END_ACTION
//Bewegungsbedingungen
ACTION DoMoveConditions: ACTION DoMoveConditions:
//==========================================================
MoveConditions.bAxisXMove := TRUE; //((MpFUB.AxBasic_Shuttle.Position + 10) < MpFUB.AxBasic_X.Position); // AND (MpFUB.AxBasic_Z.Position < 160.0); MoveConditions.bAxisXMove := TRUE; //((MpFUB.AxBasic_Shuttle.Position + 10) < MpFUB.AxBasic_X.Position); // AND (MpFUB.AxBasic_Z.Position < 160.0);
MoveConditions.bAxisYMove := TRUE; //MpFUB.AxBasic_Z.Position < 160.0; MoveConditions.bAxisYMove := TRUE; //MpFUB.AxBasic_Z.Position < 160.0;
MoveConditions.bAxisZMoveNeg := TRUE; MoveConditions.bAxisZMoveNeg := TRUE;
@@ -246,17 +252,19 @@ ACTION DoMoveConditions:
MoveConditions.bAxisCMove := TRUE; MoveConditions.bAxisCMove := TRUE;
MoveConditions.bAxisAMove := TRUE; MoveConditions.bAxisAMove := TRUE;
MoveConditions.bAxisBMove := TRUE; MoveConditions.bAxisBMove := TRUE;
MoveConditions.bAxisShuttleMoveNeg := TRUE;// MpFUB.AxBasic_Z.Position > 160.0; MoveConditions.bAxisShuttleMoveNeg := States.CylinderPosState.bGateShuttle1Open AND States.PosState.bLaserAboveShuttle AND gLineInterface.In.bRobOutOfShuttle1;
MoveConditions.bAxisShuttleMovePos := TRUE;// ((MpFUB.AxBasic_Shuttle.Position + 5) < MpFUB.AxBasic_X.Position) AND MoveConditions.bAxisShuttleMovePos := States.CylinderPosState.bGateShuttle1Open AND States.PosState.bLaserAboveShuttle AND gLineInterface.In.bRobOutOfShuttle1;
// (MpFUB.AxBasic_Z.Position <> 160.0)
MoveConditions.bAxisShuttle2MoveNeg := TRUE; MoveConditions.bAxisShuttle2MoveNeg := States.CylinderPosState.bGateShuttle2Open AND States.PosState.bLaserAboveShuttle AND gLineInterface.In.bRobOutOfShuttle2;
MoveConditions.bAxisShuttle2MovePos := TRUE; MoveConditions.bAxisShuttle2MovePos := States.CylinderPosState.bGateShuttle2Open AND States.PosState.bLaserAboveShuttle AND gLineInterface.In.bRobOutOfShuttle2;
MoveConditions.bCloseGateShuttle1 := States.PosState.bHomeShuttle1 OR States.PosState.bWorkposShuttle1;
MoveConditions.bCloseGateShuttle2 := States.PosState.bHomeShuttle2 OR States.PosState.bWorkposShuttle1;
END_ACTION END_ACTION
//Zeiten berechnen
ACTION DoTimes: ACTION DoTimes:
//Zeiten
Times.diSteptime := gdiSystemTime - TimesLatch.diSteptime; Times.diSteptime := gdiSystemTime - TimesLatch.diSteptime;
Times.diCycletime := gdiSystemTime - TimesLatch.diCycletime; Times.diCycletime := gdiSystemTime - TimesLatch.diCycletime;
IF EDGEPOS (MpFUB.MpCNC5Axis.MoveProgram) THEN IF EDGEPOS (MpFUB.MpCNC5Axis.MoveProgram) THEN
@@ -269,8 +277,37 @@ ACTION DoTimes:
Times.diStoptime := gdiSystemTime - TimesLatch.diStoptime; Times.diStoptime := gdiSystemTime - TimesLatch.diStoptime;
END_ACTION END_ACTION
//CNC Variablen schreiben
ACTION DoCNCVars:
CNCVars.lrFeedrate := 30000;
CNCVars.bShuttle1InPos := States.PosState.bWorkposShuttle1;
CNCVars.bShuttle2InPos := States.PosState.bWorkposShuttle2;
CNCVars.bLaserMidPos := gRTLaserInterface.In.bHeadIsMidPos;
//Werkzeugnummer uebergeben
IF States.PosState.bWorkposShuttle1 THEN
CNCVars.usCurrentToolID := gToolInterface.Shuttle1.FromTool.usToolID;
ELSIF States.PosState.bWorkposShuttle2 THEN
CNCVars.usCurrentToolID := gToolInterface.Shuttle2.FromTool.usToolID;
ELSE
CNCVars.usCurrentToolID := 0;
END_IF
END_ACTION
ACTION DoLineInterface:
//an Liniensteuerung
gLineInterface.Out.bCycleActive := States.bCycleActive;
gLineInterface.Out.bShuttle1InPos := States.PosState.bHomeShuttle1;
gLineInterface.Out.bShuttle2InPos := States.PosState.bHomeShuttle2;
gLineInterface.Out.bFinishedPartReadyShuttle1 := (gToolInterface.Shuttle1.Tool_State = enTOOL_PART_FINISHED);
gLineInterface.Out.bFinishedPartReadyShuttle2 := (gToolInterface.Shuttle2.Tool_State = enTOOL_PART_FINISHED);
gLineInterface.Out.bReadyToPlacePartShuttle1 := (gToolInterface.Shuttle1.Tool_State = enTOOL_EMPTY);
gLineInterface.Out.bReadyToPlacePartShuttle2 := (gToolInterface.Shuttle2.Tool_State = enTOOL_EMPTY);
END_ACTION
//FUB Aufruufe am Zyklusanfang
ACTION DoFUBsStartCycle: ACTION DoFUBsStartCycle:
//Fubs am Zyklus anfang
//Istpositionen Achsen Gantry //Istpositionen Achsen Gantry
MpFUB.ReadRealPos_XVirtual (); MpFUB.ReadRealPos_XVirtual ();
States.RealAxisPos.lrVX := MpFUB.ReadRealPos_XVirtual.CyclicPosition; States.RealAxisPos.lrVX := MpFUB.ReadRealPos_XVirtual.CyclicPosition;
@@ -303,7 +340,7 @@ ACTION DoFUBs:
//Funktionsbausteine aufrufen //Funktionsbausteine aufrufen
//und FUB Eing<EFBFBD>nge zur<EFBFBD>cksetzen //und FUB Eing<EFBFBD>nge zur<EFBFBD>cksetzen
//Achsfehler quittieren //Achsfehler quittieren
IF EDGEPOS (gCmd1.bResetErrors) OR (EDGENEG (States.bSafetyCNCAxisOkDelayed) AND FALSE) THEN IF EDGEPOS (gCmd1.bResetErrors) OR (EDGENEG (States.bSafetyCNCAxisSS1OkDelayed) AND FALSE) THEN
MpFUB.AxBasic_XVirtual.ErrorReset := MpFUB.AxBasic_XVirtual.Error; MpFUB.AxBasic_XVirtual.ErrorReset := MpFUB.AxBasic_XVirtual.Error;
MpFUB.AxBasic_X.ErrorReset := MpFUB.AxBasic_X.Error; MpFUB.AxBasic_X.ErrorReset := MpFUB.AxBasic_X.Error;
MpFUB.AxBasic_X1.ErrorReset := MpFUB.AxBasic_X1.Error; MpFUB.AxBasic_X1.ErrorReset := MpFUB.AxBasic_X1.Error;
@@ -448,7 +485,7 @@ ACTION DoFUBs:
//Beim Umschalten verz<EFBFBD>gern //Beim Umschalten verz<EFBFBD>gern
FUBs.TON_PowerSingleAxes.IN := States.bSingleAxMode AND States.bSafetyCNCAxisOk; //Fixme in Achsen Packen FUBs.TON_PowerSingleAxes.IN := States.bSingleAxMode AND States.bSafetyCNCAxisSS1Ok; //Fixme in Achsen Packen
FUBs.TON_PowerSingleAxes.PT := t#400ms; FUBs.TON_PowerSingleAxes.PT := t#400ms;
FUBs.TON_PowerSingleAxes (); FUBs.TON_PowerSingleAxes ();
FUBs.TON_PowerCNC.IN := NOT States.bSingleAxMode; FUBs.TON_PowerCNC.IN := NOT States.bSingleAxMode;
@@ -458,7 +495,7 @@ ACTION DoFUBs:
MpFUB.MpCNC5Axis.Power := lMachine.bMachineON AND FUBs.TON_PowerCNC.Q AND MpFUB.MpCNC5Axis.Power := lMachine.bMachineON AND FUBs.TON_PowerCNC.Q AND
NOT States.bAxPowerOffDoorReqManual AND NOT States.bAxPowerOffAuto AND NOT States.bAxPowerOffDoorReqManual AND NOT States.bAxPowerOffAuto AND
// NOT MpFUB.AxBasic_X.Power AND NOT MpFUB.AxBasic_Y.Power AND NOT MpFUB.AxBasic_Z.Power AND // NOT MpFUB.AxBasic_X.Power AND NOT MpFUB.AxBasic_Y.Power AND NOT MpFUB.AxBasic_Z.Power AND
MpFUB.MpCNC5Axis.Info.ReadyToPowerOn AND States.bSafetyCNCAxisOk AND MpFUB.MpCNC5Axis.Info.ReadyToPowerOn AND States.bSafetyCNCAxisSS1Ok AND
MpFUB.MpCNC5Axis.Active; // AND (MpFUB.MpCNC3Axis.Info.PLCopenState <> mcGROUP_ERRORSTOP); MpFUB.MpCNC5Axis.Active; // AND (MpFUB.MpCNC3Axis.Info.PLCopenState <> mcGROUP_ERRORSTOP);
//FixMe Stop in Auto //FixMe Stop in Auto
//Einzelne Achsen Einschalten //Einzelne Achsen Einschalten
@@ -491,17 +528,17 @@ ACTION DoFUBs:
NOT States.bAxPowerOffDoorReqManual AND NOT States.bAxPowerOffDoorReqManual AND
MpFUB.AxBasic_C.Info.ReadyToPowerOn AND MpFUB.AxBasic_C.Info.ReadyToPowerOn AND
MpFUB.AxBasic_C.Active AND (MpFUB.AxBasic_C.Info.PLCopenState <> mcAXIS_ERRORSTOP); MpFUB.AxBasic_C.Active AND (MpFUB.AxBasic_C.Info.PLCopenState <> mcAXIS_ERRORSTOP);
MpFUB.AxBasic_Shuttle.Power := lMachine.bMachineON AND States.bSafetyShuttle1Ok AND NOT States.bSingleAxTuningMode AND MpFUB.AxBasic_Shuttle.Power := lMachine.bMachineON AND States.bSafetyShuttlesSS1Ok AND NOT States.bSingleAxTuningMode AND
NOT States.bAxPowerOffDoorReqManual AND NOT States.bAxPowerOffDoorReqManual AND
MpFUB.AxBasic_Shuttle.Info.ReadyToPowerOn AND MpFUB.AxBasic_Shuttle.Info.ReadyToPowerOn AND
MpFUB.AxBasic_Shuttle.Active AND (MpFUB.AxBasic_Shuttle.Info.PLCopenState <> mcAXIS_ERRORSTOP); MpFUB.AxBasic_Shuttle.Active AND (MpFUB.AxBasic_Shuttle.Info.PLCopenState <> mcAXIS_ERRORSTOP);
MpFUB.AxBasic_Shuttle2.Power := lMachine.bMachineON AND States.bSafetyShuttle2Ok AND NOT States.bSingleAxTuningMode AND MpFUB.AxBasic_Shuttle2.Power := lMachine.bMachineON AND States.bSafetyShuttlesSS1Ok AND NOT States.bSingleAxTuningMode AND
NOT States.bAxPowerOffDoorReqManual AND NOT States.bAxPowerOffDoorReqManual AND
MpFUB.AxBasic_Shuttle2.Info.ReadyToPowerOn AND MpFUB.AxBasic_Shuttle2.Info.ReadyToPowerOn AND
MpFUB.AxBasic_Shuttle2.Active AND (MpFUB.AxBasic_Shuttle2.Info.PLCopenState <> mcAXIS_ERRORSTOP); MpFUB.AxBasic_Shuttle2.Active AND (MpFUB.AxBasic_Shuttle2.Info.PLCopenState <> mcAXIS_ERRORSTOP);
//Antriebe Stoppen //Antriebe Stoppen
IF EDGENEG (States.bSafetyCNCAxisOk) THEN IF EDGENEG (States.bSafetyCNCAxisSS1Ok) THEN
DoStopAxisParameter; DoStopAxisParameter;
END_IF END_IF
(* (*
@@ -549,11 +586,18 @@ ACTION DoFUBs:
//Frame in SCS 3 Setzen //Frame in SCS 3 Setzen
MpFUB.MC_BR_SetFrameTableFrame.ExecutionMode := mcEM_IMMEDIATELY; MpFUB.MC_BR_SetFrameTableFrame.ExecutionMode := mcEM_IMMEDIATELY;
IF EDGEPOS (States.CNCJogCS = enCNCJogCS_SCS3) THEN IF EDGEPOS (States.CNCJogCS = enCNCJogCS_SCS3) OR EDGEPOS (States.PosState.bWorkposShuttle1) OR EDGEPOS (States.PosState.bWorkposShuttle2) THEN
MpFUB.MC_BR_SetFrameTableFrame.CoordSystem := States.CNCJogCS; MpFUB.MC_BR_SetFrameTableFrame.CoordSystem := States.CNCJogCS;
MpFUB.MC_BR_SetFrameTableFrame.Name := 'FrameTable_SC3'; MpFUB.MC_BR_SetFrameTableFrame.Name := 'FrameTable_SC3';
MpFUB.MC_BR_SetFrameTableFrame.Index := 1; //FixMe nur in Handbetrieb ausf<EFBFBD>hren und Shuttles ber<EFBFBD>cksichtigen IF States.PosState.bWorkposShuttle2 THEN
MpFUB.MC_BR_SetFrameTableFrame.Execute := TRUE; MpFUB.MC_BR_SetFrameTableFrame.Index := 2;
ELSE
MpFUB.MC_BR_SetFrameTableFrame.Index := 1;
END_IF
//FixMe nur in Handbetrieb ausf<EFBFBD>hren und Shuttles ber<EFBFBD>cksichtigen
IF (lMachine.enMode <> enMACH_AUTOMATIC) AND NOT MpFUB.MpCNC5Axis.MoveProgram THEN
MpFUB.MC_BR_SetFrameTableFrame.Execute := TRUE;
END_IF
ELSE ELSE
MpFUB.MC_BR_SetFrameTableFrame.Execute := FALSE; MpFUB.MC_BR_SetFrameTableFrame.Execute := FALSE;
END_IF END_IF
@@ -671,12 +715,31 @@ ACTION DoFUBs:
IF MpFUB.MpCNC5Axis.MoveInterrupted THEN IF MpFUB.MpCNC5Axis.MoveInterrupted THEN
MpFUB.MpCNC5Axis.Interrupt := FALSE; MpFUB.MpCNC5Axis.Interrupt := FALSE;
END_IF END_IF
IF MpFUB.MpCNC5Axis.MoveActive THEN IF MpFUB.MpCNC5Axis.MoveActive AND NOT MpFUB.MpCNC5Axis.MoveInterrupted THEN
MpFUB.MpCNC5Axis.Continue := FALSE; MpFUB.MpCNC5Axis.Continue := FALSE;
END_IF END_IF
IF MpFUB.MpCNC5Axis.MoveDone THEN IF MpFUB.MpCNC5Axis.MoveDone THEN
MpFUB.MpCNC5Axis.MoveProgram := FALSE; MpFUB.MpCNC5Axis.MoveProgram := FALSE;
//MpFUB.MpCNC5Axis.Stop FixMe //MpFUB.MpCNC5Axis.Stop FixMe
END_IF END_IF
END_ACTION END_ACTION
//Ventile ansteuern
ACTION DoValves:
IF NOT (Valves.bCloseGateShuttle1 XOR Valves.bOpenGateShuttle1) THEN
Valves.bCloseGateShuttle1 := FALSE;
Valves.bOpenGateShuttle1 := TRUE;
END_IF
bOuOpenGateShuttle1 := Valves.bOpenGateShuttle1 AND States.bSafetyCNCAxisSS1Ok;
bOuCloseGateShuttle1 := Valves.bCloseGateShuttle1 AND States.bSafetyCNCAxisSS1Ok;
IF NOT (Valves.bCloseGateShuttle2 XOR Valves.bOpenGateShuttle2) THEN
Valves.bCloseGateShuttle2 := FALSE;
Valves.bOpenGateShuttle2 := TRUE;
END_IF
//FixMe
bOuOpenGateShuttle2 := Valves.bOpenGateShuttle2 AND States.bSafetyCNCAxisSS1Ok;
bOuCloseGateShuttle2 := Valves.bCloseGateShuttle2 AND States.bSafetyCNCAxisSS1Ok;
END_ACTION

View File

@@ -107,9 +107,9 @@ ACTION DoInitAxLimits:
Parameter.LimitAxis_A.lrLowerLimit := -135.0; Parameter.LimitAxis_A.lrLowerLimit := -135.0;
Parameter.LimitAxis_A.lrUpperLimit := 135.0; Parameter.LimitAxis_A.lrUpperLimit := 135.0;
Parameter.LimitAxis_Shuttle1.lrLowerLimit := 1.0; Parameter.LimitAxis_Shuttle1.lrLowerLimit := 1.0;
Parameter.LimitAxis_Shuttle1.lrUpperLimit := 4000.0; Parameter.LimitAxis_Shuttle1.lrUpperLimit := 3760.0;
Parameter.LimitAxis_Shuttle2.lrLowerLimit := 5000.0; Parameter.LimitAxis_Shuttle2.lrLowerLimit := 3740.0;
Parameter.LimitAxis_Shuttle2.lrUpperLimit := 9000.0; Parameter.LimitAxis_Shuttle2.lrUpperLimit := 7499.0;
END_ACTION END_ACTION
ACTION DoSceneViewerPositions: ACTION DoSceneViewerPositions:
@@ -142,7 +142,7 @@ END_ACTION
ACTION DoSLSAxisProcPar: ACTION DoSLSAxisProcPar:
//Achsparameter anhand Sicherheit einstellen //Achsparameter anhand Sicherheit einstellen
IF ((gMachine1.enMode = enMACH_JOG) OR (gMachine1.enMode = enMACH_MANUAL)) AND NOT States.bSafetyLaserOk THEN IF ((gMachine1.enMode = enMACH_JOG) OR (gMachine1.enMode = enMACH_MANUAL)) AND NOT States.bSafetyCNCAxisSLSOk THEN
//SLS Grenzwerte festlegen //SLS Grenzwerte festlegen
IF States.ProcParamLoaded.bAxis_XVirtual AND NOT States.ProcParamSlowSet.bAxis_XVirtual AND NOT MpFUB.ProcessParam_XVirtual.Error THEN IF States.ProcParamLoaded.bAxis_XVirtual AND NOT States.ProcParamSlowSet.bAxis_XVirtual AND NOT MpFUB.ProcessParam_XVirtual.Error THEN
MpData.ProcPar_XVirtual_MoveLim.MovementLimits.InternalPathAxis.Velocity.Basic.Velocity := 195; MpData.ProcPar_XVirtual_MoveLim.MovementLimits.InternalPathAxis.Velocity.Basic.Velocity := 195;
@@ -179,7 +179,7 @@ ACTION DoSLSAxisProcPar:
States.ProcParamFastSet.bAxis_A := FALSE; States.ProcParamFastSet.bAxis_A := FALSE;
States.ProcParamSlowSet.bAxis_A := TRUE; States.ProcParamSlowSet.bAxis_A := TRUE;
END_IF END_IF
ELSIF States.bSafetyLaserOk THEN ELSIF States.bSafetyCNCAxisSLSOk THEN
//Vollgasparameter //Vollgasparameter
IF States.ProcParamLoaded.bAxis_XVirtual AND NOT States.ProcParamFastSet.bAxis_XVirtual AND NOT MpFUB.ProcessParam_XVirtual.Error THEN IF States.ProcParamLoaded.bAxis_XVirtual AND NOT States.ProcParamFastSet.bAxis_XVirtual AND NOT MpFUB.ProcessParam_XVirtual.Error THEN
MpData.ProcPar_XVirtual_MoveLim.MovementLimits.InternalPathAxis.Velocity.Basic.Velocity := 2000; MpData.ProcPar_XVirtual_MoveLim.MovementLimits.InternalPathAxis.Velocity.Basic.Velocity := 2000;
@@ -402,7 +402,7 @@ ACTION DoCalibrateParameterShuttle2:
MpFUB.InitHome_Shuttle2.HomingParameters.Acceleration := 1000; // [mm/s2]; MpFUB.InitHome_Shuttle2.HomingParameters.Acceleration := 1000; // [mm/s2];
MpFUB.InitHome_Shuttle2.HomingParameters.StartVelocity := 1; // [mm/s] MpFUB.InitHome_Shuttle2.HomingParameters.StartVelocity := 1; // [mm/s]
MpFUB.InitHome_Shuttle2.HomingParameters.HomingVelocity := 15; // [mm/s] MpFUB.InitHome_Shuttle2.HomingParameters.HomingVelocity := 15; // [mm/s]
MpFUB.InitHome_Shuttle2.HomingParameters.Position := 9000; // [mm] MpFUB.InitHome_Shuttle2.HomingParameters.Position := 7500; // [mm]
MpFUB.InitHome_Shuttle2.HomingParameters.BlockDetectionPositionError := 0.01; // [mm] MpFUB.InitHome_Shuttle2.HomingParameters.BlockDetectionPositionError := 0.01; // [mm]
MpFUB.InitHome_Shuttle2.HomingParameters.PositionErrorStopLimit := 0.15; // [mm] MpFUB.InitHome_Shuttle2.HomingParameters.PositionErrorStopLimit := 0.15; // [mm]
END_ACTION END_ACTION

View File

@@ -1,5 +1,5 @@
//Tippbetrieb Grenzen
ACTION DoJogLimits: ACTION DoJogLimits:
//Grenzen Tippen
//Grenzwerte aktiv //Grenzwerte aktiv
VCButtons.DisablePosLimits.usStatus.1 := NOT lMachine.bSetupMode; VCButtons.DisablePosLimits.usStatus.1 := NOT lMachine.bSetupMode;
IF NOT lMachine.bSetupMode THEN IF NOT lMachine.bSetupMode THEN
@@ -36,6 +36,7 @@ ACTION DoJogLimits:
END_IF END_IF
END_ACTION END_ACTION
//Tippbetrieb Geschwindigkeiten
ACTION DoJogSpeeds: ACTION DoJogSpeeds:
IF EDGEPOS (gMP7121.VInc) THEN IF EDGEPOS (gMP7121.VInc) THEN
IF (Parameter.rSpeedJog < 90) THEN IF (Parameter.rSpeedJog < 90) THEN
@@ -101,8 +102,9 @@ ACTION DoJogSpeeds:
END_ACTION END_ACTION
//Tippbetrieb Doppelte Kommandos verriegeln
ACTION DoJogResetDoubleCmd: ACTION DoJogResetDoubleCmd:
//Doppelte Kommandos verriegeln
//Buttons verriegeln //Buttons verriegeln
IF (gMP7121.XInc AND gMP7121.XDec) THEN IF (gMP7121.XInc AND gMP7121.XDec) THEN
gMP7121.XInc := FALSE; gMP7121.XInc := FALSE;
@@ -116,11 +118,10 @@ ACTION DoJogResetDoubleCmd:
END_ACTION END_ACTION
ACTION DoJogAxis: //Achsen Tippen
//Achsen Tippen ACTION DoJogAxis:
//-------------------------------------
//im CNC System Joggen - Richtung ergibt sich anhand Der Gewschwindigkeit //im CNC System Joggen - Richtung ergibt sich anhand Der Gewschwindigkeit
//Koodrinatensystem auswaehlen //Koordinatensystem auswaehlen
//FixMe nicht umschalten wenn im CNC System gejoggt wird //FixMe nicht umschalten wenn im CNC System gejoggt wird
IF EDGEPOS (gMP7121.Positions) AND NOT MpFUB.MC_BR_GroupMoveCyclicPosition.Enable THEN IF EDGEPOS (gMP7121.Positions) AND NOT MpFUB.MC_BR_GroupMoveCyclicPosition.Enable THEN
CASE States.CNCJogCS OF CASE States.CNCJogCS OF
@@ -241,8 +242,9 @@ ACTION DoJogAxis:
END_ACTION END_ACTION
//Tippen mit Handrad
ACTION DoJogHandwheel: ACTION DoJogHandwheel:
//Mit Handrad bewegen
States.bHandWheelFw := (gMP7121.udWheelPos > States.udHandWheelLastPos); States.bHandWheelFw := (gMP7121.udWheelPos > States.udHandWheelLastPos);
States.bHandWheelBw := (gMP7121.udWheelPos < States.udHandWheelLastPos); States.bHandWheelBw := (gMP7121.udWheelPos < States.udHandWheelLastPos);
IF States.bHandWheelFw THEN IF States.bHandWheelFw THEN
@@ -360,8 +362,8 @@ ACTION DoJogHandwheel:
END_ACTION END_ACTION
//Tippen Achsposition Anfahren
ACTION DoJogMovePos: ACTION DoJogMovePos:
//Achsposition Anfahren
//Achsen gewechselt (FixMe bei Neustart) //Achsen gewechselt (FixMe bei Neustart)
IF (States.enSelectedAxis <> States.enSelectedAxisLatch) THEN IF (States.enSelectedAxis <> States.enSelectedAxisLatch) THEN
//Zielpos auf IstPos //Zielpos auf IstPos
@@ -420,19 +422,34 @@ ACTION DoJogMovePos:
MpFUB.AxBasic_A.MoveAbsolute := gMP7121.Ctrl; MpFUB.AxBasic_A.MoveAbsolute := gMP7121.Ctrl;
END_CASE END_CASE
VCStatus.lrJogDestPosLowerLimSh1 := Parameter.LimitAxis_Shuttle1.lrLowerLimit;
VCStatus.lrJogDestPosUpperLimSh1 := Parameter.LimitAxis_Shuttle1.lrUpperLimit; VCButtons.AxisMovePosHomeSh1.usStatus.0 := States.PosState.bHomeShuttle1;
VCStatus.lrJogDestPosLowerLimSh2 := Parameter.LimitAxis_Shuttle2.lrLowerLimit; VCButtons.AxisMovePosHomeSh1.usStatus.1 := NOT MoveConditions.bAxisShuttleMovePos AND NOT MoveConditions.bAxisShuttleMoveNeg;
VCStatus.lrJogDestPosUpperLimSh2 := Parameter.LimitAxis_Shuttle2.lrUpperLimit; VCButtons.AxisMovePosWorkSh1.usStatus.0 := States.PosState.bWorkposShuttle1;
MpData.AxPar_Shuttle.Position := VCStatus.lrJogDestPosSh1; VCButtons.AxisMovePosWorkSh1.usStatus.1 := NOT MoveConditions.bAxisShuttleMovePos AND NOT MoveConditions.bAxisShuttleMoveNeg;
MpFUB.AxBasic_Shuttle.MoveAbsolute := VCButtons.AxisMovePosSh1.bCommand; IF VCButtons.AxisMovePosHomeSh1.bCommand THEN
MpData.AxPar_Shuttle2.Position := VCStatus.lrJogDestPosSh2; MpData.AxPar_Shuttle.Position := pParamPositions.lrHomePosShuttle1;
MpFUB.AxBasic_Shuttle2.MoveAbsolute := VCButtons.AxisMovePosSh2.bCommand; ELSIF VCButtons.AxisMovePosWorkSh1.bCommand THEN
MpData.AxPar_Shuttle.Position := pParamPositions.lrWorkPosShuttle1;
END_IF
VCButtons.AxisMovePosHomeSh2.usStatus.0 := States.PosState.bHomeShuttle2;
VCButtons.AxisMovePosHomeSh2.usStatus.1 := NOT MoveConditions.bAxisShuttle2MovePos AND NOT MoveConditions.bAxisShuttle2MoveNeg;
VCButtons.AxisMovePosWorkSh2.usStatus.0 := States.PosState.bWorkposShuttle2;
VCButtons.AxisMovePosWorkSh2.usStatus.1 := NOT MoveConditions.bAxisShuttle2MovePos AND NOT MoveConditions.bAxisShuttle2MoveNeg;
IF VCButtons.AxisMovePosHomeSh2.bCommand THEN
MpData.AxPar_Shuttle2.Position := pParamPositions.lrHomePosShuttle2;
ELSIF VCButtons.AxisMovePosWorkSh2.bCommand THEN
MpData.AxPar_Shuttle2.Position := pParamPositions.lrWorkPosShuttle2;
END_IF
MpFUB.AxBasic_Shuttle.MoveAbsolute := VCButtons.AxisMovePosHomeSh1.bCommand OR VCButtons.AxisMovePosWorkSh1.bCommand;
MpFUB.AxBasic_Shuttle2.MoveAbsolute := VCButtons.AxisMovePosHomeSh2.bCommand OR VCButtons.AxisMovePosWorkSh2.bCommand;
END_ACTION END_ACTION
//Tippen Achsen kalibrieren
ACTION DoJogCalibration: ACTION DoJogCalibration:
//Achsen kalibrieren
IF TRUE THEN IF TRUE THEN
CASE States.enSelectedAxis OF CASE States.enSelectedAxis OF
0://X-Achsen aus dem Gantry System kalibrieren 0://X-Achsen aus dem Gantry System kalibrieren
@@ -765,11 +782,11 @@ ACTION DoJogCalibration:
END_IF END_IF
END_ACTION END_ACTION
//Tippen Achsen direct Referenzieren (nur f<EFBFBD>r Einrichten)
ACTION DoJogHomeDirect: ACTION DoJogHomeDirect:
//Achsen direct Referenzieren (nur f<EFBFBD>r Einrichten) VCButtons.AxisHomeDirect.usStatus.0 := (gUserRights.Right6_Setup < mpUSERX_ACCESS_FULL) OR NOT bGodMode;
VCButtons.AxisHomeDirect.usStatus.0 := (gUserRights.Right6_Setup < mpUSERX_ACCESS_FULL); VCButtons.AxisShuttleHomeDirect.usStatus.0 := (gUserRights.Right6_Setup < mpUSERX_ACCESS_FULL) OR NOT bGodMode;
VCButtons.AxisShuttleHomeDirect.usStatus.0 := (gUserRights.Right6_Setup < mpUSERX_ACCESS_FULL); VCButtons.AxisShuttle2HomeDirect.usStatus.0 := (gUserRights.Right6_Setup < mpUSERX_ACCESS_FULL) OR NOT bGodMode;
VCButtons.AxisShuttle2HomeDirect.usStatus.0 := (gUserRights.Right6_Setup < mpUSERX_ACCESS_FULL);
IF EDGEPOS (VCButtons.AxisHomeDirect.bCommand) THEN IF EDGEPOS (VCButtons.AxisHomeDirect.bCommand) THEN
CASE States.enSelectedAxis OF CASE States.enSelectedAxis OF
@@ -837,8 +854,9 @@ ACTION DoJogHomeDirect:
END_IF END_IF
END_ACTION END_ACTION
//Tippen Achsen Referenzieren
ACTION DoJogHomeAxis: ACTION DoJogHomeAxis:
//Achsen Referenzieren
VCButtons.AxisHome.usStatus.0 := (gUserRights.Right6_Setup < mpUSERX_ACCESS_FULL); VCButtons.AxisHome.usStatus.0 := (gUserRights.Right6_Setup < mpUSERX_ACCESS_FULL);
VCButtons.AxisShuttleHome.usStatus.0 := (gUserRights.Right6_Setup < mpUSERX_ACCESS_FULL); VCButtons.AxisShuttleHome.usStatus.0 := (gUserRights.Right6_Setup < mpUSERX_ACCESS_FULL);
VCButtons.AxisShuttle2Home.usStatus.0 := (gUserRights.Right6_Setup < mpUSERX_ACCESS_FULL); VCButtons.AxisShuttle2Home.usStatus.0 := (gUserRights.Right6_Setup < mpUSERX_ACCESS_FULL);
@@ -868,8 +886,9 @@ ACTION DoJogHomeAxis:
END_IF END_IF
END_ACTION END_ACTION
ACTION DoManualCNC:
//CNC im Handbetrieb
ACTION DoManualCNC:
//Gantry Achsen //Gantry Achsen
IF gCalibrationDone.bAxisX AND gCalibrationDone.bAxisX1 AND States.PosState.bDiffX_Virtual_Ok AND States.PosState.bDiffX_X1_Ok THEN IF gCalibrationDone.bAxisX AND gCalibrationDone.bAxisX1 AND States.PosState.bDiffX_Virtual_Ok AND States.PosState.bDiffX_X1_Ok THEN
//Move CyclicPos OK //Move CyclicPos OK
@@ -878,15 +897,19 @@ ACTION DoManualCNC:
//VC Buttons Status //VC Buttons Status
VCButtons.ManCNCStartHome.usStatus.0 := MpFUB.MpCNC5Axis.MoveProgram; VCButtons.ManCNCStartHome.usStatus.0 := MpFUB.MpCNC5Axis.MoveProgram;
VCButtons.ManCNCStartHome.usStatus.1 := lMachine.bMachineHOME; VCButtons.ManCNCStartHome.usStatus.1 := States.bCNCHome;
VCButtons.ManCNCStartCalibration.usStatus.0 := MpFUB.MpCNC5Axis.MoveProgram; VCButtons.ManCNCStartCalibration.usStatus.0 := MpFUB.MpCNC5Axis.MoveProgram;
VCButtons.ManCNCStartCalibration.usStatus.1 := NOT lMachine.bMachineHOME; VCButtons.ManCNCStartCalibration.usStatus.1 := NOT States.bCNCHome AND NOT (States.PosState.bWorkposShuttle1 OR States.PosState.bWorkposShuttle2);
VCButtons.DropDownBoxFileMan.usStatus.1 := MpFUB.MpCNC5Axis.MoveProgram;
//CNC Fahren //CNC Fahren
IF NOT MpFUB.MpCNC5Axis.MoveProgram THEN IF NOT MpFUB.MpCNC5Axis.MoveProgram THEN
IF gMP7121.Start THEN gIPGLaserInterface.Out.bCuttingGasOn := FALSE;
//FixMe aktueller Ablauf strCurrentCncPrg := gstrFilenames[VCButtons.DropDownBoxFileMan.usIndexDatapoint];
MpData.MpCnc5AxisPar.ProgramName := 'SE10_MAIN.mpf'; IF (gMP7121.Start OR (gbSPLCInMaintDoorOk AND EDGEPOS (bInKeyStart))) AND (States.PosState.bWorkposShuttle1 OR States.PosState.bWorkposShuttle2) THEN
//Filename <EFBFBD>bernehmen
MpData.MpCnc5AxisPar.ProgramName := strCurrentCncPrg;
ELSIF VCButtons.ManCNCStartHome.bCommand THEN ELSIF VCButtons.ManCNCStartHome.bCommand THEN
//Grundstellung //Grundstellung
MpData.MpCnc5AxisPar.ProgramName := 'Service/CncHome.mpf'; MpData.MpCnc5AxisPar.ProgramName := 'Service/CncHome.mpf';
@@ -894,31 +917,110 @@ ACTION DoManualCNC:
//Kalibrieren //Kalibrieren
MpData.MpCnc5AxisPar.ProgramName := 'Service/CncCalibrate.mpf'; MpData.MpCnc5AxisPar.ProgramName := 'Service/CncCalibrate.mpf';
END_IF END_IF
END_IF END_IF
IF (EDGEPOS (gMP7121.Start) OR EDGEPOS (VCButtons.ManCNCStartHome.bCommand) OR EDGEPOS (VCButtons.ManCNCStartCalibration.bCommand)) IF (EDGEPOS (gMP7121.Start) OR EDGEPOS (VCButtons.ManCNCStartHome.bCommand) OR EDGEPOS (VCButtons.ManCNCStartCalibration.bCommand))
AND States.bSafetyCNCAxisOk AND NOT States.bSingleAxMode AND (States.enXGantryMode = enXGantryFollowPosVirtX) THEN AND States.bSafetyCNCAxisSS1Ok AND NOT States.bSingleAxMode AND (States.enXGantryMode = enXGantryFollowPosVirtX) THEN
IF MpFUB.MpCNC5Axis.MoveInterrupted THEN IF MpFUB.MpCNC5Axis.MoveInterrupted THEN
//FixMe //FixMe
MpFUB.MpCNC5Axis.Continue := TRUE; MpFUB.MpCNC5Axis.Continue := TRUE;
ELSE ELSE
IF (MpFUB.MpCNC5Axis.Z > 1200) OR (MpData.MpCnc5AxisPar.ProgramName = 'Service/CncHome.mpf') THEN //FixMe Sicherheitsebene IF (States.bCNCHome AND (States.PosState.bWorkposShuttle1 OR (States.PosState.bWorkposShuttle2 AND gToolInterface.Shuttle2.ToTool.bVaccumOn))) //FixMe Werkzeugabfrage //Vakkum Ein
OR (MpData.MpCnc5AxisPar.ProgramName = 'Service/CncHome.mpf') THEN
MpFUB.MpCNC5Axis.MoveProgram := TRUE; MpFUB.MpCNC5Axis.MoveProgram := TRUE;
END_IF END_IF
END_IF END_IF
ELSIF EDGEPOS (gMP7121.Stop) OR NOT States.bSafetyCNCAxisOk THEN ELSIF EDGEPOS (gMP7121.Stop) OR (gbSPLCInMaintDoorOk AND EDGEPOS (bInKeyStop)) OR NOT States.bSafetyCNCAxisSS1Ok THEN
IF MpFUB.MpCNC5Axis.MoveActive AND NOT MpFUB.MpCNC5Axis.Interrupt THEN IF MpFUB.MpCNC5Axis.MoveActive AND NOT MpFUB.MpCNC5Axis.MoveInterrupted THEN
MpFUB.MpCNC5Axis.Interrupt := TRUE; MpFUB.MpCNC5Axis.Interrupt := TRUE;
ELSE ELSE
MpFUB.MpCNC5Axis.MoveProgram := FALSE; MpFUB.MpCNC5Axis.MoveProgram := FALSE;
END_IF END_IF
END_IF END_IF
IF MpFUB.MpCNC5Axis.MoveDone AND NOT (MpData.MpCnc5AxisPar.ProgramName = 'Service/CncHome.mpf') AND NOT (MpData.MpCnc5AxisPar.ProgramName = 'Service/CncCalibrate.mpf') THEN
gCmd1.bReqDoorOpen := TRUE;
IF States.PosState.bWorkposShuttle1 THEN
gToolInterface.Shuttle1.ToTool.bVaccumOn := FALSE;
END_IF
IF States.PosState.bWorkposShuttle2 THEN
gToolInterface.Shuttle2.ToTool.bVaccumOn := FALSE;
END_IF
END_IF
END_ACTION END_ACTION
//Tippen Ventile
ACTION DoJogValves:
//Torventile werden Getippt wenn eine Position erreicht ist und keinn Tippvorgan angew<EFBFBD>hlt,
//bleibt die Endlage Angesteuert
VCButtons.OpenGateShuttle1.usStatus.0 := States.CylinderPosState.bGateShuttle1Open;
VCButtons.OpenGateShuttle1.usStatus.1 := (gUserRights.Right4_Jog < mpUSERX_ACCESS_ACTUATE);
Valves.bOpenGateShuttle1 := VCButtons.OpenGateShuttle1.bCommand;
VCButtons.CloseGateShuttle1.usStatus.0 := States.CylinderPosState.bGateShuttle1Closed;
Valves.bCloseGateShuttle1 := VCButtons.CloseGateShuttle1.bCommand;
IF NOT VCButtons.OpenGateShuttle1.bCommand AND NOT VCButtons.CloseGateShuttle1.bCommand THEN
Valves.bOpenGateShuttle1 := bInGateIsOpenShuttle1 AND NOT gbSInGate1Closed;
Valves.bCloseGateShuttle1 := gbSInGate1Closed AND NOT bInGateIsOpenShuttle1;
END_IF
VCButtons.OpenGateShuttle2.usStatus.0 := States.CylinderPosState.bGateShuttle2Open;
VCButtons.OpenGateShuttle2.usStatus.1 := (gUserRights.Right4_Jog < mpUSERX_ACCESS_ACTUATE);
Valves.bOpenGateShuttle2 := VCButtons.OpenGateShuttle2.bCommand;
VCButtons.CloseGateShuttle2.usStatus.0 := States.CylinderPosState.bGateShuttle2Closed;
Valves.bCloseGateShuttle2 := VCButtons.CloseGateShuttle2.bCommand;
IF NOT VCButtons.OpenGateShuttle2.bCommand AND NOT VCButtons.CloseGateShuttle2.bCommand THEN
Valves.bOpenGateShuttle2 := bInGateIsOpenShuttle2 AND NOT gbSInGate2Closed;
Valves.bCloseGateShuttle2 := gbSInGate2Closed AND NOT bInGateIsOpenShuttle2;
END_IF
END_ACTION
//Vakuum Ventile und Seitenkanalverdichter
ACTION DoManVacValves:
//Shuttle 1
VCButtons.VaccumOnShuttle1.usStatus.0 := gToolInterface.Shuttle1.ToTool.bVaccumOn;
VCButtons.VaccumOnShuttle1.usStatus.1 := NOT States.PosState.bWorkposShuttle1;
VCButtons.VaccumOffShuttle1.usStatus.0 := NOT gToolInterface.Shuttle1.ToTool.bVaccumOn;
VCButtons.VaccumOffShuttle1.usStatus.1 := NOT States.PosState.bWorkposShuttle1 OR MpFUB.MpCNC5Axis.MoveActive OR MpFUB.MpCNC5Axis.MoveInterrupted;
IF VCButtons.VaccumOnShuttle1.bCommand
OR (States.PosState.bWorkposShuttle1 AND NOT gbSPLCInMaintDoorOk AND (lMachine.enMode = enMACH_MANUAL) AND bInKeyStart) THEN
gToolInterface.Shuttle1.ToTool.bVaccumOn := TRUE;
END_IF
IF VCButtons.VaccumOffShuttle1.bCommand
OR (States.PosState.bWorkposShuttle1 AND NOT gbSPLCInMaintDoorOk AND (lMachine.enMode = enMACH_MANUAL) AND bInKeyStop) THEN
gToolInterface.Shuttle1.ToTool.bVaccumOn := FALSE;
END_IF
//Shuttle 2
VCButtons.VaccumOnShuttle2.usStatus.0 := gToolInterface.Shuttle2.ToTool.bVaccumOn;
VCButtons.VaccumOnShuttle2.usStatus.1 := NOT States.PosState.bWorkposShuttle2;
VCButtons.VaccumOffShuttle2.usStatus.0 := NOT gToolInterface.Shuttle2.ToTool.bVaccumOn;
VCButtons.VaccumOffShuttle2.usStatus.1 := NOT States.PosState.bWorkposShuttle2 OR MpFUB.MpCNC5Axis.MoveActive OR MpFUB.MpCNC5Axis.MoveInterrupted;
IF VCButtons.VaccumOnShuttle2.bCommand
OR (States.PosState.bWorkposShuttle2 AND NOT gbSPLCInMaintDoorOk AND (lMachine.enMode = enMACH_MANUAL) AND bInKeyStart) THEN
gToolInterface.Shuttle2.ToTool.bVaccumOn := TRUE;
END_IF
IF VCButtons.VaccumOffShuttle2.bCommand
OR (States.PosState.bWorkposShuttle2 AND NOT gbSPLCInMaintDoorOk AND (lMachine.enMode = enMACH_MANUAL) AND bInKeyStop) THEN
gToolInterface.Shuttle2.ToTool.bVaccumOn := FALSE;
END_IF
END_ACTION
//Handbetrieb - Ausw<EFBFBD>hlen
ACTION DoManual: ACTION DoManual:
IF enOldMachMode <> enMACH_JOG THEN IF enOldMachMode <> enMACH_JOG THEN
//Tipp betrieb neu angew<EFBFBD>hlt //Tipp betrieb neu angew<EFBFBD>hlt
@@ -1011,7 +1113,7 @@ ACTION DoManual:
//OR (gUserRights.Right4_Jog < mpUSERX_ACCESS_FULL); //OR (gUserRights.Right4_Jog < mpUSERX_ACCESS_FULL);
VCButtons.AxisCalibrate.usStatus.0 := NOT States.bSingleAxMode; VCButtons.AxisCalibrate.usStatus.0 := NOT States.bSingleAxMode;
VCButtons.AxisCalibrate.usStatus.1 := NOT MoveConditions.bAxisXMove OR NOT bAxisReadyForCommand VCButtons.AxisCalibrate.usStatus.1 := NOT MoveConditions.bAxisXMove OR NOT bAxisReadyForCommand
OR (gUserRights.Right6_Setup < mpUSERX_ACCESS_ACTUATE); OR (gUserRights.Right6_Setup < mpUSERX_ACCESS_ACTUATE) OR NOT bGodMode;
1: 1:
IF States.bSingleAxMode THEN IF States.bSingleAxMode THEN
@@ -1021,7 +1123,7 @@ ACTION DoManual:
VCButtons.AxisJogFw.usStatus.1 := NOT MoveConditions.bAxisYMove OR NOT bAxisReadyForCommand OR NOT MpFUB.AxBasic_Y.IsHomed; VCButtons.AxisJogFw.usStatus.1 := NOT MoveConditions.bAxisYMove OR NOT bAxisReadyForCommand OR NOT MpFUB.AxBasic_Y.IsHomed;
VCButtons.AxisCalibrate.usStatus.0 := NOT States.bSingleAxMode; VCButtons.AxisCalibrate.usStatus.0 := NOT States.bSingleAxMode;
VCButtons.AxisCalibrate.usStatus.1 := NOT MoveConditions.bAxisYMove OR NOT bAxisReadyForCommand VCButtons.AxisCalibrate.usStatus.1 := NOT MoveConditions.bAxisYMove OR NOT bAxisReadyForCommand
OR (gUserRights.Right6_Setup < mpUSERX_ACCESS_ACTUATE); OR (gUserRights.Right6_Setup < mpUSERX_ACCESS_ACTUATE)OR NOT bGodMode;;
2: 2:
IF States.bSingleAxMode THEN IF States.bSingleAxMode THEN
@@ -1031,7 +1133,7 @@ ACTION DoManual:
VCButtons.AxisJogFw.usStatus.1 := NOT MoveConditions.bAxisZMovePos OR NOT bAxisReadyForCommand OR NOT MpFUB.AxBasic_Z.IsHomed; VCButtons.AxisJogFw.usStatus.1 := NOT MoveConditions.bAxisZMovePos OR NOT bAxisReadyForCommand OR NOT MpFUB.AxBasic_Z.IsHomed;
VCButtons.AxisCalibrate.usStatus.0 := NOT States.bSingleAxMode; VCButtons.AxisCalibrate.usStatus.0 := NOT States.bSingleAxMode;
VCButtons.AxisCalibrate.usStatus.1 := NOT MoveConditions.bAxisZMoveNeg OR NOT MoveConditions.bAxisZMovePos OR NOT bAxisReadyForCommand VCButtons.AxisCalibrate.usStatus.1 := NOT MoveConditions.bAxisZMoveNeg OR NOT MoveConditions.bAxisZMovePos OR NOT bAxisReadyForCommand
OR (gUserRights.Right6_Setup < mpUSERX_ACCESS_ACTUATE); OR (gUserRights.Right6_Setup < mpUSERX_ACCESS_ACTUATE) OR NOT bGodMode;;
3: 3:
IF States.bSingleAxMode THEN IF States.bSingleAxMode THEN
bAxisReadyForCommand := MpFUB.AxBasic_C.Active AND MpFUB.AxBasic_C.PowerOn; // AND NOT MpFUB.AxBasic_A.CommandBusy; bAxisReadyForCommand := MpFUB.AxBasic_C.Active AND MpFUB.AxBasic_C.PowerOn; // AND NOT MpFUB.AxBasic_A.CommandBusy;
@@ -1040,7 +1142,7 @@ ACTION DoManual:
VCButtons.AxisJogFw.usStatus.1 := NOT MoveConditions.bAxisCMove OR NOT bAxisReadyForCommand OR NOT MpFUB.AxBasic_C.IsHomed; VCButtons.AxisJogFw.usStatus.1 := NOT MoveConditions.bAxisCMove OR NOT bAxisReadyForCommand OR NOT MpFUB.AxBasic_C.IsHomed;
VCButtons.AxisCalibrate.usStatus.0 := NOT States.bSingleAxMode; VCButtons.AxisCalibrate.usStatus.0 := NOT States.bSingleAxMode;
VCButtons.AxisCalibrate.usStatus.1 := NOT MoveConditions.bAxisCMove OR NOT bAxisReadyForCommand VCButtons.AxisCalibrate.usStatus.1 := NOT MoveConditions.bAxisCMove OR NOT bAxisReadyForCommand
OR (gUserRights.Right6_Setup < mpUSERX_ACCESS_ACTUATE); OR (gUserRights.Right6_Setup < mpUSERX_ACCESS_ACTUATE) OR NOT bGodMode;;
4: 4:
IF States.bSingleAxMode THEN IF States.bSingleAxMode THEN
@@ -1050,7 +1152,7 @@ ACTION DoManual:
VCButtons.AxisJogFw.usStatus.1 := NOT MoveConditions.bAxisAMove OR NOT bAxisReadyForCommand OR NOT MpFUB.AxBasic_A.IsHomed; VCButtons.AxisJogFw.usStatus.1 := NOT MoveConditions.bAxisAMove OR NOT bAxisReadyForCommand OR NOT MpFUB.AxBasic_A.IsHomed;
VCButtons.AxisCalibrate.usStatus.0 := NOT States.bSingleAxMode; VCButtons.AxisCalibrate.usStatus.0 := NOT States.bSingleAxMode;
VCButtons.AxisCalibrate.usStatus.1 := NOT MoveConditions.bAxisAMove OR NOT bAxisReadyForCommand VCButtons.AxisCalibrate.usStatus.1 := NOT MoveConditions.bAxisAMove OR NOT bAxisReadyForCommand
OR (gUserRights.Right6_Setup < mpUSERX_ACCESS_ACTUATE); OR (gUserRights.Right6_Setup < mpUSERX_ACCESS_ACTUATE) OR NOT bGodMode;;
END_CASE END_CASE
@@ -1060,8 +1162,8 @@ ACTION DoManual:
//OR (gUserRights.Right4_Jog < mpUSERX_ACCESS_FULL); //OR (gUserRights.Right4_Jog < mpUSERX_ACCESS_FULL);
VCButtons.AxisShuttleJogFw.usStatus.1 := NOT MoveConditions.bAxisShuttleMovePos OR NOT bAxisReadyForCommand OR NOT MpFUB.AxBasic_Shuttle.IsHomed; VCButtons.AxisShuttleJogFw.usStatus.1 := NOT MoveConditions.bAxisShuttleMovePos OR NOT bAxisReadyForCommand OR NOT MpFUB.AxBasic_Shuttle.IsHomed;
//OR (gUserRights.Right4_Jog < mpUSERX_ACCESS_FULL); //OR (gUserRights.Right4_Jog < mpUSERX_ACCESS_FULL);
VCButtons.AxisShuttleCalibrate.usStatus.0 := NOT States.bSingleAxMode; VCButtons.AxisShuttleCalibrate.usStatus.0 := NOT States.bSingleAxMode ;
VCButtons.AxisShuttleCalibrate.usStatus.1 := NOT bAxisReadyForCommand OR (gUserRights.Right6_Setup < mpUSERX_ACCESS_ACTUATE); VCButtons.AxisShuttleCalibrate.usStatus.1 := NOT bAxisReadyForCommand OR (gUserRights.Right6_Setup < mpUSERX_ACCESS_ACTUATE) OR NOT bGodMode;
bAxisReadyForCommand := MpFUB.AxBasic_Shuttle2.Active AND MpFUB.AxBasic_Shuttle2.PowerOn; // AND NOT MpFUB.AxBasic_Shuttle.CommandBusy; bAxisReadyForCommand := MpFUB.AxBasic_Shuttle2.Active AND MpFUB.AxBasic_Shuttle2.PowerOn; // AND NOT MpFUB.AxBasic_Shuttle.CommandBusy;
VCButtons.AxisShuttle2JogBw.usStatus.1 := NOT MoveConditions.bAxisShuttle2MoveNeg OR NOT bAxisReadyForCommand OR NOT MpFUB.AxBasic_Shuttle2.IsHomed; VCButtons.AxisShuttle2JogBw.usStatus.1 := NOT MoveConditions.bAxisShuttle2MoveNeg OR NOT bAxisReadyForCommand OR NOT MpFUB.AxBasic_Shuttle2.IsHomed;
@@ -1069,17 +1171,9 @@ ACTION DoManual:
VCButtons.AxisShuttle2JogFw.usStatus.1 := NOT MoveConditions.bAxisShuttle2MovePos OR NOT bAxisReadyForCommand OR NOT MpFUB.AxBasic_Shuttle2.IsHomed; VCButtons.AxisShuttle2JogFw.usStatus.1 := NOT MoveConditions.bAxisShuttle2MovePos OR NOT bAxisReadyForCommand OR NOT MpFUB.AxBasic_Shuttle2.IsHomed;
//OR (gUserRights.Right4_Jog < mpUSERX_ACCESS_FULL); //OR (gUserRights.Right4_Jog < mpUSERX_ACCESS_FULL);
VCButtons.AxisShuttle2Calibrate.usStatus.0 := NOT States.bSingleAxMode; VCButtons.AxisShuttle2Calibrate.usStatus.0 := NOT States.bSingleAxMode;
VCButtons.AxisShuttle2Calibrate.usStatus.1 := NOT bAxisReadyForCommand OR (gUserRights.Right6_Setup < mpUSERX_ACCESS_ACTUATE); VCButtons.AxisShuttle2Calibrate.usStatus.1 := NOT bAxisReadyForCommand OR (gUserRights.Right6_Setup < mpUSERX_ACCESS_ACTUATE) OR NOT bGodMode;
//Ventile //Ventile
VCButtons.OpenGate.usStatus.0 := States.CylinderPosState.bFrontGateOpen; DoJogValves;
VCButtons.OpenGate.usStatus.1 := (gUserRights.Right4_Jog < mpUSERX_ACCESS_ACTUATE);
VCButtons.CloseGate.usStatus.0 := States.CylinderPosState.bFrontGateClosed;
VCButtons.CloseGate.usStatus.1 := (gUserRights.Right4_Jog < mpUSERX_ACCESS_ACTUATE);
IF VCButtons.OpenGate.bCommand THEN
Valves.bCloseGate := FALSE;
ELSIF VCButtons.CloseGate.bCommand THEN
Valves.bCloseGate := TRUE;
END_IF
END_ACTION END_ACTION

View File

@@ -10,6 +10,8 @@ PROGRAM _CYCLIC
IF bInit THEN IF bInit THEN
strOperator := 'Bemusterung'; strOperator := 'Bemusterung';
strMachinename := 'Wasserstrahl'; strMachinename := 'Wasserstrahl';
//FixMe
//Grundstellung //Grundstellung
pParamPositions.HomePos.lrX := 4000; pParamPositions.HomePos.lrX := 4000;
pParamPositions.HomePos.lrY := 575.0; pParamPositions.HomePos.lrY := 575.0;
@@ -22,8 +24,10 @@ PROGRAM _CYCLIC
//Shuttlepositionen //Shuttlepositionen
pParamPositions.lrHomePosShuttle := 234.0; pParamPositions.lrHomePosShuttle1 := 5.0;
pParamPositions.lrWorkPosShuttle := 5.0; pParamPositions.lrWorkPosShuttle1 := 3750.0;
pParamPositions.lrHomePosShuttle2 := 7495.0;
pParamPositions.lrWorkPosShuttle2 := 3745.0;
END_IF END_IF
@@ -33,14 +37,11 @@ PROGRAM _CYCLIC
END_IF END_IF
//FixMe !!!
//Immer mit Init Programm fahren //Immer mit Init Programm fahren
MpData.MpCnc5AxisPar.MoveProgramOptions.InitProgram := 'CncInit.mpf'; MpData.MpCnc5AxisPar.MoveProgramOptions.InitProgram := 'Init/CncInit.mpf';
CNCVars.lrFeedrate := 30000;
CNCVars.bShuttle1InPos := TRUE;
CNCVars.bShuttle2InPos := FALSE;
CNCVars.bLaserMidPos := gRTLaserInterface.In.bHeadIsMidPos;
//CNC Variablen
DoCNCVars;
//Scene Viewer //Scene Viewer
@@ -99,8 +100,9 @@ PROGRAM _CYCLIC
//Grundstellungen //Grundstellungen
lMachine.bMachineHOME := States.PosState.bHomeX AND States.PosState.bHomeY AND States.PosState.bHomeZ AND States.bCNCHome := States.PosState.bHomeX AND States.PosState.bHomeY AND States.PosState.bHomeZ AND
States.PosState.bHomeC AND States.PosState.bHomeA; States.PosState.bHomeC AND States.PosState.bHomeA;
lMachine.bMachineHOME := States.bCNCHome AND States.PosState.bHomeShuttle1 AND States.PosState.bHomeShuttle2;
IF lMachine.bMachineHOME THEN IF lMachine.bMachineHOME THEN
lMachine.bRequestHoming := FALSE; lMachine.bRequestHoming := FALSE;
END_IF END_IF
@@ -164,10 +166,14 @@ PROGRAM _CYCLIC
IF EDGEPOS (lMachine.enMode <> enMACH_AUTOMATIC) THEN IF EDGEPOS (lMachine.enMode <> enMACH_AUTOMATIC) THEN
enStepAuto := enAutoStep_INIT; enStepAuto := enAutoStep_INIT;
MpFUB.MpCNC5Axis.MoveProgram := FALSE; MpFUB.MpCNC5Axis.MoveProgram := FALSE;
States.bCycleActive := FALSE;
END_IF END_IF
enOldMachMode := lMachine.enMode; enOldMachMode := lMachine.enMode;
IF NOT States.bCycleActive THEN
States.bLastCycle := FALSE;
END_IF
@@ -184,10 +190,13 @@ PROGRAM _CYCLIC
IF lMachine.enMode = enMACH_JOG THEN IF lMachine.enMode = enMACH_JOG THEN
DoManual; DoManual;
DoManVacValves;
ELSIF lMachine.enMode = enMACH_MANUAL THEN ELSIF lMachine.enMode = enMACH_MANUAL THEN
//Manueell
DoManualCNC; DoManualCNC;
//Vakuum
DoManVacValves;
//Automatik betrieb //Automatik betrieb
//========================================================================================== //==========================================================================================
@@ -196,12 +205,18 @@ PROGRAM _CYCLIC
VCButtons.AutoStartToolChange.usStatus.0 := (enStepAuto <> enAutoStep_WAIT_START); VCButtons.AutoStartToolChange.usStatus.0 := (enStepAuto <> enAutoStep_WAIT_START);
VCButtons.AutoStartHome.usStatus.0 := (enStepAuto <> enAutoStep_HOME_WAIT_START); VCButtons.AutoStartHome.usStatus.0 := (enStepAuto <> enAutoStep_HOME_WAIT_START);
VCButtons.AutoStartHome.usStatus.1 := NOT States.bSafetyCNCAxisOk; VCButtons.AutoStartHome.usStatus.1 := NOT States.bSafetyCNCAxisSLSOk;
VCButtons.AutoStartCycle.usStatus.0 := (enStepAuto <> enAutoStep_WAIT_START); VCButtons.AutoStartCycle.usStatus.0 := (enStepAuto <> enAutoStep_WAIT_START);
VCButtons.AutoStartCycle.usStatus.1 := FALSE AND NOT States.bSafetyCNCAxisOk; VCButtons.AutoStartCycle.usStatus.1 := FALSE AND NOT States.bSafetyCNCAxisSLSOk;
VCButtons.AutoStopCycle.usStatus.0 := (enStepAuto <> enAutoStep_CNC_FINISHED); VCButtons.AutoStopCycle.usStatus.0 := NOT States.bCycleActive;
VCButtons.AutoStopCycle.usStatus.1 := States.bLastCycle;
IF VCButtons.AutoStopCycle.bCommand THEN
States.bLastCycle := TRUE;
END_IF
VCButtons.AutoStopCNCCycle.usStatus.0 := (enStepAuto <> enAutoStep_CNC_FINISHED);
VCButtons.AutoRequestHome.usStatus.0 := (enStepAuto > enAutoStep_WAIT_START); VCButtons.AutoRequestHome.usStatus.0 := (enStepAuto > enAutoStep_WAIT_START);
@@ -228,20 +243,29 @@ PROGRAM _CYCLIC
enStepAuto := enAutoStep_INIT; enStepAuto := enAutoStep_INIT;
END_IF END_IF
IF EDGEPOS (lMachine.bRequestHoming) THEN IF EDGEPOS (lMachine.bRequestHoming) THEN
//FixMe enStepAuto := enAutoStep_INIT;
//enStepAuto := enAutoStep_INIT;
END_IF END_IF
//Notaus w<EFBFBD>hrend Automatik (in Schritten wo keine Unterbrechung gew<EFBFBD>nscht ist) //Notaus w<EFBFBD>hrend Automatik (in Schritten wo keine Unterbrechung gew<EFBFBD>nscht ist)
//Fixme bei GS auch pr<EFBFBD>fen
//-------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------
IF NOT States.bSafetyCNCAxisOk AND (enStepAuto > enAutoStep_WAIT_DOOR_CLOSED) AND (enStepAuto < enAutoStep_WAIT_DOOR_OPEN) THEN IF NOT States.bSafetyCNCAxisSS1Ok AND (enStepAuto > enAutoStep_WAIT_PART) AND (enStepAuto < enAutoStep_FINISHED) THEN
//Pr<EFBFBD>fen ob restart erlaubt //Pr<EFBFBD>fen ob restart erlaubt
DoResetAxCommands; DoResetAxCommands;
IF (enStepAuto >= enAutoStep_CNC_ACTIVE) AND (enStepAuto < enAutoStep_CNC_FINISHED) THEN IF (enStepAuto = enAutoStep_OPEN_GATE1) OR (enStepAuto = enAutoStep_OPEN_GATE2) OR (enStepAuto = enAutoStep_OPEN_GATES) OR
//FixMe Error (enStepAuto = enAutoStep_CLOSE_GATES) THEN
//Alels Ok kein eingriff
ELSIF (enStepAuto = enAutoStep_SHUTTLE1_IN) OR (enStepAuto = enAutoStep_SHUTTLE2_IN) OR (enStepAuto = enAutoStep_SHUTTLE_OUT) THEN
//Beim Shuttlen
enStepAuto := enAutoStep_INIT; enStepAuto := enAutoStep_INIT;
enStepAutoRestartPoint := enStepAuto; enStepAutoRestartPoint := enStepAuto;
TimesLatch.diStoptime := gdiSystemTime; TimesLatch.diStoptime := gdiSystemTime;
ELSIF (enStepAuto = enAutoStep_CNC_ACTIVE) OR (enStepAuto = enAutoStep_CNC_FINISHED) OR (enStepAuto = enAutoStep_CNC_HOME) THEN
//CNC --- Imer CNC Home
States.bStoppedCycle := TRUE;
enStepAuto := enAutoStep_INIT;
enStepAutoRestartPoint := enAutoStep_CNC_HOME;
TimesLatch.diStoptime := gdiSystemTime;
ELSE ELSE
enStepAutoRestartPoint := enStepAuto; enStepAutoRestartPoint := enStepAuto;
enStepAuto := enAutoStep_WAIT_RESTART; enStepAuto := enAutoStep_WAIT_RESTART;
@@ -249,13 +273,62 @@ PROGRAM _CYCLIC
END_IF END_IF
IF NOT States.bSafetyCNCAxisOk THEN IF NOT States.bSafetyCNCAxisSS1Ok THEN
DoResetAxCommands; DoResetAxCommands;
// enStepAuto := enAutoStep_INIT; // enStepAuto := enAutoStep_INIT;
END_IF END_IF
//Automatik Schrittkette Kartusche //Automatik
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
IF gLineInterface.In.bVacuumOnShuttle1 THEN
IF States.PosState.bHomeShuttle1 AND (gToolInterface.Shuttle1.Tool_State = enTOOL_EMPTY) THEN
gToolInterface.Shuttle1.ToTool.bVaccumOn := TRUE;
END_IF
END_IF
IF gLineInterface.In.bVacuumOnShuttle2 THEN
IF States.PosState.bHomeShuttle2 AND (gToolInterface.Shuttle1.Tool_State = enTOOL_EMPTY) THEN
gToolInterface.Shuttle2.ToTool.bVaccumOn := TRUE;
END_IF
END_IF
//Bauteil eingelegt
IF EDGEPOS (gLineInterface.In.bPlacedPartShuttle1) THEN
IF States.PosState.bHomeShuttle1 AND (gToolInterface.Shuttle1.Tool_State = enTOOL_EMPTY) THEN
//Neues Bauteil abgelegt
gToolInterface.Shuttle1.Tool_State := enTOOL_NEW_PART;
gToolInterface.Shuttle1.usPartID := gLineInterface.In.usPartIDShuttle1;
//FixMe else fehler
END_IF
END_IF
IF EDGEPOS (gLineInterface.In.bPlacedPartShuttle2) THEN
IF States.PosState.bHomeShuttle2 AND (gToolInterface.Shuttle2.Tool_State = enTOOL_EMPTY) THEN
//Neues Bauteil abgelegt
gToolInterface.Shuttle2.Tool_State := enTOOL_NEW_PART;
gToolInterface.Shuttle2.usPartID := gLineInterface.In.usPartIDShuttle2;
//FixMe else fehler
END_IF
END_IF
IF EDGEPOS (gLineInterface.In.bPickedPartShuttle1) THEN
IF States.PosState.bHomeShuttle1 AND (gToolInterface.Shuttle1.Tool_State = enTOOL_PART_FINISHED) THEN
//Neues Bauteil abgelegt
gToolInterface.Shuttle1.ToTool.bVaccumOn := FALSE;
gToolInterface.Shuttle1.Tool_State := enTOOL_EMPTY;
//FixMe else fehler
END_IF
END_IF
IF EDGEPOS (gLineInterface.In.bPickedPartShuttle2) THEN
IF States.PosState.bHomeShuttle2 AND (gToolInterface.Shuttle2.Tool_State = enTOOL_PART_FINISHED) THEN
//Neues Bauteil abgelegt
gToolInterface.Shuttle2.ToTool.bVaccumOn := FALSE;
gToolInterface.Shuttle2.Tool_State := enTOOL_EMPTY;
//FixMe else fehler
END_IF
END_IF
//Automatik Schrittkette //Automatik Schrittkette
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -264,6 +337,7 @@ PROGRAM _CYCLIC
//--------------------------- //---------------------------
enAutoStep_INIT: enAutoStep_INIT:
bTransitionCondition := TRUE; bTransitionCondition := TRUE;
MpFUB.MpCNC5Axis.MoveProgram := FALSE;
IF bTransitionCondition AND lMachine.bMachineHOME THEN IF bTransitionCondition AND lMachine.bMachineHOME THEN
enStepAuto := enAutoStep_WAIT_START; enStepAuto := enAutoStep_WAIT_START;
TimesLatch.diSteptime := gdiSystemTime; TimesLatch.diSteptime := gdiSystemTime;
@@ -278,146 +352,99 @@ PROGRAM _CYCLIC
//GS: Warten auf Start //GS: Warten auf Start
//--------------------------- //---------------------------
enAutoStep_HOME_WAIT_START: enAutoStep_HOME_WAIT_START:
bTransitionCondition := FALSE; // (EDGEPOS (gbInStartKey) OR VCButtons.AutoStartHome.bCommand) AND States.bSafetyCNCAxisOk; bTransitionCondition := States.bSafetyCNCAxisSLSOk AND States.bSafetyShuttlesSLSOk AND VCButtons.AutoStartHome.bCommand; // (EDGEPOS (gbInStartKey) OR VCButtons.AutoStartHome.bCommand) AND States.bSafetyCNCAxisOk;
IF bTransitionCondition THEN IF bTransitionCondition THEN
enStepAuto := enAutoStep_HOME_WAIT_DOORCLOSED; enStepAuto := enAutoStep_HOME_CNC_HOME;
TimesLatch.diSteptime := gdiSystemTime; TimesLatch.diSteptime := gdiSystemTime;
END_IF END_IF
//Warten bis Tor geschlossen //GS: CNC in GS Fahren
//--------------------------- //---------------------------
enAutoStep_HOME_WAIT_DOORCLOSED: enAutoStep_HOME_CNC_HOME:
Valves.bCloseGate := MoveConditions.bCloseFrontGate; //CNC in Grundstellung Fahren
bTransitionCondition := States.bSafetyCNCAxisOk; //evtl. verz<EFBFBD>gern IF NOT MpFUB.MpCNC5Axis.MoveProgram THEN
MpData.MpCnc5AxisPar.ProgramName := 'Service/CncHome.mpf';
END_IF
IF States.bSafetyCNCAxisSLSOk THEN
MpFUB.MpCNC5Axis.MoveProgram := TRUE;
END_IF
//Valves.bCloseGate := MoveConditions.bCloseFrontGate;
bTransitionCondition := MpFUB.MpCNC5Axis.MoveDone;
IF bTransitionCondition THEN IF bTransitionCondition THEN
enStepAuto := enAutoStep_HOME_WAIT_HOMING; MpFUB.MpCNC5Axis.MoveProgram := FALSE;
enStepAuto := enAutoStep_HOME_OPEN_GATES;
TimesLatch.diSteptime := gdiSystemTime; TimesLatch.diSteptime := gdiSystemTime;
END_IF END_IF
//GS: Tore bei Bedarf <EFBFBD>ffnen
//---------------------------
enAutoStep_HOME_OPEN_GATES:
IF NOT States.PosState.bHomeShuttle1 OR NOT States.CylinderPosState.bGateShuttle1Closed THEN
Valves.bOpenGateShuttle1 := TRUE;
Valves.bCloseGateShuttle1 := FALSE;
END_IF
IF NOT States.PosState.bHomeShuttle2 OR NOT States.CylinderPosState.bGateShuttle2Closed THEN
Valves.bOpenGateShuttle2 := TRUE;
Valves.bCloseGateShuttle2 := FALSE;
END_IF
bTransitionCondition := ((States.CylinderPosState.bGateShuttle1Closed AND States.PosState.bHomeShuttle1) OR States.CylinderPosState.bGateShuttle1Open) AND
//Warten bis Achsen Ref ((States.CylinderPosState.bGateShuttle2Closed AND States.PosState.bHomeShuttle2) OR States.CylinderPosState.bGateShuttle2Open);
//---------------------------
enAutoStep_HOME_WAIT_HOMING:
bTransitionCondition := MpFUB.AxBasic_X.IsHomed AND
MpFUB.AxBasic_Y.IsHomed AND
MpFUB.AxBasic_Z.IsHomed AND
MpFUB.AxBasic_A.IsHomed AND
MpFUB.AxBasic_C.IsHomed AND
MpFUB.AxBasic_Shuttle.IsHomed;
IF bTransitionCondition THEN IF bTransitionCondition THEN
enStepAuto := enAutoStep_HOME_WAIT_ZHOME; enStepAuto := enAutoStep_HOME_WAIT_SHUTTLEHOME;
TimesLatch.diSteptime := gdiSystemTime; TimesLatch.diSteptime := gdiSystemTime;
END_IF END_IF
//GS: Warten bis Z-Achse in GS gefahren
//---------------------------
enAutoStep_HOME_WAIT_ZHOME:
bTransitionCondition := MpFUB.AxBasic_Z.InPosition AND MpFUB.AxBasic_Z.MoveDone AND
NOT MpFUB.AxBasic_Z.CommandBusy AND MpFUB.AxBasic_Z.MoveAbsolute;
MpData.AxPar_Z.Velocity := Parameter.rVelocityAxisLinear; //mm/s
MpData.AxPar_Z.Acceleration := 1000.0; //mm/s2
MpData.AxPar_Z.Deceleration := 1000.0; //mm/s2
MpData.AxPar_Z.Position := pParamPositions.HomePos.lrZ; //FixMe False
MpFUB.AxBasic_Z.MoveAbsolute := TRUE;
IF bTransitionCondition THEN
MpFUB.AxBasic_Z.MoveAbsolute := FALSE;
enStepAuto := enAutoStep_HOME_WAIT_YHOME;
TimesLatch.diSteptime := gdiSystemTime;
END_IF
//GS: Warten bis Y-Achse in GS gefahren
//---------------------------
enAutoStep_HOME_WAIT_YHOME:
bTransitionCondition := MpFUB.AxBasic_Y.InPosition AND MpFUB.AxBasic_Y.MoveDone AND
NOT MpFUB.AxBasic_Y.CommandBusy AND MpFUB.AxBasic_Y.MoveAbsolute;
MpData.AxPar_Y.Velocity := Parameter.rVelocityAxisLinear; //mm/s
MpData.AxPar_Y.Acceleration := 1000.0; //mm/s2
MpData.AxPar_Y.Deceleration := 1000.0; //mm/s2
//MpData.AxPar_Y.Position := pParamPositions.lrHomePosY;
MpFUB.AxBasic_Y.MoveAbsolute := MoveConditions.bAxisYMove;
IF bTransitionCondition THEN
MpFUB.AxBasic_Y.MoveAbsolute := FALSE;
enStepAuto := enAutoStep_HOME_WAIT_XHOME;
TimesLatch.diSteptime := gdiSystemTime;
END_IF
//GS: Warten bis X-Achse in GS gefahren
//---------------------------
enAutoStep_HOME_WAIT_XHOME:
bTransitionCondition := MpFUB.AxBasic_X.InPosition AND MpFUB.AxBasic_X.MoveDone AND
NOT MpFUB.AxBasic_X.CommandBusy AND MpFUB.AxBasic_X.MoveAbsolute;
MpData.AxPar_X.Velocity := Parameter.rVelocityAxisLinear; //mm/s
MpData.AxPar_X.Acceleration := 1000.0; //mm/s2
MpData.AxPar_X.Deceleration := 1000.0; //mm/s2
//MpData.AxPar_X.Position := pParamPositions.lrHomePosX;
MpFUB.AxBasic_X.MoveAbsolute := TRUE;
IF bTransitionCondition THEN
MpFUB.AxBasic_X.MoveAbsolute := FALSE;
enStepAuto := enAutoStep_HOME_WAIT_AHOME;
TimesLatch.diSteptime := gdiSystemTime;
END_IF
//GS: Warten bis A-Achse in GS gefahren
//---------------------------
enAutoStep_HOME_WAIT_AHOME:
bTransitionCondition := MpFUB.AxBasic_A.InPosition AND MpFUB.AxBasic_A.MoveDone AND
NOT MpFUB.AxBasic_A.CommandBusy AND MpFUB.AxBasic_A.MoveAbsolute;
MpData.AxPar_A.Velocity := Parameter.rVelocityAxisAngle; //mm/s
MpData.AxPar_A.Acceleration := 360.0; //mm/s2
MpData.AxPar_A.Deceleration := 360.0; //mm/s2
//MpData.AxPar_A.Position := pParamPositions.lrHomePosA;
MpFUB.AxBasic_A.MoveAbsolute := TRUE;
IF bTransitionCondition THEN
MpFUB.AxBasic_A.MoveAbsolute := FALSE;
enStepAuto := enAutoStep_HOME_WAIT_BHOME;
TimesLatch.diSteptime := gdiSystemTime;
END_IF
//GS: Warten bis B-Achse in GS gefahren
//---------------------------
enAutoStep_HOME_WAIT_BHOME:
bTransitionCondition := MpFUB.AxBasic_C.InPosition AND MpFUB.AxBasic_C.MoveDone AND
NOT MpFUB.AxBasic_C.CommandBusy AND MpFUB.AxBasic_C.MoveAbsolute;
MpData.AxPar_C.Velocity := Parameter.rVelocityAxisAngle; //mm/s
MpData.AxPar_C.Acceleration := 360.0; //mm/s2
MpData.AxPar_C.Deceleration := 360.0; //mm/s2
//MpData.AxPar_C.Position := pParamPositions.lrHomePosB;
MpFUB.AxBasic_C.MoveAbsolute := TRUE;
IF bTransitionCondition THEN
MpFUB.AxBasic_C.MoveAbsolute := FALSE;
enStepAuto := enAutoStep_HOME_WAIT_SHUTTLEHOME;
TimesLatch.diSteptime := gdiSystemTime;
END_IF
//Shuttle in Grundstellung //Shuttle in Grundstellung
//--------------------------- //---------------------------
enAutoStep_HOME_WAIT_SHUTTLEHOME: enAutoStep_HOME_WAIT_SHUTTLEHOME:
bTransitionCondition := MpFUB.AxBasic_Shuttle.InPosition AND MpFUB.AxBasic_Shuttle.MoveDone AND bTransitionCondition := States.PosState.bHomeShuttle1 AND ((MpFUB.AxBasic_Shuttle.InPosition AND MpFUB.AxBasic_Shuttle.MoveDone AND
NOT MpFUB.AxBasic_Shuttle.CommandBusy AND MpFUB.AxBasic_Shuttle.MoveAbsolute; NOT MpFUB.AxBasic_Shuttle.CommandBusy AND MpFUB.AxBasic_Shuttle.MoveAbsolute) OR NOT MpFUB.AxBasic_Shuttle.MoveAbsolute) AND
MpData.AxPar_Shuttle.Velocity := Parameter.rVelocityAxisLinear; //mm/s States.PosState.bHomeShuttle2 AND ((MpFUB.AxBasic_Shuttle2.InPosition AND MpFUB.AxBasic_Shuttle2.MoveDone AND
NOT MpFUB.AxBasic_Shuttle2.CommandBusy AND MpFUB.AxBasic_Shuttle2.MoveAbsolute) OR NOT MpFUB.AxBasic_Shuttle2.MoveAbsolute);
MpData.AxPar_Shuttle.Velocity := Parameter.rVelocityShuttle; //mm/s
MpData.AxPar_Shuttle.Acceleration := 1000.0; //mm/s2 MpData.AxPar_Shuttle.Acceleration := 1000.0; //mm/s2
MpData.AxPar_Shuttle.Deceleration := 1000.0; //mm/s2 MpData.AxPar_Shuttle.Deceleration := 1000.0; //mm/s2
MpData.AxPar_Shuttle.Position := pParamPositions.lrHomePosShuttle; MpData.AxPar_Shuttle.Position := pParamPositions.lrHomePosShuttle1;
MpFUB.AxBasic_Shuttle.MoveAbsolute := MoveConditions.bAxisShuttleMovePos; IF NOT States.PosState.bHomeShuttle1 OR MpFUB.AxBasic_Shuttle.MoveAbsolute THEN
MpFUB.AxBasic_Shuttle.MoveAbsolute := MoveConditions.bAxisShuttleMoveNeg;
END_IF
MpData.AxPar_Shuttle2.Velocity := Parameter.rVelocityShuttle; //mm/s
MpData.AxPar_Shuttle2.Acceleration := 1000.0; //mm/s2
MpData.AxPar_Shuttle2.Deceleration := 1000.0; //mm/s2
MpData.AxPar_Shuttle2.Position := pParamPositions.lrHomePosShuttle2;
MpFUB.AxBasic_Shuttle2.MoveAbsolute := MoveConditions.bAxisShuttle2MovePos;
IF bTransitionCondition THEN IF bTransitionCondition THEN
MpFUB.AxBasic_Shuttle.MoveAbsolute := FALSE; MpFUB.AxBasic_Shuttle.MoveAbsolute := FALSE;
MpFUB.AxBasic_Shuttle2.MoveAbsolute := FALSE;
gToolInterface.Shuttle1.ToTool.bVaccumOn := FALSE;
gToolInterface.Shuttle2.ToTool.bVaccumOn := FALSE;
TimesLatch.diSteptime := gdiSystemTime; TimesLatch.diSteptime := gdiSystemTime;
enStepAuto := enAutoStep_HOME_WAIT_DOOROPEN; enStepAuto := enAutoStep_HOME_CLOSE_GATES;
END_IF END_IF
//T<EFBFBD>r <EFBFBD>ffnen //GS: T<EFBFBD>r schlie<EFBFBD>en
//--------------------------- //---------------------------
enAutoStep_HOME_WAIT_DOOROPEN: enAutoStep_HOME_CLOSE_GATES:
Valves.bCloseGate := FALSE; IF MoveConditions.bCloseGateShuttle1 THEN
//bTransitionCondition := gbInFrontGateOpen; Valves.bCloseGateShuttle1 := TRUE;
Valves.bOpenGateShuttle1 := FALSE;
END_IF
IF MoveConditions.bCloseGateShuttle2 THEN
Valves.bCloseGateShuttle2 := TRUE;
Valves.bOpenGateShuttle2 := FALSE;
END_IF
bTransitionCondition := States.CylinderPosState.bGateShuttle1Closed AND States.CylinderPosState.bGateShuttle2Closed;
IF bTransitionCondition THEN IF bTransitionCondition THEN
TimesLatch.diSteptime := gdiSystemTime; TimesLatch.diSteptime := gdiSystemTime;
@@ -425,10 +452,10 @@ PROGRAM _CYCLIC
END_IF END_IF
//Warten auf Start nach Notaus (inaktiv) //GS: Warten auf Start nach Notaus (inaktiv)
//--------------------------- //---------------------------
enAutoStep_WAIT_RESTART: enAutoStep_WAIT_RESTART:
bTransitionCondition := States.bSafetyCNCAxisOkDelayed AND (Times.diSteptime > 200000) AND MpFUB.MpCNC5Axis.PowerOn; bTransitionCondition := States.bSafetyCNCAxisSS1OkDelayed AND (Times.diSteptime > 200000) AND MpFUB.MpCNC5Axis.PowerOn;
IF bTransitionCondition THEN IF bTransitionCondition THEN
enStepAuto := enStepAutoRestartPoint; enStepAuto := enStepAutoRestartPoint;
@@ -439,84 +466,138 @@ PROGRAM _CYCLIC
//Warten auf Start //Warten auf Start
//--------------------------- //---------------------------
enAutoStep_WAIT_START: enAutoStep_WAIT_START:
States.bCycleActive := FALSE;
//Werkzeugwechsel States.bLastCycle := FALSE;
//bTransitionCondition := VCButtons.AutoStartToolChange.bCommand;
bTransitionCondition := FALSE; //EDGEPOS (gbInStartKey) OR EDGEPOS (VCButtons.AutoStartCycle.bCommand); bTransitionCondition := VCButtons.AutoStartCycle.bCommand; //EDGEPOS (gbInStartKey) OR EDGEPOS (VCButtons.AutoStartCycle.bCommand);
//Fehler erzeugen Prozessrelevant //Fehler erzeugen Prozessrelevant
IF bTransitionCondition IF bTransitionCondition THEN
AND NOT MpAlarmXCheckReaction (gMpAlarmXCore, 'ReactionLockAuto') States.bCycleActive := TRUE;
AND NOT MpAlarmXCheckReaction (gMpAlarmXCore, 'ReactionDisableAutoMovement') THEN
FOR udi := brsstrlen (ADR (gResult.strSerialNr)) TO 10 DO
brsstrcat (ADR (gResult.strSerialNr), ADR (' '));
END_FOR
brsstrcat (ADR (gResult.strSerialNr), ADR (strMachinename));
brsstrcat (ADR (gResult.strSerialNr), ADR ('_'));
brsstrcat (ADR (gResult.strSerialNr), ADR (strTemp));
TimesLatch.diSteptime := gdiSystemTime; TimesLatch.diSteptime := gdiSystemTime;
TimesLatch.diCycletime := gdiSystemTime; TimesLatch.diCycletime := gdiSystemTime;
enStepAuto := enAutoStep_WAIT_DOOR_CLOSED; enStepAuto := enAutoStep_WAIT_PART;
END_IF END_IF
//Warten bis Tor geschlossen //Warten bis Tor geschlossen
//--------------------------- //---------------------------
enAutoStep_WAIT_DOOR_CLOSED: enAutoStep_WAIT_PART:
Valves.bCloseGate := MoveConditions.bCloseFrontGate; bTransitionCondition := States.bSafetyCNCAxisSS1OkDelayed; //FixMe Einschaltverzoegert
bTransitionCondition := States.bSafetyCNCAxisOkDelayed; //FixMe Einschaltverzoegert IF (gToolInterface.Shuttle1.Tool_State = enTOOL_NEW_PART) AND gLineInterface.In.bRobOutOfShuttle1 AND bTransitionCondition THEN
IF bTransitionCondition THEN enStepAuto := enAutoStep_OPEN_GATE1;
enStepAuto := enAutoStep_WAIT_HOMING; ELSIF (gToolInterface.Shuttle2.Tool_State = enTOOL_NEW_PART) AND gLineInterface.In.bRobOutOfShuttle2 AND bTransitionCondition THEN
enStepAuto := enAutoStep_OPEN_GATE2;
TimesLatch.diSteptime := gdiSystemTime; TimesLatch.diSteptime := gdiSystemTime;
END_IF END_IF
//Warten bis Achsen Ref //Tor Shuttle 1 <EFBFBD>ffnen
//--------------------------- //---------------------------
enAutoStep_WAIT_HOMING: enAutoStep_OPEN_GATE1:
bTransitionCondition := MpFUB.AxBasic_X.IsHomed AND Valves.bCloseGateShuttle1 := FALSE;
MpFUB.AxBasic_Y.IsHomed AND Valves.bOpenGateShuttle1 := TRUE;
MpFUB.AxBasic_Z.IsHomed AND
MpFUB.AxBasic_A.IsHomed AND bTransitionCondition := States.CylinderPosState.bGateShuttle1Open;
MpFUB.AxBasic_C.IsHomed AND
MpFUB.AxBasic_Shuttle.IsHomed;
IF bTransitionCondition THEN IF bTransitionCondition THEN
enStepAuto := enAutoStep_SHUTTLE_IN; enStepAuto := enAutoStep_SHUTTLE1_IN;
TimesLatch.diSteptime := gdiSystemTime; TimesLatch.diSteptime := gdiSystemTime;
END_IF END_IF
//Schuttle in Bearbeitungspos //Schuttle in Bearbeitungspos
//--------------------------- //---------------------------
enAutoStep_SHUTTLE_IN: enAutoStep_SHUTTLE1_IN:
bTransitionCondition := MpFUB.AxBasic_Shuttle.InPosition AND MpFUB.AxBasic_Shuttle.MoveDone AND bTransitionCondition := States.PosState.bWorkposShuttle1 AND MpFUB.AxBasic_Shuttle.InPosition AND MpFUB.AxBasic_Shuttle.MoveDone AND
NOT MpFUB.AxBasic_Shuttle.CommandBusy AND MpFUB.AxBasic_Shuttle.MoveAbsolute; NOT MpFUB.AxBasic_Shuttle.CommandBusy AND MpFUB.AxBasic_Shuttle.MoveAbsolute;
MpData.AxPar_Shuttle.Velocity := Parameter.rVelocityAxisLinear; //mm/s MpData.AxPar_Shuttle.Velocity := Parameter.rVelocityShuttle; //mm/s
MpData.AxPar_Shuttle.Acceleration := 1000.0; //mm/s2 MpData.AxPar_Shuttle.Acceleration := 2000.0; //mm/s2
MpData.AxPar_Shuttle.Deceleration := 1000.0; //mm/s2 MpData.AxPar_Shuttle.Deceleration := 2000.0; //mm/s2
MpData.AxPar_Shuttle.Position := pParamPositions.lrWorkPosShuttle; MpData.AxPar_Shuttle.Position := pParamPositions.lrWorkPosShuttle1;
MpFUB.AxBasic_Shuttle.MoveAbsolute := MoveConditions.bAxisShuttleMoveNeg; MpFUB.AxBasic_Shuttle.MoveAbsolute := MoveConditions.bAxisShuttleMovePos;
IF bTransitionCondition THEN IF bTransitionCondition THEN
MpFUB.AxBasic_Shuttle.MoveAbsolute := FALSE; MpFUB.AxBasic_Shuttle.MoveAbsolute := FALSE;
TimesLatch.diSteptime := gdiSystemTime; TimesLatch.diSteptime := gdiSystemTime;
enStepAuto := enAutoStep_CLOSE_GATE1;
END_IF
//Tor Shuttle 1 schlie<EFBFBD>en
//---------------------------
enAutoStep_CLOSE_GATE1:
Valves.bCloseGateShuttle1 := MoveConditions.bCloseGateShuttle1;
Valves.bOpenGateShuttle1 := FALSE;
bTransitionCondition := States.CylinderPosState.bGateShuttle1Closed;
IF bTransitionCondition THEN
enStepAuto := enAutoStep_CNC_ACTIVE; enStepAuto := enAutoStep_CNC_ACTIVE;
END_IF TimesLatch.diSteptime := gdiSystemTime;
END_IF
//Tor Shuttle 2 <EFBFBD>ffnen
//---------------------------
enAutoStep_OPEN_GATE2:
Valves.bCloseGateShuttle2 := FALSE;
Valves.bOpenGateShuttle2 := TRUE;
bTransitionCondition := States.CylinderPosState.bGateShuttle2Open;
IF bTransitionCondition THEN
enStepAuto := enAutoStep_SHUTTLE2_IN;
TimesLatch.diSteptime := gdiSystemTime;
END_IF
//Schuttle in Bearbeitungspos
//---------------------------
enAutoStep_SHUTTLE2_IN:
bTransitionCondition := States.PosState.bWorkposShuttle2 AND MpFUB.AxBasic_Shuttle2.InPosition AND MpFUB.AxBasic_Shuttle2.MoveDone AND
NOT MpFUB.AxBasic_Shuttle2.CommandBusy AND MpFUB.AxBasic_Shuttle2.MoveAbsolute;
MpData.AxPar_Shuttle2.Velocity := Parameter.rVelocityShuttle; //mm/s
MpData.AxPar_Shuttle2.Acceleration := 2000.0; //mm/s2
MpData.AxPar_Shuttle2.Deceleration := 2000.0; //mm/s2
MpData.AxPar_Shuttle2.Position := pParamPositions.lrWorkPosShuttle2;
MpFUB.AxBasic_Shuttle2.MoveAbsolute := MoveConditions.bAxisShuttleMoveNeg;
IF bTransitionCondition THEN
MpFUB.AxBasic_Shuttle2.MoveAbsolute := FALSE;
TimesLatch.diSteptime := gdiSystemTime;
enStepAuto := enAutoStep_CLOSE_GATE2;
END_IF
//Tor Shuttle 2 schlie<EFBFBD>en
//---------------------------
enAutoStep_CLOSE_GATE2:
Valves.bCloseGateShuttle2 := MoveConditions.bCloseGateShuttle2;
Valves.bOpenGateShuttle2 := FALSE;
bTransitionCondition := States.CylinderPosState.bGateShuttle2Closed;
IF bTransitionCondition THEN
enStepAuto := enAutoStep_CNC_ACTIVE;
TimesLatch.diSteptime := gdiSystemTime;
END_IF
//CNC Starten //CNC Starten
//--------------------------- //---------------------------
enAutoStep_CNC_ACTIVE: enAutoStep_CNC_ACTIVE:
bTransitionCondition := (Parameter.bTestRun OR (Times.diSteptime > 500000)); strCurrentCncPrg := '';
strCurrentCncPrg := gstrFilenames[usCncPrgSelection]; FOR usi := 1 TO UINT_TO_USINT (MAX_RECIPE) DO
MpData.MpCnc5AxisPar.ProgramName := strCurrentCncPrg; IF (States.PosState.bWorkposShuttle1 AND (gRecipies[usi].usPartID = gToolInterface.Shuttle1.usPartID)) OR
//MpData.MpCnc5AxisPar.ProgramName := lCurrentTool.SysPar.strCNCPrg; (States.PosState.bWorkposShuttle2 AND (gRecipies[usi].usPartID = gToolInterface.Shuttle1.usPartID)) THEN
strCurrentCncPrg := gRecipies[usi].strCNCPrg;
uiTestMinPowerLaser := gRecipies[usi].uiLaserPowerMin;
uiTestPowerLaser := gRecipies[usi].uiLaserPower;
EXIT;
END_IF
END_FOR;
//Parameter fixieren und an CNC Schreiben //Parameter fixieren und an CNC Schreiben
MpData.MpCnc5AxisPar.ProgramName := strCurrentCncPrg;
bTransitionCondition := (Parameter.bTestRun OR (Times.diSteptime > 500000));
IF bTransitionCondition THEN IF bTransitionCondition THEN
MpFUB.MpCNC5Axis.MoveProgram := TRUE; MpFUB.MpCNC5Axis.MoveProgram := TRUE;
TimesLatch.diSteptime := gdiSystemTime; TimesLatch.diSteptime := gdiSystemTime;
enStepAuto := enAutoStep_CNC_FINISHED; enStepAuto := enAutoStep_CNC_FINISHED;
States.bStoppedCycle := FALSE;
bStartMoveCmd := FALSE; bStartMoveCmd := FALSE;
END_IF END_IF
@@ -528,132 +609,150 @@ PROGRAM _CYCLIC
//CNC Program Ende //CNC Program Ende
bTransitionCondition := MpFUB.MpCNC5Axis.MoveDone; bTransitionCondition := MpFUB.MpCNC5Axis.MoveDone;
IF VCButtons.AutoStopCycle.bCommand THEN IF VCButtons.AutoStopCNCCycle.bCommand THEN
//Abbruch //Abbruch
MpFUB.MpCNC5Axis.MoveProgram := FALSE; MpFUB.MpCNC5Axis.MoveProgram := FALSE;
States.bStoppedCycle := TRUE;
TimesLatch.diSteptime := gdiSystemTime; TimesLatch.diSteptime := gdiSystemTime;
enStepAuto := enAutoStep_WAIT_DOOR_OPEN;
ELSIF bTransitionCondition THEN ELSIF bTransitionCondition THEN
MpFUB.MpCNC5Axis.MoveProgram := FALSE; MpFUB.MpCNC5Axis.MoveProgram := FALSE;
IF States.PosState.bWorkposShuttle1 THEN
gLineInterface.Out.udCutTimeShuttle1 := Times.diSteptime;
gToolInterface.Shuttle1.Tool_State := enTOOL_PART_FINISHED;
gLineInterface.Out.bFinishedPartIOShuttle1 := NOT States.bStoppedCycle;
ELSIF States.PosState.bWorkposShuttle1 THEN
gLineInterface.Out.udCutTimeShuttle1 := Times.diSteptime;
gToolInterface.Shuttle2.Tool_State := enTOOL_PART_FINISHED;
gLineInterface.Out.bFinishedPartIOShuttle2 := NOT States.bStoppedCycle;
END_IF
TimesLatch.diSteptime := gdiSystemTime; TimesLatch.diSteptime := gdiSystemTime;
enStepAuto := enAutoStep_ZHOME; IF States.bStoppedCycle THEN
enStepAuto := enAutoStep_CNC_HOME;
ELSE
enStepAuto := enAutoStep_OPEN_GATES;
END_IF
END_IF END_IF
//Warten bis Z-Achse in GS gefahren
//CNC in GS Fahren
//--------------------------- //---------------------------
enAutoStep_ZHOME: enAutoStep_CNC_HOME:
bTransitionCondition := MpFUB.AxBasic_Z.InPosition AND MpFUB.AxBasic_Z.MoveDone AND //CNC in Grundstellung Fahren
NOT MpFUB.AxBasic_Z.CommandBusy AND MpFUB.AxBasic_Z.MoveAbsolute; IF NOT MpFUB.MpCNC5Axis.MoveProgram THEN
MpData.AxPar_Z.Velocity := Parameter.rVelocityAxisLinear; //mm/s MpData.MpCnc5AxisPar.ProgramName := 'Service/CncHome.mpf';
MpData.AxPar_Z.Acceleration := 1000.0; //mm/s2 END_IF
MpData.AxPar_Z.Deceleration := 1000.0; //mm/s2 IF States.bSafetyCNCAxisSLSOk THEN
//MpData.AxPar_Z.Position := pParamPositions.lrHomePosZ; MpFUB.MpCNC5Axis.MoveProgram := TRUE;
MpFUB.AxBasic_Z.MoveAbsolute := TRUE; END_IF
bTransitionCondition := MpFUB.MpCNC5Axis.MoveDone;
IF bTransitionCondition THEN IF bTransitionCondition THEN
MpFUB.AxBasic_Z.MoveAbsolute := FALSE; MpFUB.MpCNC5Axis.MoveProgram := FALSE;
enStepAuto := enAutoStep_YHOME; enStepAuto := enAutoStep_OPEN_GATES;
TimesLatch.diSteptime := gdiSystemTime; TimesLatch.diSteptime := gdiSystemTime;
END_IF END_IF
//Warten bis Y-Achse in GS gefahren
//Tore <EFBFBD>ffnen
//--------------------------- //---------------------------
enAutoStep_YHOME: enAutoStep_OPEN_GATES:
bTransitionCondition := MpFUB.AxBasic_Y.InPosition AND MpFUB.AxBasic_Y.MoveDone AND IF States.PosState.bWorkposShuttle1 THEN
NOT MpFUB.AxBasic_Y.CommandBusy AND MpFUB.AxBasic_Y.MoveAbsolute; Valves.bOpenGateShuttle1 := TRUE;
MpData.AxPar_Y.Velocity := Parameter.rVelocityAxisLinear; //mm/s Valves.bCloseGateShuttle1 := FALSE;
MpData.AxPar_Y.Acceleration := 1000.0; //mm/s2
MpData.AxPar_Y.Deceleration := 1000.0; //mm/s2
//MpData.AxPar_Y.Position := pParamPositions.lrHomePosY;
MpFUB.AxBasic_Y.MoveAbsolute := MoveConditions.bAxisYMove;
IF bTransitionCondition THEN
MpFUB.AxBasic_Y.MoveAbsolute := FALSE;
TimesLatch.diSteptime := gdiSystemTime;
enStepAuto := enAutoStep_XHOME;
END_IF END_IF
IF States.PosState.bWorkposShuttle2 THEN
//Warten bis X-Achse in GS gefahren Valves.bOpenGateShuttle2 := TRUE;
//--------------------------- Valves.bCloseGateShuttle2 := FALSE;
enAutoStep_XHOME: END_IF
bTransitionCondition := MpFUB.AxBasic_X.InPosition AND MpFUB.AxBasic_X.MoveDone AND
NOT MpFUB.AxBasic_X.CommandBusy AND MpFUB.AxBasic_X.MoveAbsolute; bTransitionCondition := ((States.CylinderPosState.bGateShuttle1Closed AND States.PosState.bHomeShuttle1) OR States.CylinderPosState.bGateShuttle1Open) AND
MpData.AxPar_X.Velocity := Parameter.rVelocityAxisLinear; //mm/s ((States.CylinderPosState.bGateShuttle2Closed AND States.PosState.bHomeShuttle2) OR States.CylinderPosState.bGateShuttle2Open);
MpData.AxPar_X.Acceleration := 1000.0; //mm/s2
MpData.AxPar_X.Deceleration := 1000.0; //mm/s2
//MpData.AxPar_X.Position := pParamPositions.lrHomePosX;
MpFUB.AxBasic_X.MoveAbsolute := MoveConditions.bAxisXMove;
IF bTransitionCondition THEN IF bTransitionCondition THEN
MpFUB.AxBasic_Y.MoveAbsolute := FALSE; enStepAuto := enAutoStep_SHUTTLE_OUT;
TimesLatch.diSteptime := gdiSystemTime; TimesLatch.diSteptime := gdiSystemTime;
enStepAuto := enAutoStep_AHOME;
END_IF END_IF
//Warten bis A-Achse in GS gefahren
//---------------------------
enAutoStep_AHOME:
bTransitionCondition := MpFUB.AxBasic_A.InPosition AND MpFUB.AxBasic_A.MoveDone AND
NOT MpFUB.AxBasic_A.CommandBusy AND MpFUB.AxBasic_A.MoveAbsolute;
MpData.AxPar_A.Velocity := Parameter.rVelocityAxisAngle; //<EFBFBD>/s
MpData.AxPar_A.Acceleration := 360.0; //<EFBFBD>/s2
MpData.AxPar_A.Deceleration := 360.0; //<EFBFBD>/s2
//MpData.AxPar_A.Position := pParamPositions.lrHomePosA;
MpFUB.AxBasic_A.MoveAbsolute := MoveConditions.bAxisAMove;
IF bTransitionCondition THEN
MpFUB.AxBasic_A.MoveAbsolute := FALSE;
TimesLatch.diSteptime := gdiSystemTime;
enStepAuto := enAutoStep_BHOME;
END_IF
//Warten bis B-Achse in GS gefahren
//---------------------------
enAutoStep_BHOME:
bTransitionCondition := MpFUB.AxBasic_C.InPosition AND MpFUB.AxBasic_C.MoveDone AND
NOT MpFUB.AxBasic_C.CommandBusy AND MpFUB.AxBasic_C.MoveAbsolute;
MpData.AxPar_C.Velocity := Parameter.rVelocityAxisAngle; //<EFBFBD>/s
MpData.AxPar_C.Acceleration := 360.0; //<EFBFBD>/s2
MpData.AxPar_C.Deceleration := 360.0; //<EFBFBD>/s2
//MpData.AxPar_C.Position := pParamPositions.lrHomePosB;
MpFUB.AxBasic_C.MoveAbsolute := MoveConditions.bAxisBMove;
IF bTransitionCondition THEN
MpFUB.AxBasic_C.MoveAbsolute := FALSE;
TimesLatch.diSteptime := gdiSystemTime;
enStepAuto := enAutoStep_SHUTTLE_OUT;
END_IF
//Shuttle in Grundstellung //Shuttle in Grundstellung
//--------------------------- //---------------------------
enAutoStep_SHUTTLE_OUT: enAutoStep_SHUTTLE_OUT:
bTransitionCondition := MpFUB.AxBasic_Shuttle.InPosition AND MpFUB.AxBasic_Shuttle.MoveDone AND bTransitionCondition := States.PosState.bHomeShuttle1 AND (
NOT MpFUB.AxBasic_Shuttle.CommandBusy AND MpFUB.AxBasic_Shuttle.MoveAbsolute; (MpFUB.AxBasic_Shuttle.InPosition AND MpFUB.AxBasic_Shuttle.MoveDone AND NOT MpFUB.AxBasic_Shuttle.CommandBusy AND MpFUB.AxBasic_Shuttle.MoveAbsolute)
MpData.AxPar_Shuttle.Velocity := Parameter.rVelocityAxisLinear; //mm/s OR States.CylinderPosState.bGateShuttle1Closed
) AND
States.PosState.bHomeShuttle2 AND (
(MpFUB.AxBasic_Shuttle2.InPosition AND MpFUB.AxBasic_Shuttle2.MoveDone AND NOT MpFUB.AxBasic_Shuttle2.CommandBusy AND MpFUB.AxBasic_Shuttle2.MoveAbsolute)
OR States.CylinderPosState.bGateShuttle2Closed
);
MpData.AxPar_Shuttle.Velocity := Parameter.rVelocityShuttle; //mm/s
MpData.AxPar_Shuttle.Acceleration := 1000.0; //mm/s2 MpData.AxPar_Shuttle.Acceleration := 1000.0; //mm/s2
MpData.AxPar_Shuttle.Deceleration := 1000.0; //mm/s2 MpData.AxPar_Shuttle.Deceleration := 1000.0; //mm/s2
MpData.AxPar_Shuttle.Position := pParamPositions.lrHomePosShuttle; MpData.AxPar_Shuttle.Position := pParamPositions.lrHomePosShuttle1;
MpFUB.AxBasic_Shuttle.MoveAbsolute := MoveConditions.bAxisShuttleMovePos; IF NOT States.PosState.bHomeShuttle1 OR MpFUB.AxBasic_Shuttle.MoveAbsolute THEN
MpFUB.AxBasic_Shuttle.MoveAbsolute := MoveConditions.bAxisShuttleMoveNeg;
END_IF
MpData.AxPar_Shuttle2.Velocity := Parameter.rVelocityShuttle; //mm/s
MpData.AxPar_Shuttle2.Acceleration := 1000.0; //mm/s2
MpData.AxPar_Shuttle2.Deceleration := 1000.0; //mm/s2
MpData.AxPar_Shuttle2.Position := pParamPositions.lrHomePosShuttle2;
MpFUB.AxBasic_Shuttle2.MoveAbsolute := MoveConditions.bAxisShuttle2MovePos;
IF bTransitionCondition THEN IF bTransitionCondition THEN
MpFUB.AxBasic_Shuttle.MoveAbsolute := FALSE;
MpFUB.AxBasic_Shuttle2.MoveAbsolute := FALSE;
IF (gToolInterface.Shuttle1.Tool_State = enTOOL_PART_FINISHED) THEN
gToolInterface.Shuttle1.ToTool.bVaccumOn := FALSE;
END_IF
IF (gToolInterface.Shuttle2.Tool_State = enTOOL_PART_FINISHED) THEN
gToolInterface.Shuttle2.ToTool.bVaccumOn := FALSE;
END_IF
TimesLatch.diSteptime := gdiSystemTime; TimesLatch.diSteptime := gdiSystemTime;
enStepAuto := enAutoStep_WAIT_DOOR_OPEN; enStepAuto := enAutoStep_CLOSE_GATES;
END_IF END_IF
//T<EFBFBD>r <EFBFBD>ffnen //T<EFBFBD>r <EFBFBD>ffnen
//--------------------------- //---------------------------
enAutoStep_WAIT_DOOR_OPEN: enAutoStep_CLOSE_GATES:
Valves.bCloseGate := FALSE; IF MoveConditions.bCloseGateShuttle1 THEN
// bTransitionCondition := gbInFrontGateOpen; Valves.bCloseGateShuttle1 := TRUE;
Valves.bOpenGateShuttle1 := FALSE;
END_IF
IF MoveConditions.bCloseGateShuttle2 THEN
Valves.bCloseGateShuttle2 := TRUE;
Valves.bOpenGateShuttle2 := FALSE;
END_IF
bTransitionCondition := States.CylinderPosState.bGateShuttle1Closed AND States.CylinderPosState.bGateShuttle2Closed;
IF bTransitionCondition THEN
TimesLatch.diSteptime := gdiSystemTime;
enStepAuto := enAutoStep_FINISHED;
END_IF
//Beendet
//---------------------------
enAutoStep_FINISHED:
bTransitionCondition := TRUE;
IF bTransitionCondition THEN IF bTransitionCondition THEN
enStepAuto := enAutoStep_INIT; IF States.bLastCycle THEN
States.bLastCycle := FALSE;
States.bCycleActive := FALSE;
enStepAuto := enAutoStep_INIT;
ELSE
enStepAuto := enAutoStep_WAIT_PART;
END_IF
TimesLatch.diSteptime := gdiSystemTime; TimesLatch.diSteptime := gdiSystemTime;
gResult.diCycleTime := Times.diCycletime / 1000000; //[<EFBFBD>s > s] gResult.diCycleTime := Times.diCycletime / 1000000; //[<EFBFBD>s > s]
//Times.udCycletimeLast := Times.udCycletime; //Times.udCycletimeLast := Times.udCycletime;
gResult.Cmd.bCreateReport := NOT Parameter.bTestRun; // Protokoll estellen //gResult.Cmd.bCreateReport := NOT Parameter.bTestRun; // Protokoll estellen
END_IF END_IF
END_CASE END_CASE
END_IF END_IF
@@ -736,7 +835,22 @@ PROGRAM _CYCLIC
END_IF END_IF
//M108 -Befehl Schneidgas Ein
//nicht blockierend
//---------------------------
IF MFlags.b108_CutGasOn THEN
gIPGLaserInterface.Out.bCuttingGasOn := States.bSafetyLaserOk;
MFlags.b108_CutGasOn := FALSE;
END_IF
//M108 -Befehl Schneidgas Aus
//nicht blockierend
//---------------------------
IF MFlags.b109_CutGasOff THEN
gIPGLaserInterface.Out.bCuttingGasOn := FALSE;
MFlags.b108_CutGasOn := FALSE;
END_IF
//M110 -Befehl Hoehenregulierung deaktivieren //M110 -Befehl Hoehenregulierung deaktivieren
//nicht blockierend //nicht blockierend
//aktuelle H<EFBFBD>he wird gehalten //aktuelle H<EFBFBD>he wird gehalten
@@ -779,7 +893,7 @@ PROGRAM _CYCLIC
IF EDGEPOS (gRTLaserInterface.In.bHeadCalibrated) THEN IF EDGEPOS (gRTLaserInterface.In.bHeadCalibrated) THEN
gRTLaserInterface.Out.bCalibrateLaser := FALSE; gRTLaserInterface.Out.bCalibrateLaser := FALSE;
gRTLaserInterface.Out.bMidPos := TRUE; gRTLaserInterface.Out.bMidPos := TRUE;
ELSIF gRTLaserInterface.In.bHeadCalibrated AND gRTLaserInterface.In.bHeadIsMidPos THEN ELSIF EDGEPOS (gRTLaserInterface.In.bHeadIsMidPos) AND NOT gRTLaserInterface.Out.bCalibrateLaser THEN
MFlags.b113_CalibrateLaser := FALSE; MFlags.b113_CalibrateLaser := FALSE;
END_IF END_IF
ELSE ELSE
@@ -805,7 +919,6 @@ PROGRAM _CYCLIC
END_IF END_IF
//FixMe Laser bei Fehler Raytools ausschaulten
//Adaptive Laserleistung //Adaptive Laserleistung
//Bahnfaktor berechnen //Bahnfaktor berechnen
@@ -827,11 +940,13 @@ PROGRAM _CYCLIC
IF gIPGLaserInterface.Out.bPilotLaserOn THEN IF gIPGLaserInterface.Out.bPilotLaserOn THEN
//Leistung f<EFBFBD>r Pilotlaser simulieren zum Tracen //Leistung f<EFBFBD>r Pilotlaser simulieren zum Tracen
uiTestPowerLaserSimulation := uiTestMinPowerLaser + REAL_TO_UINT (UINT_TO_REAL (uiTestPowerLaser - uiTestMinPowerLaser) * rPowerFactor); uiTestPowerLaserSimulation := uiTestMinPowerLaser + REAL_TO_UINT (UINT_TO_REAL (uiTestPowerLaser - uiTestMinPowerLaser) * rPowerFactor);
END_IF END_IF
END_IF
ELSIF MpFUB.MpCNC5Axis.MoveActive THEN
bOuLEDKeyStart := MpFUB.MpCNC5Axis.MoveActive AND gbSPLCInMaintDoorOk AND (lMachine.enMode = enMACH_MANUAL);
IF MpFUB.MpCNC5Axis.MoveActive THEN
//Achsgruppe in Bewegung //Achsgruppe in Bewegung
gMP7121.LED_Run := enLED_ON; gMP7121.LED_Run := enLED_ON;
ELSE ELSE
@@ -839,10 +954,13 @@ PROGRAM _CYCLIC
gMP7121.LED_Run := enLED_OFF; gMP7121.LED_Run := enLED_OFF;
END_IF END_IF
IF NOT MpFUB.MpCNC5Axis.MoveProgram THEN //Zur<EFBFBD>cksetzen
IF NOT MpFUB.MpCNC5Axis.MoveProgram OR MpFUB.MpCNC5Axis.Error THEN
MFlags.b103_LaserOn := FALSE; MFlags.b103_LaserOn := FALSE;
MFlags.b105_LaserOff := FALSE; MFlags.b105_LaserOff := FALSE;
MFlags.b108_CutGasOn := FALSE;
MFlags.b109_CutGasOff := FALSE;
MFlags.b110_StayAtHeight := FALSE; MFlags.b110_StayAtHeight := FALSE;
MFlags.b111_StayAtMid := FALSE; MFlags.b111_StayAtMid := FALSE;
MFlags.b112_FullPowerOn := FALSE; MFlags.b112_FullPowerOn := FALSE;
@@ -861,11 +979,15 @@ PROGRAM _CYCLIC
IF States.TestMode.bNoHeightCtrl THEN IF States.TestMode.bNoHeightCtrl THEN
States.TestMode.bNoLaser := TRUE; States.TestMode.bNoLaser := TRUE;
END_IF END_IF
gIPGLaserInterface.Out.bEnalbeLaser := NOT States.TestMode.bNoLaser AND MpFUB.MpCNC5Axis.MoveProgram; // AND States.bSafetyLaserOk FixME
gIPGLaserInterface.Out.bEnalbeLaser := NOT States.TestMode.bNoLaser AND MpFUB.MpCNC5Axis.MoveProgram AND NOT MpAlarmXCheckReaction (gMpAlarmXCore, 'ReactionLaserOff'); // AND States.bSafetyLaserOk FixME
//Linieninterface
DoLineInterface;
//Ventile ansteuern (Sicherheit mit einschleifen) //Ventile ansteuern
DoValves;
//Fehlermeldungen //Fehlermeldungen

View File

@@ -2,7 +2,7 @@
PROGRAM _EXIT PROGRAM _EXIT
//Mapp Bausteine deaktivieren !!! //Mapp Bausteine deaktivieren !!!
//FixMe nicht f<EFBFBD>r MappMotion //nicht f<EFBFBD>r MappMotion
// MpFUB.PSM.Enable := FALSE; // MpFUB.PSM.Enable := FALSE;
// MpFUB.PSM (); // MpFUB.PSM ();
// //

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.7.5.60 SP?> <?AutomationStudio FileVersion="4.9"?>
<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program"> <Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
<Files> <Files>
<File Description="Aktionen Maschinectrltask">Action.st</File> <File Description="Aktionen Maschinectrltask">Action.st</File>
@@ -11,8 +11,6 @@
<File Description="Exit code">Exit.st</File> <File Description="Exit code">Exit.st</File>
<File Description="Local data types" Private="true">Types.typ</File> <File Description="Local data types" Private="true">Types.typ</File>
<File Description="Local variables" Private="true">Variables.var</File> <File Description="Local variables" Private="true">Variables.var</File>
<File Description="Funktionen" Private="true">MachCtrl.fun</File> <File Description="IOs" Private="true">IOs.var</File>
<File Description="Zylinderüberwachung">FUB_CylinderCheck.st</File>
<File Description="Toleranzprüfung">FC_InTol.st</File>
</Files> </Files>
</Program> </Program>

View File

@@ -0,0 +1,15 @@
(*//Inputs*)
VAR
bInGateIsOpenShuttle1 : BOOL; (*Tor Shuttle 1 ist offen*)
bInGateIsOpenShuttle2 : BOOL; (*Tor Shuttle 1 ist offen*)
bInKeyStart : BOOL; (*Starttaster / Vakuum einschalten*)
bInKeyStop : BOOL; (*Taster Start*)
END_VAR
(*//Outputs*)
VAR
bOuOpenGateShuttle1 : BOOL; (*Ventil Tor Shuttle 1 <20>ffnen*)
bOuCloseGateShuttle1 : BOOL; (*Ventil Tor shuttle 1 Schlie<69>en*)
bOuOpenGateShuttle2 : BOOL; (*Ventil Tor Shuttle 2 <20>ffnen*)
bOuCloseGateShuttle2 : BOOL; (*Ventil Tor Shuttle 2 Schlie<69>en*)
bOuLEDKeyStart : BOOL;
END_VAR

View File

@@ -38,6 +38,20 @@ PROGRAM _INIT
States.enSelectedAxis := 0; States.enSelectedAxis := 0;
States.enSelectedAxis := 1; States.enSelectedAxis := 1;
//Zylinder setzen //Zylinder setzen
Valves.bCloseGate := FALSE; IF gbSInGate1Closed THEN
Valves.bCloseGateShuttle1 := TRUE;
Valves.bOpenGateShuttle1 := FALSE;
ELSE
Valves.bCloseGateShuttle1 := FALSE;
Valves.bOpenGateShuttle1 := TRUE;
END_IF
IF gbSInGate2Closed THEN
Valves.bCloseGateShuttle2 := TRUE;
Valves.bOpenGateShuttle2 := FALSE;
ELSE
Valves.bCloseGateShuttle2 := FALSE;
Valves.bOpenGateShuttle2 := TRUE;
END_IF
END_PROGRAM END_PROGRAM

View File

@@ -1,29 +0,0 @@
FUNCTION_BLOCK FUB_CylinderCheck (*Zylinder<EFBFBD>berwachung*)
VAR_INPUT
bInOutputCylinderFw : BOOL; (*Ausgang Zylinder Ausfahren*)
bInOutputCylinderBw : BOOL; (*Ausgang Zylinder Einfahren*)
bInSensorCylinderFw : BOOL; (*Sensor Zylinder Ausfahren*)
bInSensorCylinderBw : BOOL; (*Sensor Zylinder Einfahren*)
tInCylinderFw : TIME := T#2s; (*<EFBFBD>berwachungszeit Zylinder Ausfahren*)
tInCylinderBw : TIME := T#2s; (*<EFBFBD>berwachungszeit Zylinder Ausfahren*)
END_VAR
VAR_OUTPUT
bOuErrorCylinderFw : BOOL; (*Fehler Zylinder Ausfahren*)
bOuErrorCylinderBw : BOOL; (*Fehler Zylinder Einfahren*)
bOuErrorBothSensorsHigh : BOOL; (*Fehler beide Zynlinderschalter bet<EFBFBD>tigt*)
END_VAR
VAR
TON_CylinderFw : TON;
TON_CylinderBw : TON;
END_VAR
END_FUNCTION_BLOCK
FUNCTION FC_InTolerance : BOOL (*Toleranzpr<EFBFBD>fung (auch f<EFBFBD>r Positionen)*)
VAR_INPUT
lrInValue : LREAL; (*Messwert*)
lrInSetpoint : LREAL; (*Sollwert*)
lrInTolLow : LREAL; (*Untere Toleranz*)
lrInTolUp : LREAL; (*Obere Toleranz*)
END_VAR
END_FUNCTION

View File

@@ -5,8 +5,6 @@ TYPE
rSpeedJog : REAL; (*Tippgeschwindigkeit*) rSpeedJog : REAL; (*Tippgeschwindigkeit*)
rIncrementsJog : REAL; (*Incremente Joggen 0.01 -10*) rIncrementsJog : REAL; (*Incremente Joggen 0.01 -10*)
rAccDecell : REAL; (*+*) rAccDecell : REAL; (*+*)
rVelocityAxisLinear : REAL := 100; (*Verfahrgeschwindigkeit Einzelachsen Linear*)
rVelocityAxisAngle : REAL := 45; (*Verfahrgeschwindigkeit Einzelachsen Winkel*)
rVelocityShuttle : REAL := 220; (*Verfahrgeschwindigkeit Shuttle mm/s*) rVelocityShuttle : REAL := 220; (*Verfahrgeschwindigkeit Shuttle mm/s*)
LimitAxis_X : typ_AxLimits; LimitAxis_X : typ_AxLimits;
LimitAxis_Y : typ_AxLimits; LimitAxis_Y : typ_AxLimits;
@@ -22,13 +20,17 @@ TYPE
lrUpperLimit : LREAL; (*Oberer Positionsgrenzwerte*) lrUpperLimit : LREAL; (*Oberer Positionsgrenzwerte*)
END_STRUCT; END_STRUCT;
typ_Valves : STRUCT (*Ventile*) typ_Valves : STRUCT (*Ventile*)
bCloseGate : BOOL; (*Einlegetor schlie<69>en*) bCloseGateShuttle1 : BOOL; (*Tor Shuttle 1 schlie<69>en*)
bOpenGateShuttle1 : BOOL; (*Tor Shuttle 1 <20>ffnen*)
bCloseGateShuttle2 : BOOL; (*Tor Shuttle 2 schlie<69>en*)
bOpenGateShuttle2 : BOOL; (*Tor Shuttle 1 <20>ffnen*)
END_STRUCT; END_STRUCT;
typ_States_PosStates : STRUCT (*Positionen*) typ_States_PosStates : STRUCT (*Positionen*)
lrDiffX_Virtual : LREAL; (*Positonsunterschied X und Virtuelle Achse*) lrDiffX_Virtual : LREAL; (*Positonsunterschied X und Virtuelle Achse*)
lrDiffX_X1 : LREAL; (*Positionsunterschied X und X1*) lrDiffX_X1 : LREAL; (*Positionsunterschied X und X1*)
lrDiffX_Virtual_Max : LREAL; (*Positonsunterschied X und Virtuelle Achse*) lrDiffX_Virtual_Max : LREAL; (*Positonsunterschied X und Virtuelle Achse*)
lrDiffX_X1_Max : LREAL; (*Positionsunterschied X und X1*) lrDiffX_X1_Max : LREAL; (*Positionsunterschied X und X1*)
lrDistanceShuttles : LREAL; (*Abstand Shuttles*)
bDiffX_Virtual_Ok : BOOL; (*PositionsUnterschied X - Virtuelle Achse Ok*) bDiffX_Virtual_Ok : BOOL; (*PositionsUnterschied X - Virtuelle Achse Ok*)
bDiffX_X1_Ok : BOOL; (*PositionsUnterschied X - X1 Achse Ok*) bDiffX_X1_Ok : BOOL; (*PositionsUnterschied X - X1 Achse Ok*)
bHomeX : BOOL; (*X - Achse in Grundstellung*) bHomeX : BOOL; (*X - Achse in Grundstellung*)
@@ -37,12 +39,16 @@ TYPE
bHomeC : BOOL; (*C - Achse in Grundstellung*) bHomeC : BOOL; (*C - Achse in Grundstellung*)
bHomeA : BOOL; (*A - Achse in Grundstellung*) bHomeA : BOOL; (*A - Achse in Grundstellung*)
bLaserAboveShuttle : BOOL; (*Laser <20>ber Shuttle*) bLaserAboveShuttle : BOOL; (*Laser <20>ber Shuttle*)
bWorkposShuttle : BOOL; (*Shuttle - in Bearbeitungspos*) bWorkposShuttle1 : BOOL; (*Shuttle 1 in Bearbeitungspos*)
bHomeShuttle : BOOL; (*Shuttle in Einlegepos*) bHomeShuttle1 : BOOL; (*Shuttle 1 in Einlegepos*)
bWorkposShuttle2 : BOOL; (*Shuttle 2 in Bearbeitungspos*)
bHomeShuttle2 : BOOL; (*Shuttle 2 in Einlegepos*)
END_STRUCT; END_STRUCT;
typ_States_CylinderPos : STRUCT (*Zylinderpositionen*) typ_States_CylinderPos : STRUCT (*Zylinderpositionen*)
bFrontGateOpen : BOOL; bGateShuttle1Open : BOOL; (*Tor Shuttle 1 Offen*)
bFrontGateClosed : BOOL; bGateShuttle1Closed : BOOL; (*Tor Shuttle 1 Geschlossen*)
bGateShuttle2Open : BOOL; (*Tor Shuttle 2 Offen*)
bGateShuttle2Closed : BOOL; (*Tor Shuttle 2 Geschlossen*)
END_STRUCT; END_STRUCT;
typ_States_RealAxisPos : STRUCT (*Istpositionen Achsen*) typ_States_RealAxisPos : STRUCT (*Istpositionen Achsen*)
lrVX : LREAL; lrVX : LREAL;
@@ -69,12 +75,16 @@ TYPE
bAxis_A : BOOL; bAxis_A : BOOL;
END_STRUCT; END_STRUCT;
typ_States : STRUCT (*Maschinenzust<73>nde*) typ_States : STRUCT (*Maschinenzust<73>nde*)
bSafetyCNCAxisOk : {REDUND_UNREPLICABLE} BOOL; (*Sicherheit F<>r CNC-Achsen OK*) bCNCHome : BOOL; (*CNC ist in Home*)
bSafetyCNCAxisOkDelayed : {REDUND_UNREPLICABLE} BOOL; (*Sicherheit F<>r CNC-Achsen OK (Verz<72>gert 280ms)*) bCycleActive : BOOL; (*Letzer Zyklus*)
bSafetyShuttle1Ok : BOOL; (*Sicherheit Einlegebereich Ok*) bLastCycle : BOOL; (*Zyklus aktiv*)
bSafetyShuttle1OkDelayed : BOOL; (*Sicherheit Einlegebereich Ok (Verz<72>gert 280ms)*) bStoppedCycle : BOOL; (*Zyklus beendet*)
bSafetyShuttle2Ok : BOOL; (*Sicherheit Einlegebereich Ok*) bSafetyCNCAxisSS1Ok : {REDUND_UNREPLICABLE} BOOL; (*Sicherheit F<>r CNC-Achsen SS1 OK*)
bSafetyShuttle2OkDelayed : BOOL; (*Sicherheit Einlegebereich Ok (Verz<72>gert 280ms)*) bSafetyCNCAxisSS1OkDelayed : {REDUND_UNREPLICABLE} BOOL; (*Sicherheit F<EFBFBD>r CNC-Achsen SS1 OK (Verz<72>gert 280ms)*)
bSafetyShuttlesSS1Ok : BOOL; (*Sicherheit F<>r Shuttles SS1 Ok*)
bSafetyShuttleSS1OkDelayed : BOOL; (*Sicherheit F<>r Shuttles SS1 Ok (Verz<72>gert 280ms)*)
bSafetyCNCAxisSLSOk : {REDUND_UNREPLICABLE} BOOL; (*Sicherheit F<>r CNC-Achsen SLS OK*)
bSafetyShuttlesSLSOk : BOOL; (*Sicherheit F<>r Shuttles SS1 Ok*)
bSafetyLaserOk : BOOL; (*Sicherheit Schutzt<7A>ren Ok (f<>r Laser)*) bSafetyLaserOk : BOOL; (*Sicherheit Schutzt<7A>ren Ok (f<>r Laser)*)
bAxPowerOffDoorReqManual : BOOL; (*Achsversorgung wg. T<>ranforderung in Hand wegschalten*) bAxPowerOffDoorReqManual : BOOL; (*Achsversorgung wg. T<>ranforderung in Hand wegschalten*)
bAxPowerOffDoorReqAuto : BOOL; (*Achsversorgung C wg. T<>ranforderung in Automatik wegschalten*) bAxPowerOffDoorReqAuto : BOOL; (*Achsversorgung C wg. T<>ranforderung in Automatik wegschalten*)
@@ -173,7 +183,8 @@ TYPE
bAxisShuttleMoveNeg : BOOL; (*Freigabe Shuttle Achse bewegen*) bAxisShuttleMoveNeg : BOOL; (*Freigabe Shuttle Achse bewegen*)
bAxisShuttle2MovePos : BOOL; (*Freigabe Shuttle Achse bewegen*) bAxisShuttle2MovePos : BOOL; (*Freigabe Shuttle Achse bewegen*)
bAxisShuttle2MoveNeg : BOOL; (*Freigabe Shuttle Achse bewegen*) bAxisShuttle2MoveNeg : BOOL; (*Freigabe Shuttle Achse bewegen*)
bCloseFrontGate : BOOL; (*Freigaba Tor schlie<69>en*) bCloseGateShuttle1 : BOOL; (*Tor Shuttle 1 schlie<69>en*)
bCloseGateShuttle2 : BOOL; (*Tor Shuttle 2 schlie<69>en*)
END_STRUCT; END_STRUCT;
END_TYPE END_TYPE
@@ -186,9 +197,8 @@ TYPE
TON_SimulationOn : TON; TON_SimulationOn : TON;
TON_M105_LaserOff : TON; TON_M105_LaserOff : TON;
TOF_Startkey : TOF; TOF_Startkey : TOF;
TOF_SafetyCNCOk : TOF; (*Verz<72>gerung Sicherheit CNC Achsen (SS1)*) TOF_SafetyCNCSS1Ok : TOF; (*Verz<72>gerung Sicherheit CNC Achsen (SS1)*)
TOF_SafetyShuttle1Ok : TOF; (*Verz<72>gerung Sicherheit Shuttle 1 Achsen (SS1)*) TOF_SafetyShuttleSS1Ok : TOF; (*Verz<72>gerung Sicherheit Shuttle 1 Achsen (SS1)*)
TOF_SafetyShuttle2Ok : TOF; (*Verz<72>gerung Sicherheit Shuttle 2 Achsen (SS1)*)
Cyl_Frontdoor : FUB_CylinderCheck; Cyl_Frontdoor : FUB_CylinderCheck;
END_STRUCT; END_STRUCT;
typ_MpFUB : STRUCT (*MApp Funktionsbausteine*) typ_MpFUB : STRUCT (*MApp Funktionsbausteine*)
@@ -289,8 +299,10 @@ TYPE
AxisJogFw : gtyp_VCButton; (*Achse Vorw<72>rts Tippen*) AxisJogFw : gtyp_VCButton; (*Achse Vorw<72>rts Tippen*)
AxisJogBw : gtyp_VCButton; (*Achse R<>ckw<6B>rts Tippen*) AxisJogBw : gtyp_VCButton; (*Achse R<>ckw<6B>rts Tippen*)
AxisMovePos : gtyp_VCButton; (*Achse Position Anfahren*) AxisMovePos : gtyp_VCButton; (*Achse Position Anfahren*)
AxisMovePosSh1 : gtyp_VCButton; (*Achse Position Anfahren*) AxisMovePosWorkSh1 : gtyp_VCButton; (*Shuttle 1 Arbeitsposition Position Anfahren*)
AxisMovePosSh2 : gtyp_VCButton; (*Achse Position Anfahren*) AxisMovePosWorkSh2 : gtyp_VCButton; (*Shuttle 2 Arbeitsposition Anfahren*)
AxisMovePosHomeSh1 : gtyp_VCButton; (*Shuttle 1 Ruheposition Anfahren*)
AxisMovePosHomeSh2 : gtyp_VCButton; (*Shuttle 2 Ruheposition Anfahren*)
AxisHomeDirect : gtyp_VCButton; (*Einzelachse Direkt Referenzieren*) AxisHomeDirect : gtyp_VCButton; (*Einzelachse Direkt Referenzieren*)
AxisHome : gtyp_VCButton; (*Einzelachse Referenzieren*) AxisHome : gtyp_VCButton; (*Einzelachse Referenzieren*)
AxisCalibrate : gtyp_VCButton; (*Einzelachse Kalibrieren*) AxisCalibrate : gtyp_VCButton; (*Einzelachse Kalibrieren*)
@@ -305,15 +317,23 @@ TYPE
AxisShuttle2HomeDirect : gtyp_VCButton; (*Shuttle - Achse Direkt Referenzieren*) AxisShuttle2HomeDirect : gtyp_VCButton; (*Shuttle - Achse Direkt Referenzieren*)
AxisShuttle2Home : gtyp_VCButton; (*Shuttle - Achse Referenzieren*) AxisShuttle2Home : gtyp_VCButton; (*Shuttle - Achse Referenzieren*)
AxisShuttle2Calibrate : gtyp_VCButton; (*Shuttle - Achse Kalibrieren*) AxisShuttle2Calibrate : gtyp_VCButton; (*Shuttle - Achse Kalibrieren*)
OpenGate : gtyp_VCButton; (*Einlegetor <20>ffnen*) OpenGateShuttle1 : gtyp_VCButton; (*Tor Shuttle 1 <20>ffnen*)
CloseGate : gtyp_VCButton; (*Einlegetor schlie<69>en*) CloseGateShuttle1 : gtyp_VCButton; (*Tor Shuttle 1 schlie<69>en*)
OpenGateShuttle2 : gtyp_VCButton; (*Tor Shuttle 2 <20>ffnen*)
CloseGateShuttle2 : gtyp_VCButton; (*Tor Shuttle 2 schlie<69>en*)
VaccumOnShuttle1 : gtyp_VCButton; (*Vakuum Einschalten Shuttle 1*)
VaccumOffShuttle1 : gtyp_VCButton; (*Vakuum Ausschalten Shuttle 1*)
VaccumOnShuttle2 : gtyp_VCButton; (*Vakuum Einschalten Shuttle 2*)
VaccumOffShuttle2 : gtyp_VCButton; (*Vakuum Ausschalten Shuttle 2*)
ManCNCStartHome : gtyp_VCButton; (*Manuell CNC Starte Grundstellung*) ManCNCStartHome : gtyp_VCButton; (*Manuell CNC Starte Grundstellung*)
ManCNCStartCalibration : gtyp_VCButton; (*Manuell CNC Starte Kalibrieren*) ManCNCStartCalibration : gtyp_VCButton; (*Manuell CNC Starte Kalibrieren*)
AutoStartHome : gtyp_VCButton; (*Starte Grundstellung*) AutoStartHome : gtyp_VCButton; (*Starte Grundstellung*)
AutoStartCycle : gtyp_VCButton; (*Starte Zyklus*) AutoStartCycle : gtyp_VCButton; (*Starte Zyklus*)
AutoStopCycle : gtyp_VCButton; (*Stopp Zyklus*) AutoStopCycle : gtyp_VCButton; (*Stopp Zyklus*)
AutoStopCNCCycle : gtyp_VCButton; (*Stopp Zyklus*)
AutoRequestHome : gtyp_VCButton; (*Grundstellung Anfordern (Abbruch Automatik)*) AutoRequestHome : gtyp_VCButton; (*Grundstellung Anfordern (Abbruch Automatik)*)
AutoStartToolChange : gtyp_VCButton; (*Automatik Werkzeugwechselpos*) AutoStartToolChange : gtyp_VCButton; (*Automatik Werkzeugwechselpos*)
DropDownBoxFileMan : gtyp_VCDropdownbox; (*DropdownListe CNC File Hand*)
END_STRUCT; END_STRUCT;
typ_VCStatus : STRUCT (*Status Datenpunkte f<>r Eingabefelder etc*) typ_VCStatus : STRUCT (*Status Datenpunkte f<>r Eingabefelder etc*)
usDtropDownCncPrg : USINT; (*CncProgramm ausw<73>hlen*) usDtropDownCncPrg : USINT; (*CncProgramm ausw<73>hlen*)
@@ -321,15 +341,9 @@ TYPE
usStatJogDestPosDeg : USINT; usStatJogDestPosDeg : USINT;
rOverride : REAL := 100; (*Vorschub f. CNC (0-100%)*) rOverride : REAL := 100; (*Vorschub f. CNC (0-100%)*)
lrJogDestPos : LREAL; (*Zielposition f Tippbetrieb [mm]*) lrJogDestPos : LREAL; (*Zielposition f Tippbetrieb [mm]*)
lrJogDestPosSh1 : LREAL; (*Zielposition f Tippbetrieb Shuttle 1[mm]*)
lrJogDestPosSh2 : LREAL; (*Zielposition f Tippbetrieb Shuttle 2[mm]*)
lrJogDestPosDeg : LREAL; (*Zielposition f Tippbetrieb [<5B>]*) lrJogDestPosDeg : LREAL; (*Zielposition f Tippbetrieb [<5B>]*)
lrJogDestPosLowerLim : LREAL; (*Begrenzung Zielpos f. Tippbetrieb*) lrJogDestPosLowerLim : LREAL; (*Begrenzung Zielpos f. Tippbetrieb*)
lrJogDestPosUpperLim : LREAL; (*Begrenzung Zielpos f. Joggen*) lrJogDestPosUpperLim : LREAL; (*Begrenzung Zielpos f. Joggen*)
lrJogDestPosLowerLimSh1 : LREAL; (*Begrenzung Zielpos f. Tippbetrieb*)
lrJogDestPosUpperLimSh1 : LREAL; (*Begrenzung Zielpos f. Joggen*)
lrJogDestPosLowerLimSh2 : LREAL; (*Begrenzung Zielpos f. Tippbetrieb*)
lrJogDestPosUpperLimSh2 : LREAL; (*Begrenzung Zielpos f. Joggen*)
lrJogDestPosLowerLimDeg : LREAL; (*Begrenzung Zielpos f. Tippbetrieb*) lrJogDestPosLowerLimDeg : LREAL; (*Begrenzung Zielpos f. Tippbetrieb*)
lrJogDestPosUpperLimDeg : LREAL; (*Begrenzung Zielpos f. Joggen*) lrJogDestPosUpperLimDeg : LREAL; (*Begrenzung Zielpos f. Joggen*)
END_STRUCT; END_STRUCT;
@@ -362,10 +376,13 @@ TYPE
bShuttle2InPos : BOOL; (*Shuttle 2 in Pos (und Wzg Ok)*) bShuttle2InPos : BOOL; (*Shuttle 2 in Pos (und Wzg Ok)*)
bLaserMidPos : BOOL; (*Laser in Mittelpos*) bLaserMidPos : BOOL; (*Laser in Mittelpos*)
lrFeedrate : LREAL; (*aktueller Vorschub [mm/min]*) lrFeedrate : LREAL; (*aktueller Vorschub [mm/min]*)
usCurrentToolID : USINT; (*Akutelles Werkzeug*)
END_STRUCT; END_STRUCT;
typ_MFlags : STRUCT (*CNC MFunktionen*) typ_MFlags : STRUCT (*CNC MFunktionen*)
b103_LaserOn : BOOL; (*Laser Ein (Blockierend)*) b103_LaserOn : BOOL; (*Laser Ein (Blockierend)*)
b105_LaserOff : BOOL; (*Laser Aus (Blockierend)*) b105_LaserOff : BOOL; (*Laser Aus (Blockierend)*)
b108_CutGasOn : BOOL; (*Schneidgas Ein nicht Blockierend*)
b109_CutGasOff : BOOL; (*Schneidgas Aus nicht Blockierend*)
b110_StayAtHeight : BOOL; (*Auf aktueller Hoehe halten (nur wenn laser an) nicht Blockierend*) b110_StayAtHeight : BOOL; (*Auf aktueller Hoehe halten (nur wenn laser an) nicht Blockierend*)
b111_StayAtMid : BOOL; (*Auf Mittelpos halten (nur wenn laser an) nicht Blockierend*) b111_StayAtMid : BOOL; (*Auf Mittelpos halten (nur wenn laser an) nicht Blockierend*)
b112_FullPowerOn : BOOL; (*Laserleisutung auf Sollwert nicht Blockierend*) b112_FullPowerOn : BOOL; (*Laserleisutung auf Sollwert nicht Blockierend*)
@@ -377,29 +394,25 @@ TYPE
( (*Schrittkette*) ( (*Schrittkette*)
enAutoStep_INIT := 0, (*Grundstellung pr<70>fen*) enAutoStep_INIT := 0, (*Grundstellung pr<70>fen*)
enAutoStep_HOME_WAIT_START, (*GS: Warten Auf Startbefehl f<>r GS*) enAutoStep_HOME_WAIT_START, (*GS: Warten Auf Startbefehl f<>r GS*)
enAutoStep_HOME_WAIT_DOORCLOSED, (*GS: Warten Tor zu*) enAutoStep_HOME_CNC_HOME, (*GS: CNC in Grundstellung fahren (muss immer gehen)*)
enAutoStep_HOME_WAIT_HOMING, (*GS: Warten Achsen Ref*) enAutoStep_HOME_OPEN_GATES, (*GS: Tore bei Bedarf <20>ffnen*)
enAutoStep_HOME_WAIT_ZHOME, (*GS: Warten bis Z in GS*) enAutoStep_HOME_WAIT_SHUTTLEHOME, (*GS: Warten bis Shuttles in GS*)
enAutoStep_HOME_WAIT_YHOME, (*GS: Warten bis Y in GS*) enAutoStep_HOME_CLOSE_GATES, (*GS: Warten bis Tore geschlossen*)
enAutoStep_HOME_WAIT_XHOME, (*GS: Warten bis Z in GS*)
enAutoStep_HOME_WAIT_AHOME, (*GS: Warten bis A in GS*)
enAutoStep_HOME_WAIT_BHOME, (*GS: Warten bis B in GS*)
enAutoStep_HOME_WAIT_SHUTTLEHOME, (*GS: Warten bis Shuttle in GS*)
enAutoStep_HOME_WAIT_DOOROPEN, (*GS: Warten Tor AUF*)
enAutoStep_WAIT_RESTART := 20, (*Auf Neustart Warten*) enAutoStep_WAIT_RESTART := 20, (*Auf Neustart Warten*)
enAutoStep_WAIT_START := 21, (*Auf Startbedingungen Warten*) enAutoStep_WAIT_START := 21, (*Auf Startbedingungen Warten*)
enAutoStep_WAIT_DOOR_CLOSED := 50, (*Warten bis T<>r geschlossen*) enAutoStep_WAIT_PART := 50, (*Auf Bauteil Warten*)
enAutoStep_WAIT_HOMING, (*Warten Achsen Ref*) enAutoStep_OPEN_GATE1, (*Tor Shuttle 1 <20>ffnen*)
enAutoStep_SHUTTLE_IN, (*Warten bis Shuttle eingeshuttelt*) enAutoStep_SHUTTLE1_IN, (*Warten bis Shuttle 1 eingeshuttelt*)
enAutoStep_CNC_ACTIVE := 70, (*Warten bis CNC Aktiv - CNC Starten*) enAutoStep_CLOSE_GATE1, (*Tor Shuttle 1 schlie<69>en*)
enAutoStep_OPEN_GATE2, (*Tor Shuttle 2 <20>ffnen*)
enAutoStep_SHUTTLE2_IN, (*Warten bis Shuttle 2 eingeshuttelt*)
enAutoStep_CLOSE_GATE2, (*Tor Shuttle 1 schlie<69>en*)
enAutoStep_CNC_ACTIVE, (*Warten bis CNC Aktiv - CNC Starten*)
enAutoStep_CNC_FINISHED, (*Warten bis CNC Fertig*) enAutoStep_CNC_FINISHED, (*Warten bis CNC Fertig*)
enAutoStep_ZHOME, (*Warten bis Z-Achse R<>ckgestellt*) enAutoStep_CNC_HOME, (*Warten bis CNC nach Fehler f<>r Home Aktiv - CNC Starten*)
enAutoStep_YHOME, (*Warten bis Y-Achse R<>ckgestellt*) enAutoStep_OPEN_GATES, (*Tor f<>r Shuttle <20>ffnen*)
enAutoStep_XHOME, (*Warten bis X-Achse R<>ckgestellt*)
enAutoStep_AHOME, (*Warten bis A-Achse R<>ckgestellt*)
enAutoStep_BHOME, (*Warten bis B-Achse R<>ckgestellt*)
enAutoStep_SHUTTLE_OUT, (*Warten bis Shuttle ausgeshuttelt*) enAutoStep_SHUTTLE_OUT, (*Warten bis Shuttle ausgeshuttelt*)
enAutoStep_WAIT_DOOR_OPEN, (*Warten bis TOR AUF*) enAutoStep_CLOSE_GATES, (*Warten bis TOR geschlossen*)
enAutoStep_FINISHED enAutoStep_FINISHED
); );
END_TYPE END_TYPE

View File

@@ -12,6 +12,7 @@ VAR
bInit : BOOL; (*Init*) bInit : BOOL; (*Init*)
bTest : BOOL; bTest : BOOL;
bTemp : BOOL; bTemp : BOOL;
bGodMode : BOOL;
bBlinkEdge_01 : BOOL; bBlinkEdge_01 : BOOL;
bTransitionCondition : BOOL; (*Weiterschaltbedingung*) bTransitionCondition : BOOL; (*Weiterschaltbedingung*)
bTransitionConditionSampleshot : BOOL; (*Weiterschaltbedingung*) bTransitionConditionSampleshot : BOOL; (*Weiterschaltbedingung*)

View File

@@ -0,0 +1,14 @@
ACTION DoDynVars:
MpFUB.PrcPar_FrameTable.Component := ADR (gCncXYZCA);
MpFUB.PrcPar_FrameTable.DataType := mcCFG_FRMTBL;
MpFUB.PrcPar_FrameTable.DataAddress := ADR (ProcData.Frametable);
MpFUB.PrcPar_FrameTable.AdvancedParameters.Name := 'FrameTable_SC3';
MpFUB.ProcConf_FrameTable.Name := 'FrameTable_SC3';
MpFUB.ProcConf_FrameTable.DataType := mcCFG_FRMTBL;
MpFUB.ProcConf_FrameTable.DataAddress := ADR (ProcData.Frametable);
ProcData.Frametable.Row.DataAddress := ADR (ProcData.FrametableEntries);
ProcData.Frametable.Row.NumberOfArrayElements := 4;
END_ACTION

View File

@@ -0,0 +1,11 @@
PROGRAM _CYCLIC
DoDynVars;
MpFUB.PrcPar_FrameTable.Mode := mcPPM_READ;
MpFUB.ProcConf_FrameTable.Mode := mcPCM_LOAD;
MpFUB.PrcPar_FrameTable ();
MpFUB.ProcConf_FrameTable ();
END_PROGRAM

View File

@@ -1,11 +1,12 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.3.5.113 SP?> <?AutomationStudio FileVersion="4.9"?>
<Program xmlns="http://br-automation.co.at/AS/Program"> <Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
<Files> <Files>
<File Description="Cyclic code">Cyclic.st</File> <File Description="Cyclic code">Cyclic.st</File>
<File Description="Init code">Init.st</File> <File Description="Init code">Init.st</File>
<File Description="Exit code">Exit.st</File> <File Description="Exit code">Exit.st</File>
<File Description="Local data types" Private="true">Types.typ</File> <File Description="Local data types" Private="true">Types.typ</File>
<File Description="Local variables" Private="true">Variables.var</File> <File Description="Local variables" Private="true">Variables.var</File>
<File>Action.st</File>
</Files> </Files>
</Program> </Program>

View File

@@ -0,0 +1,4 @@
PROGRAM _INIT
END_PROGRAM

View File

@@ -0,0 +1,11 @@
TYPE
typ_MpFUB : STRUCT
PrcPar_FrameTable : MC_BR_ProcessParam;
ProcConf_FrameTable : MC_BR_ProcessConfig;
END_STRUCT;
typ_ProcData : STRUCT
Frametable : McCfgFrmTblType;
FrametableEntries : ARRAY[1..4]OF McFTRowType;
END_STRUCT;
END_TYPE

View File

@@ -0,0 +1,7 @@
VAR
ProcData : typ_ProcData;
END_VAR
(*//Funktionsbl<62>cke*)
VAR
MpFUB : typ_MpFUB;
END_VAR

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.3.5.113 SP?> <?AutomationStudio FileVersion="4.9"?>
<Package xmlns="http://br-automation.co.at/AS/Package"> <Package xmlns="http://br-automation.co.at/AS/Package">
<Objects> <Objects>
<Object Type="File" Description="Globale Maschinen - Variablen">GlobaMachine.var</Object> <Object Type="File" Description="Globale Maschinen - Variablen">GlobaMachine.var</Object>
@@ -12,6 +12,8 @@
<Object Type="File" Description="Package Typen - Parameter" Private="true">PackageParam.typ</Object> <Object Type="File" Description="Package Typen - Parameter" Private="true">PackageParam.typ</Object>
<Object Type="Program" Language="IEC" Description="Controller 1">MachCtrl</Object> <Object Type="Program" Language="IEC" Description="Controller 1">MachCtrl</Object>
<Object Type="Program" Language="IEC" Description="Shift/Overallcounter">PartCount</Object> <Object Type="Program" Language="IEC" Description="Shift/Overallcounter">PartCount</Object>
<Object Type="Program" Language="IEC">Recipies</Object> <Object Type="Program" Language="IEC" Description="Werkzeuge">Tools</Object>
<Object Type="Program" Language="IEC" Description="Rezeptverwaltung">Recipies</Object>
<Object Type="Program" Language="IEC" Description="Frametable auslesen">MachParam</Object>
</Objects> </Objects>
</Package> </Package>

View File

@@ -1,11 +1,12 @@
TYPE TYPE
ptyp_Positions : STRUCT (*Positionen*) ptyp_Positions : STRUCT (*Positionen*)
lrHomePosShuttle : LREAL := 234; (*HomePos Shuttle (Einlegepos)*) lrHomePosShuttle1 : LREAL := 5; (*HomePos Shuttle (Einlegepos)*)
lrWorkPosShuttle : LREAL := 5; (*Bearbeitungspos Shuttle*) lrWorkPosShuttle1 : LREAL := 3750; (*Bearbeitungspos Shuttle*)
lrHomePosShuttle2 : LREAL := 7495; (*HomePos Shuttle (Einlegepos)*)
lrWorkPosShuttle2 : LREAL := 3750; (*Bearbeitungspos Shuttle*)
lrLaserAboveShuttle : LREAL; (*Shuttle Frei unterhalb der position*) lrLaserAboveShuttle : LREAL; (*Shuttle Frei unterhalb der position*)
HomePos : {REDUND_UNREPLICABLE} ptyp_PosTupleCNC; (*Grundstellung Laser CNC Positionen in ACS*) HomePos : {REDUND_UNREPLICABLE} ptyp_PosTupleCNC; (*Grundstellung Laser CNC Positionen in ACS*)
CalibPos : {REDUND_UNREPLICABLE} ptyp_PosTupleCNC; (*Kalibrierposition Laser CNC Positionen in ACS*)
END_STRUCT; END_STRUCT;
ptyp_PosTupleCNC : STRUCT (*Positionstupel f. CNC*) ptyp_PosTupleCNC : STRUCT (*Positionstupel f. CNC*)
lrX : LREAL; lrX : LREAL;

View File

@@ -0,0 +1,10 @@
ACTION DoDefaultRecipies:
gRecipies[1].strCaption := 'SE10-Versuchwerkzeug';
gRecipies[1].strCNCPrg := 'SE10_MAIN.MPF';
gRecipies[1].usToolID := 0; //
gRecipies[1].uiLaserPowerMin := 1000;
gRecipies[1].uiLaserPower := 3000;
END_ACTION

View File

@@ -1,5 +1,45 @@
PROGRAM _CYCLIC PROGRAM _CYCLIC
IF bDefaultValues THEN
//4 Ung<EFBFBD>ltig
//5: SE 11
gRecipies[1].strCaption := 'SE11';
gRecipies[1].strCNCPrg := 'SE11_MAIN-SW.MPF';
gRecipies[1].lrFeedrate := 30000.0;
gRecipies[1].usPartID := 5;
gRecipies[1].usToolID := 5;
gRecipies[1].uiLaserPowerMin := 1000;
gRecipies[1].uiLaserPower := 3000;
//6: SE 10
gRecipies[2].strCaption := 'SE10';
gRecipies[2].strCNCPrg := 'SE10_MAIN-SW.MPF';
gRecipies[2].lrFeedrate := 30000.0;
gRecipies[2].usPartID := 6;
gRecipies[2].usToolID := 6;
gRecipies[2].uiLaserPowerMin := 1000;
gRecipies[2].uiLaserPower := 3000;
//7: Ung<EFBFBD>ltig
//8: SE 27
gRecipies[3].strCaption := 'SE27';
gRecipies[3].strCNCPrg := 'SE27_MAIN-SW.MPF';
gRecipies[3].lrFeedrate := 30000.0;
gRecipies[3].usPartID := 8;
gRecipies[3].usToolID := 8;
gRecipies[3].uiLaserPowerMin := 1000;
gRecipies[3].uiLaserPower := 3000;
//9: SE 29
gRecipies[8].strCaption := 'SE27';
gRecipies[8].strCNCPrg := 'SE27_MAIN-SW.MPF';
gRecipies[8].lrFeedrate := 30000.0;
gRecipies[8].usPartID := 8;
gRecipies[8].usToolID := 8;
gRecipies[8].uiLaserPowerMin := 1000;
gRecipies[8].uiLaserPower := 3000;
bDefaultValues := FALSE;
END_IF
IF us1stRecipe <> us1stRecipeLatch THEN IF us1stRecipe <> us1stRecipeLatch THEN
lRecipies15 ACCESS (ADR (gRecipies[us1stRecipe])); lRecipies15 ACCESS (ADR (gRecipies[us1stRecipe]));
us1stRecipeLatch := us1stRecipe; us1stRecipeLatch := us1stRecipe;
@@ -8,7 +48,7 @@ PROGRAM _CYCLIC
END_FOR END_FOR
END_IF END_IF
//Navigate through Recipies //Durch Rezepte Iterieren
IF EDGEPOS (VCControls.bNext15Items) THEN IF EDGEPOS (VCControls.bNext15Items) THEN
IF us1stRecipe < (MAX_RECIPE - 15) THEN IF us1stRecipe < (MAX_RECIPE - 15) THEN
us1stRecipe := us1stRecipe + 15; us1stRecipe := us1stRecipe + 15;

View File

@@ -1,11 +1,12 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.3.3.196?> <?AutomationStudio FileVersion="4.9"?>
<Program xmlns="http://br-automation.co.at/AS/Program"> <Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
<Files> <Files>
<File Description="Cyclic code">Cyclic.st</File> <File Description="Cyclic code">Cyclic.st</File>
<File Description="Init code">Init.st</File> <File Description="Init code">Init.st</File>
<File Description="Exit code">Exit.st</File> <File Description="Exit code">Exit.st</File>
<File Description="Local data types" Private="true">Types.typ</File> <File Description="Local data types" Private="true">Types.typ</File>
<File Description="Local variables" Private="true">Variables.var</File> <File Description="Local variables" Private="true">Variables.var</File>
<File>Action.st</File>
</Files> </Files>
</Program> </Program>

View File

@@ -1,5 +1,6 @@
VAR VAR
bSorted : BOOL; bSorted : BOOL;
bDefaultValues : BOOL;
bCreateList : BOOL; bCreateList : BOOL;
ui : UINT; ui : UINT;
uiMaxRecipe : UINT; uiMaxRecipe : UINT;

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio FileVersion="4.9"?>
<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File Description="Init, cyclic, exit code">Main.st</File>
<File Description="Local data types" Private="true">Types.typ</File>
<File Description="Local variables" Private="true">Variables.var</File>
<File Description="Local variables" Private="true">IOs.var</File>
</Files>
</Program>

View File

@@ -0,0 +1,14 @@
(*//Eing<6E>nge*)
VAR
bInToolIDShuttle1 : ARRAY[0..5] OF BOOL; (*Werkzeugcodierungen*)
bInToolIDShuttle2 : ARRAY[0..5] OF BOOL; (*Werkzeugcodierungen*)
bInToolSensorsShuttle1 : ARRAY[1..8] OF BOOL; (*Werkzeugsensoren*)
bInToolSensorsShuttle2 : ARRAY[1..8] OF BOOL; (*Werkzeugsensoren*)
END_VAR
(*//Ausg<73>nge*)
VAR
bOuVacOnShuttle1 : BOOL; (*Vakuum Einschalten Shuttle 1*)
bOuBlowOutShuttle1 : BOOL; (*Abblasen Shuttle 1*)
bOuVacOnShuttle2 : BOOL; (*Vakuum Einschalten Shuttle 2*)
bOuBlowOutShuttle2 : BOOL; (*Abblasen Shuttle 1*)
END_VAR

View File

@@ -0,0 +1,66 @@
PROGRAM _INIT
(* Insert code here *)
END_PROGRAM
PROGRAM _CYCLIC
//Werkzeug ID Shuttle 1 Auslesen
gToolInterface.Shuttle1.FromTool.usToolID.0 := bInToolIDShuttle1[0];
gToolInterface.Shuttle1.FromTool.usToolID.1 := bInToolIDShuttle1[1];
gToolInterface.Shuttle1.FromTool.usToolID.2 := bInToolIDShuttle1[2];
gToolInterface.Shuttle1.FromTool.usToolID.3 := bInToolIDShuttle1[3];
gToolInterface.Shuttle1.FromTool.usToolID.4 := bInToolIDShuttle1[4];
gToolInterface.Shuttle1.FromTool.usToolID.5 := bInToolIDShuttle1[5];
//Werkzeug ID Shuttle 2 Auslesen
gToolInterface.Shuttle2.FromTool.usToolID.0 := bInToolIDShuttle2[0];
gToolInterface.Shuttle2.FromTool.usToolID.1 := bInToolIDShuttle2[1];
gToolInterface.Shuttle2.FromTool.usToolID.2 := bInToolIDShuttle2[2];
gToolInterface.Shuttle2.FromTool.usToolID.3 := bInToolIDShuttle2[3];
gToolInterface.Shuttle2.FromTool.usToolID.4 := bInToolIDShuttle2[4];
gToolInterface.Shuttle2.FromTool.usToolID.5 := bInToolIDShuttle2[5];
//Vakuum / Ventile ansteuern
bOuVacOnShuttle1 := gToolInterface.Shuttle1.ToTool.bVaccumOn AND gMachine1.bMachineON;
IF EDGENEG (gToolInterface.Shuttle1.ToTool.bVaccumOn) THEN
//Abblasen
bOuBlowOutShuttle1 := gMachine1.bMachineON;
END_IF
FUBs.TON_BlowPulse_Shuttle1.IN := bOuBlowOutShuttle1;
FUBs.TON_BlowPulse_Shuttle1.PT := Parameter.tDurationBlow;
FUBs.TON_BlowPulse_Shuttle1 ();
IF FUBs.TON_BlowPulse_Shuttle1.Q THEN
bOuBlowOutShuttle1 := FALSE;
END_IF
//Vakuum / Ventile ansteuern
bOuVacOnShuttle2 := gToolInterface.Shuttle2.ToTool.bVaccumOn AND gMachine1.bMachineON;
IF EDGENEG (gToolInterface.Shuttle2.ToTool.bVaccumOn) THEN
//Abblasen
bOuBlowOutShuttle2 := gMachine1.bMachineON;
END_IF
FUBs.TON_BlowPulse_Shuttle2.IN := bOuBlowOutShuttle2;
FUBs.TON_BlowPulse_Shuttle2.PT := Parameter.tDurationBlow;
FUBs.TON_BlowPulse_Shuttle2 ();
IF FUBs.TON_BlowPulse_Shuttle2.Q THEN
bOuBlowOutShuttle2 := FALSE;
END_IF
//Seitenkanalverdichter einschalten
gbSOuVaccumEngineOnShuttle1 := gMachine1.bMachineON AND gToolInterface.Shuttle1.ToTool.bVaccumOn;
gbSOuVaccumEngineOnShuttle2 := gMachine1.bMachineON AND gToolInterface.Shuttle2.ToTool.bVaccumOn;
gToolInterface.Shuttle1.FromTool.bVaccumIsOn := gbSOuVaccumEngineOnShuttle1;
gToolInterface.Shuttle1.FromTool.bVaccumIsOn := gbSOuVaccumEngineOnShuttle2;
gLineInterface.Out.bVacuumIsOnShuttle1 := gbSOuVaccumEngineOnShuttle1; //FixMe Vakuumsensor
gLineInterface.Out.bVacuumIsOnShuttle2 := gbSOuVaccumEngineOnShuttle2; //FixMe Vakuumsensor
END_PROGRAM
PROGRAM _EXIT
(* Insert code here *)
END_PROGRAM

View File

@@ -0,0 +1,10 @@
TYPE
typ_Param : {REDUND_UNREPLICABLE} STRUCT
tDurationBlow : {REDUND_UNREPLICABLE} TIME := T#2s;
END_STRUCT;
typ_FUBs : STRUCT
TON_BlowPulse_Shuttle1 : TON;
TON_BlowPulse_Shuttle2 : TON;
END_STRUCT;
END_TYPE

View File

@@ -0,0 +1,6 @@
VAR RETAIN
Parameter : typ_Param;
END_VAR
VAR
FUBs : typ_FUBs;
END_VAR

View File

@@ -21,7 +21,10 @@ PROGRAM _CYCLIC
//Outputs //Outputs
//================================================ //================================================
//Ventile Achsk<EFBFBD>hlung //Ventile Achsk<EFBFBD>hlung
bOuOpenCoolingValveIn := NOT Status.bErrorFlow; Status.bErrorDewPoint := (iInCoolingIn < 15.0) OR (Status.rPSMTemperature < 28.0);
bOuOpenCoolingValveOut := NOT Status.bErrorFlow;
bOuOpenCoolingValveIn := NOT Status.bErrorFlow AND NOT Status.bErrorDewPoint;
bOuOpenCoolingValveOut := NOT Status.bErrorFlow AND NOT Status.bErrorDewPoint;
END_PROGRAM END_PROGRAM

View File

@@ -1,3 +1,7 @@
VAR
iInHumidity : INT; (*Rel Luftfeuchte*)
iInCabinetTemperature : INT; (*Temperatur Schaltschrank*)
END_VAR
(*//53K5*) (*//53K5*)
VAR VAR
iInCoolingIn : INT; (*Temperatur K<>hlung Vorlauf <20>ffnen*) iInCoolingIn : INT; (*Temperatur K<>hlung Vorlauf <20>ffnen*)

View File

@@ -2,6 +2,7 @@
TYPE TYPE
typ_Status : STRUCT typ_Status : STRUCT
bErrorFlow : BOOL; (*Fehler Durchfluss - Unterschied - Ventile zu*) bErrorFlow : BOOL; (*Fehler Durchfluss - Unterschied - Ventile zu*)
bErrorDewPoint : BOOL; (*Fehler Durchfluss - Unterschied - Ventile zu*)
rPSMTemperature : REAL; (*K<>hlertemperatur Versorgungsmodul ACPmulti*) rPSMTemperature : REAL; (*K<>hlertemperatur Versorgungsmodul ACPmulti*)
lrTemperatureCoolingIn : LREAL; (*Vorlauftemperatur K<>hlung*) lrTemperatureCoolingIn : LREAL; (*Vorlauftemperatur K<>hlung*)
lrTemperatureCoolingOu : LREAL; (*R<>cklauftemperatur K<>hlung*) lrTemperatureCoolingOu : LREAL; (*R<>cklauftemperatur K<>hlung*)

View File

@@ -1,5 +1,5 @@
//Zeiten bilden
ACTION DoTimes: ACTION DoTimes:
//Zeiten bilden
FUBs.TOF_KeyManual.IN := bInKeyManual; FUBs.TOF_KeyManual.IN := bInKeyManual;
FUBs.TOF_KeyManual.PT := t#500ms; FUBs.TOF_KeyManual.PT := t#500ms;
FUBs.TOF_KeyManual (); FUBs.TOF_KeyManual ();
@@ -20,21 +20,21 @@ ACTION DoTimes:
//Nach Start der SLX Warten //Nach Start der SLX Warten
FUBs.TON_StartDelay.IN := TRUE; FUBs.TON_StartDelay.IN := TRUE;
FUBs.TON_StartDelay.PT := t#35s; FUBs.TON_StartDelay.PT := t#50s;
FUBs.TON_StartDelay (); FUBs.TON_StartDelay ();
END_ACTION END_ACTION
//Buttons f<EFBFBD>r Einrichtbetrieb initialisieren
ACTION DoInitSetupmodeButtons: ACTION DoInitSetupmodeButtons:
//Buttons f<EFBFBD>r Einrichtbetrieb initialisieren
VCButtons.MachineJog.bCommand := FALSE; VCButtons.MachineJog.bCommand := FALSE;
VCButtons.MachineAuto.bCommand := FALSE; VCButtons.MachineAuto.bCommand := FALSE;
VCButtons.MachineResetEStop.bCommand := FALSE; VCButtons.MachineResetEStop.bCommand := FALSE;
VCButtons.MachineResetDoors.bCommand := FALSE; VCButtons.MachineResetDoors.bCommand := FALSE;
END_ACTION END_ACTION
//Buttons im Einrichtbetrieb
ACTION DoSetupmodeButtons: ACTION DoSetupmodeButtons:
//Buttons im Einrichtbetrieb
//Anlage Einschalten //Anlage Einschalten
VCButtons.MachineOnOff.usStatus.0 := FALSE; VCButtons.MachineOnOff.usStatus.0 := FALSE;
VCButtons.MachineOnOff.usStatus.1 := NOT FUBs.TON_StartDelay.Q; //Warten bis Hochlauf beendet VCButtons.MachineOnOff.usStatus.1 := NOT FUBs.TON_StartDelay.Q; //Warten bis Hochlauf beendet
@@ -61,8 +61,8 @@ ACTION DoSetupmodeButtons:
VCButtons.MachineLockUnlockDoors.usStatus.0 := TRUE; // NOT gbSPLCInEstopOk; VCButtons.MachineLockUnlockDoors.usStatus.0 := TRUE; // NOT gbSPLCInEstopOk;
END_ACTION END_ACTION
//Globale Layer verwalten
ACTION DoLayerSettings: ACTION DoLayerSettings:
//Globale Layer verwalten
//=============================================================================================================== //===============================================================================================================
//Setupmode //Setupmode
//Tasten aktiviert wg Mobile panel //Tasten aktiviert wg Mobile panel
@@ -133,8 +133,8 @@ ACTION DoLayerSettings:
END_CASE END_CASE
END_ACTION END_ACTION
//Globale Layer Mobilepanel verwalten
ACTION DoLayerSettingsMP: ACTION DoLayerSettingsMP:
//Globale Layer Mobilepanel verwalten
//=============================================================================================================== //===============================================================================================================
//Setupmode //Setupmode
//Tasten aktiviert wg Mobile panel //Tasten aktiviert wg Mobile panel
@@ -207,14 +207,16 @@ ACTION DoLayerSettingsMP:
END_CASE END_CASE
END_ACTION END_ACTION
//St<EFBFBD>rung quittieren
ACTION DoErrorReset: ACTION DoErrorReset:
//St<EFBFBD>rung quittieren
//Resetsignal Nothalt //Resetsignal Nothalt
gCmd1.bResetErrors := bInKeyReset OR gMP7121.Button OR VCButtons.MachineResetErrors.bCommand; gCmd1.bResetErrors := bInKeyReset OR gMP7121.Button OR VCButtons.MachineResetErrors.bCommand;
gbSPLCResetEStop := bInKeyReset OR (gCmd1.bResetErrors OR VCButtons.MachineResetEStop.bCommand) AND gbSPLCResetEStop := bInKeyReset OR (gCmd1.bResetErrors OR VCButtons.MachineResetEStop.bCommand) AND
gMachine1.bMachineON AND NOT bInit; gMachine1.bMachineON AND NOT bInit;
gbSPLCRefeedError := bInKeyReset OR gMP7121.Button OR VCButtons.MachineResetErrors.bCommand;
gbSPLCResetSafeMCError := gMP7121.Button OR VCButtons.MachineResetErrors.bCommand; gbSPLCResetSafeMCError := gMP7121.Button OR VCButtons.MachineResetErrors.bCommand;
@@ -232,19 +234,25 @@ ACTION DoErrorReset:
*) *)
END_ACTION END_ACTION
//Signale an Sicherheits SPS
ACTION DoSafePLC: ACTION DoSafePLC:
//Signale an Sicherheits SPS
//Sicherheitsausg<EFBFBD>nge freigeben //Sicherheitsausg<EFBFBD>nge freigeben
gbSOuP3 := gMachine1.bMachineON;
gbSOuP4 := gMachine1.bMachineON; gbSOuP4 := gMachine1.bMachineON;
//FixMe gbSOuMainsSafetyEStop := gMachine1.bMachineON; gbSOuOpenMainvalve := gMachine1.bMachineON;
//FixMe gbSOuMainsSafetyDoors := gMachine1.bMachineON;
//Laser //Laser
gbSOuEStopLaser := gMachine1.bMachineON; gbSOuEStopLaser := gMachine1.bMachineON;
gbSOuEnableLaser := gMachine1.bMachineON; gbSOuEnableLaser := gMachine1.bMachineON;
//Liniensteuerung
gbSOuEStopToLineCtrl := TRUE; //Nothalt immer weitergeben
gbSOuMaintDoorToLineCtrl := TRUE; //Sicherheit immer weitergeben
gbSOuSafetyMaintDoorToLineCtrl := TRUE; //Sicherheit immer weitergeben
gbSOuMaintDoorToLineCtrl := TRUE; //Sicherheit immer weitergehen
//R<EFBFBD>cklesesignale //R<EFBFBD>cklesesignale
gbSPLCReefeedP4 := bInReefedP4;
//Anlagenstauts //Anlagenstauts
gbSPLCMachineOn := gMachine1.bMachineON; gbSPLCMachineOn := gMachine1.bMachineON;
@@ -252,8 +260,8 @@ ACTION DoSafePLC:
END_ACTION END_ACTION
//Ausg<EFBFBD>nge
ACTION DoOutputs: ACTION DoOutputs:
//Ausg<EFBFBD>nge
//------------------------------------------------ //------------------------------------------------
//Anlagenbeleuchtung //Anlagenbeleuchtung
bOuMachineLight := VCButtons.MachineLight.bCommand OR gMachine1.bMachineON; bOuMachineLight := VCButtons.MachineLight.bCommand OR gMachine1.bMachineON;
@@ -273,17 +281,226 @@ ACTION DoOutputs:
IF EDGEPOS (bInKeyRequestMaintDoor) THEN IF EDGEPOS (bInKeyRequestMaintDoor) THEN
gCmd1.bReqDoorOpen := NOT gCmd1.bReqDoorOpen; gCmd1.bReqDoorOpen := NOT gCmd1.bReqDoorOpen;
END_IF END_IF
bOuLEDReqMaintDoor := gCmd1.bReqDoorOpen; //FixMe bOuLEDReqMaintDoor := gCmd1.bReqDoorOpen; //FixMe
END_ACTION END_ACTION
//Alarme (Maschinenalarme)
ACTION DoMachineAlarms:
//=================================================
//1 Druckluft<EFBFBD>berwachung
(*
FUBs.TON_AirOk1.IN := gbInAirOkEStop ; //gbInAirOK;
FUBs.TON_AirOk1.PT := t#2s;
FUBs.TON_AirOk1 ();
FUBs.TON_AirNOk1.IN := gbSPLCInEstopOk AND gMachine1.bMachineON AND NOT gbInAirOkEStop;;
FUBs.TON_AirNOk1.PT := t#5s;
FUBs.TON_AirNOk1 ();
IF (AlarmIDs.udAirCtrlEstop = 0) AND FUBs.TON_AirNOk1.Q THEN
AlarmIDs.udAirCtrlEstop := MpAlarmXSet (gMpAlarmXCore, 'AirCtrlEstop');
END_IF
IF (AlarmIDs.udAirCtrlEstop > 0) AND FUBs.TON_AirOk1.Q THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udAirCtrlEstop);
AlarmIDs.udAirCtrlEstop := 0;
END_IF
*)
END_ACTION
//Alarme (Sicherheitsalarme)
ACTION DoSafetyAlarms:
//=================================================
//Nothalt Panel bet<EFBFBD>tigt
FUBs.Alarm_EStopPanel.MpLink := gMpAlarmXCore;
FUBs.Alarm_EStopPanel.sInAlName := 'EStopPanel';
FUBs.Alarm_EStopPanel.bInAlarmSignal := NOT gbSInStopButtonPanel AND gMachine1.bMachineON;
FUBs.Alarm_EStopPanel ();
//Nothalt Laser bet<EFBFBD>tigt
FUBs.Alarm_EStopLaser.MpLink := gMpAlarmXCore;
FUBs.Alarm_EStopLaser.sInAlName := 'EStopLaser';
FUBs.Alarm_EStopLaser.bInAlarmSignal := NOT gbSInStopButtonLaser AND gMachine1.bMachineON;
FUBs.Alarm_EStopLaser ();
//Nothalt von LinienSteuerung
FUBs.Alarm_EStopLine.MpLink := gMpAlarmXCore;
FUBs.Alarm_EStopLine.sInAlName := 'EStopLine';
FUBs.Alarm_EStopLine.bInAlarmSignal := NOT gbSInEStopMachine AND gMachine1.bMachineON;
FUBs.Alarm_EStopLine ();
//Nothalt nicht quittiert
FUBs.Alarm_EStopNotAck.MpLink := gMpAlarmXCore;
FUBs.Alarm_EStopNotAck.sInAlName := 'EStopNotAck';
FUBs.Alarm_EStopNotAck.bInAlarmSignal := ((uiInSPLC_DiagCode_EStop = 16#8003) OR (uiInSPLC_DiagCode_EStop = 16#8005)) AND gMachine1.bMachineON;
FUBs.Alarm_EStopNotAck ();
//Wartungst<EFBFBD>r links offen
FUBs.Alarm_MaintDoorLeftOpen.MpLink := gMpAlarmXCore;
FUBs.Alarm_MaintDoorLeftOpen.sInAlName := 'MaintDoorLeftOpen';
FUBs.Alarm_MaintDoorLeftOpen.bInAlarmSignal := NOT gbSInMaintDoorLeftOk AND NOT gCmd1.bReqDoorOpen AND gMachine1.bMachineON;
FUBs.Alarm_MaintDoorLeftOpen ();
//Wartungst<EFBFBD>r links offen
FUBs.Alarm_MaintDoorRightOpen.MpLink := gMpAlarmXCore;
FUBs.Alarm_MaintDoorRightOpen.sInAlName := 'MaintDoorRightOpen';
FUBs.Alarm_MaintDoorRightOpen.bInAlarmSignal := NOT gbSInMaintDoorRightOk AND NOT gCmd1.bReqDoorOpen AND gMachine1.bMachineON;
FUBs.Alarm_MaintDoorRightOpen ();
//Wartungst<EFBFBD>r links offen
FUBs.Alarm_MaintDoorLeftOpen.MpLink := gMpAlarmXCore;
FUBs.Alarm_MaintDoorLeftOpen.sInAlName := 'MaintDoorLeftOpen';
FUBs.Alarm_MaintDoorLeftOpen.bInAlarmSignal := NOT gbSInMaintDoorLeftOk AND NOT gCmd1.bReqDoorOpen AND gMachine1.bMachineON;
FUBs.Alarm_MaintDoorLeftOpen ();
//Wartungst<EFBFBD>r links offen
FUBs.Alarm_MaintDoorLeftOpen.MpLink := gMpAlarmXCore;
FUBs.Alarm_MaintDoorLeftOpen.sInAlName := 'MaintDoorLeftOpen';
FUBs.Alarm_MaintDoorLeftOpen.bInAlarmSignal := NOT gbSInMaintDoorLeftOk AND NOT gCmd1.bReqDoorOpen AND gMachine1.bMachineON;
FUBs.Alarm_MaintDoorLeftOpen ();
//T<EFBFBD>ren Linie nicht geschlossen
FUBs.Alarm_MaintDoorsLineOpen.MpLink := gMpAlarmXCore;
FUBs.Alarm_MaintDoorsLineOpen.sInAlName := 'MaintDoorsLineNotOk';
FUBs.Alarm_MaintDoorsLineOpen.bInAlarmSignal := NOT gbSInMachineMaintDoorsClosed AND gMachine1.bMachineON;
FUBs.Alarm_MaintDoorsLineOpen();
//Wartungst<EFBFBD>re nicht quittiert
FUBs.Alarm_MaintDoorNotAck.MpLink := gMpAlarmXCore;
FUBs.Alarm_MaintDoorNotAck.sInAlName := 'MaintDoorNotAck';
FUBs.Alarm_MaintDoorNotAck.bInAlarmSignal := ((uiInSPLC_DiagCode_SafetyDoors = 16#8003) OR (uiInSPLC_DiagCode_SafetyDoors = 16#8005)) AND gMachine1.bMachineON;
FUBs.Alarm_MaintDoorNotAck ();
//Schutztore nicht geschlossen
FUBs.Alarm_MaintDoorNotAck.MpLink := gMpAlarmXCore;
FUBs.Alarm_MaintDoorNotAck.sInAlName := 'GatesNotClosed';
FUBs.Alarm_MaintDoorNotAck.bInAlarmSignal := (NOT gbSInGate1Closed OR NOT gbSInGate2Closed) AND gbSInMaintDoorLeftOk AND gbSInMaintDoorRightOk AND gbSInMachineMaintDoorsClosed AND gMachine1.bMachineON;
FUBs.Alarm_MaintDoorNotAck ();
//Sicherheit von Liniensteuerung nicht OK
FUBs.Alarm_MaintDoorNotAck.MpLink := gMpAlarmXCore;
FUBs.Alarm_MaintDoorNotAck.sInAlName := 'SafetyLineNOk';
FUBs.Alarm_MaintDoorNotAck.bInAlarmSignal := gbSPLCInMaintDoorOk AND gbSInMachineMaintDoorsClosed AND NOT gbSInSafteyMachineOk AND gMachine1.bMachineON;
FUBs.Alarm_MaintDoorNotAck ();
//Sicherheit von Liniensteuerung nicht OK
FUBs.Alarm_RefeedP4.MpLink := gMpAlarmXCore;
FUBs.Alarm_RefeedP4.sInAlName := 'RefeedP4';
FUBs.Alarm_RefeedP4.bInAlarmSignal := (uiInSPLC_DiagCode_EDMP4 <= 16#C0111) AND (uiInSPLC_DiagCode_EDMP4 >= 16#C000) AND gMachine1.bMachineON;
FUBs.Alarm_RefeedP4 ();
(*
//Wartungst<EFBFBD>r offen
IF NOT gbSInMaintenanceDoorFrontOk AND gMachine1.bMachineON THEN
IF (AlarmIDs.udDoor[1] = 0) THEN
brsstrcpy (ADR (AlarmTextSnippets.strDoorOpen), ADR ('Vorne'));
AlarmIDs.udDoor[1] := MpAlarmXSet (gMpAlarmXCore, 'DoorOpen');
END_IF
ELSIF gbSInMaintenanceDoorFrontOk AND (AlarmIDs.udDoor[1] > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udDoor[1]);
AlarmIDs.udDoor[1] := 0;
END_IF
IF NOT gbSInMaintenanceDoorBackOk AND gMachine1.bMachineON THEN
IF (AlarmIDs.udDoor[2] = 0) THEN
brsstrcpy (ADR (AlarmTextSnippets.strDoorOpen), ADR ('Hinten Links'));
AlarmIDs.udDoor[2] := MpAlarmXSet (gMpAlarmXCore, 'DoorOpen');
END_IF
ELSIF gbSInMaintenanceDoorBackOk AND (AlarmIDs.udDoor[2] > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udDoor[2]);
AlarmIDs.udDoor[2] := 0;
END_IF
IF NOT gbSInMaintenanceDoorBack2Ok AND gMachine1.bMachineON THEN
IF (AlarmIDs.udDoor[3] = 0) THEN
brsstrcpy (ADR (AlarmTextSnippets.strDoorOpen), ADR ('Hinten rechts'));
AlarmIDs.udDoor[3] := MpAlarmXSet (gMpAlarmXCore, 'DoorOpen');
END_IF
ELSIF gbSInMaintenanceDoorBackOk AND (AlarmIDs.udDoor[3] > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udDoor[3]);
AlarmIDs.udDoor[3] := 0;
END_IF
//Wartungst<EFBFBD>r nicht quittiert
IF gbSInMaintenanceDoorFrontOk AND NOT gbSPLCInDoorsFrontOk AND gMachine1.bMachineON THEN
IF (AlarmIDs.udDoorUnreseted[1] = 0) THEN
brsstrcpy (ADR (AlarmTextSnippets.strDoorUnreseted), ADR ('Vorne'));
AlarmIDs.udDoorUnreseted[1] := MpAlarmXSet (gMpAlarmXCore, 'DoorUnreseted');
END_IF
ELSIF gbSInMaintenanceDoorFrontOk AND (AlarmIDs.udDoorUnreseted[1] > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udDoorUnreseted[1]);
AlarmIDs.udDoorUnreseted[1] := 0;
END_IF
IF gbSInMaintenanceDoorBackOk AND NOT gbSPLCInDoorsBackOk AND gMachine1.bMachineON THEN
IF (AlarmIDs.udDoorUnreseted[2] = 0) THEN
brsstrcpy (ADR (AlarmTextSnippets.strDoorUnreseted), ADR ('Vorne'));
AlarmIDs.udDoorUnreseted[2] := MpAlarmXSet (gMpAlarmXCore, 'DoorUnreseted');
END_IF
ELSIF gbSPLCInDoorsBackOk AND (AlarmIDs.udDoorUnreseted[2] > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udDoorUnreseted[2]);
AlarmIDs.udDoorUnreseted[2] := 0;
END_IF
//Handschutzleiste ausgel<EFBFBD>st
IF NOT gbSInBumperGateOk THEN
IF (AlarmIDs.udBumperActivated = 0) THEN
AlarmIDs.udBumperActivated := MpAlarmXSet (gMpAlarmXCore, 'BumperActivated');
END_IF
ELSIF gbSInBumperGateOk AND (AlarmIDs.udBumperActivated > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udBumperActivated);
AlarmIDs.udBumperActivated := 0;
END_IF
//Handschutzleiste nicht quittiert
IF gbSPLCInErrorBumper THEN
IF (AlarmIDs.udBumperNotReseted = 0) THEN
AlarmIDs.udBumperNotReseted := MpAlarmXSet (gMpAlarmXCore, 'BumperNotReseted');
END_IF
ELSIF NOT gbSPLCInErrorBumper AND (AlarmIDs.udBumperNotReseted > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udBumperNotReseted);
AlarmIDs.udBumperNotReseted := 0;
END_IF
//R<EFBFBD>cklesefehler Nothalt
IF gbSPLCInRdbckErrorEStop THEN
IF (AlarmIDs.udRefeedEstop = 0) THEN
AlarmIDs.udRefeedEstop := MpAlarmXSet (gMpAlarmXCore, 'RefeedEStop');
END_IF
ELSIF NOT gbSPLCInRdbckErrorEStop AND (AlarmIDs.udRefeedEstop > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udRefeedEstop);
AlarmIDs.udRefeedEstop := 0;
END_IF
//R<EFBFBD>cklesefehler Einlegebereich
IF gbSPLCInRdbckErrorInfeed THEN
IF (AlarmIDs.udRefeedInfeed = 0) THEN
AlarmIDs.udRefeedInfeed := MpAlarmXSet (gMpAlarmXCore, 'RefeedInfeed');
END_IF
ELSIF NOT gbSPLCInRdbckErrorInfeed AND (AlarmIDs.udRefeedInfeed > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udRefeedInfeed);
AlarmIDs.udRefeedInfeed := 0;
END_IF
*)
END_ACTION
//FUBs
ACTION DoFUBS: ACTION DoFUBS:
//FUBs
FUBs.AsIOAccRead (); FUBs.AsIOAccRead ();
IF (FUBs.AsIOAccRead.status = ERR_OK) THEN IF (FUBs.AsIOAccRead.status = ERR_OK) THEN
udSLXState := FUBs.AsIOAccRead.value; udSLXState := FUBs.AsIOAccRead.value;
END_IF END_IF
END_ACTION END_ACTION

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.7.5.60 SP?> <?AutomationStudio FileVersion="4.9"?>
<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program"> <Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
<Files> <Files>
<File Description="Aktionen Maschinentask">Action.st</File> <File Description="Aktionen Maschinentask">Action.st</File>
@@ -7,5 +7,6 @@
<File Private="true">IO.Var</File> <File Private="true">IO.Var</File>
<File>machine.st</File> <File>machine.st</File>
<File Description="Local data types" Private="true">Types.typ</File> <File Description="Local data types" Private="true">Types.typ</File>
<File Description="Alarme">TxtAlarms.tmx</File>
</Files> </Files>
</Program> </Program>

View File

@@ -1,6 +1,9 @@
(*//Datenstrukturen*) (*//Datenstrukturen*)
VAR VAR
SafeMC_Status : ARRAY[1..8] OF typ_SafeMC_Status; (*Status Safe MC Achsen*) SafeMC_Status : ARRAY[1..8] OF typ_SafeMC_Status; (*Status Safe MC Achsen*)
uiInSPLC_DiagCode_EStop : UINT; (*Diagnosecode FB*)
uiInSPLC_DiagCode_SafetyDoors : UINT; (*Diagnosecode FB*)
uiInSPLC_DiagCode_EDMP4 : UINT; (*Diagnosecode FB*)
END_VAR END_VAR
(*//Eing<6E>nge*) (*//Eing<6E>nge*)
(*#################################################################################################################*) (*#################################################################################################################*)
@@ -8,10 +11,9 @@ END_VAR
VAR VAR
bInMaintDoorLeftClosed : BOOL; (*Wartungst<73>r Fl<46>gel Links Geschlossen*) bInMaintDoorLeftClosed : BOOL; (*Wartungst<73>r Fl<46>gel Links Geschlossen*)
bInMaintDoorLeftError : BOOL; (*Wartungst<73>r Fl<46>gel Links Fehler*) bInMaintDoorLeftError : BOOL; (*Wartungst<73>r Fl<46>gel Links Fehler*)
bInMaintDoorLeftLocked : BOOL; (*Wartungst<73>r Fl<46>gel Links Verriegelt*) bInReefedP4 : BOOL; (*R<>ckf<6B>hrkreis f<>r P4*)
bInMaintDoorRightClosed : BOOL; (*Wartungst<73>r Fl<46>gel Rechts Geschlossen*) bInMaintDoorRightClosed : BOOL; (*Wartungst<73>r Fl<46>gel Rechts Geschlossen*)
bInMaintDoorRightError : BOOL; (*Wartungst<73>r Fl<46>gel Rechts Fehler*) bInMaintDoorRightError : BOOL; (*Wartungst<73>r Fl<46>gel Rechts Fehler*)
bInMaintDoorRightLocked : BOOL; (*Wartungst<73>r Fl<46>gel Rechts Verriegelt*)
END_VAR END_VAR
(*//60K3*) (*//60K3*)
VAR VAR

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<tmx version="1.4">
<header creationtool="B&amp;R Automation Studio" creationtoolversion="4.2" datatype="unknown" segtype="sentence" adminlang="en" srclang="en" o-tmf="TMX">
<note>Change the namespace to define where this text module should be located within the logical structure of your texts</note>
<prop type="x-BR-TS:Namespace">Machine/Alarms</prop>
</header>
<body>
<tu tuid="EStopPanel">
<tuv xml:lang="de">
<seg>Stopptaster Panel betätigt</seg>
</tuv>
</tu>
<tu tuid="EStopLaser">
<tuv xml:lang="de">
<seg>NotHalt von Laser</seg>
</tuv>
</tu>
<tu tuid="EStopLine">
<tuv xml:lang="de">
<seg>NotHalt von Liniensteuerung</seg>
</tuv>
</tu>
<tu tuid="EStopNotAck">
<tuv xml:lang="de">
<seg>Nothalt nicht quittiert</seg>
</tuv>
</tu>
<tu tuid="MaintDoorLeftOpen">
<tuv xml:lang="de">
<seg>Wartungstür Links offen</seg>
</tuv>
</tu>
<tu tuid="MaintDoorRightOpen">
<tuv xml:lang="de">
<seg>Wartungstür Rechts offen</seg>
</tuv>
</tu>
<tu tuid="MaintDoorsLineNotOk">
<tuv xml:lang="de">
<seg>Wartungstüren von Liniensteuerunge nicht geschlossen / verriegelt</seg>
</tuv>
</tu>
<tu tuid="MaintDoorNotOk">
<tuv xml:lang="de">
<seg>Sicherheit Laserzelle nach Türöffnung oder durch Liniensteuerung (Tore Offen) deaktiviert</seg>
</tuv>
</tu>
<tu tuid="MaintDoorNotAck">
<tuv xml:lang="de">
<seg>Sicherheit Laserzelle nicht quittiert</seg>
</tuv>
</tu>
<tu tuid="GatesNotClosed">
<tuv xml:lang="de">
<seg>Schutztore Shuttles nicht geschlossen (Zugang zu Sicherheitsbereich Liniensteuerung ist Offen)</seg>
</tuv>
</tu>
<tu tuid="SafetyLineNOk">
<tuv xml:lang="de">
<seg>Sicherheit an Liniensteuerung nicht quittiert</seg>
</tuv>
</tu>
<tu tuid="RefeedP4">
<tuv xml:lang="de">
<seg>Rücklesefehler 24 V Potential P4 (nach Sicherheit Zelle)</seg>
</tuv>
</tu>
</body>
</tmx>

View File

@@ -8,7 +8,6 @@ TYPE
typ_FUB : STRUCT (*Funktionsbausteine*) typ_FUB : STRUCT (*Funktionsbausteine*)
TON_AirOk1 : TON; TON_AirOk1 : TON;
TON_AirNOk1 : TON; TON_AirNOk1 : TON;
TON_ReleaseToolRob1 : TON;
TON_AutoOff : TON; TON_AutoOff : TON;
TON_StartDelay : TON; (*Wartezeit nach Start*) TON_StartDelay : TON; (*Wartezeit nach Start*)
TOF_MachineOn : TOF; (*Nachlauf Anlage Ein*) TOF_MachineOn : TOF; (*Nachlauf Anlage Ein*)
@@ -16,6 +15,18 @@ TYPE
TOF_KeyAuto : TOF; (*Ausschaltvert<72>gerung Hand Schl<68>sselschalter (wg. Umschalten)*) TOF_KeyAuto : TOF; (*Ausschaltvert<72>gerung Hand Schl<68>sselschalter (wg. Umschalten)*)
AsIOAccRead : AsIOAccRead; (*Register aus SLX Lesen*) AsIOAccRead : AsIOAccRead; (*Register aus SLX Lesen*)
TARGETInfo : TARGETInfo; TARGETInfo : TARGETInfo;
Alarm_EStopPanel : FUB_AlarmSimple;
Alarm_EStopLaser : FUB_AlarmSimple;
Alarm_EStopLine : FUB_AlarmSimple;
Alarm_EStopNotAck : FUB_AlarmSimple;
Alarm_MaintDoorLeftOpen : FUB_AlarmSimple;
Alarm_MaintDoorRightOpen : FUB_AlarmSimple;
Alarm_MaintDoorsLineOpen : FUB_AlarmSimple;
Alarm_MaintDoorNotOk : FUB_AlarmSimple;
Alarm_MaintDoorNotAck : FUB_AlarmSimple;
Alarm_GatesNotClosed : FUB_AlarmSimple;
Alarm_SafetyLineNotOk : FUB_AlarmSimple;
Alarm_RefeedP4 : FUB_AlarmSimple;
END_STRUCT; END_STRUCT;
typ_MpFUB : STRUCT (*MApp Funktionsbausteine*) typ_MpFUB : STRUCT (*MApp Funktionsbausteine*)
bDummy : BOOL; bDummy : BOOL;
@@ -35,19 +46,4 @@ TYPE
MachineLockUnlockDoors : gtyp_VCButton; (*T<>renverriegeln (Einrichtbetrieb)*) MachineLockUnlockDoors : gtyp_VCButton; (*T<>renverriegeln (Einrichtbetrieb)*)
TempCtrl : gtyp_VCButton; (*Temperaturregelung*) TempCtrl : gtyp_VCButton; (*Temperaturregelung*)
END_STRUCT; END_STRUCT;
typ_AlarmIDs : STRUCT (*Puffer f<>r Alarm IDs*)
udEStop : ARRAY[1..gNUMBER_OF_ESTOPS]OF UDINT; (*Nothalttaster*)
udEStopHPPump : UDINT; (*Nothalt von HD-Pumpe*)
udDoor : ARRAY[1..gNUMBER_OF_DOORS]OF UDINT; (*Wartungst<73>ren*)
udDoorUnreseted : ARRAY[1..gNUMBER_OF_DOORS]OF UDINT; (*Wartungst<73>ren*)
udRefeedEstop : UDINT; (*R<>ckf<6B>hrkreis Nothalt*)
udRefeedInfeed : UDINT; (*R<>ckf<6B>hrkreis Einlegebereich*)
udBumperActivated : UDINT; (*Handschutzleiste ausgel<65>st*)
udBumperNotReseted : UDINT; (*Handschutzleiste nicht quittiert*)
END_STRUCT;
typ_AlarmSnippets : STRUCT (*Infos f<>r Alarmtexte*)
strEStopButton : STRING[40]; (*Identifikation Nothalttaster*)
strDoorOpen : STRING[40]; (*Identifikaton Wartungst<73>r*)
strDoorUnreseted : STRING[40]; (*Identifikaton Wartungst<73>r*)
END_STRUCT;
END_TYPE END_TYPE

View File

@@ -81,7 +81,7 @@ PROGRAM _CYCLIC
gVisuCtrlMP.MainPage.usSetLayer := 0; //r<EFBFBD>cksetzen gVisuCtrlMP.MainPage.usSetLayer := 0; //r<EFBFBD>cksetzen
END_IF END_IF
ELSIF (FUBs.TOF_KeyAuto.Q AND NOT bInKeyManual) AND (gMachine1.enMode <> enMACH_AUTOMATIC) AND FALSE THEN //FixMe ELSIF (FUBs.TOF_KeyAuto.Q AND NOT bInKeyManual) AND (gMachine1.enMode <> enMACH_AUTOMATIC) AND bInKeyAuto THEN //FixMe
// AND NOT gMachine1.bDisableMachine AND NOT gAlarmReaction.b1StopAutomatic // AND NOT gMachine1.bDisableMachine AND NOT gAlarmReaction.b1StopAutomatic
//AND (gUserRights.Right1_Operate >= mpUSER_ACCESS_ACTUATE) THEN //AND NOT gAlarmReaction.b2FinishCycle THEN //AND (gUserRights.Right1_Operate >= mpUSER_ACCESS_ACTUATE) THEN //AND NOT gAlarmReaction.b2FinishCycle THEN
//Automatik anfordern //Automatik anfordern
@@ -146,154 +146,10 @@ PROGRAM _CYCLIC
//Alarme (Maschinenalarme) //Alarme (Maschinenalarme)
//================================================= DoMachineAlarms;
//1 Druckluft<EFBFBD>berwachung
(*
FUBs.TON_AirOk1.IN := gbInAirOkEStop ; //gbInAirOK;
FUBs.TON_AirOk1.PT := t#2s;
FUBs.TON_AirOk1 ();
FUBs.TON_AirNOk1.IN := gbSPLCInEstopOk AND gMachine1.bMachineON AND NOT gbInAirOkEStop;;
FUBs.TON_AirNOk1.PT := t#5s;
FUBs.TON_AirNOk1 ();
IF (AlarmIDs.udAirCtrlEstop = 0) AND FUBs.TON_AirNOk1.Q THEN
AlarmIDs.udAirCtrlEstop := MpAlarmXSet (gMpAlarmXCore, 'AirCtrlEstop');
END_IF
IF (AlarmIDs.udAirCtrlEstop > 0) AND FUBs.TON_AirOk1.Q THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udAirCtrlEstop);
AlarmIDs.udAirCtrlEstop := 0;
END_IF
*)
//Alarme (Sicherheitsalarme) //Alarme (Sicherheitsalarme)
//================================================= DoSafetyAlarms;
//Nothalt bet<EFBFBD>tigt
(*
IF NOT gbSInEStop AND gMachine1.bMachineON THEN
IF (AlarmIDs.udEStop[1] = 0) THEN
brsstrcpy (ADR (AlarmTextSnippets.strEStopButton), ADR ('Einlegen / Panel'));
AlarmIDs.udEStop[1] := MpAlarmXSet (gMpAlarmXCore, 'EStopButton');
END_IF
ELSIF gbSInEStop AND (AlarmIDs.udEStop[1] > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udEStop[1]);
AlarmIDs.udEStop[1] := 0;
END_IF
//Nothalt von HD-Pumpe
IF NOT gbSInEstopHPPump AND gMachine1.bMachineON THEN
IF (AlarmIDs.udEStopHPPump = 0) THEN
AlarmIDs.udEStopHPPump := MpAlarmXSet (gMpAlarmXCore, 'EStopHPPump');
END_IF
ELSIF gbSInEstopHPPump AND (AlarmIDs.udEStopHPPump > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udEStopHPPump);
AlarmIDs.udEStopHPPump := 0;
END_IF
//Nothalt nicht quittiert
IF gbSInEStop AND gbSInEstopHPPump AND NOT gbSPLCInEstopOk AND gMachine1.bMachineON THEN
MpAlarmXSet (gMpAlarmXCore, 'EStopNACK');
ELSIF gbSPLCInEstopOk THEN
MpAlarmXReset (gMpAlarmXCore, 'EStopNACK');
END_IF
//Wartungst<EFBFBD>r offen
IF NOT gbSInMaintenanceDoorFrontOk AND gMachine1.bMachineON THEN
IF (AlarmIDs.udDoor[1] = 0) THEN
brsstrcpy (ADR (AlarmTextSnippets.strDoorOpen), ADR ('Vorne'));
AlarmIDs.udDoor[1] := MpAlarmXSet (gMpAlarmXCore, 'DoorOpen');
END_IF
ELSIF gbSInMaintenanceDoorFrontOk AND (AlarmIDs.udDoor[1] > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udDoor[1]);
AlarmIDs.udDoor[1] := 0;
END_IF
IF NOT gbSInMaintenanceDoorBackOk AND gMachine1.bMachineON THEN
IF (AlarmIDs.udDoor[2] = 0) THEN
brsstrcpy (ADR (AlarmTextSnippets.strDoorOpen), ADR ('Hinten Links'));
AlarmIDs.udDoor[2] := MpAlarmXSet (gMpAlarmXCore, 'DoorOpen');
END_IF
ELSIF gbSInMaintenanceDoorBackOk AND (AlarmIDs.udDoor[2] > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udDoor[2]);
AlarmIDs.udDoor[2] := 0;
END_IF
IF NOT gbSInMaintenanceDoorBack2Ok AND gMachine1.bMachineON THEN
IF (AlarmIDs.udDoor[3] = 0) THEN
brsstrcpy (ADR (AlarmTextSnippets.strDoorOpen), ADR ('Hinten rechts'));
AlarmIDs.udDoor[3] := MpAlarmXSet (gMpAlarmXCore, 'DoorOpen');
END_IF
ELSIF gbSInMaintenanceDoorBackOk AND (AlarmIDs.udDoor[3] > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udDoor[3]);
AlarmIDs.udDoor[3] := 0;
END_IF
//Wartungst<EFBFBD>r nicht quittiert
IF gbSInMaintenanceDoorFrontOk AND NOT gbSPLCInDoorsFrontOk AND gMachine1.bMachineON THEN
IF (AlarmIDs.udDoorUnreseted[1] = 0) THEN
brsstrcpy (ADR (AlarmTextSnippets.strDoorUnreseted), ADR ('Vorne'));
AlarmIDs.udDoorUnreseted[1] := MpAlarmXSet (gMpAlarmXCore, 'DoorUnreseted');
END_IF
ELSIF gbSInMaintenanceDoorFrontOk AND (AlarmIDs.udDoorUnreseted[1] > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udDoorUnreseted[1]);
AlarmIDs.udDoorUnreseted[1] := 0;
END_IF
IF gbSInMaintenanceDoorBackOk AND NOT gbSPLCInDoorsBackOk AND gMachine1.bMachineON THEN
IF (AlarmIDs.udDoorUnreseted[2] = 0) THEN
brsstrcpy (ADR (AlarmTextSnippets.strDoorUnreseted), ADR ('Vorne'));
AlarmIDs.udDoorUnreseted[2] := MpAlarmXSet (gMpAlarmXCore, 'DoorUnreseted');
END_IF
ELSIF gbSPLCInDoorsBackOk AND (AlarmIDs.udDoorUnreseted[2] > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udDoorUnreseted[2]);
AlarmIDs.udDoorUnreseted[2] := 0;
END_IF
//Handschutzleiste ausgel<EFBFBD>st
IF NOT gbSInBumperGateOk THEN
IF (AlarmIDs.udBumperActivated = 0) THEN
AlarmIDs.udBumperActivated := MpAlarmXSet (gMpAlarmXCore, 'BumperActivated');
END_IF
ELSIF gbSInBumperGateOk AND (AlarmIDs.udBumperActivated > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udBumperActivated);
AlarmIDs.udBumperActivated := 0;
END_IF
//Handschutzleiste nicht quittiert
IF gbSPLCInErrorBumper THEN
IF (AlarmIDs.udBumperNotReseted = 0) THEN
AlarmIDs.udBumperNotReseted := MpAlarmXSet (gMpAlarmXCore, 'BumperNotReseted');
END_IF
ELSIF NOT gbSPLCInErrorBumper AND (AlarmIDs.udBumperNotReseted > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udBumperNotReseted);
AlarmIDs.udBumperNotReseted := 0;
END_IF
//R<EFBFBD>cklesefehler Nothalt
IF gbSPLCInRdbckErrorEStop THEN
IF (AlarmIDs.udRefeedEstop = 0) THEN
AlarmIDs.udRefeedEstop := MpAlarmXSet (gMpAlarmXCore, 'RefeedEStop');
END_IF
ELSIF NOT gbSPLCInRdbckErrorEStop AND (AlarmIDs.udRefeedEstop > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udRefeedEstop);
AlarmIDs.udRefeedEstop := 0;
END_IF
//R<EFBFBD>cklesefehler Einlegebereich
IF gbSPLCInRdbckErrorInfeed THEN
IF (AlarmIDs.udRefeedInfeed = 0) THEN
AlarmIDs.udRefeedInfeed := MpAlarmXSet (gMpAlarmXCore, 'RefeedInfeed');
END_IF
ELSIF NOT gbSPLCInRdbckErrorInfeed AND (AlarmIDs.udRefeedInfeed > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udRefeedInfeed);
AlarmIDs.udRefeedInfeed := 0;
END_IF
*)
//Sch<EFBFBD>tz<EFBFBD>berwachugn R<EFBFBD>cklesesignale - Dummyaufruf wg. Mapping (werden direkt in SPLC gemappt //Sch<EFBFBD>tz<EFBFBD>berwachugn R<EFBFBD>cklesesignale - Dummyaufruf wg. Mapping (werden direkt in SPLC gemappt
//St<EFBFBD>rung quittieren //St<EFBFBD>rung quittieren

View File

@@ -19,8 +19,6 @@ END_VAR
VAR VAR
MpData : typ_MpData; (*Daten f<>r MappBausteine*) MpData : typ_MpData; (*Daten f<>r MappBausteine*)
VCButtons : typ_VCButtons; (*Visu Buttons*) VCButtons : typ_VCButtons; (*Visu Buttons*)
AlarmIDs : typ_AlarmIDs; (*Alarm IDs*)
AlarmTextSnippets : typ_AlarmSnippets; (*Text Snippet Variablen f<>r Alarme*)
END_VAR END_VAR
(*//Funktionsbl<62>cke*) (*//Funktionsbl<62>cke*)
VAR VAR

View File

@@ -11,6 +11,7 @@
<Object Type="Package" Description="Visualisierung">Vsualization</Object> <Object Type="Package" Description="Visualisierung">Vsualization</Object>
<Object Type="Package" Description="Filemanagement">File</Object> <Object Type="Package" Description="Filemanagement">File</Object>
<Object Type="Package" Description="Global libraries">Libraries</Object> <Object Type="Package" Description="Global libraries">Libraries</Object>
<Object Type="Package" Description="Benutzer Bibliotheken">LibrariesUser</Object>
<Object Type="File" Description="Projektpasswörter">Passwords.txt</Object> <Object Type="File" Description="Projektpasswörter">Passwords.txt</Object>
<Object Type="Package">CNCProgramme</Object> <Object Type="Package">CNCProgramme</Object>
<Object Type="Package" Description=" Scene Viewer für Simulation">SceneViewer</Object> <Object Type="Package" Description=" Scene Viewer für Simulation">SceneViewer</Object>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<?AutomationStudio Version="4.9.2.46"?> <?AutomationStudio Version="4.9.3.144 SP"?>
<AlarmSystem xmlns="http://br-automation.co.at/AS/VC/Project"> <AlarmSystem xmlns="http://br-automation.co.at/AS/VC/Project">
<Property Name="HistoryLength" Value="1000"/> <Property Name="HistoryLength" Value="1000"/>
<Property Name="SnippetBufferSize" Value="150"/> <Property Name="SnippetBufferSize" Value="150"/>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<?AutomationStudio Version="4.9.2.46"?> <?AutomationStudio Version="4.9.3.144 SP"?>
<ComponentVersions xmlns="http://br-automation.co.at/AS/VC/Project"> <ComponentVersions xmlns="http://br-automation.co.at/AS/VC/Project">
<ComponentVersion> <ComponentVersion>
<Property Name="ClassId" Value="0x00000500"/> <Property Name="ClassId" Value="0x00000500"/>

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<?AutomationStudio Version="4.9.2.46"?> <?AutomationStudio Version="4.9.3.144 SP"?>
<Languages xmlns="http://br-automation.co.at/AS/VC/Project"> <Languages xmlns="http://br-automation.co.at/AS/VC/Project">
<Property Name="Default" Value="de"/> <Property Name="Default" Value="de"/>
<Property Name="FallBackLanguage" Value="de"/> <Property Name="FallBackLanguage" Value="de"/>

View File

@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<?AutomationStudio Version="4.9.2.46"?> <?AutomationStudio Version="4.9.3.144 SP"?>
<Project xmlns="http://br-automation.co.at/AS/VC/Project"> <Project xmlns="http://br-automation.co.at/AS/VC/Project">
<Property Name="EnableEvents" Value="True"/> <Property Name="EnableEvents" Value="True"/>
<Property Name="SharedTargetResourceRoot" Value=""/> <Property Name="SharedTargetResourceRoot" Value=""/>
<Property Name="TextIDMax" Value="174318"/> <Property Name="TextIDMax" Value="183407"/>
<SourceFiles> <SourceFiles>
<Source File="Languages.vcr"/> <Source File="Languages.vcr"/>
<Source File="TextGroups\DateTimeFormats.txtgrp"/> <Source File="TextGroups\DateTimeFormats.txtgrp"/>
@@ -26,6 +26,8 @@
<Source File="TextGroups\Events.txtgrp"/> <Source File="TextGroups\Events.txtgrp"/>
<Source File="TextGroups\MpCncJogState.txtgrp"/> <Source File="TextGroups\MpCncJogState.txtgrp"/>
<Source File="TextGroups\MpCNCJogCoordsystem.txtgrp"/> <Source File="TextGroups\MpCNCJogCoordsystem.txtgrp"/>
<Source File="TextGroups\txptToolstate.txtgrp"/>
<Source File="TextGroups\txtStepsAuto.txtgrp"/>
<Source File="UnitGroups\Length.vcug"/> <Source File="UnitGroups\Length.vcug"/>
<Source File="UnitGroups\Mass.vcug"/> <Source File="UnitGroups\Mass.vcug"/>
<Source File="UnitGroups\Volume.vcug"/> <Source File="UnitGroups\Volume.vcug"/>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<?AutomationStudio Version="4.9.3.144 SP"?>
<TextGroup xmlns="http://br-automation.co.at/AS/VC/Project" Name="txptToolstate">
<Property Name="Description" Value="Werkzeugstatus"/>
<Property Name="Index" Value="5"/>
<TextSnippets/>
<TextLayer LanguageId="en">
<Text ID="181323" Value=""/>
<Text ID="181324" Value=""/>
<Text ID="181325" Value=""/>
</TextLayer>
<TextLayer LanguageId="de">
<Text ID="181323" Value="Werkzeug Leer"/>
<Text ID="181324" Value="Neues Bauteil"/>
<Text ID="181325" Value="Fertiges Bauteil"/>
</TextLayer>
<IndexMap>
<Index ID="181323" Value="0"/>
<Index ID="181324" Value="1"/>
<Index ID="181325" Value="2"/>
</IndexMap>
</TextGroup>

Some files were not shown because too many files have changed in this diff Show More