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"?>
<?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">
<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" />
<IEC ExtendedConstants="true" IecExtendedComments="true" KeywordsAsStructureMembers="false" NamingConventions="true" Pointers="true" Preprocessor="false" />
<Motion RestartAcoposParameter="true" RestartInitParameter="true" />

View File

@@ -1,5 +1,5 @@
<?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">
<ConfigurationManager ActiveConfigurationName="Config0" />
<Deployment Value="ActiveCpu" />

View File

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

View File

@@ -9,6 +9,7 @@ TYPE
gytp_IPGInterfaceOut : STRUCT (*Output to IPG Laser Interface*)
bPilotLaserOn : BOOL := FALSE; (*Pilotlaser Einschalten*)
bEnalbeLaser : BOOL := FALSE; (*Laser mit Programm 0 einschalten*)
bCuttingGasOn : BOOL := FALSE; (*Schneidgas Einschalten*)
uiOutputPower : UINT; (*Laserleistung in W*)
END_STRUCT;
gytp_IPGInterface : STRUCT (*IPG Laser Interface*)
@@ -17,16 +18,16 @@ TYPE
END_STRUCT;
END_TYPE
(*//Interface Raytools-Interface*)
(*//Interface Raytools-Laserkopf*)
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*)
bHeadIsMidPos : BOOL := FALSE; (*Kopf ist in Mittelstellung*)
bHeadIsInFollowpos : BOOL := FALSE; (*Kopf ist is in H<>henregelung*)
bHeadCalibrated : BOOL; (*Kopf ist kalibriert*)
END_STRUCT;
gytp_RTInterfaceOut : STRUCT (*Output to IPG Laser Interface*)
gytp_RTInterfaceOut : STRUCT (*Output to Raytools Head*)
bMidPos : BOOL := FALSE; (*InMittelpos*)
bFollowPos : BOOL := FALSE; (*Position folgen*)
bCalibrateLaser : BOOL; (*Kalibrieren*)
@@ -37,4 +38,53 @@ TYPE
END_STRUCT;
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*)
VAR RETAIN
gIPGLaserInterface : gytp_IPGInterface;
gRTLaserInterface : gytp_RTInterface;
VAR
gIPGLaserInterface : gytp_IPGInterface; (*Interface IPG Laser*)
gRTLaserInterface : gytp_RTInterface; (*Interface Raytools*)
gLineInterface : gytp_LineInterface; (*Interface Liniensteuerung*)
END_VAR
(*Variablen / Strukturen*)
VAR

View File

@@ -81,13 +81,23 @@ PROGRAM _CYCLIC
LaserOut.Control.bResetErrors := gMP7121.Button;
END_IF
IF gbInErrorPowerSupplyP4 THEN
//Ohne Gas Laser deaktivieren
LaserOut.uiOutPutPower := 0;
END_IF
// Einzelschussmodus
IF EDGEPOS (Status.bLocalCtrl) THEN
Status.uiShootPower := 350;
FUBs.TON_Shot.PT := t#30ms;
END_IF
IF NOT Status.bLocalCtrl THEN
Status.bShootMode := FALSE;
END_IF
TON_Shot.IN := (LaserOut.uiOutPutPower > 0) AND LaserOut.Control.bLaserOn AND Status.bShootMode;
TON_Shot ();
IF TON_Shot.Q THEN
FUBs.TON_Shot.IN := (LaserOut.uiOutPutPower > 0) AND LaserOut.Control.bLaserOn AND Status.bShootMode;
FUBs.TON_Shot ();
IF FUBs.TON_Shot.Q THEN
LaserOut.uiOutPutPower := 0;
END_IF
@@ -95,11 +105,11 @@ PROGRAM _CYCLIC
//Ausg<EFBFBD>nge
//==============================================
//Schneidgas
TOF_CuttingGas.IN := (LaserOut.uiOutPutPower > 0) AND LaserOut.Control.bLaserOn;
TOF_CuttingGas.PT := t#1s;
TOF_CuttingGas ();
bOuCuttingGas := TOF_CuttingGas.Q;
//Schneidgas (Mit Laser Einschalten oder <EFBFBD>ber M-Befahl aus CNC Task
FUBs.TOF_CuttingGas.IN := (LaserOut.uiOutPutPower > 0) AND LaserOut.Control.bLaserOn;
FUBs.TOF_CuttingGas.PT := t#1s;
FUBs.TOF_CuttingGas ();
bOuCuttingGas := FUBs.TOF_CuttingGas.Q OR gIPGLaserInterface.Out.bCuttingGasOn;
//Byte 1
LaserOut.Control.bRequestLaser := TRUE;
@@ -145,4 +155,109 @@ PROGRAM _CYCLIC
//Byte 10
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

View File

@@ -1,5 +1,5 @@
<?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">
<Files>
<File Description="Cyclic code">Cyclic.st</File>
@@ -8,5 +8,6 @@
<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>
<File Description="Alarme">TxtAlarms.tmx</File>
</Files>
</Program>

View File

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

View File

@@ -2,7 +2,7 @@
PROGRAM _INIT
//Einzelschuss
TON_Shot.PT := t#20ms;
FUBs.TON_Shot.PT := t#30ms;
Status.bLocalCtrl := 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
typ_Status : STRUCT
typ_Status : STRUCT (*Stati*)
bLocalCtrl : BOOL; (*Lokale Steuerung - Interface deaktiviet*)
bShootMode : BOOL; (*Einzelschuss f<>r lokale Steuerung*)
uiShootPower : UINT := 350; (*Power Einzelshuss*)
END_STRUCT;
typ_In : STRUCT
Status : {REDUND_UNREPLICABLE} typ_In_Status;
typ_In : STRUCT (*Eingangsdaten IPG*)
Status : {REDUND_UNREPLICABLE} typ_In_Status; (*Status 1*)
uiOutPutPower : UINT; (*Ausgangsleistung [W]*)
usOpticalChannel : USINT; (*Optischer Kanal*)
usProgramNumber : USINT; (*Programmnummer*)
Status2 : typ_In_Status2;
Status2 : typ_In_Status2; (*Status 1*)
usLaserNr : USINT; (*Lasernummer*)
END_STRUCT;
typ_In_Status : STRUCT
typ_In_Status : STRUCT (*Laserstatus 1*)
bLaserIsAssigned : BOOL; (*Laser ist zugeordnet / Steuerung <20>ber Feldbus*)
bLaserIsOn : BOOL; (*Laser ist ein - Spannungsversorgung ist ein*)
bSystemError : BOOL; (*Systemfehler*)
@@ -30,7 +31,7 @@ TYPE
bLaserAlive : BOOL; (*Feldbus aktiv*)
bSoftwareCtrlActive : BOOL; (*LaserNet Software aktiv*)
END_STRUCT;
typ_In_Status2 : STRUCT
typ_In_Status2 : STRUCT (*Laserstatus 2*)
bLaserError : BOOL; (*St<53>rung Laser*)
bLaserWarning : BOOL; (*Warnung Laser*)
bChillerError : BOOL; (*St<53>rung K<>hler*)
@@ -45,7 +46,7 @@ TYPE
bHighBackReflection : BOOL; (*R<>ckreflektion zu hoch*)
bModulePowerSupplyWarning : BOOL; (*Power Supply Warnung*)
END_STRUCT;
typ_Out : STRUCT
typ_Out : STRUCT (*Ausgangsdaten*)
Control : typ_Out_Ctrl;
uiOutPutPower : UINT; (*Laserleistung [W]*)
usOpticalChannel : USINT; (*Optischer Kanal - immer 1*)
@@ -53,7 +54,7 @@ TYPE
uiRampingTime : UINT; (*Rampenzeiten [ms]*)
usLaserNr : USINT; (*LaserNummer - Immer 0*)
END_STRUCT;
typ_Out_Ctrl : STRUCT
typ_Out_Ctrl : STRUCT (*Ausgangssteuerung*)
bRequestLaser : BOOL; (*Laser Anfordern - Immer Ein*)
bLaserOn : BOOL; (*Laser Spannungsversorgung Ein*)
bResetErrors : BOOL; (*St<53>rungen quittieren*)
@@ -67,4 +68,25 @@ TYPE
bSyncInput : BOOL; (*Synchronisationseingang an Programm*)
bExternalError : BOOL; (*Externer Fehler - False*)
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

View File

@@ -1,7 +1,7 @@
(*//Strukturen*)
VAR
Status : typ_Status;
LaserOut : typ_Out;
LaserIn : typ_In;
TON_Shot : TON;
TOF_CuttingGas : TOF;
FUBs : typ_FUBs;
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="IPG Laser">IPG</Object>
<Object Type="Package" Description="Schneidkopf">RayTools</Object>
<Object Type="Program" Language="IEC" Description="Interface zur Linie">LineInterface</Object>
</Objects>
</Package>

View File

@@ -8,31 +8,57 @@ PROGRAM _CYCLIC
gRTLaserInterface.In.bHeadCalibrated := bInCalibrated;
//Interface an Raytools Kopf
bOuFollowPos := gRTLaserInterface.Out.bFollowPos AND NOT 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;
bOuFollowPos := gRTLaserInterface.Out.bFollowPos AND NOT FUBs.TOF_Error.Q AND bInReady AND NOT bInPosLimits;
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;
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;
TOF_FollowPos.PT := t#100ms;
TOF_FollowPos ();
FUBs.TOF_FollowPos.IN := bOuFollowPos;
FUBs.TOF_FollowPos.PT := t#100ms;
FUBs.TOF_FollowPos ();
TOF_FollowPosAutoErrorReset.IN := bOuFollowPos;
TOF_FollowPosAutoErrorReset.PT := t#350ms;
TOF_FollowPosAutoErrorReset ();
FUBs.TOF_FollowPosAutoErrorReset.IN := bOuFollowPos;
FUBs.TOF_FollowPosAutoErrorReset.PT := t#350ms;
FUBs.TOF_FollowPosAutoErrorReset ();
TOF_Error.IN := bInAlarm;
TOF_Error.PT := t#20ms;
TOF_Error ();
FUBs.TOF_Error.IN := bInAlarm;
FUBs.TOF_Error.PT := t#20ms;
FUBs.TOF_Error ();
TON_MidPosTimeout.IN := bOuMidpos;
TON_MidPosTimeout.PT := t#1s;
TON_MidPosTimeout ();
FUBs.TON_MidPosTimeout.IN := bOuMidpos;
FUBs.TON_MidPosTimeout.PT := t#1s;
FUBs.TON_MidPosTimeout ();
TOF_MidPosTimeouterror.IN := TON_MidPosTimeout.Q;
TOF_MidPosTimeouterror.PT := t#20ms;
TOF_MidPosTimeouterror ();
FUBs.TOF_MidPosTimeouterror.IN := FUBs.TON_MidPosTimeout.Q;
FUBs.TOF_MidPosTimeouterror.PT := t#20ms;
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

View File

@@ -1,5 +1,5 @@
<?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">
<Files>
<File Description="Cyclic code">Cyclic.st</File>
@@ -8,5 +8,6 @@
<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>
<File Description="Alarme">TxtAlarms.tmx</File>
</Files>
</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
bDebug : BOOL;
TOF_FollowPos : TOF;
TOF_FollowPosAutoErrorReset : TOF;
TOF_Error : TOF;
TOF_MidPosTimeouterror : TOF;
TON_MidPosTimeout : TON;
END_VAR
(*//Strukturen*)
VAR
FUBs : typ_FUBs;
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
(* 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

View File

@@ -1,9 +1,6 @@
PROGRAM _INIT
MpFUBs.MpFileManagerConfig.MpLink := ADR (gFileManagerUI);
MpFUBs.MpFileManagerUI.MpLink := ADR (gFileManagerUI);
bReadDir := TRUE;
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*)
TYPE
typ_MpFUB : STRUCT (*Funktionsbausteine*)
MpFileManagerUI : MpFileManagerUI;
MpFileManagerConfig : MpFileManagerConfig;
typ_FUB : STRUCT (*Funktionsbausteine*)
DirInfo : DirInfo; (*Verzeichnisinfo*)
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_TYPE

View File

@@ -1,4 +1,39 @@
(*//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
MpFUBs : typ_MpFUB;
FUBs : typ_FUB;
END_VAR

View File

@@ -1,10 +1,9 @@
<?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">
<Objects>
<Object Type="File" Description="Globale Variablen - File">GlobalFile.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>
</Objects>
</Package>

View File

@@ -17,11 +17,13 @@ END_VAR
VAR
gbSPLCMachineOn : BOOL;
gbSPLCJogMode : BOOL; (*Handbetrieb*)
gbSPLCReefeedP4 : BOOL;
END_VAR
(*BOOL 106 bis 110*)
VAR
gbSPLCResetEStop : BOOL;
gbSPLCResetDoors : BOOL;
gbSPLCRefeedError : BOOL;
END_VAR
(*BOOL 111 bis 115*)
VAR
@@ -34,10 +36,12 @@ END_VAR
(*BOOL 001 bis 005*)
VAR
gbSPLCInEstopOk : BOOL; (*Safety PLC E-Stop ist Ok*)
gbSPLCInSafetyCNCOk : BOOL; (*Safety PLC Sicherheit f<>r CNC Achsen Ok*)
gbSPLCInSafetyShuttle1Ok : BOOL; (*Safety PLC Sicherheit f<>r Shuttle 1 Ok*)
gbSPLCInSafetyShuttle2Ok : BOOL; (*Safety PLC Sicherheit f<>r Shuttle 2 Ok*)
gbSPLCInSafetyCNC_SS1Ok : BOOL; (*Safety PLC Sicherheit f<>r CNC Achsen SS1 Ok (auch <20>ber FreigabeTaster)*)
gbSPLCInSafetyShuttles_SS1Ok : BOOL; (*Safety PLC Sicherheit f<>r Shuttles SS1 Ok (auch <20>ber FreigabeTaster)*)
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*)
gbSPLCInSafetyLaserOk : BOOL; (*Safety PLC Sicherheit Laser Ok*)
END_VAR
(*BOOL 006 bis 010*)
(*BOOL 011 bis 018*)
@@ -60,11 +64,11 @@ END_VAR
(*----------------------------------------------------------------------------------------------------------------*)
VAR
gbSInStopButtonLaser : BOOL; (*Sicherer Eingang 01/02 Equivalent - Not-Halt von Lasersteuerung*)
END_VAR
(*//Reserve*)
VAR
gbSInEStopMachine : BOOL; (*Sicherer Eingang 03/04 Equivalent - Not-Halt von Liniensteuerung*)
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*)
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*)
gbSInGate2Closed : BOOL; (*Sicherer Eingang 19/20 Equivalent - Shuttletor 2 geschlossen*)
END_VAR
@@ -72,26 +76,40 @@ END_VAR
(*IF1.ST10.IF1.ST5 - SO6300 (56K1)*)
(*----------------------------------------------------------------------------------------------------------------*)
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
(*#################################################################################################################*)
(*IF1.ST10.IF1.ST6 - SO6530 (56K2)*)
(*----------------------------------------------------------------------------------------------------------------*)
VAR
gbSOuP3 : BOOL; (*Potential P3 Nach Nothalt*)
gbSOuP4 : BOOL; (*Potential P4 Sicherheit f. Tore / Zelle komplett*)
gbSOuEStopToLineCtrl : {REDUND_UNREPLICABLE} BOOL := FALSE; (*Nothalt an Linie DO 1/2*)
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
(*#################################################################################################################*)
(*IF1.ST10.IF1.ST7 - SO6530 (56K3)*)
(*----------------------------------------------------------------------------------------------------------------*)
VAR
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
(*#################################################################################################################*)
(*IF1.ST10.IF1.ST8 - DI9371 (60K1)*)
(*----------------------------------------------------------------------------------------------------------------*)
(*//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)*)
(*----------------------------------------------------------------------------------------------------------------*)
@@ -130,6 +148,9 @@ END_VAR
(*#################################################################################################################*)
(*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)*)
(*----------------------------------------------------------------------------------------------------------------*)

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;
bOuErrorBothSensorsHigh := bInSensorCylinderFw AND bInSensorCylinderBw;
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*)
(*//-----------------------------------------------------------------------------------------------------*)
(*//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*)
(*//-----------------------------------------------------------------------------------------------------*)
VAR RETAIN
@@ -28,9 +37,3 @@ VAR RETAIN
gAxRestorePosAxisShuttle2 : {REDUND_UNREPLICABLE} McAcpAxRestorePosType; (*!!Permanent*)
gCalibrationDone : gtyp_CalibrationDone; (*!!Permanent Achskalibrierung erledigt*)
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*)
bRelDoorOpen : BOOL; (*Freigabe T<>r <20>ffnen*)
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*)
bAxisX : BOOL;
bAxisX1 : BOOL;

View File

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

View File

@@ -1,61 +1,12 @@
TYPE
gtyp_Recipe : STRUCT (*Prozessgrenzwerte*)
strCaption : STRING[15] := 'Default'; (*Bezeichnung Bauteil*)
strCNCPrg : STRING[80] := ''; (*CNCProgramm - Aufruf*)
gtyp_Recipe : STRUCT (*Rezept*)
strCaption : STRING[40] := 'Default'; (*Bezeichnung Bauteil*)
strCNCPrg : STRING[40] := ''; (*CNCProgramm - Aufruf*)
usPartID : USINT := 0; (*TeileNummer zur Identifikaton von Linie*)
usToolID : USINT := 0; (*Werkzeug ID*)
lrFeedrate : LREAL; (*Vorschub [mm/min]*)
uiLaserPowerMin : UINT; (*Minimale Laserleistung*)
uiLaserPower : UINT; (*Minimale Laserleistung*)
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

View File

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

View File

@@ -1,5 +1,5 @@
//Dynamische Variablen zuweisen
ACTION DoDynVars:
//Dynamische Variablen zuweisen
lMachine ACCESS ADR (gMachine1);
lRecipe ACCESS ADR (gRecipies[uiRecipe + 1]);
lCmdInterface ACCESS ADR (gCmd1);
@@ -163,37 +163,38 @@ ACTION DoDynVars:
END_ACTION
//Stati Sicherheiszonen
ACTION DoSafetyStates:
//Sicherheitszonen - Stati
States.bSafetyCNCAxisOk := gbSPLCInSafetyCNCOk OR gMachine1.bSimulation;
FUBs.TOF_SafetyCNCOk.IN := States.bSafetyCNCAxisOk;
FUBs.TOF_SafetyCNCOk.PT := t#180ms;
FUBs.TOF_SafetyCNCOk ();
States.bSafetyCNCAxisOkDelayed := FUBs.TOF_SafetyCNCOk.Q;
//Sicherheit SS1 CNC / Achsen Ok
States.bSafetyCNCAxisSS1Ok := gbSPLCInSafetyCNC_SS1Ok OR gMachine1.bSimulation;
FUBs.TOF_SafetyCNCSS1Ok.IN := States.bSafetyCNCAxisSS1Ok;
FUBs.TOF_SafetyCNCSS1Ok.PT := t#180ms;
FUBs.TOF_SafetyCNCSS1Ok ();
States.bSafetyCNCAxisSS1OkDelayed := FUBs.TOF_SafetyCNCSS1Ok.Q;
//SLS
States.bSafetyCNCAxisSLSOk := gbSPLCInSafetyCNC_SLSOk;
States.bSafetyShuttle1Ok := gbSPLCInSafetyShuttle1Ok OR gMachine1.bSimulation;
FUBs.TOF_SafetyShuttle1Ok.IN := States.bSafetyShuttle1Ok;
FUBs.TOF_SafetyShuttle1Ok.PT := t#100ms;
FUBs.TOF_SafetyShuttle1Ok ();
States.bSafetyShuttle1OkDelayed := FUBs.TOF_SafetyShuttle1Ok.Q;
States.bSafetyShuttle2Ok := gbSPLCInSafetyShuttle2Ok OR gMachine1.bSimulation;
FUBs.TOF_SafetyShuttle2Ok.IN := States.bSafetyShuttle2Ok;
FUBs.TOF_SafetyShuttle2Ok.PT := t#100ms;
FUBs.TOF_SafetyShuttle2Ok ();
States.bSafetyShuttle2OkDelayed := FUBs.TOF_SafetyShuttle2Ok.Q;
//Sicherheit SS1 f. Schuttle Ok
States.bSafetyShuttlesSS1Ok := gbSPLCInSafetyShuttles_SS1Ok OR gMachine1.bSimulation;
FUBs.TOF_SafetyShuttleSS1Ok.IN := States.bSafetyShuttlesSS1Ok;
FUBs.TOF_SafetyShuttleSS1Ok.PT := t#100ms;
FUBs.TOF_SafetyShuttleSS1Ok ();
States.bSafetyShuttleSS1OkDelayed := FUBs.TOF_SafetyShuttleSS1Ok.Q;
//SLS
States.bSafetyShuttlesSLSOk := gbSPLCInSafetyShuttles_SLSOk;
//Wartungst<EFBFBD>ren Ok (Verz<EFBFBD>gern wg. Achsupdates)
FUBs.TON_SimulationOn.IN := gMachine1.bMachineON AND gMachine1.bSimulation;
FUBs.TON_SimulationOn.PT := t#1s;
FUBs.TON_SimulationOn ();
//FixMe Tore
States.bSafetyLaserOk := gbSPLCInMaintDoorOk OR FUBs.TON_SimulationOn.Q;
States.bSafetyLaserOk := gbSPLCInSafetyLaserOk OR FUBs.TON_SimulationOn.Q;
END_ACTION
//Ist Positinen Stati bilden
ACTION DoPosStates:
//Ist Positionen abfragen
//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.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
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.bWorkposShuttle := MpFUB.AxBasic_Shuttle.IsHomed AND FC_InTolerance (MpFUB.AxBasic_Shuttle.Position, pParamPositions.lrWorkPosShuttle, -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.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
States.PosState.lrDiffX_Virtual := ABS (States.RealAxisPos.lrVX - States.RealAxisPos.lrX);
States.PosState.lrDiffX_X1 := ABS (States.RealAxisPos.lrX - States.RealAxisPos.lrX1);
@@ -230,15 +233,18 @@ ACTION DoPosStates:
END_IF
END_IF
(*
//Ist Positionen Zylinder
States.CylinderPosState.bFrontGateOpen := NOT Valves.bCloseGate AND gbInFrontGateOpen;
States.CylinderPosState.bFrontGateClosed := Valves.bCloseGate AND gbSInFrontGateOk;
*)
States.CylinderPosState.bGateShuttle1Open := Valves.bOpenGateShuttle1 AND bInGateIsOpenShuttle1;
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
//Bewegungsbedingungen
ACTION DoMoveConditions:
//==========================================================
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.bAxisZMoveNeg := TRUE;
@@ -246,17 +252,19 @@ ACTION DoMoveConditions:
MoveConditions.bAxisCMove := TRUE;
MoveConditions.bAxisAMove := TRUE;
MoveConditions.bAxisBMove := TRUE;
MoveConditions.bAxisShuttleMoveNeg := TRUE;// MpFUB.AxBasic_Z.Position > 160.0;
MoveConditions.bAxisShuttleMovePos := TRUE;// ((MpFUB.AxBasic_Shuttle.Position + 5) < MpFUB.AxBasic_X.Position) AND
// (MpFUB.AxBasic_Z.Position <> 160.0)
MoveConditions.bAxisShuttle2MoveNeg := TRUE;
MoveConditions.bAxisShuttle2MovePos := TRUE;
MoveConditions.bAxisShuttleMoveNeg := States.CylinderPosState.bGateShuttle1Open AND States.PosState.bLaserAboveShuttle AND gLineInterface.In.bRobOutOfShuttle1;
MoveConditions.bAxisShuttleMovePos := States.CylinderPosState.bGateShuttle1Open AND States.PosState.bLaserAboveShuttle AND gLineInterface.In.bRobOutOfShuttle1;
MoveConditions.bAxisShuttle2MoveNeg := States.CylinderPosState.bGateShuttle2Open AND States.PosState.bLaserAboveShuttle AND gLineInterface.In.bRobOutOfShuttle2;
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
//Zeiten berechnen
ACTION DoTimes:
//Zeiten
Times.diSteptime := gdiSystemTime - TimesLatch.diSteptime;
Times.diCycletime := gdiSystemTime - TimesLatch.diCycletime;
IF EDGEPOS (MpFUB.MpCNC5Axis.MoveProgram) THEN
@@ -269,8 +277,37 @@ ACTION DoTimes:
Times.diStoptime := gdiSystemTime - TimesLatch.diStoptime;
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:
//Fubs am Zyklus anfang
//Istpositionen Achsen Gantry
MpFUB.ReadRealPos_XVirtual ();
States.RealAxisPos.lrVX := MpFUB.ReadRealPos_XVirtual.CyclicPosition;
@@ -303,7 +340,7 @@ ACTION DoFUBs:
//Funktionsbausteine aufrufen
//und FUB Eing<EFBFBD>nge zur<EFBFBD>cksetzen
//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_X.ErrorReset := MpFUB.AxBasic_X.Error;
MpFUB.AxBasic_X1.ErrorReset := MpFUB.AxBasic_X1.Error;
@@ -448,7 +485,7 @@ ACTION DoFUBs:
//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 ();
FUBs.TON_PowerCNC.IN := NOT States.bSingleAxMode;
@@ -458,7 +495,7 @@ ACTION DoFUBs:
MpFUB.MpCNC5Axis.Power := lMachine.bMachineON AND FUBs.TON_PowerCNC.Q 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
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);
//FixMe Stop in Auto
//Einzelne Achsen Einschalten
@@ -491,17 +528,17 @@ ACTION DoFUBs:
NOT States.bAxPowerOffDoorReqManual AND
MpFUB.AxBasic_C.Info.ReadyToPowerOn AND
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
MpFUB.AxBasic_Shuttle.Info.ReadyToPowerOn AND
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
MpFUB.AxBasic_Shuttle2.Info.ReadyToPowerOn AND
MpFUB.AxBasic_Shuttle2.Active AND (MpFUB.AxBasic_Shuttle2.Info.PLCopenState <> mcAXIS_ERRORSTOP);
//Antriebe Stoppen
IF EDGENEG (States.bSafetyCNCAxisOk) THEN
IF EDGENEG (States.bSafetyCNCAxisSS1Ok) THEN
DoStopAxisParameter;
END_IF
(*
@@ -549,11 +586,18 @@ ACTION DoFUBs:
//Frame in SCS 3 Setzen
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.Name := 'FrameTable_SC3';
MpFUB.MC_BR_SetFrameTableFrame.Index := 1; //FixMe nur in Handbetrieb ausf<EFBFBD>hren und Shuttles ber<EFBFBD>cksichtigen
MpFUB.MC_BR_SetFrameTableFrame.Execute := TRUE;
MpFUB.MC_BR_SetFrameTableFrame.Name := 'FrameTable_SC3';
IF States.PosState.bWorkposShuttle2 THEN
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
MpFUB.MC_BR_SetFrameTableFrame.Execute := FALSE;
END_IF
@@ -671,12 +715,31 @@ ACTION DoFUBs:
IF MpFUB.MpCNC5Axis.MoveInterrupted THEN
MpFUB.MpCNC5Axis.Interrupt := FALSE;
END_IF
IF MpFUB.MpCNC5Axis.MoveActive THEN
IF MpFUB.MpCNC5Axis.MoveActive AND NOT MpFUB.MpCNC5Axis.MoveInterrupted THEN
MpFUB.MpCNC5Axis.Continue := FALSE;
END_IF
IF MpFUB.MpCNC5Axis.MoveDone THEN
MpFUB.MpCNC5Axis.MoveProgram := FALSE;
//MpFUB.MpCNC5Axis.Stop FixMe
END_IF
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.lrUpperLimit := 135.0;
Parameter.LimitAxis_Shuttle1.lrLowerLimit := 1.0;
Parameter.LimitAxis_Shuttle1.lrUpperLimit := 4000.0;
Parameter.LimitAxis_Shuttle2.lrLowerLimit := 5000.0;
Parameter.LimitAxis_Shuttle2.lrUpperLimit := 9000.0;
Parameter.LimitAxis_Shuttle1.lrUpperLimit := 3760.0;
Parameter.LimitAxis_Shuttle2.lrLowerLimit := 3740.0;
Parameter.LimitAxis_Shuttle2.lrUpperLimit := 7499.0;
END_ACTION
ACTION DoSceneViewerPositions:
@@ -142,7 +142,7 @@ END_ACTION
ACTION DoSLSAxisProcPar:
//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
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;
@@ -179,7 +179,7 @@ ACTION DoSLSAxisProcPar:
States.ProcParamFastSet.bAxis_A := FALSE;
States.ProcParamSlowSet.bAxis_A := TRUE;
END_IF
ELSIF States.bSafetyLaserOk THEN
ELSIF States.bSafetyCNCAxisSLSOk THEN
//Vollgasparameter
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;
@@ -402,7 +402,7 @@ ACTION DoCalibrateParameterShuttle2:
MpFUB.InitHome_Shuttle2.HomingParameters.Acceleration := 1000; // [mm/s2];
MpFUB.InitHome_Shuttle2.HomingParameters.StartVelocity := 1; // [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.PositionErrorStopLimit := 0.15; // [mm]
END_ACTION

View File

@@ -1,5 +1,5 @@
//Tippbetrieb Grenzen
ACTION DoJogLimits:
//Grenzen Tippen
//Grenzwerte aktiv
VCButtons.DisablePosLimits.usStatus.1 := NOT lMachine.bSetupMode;
IF NOT lMachine.bSetupMode THEN
@@ -36,6 +36,7 @@ ACTION DoJogLimits:
END_IF
END_ACTION
//Tippbetrieb Geschwindigkeiten
ACTION DoJogSpeeds:
IF EDGEPOS (gMP7121.VInc) THEN
IF (Parameter.rSpeedJog < 90) THEN
@@ -101,8 +102,9 @@ ACTION DoJogSpeeds:
END_ACTION
//Tippbetrieb Doppelte Kommandos verriegeln
ACTION DoJogResetDoubleCmd:
//Doppelte Kommandos verriegeln
//Buttons verriegeln
IF (gMP7121.XInc AND gMP7121.XDec) THEN
gMP7121.XInc := FALSE;
@@ -116,11 +118,10 @@ ACTION DoJogResetDoubleCmd:
END_ACTION
ACTION DoJogAxis:
//Achsen Tippen
//-------------------------------------
//Achsen Tippen
ACTION DoJogAxis:
//im CNC System Joggen - Richtung ergibt sich anhand Der Gewschwindigkeit
//Koodrinatensystem auswaehlen
//Koordinatensystem auswaehlen
//FixMe nicht umschalten wenn im CNC System gejoggt wird
IF EDGEPOS (gMP7121.Positions) AND NOT MpFUB.MC_BR_GroupMoveCyclicPosition.Enable THEN
CASE States.CNCJogCS OF
@@ -241,8 +242,9 @@ ACTION DoJogAxis:
END_ACTION
//Tippen mit Handrad
ACTION DoJogHandwheel:
//Mit Handrad bewegen
States.bHandWheelFw := (gMP7121.udWheelPos > States.udHandWheelLastPos);
States.bHandWheelBw := (gMP7121.udWheelPos < States.udHandWheelLastPos);
IF States.bHandWheelFw THEN
@@ -360,8 +362,8 @@ ACTION DoJogHandwheel:
END_ACTION
//Tippen Achsposition Anfahren
ACTION DoJogMovePos:
//Achsposition Anfahren
//Achsen gewechselt (FixMe bei Neustart)
IF (States.enSelectedAxis <> States.enSelectedAxisLatch) THEN
//Zielpos auf IstPos
@@ -420,19 +422,34 @@ ACTION DoJogMovePos:
MpFUB.AxBasic_A.MoveAbsolute := gMP7121.Ctrl;
END_CASE
VCStatus.lrJogDestPosLowerLimSh1 := Parameter.LimitAxis_Shuttle1.lrLowerLimit;
VCStatus.lrJogDestPosUpperLimSh1 := Parameter.LimitAxis_Shuttle1.lrUpperLimit;
VCStatus.lrJogDestPosLowerLimSh2 := Parameter.LimitAxis_Shuttle2.lrLowerLimit;
VCStatus.lrJogDestPosUpperLimSh2 := Parameter.LimitAxis_Shuttle2.lrUpperLimit;
MpData.AxPar_Shuttle.Position := VCStatus.lrJogDestPosSh1;
MpFUB.AxBasic_Shuttle.MoveAbsolute := VCButtons.AxisMovePosSh1.bCommand;
MpData.AxPar_Shuttle2.Position := VCStatus.lrJogDestPosSh2;
MpFUB.AxBasic_Shuttle2.MoveAbsolute := VCButtons.AxisMovePosSh2.bCommand;
VCButtons.AxisMovePosHomeSh1.usStatus.0 := States.PosState.bHomeShuttle1;
VCButtons.AxisMovePosHomeSh1.usStatus.1 := NOT MoveConditions.bAxisShuttleMovePos AND NOT MoveConditions.bAxisShuttleMoveNeg;
VCButtons.AxisMovePosWorkSh1.usStatus.0 := States.PosState.bWorkposShuttle1;
VCButtons.AxisMovePosWorkSh1.usStatus.1 := NOT MoveConditions.bAxisShuttleMovePos AND NOT MoveConditions.bAxisShuttleMoveNeg;
IF VCButtons.AxisMovePosHomeSh1.bCommand THEN
MpData.AxPar_Shuttle.Position := pParamPositions.lrHomePosShuttle1;
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
//Tippen Achsen kalibrieren
ACTION DoJogCalibration:
//Achsen kalibrieren
IF TRUE THEN
CASE States.enSelectedAxis OF
0://X-Achsen aus dem Gantry System kalibrieren
@@ -765,11 +782,11 @@ ACTION DoJogCalibration:
END_IF
END_ACTION
//Tippen Achsen direct Referenzieren (nur f<EFBFBD>r Einrichten)
ACTION DoJogHomeDirect:
//Achsen direct Referenzieren (nur f<EFBFBD>r Einrichten)
VCButtons.AxisHomeDirect.usStatus.0 := (gUserRights.Right6_Setup < mpUSERX_ACCESS_FULL);
VCButtons.AxisShuttleHomeDirect.usStatus.0 := (gUserRights.Right6_Setup < mpUSERX_ACCESS_FULL);
VCButtons.AxisShuttle2HomeDirect.usStatus.0 := (gUserRights.Right6_Setup < mpUSERX_ACCESS_FULL);
VCButtons.AxisHomeDirect.usStatus.0 := (gUserRights.Right6_Setup < mpUSERX_ACCESS_FULL) OR NOT bGodMode;
VCButtons.AxisShuttleHomeDirect.usStatus.0 := (gUserRights.Right6_Setup < mpUSERX_ACCESS_FULL) OR NOT bGodMode;
VCButtons.AxisShuttle2HomeDirect.usStatus.0 := (gUserRights.Right6_Setup < mpUSERX_ACCESS_FULL) OR NOT bGodMode;
IF EDGEPOS (VCButtons.AxisHomeDirect.bCommand) THEN
CASE States.enSelectedAxis OF
@@ -837,8 +854,9 @@ ACTION DoJogHomeDirect:
END_IF
END_ACTION
//Tippen Achsen Referenzieren
ACTION DoJogHomeAxis:
//Achsen Referenzieren
VCButtons.AxisHome.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);
@@ -868,8 +886,9 @@ ACTION DoJogHomeAxis:
END_IF
END_ACTION
ACTION DoManualCNC:
//CNC im Handbetrieb
ACTION DoManualCNC:
//Gantry Achsen
IF gCalibrationDone.bAxisX AND gCalibrationDone.bAxisX1 AND States.PosState.bDiffX_Virtual_Ok AND States.PosState.bDiffX_X1_Ok THEN
//Move CyclicPos OK
@@ -878,15 +897,19 @@ ACTION DoManualCNC:
//VC Buttons Status
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.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
IF NOT MpFUB.MpCNC5Axis.MoveProgram THEN
IF gMP7121.Start THEN
//FixMe aktueller Ablauf
MpData.MpCnc5AxisPar.ProgramName := 'SE10_MAIN.mpf';
gIPGLaserInterface.Out.bCuttingGasOn := FALSE;
strCurrentCncPrg := gstrFilenames[VCButtons.DropDownBoxFileMan.usIndexDatapoint];
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
//Grundstellung
MpData.MpCnc5AxisPar.ProgramName := 'Service/CncHome.mpf';
@@ -894,31 +917,110 @@ ACTION DoManualCNC:
//Kalibrieren
MpData.MpCnc5AxisPar.ProgramName := 'Service/CncCalibrate.mpf';
END_IF
END_IF
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
//FixMe
MpFUB.MpCNC5Axis.Continue := TRUE;
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;
END_IF
END_IF
ELSIF EDGEPOS (gMP7121.Stop) OR NOT States.bSafetyCNCAxisOk THEN
IF MpFUB.MpCNC5Axis.MoveActive AND NOT MpFUB.MpCNC5Axis.Interrupt THEN
ELSIF EDGEPOS (gMP7121.Stop) OR (gbSPLCInMaintDoorOk AND EDGEPOS (bInKeyStop)) OR NOT States.bSafetyCNCAxisSS1Ok THEN
IF MpFUB.MpCNC5Axis.MoveActive AND NOT MpFUB.MpCNC5Axis.MoveInterrupted THEN
MpFUB.MpCNC5Axis.Interrupt := TRUE;
ELSE
MpFUB.MpCNC5Axis.MoveProgram := FALSE;
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
//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:
IF enOldMachMode <> enMACH_JOG THEN
//Tipp betrieb neu angew<EFBFBD>hlt
@@ -1011,7 +1113,7 @@ ACTION DoManual:
//OR (gUserRights.Right4_Jog < mpUSERX_ACCESS_FULL);
VCButtons.AxisCalibrate.usStatus.0 := NOT States.bSingleAxMode;
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:
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.AxisCalibrate.usStatus.0 := NOT States.bSingleAxMode;
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:
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.AxisCalibrate.usStatus.0 := NOT States.bSingleAxMode;
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:
IF States.bSingleAxMode THEN
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.AxisCalibrate.usStatus.0 := NOT States.bSingleAxMode;
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:
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.AxisCalibrate.usStatus.0 := NOT States.bSingleAxMode;
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
@@ -1060,8 +1162,8 @@ ACTION DoManual:
//OR (gUserRights.Right4_Jog < mpUSERX_ACCESS_FULL);
VCButtons.AxisShuttleJogFw.usStatus.1 := NOT MoveConditions.bAxisShuttleMovePos OR NOT bAxisReadyForCommand OR NOT MpFUB.AxBasic_Shuttle.IsHomed;
//OR (gUserRights.Right4_Jog < mpUSERX_ACCESS_FULL);
VCButtons.AxisShuttleCalibrate.usStatus.0 := NOT States.bSingleAxMode;
VCButtons.AxisShuttleCalibrate.usStatus.1 := NOT bAxisReadyForCommand OR (gUserRights.Right6_Setup < mpUSERX_ACCESS_ACTUATE);
VCButtons.AxisShuttleCalibrate.usStatus.0 := NOT States.bSingleAxMode ;
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;
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;
//OR (gUserRights.Right4_Jog < mpUSERX_ACCESS_FULL);
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
VCButtons.OpenGate.usStatus.0 := States.CylinderPosState.bFrontGateOpen;
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
DoJogValves;
END_ACTION

View File

@@ -10,6 +10,8 @@ PROGRAM _CYCLIC
IF bInit THEN
strOperator := 'Bemusterung';
strMachinename := 'Wasserstrahl';
//FixMe
//Grundstellung
pParamPositions.HomePos.lrX := 4000;
pParamPositions.HomePos.lrY := 575.0;
@@ -22,8 +24,10 @@ PROGRAM _CYCLIC
//Shuttlepositionen
pParamPositions.lrHomePosShuttle := 234.0;
pParamPositions.lrWorkPosShuttle := 5.0;
pParamPositions.lrHomePosShuttle1 := 5.0;
pParamPositions.lrWorkPosShuttle1 := 3750.0;
pParamPositions.lrHomePosShuttle2 := 7495.0;
pParamPositions.lrWorkPosShuttle2 := 3745.0;
END_IF
@@ -33,14 +37,11 @@ PROGRAM _CYCLIC
END_IF
//FixMe !!!
//Immer mit Init Programm fahren
MpData.MpCnc5AxisPar.MoveProgramOptions.InitProgram := 'CncInit.mpf';
CNCVars.lrFeedrate := 30000;
CNCVars.bShuttle1InPos := TRUE;
CNCVars.bShuttle2InPos := FALSE;
CNCVars.bLaserMidPos := gRTLaserInterface.In.bHeadIsMidPos;
MpData.MpCnc5AxisPar.MoveProgramOptions.InitProgram := 'Init/CncInit.mpf';
//CNC Variablen
DoCNCVars;
//Scene Viewer
@@ -99,8 +100,9 @@ PROGRAM _CYCLIC
//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;
lMachine.bMachineHOME := States.bCNCHome AND States.PosState.bHomeShuttle1 AND States.PosState.bHomeShuttle2;
IF lMachine.bMachineHOME THEN
lMachine.bRequestHoming := FALSE;
END_IF
@@ -164,10 +166,14 @@ PROGRAM _CYCLIC
IF EDGEPOS (lMachine.enMode <> enMACH_AUTOMATIC) THEN
enStepAuto := enAutoStep_INIT;
MpFUB.MpCNC5Axis.MoveProgram := FALSE;
States.bCycleActive := FALSE;
END_IF
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
DoManual;
DoManVacValves;
ELSIF lMachine.enMode = enMACH_MANUAL THEN
//Manueell
DoManualCNC;
//Vakuum
DoManVacValves;
//Automatik betrieb
//==========================================================================================
@@ -196,12 +205,18 @@ PROGRAM _CYCLIC
VCButtons.AutoStartToolChange.usStatus.0 := (enStepAuto <> enAutoStep_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.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);
@@ -228,20 +243,29 @@ PROGRAM _CYCLIC
enStepAuto := enAutoStep_INIT;
END_IF
IF EDGEPOS (lMachine.bRequestHoming) THEN
//FixMe
//enStepAuto := enAutoStep_INIT;
enStepAuto := enAutoStep_INIT;
END_IF
//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
DoResetAxCommands;
IF (enStepAuto >= enAutoStep_CNC_ACTIVE) AND (enStepAuto < enAutoStep_CNC_FINISHED) THEN
//FixMe Error
IF (enStepAuto = enAutoStep_OPEN_GATE1) OR (enStepAuto = enAutoStep_OPEN_GATE2) OR (enStepAuto = enAutoStep_OPEN_GATES) OR
(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;
enStepAutoRestartPoint := enStepAuto;
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
enStepAutoRestartPoint := enStepAuto;
enStepAuto := enAutoStep_WAIT_RESTART;
@@ -249,13 +273,62 @@ PROGRAM _CYCLIC
END_IF
IF NOT States.bSafetyCNCAxisOk THEN
IF NOT States.bSafetyCNCAxisSS1Ok THEN
DoResetAxCommands;
// enStepAuto := enAutoStep_INIT;
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
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -264,6 +337,7 @@ PROGRAM _CYCLIC
//---------------------------
enAutoStep_INIT:
bTransitionCondition := TRUE;
MpFUB.MpCNC5Axis.MoveProgram := FALSE;
IF bTransitionCondition AND lMachine.bMachineHOME THEN
enStepAuto := enAutoStep_WAIT_START;
TimesLatch.diSteptime := gdiSystemTime;
@@ -278,146 +352,99 @@ PROGRAM _CYCLIC
//GS: Warten auf 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
enStepAuto := enAutoStep_HOME_WAIT_DOORCLOSED;
enStepAuto := enAutoStep_HOME_CNC_HOME;
TimesLatch.diSteptime := gdiSystemTime;
END_IF
//Warten bis Tor geschlossen
//GS: CNC in GS Fahren
//---------------------------
enAutoStep_HOME_WAIT_DOORCLOSED:
Valves.bCloseGate := MoveConditions.bCloseFrontGate;
bTransitionCondition := States.bSafetyCNCAxisOk; //evtl. verz<EFBFBD>gern
enAutoStep_HOME_CNC_HOME:
//CNC in Grundstellung Fahren
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
enStepAuto := enAutoStep_HOME_WAIT_HOMING;
MpFUB.MpCNC5Axis.MoveProgram := FALSE;
enStepAuto := enAutoStep_HOME_OPEN_GATES;
TimesLatch.diSteptime := gdiSystemTime;
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
//Warten bis Achsen Ref
//---------------------------
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;
bTransitionCondition := ((States.CylinderPosState.bGateShuttle1Closed AND States.PosState.bHomeShuttle1) OR States.CylinderPosState.bGateShuttle1Open) AND
((States.CylinderPosState.bGateShuttle2Closed AND States.PosState.bHomeShuttle2) OR States.CylinderPosState.bGateShuttle2Open);
IF bTransitionCondition THEN
enStepAuto := enAutoStep_HOME_WAIT_ZHOME;
enStepAuto := enAutoStep_HOME_WAIT_SHUTTLEHOME;
TimesLatch.diSteptime := gdiSystemTime;
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
//---------------------------
enAutoStep_HOME_WAIT_SHUTTLEHOME:
bTransitionCondition := 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
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) OR NOT MpFUB.AxBasic_Shuttle.MoveAbsolute) 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 NOT MpFUB.AxBasic_Shuttle2.MoveAbsolute);
MpData.AxPar_Shuttle.Velocity := Parameter.rVelocityShuttle; //mm/s
MpData.AxPar_Shuttle.Acceleration := 1000.0; //mm/s2
MpData.AxPar_Shuttle.Deceleration := 1000.0; //mm/s2
MpData.AxPar_Shuttle.Position := pParamPositions.lrHomePosShuttle;
MpFUB.AxBasic_Shuttle.MoveAbsolute := MoveConditions.bAxisShuttleMovePos;
MpData.AxPar_Shuttle.Position := pParamPositions.lrHomePosShuttle1;
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
MpFUB.AxBasic_Shuttle.MoveAbsolute := FALSE;
MpFUB.AxBasic_Shuttle2.MoveAbsolute := FALSE;
gToolInterface.Shuttle1.ToTool.bVaccumOn := FALSE;
gToolInterface.Shuttle2.ToTool.bVaccumOn := FALSE;
TimesLatch.diSteptime := gdiSystemTime;
enStepAuto := enAutoStep_HOME_WAIT_DOOROPEN;
enStepAuto := enAutoStep_HOME_CLOSE_GATES;
END_IF
//T<EFBFBD>r <EFBFBD>ffnen
//GS: T<EFBFBD>r schlie<EFBFBD>en
//---------------------------
enAutoStep_HOME_WAIT_DOOROPEN:
Valves.bCloseGate := FALSE;
//bTransitionCondition := gbInFrontGateOpen;
enAutoStep_HOME_CLOSE_GATES:
IF MoveConditions.bCloseGateShuttle1 THEN
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;
@@ -425,10 +452,10 @@ PROGRAM _CYCLIC
END_IF
//Warten auf Start nach Notaus (inaktiv)
//GS: Warten auf Start nach Notaus (inaktiv)
//---------------------------
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
enStepAuto := enStepAutoRestartPoint;
@@ -439,84 +466,138 @@ PROGRAM _CYCLIC
//Warten auf Start
//---------------------------
enAutoStep_WAIT_START:
//Werkzeugwechsel
//bTransitionCondition := VCButtons.AutoStartToolChange.bCommand;
States.bCycleActive := FALSE;
States.bLastCycle := FALSE;
bTransitionCondition := FALSE; //EDGEPOS (gbInStartKey) OR EDGEPOS (VCButtons.AutoStartCycle.bCommand);
bTransitionCondition := VCButtons.AutoStartCycle.bCommand; //EDGEPOS (gbInStartKey) OR EDGEPOS (VCButtons.AutoStartCycle.bCommand);
//Fehler erzeugen Prozessrelevant
IF bTransitionCondition
AND NOT MpAlarmXCheckReaction (gMpAlarmXCore, 'ReactionLockAuto')
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));
IF bTransitionCondition THEN
States.bCycleActive := TRUE;
TimesLatch.diSteptime := gdiSystemTime;
TimesLatch.diCycletime := gdiSystemTime;
enStepAuto := enAutoStep_WAIT_DOOR_CLOSED;
enStepAuto := enAutoStep_WAIT_PART;
END_IF
//Warten bis Tor geschlossen
//---------------------------
enAutoStep_WAIT_DOOR_CLOSED:
Valves.bCloseGate := MoveConditions.bCloseFrontGate;
bTransitionCondition := States.bSafetyCNCAxisOkDelayed; //FixMe Einschaltverzoegert
IF bTransitionCondition THEN
enStepAuto := enAutoStep_WAIT_HOMING;
enAutoStep_WAIT_PART:
bTransitionCondition := States.bSafetyCNCAxisSS1OkDelayed; //FixMe Einschaltverzoegert
IF (gToolInterface.Shuttle1.Tool_State = enTOOL_NEW_PART) AND gLineInterface.In.bRobOutOfShuttle1 AND bTransitionCondition THEN
enStepAuto := enAutoStep_OPEN_GATE1;
ELSIF (gToolInterface.Shuttle2.Tool_State = enTOOL_NEW_PART) AND gLineInterface.In.bRobOutOfShuttle2 AND bTransitionCondition THEN
enStepAuto := enAutoStep_OPEN_GATE2;
TimesLatch.diSteptime := gdiSystemTime;
END_IF
//Warten bis Achsen Ref
//Tor Shuttle 1 <EFBFBD>ffnen
//---------------------------
enAutoStep_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;
enAutoStep_OPEN_GATE1:
Valves.bCloseGateShuttle1 := FALSE;
Valves.bOpenGateShuttle1 := TRUE;
bTransitionCondition := States.CylinderPosState.bGateShuttle1Open;
IF bTransitionCondition THEN
enStepAuto := enAutoStep_SHUTTLE_IN;
enStepAuto := enAutoStep_SHUTTLE1_IN;
TimesLatch.diSteptime := gdiSystemTime;
END_IF
//Schuttle in Bearbeitungspos
//---------------------------
enAutoStep_SHUTTLE_IN:
bTransitionCondition := MpFUB.AxBasic_Shuttle.InPosition AND MpFUB.AxBasic_Shuttle.MoveDone AND
enAutoStep_SHUTTLE1_IN:
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;
MpData.AxPar_Shuttle.Velocity := Parameter.rVelocityAxisLinear; //mm/s
MpData.AxPar_Shuttle.Acceleration := 1000.0; //mm/s2
MpData.AxPar_Shuttle.Deceleration := 1000.0; //mm/s2
MpData.AxPar_Shuttle.Position := pParamPositions.lrWorkPosShuttle;
MpFUB.AxBasic_Shuttle.MoveAbsolute := MoveConditions.bAxisShuttleMoveNeg;
MpData.AxPar_Shuttle.Velocity := Parameter.rVelocityShuttle; //mm/s
MpData.AxPar_Shuttle.Acceleration := 2000.0; //mm/s2
MpData.AxPar_Shuttle.Deceleration := 2000.0; //mm/s2
MpData.AxPar_Shuttle.Position := pParamPositions.lrWorkPosShuttle1;
MpFUB.AxBasic_Shuttle.MoveAbsolute := MoveConditions.bAxisShuttleMovePos;
IF bTransitionCondition THEN
MpFUB.AxBasic_Shuttle.MoveAbsolute := FALSE;
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;
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
//---------------------------
enAutoStep_CNC_ACTIVE:
bTransitionCondition := (Parameter.bTestRun OR (Times.diSteptime > 500000));
strCurrentCncPrg := gstrFilenames[usCncPrgSelection];
MpData.MpCnc5AxisPar.ProgramName := strCurrentCncPrg;
//MpData.MpCnc5AxisPar.ProgramName := lCurrentTool.SysPar.strCNCPrg;
strCurrentCncPrg := '';
FOR usi := 1 TO UINT_TO_USINT (MAX_RECIPE) DO
IF (States.PosState.bWorkposShuttle1 AND (gRecipies[usi].usPartID = gToolInterface.Shuttle1.usPartID)) OR
(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
MpData.MpCnc5AxisPar.ProgramName := strCurrentCncPrg;
bTransitionCondition := (Parameter.bTestRun OR (Times.diSteptime > 500000));
IF bTransitionCondition THEN
MpFUB.MpCNC5Axis.MoveProgram := TRUE;
TimesLatch.diSteptime := gdiSystemTime;
enStepAuto := enAutoStep_CNC_FINISHED;
States.bStoppedCycle := FALSE;
bStartMoveCmd := FALSE;
END_IF
@@ -528,132 +609,150 @@ PROGRAM _CYCLIC
//CNC Program Ende
bTransitionCondition := MpFUB.MpCNC5Axis.MoveDone;
IF VCButtons.AutoStopCycle.bCommand THEN
IF VCButtons.AutoStopCNCCycle.bCommand THEN
//Abbruch
MpFUB.MpCNC5Axis.MoveProgram := FALSE;
States.bStoppedCycle := TRUE;
TimesLatch.diSteptime := gdiSystemTime;
enStepAuto := enAutoStep_WAIT_DOOR_OPEN;
ELSIF bTransitionCondition THEN
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;
enStepAuto := enAutoStep_ZHOME;
IF States.bStoppedCycle THEN
enStepAuto := enAutoStep_CNC_HOME;
ELSE
enStepAuto := enAutoStep_OPEN_GATES;
END_IF
END_IF
//Warten bis Z-Achse in GS gefahren
//CNC in GS Fahren
//---------------------------
enAutoStep_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.lrHomePosZ;
MpFUB.AxBasic_Z.MoveAbsolute := TRUE;
enAutoStep_CNC_HOME:
//CNC in Grundstellung Fahren
IF NOT MpFUB.MpCNC5Axis.MoveProgram THEN
MpData.MpCnc5AxisPar.ProgramName := 'Service/CncHome.mpf';
END_IF
IF States.bSafetyCNCAxisSLSOk THEN
MpFUB.MpCNC5Axis.MoveProgram := TRUE;
END_IF
bTransitionCondition := MpFUB.MpCNC5Axis.MoveDone;
IF bTransitionCondition THEN
MpFUB.AxBasic_Z.MoveAbsolute := FALSE;
enStepAuto := enAutoStep_YHOME;
MpFUB.MpCNC5Axis.MoveProgram := FALSE;
enStepAuto := enAutoStep_OPEN_GATES;
TimesLatch.diSteptime := gdiSystemTime;
END_IF
//Warten bis Y-Achse in GS gefahren
//Tore <EFBFBD>ffnen
//---------------------------
enAutoStep_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;
TimesLatch.diSteptime := gdiSystemTime;
enStepAuto := enAutoStep_XHOME;
enAutoStep_OPEN_GATES:
IF States.PosState.bWorkposShuttle1 THEN
Valves.bOpenGateShuttle1 := TRUE;
Valves.bCloseGateShuttle1 := FALSE;
END_IF
//Warten bis X-Achse in GS gefahren
//---------------------------
enAutoStep_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 := MoveConditions.bAxisXMove;
IF States.PosState.bWorkposShuttle2 THEN
Valves.bOpenGateShuttle2 := TRUE;
Valves.bCloseGateShuttle2 := FALSE;
END_IF
bTransitionCondition := ((States.CylinderPosState.bGateShuttle1Closed AND States.PosState.bHomeShuttle1) OR States.CylinderPosState.bGateShuttle1Open) AND
((States.CylinderPosState.bGateShuttle2Closed AND States.PosState.bHomeShuttle2) OR States.CylinderPosState.bGateShuttle2Open);
IF bTransitionCondition THEN
MpFUB.AxBasic_Y.MoveAbsolute := FALSE;
enStepAuto := enAutoStep_SHUTTLE_OUT;
TimesLatch.diSteptime := gdiSystemTime;
enStepAuto := enAutoStep_AHOME;
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
//---------------------------
enAutoStep_SHUTTLE_OUT:
bTransitionCondition := 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
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)
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.Deceleration := 1000.0; //mm/s2
MpData.AxPar_Shuttle.Position := pParamPositions.lrHomePosShuttle;
MpFUB.AxBasic_Shuttle.MoveAbsolute := MoveConditions.bAxisShuttleMovePos;
MpData.AxPar_Shuttle.Position := pParamPositions.lrHomePosShuttle1;
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
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;
enStepAuto := enAutoStep_WAIT_DOOR_OPEN;
enStepAuto := enAutoStep_CLOSE_GATES;
END_IF
//T<EFBFBD>r <EFBFBD>ffnen
//---------------------------
enAutoStep_WAIT_DOOR_OPEN:
Valves.bCloseGate := FALSE;
// bTransitionCondition := gbInFrontGateOpen;
enAutoStep_CLOSE_GATES:
IF MoveConditions.bCloseGateShuttle1 THEN
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
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;
gResult.diCycleTime := Times.diCycletime / 1000000; //[<EFBFBD>s > s]
//Times.udCycletimeLast := Times.udCycletime;
gResult.Cmd.bCreateReport := NOT Parameter.bTestRun; // Protokoll estellen
//gResult.Cmd.bCreateReport := NOT Parameter.bTestRun; // Protokoll estellen
END_IF
END_CASE
END_IF
@@ -736,7 +835,22 @@ PROGRAM _CYCLIC
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
//nicht blockierend
//aktuelle H<EFBFBD>he wird gehalten
@@ -779,7 +893,7 @@ PROGRAM _CYCLIC
IF EDGEPOS (gRTLaserInterface.In.bHeadCalibrated) THEN
gRTLaserInterface.Out.bCalibrateLaser := FALSE;
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;
END_IF
ELSE
@@ -805,7 +919,6 @@ PROGRAM _CYCLIC
END_IF
//FixMe Laser bei Fehler Raytools ausschaulten
//Adaptive Laserleistung
//Bahnfaktor berechnen
@@ -827,11 +940,13 @@ PROGRAM _CYCLIC
IF gIPGLaserInterface.Out.bPilotLaserOn THEN
//Leistung f<EFBFBD>r Pilotlaser simulieren zum Tracen
uiTestPowerLaserSimulation := uiTestMinPowerLaser + REAL_TO_UINT (UINT_TO_REAL (uiTestPowerLaser - uiTestMinPowerLaser) * rPowerFactor);
END_IF
ELSIF MpFUB.MpCNC5Axis.MoveActive THEN
END_IF
END_IF
bOuLEDKeyStart := MpFUB.MpCNC5Axis.MoveActive AND gbSPLCInMaintDoorOk AND (lMachine.enMode = enMACH_MANUAL);
IF MpFUB.MpCNC5Axis.MoveActive THEN
//Achsgruppe in Bewegung
gMP7121.LED_Run := enLED_ON;
ELSE
@@ -839,10 +954,13 @@ PROGRAM _CYCLIC
gMP7121.LED_Run := enLED_OFF;
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.b105_LaserOff := FALSE;
MFlags.b108_CutGasOn := FALSE;
MFlags.b109_CutGasOff := FALSE;
MFlags.b110_StayAtHeight := FALSE;
MFlags.b111_StayAtMid := FALSE;
MFlags.b112_FullPowerOn := FALSE;
@@ -861,11 +979,15 @@ PROGRAM _CYCLIC
IF States.TestMode.bNoHeightCtrl THEN
States.TestMode.bNoLaser := TRUE;
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

View File

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

View File

@@ -1,5 +1,5 @@
<?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">
<Files>
<File Description="Aktionen Maschinectrltask">Action.st</File>
@@ -11,8 +11,6 @@
<File Description="Exit code">Exit.st</File>
<File Description="Local data types" Private="true">Types.typ</File>
<File Description="Local variables" Private="true">Variables.var</File>
<File Description="Funktionen" Private="true">MachCtrl.fun</File>
<File Description="Zylinderüberwachung">FUB_CylinderCheck.st</File>
<File Description="Toleranzprüfung">FC_InTol.st</File>
<File Description="IOs" Private="true">IOs.var</File>
</Files>
</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 := 1;
//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

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

View File

@@ -12,6 +12,7 @@ VAR
bInit : BOOL; (*Init*)
bTest : BOOL;
bTemp : BOOL;
bGodMode : BOOL;
bBlinkEdge_01 : BOOL;
bTransitionCondition : 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"?>
<?AutomationStudio Version=4.3.5.113 SP?>
<Program xmlns="http://br-automation.co.at/AS/Program">
<?AutomationStudio FileVersion="4.9"?>
<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File Description="Cyclic code">Cyclic.st</File>
<File Description="Init code">Init.st</File>
<File Description="Exit code">Exit.st</File>
<File Description="Local data types" Private="true">Types.typ</File>
<File Description="Local variables" Private="true">Variables.var</File>
<File>Action.st</File>
</Files>
</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"?>
<?AutomationStudio Version=4.3.5.113 SP?>
<?AutomationStudio FileVersion="4.9"?>
<Package xmlns="http://br-automation.co.at/AS/Package">
<Objects>
<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="Program" Language="IEC" Description="Controller 1">MachCtrl</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>
</Package>

View File

@@ -1,11 +1,12 @@
TYPE
ptyp_Positions : STRUCT (*Positionen*)
lrHomePosShuttle : LREAL := 234; (*HomePos Shuttle (Einlegepos)*)
lrWorkPosShuttle : LREAL := 5; (*Bearbeitungspos Shuttle*)
lrHomePosShuttle1 : LREAL := 5; (*HomePos Shuttle (Einlegepos)*)
lrWorkPosShuttle1 : LREAL := 3750; (*Bearbeitungspos Shuttle*)
lrHomePosShuttle2 : LREAL := 7495; (*HomePos Shuttle (Einlegepos)*)
lrWorkPosShuttle2 : LREAL := 3750; (*Bearbeitungspos Shuttle*)
lrLaserAboveShuttle : LREAL; (*Shuttle Frei unterhalb der position*)
HomePos : {REDUND_UNREPLICABLE} ptyp_PosTupleCNC; (*Grundstellung Laser CNC Positionen in ACS*)
CalibPos : {REDUND_UNREPLICABLE} ptyp_PosTupleCNC; (*Kalibrierposition Laser CNC Positionen in ACS*)
END_STRUCT;
ptyp_PosTupleCNC : STRUCT (*Positionstupel f. CNC*)
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
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
lRecipies15 ACCESS (ADR (gRecipies[us1stRecipe]));
us1stRecipeLatch := us1stRecipe;
@@ -8,7 +48,7 @@ PROGRAM _CYCLIC
END_FOR
END_IF
//Navigate through Recipies
//Durch Rezepte Iterieren
IF EDGEPOS (VCControls.bNext15Items) THEN
IF us1stRecipe < (MAX_RECIPE - 15) THEN
us1stRecipe := us1stRecipe + 15;

View File

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

View File

@@ -1,5 +1,6 @@
VAR
bSorted : BOOL;
bDefaultValues : BOOL;
bCreateList : BOOL;
ui : 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
//================================================
//Ventile Achsk<EFBFBD>hlung
bOuOpenCoolingValveIn := NOT Status.bErrorFlow;
bOuOpenCoolingValveOut := NOT Status.bErrorFlow;
Status.bErrorDewPoint := (iInCoolingIn < 15.0) OR (Status.rPSMTemperature < 28.0);
bOuOpenCoolingValveIn := NOT Status.bErrorFlow AND NOT Status.bErrorDewPoint;
bOuOpenCoolingValveOut := NOT Status.bErrorFlow AND NOT Status.bErrorDewPoint;
END_PROGRAM

View File

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

View File

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

View File

@@ -1,5 +1,5 @@
//Zeiten bilden
ACTION DoTimes:
//Zeiten bilden
FUBs.TOF_KeyManual.IN := bInKeyManual;
FUBs.TOF_KeyManual.PT := t#500ms;
FUBs.TOF_KeyManual ();
@@ -20,21 +20,21 @@ ACTION DoTimes:
//Nach Start der SLX Warten
FUBs.TON_StartDelay.IN := TRUE;
FUBs.TON_StartDelay.PT := t#35s;
FUBs.TON_StartDelay.PT := t#50s;
FUBs.TON_StartDelay ();
END_ACTION
//Buttons f<EFBFBD>r Einrichtbetrieb initialisieren
ACTION DoInitSetupmodeButtons:
//Buttons f<EFBFBD>r Einrichtbetrieb initialisieren
VCButtons.MachineJog.bCommand := FALSE;
VCButtons.MachineAuto.bCommand := FALSE;
VCButtons.MachineResetEStop.bCommand := FALSE;
VCButtons.MachineResetDoors.bCommand := FALSE;
END_ACTION
//Buttons im Einrichtbetrieb
ACTION DoSetupmodeButtons:
//Buttons im Einrichtbetrieb
//Anlage Einschalten
VCButtons.MachineOnOff.usStatus.0 := FALSE;
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;
END_ACTION
//Globale Layer verwalten
ACTION DoLayerSettings:
//Globale Layer verwalten
//===============================================================================================================
//Setupmode
//Tasten aktiviert wg Mobile panel
@@ -133,8 +133,8 @@ ACTION DoLayerSettings:
END_CASE
END_ACTION
//Globale Layer Mobilepanel verwalten
ACTION DoLayerSettingsMP:
//Globale Layer Mobilepanel verwalten
//===============================================================================================================
//Setupmode
//Tasten aktiviert wg Mobile panel
@@ -207,14 +207,16 @@ ACTION DoLayerSettingsMP:
END_CASE
END_ACTION
//St<EFBFBD>rung quittieren
ACTION DoErrorReset:
//St<EFBFBD>rung quittieren
//Resetsignal Nothalt
gCmd1.bResetErrors := bInKeyReset OR gMP7121.Button OR VCButtons.MachineResetErrors.bCommand;
gbSPLCResetEStop := bInKeyReset OR (gCmd1.bResetErrors OR VCButtons.MachineResetEStop.bCommand) AND
gMachine1.bMachineON AND NOT bInit;
gbSPLCRefeedError := bInKeyReset OR gMP7121.Button OR VCButtons.MachineResetErrors.bCommand;
gbSPLCResetSafeMCError := gMP7121.Button OR VCButtons.MachineResetErrors.bCommand;
@@ -232,19 +234,25 @@ ACTION DoErrorReset:
*)
END_ACTION
//Signale an Sicherheits SPS
ACTION DoSafePLC:
//Signale an Sicherheits SPS
//Sicherheitsausg<EFBFBD>nge freigeben
gbSOuP3 := gMachine1.bMachineON;
gbSOuP4 := gMachine1.bMachineON;
//FixMe gbSOuMainsSafetyEStop := gMachine1.bMachineON;
//FixMe gbSOuMainsSafetyDoors := gMachine1.bMachineON;
gbSOuOpenMainvalve := gMachine1.bMachineON;
//Laser
gbSOuEStopLaser := 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
gbSPLCReefeedP4 := bInReefedP4;
//Anlagenstauts
gbSPLCMachineOn := gMachine1.bMachineON;
@@ -252,8 +260,8 @@ ACTION DoSafePLC:
END_ACTION
//Ausg<EFBFBD>nge
ACTION DoOutputs:
//Ausg<EFBFBD>nge
//------------------------------------------------
//Anlagenbeleuchtung
bOuMachineLight := VCButtons.MachineLight.bCommand OR gMachine1.bMachineON;
@@ -273,17 +281,226 @@ ACTION DoOutputs:
IF EDGEPOS (bInKeyRequestMaintDoor) THEN
gCmd1.bReqDoorOpen := NOT gCmd1.bReqDoorOpen;
END_IF
bOuLEDReqMaintDoor := gCmd1.bReqDoorOpen; //FixMe
bOuLEDReqMaintDoor := gCmd1.bReqDoorOpen; //FixMe
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:
//FUBs
FUBs.AsIOAccRead ();
IF (FUBs.AsIOAccRead.status = ERR_OK) THEN
udSLXState := FUBs.AsIOAccRead.value;
END_IF
END_ACTION

View File

@@ -1,5 +1,5 @@
<?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">
<Files>
<File Description="Aktionen Maschinentask">Action.st</File>
@@ -7,5 +7,6 @@
<File Private="true">IO.Var</File>
<File>machine.st</File>
<File Description="Local data types" Private="true">Types.typ</File>
<File Description="Alarme">TxtAlarms.tmx</File>
</Files>
</Program>

View File

@@ -1,6 +1,9 @@
(*//Datenstrukturen*)
VAR
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
(*//Eing<6E>nge*)
(*#################################################################################################################*)
@@ -8,10 +11,9 @@ END_VAR
VAR
bInMaintDoorLeftClosed : BOOL; (*Wartungst<73>r Fl<46>gel Links Geschlossen*)
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*)
bInMaintDoorRightError : BOOL; (*Wartungst<73>r Fl<46>gel Rechts Fehler*)
bInMaintDoorRightLocked : BOOL; (*Wartungst<73>r Fl<46>gel Rechts Verriegelt*)
END_VAR
(*//60K3*)
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*)
TON_AirOk1 : TON;
TON_AirNOk1 : TON;
TON_ReleaseToolRob1 : TON;
TON_AutoOff : TON;
TON_StartDelay : TON; (*Wartezeit nach Start*)
TOF_MachineOn : TOF; (*Nachlauf Anlage Ein*)
@@ -16,6 +15,18 @@ TYPE
TOF_KeyAuto : TOF; (*Ausschaltvert<72>gerung Hand Schl<68>sselschalter (wg. Umschalten)*)
AsIOAccRead : AsIOAccRead; (*Register aus SLX Lesen*)
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;
typ_MpFUB : STRUCT (*MApp Funktionsbausteine*)
bDummy : BOOL;
@@ -35,19 +46,4 @@ TYPE
MachineLockUnlockDoors : gtyp_VCButton; (*T<>renverriegeln (Einrichtbetrieb)*)
TempCtrl : gtyp_VCButton; (*Temperaturregelung*)
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

View File

@@ -81,7 +81,7 @@ PROGRAM _CYCLIC
gVisuCtrlMP.MainPage.usSetLayer := 0; //r<EFBFBD>cksetzen
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 (gUserRights.Right1_Operate >= mpUSER_ACCESS_ACTUATE) THEN //AND NOT gAlarmReaction.b2FinishCycle THEN
//Automatik anfordern
@@ -146,154 +146,10 @@ PROGRAM _CYCLIC
//Alarme (Maschinenalarme)
//=================================================
//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
*)
DoMachineAlarms;
//Alarme (Sicherheitsalarme)
//=================================================
//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
DoSafetyAlarms;
//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
//St<EFBFBD>rung quittieren

View File

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

View File

@@ -11,6 +11,7 @@
<Object Type="Package" Description="Visualisierung">Vsualization</Object>
<Object Type="Package" Description="Filemanagement">File</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="Package">CNCProgramme</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"?>
<?AutomationStudio Version="4.9.2.46"?>
<?AutomationStudio Version="4.9.3.144 SP"?>
<AlarmSystem xmlns="http://br-automation.co.at/AS/VC/Project">
<Property Name="HistoryLength" Value="1000"/>
<Property Name="SnippetBufferSize" Value="150"/>

View File

@@ -1,5 +1,5 @@
<?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">
<ComponentVersion>
<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"?>
<?AutomationStudio Version="4.9.2.46"?>
<?AutomationStudio Version="4.9.3.144 SP"?>
<Languages xmlns="http://br-automation.co.at/AS/VC/Project">
<Property Name="Default" Value="de"/>
<Property Name="FallBackLanguage" Value="de"/>

View File

@@ -1,9 +1,9 @@
<?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">
<Property Name="EnableEvents" Value="True"/>
<Property Name="SharedTargetResourceRoot" Value=""/>
<Property Name="TextIDMax" Value="174318"/>
<Property Name="TextIDMax" Value="183407"/>
<SourceFiles>
<Source File="Languages.vcr"/>
<Source File="TextGroups\DateTimeFormats.txtgrp"/>
@@ -26,6 +26,8 @@
<Source File="TextGroups\Events.txtgrp"/>
<Source File="TextGroups\MpCncJogState.txtgrp"/>
<Source File="TextGroups\MpCNCJogCoordsystem.txtgrp"/>
<Source File="TextGroups\txptToolstate.txtgrp"/>
<Source File="TextGroups\txtStepsAuto.txtgrp"/>
<Source File="UnitGroups\Length.vcug"/>
<Source File="UnitGroups\Mass.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