Backup after startup

This commit is contained in:
2020-08-04 10:53:23 +02:00
parent b809ba4469
commit cf102a8481
1478 changed files with 125804 additions and 0 deletions

17
KD_Hoertnagel_Fraese.apj Normal file
View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version="4.7.3.93 SP"?>
<Project Description="Lackierzelle" Version="1.00.0" Edition="Standard" EditionComment="Standard" xmlns="http://br-automation.co.at/AS/Project">
<Communication>
<OnlineConfiguration Name="Fraese" DeviceType="TCPIP" DeviceParameters="/IF=tcpip /LOPO=11159 /SA=99" ConnectionParameters="/COMT=2500 /RT=1000 /AM=* /SDT=5 /DAIP=192.168.1.138 /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" />
<Project StoreRuntimeInProject="false" />
<Variables DefaultInitValue="0" DefaultRetain="false" DefaultVolatile="true" />
<TechnologyPackages>
<Acp10Arnc0 Version="5.9.2" />
<mapp Version="5.9.1" />
<TextSystem udbdef="0.1.0" />
</TechnologyPackages>
</Project>

8
LastUser.set Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version="4.7.3.93 SP"?>
<ProjectSettings xmlns="http://br-automation.co.at/AS/ProjectSettings">
<ConfigurationManager ActiveConfigurationName="Config1" />
<Deployment Value="ActiveCpu" />
<ExportProject ExportFilePath="D:\src44\KD_Hoertnagel_Fraese\KD_Hoertnagel_Fraese.zip" />
<Print Footer="%cPage: %p" Header="%lProject: %n%c%x" />
</ProjectSettings>

View File

@@ -0,0 +1,8 @@
TYPE
typAlarm : STRUCT (*Alarm Datenstruktur*)
Alarm : ARRAY[0..127]OF BOOL;
Ack : ARRAY[0..127]OF BOOL;
Bypass : ARRAY[0..127]OF BOOL;
END_STRUCT;
END_TYPE

View File

@@ -0,0 +1,24 @@
VAR
bBlink0_1 : BOOL;
bBlink0_5 : BOOL;
bBlink1_0 : BOOL;
bBlink2_0 : BOOL;
bBlink5_0 : BOOL;
gdtCurrentTime : DATE_AND_TIME; (*Current Date and Time*)
gDTstrucCurrentTime : DTStructure := (0); (*Current Date and Time as DTStructure*)
gsCurrentTime : STRING[25] := ''; (*Current Date and Time as String*)
gTCurrentTime : TIME := T#0ms; (*Current Time*)
END_VAR
VAR CONSTANT
gAInNull : INT := 0; (*O FOR Analog Input*)
gTrue : BOOL := TRUE; (*Konstant TRUE*)
gFalse : BOOL := FALSE; (*Konstant False*)
gInNull : BOOL := FALSE; (*FALSE FOR Input *)
END_VAR
VAR
gOuNull : BOOL; (*DUMMY for Output*)
END_VAR
VAR CONSTANT
iAIVoltageOverflow : INT := 16#7FFF; (* Analog Input Voltage Mode,Overflow *)
iAIVoltageUnderflow : INT := -32767; (* Analog Input Voltage Underflow *)
END_VAR

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.2.3.159?>
<Package xmlns="http://br-automation.co.at/AS/Package">
<Objects>
<Object Type="File">GlobalCommon.typ</Object>
<Object Type="File">GlobalComon.var</Object>
<Object Type="Program" Language="IEC" Description="Current Date_And_Time / DT Struct">get_dt</Object>
<Object Type="Program" Language="IEC" Description="Blinker 0,1 -0,5s (f. 100ms Task) !!!">blinker</Object>
</Objects>
</Package>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.2.3.159?>
<Program xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File Description="Local variables" Private="true">blinker.var</File>
<File Description="Initialization code">blinkerInit.ab</File>
<File Description="Cyclic code">blinkerCyclic.ab</File>
</Files>
</Program>

View File

@@ -0,0 +1,13 @@
(********************************************************************
* COPYRIGHT -- kA
********************************************************************
* Program: blinker
* File: blinker.var
* Author: michi
* Created: November 23, 2009
********************************************************************
* Local variables of program blinker
********************************************************************)
VAR
iCount : USINT;
END_VAR

View File

@@ -0,0 +1,30 @@
(********************************************************************
* COPYRIGHT -- kA
********************************************************************
* Program: blinker
* File: blinkerCyclic.ab
* Author: michi
* Created: November 23, 2009
********************************************************************
* Implementation of program blinker
********************************************************************)
PROGRAM _CYCLIC
(* cyclic program *)
;Has to be taskclass 100ms
bBlink0_1 = not bBlink0_1
inc (iCount)
if ((iCount mod 5) = 0) then
bBlink0_5 = not bBlink0_5
endif
if ((iCount mod 10) = 0) then
bBlink1_0 = not bBlink1_0
endif
if ((iCount mod 20) = 0) then
bBlink2_0 = not bBlink2_0
endif
if ((iCount mod 50) = 0) then
bBlink5_0 = not bBlink5_0
iCount = 0
endif
END_PROGRAM

View File

@@ -0,0 +1,16 @@
(********************************************************************
* COPYRIGHT -- kA
********************************************************************
* Program: blinker
* File: blinkerInit.ab
* Author: michi
* Created: November 23, 2009
********************************************************************
* Implementation of program blinker
********************************************************************)
PROGRAM _INIT
iCount = 0
END_PROGRAM

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.2.3.159?>
<Program xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File>get_dtCyclic.ab</File>
<File Private="true">get_dt.var</File>
<File>get_dtInit.ab</File>
</Files>
</Program>

View File

@@ -0,0 +1,6 @@
VAR
sTemp : STRING[10] := '';
lDTStructureGetTime : DTStructureGetTime := (0);
lDTGetTime : DTGetTime := (0);
lTimeStructure : TIMEStructure := (0);
END_VAR

View File

@@ -0,0 +1,57 @@
PROGRAM _CYCLIC
(* cyclic program *)
lDTGetTime.enable = true
lDTGetTime FUB DTGetTime()
gdtCurrentTime = lDTGetTime.DT1
lDTStructureGetTime.enable = true
lDTStructureGetTime FUB DTStructureGetTime ()
lDTStructureGetTime.pDTStructure = adr (gDTstrucCurrentTime)
ascDTStructure (ADR (gDTstrucCurrentTime), ADR (gsCurrentTime), 25)
brsstrcpy (ADR (gsCurrentTime), "")
brsitoa (gDTstrucCurrentTime.year, ADR (sTemp))
brsstrcat (ADR (gsCurrentTime), ADR (sTemp))
IF (gDTstrucCurrentTime.month < 10) THEN
brsstrcat (ADR (gsCurrentTime), "0")
ENDIF
brsitoa (gDTstrucCurrentTime.month, ADR (sTemp))
brsstrcat (ADR (gsCurrentTime), ADR (sTemp))
IF (gDTstrucCurrentTime.day < 10) THEN
brsstrcat (ADR (gsCurrentTime), "0")
ENDIF
brsitoa (gDTstrucCurrentTime.day, ADR (sTemp))
brsstrcat (ADR (gsCurrentTime), ADR (sTemp))
brsstrcat (ADR (gsCurrentTime), "_")
IF (gDTstrucCurrentTime.hour < 10) THEN
brsstrcat (ADR (gsCurrentTime), "0")
ENDIF
brsitoa (gDTstrucCurrentTime.hour, ADR (sTemp))
brsstrcat (ADR (gsCurrentTime), ADR (sTemp))
brsstrcat (ADR (gsCurrentTime), "-")
IF (gDTstrucCurrentTime.minute < 10) THEN
brsstrcat (ADR (gsCurrentTime), "0")
ENDIF
brsitoa (gDTstrucCurrentTime.minute, ADR (sTemp))
brsstrcat (ADR (gsCurrentTime), ADR (sTemp))
brsstrcat (ADR (gsCurrentTime), "-")
IF (gDTstrucCurrentTime.second < 10) THEN
brsstrcat (ADR (gsCurrentTime), "0")
ENDIF
brsitoa (gDTstrucCurrentTime.second, ADR (sTemp))
brsstrcat (ADR (gsCurrentTime), ADR (sTemp))
brsstrcat (ADR (gsCurrentTime), "_")
brsitoa (gDTstrucCurrentTime.millisec, ADR (sTemp))
brsstrcat (ADR (gsCurrentTime), ADR (sTemp))
lTimeStructure.day = gDTstrucCurrentTime.day
lTimeStructure.hour = gDTstrucCurrentTime.hour
lTimeStructure.minute = gDTstrucCurrentTime.minute
lTimeStructure.second = gDTstrucCurrentTime.second
lTimeStructure.millisec = gDTstrucCurrentTime.millisec
lTimeStructure.microsec = gDTstrucCurrentTime.microsec
gTCurrentTime = TIMEStructure_TO_TIME (adr (lTimeStructure))
END_PROGRAM

View File

@@ -0,0 +1,4 @@
PROGRAM _INIT
(* init program *)
END_PROGRAM

View File

@@ -0,0 +1,182 @@
PROGRAM _CYCLIC
//Zeiger auf Roboter Stellen (Zyklisch wg. Download)
lABBRobot ACCESS ADR (gABBRobot1);
//Dynamische Variablen initialisieren
IF (gusCurrentParamset < 0) OR (gusCurrentParamset >= MAX_PARAM) THEN
lProcParam ACCESS ADR (gProcParam[0]);
ELSE
lProcParam ACCESS ADR (gProcParam[gusCurrentParamset]);
END_IF
//Lifebeat erzeugen
lABBRobot.Out.bLifebeat := bBlink0_5;
//Eing<EFBFBD>nge von Roboter
//============================================================
//Eingangs Byte 0 (0-7)
TON_Motors_On.IN := dpInByte[0].0;
TON_Motors_On.PT := t#1200ms;
TON_Motors_On ();
lABBRobot.In.bMotorsOn := TON_Motors_On.Q;
lABBRobot.In.bMotorsOff := dpInByte[0].1;
lABBRobot.In.bProgramRun := dpInByte[0].2;
lABBRobot.In.bEStop := dpInByte[0].3;
lABBRobot.In.bAutomatic := dpInByte[0].4;
lABBRobot.In.bError := dpInByte[0].5;
lABBRobot.In.bRunChainOk := dpInByte[0].6;
lABBRobot.In.bLifebeat := dpInByte[0].7;
IF EDGE (lABBRobot.In.bLifebeat) THEN
TON_Lifebeat.IN := FALSE;
ELSE
TON_Lifebeat.IN := TRUE;
END_IF;
TON_Lifebeat.PT := t#750ms;
TON_Lifebeat ();
lABBRobot.bOnline := NOT TON_Lifebeat.Q;
//Eingangs Byte 1 (8-15)
lABBRobot.In.bMotionSupervisionTriggered := dpInByte[1].0;
gCmd1.Robot.FromRobot.bFinishedPartStuck := dpInByte[1].7;
//Eingangs Byte 2 (16-23)
//Greifer 1 <EFBFBD>ffnen
IF dpInByte[2].0 THEN
IF NOT gEGP[1].In.bGripperIsOpen THEN
gEGP[1].Out.bOpen := TRUE;
END_IF
END_IF
//Greifer 1 Schlie<EFBFBD>en
IF dpInByte[2].1 THEN
IF NOT gEGP[1].In.bGripperIsClosed AND NOT gEGP[1].In.bGripperIsClosedWithPart THEN
gEGP[1].Out.bClose := TRUE;
END_IF
END_IF
//Greifer 2 <EFBFBD>ffnen
IF dpInByte[2].2 THEN
IF NOT gEGP[2].In.bGripperIsOpen THEN
gEGP[2].Out.bOpen := TRUE;
END_IF
END_IF
//Greifer 2 Schlie<EFBFBD>en
IF dpInByte[2].3 THEN
IF NOT gEGP[2].In.bGripperIsClosed AND NOT gEGP[2].In.bGripperIsClosedWithPart THEN
gEGP[2].Out.bClose := TRUE;
END_IF
END_IF
//Roboter hat neues Bauteil eingelegt
gCmd1.Robot.FromRobot.bPlacedPart := dpInByte[2].4;
//Roboter hat fertigteil abgehol
gCmd1.Robot.FromRobot.bPicketFinishedPart := dpInByte[2].5;
//PickSignal an Anyfeeder
gCmd1.FlexfeedRobFeed.RobfeedToFlexfeed.bPickSignal := dpInByte[2].7;
//Eingangs Byte 3 (24-31)
lABBRobot.In.bWZHome := dpInByte[3].0;
lABBRobot.In.bWZChangetool := dpInByte[3].1;
lABBRobot.In.bWZPlacepoint := dpInByte[3].2;
//gCmd1.FeederRobFeed.RobfeedToFd.bRobotInPlacepos := dpInByte[3].2;
//Roboter in Bereich Flexfeeder (nur lokal wg. Homing benutzt
//dpInByte[3].6
//Eingangs Byte 4 (32-39)
gCmd1.FlexfeedRobFeed.RobfeedToFlexfeed.bRobOutOfFeeder := dpInByte[4].0;
gCmd1.Robot.FromRobot.bMillAraeFree := dpInByte[4].1;
// lABBRobot.In.uiRotationPos := SHL (USINT_TO_UINT (dpInByte[4]), 8) + USINT_TO_UINT (dpInByte[4]);
//Eingangs Byte 5 (40-47)
lABBRobot.In.usStatus := dpInByte[5];
//Eingangs Byte 6 (48-55)
//Eingangs Byte 7 (56-63)
gCmd1.FlexfeedRobFeed.RobfeedToFlexfeed.usCalState := dpInByte[7];
//Status Caibrieren
//Eingangs Byte 8 (64-71)
//Eingangs Byte 9 (72-80)
//Eingangs Byte 10 (81-88)
gCmd1.FlexfeedRobFeed.RobfeedToFlexfeed.diCalPosX := USINT_TO_DINT (dpInByte[10]);
//Eingangs Byte 11 (89-96)
gCmd1.FlexfeedRobFeed.RobfeedToFlexfeed.diCalPosX := gCmd1.FlexfeedRobFeed.RobfeedToFlexfeed.diCalPosX + SHL(USINT_TO_DINT (dpInByte[11]), 8);
//Eingangs Byte 12 (97-104)
gCmd1.FlexfeedRobFeed.RobfeedToFlexfeed.diCalPosY := USINT_TO_DINT (dpInByte[12]);
//Eingangs Byte 13 (105-112)
gCmd1.FlexfeedRobFeed.RobfeedToFlexfeed.diCalPosY := gCmd1.FlexfeedRobFeed.RobfeedToFlexfeed.diCalPosY + SHL(USINT_TO_DINT (dpInByte[13]), 8);
//Eingangs Byte 14 (113-120)
//Eingangs Byte 15 (121-128)
//Ausg<EFBFBD>nge an Roboter
//============================================================
//Ausgangs Byte 0 (0-7)
TOF_Reset_EStop.IN := lABBRobot.Out.bResetEStop;
TOF_Reset_EStop.PT := t#400ms;
TOF_Reset_EStop ();
dpOutByte[0].0 := lABBRobot.Out.bSwitchMotorOn;
dpOutByte[0].1 := lABBRobot.Out.bSwitchMotorOff;
dpOutByte[0].2 := lABBRobot.Out.bStart;
dpOutByte[0].3 := lABBRobot.Out.bStop;
dpOutByte[0].4 := TOF_Reset_EStop.Q;
dpOutByte[0].5 := lABBRobot.Out.bResetError;
dpOutByte[0].6 := lABBRobot.Out.bStartAtMain;
dpOutByte[0].7 := lABBRobot.Out.bLifebeat;
//Ausgangs Byte 1 (8-15)
dpOutByte[1].0 := lABBRobot.Out.bStartBackup;
//dpOutByte[1].1 := lABBRobot.Out.bWirteAccess;
//Ausgangs Byte 2 (16-23)
dpOutByte[2].0 := gEGP[1].In.bGripperIsOpen;
dpOutByte[2].1 := gEGP[1].In.bGripperIsClosed OR gEGP[1].In.bGripperIsClosedWithPart;
dpOutByte[2].3 := gEGP[2].In.bGripperIsOpen;
dpOutByte[2].4 := gEGP[2].In.bGripperIsClosedWithPart;
dpOutByte[2].5 := gEGP[2].In.bGripperIsClosed;
dpOutByte[2].7 := FALSE;
dpOutByte[3].0 := gbInPartReleased; //Spanner Bauteil offen
dpOutByte[3].1 := gCmd1.FlexfeedRobFeed.FlexfeedToRobfeed.bNoPart; //Kein Teil in Feeder
dpOutByte[3].2 := gCmd1.Robot.ToRobot.bXHome;
dpOutByte[3].3 := gCmd1.Robot.ToRobot.bYHome;
dpOutByte[3].4 := gCmd1.Robot.ToRobot.bFinishedPartInDie;
dpOutByte[3].5 := gCmd1.Robot.ToRobot.bNewPartInDie;
dpOutByte[3].6 := gCmd1.Robot.ToRobot.bFinishedPartInDieNOk;
//Ausgangs Byte 3 (24-31)
//Ausgangs Byte 4 (32-39)
//Ausgangs Byte 5 (40-47)
dpOutByte[5] := lABBRobot.Out.usProgNr;
//Ausgangs Byte 6 (48-55)
dpOutByte[6] := lProcParam.usPartNr;
//Ausgangs Byte 7 (56-63)
dpOutByte[7] := gCmd1.FlexfeedRobFeed.FlexfeedToRobfeed.usCalCmd;
//Ausgangs Byte 8 (64-71)
dpOutByte[8] := gCmd1.FlexfeedRobFeed.FlexfeedToRobfeed.usCalPos;
//Ausgangs Byte 9 (72-79)
//Ausgangs Byte 10 (80-87)
//Ausgangs Byte 11 (88-95)
dpOutByte[10] := DINT_TO_USINT ((gCmd1.FlexfeedRobFeed.FlexfeedToRobfeed.diPosX / 100) MOD 256);
dpOutByte[11] := DINT_TO_USINT (SHR (gCmd1.FlexfeedRobFeed.FlexfeedToRobfeed.diPosX / 100, 8));
//Ausgangs Byte 12 (96-103)
//Ausgangs Byte 13 (104-111)
dpOutByte[12] := DINT_TO_USINT ((gCmd1.FlexfeedRobFeed.FlexfeedToRobfeed.diPosY / 100) MOD 256);
dpOutByte[13] := DINT_TO_USINT (SHR (gCmd1.FlexfeedRobFeed.FlexfeedToRobfeed.diPosY / 100, 8));
//Ausgangs Byte 14 (112-119)
//Ausgangs Byte 15 (120-127)
dpOutByte[14] := DINT_TO_USINT ((gCmd1.FlexfeedRobFeed.FlexfeedToRobfeed.diRotC / 100) MOD 256);
dpOutByte[15] := DINT_TO_USINT (SHR (gCmd1.FlexfeedRobFeed.FlexfeedToRobfeed.diRotC / 100, 8));
END_PROGRAM

View File

@@ -0,0 +1,9 @@
VAR
lABBRobot : REFERENCE TO gtyp_ABBInterface; (*Referenz to ABB Standard Interface*)
lProcParam : REFERENCE TO gtyp_ProcParam; (*Parametersatz zum editieren*)
dpOutByte : ARRAY[0..15] OF USINT := [16(0)]; (*Raw Output Bytes Abb Interface*)
dpInByte : ARRAY[0..15] OF USINT := [16(0)]; (*Raw Input Bytes Abb Interface*)
TOF_Reset_EStop : TOF;
TON_Motors_On : TON;
TON_Lifebeat : TON;
END_VAR

View File

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

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.2.7.54 SP?>
<Program xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File Description="Implementation code">ABBComInit.st</File>
<File Description="Implementation code">ABBCom.st</File>
<File Description="Local variables" Private="true">ABBCom.var</File>
</Files>
</Program>

View File

@@ -0,0 +1,106 @@
ACTION DoRegisterMachParameter:
//Parameter PV in Mp Recipe registrieren
MpFUB.MpRecipeRegMachPar.MpLink := ADR (gRecipeMachPar);
MpFUB.MpRecipeRegMachPar.Category := ADR ('MachPar');
MpFUB.MpRecipeRegMachPar.Enable := TRUE;
MpFUB.MpRecipeRegMachPar.PVName := ADR ('Flexfeed:Parameter');
MpFUB.MpRecipeRegMachPar ();
END_ACTION
ACTION DoInitMachparameter:
//Standard Maschinenparameter Laden
//MpAuditCustomEvent (gMpAuditTrail, "Flexfeeder", "", "DefaultParameter");
Parameter.sCam_IP := '192.168.1.140';
Parameter.sCam_User := 'admin';
Parameter.sCam_Pass := '';
Parameter.sCam_CalibJob := 'Calibration32l-P';
END_ACTION
ACTION DoTimes:
//Zeiten berechnen
Times.diSteptimeTCP := gdiSystemTime - TimesLatch.diSteptimeTCP;
Times.diSteptimeFF := gdiSystemTime - TimesLatch.diSteptimeFF;
END_ACTION
ACTION DoFubs:
//Funktionsbausteine aufrufen
//===================================================
//Enables reset
IF enStepTCP <> enTCP_Step_Open THEN
FUBs.TCP_Open.enable := FALSE;
END_IF
IF enStepTCP <> enTCP_Step_Connect THEN
FUBs.TCP_Client.enable := FALSE;
END_IF
IF enStepTCP <> enTCP_Step_Connected THEN
FUBs.TCP_Send.enable := FALSE;
FUBs.TCP_Receive.enable := FALSE;
END_IF
IF enStepTCP <> enTCP_Step_Close THEN
FUBs.TCP_CLose.enable := FALSE;
END_IF
FUBs.TCP_Open ();
FUBs.TCP_Client ();
FUBs.TCP_CLose ();
FUBs.TCP_Send ();
FUBs.TCP_Receive ();
MpFUB.MpRecipeRegMachPar ();
END_ACTION
ACTION DoResetComAlarms:
//Kommunikations Alarme r<EFBFBD>cksetzen
//===================================================
Alarms.bFFCamUnrecognizedCmd := FALSE;
Alarms.bFFCamFilenameMissing := FALSE;
Alarms.bFFCamLoadJobFailed := FALSE;
Alarms.bFFCamOfflineManual := FALSE;
END_ACTION
ACTION DoAlarms:
//Alarme erzeugen bzw. r<EFBFBD>cksetzen
//===================================================
//Unbekannter Befehl
IF Alarms.bFFCamUnrecognizedCmd THEN
IF (AlarmIDs.udFFCamUnrecognizedCmd = 0) THEN
AlarmIDs.udFFCamUnrecognizedCmd := MpAlarmXSet (gMpAlarmXCore, 'CamUnrecognizedCmd');
END_IF
ELSIF (AlarmIDs.udFFCamUnrecognizedCmd > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udFFCamUnrecognizedCmd);
AlarmIDs.udFFCamUnrecognizedCmd := 0;
END_IF
//Laden Dateiname fehlt
IF Alarms.bFFCamFilenameMissing THEN
IF (AlarmIDs.udFFCamFilenameMissing = 0) THEN
AlarmIDs.udFFCamFilenameMissing := MpAlarmXSet (gMpAlarmXCore, 'CamFilenameMissing');
END_IF
ELSIF (AlarmIDs.udFFCamFilenameMissing > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udFFCamFilenameMissing);
AlarmIDs.udFFCamFilenameMissing := 0;
END_IF
//Laden Fehlgeschlagen
IF Alarms.bFFCamLoadJobFailed THEN
IF (AlarmIDs.udFFCamLoadJobFailed = 0) THEN
AlarmIDs.udFFCamLoadJobFailed := MpAlarmXSet (gMpAlarmXCore, 'CamLoadJobFailed');
END_IF
ELSIF (AlarmIDs.udFFCamLoadJobFailed > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udFFCamLoadJobFailed);
AlarmIDs.udFFCamLoadJobFailed := 0;
END_IF
//Kamera ist Offline
IF Alarms.bFFCamOfflineManual THEN
IF (AlarmIDs.udFFCamOfflineManual = 0) THEN
AlarmIDs.udFFCamOfflineManual := MpAlarmXSet (gMpAlarmXCore, 'CamOfflineManual');
END_IF
ELSIF (AlarmIDs.udFFCamOfflineManual > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udFFCamOfflineManual);
AlarmIDs.udFFCamOfflineManual := 0;
END_IF
END_ACTION

View File

@@ -0,0 +1,403 @@
PROGRAM _CYCLIC
//Zeiger auf Interface Stellen (Zyklisch wg. Download)
lProcParam ACCESS ADR (gProcParam[gusCurrentParamset].Feeder); //Gleicher Programmname wie bei Flexfeeder Cam verwenden
IF (usParamsetLatch <> gusCurrentParamset) THEN
bParamSetChanged := TRUE;
END_IF
//Parametersatz merken
usParamsetLatch := gusCurrentParamset;
//Machinenparameter registrieren in Rezeptverwaltung
//==================================================
DoRegisterMachParameter;
//Standardparametersatz laden
//==================================================
VCButtons.DefaultParameter.usStatus.0 := (gUserRights.Right3_Parameter < mpUSERX_ACCESS_FULL);
VCButtons.DefaultParameter.usStatus.1 := (gUserRights.Right3_Parameter < mpUSERX_ACCESS_FULL);
IF EDGEPOS (VCButtons.DefaultParameter.bCommand) THEN
DoInitMachparameter;
END_IF
VCButtons.ResetCommunications.usStatus.0 := (enStepTCP = enTCP_Step_Close);
//Verbindung wiederherstellen
IF EDGEPOS (VCButtons.ResetCommunications.bCommand) THEN
enStepTCP := enTCP_Step_Close;
VCButtons.ResetCommunications.bCommand := FALSE;
END_IF
//Zeiten berechnen
DoTimes;
//TCP Schnittstelle
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CASE enStepTCP OF
//Socket <EFBFBD>ffnen
//---------------------------
enTCP_Step_Open:
FUBs.TCP_Open.options := tcpOPT_REUSEADDR;
FUBs.TCP_Open.pIfAddr := 0; //Optional ADR (str_PLC_IPAdress)
FUBs.TCP_Open.port := 0; //Freie Portwahl
FUBs.TCP_Open.enable := NOT Status.bDisableConnReq;
IF FUBs.TCP_Open.status = tcpERR_NOMORE_IDENTS THEN
//keine Freien Idents mehr
//FixMe Error
ELSIF FUBs.TCP_Open.status = tcpERR_ALREADY_EXIST THEN
//Socket bereits ge<EFBFBD>ffnet weiter werwenden
Status.udSocket := FUBs.TCP_Open.ident;
enStepTCP := enTCP_Step_Connect;
ELSIF FUBs.TCP_Open.status = tcpERR_SOCKET_CREATE THEN
//Socket konnte nicht erstellt werden
//FixMe Error
ELSIF FUBs.TCP_Open.status = tcpERR_SOCKET_BIND THEN
//Binderror
//FixMe Error
ELSIF FUBs.TCP_Open.status = tcpERR_INTERFACE THEN
//Interfacefehler
//FixMe Error
ELSIF FUBs.TCP_Open.status = tcpERR_SYSTEM THEN
//Systemfehler
//FixMe Error
ELSIF FUBs.TCP_Open.status = ERR_OK THEN
Status.udSocket := FUBs.TCP_Open.ident;
enStepTCP := enTCP_Step_Connect;
END_IF
//Verbindung aufbauen
//---------------------------
enTCP_Step_Connect:
FUBs.TCP_Client.ident := Status.udSocket;
FUBs.TCP_Client.portserv := 23;
FUBs.TCP_Client.pServer := ADR (Parameter.sCam_IP);
FUBs.TCP_Client.enable := TRUE;
IF FUBs.TCP_Client.status = tcpERR_INVALID_IDENT THEN
//Un<EFBFBD>ltiger Ident
enStepTCP := enTCP_Step_Open;
//FixMe Error
ELSIF FUBs.TCP_Client.status = tcpERR_PARAMETER THEN
//Falsche Parameter
//FixMe Error
ELSIF FUBs.TCP_Client.status = tcpERR_INVALID THEN
//Socket ung<EFBFBD>ltig muss getrennt werden
enStepTCP := enTCP_Step_Close;
ELSIF FUBs.TCP_Client.status = tcpERR_ALREADY_CONNECTED THEN
//Verbindung bereits vorhanden schlie<EFBFBD>en
enStepTCP := enTCP_Step_Close;
ELSIF FUBs.TCP_Client.status = tcpERR_SYSTEM THEN
//Systemfehler
//FixMe Error
ELSIF FUBs.TCP_Client.status = ERR_OK THEN
//verbunden
enStepTCP := enTCP_Step_Connected;
END_IF
//Verbunden
//---------------------------
enTCP_Step_Connected:
//Empfang ausf<EFBFBD>hren
FUBs.TCP_Receive.ident := Status.udSocket;
FUBs.TCP_Receive.pData := ADR (sRecv);
FUBs.TCP_Receive.datamax := SIZEOF (sRecv);
FUBs.TCP_Receive.enable := TRUE;
IF FUBs.TCP_Receive.status = tcpERR_INVALID_IDENT THEN
//Un<EFBFBD>ltiger Ident
enStepTCP := enTCP_Step_Open;
//FixMe Error
ELSIF FUBs.TCP_Receive.status = tcpERR_PARAMETER THEN
//Parameterfehler
//FixMe Error
ELSIF FUBs.TCP_Receive.status = tcpERR_NO_DATA THEN
//Keine Daten sp<EFBFBD>ter wiederholen
//FixMe Error
ELSIF FUBs.TCP_Receive.status = tcpERR_INVALID THEN
//Ung<EFBFBD>ltiges Argument
//FixMe Error
ELSIF FUBs.TCP_Receive.status = tcpERR_NOT_CONNECTED THEN
//Verbindung beendet durch Gegenstelle Socket schlie<EFBFBD>en und Verb. neu aufbuen
enStepTCP := enTCP_Step_Close;
//FixMe Error
ELSIF FUBs.TCP_Receive.status = tcpERR_NO_OOBDATA THEN
//eine OOB-Daten vorhanden. Applikationsabh<EFBFBD>ngig. Flag tcpMSG_OOB nicht setzen.
//FixMe Error
ELSIF FUBs.TCP_Receive.status = tcpERR_SYSTEM THEN
//Systemfehler
//FixMe Error
ELSIF FUBs.TCP_Receive.status = ERR_OK THEN
//Daten erhalten
IF Status.bSendData THEN
//fixme
END_IF
IF Status.bDataReceived THEN
//FixMe
END_IF
Status.bDataReceived := TRUE;
sRecvCopy := sRecv;
//FixMe Error
END_IF
FUBs.TCP_Send.ident := Status.udSocket;
FUBs.TCP_Send.pData := ADR (sSend);
FUBs.TCP_Send.datalen := brsstrlen (ADR (sSend));
FUBs.TCP_Send.enable := Status.bSendData;
IF FUBs.TCP_Send.status = tcpERR_INVALID_IDENT THEN
//Un<EFBFBD>ltiger Ident
enStepTCP := enTCP_Step_Open;
//FixMe Error
ELSIF FUBs.TCP_Send.status = tcpERR_PARAMETER THEN
//Parameterfehler
//FixMe Error
ELSIF FUBs.TCP_Send.status = tcpERR_SENTLEN THEN
//Die <EFBFBD>bernommene Datenl<EFBFBD>nge entspricht nicht der angegebenen Datenl<EFBFBD>nge. <EFBFBD>brige Daten nochmals senden.
//FixMe Error
ELSIF FUBs.TCP_Send.status = tcpERR_WOULDBLOCK THEN
//Daten konnten nicht in den Sendepuffer des Sockets <EFBFBD>bernommen werden. Vorgang sp<EFBFBD>ter wiederholen.
//FixMe Error
ELSIF FUBs.TCP_Send.status = tcpERR_NOT_CONNECTED THEN
//Verbindung beendet durch Gegenstelle Socket schlie<EFBFBD>en und Verb. neu aufbuen
enStepTCP := enTCP_Step_Close;
//FixMe Error
ELSIF FUBs.TCP_Send.status = tcpERR_SYSTEM THEN
//Systemfehler
//FixMe Error
ELSIF FUBs.TCP_Send.status = ERR_OK THEN
//Daten gesendet
Status.bSendData := FALSE;
Status.bDataSent := TRUE;
//FixMe Error
END_IF
//Trennen
//---------------------------
enTCP_Step_Close:
FUBs.TCP_CLose.ident := Status.udSocket;
FUBs.TCP_CLose.enable := TRUE;
IF FUBs.TCP_CLose.status = ERR_OK THEN
Status.bDisableConnReq := FALSE;
enStepTCP := enTCP_Step_Open;
enStepCam := enCamStep_Offline;
END_IF
END_CASE
//Cam Schrittkette
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CASE enStepCam OF
//Offline warten auf Userprompt
//-----------------------------
enCamStep_Offline:
IF Status.bDataReceived THEN
IF brsstrlen (ADR (sRecv)) > 6 THEN
IF brsstrcmp (ADR ('User: '), ADR (sRecv) + brsstrlen (ADR (sRecv)) - 6) = 0 THEN
//UserPrompt - Ok
TimesLatch.diSteptimeFF := gdiSystemTime;
enStepCam := enCamStep_SendUser;
ELSE
//Fixme
END_IF
ELSE
//Fixme Bad Len
END_IF
brsmemset (ADR (sRecv), 0, brsstrlen (ADR (sRecv)));
Status.bDataReceived := FALSE;
END_IF
//User gesendet warten auf Passprompt
//-----------------------------
enCamStep_SendUser:
//User Senden
sSend := Parameter.sCam_User;
brsstrcat (ADR (sSend), ADR ('$r$n'));
Status.bSendData := NOT Status.bDataSent AND (Times.diSteptimeFF > 500000);
IF Status.bDataReceived THEN
IF brsstrcmp (ADR ('Password: '), ADR (sRecv)) = 0 THEN
//Passprompt - Ok
Status.bDataSent := FALSE;
TimesLatch.diSteptimeFF := gdiSystemTime;
enStepCam := enCamStep_SendPass;
ELSE
//Fixme
END_IF
brsmemset (ADR (sRecv), 0, brsstrlen (ADR (sRecv)));
Status.bDataReceived := FALSE;
ELSIF (Times.diSteptimeFF > 4000000) THEN
//Wiederholen
Status.bDataSent := FALSE;
TimesLatch.diSteptimeFF := gdiSystemTime;
END_IF
//Passwort senden
//-----------------------------
enCamStep_SendPass:
sSend := Parameter.sCam_Pass;
brsstrcat (ADR (sSend), ADR ('$r$n'));
Status.bSendData := NOT Status.bDataSent AND (Times.diSteptimeFF > 500000);
IF Status.bDataReceived THEN
IF brsstrcmp (ADR ('User Logged In$r$n'), ADR (sRecv)) = 0 THEN
//User eingeloggt
Status.bDataSent := FALSE;
TimesLatch.diSteptimeFF := gdiSystemTime;
enStepCam := enCamStep_LoggedIn;
ELSIF brsstrcmp (ADR ('Invalid Password$r$nUser: '), ADR (sRecv)) = 0 THEN
//Pass Flasch User neu Senden
Status.bDataSent := FALSE;
TimesLatch.diSteptimeFF := gdiSystemTime;
enStepCam := enCamStep_SendUser;
ELSE
//Fixme
END_IF
brsmemset (ADR (sRecv), 0, brsstrlen (ADR (sRecv)));
Status.bDataReceived := FALSE;
ELSIF (Times.diSteptimeFF > 4000000) THEN
//Wiederholen
Status.bDataSent := FALSE;
TimesLatch.diSteptimeFF := gdiSystemTime;
END_IF
//Login Ok - f<EFBFBD>r Sp<EFBFBD>te vorbereitet um Jobs zu wechseln
//-----------------------------
enCamStep_LoggedIn:
Status.bDataSent := FALSE;
TimesLatch.diSteptimeFF := gdiSystemTime;
enStepCam := enCamStep_SetOffline;
//Offline schalten
//-----------------------------
enCamStep_SetOffline:
//Kamera offline schalten
sSend := 'SO0$r$n';
Status.bSendData := NOT Status.bDataSent;
IF Status.bDataReceived THEN
IF Status.bSendData THEN
//fixme
END_IF
IF brsstrcmp (ADR ('1$r$n'), ADR (sRecv)) = 0 THEN
//Befehl Ok
Status.bDataSent := FALSE;
DoResetComAlarms;
TimesLatch.diSteptimeFF := gdiSystemTime;
enStepCam := enCamStep_LoadJob;
ELSIF brsstrcmp (ADR ('-5$r$n'), ADR (sRecv)) = 0 THEN
//Cam durch Insight Explorer Offline
Status.bDataSent := FALSE;
Alarms.bFFCamOfflineManual := TRUE;
ELSE
//Fixme
END_IF
brsmemset (ADR (sRecv), 0, brsstrlen (ADR (sRecv)));
Status.bDataReceived := FALSE;
END_IF
//Job laden
//-----------------------------
enCamStep_LoadJob:
sSend := 'LF';
//Job aus Parametersatz laden
brsstrcat (ADR (sSend), ADR (lProcParam.sPrgName));
brsstrcat (ADR (sSend), ADR ('$r$n'));
Status.bSendData := NOT Status.bDataSent;
IF Status.bDataReceived THEN
IF brsstrcmp (ADR ('1$r$n'), ADR (sRecv)) = 0 THEN
//Befehl Ok
DoResetComAlarms;
bParamSetChanged := FALSE;
Status.bDataSent := FALSE;
TimesLatch.diSteptimeFF := gdiSystemTime;
enStepCam := enCamStep_SetOnline;
ELSIF brsstrcmp (ADR ('0$r$n'), ADR (sRecv)) = 0 THEN
//Uncrecocnized Command
Alarms.bFFCamUnrecognizedCmd := TRUE;
ELSIF brsstrcmp (ADR ('-1$r$n'), ADR (sRecv)) = 0 THEN
//Dateiname fehlt
Alarms.bFFCamFilenameMissing := TRUE;
Status.bDataSent := FALSE;
ELSIF brsstrcmp (ADR ('-2$r$n'), ADR (sRecv)) = 0 THEN
//Laden fehlgeschlagen
Alarms.bFFCamLoadJobFailed := TRUE;
Status.bDataSent := FALSE;
ELSIF brsstrcmp (ADR ('-5$r$n'), ADR (sRecv)) = 0 THEN
//Cam durch Insight Explorer Offline
Alarms.bFFCamOfflineManual := TRUE;
Status.bDataSent := FALSE;
ELSE
//Fixme
END_IF
brsmemset (ADR (sRecv), 0, brsstrlen (ADR (sRecv)));
Status.bDataReceived := FALSE;
END_IF
//Online schalten
//-----------------------------
enCamStep_SetOnline:
sSend := 'SO1$r$n';
Status.bSendData := NOT Status.bDataSent;
IF Status.bDataReceived THEN
IF brsstrcmp (ADR ('1$r$n'), ADR (sRecv)) = 0 THEN
//Befehl Ok
Status.bDataSent := FALSE;
DoResetComAlarms;
TimesLatch.diSteptimeFF := gdiSystemTime;
enStepCam := enCamStep_WaitInit;
ELSIF brsstrcmp (ADR ('-5$r$n'), ADR (sRecv)) = 0 THEN
//Cam durch Insight Explorer Offline
Alarms.bFFCamOfflineManual := TRUE;
Status.bDataSent := FALSE;
ELSE
//Fixme
END_IF
brsmemset (ADR (sRecv), 0, brsstrlen (ADR (sRecv)));
Status.bDataReceived := FALSE;
END_IF
//4s Auf Kamerainitialisierung warten
//-----------------------------
enCamStep_WaitInit:
IF (Times.diSteptimeFF > 10000000) THEN
TimesLatch.diSteptimeFF := gdiSystemTime;
enStepCam := enCamStep_IsOnline;
END_IF
//Feeder is Online
//-----------------------------
enCamStep_IsOnline:
Status.bDataSent := FALSE;
TimesLatch.diSteptimeFF := gdiSystemTime;
END_CASE
gCmd1.Cam.FromCam.bCamOnline := ( enStepCam = enCamStep_IsOnline);
//FUBs Aufrufen
DoFubs;
//Alarme
DoAlarms;
END_PROGRAM

View File

@@ -0,0 +1,7 @@
PROGRAM _INIT
Status.bDataSent := FALSE;
enStepCam := enCamStep_Offline;
enStepTCP := enTCP_Step_Open;
usParamsetLatch := 0;
END_PROGRAM

View File

@@ -0,0 +1,40 @@
(*//Dynamische Variablen*)
VAR
lProcParam : REFERENCE TO gtyp_PrcParam_Feeder; (*Akutelle Parameter*)
END_VAR
(*//Lokale Variablen*)
VAR
bParamSetChanged : BOOL;
usParamsetLatch : USINT;
sRecv : STRING[80];
sRecvCopy : STRING[80];
sSend : {REDUND_UNREPLICABLE} STRING[80];
sTemp : STRING[3];
sDebug1 : {REDUND_UNREPLICABLE} STRING[80];
sDebug2 : {REDUND_UNREPLICABLE} STRING[80];
END_VAR
(*//Processed Communication Structure*)
(*//Strukturen*)
VAR RETAIN
enStepTCP : typ_enTCP; (*Schrittkette*)
enStepCam : typ_enCam; (*Schrittkette*)
Status : typ_States; (*Statis*)
END_VAR
VAR
Alarms : typ_Alarms;
AlarmIDs : typ_AlarmIDs; (*Alarm IDs*)
Times : typ_Times;
TimesLatch : typ_Times; (*Gespeicherte Systemzeit*)
END_VAR
VAR RETAIN
Parameter : {REDUND_UNREPLICABLE} typ_Parameter; (*Parameter*)
END_VAR
(*//Funktionsbl<62>cke*)
VAR
FUBs : typ_FUB; (*Funktionsbausteine*)
MpFUB : typ_MpFUB;
END_VAR
(*//VC*)
VAR
VCButtons : typ_VCButtons; (*VC - Buttons*)
END_VAR

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.7.3.93 SP?>
<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File Description="Aktionen TBrk-Ctrl">Action.st</File>
<File Description="Implementation code">CognexInit.st</File>
<File Description="Implementation code">CognexCyclic.st</File>
<File Description="Local variables" Private="true">FlexFeed.var</File>
<File Description="Local data types" Private="true">Types.typ</File>
</Files>
</Program>

View File

@@ -0,0 +1,86 @@
(*//I/Os*)
(*//Strukturen*)
TYPE
typ_States : STRUCT
bDisableConnReq : BOOL; (*Verbindungsaufbau unterbrechen*)
bDataReceived : BOOL; (*Daten erhalten*)
bSendData : BOOL; (*Daten senden*)
bDataSent : BOOL; (*Daten gesendet*)
udSocket : UDINT; (*Socket Handle*)
END_STRUCT;
typ_Times : STRUCT (*Zykluszeiten etc.*)
diSteptimeTCP : {REDUND_UNREPLICABLE} DINT; (*[<5B>s]*)
diSteptimeFF : {REDUND_UNREPLICABLE} DINT; (*[<5B>s]*)
END_STRUCT;
typ_Parameter : STRUCT (*Parameter (Feste Parameter Schrauber bezogen)*)
sCam_IP : STRING[15] := '192.168.1.141'; (*Kamera IP-Adresse*)
sCam_User : STRING[15] := 'admin'; (*Kamera User*)
sCam_Pass : STRING[15] := ''; (*Kamea Passwort*)
sCam_CalibJob : STRING[25] := 'PartTemplate'; (*Kamea Kalibrierjob*)
END_STRUCT;
typ_FUB : STRUCT
TCP_Open : TcpOpen; (*Socket <20>ffnen*)
TCP_Client : TcpClient; (*Verbindung aufbauen*)
TCP_CLose : TcpClose; (*Verbindung schlie<69>en*)
TCP_Send : TcpSend; (*Senden*)
TCP_Receive : TcpRecv; (*Empfangen*)
END_STRUCT;
typ_MpFUB : STRUCT (*MApp Funktionsbausteine*)
MpRecipeRegMachPar : MpRecipeRegPar; (*Maschinenparameter regsiterien*)
END_STRUCT;
END_TYPE
(*//Schrittketten / Befehle / Bedingungen*)
TYPE
typ_enTCP :
( (*Schrittkette*)
enTCP_Step_Open := 0, (*Socket <20>ffnen*)
enTCP_Step_Connect, (*Client verbindung aufbauen*)
enTCP_Step_Connected, (*Verbunden / Senden / Empfangen*)
enTCP_Step_Close (*Verbindung schlie<69>en*)
);
typ_enCam :
(
enCamStep_Offline, (*Flexfeeder Offline - Warte auf User Prompt - Username Senden*)
enCamStep_SendUser, (*Flexfeeder Username senden und warte auf Pass Promt*)
enCamStep_SendPass, (*Flexfeeder Passwort gesendet warte auf Loginbest<73>tigung*)
enCamStep_LoggedIn, (*Login- Ok (sp<73>ter hier mal unterscheiden*)
enCamStep_SetOffline, (*Cam Offline schalten*)
enCamStep_LoadJob, (*Job laden*)
enCamStep_SetOnline, (*Cam Online Setzen*)
enCamStep_WaitInit,
enCamStep_IsOnline, (*Login Ok - Job laden (Erst Cam Offline schalten)*)
enCamStep_Dummy
);
END_TYPE
(*//Alarme*)
TYPE
typ_Alarms : STRUCT (*Alarme*)
bFFCamUnrecognizedCmd : BOOL; (*Unbekannter Befehl*)
bFFCamFilenameMissing : BOOL; (*Laden Dateinahme Fehlt*)
bFFCamLoadJobFailed : BOOL; (*Laden fehlgeschlagen / System Online / Datei nicht gefunden*)
bFFCamOfflineManual : BOOL; (*Kamera <20>ber Insight Explorer Offline*)
END_STRUCT;
typ_AlarmIDs : STRUCT (*Puffer f<>r Alarm IDs*)
udFFCamUnrecognizedCmd : UDINT; (*Unbekannter Befehl*)
udFFCamFilenameMissing : UDINT; (*Laden Dateinahme Fehlt*)
udFFCamLoadJobFailed : UDINT; (*Laden fehlgeschlagen / System Online / Datei nicht gefunden*)
udFFCamOfflineManual : UDINT; (*Kamera <20>ber Insight Explorer Offline*)
END_STRUCT;
typ_AlarmSnippets : STRUCT (*Infos f<>r Alarmtexte*)
strDummy : STRING[40]; (*Dummystring*)
END_STRUCT;
END_TYPE
(*//Visual Components*)
TYPE
typ_VCButtons : STRUCT (*Visual Controls Buttons*)
DefaultParameter : gtyp_VCButton; (*Default Parameter Laden*)
ResetCommunications : gtyp_VCButton; (*Verbindung abbrechen*)
END_STRUCT;
END_TYPE

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.7.3.93 SP?>
<Package xmlns="http://br-automation.co.at/AS/Package">
<Objects>
<Object Type="Program" Language="IEC" Description="Kommunikation mit EGP Greifer">Cognex</Object>
<Object Type="File" Description="Alarme">TxtAlarms.tmx</Object>
</Objects>
</Package>

View File

@@ -0,0 +1,41 @@
<?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">Cognex/Alarms</prop>
</header>
<body>
<tu tuid="CamUnrecognizedCmd">
<tuv xml:lang="de">
<seg>Messung: Kamera Unbekannter Befehl</seg>
</tuv>
<tuv xml:lang="en">
<seg>Measurement: Cam Unrecognized Command</seg>
</tuv>
</tu>
<tu tuid="CamFilenameMissing">
<tuv xml:lang="de">
<seg>Messung: Kamera Job laden - Dateiname fehlt</seg>
</tuv>
<tuv xml:lang="en">
<seg>Measurement: Cam Load Job - Filename missing</seg>
</tuv>
</tu>
<tu tuid="CamLoadJobFailed">
<tuv xml:lang="de">
<seg>Messung: Kamera Job laden fehlgeschlagen (Cam Online / Datei fehlt)</seg>
</tuv>
<tuv xml:lang="en">
<seg>Measurement: Cam Load Job failed (System Online / File missing)</seg>
</tuv>
</tu>
<tu tuid="CamOfflineManual">
<tuv xml:lang="de">
<seg>Messung: Kamera Offline durch Insight Explorer</seg>
</tuv>
<tuv xml:lang="en">
<seg>Measurement: Cam Offline by Insight Explorer</seg>
</tuv>
</tu>
</body>
</tmx>

View File

@@ -0,0 +1,50 @@
ACTION DoTimes:
//Zeiten berechnen
Times.diSteptime := gdiSystemTime - TimesLatch.diSteptime;
END_ACTION
ACTION DoAlarms:
//Alarme erzeugen bzw. r<EFBFBD>cksetzen
//===================================================
//Greifer Fehler
IF (EGPIn.usStatus = EGP_STAT_ERROR) AND bEGPSupplyOk THEN
IF (AlarmIDs.udEGPError = 0) THEN
AlarmIDs.udEGPError := MpAlarmXSet (gMpAlarmXCore, 'EGPError');
END_IF
ELSIF (EGPIn.usStatus = EGP_STAT_OK) AND (AlarmIDs.udEGPError > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udEGPError);
AlarmIDs.udEGPError := 0;
END_IF
//Greifer Wartung Erforderlich
IF (EGPIn.usStatus = EGP_STAT_MAINT) THEN
IF (AlarmIDs.udEGPMaint = 0) THEN
AlarmIDs.udEGPMaint := MpAlarmXSet (gMpAlarmXCore, 'EGPMaint');
END_IF
ELSIF (EGPIn.usStatus = EGP_STAT_OK) AND (AlarmIDs.udEGPMaint > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udEGPMaint);
AlarmIDs.udEGPMaint := 0;
END_IF
//Greifer au<EFBFBD>er Spezifikation
IF (EGPIn.usStatus = EGP_STAT_SPEC) THEN
IF (AlarmIDs.udEGPSpec = 0) THEN
AlarmIDs.udEGPSpec := MpAlarmXSet (gMpAlarmXCore, 'EGPSpec');
END_IF
ELSIF (EGPIn.usStatus = EGP_STAT_OK) AND (AlarmIDs.udEGPSpec > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udEGPSpec);
AlarmIDs.udEGPSpec := 0;
END_IF
IF (EGPIn.usStatus = EGP_STAT_OK) AND NOT EGPIn.bReferenced THEN
IF (AlarmIDs.udEGPNotReferenced = 0) THEN
AlarmIDs.udEGPNotReferenced := MpAlarmXSet (gMpAlarmXCore, 'EGPNotReferenced');
END_IF
ELSIF EGPIn.bReferenced AND (AlarmIDs.udEGPNotReferenced > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udEGPNotReferenced);
AlarmIDs.udEGPNotReferenced := 0;
END_IF
END_ACTION

View File

@@ -0,0 +1,383 @@
PROGRAM _CYCLIC
//Zeiger auf Interface Stellen (Zyklisch wg. Download)
lEGPIf ACCESS ADR (gEGP[usGripper]);
//FixMe Parameter
Parameter.bGripDirection := TRUE; //False: Au<EFBFBD>engreifen, True := Innengreifen
//FixMe Error nur wenn ESTOP Ok
bEGPSupplyOk := gbSOuSafetyOk; //FixMe
//Kraft
lEGPIf.Out.usForce := 0; //100%
EGPIn.usStatus := dpInByte[0] AND 2#0000_0111;
EGPIn.bReferenced := dpInByte[0].3;
EGPIn.bSuccess := dpInByte[0].4;
EGPIn.bLimit := dpInByte[0].5;
EGPIn.bBlocked := dpInByte[0].6;
EGPIn.bProcessCmd := dpInByte[0].7;
EGPIn.bPart[1] := dpInByte[1].0;
EGPIn.bPart[2] := dpInByte[1].1;
EGPIn.bPart[3] := dpInByte[1].2;
EGPIn.bPart[4] := dpInByte[1].3;
EGPIn.bPart[5] := dpInByte[1].4;
EGPIn.bPart[6] := dpInByte[1].5;
EGPIn.bPart[7] := dpInByte[1].6;
EGPIn.bPart[8] := dpInByte[1].7;
EGPIn.bSensorSwitch1 := dpInByte[2].0;
EGPIn.bSensorSwitch2 := dpInByte[2].1;
//Position wird direkt eingelesen
//Zeiten berechnen
DoTimes;
//Stati
lEGPIf.In.bGripperIsOpen := EGPIn.rPosition <= 0.25;
lEGPIf.In.bGripperIsClosed := EGPIn.rPosition > 6.0; //Max Geshlossen
lEGPIf.In.bGripperIsClosedWithPart := FC_InTolerance (EGPIn.rPosition, Status.rPosClosed, -0.25, 0.25);
//IF lEGPIf.In.bGripperIsOpen THEN
// lEGPIf.In.bGripperIsClosed := FALSE;
// lEGPIf.In.bGripperIsClosedWithPart := FALSE;
//END_IF
IF EGPIn.bProcessCmd THEN
bCmdSent := TRUE;
END_IF
//Automatik Schrittkette
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CASE enStepEGP OF
//Initial Schritt
//---------------------------
enEGP_Step_INIT:
EGPOu.bExecuteCmd := FALSE;
IF (EGPIn.usStatus = EGP_STAT_OK) AND NOT EGPIn.bProcessCmd THEN
IF (lEGPIf.Out.bReference OR NOT EGPIn.bReferenced) AND bEGPSupplyOk THEN
Times.diSteptime := gdiSystemTime;
enStepEGP := enEGP_Step_REF;
bCmdSent := FALSE;
ELSIF lEGPIf.Out.bMeasure AND bEGPSupplyOk THEN
enStepEGP := enEGB_Step_MEAS;
bCmdSent := FALSE;
ELSIF lEGPIf.Out.bOpen AND bEGPSupplyOk THEN
enStepEGP := enEGP_Step_OPEN;
bCmdSent := FALSE;
ELSIF lEGPIf.Out.bClose AND bEGPSupplyOk THEN
enStepEGP := enEGP_Step_CLOSE;
bCmdSent := FALSE;
ELSIF lEGPIf.Out.bPosition AND bEGPSupplyOk THEN
enStepEGP := enEGP_Step_POS;
bCmdSent := FALSE;
ELSIF lEGPIf.Out.bIncremental AND bEGPSupplyOk THEN
enStepEGP := enEGP_Step_INC;
bCmdSent := FALSE;
END_IF
ELSIF bEGPSupplyOk THEN
//Fehler Autoreset FixMe
//IF lEGPIf.Out.bReset THEN
TimesLatch.diSteptime := gdiSystemTime;
enStepEGP := enEGP_Step_RESET;
//END_IF
END_IF
//Fehler quittiern
//---------------------------
enEGP_Step_RESET:
EGPOu.usCommand := EGP_CMD_RESET;
EGPOu.bExecuteCmd := NOT bCmdSent;
IF (Times.diSteptime > 3000000) THEN
bCmdSent := FALSE;
EGPOu.bExecuteCmd := FALSE;
TimesLatch.diSteptime := gdiSystemTime;
END_IF
IF EGPIn.bProcessCmd THEN
IF (EGPIn.usStatus <> 0) THEN
//Quittieren Ok
END_IF
EGPOu.bExecuteCmd := FALSE;
enStepEGP := enEGP_Step_INIT;
bCmdSent := FALSE;
END_IF
//Greifer Referenzieren (Richtung von Parameter in I/O Abh<EFBFBD>gnig)
//---------------------------
enEGP_Step_REF:
IF (Times.diSteptime > 3000000) THEN
bCmdSent := FALSE;
EGPOu.bExecuteCmd := FALSE;
TimesLatch.diSteptime := gdiSystemTime;
END_IF
EGPOu.usCommand := EGP_CMD_REF;
EGPOu.bExecuteCmd := NOT bCmdSent;
IF bCmdSent AND NOT EGPIn.bProcessCmd THEN
//Befehl Best<EFBFBD>tigt warten auf Ergebnis
Status.bReferenceOk := FALSE;
Status.bReferenceNOk := FALSE;
IF EGPIn.bBlocked AND EGPIn.bLimit AND EGPIn.bSuccess AND EGPIn.bReferenced AND (EGPIn.usStatus <> 0) THEN
//Referenzieren Ok
Status.bReferenceOk := TRUE;
ELSIF EGPIn.bBlocked AND NOT EGPIn.bLimit AND NOT EGPIn.bSuccess AND NOT EGPIn.bReferenced THEN
//Referenzieren NOk
Status.bReferenceOk := TRUE;
END_IF
Status.rPosClosed := 9; //FixME
IF Status.bReferenceOk OR Status.bReferenceNOk THEN
EGPOu.bExecuteCmd := FALSE;
enStepEGP := enEGP_Step_INIT;
lEGPIf.Out.bReference := FALSE;
bCmdSent := FALSE;
ELSIF NOT (EGPIn.usStatus = EGP_STAT_OK) AND bEGPSupplyOk THEN
TimesLatch.diSteptime := gdiSystemTime;
enStepEGP := enEGP_Step_RESET;
bCmdSent := FALSE;
END_IF
END_IF
//Greifer Hubmessung (max. Schie<EFBFBD>pos.)
//---------------------------
enEGB_Step_MEAS:
EGPOu.usCommand := EGP_CMD_MEASURE;
EGPOu.bExecuteCmd := NOT bCmdSent;
IF bCmdSent AND NOT EGPIn.bProcessCmd THEN
//Befehl Best<EFBFBD>tigt warten auf Ergebnis
Status.bMeasuereOk := FALSE;
Status.bMeasureNOk := FALSE;
IF EGPIn.bBlocked AND EGPIn.bLimit AND EGPIn.bSuccess AND EGPIn.bReferenced AND (EGPIn.usStatus <> 0) THEN
//Hubmessung Ok
Status.bMeasuereOk := TRUE;
ELSIF NOT EGPIn.bBlocked AND NOT EGPIn.bSuccess AND EGPIn.bReferenced THEN
//Hubmessung NOk
Status.bMeasureNOk := TRUE;
END_IF
IF Status.bMeasuereOk OR Status.bMeasureNOk THEN
EGPOu.bExecuteCmd := FALSE;
enStepEGP := enEGP_Step_INIT;
lEGPIf.Out.bMeasure := FALSE;
bCmdSent := FALSE;
ELSIF NOT (EGPIn.usStatus = EGP_STAT_OK) AND bEGPSupplyOk THEN
TimesLatch.diSteptime := gdiSystemTime;
enStepEGP := enEGP_Step_RESET;
bCmdSent := FALSE;
ELSIF NOT EGPIn.bReferenced AND bEGPSupplyOk THEN
Times.diSteptime := gdiSystemTime;
enStepEGP := enEGP_Step_REF;
bCmdSent := FALSE;
END_IF
END_IF
//Greifer <EFBFBD>ffnen
//---------------------------
enEGP_Step_OPEN:
IF (Times.diSteptime > 3000000) THEN
bCmdSent := FALSE;
EGPOu.bExecuteCmd := FALSE;
TimesLatch.diSteptime := gdiSystemTime;
END_IF
EGPOu.usCommand := EGP_CMD_OPEN;
EGPOu.rSetPositon := 0.0;
EGPOu.bExecuteCmd := NOT bCmdSent;
IF bCmdSent AND NOT EGPIn.bProcessCmd THEN
//Befehl Best<EFBFBD>tigt warten auf Ergebnis
Status.bOpenOk := FALSE;
Status.bOpenNOk := FALSE;
IF EGPIn.bBlocked AND EGPIn.bLimit AND EGPIn.bSuccess AND EGPIn.bReferenced AND (EGPIn.usStatus <> 0) THEN
//<EFBFBD>ffnen Ok
Status.bOpenOk := TRUE;
Status.rPosClosed := 9; //FixME
ELSIF EGPIn.bBlocked AND NOT EGPIn.bLimit AND NOT EGPIn.bSuccess AND EGPIn.bReferenced THEN
//<EFBFBD>ffnen NOk
Status.bOpenNOk := TRUE;
Status.rPosClosed := 9; //FixME
END_IF
IF Status.bOpenOk OR Status.bOpenNOk THEN
EGPOu.bExecuteCmd := FALSE;
enStepEGP := enEGP_Step_INIT;
lEGPIf.Out.bOpen := FALSE;
bCmdSent := FALSE;
ELSIF NOT (EGPIn.usStatus = EGP_STAT_OK) AND bEGPSupplyOk THEN
TimesLatch.diSteptime := gdiSystemTime;
enStepEGP := enEGP_Step_RESET;
bCmdSent := FALSE;
ELSIF NOT EGPIn.bReferenced AND bEGPSupplyOk THEN
Times.diSteptime := gdiSystemTime;
enStepEGP := enEGP_Step_REF;
bCmdSent := FALSE;
END_IF
END_IF
//Greifer Schlie<EFBFBD>en
//Optional Werkst<EFBFBD>ckangabe (bei Auswertung noch zu implementieren)
//---------------------------
enEGP_Step_CLOSE:
IF (Times.diSteptime > 3000000) THEN
bCmdSent := FALSE;
EGPOu.bExecuteCmd := FALSE;
TimesLatch.diSteptime := gdiSystemTime;
END_IF
EGPOu.usCommand := EGP_CMD_CLOSE;
EGPOu.rSetPositon := 0.0;
EGPOu.bExecuteCmd := NOT bCmdSent;
EGPOu.usPartNr := 0;
IF bCmdSent AND NOT EGPIn.bProcessCmd THEN
//Befehl Best<EFBFBD>tigt warten auf Ergebnis
Status.bCloseOk := FALSE;
Status.bCloseNOk := FALSE;
IF EGPIn.bBlocked AND NOT EGPIn.bLimit AND EGPIn.bSuccess AND EGPIn.bReferenced AND (EGPIn.usStatus <> 0) THEN
//Schlie<EFBFBD>en Ok
Status.bCloseOk := TRUE;
Status.rPosClosed := EGPIn.rPosition;
//lEGPIf.In.bGripperIsClosedWithPart := TRUE;
ELSIF EGPIn.bBlocked AND EGPIn.bLimit AND NOT EGPIn.bSuccess AND EGPIn.bReferenced THEN
//Schlie<EFBFBD>en NOk
Status.bCloseNOk := TRUE;
Status.rPosClosed := EGPIn.rPosition;
//lEGPIf.In.bGripperIsClosed := TRUE;
END_IF
IF Status.bCloseOk OR Status.bCloseNOk THEN
EGPOu.bExecuteCmd := FALSE;
enStepEGP := enEGP_Step_INIT;
lEGPIf.Out.bClose := FALSE;
bCmdSent := FALSE;
ELSIF NOT (EGPIn.usStatus = EGP_STAT_OK) AND bEGPSupplyOk THEN
TimesLatch.diSteptime := gdiSystemTime;
enStepEGP := enEGP_Step_RESET;
bCmdSent := FALSE;
ELSIF NOT EGPIn.bReferenced AND bEGPSupplyOk THEN
Times.diSteptime := gdiSystemTime;
enStepEGP := enEGP_Step_REF;
bCmdSent := FALSE;
END_IF
END_IF
//Greifer Positionieren
//---------------------------
enEGP_Step_POS:
IF (Times.diSteptime > 3000000) THEN
bCmdSent := FALSE;
EGPOu.bExecuteCmd := FALSE;
TimesLatch.diSteptime := gdiSystemTime;
END_IF
EGPOu.usCommand := EGP_CMD_POS;
EGPOu.rSetPositon := lEGPIf.Out.rPosition;
EGPOu.bExecuteCmd := NOT bCmdSent;
IF bCmdSent AND NOT EGPIn.bProcessCmd THEN
Status.bPosOk := FALSE;
Status.bPosNOk := FALSE;
IF NOT EGPIn.bBlocked AND NOT EGPIn.bLimit AND EGPIn.bSuccess AND EGPIn.bReferenced AND (EGPIn.usStatus <> 0) THEN
//FixMe Pos Toleranz pr<EFBFBD>fen
//Schlie<EFBFBD>en Ok
Status.bPosOk := TRUE;
ELSIF NOT EGPIn.bBlocked AND NOT EGPIn.bSuccess AND EGPIn.bReferenced THEN
//Schlie<EFBFBD>en NOk
Status.bPosNOk := TRUE;
END_IF
IF Status.bPosOk OR Status.bPosNOk THEN
EGPOu.bExecuteCmd := FALSE;
enStepEGP := enEGP_Step_INIT;
lEGPIf.Out.bPosition := FALSE;
bCmdSent := FALSE;
ELSIF NOT (EGPIn.usStatus = EGP_STAT_OK) AND bEGPSupplyOk THEN
TimesLatch.diSteptime := gdiSystemTime;
enStepEGP := enEGP_Step_RESET;
bCmdSent := FALSE;
ELSIF NOT EGPIn.bReferenced AND bEGPSupplyOk THEN
Times.diSteptime := gdiSystemTime;
enStepEGP := enEGP_Step_REF;
bCmdSent := FALSE;
END_IF
END_IF
//Greifer Relativfahrt
//---------------------------
enEGP_Step_INC:
IF (Times.diSteptime > 3000000) THEN
bCmdSent := FALSE;
EGPOu.bExecuteCmd := FALSE;
TimesLatch.diSteptime := gdiSystemTime;
END_IF
EGPOu.usCommand := EGP_CMD_INC;
EGPOu.rSetPositon := lEGPIf.Out.rPosition;
EGPOu.bExecuteCmd := NOT bCmdSent;
IF bCmdSent AND NOT EGPIn.bProcessCmd THEN
//Befehl Best<EFBFBD>tigt warten auf Ergebnis
Status.bIncOk := FALSE;
Status.bIncNOk := FALSE;
IF NOT EGPIn.bBlocked AND NOT EGPIn.bLimit AND EGPIn.bSuccess AND EGPIn.bReferenced AND (EGPIn.usStatus <> 0) THEN
//FixMe Pos Toleranz pr<EFBFBD>fen
//Schlie<EFBFBD>en Ok
Status.bIncOk := TRUE;
ELSIF NOT EGPIn.bBlocked AND NOT EGPIn.bSuccess AND EGPIn.bReferenced THEN
//Schlie<EFBFBD>en NOk
Status.bIncNOk := TRUE;
END_IF
IF Status.bCloseOk OR Status.bCloseNOk THEN
EGPOu.bExecuteCmd := FALSE;
enStepEGP := enEGP_Step_INIT;
lEGPIf.Out.bIncremental := FALSE;
bCmdSent := FALSE;
ELSIF NOT (EGPIn.usStatus = EGP_STAT_OK) AND bEGPSupplyOk THEN
TimesLatch.diSteptime := gdiSystemTime;
enStepEGP := enEGP_Step_RESET;
bCmdSent := FALSE;
ELSIF NOT EGPIn.bReferenced AND bEGPSupplyOk THEN
Times.diSteptime := gdiSystemTime;
enStepEGP := enEGP_Step_REF;
bCmdSent := FALSE;
END_IF
END_IF
END_CASE
//Greifer ansteuern
EGPOu.usForce := lEGPIf.Out.usForce; //0 : 100%, 1 : 75%, 2 : 50%, 3 : 25%
EGPOu.bGripDirection := Parameter.bGripDirection; //Force Aussengreifen
//Ausgangswerte Schreiben
//=================================
//Byte 0 Befehl
dpOutByte[0] := EGPOu.usCommand;
dpOutByte[0].7 := EGPOu.bExecuteCmd;
//Byte 1 Werks<EFBFBD>ck und Greifrichtung
//Werkst<EFBFBD>cknr
dpOutByte[1].4 := EGPOu.usPartNr.0;
dpOutByte[1].5 := EGPOu.usPartNr.1;
dpOutByte[1].6 := EGPOu.usPartNr.2;
dpOutByte[1].7 := EGPOu.usPartNr.3;
//Greifrichtung
dpOutByte[1].0 := EGPOu.bGripDirection;
//Byte 2 Greifkraft
dpOutByte[2].0 := EGPOu.usForce.0;
dpOutByte[2].1 := EGPOu.usForce.1;
dpOutByte[2].2 := EGPOu.usForce.2;
//Byte 3 Reserviert
//Byte 4-7 Position wird direkt ausgegeben
//Alarme
DoAlarms;
END_PROGRAM

View File

@@ -0,0 +1,54 @@
(*//Raw In/Out*)
VAR
dpOutByte : ARRAY[0..3] OF USINT := [4(0)]; (*Raw Output Bytes EGP Interface*)
dpInByte : ARRAY[0..3] OF USINT := [4(0)]; (*Raw Input Bytes EGP Interface*)
END_VAR
(*//MAschineninterface f. Greifer*)
VAR
lEGPIf : REFERENCE TO gtyp_EGP;
END_VAR
(*//Lokale Variablen*)
VAR
bCmdSent : BOOL;
bEGPSupplyOk : BOOL; (*EGP wird mit Spannung versorgt*)
END_VAR
VAR RETAIN
usGripper : USINT; (*Greifernummer*)
END_VAR
(*//Processed Communication Structure*)
VAR
EGPOu : typ_EGPOu; (*EGP Steuerwort*)
EGPIn : typ_EGPIn; (*EGP Statuswort*)
END_VAR
(*//Befehle EGP Greifer*)
VAR CONSTANT
EGP_CMD_FASTSTOP : USINT := 0; (*EGP Befehl Schnellstopp*)
EGP_CMD_RESET : USINT := 1; (*EGP Befehl St<53>rung quittieren*)
EGP_CMD_REF : USINT := 2; (*EGP Befehl Referenzieren*)
EGP_CMD_OPEN : USINT := 3; (*EGP Befehl <20>ffnen*)
EGP_CMD_CLOSE : USINT := 4; (*EGP Befehl Greifen mit Werkstp<74>ckangabe*)
EGP_CMD_POS : USINT := 5; (*EGP Befehl Positionsfahrt*)
EGP_CMD_INC : USINT := 6; (*EGP Befehl Relativfahrt*)
EGP_CMD_MEASURE : USINT := 7; (*EGP Befehl Hubmessung*)
EGP_CMD_STOP : USINT := 8; (*EGP Befehl Stop*)
EGP_CMD_CALIBRATE : USINT := 9; (*EGP Befehl Kalibrieren*)
END_VAR
(*//Stati EGP Greifer*)
VAR CONSTANT
EGP_STAT_ERROR : USINT := 0; (*EGP St<53>rung*)
EGP_STAT_SPEC : USINT := 1; (*EGP Au<41>erhalb Spezifikation*)
EGP_STAT_MAINT : USINT := 2; (*EGP Wartung erforderlich*)
EGP_STAT_OK : USINT := 3; (*EGP Betriebsbereit*)
END_VAR
(*//Strukturen*)
VAR
enStepEGP : typ_enStepEGP; (*Schrittkette*)
Status : typ_States; (*Statis*)
AlarmIDs : typ_AlarmIDs; (*Alarm IDs*)
Times : typ_Times;
TimesLatch : typ_Times; (*Gespeicherte Systemzeit*)
END_VAR
VAR RETAIN
Parameter : {REDUND_UNREPLICABLE} typ_Parameter; (*Parameter*)
END_VAR
(*Insert your comment here.*)

View File

@@ -0,0 +1,3 @@
PROGRAM _INIT
usGripper := 1;
END_PROGRAM

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.4.8.122 SP?>
<Program xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File Description="Aktionen">Action.st</File>
<File Description="Init Greifer 1">EGPComInit.st</File>
<File Description="Implementation code">EGPCom.st</File>
<File Description="Local variables" Private="true">EGPCom.var</File>
<File Description="Local data types" Private="true">Types.typ</File>
</Files>
</Program>

View File

@@ -0,0 +1,80 @@
(*//I/Os*)
TYPE
typ_EGPIn : STRUCT (*EGP Eingangsdaten (Status)*)
usStatus : USINT; (*0.0 - 0.2 Status*)
bReferenced : BOOL; (*0.3 Referenziert*)
bSuccess : BOOL; (*0.4 Erfolg*)
bLimit : BOOL; (*0.5 Endanschlag*)
bBlocked : BOOL; (*0.6 Blockiert*)
bProcessCmd : BOOL; (*0.7 Prozessbefehl*)
bPart : ARRAY[1..8]OF BOOL; (*1.0 - 1.7 Werkst<73>cknummer*)
bSensorSwitch1 : USINT; (*3.0 Sensorschalter 1*)
bSensorSwitch2 : USINT; (*3.1 Sensorschalter 2*)
rPosition : REAL; (*4.0 - 7.7 Position*)
END_STRUCT;
typ_EGPOu : STRUCT (*EGP Ausgangsdaten (Steuer)*)
usCommand : USINT; (*0.0 - 0.6 Befehl*)
bExecuteCmd : BOOL; (*0.7 Ausf<73>hrbefehl*)
bGripDirection : BOOL; (*1.0 Greifrichtung*)
usPartNr : USINT; (*1.4 - 1.7 Werkst<73>cknummer*)
usForce : USINT; (*2.0- 2.2 Greifkraft*)
rSetPositon : REAL; (*4.0 - 7.7 Zielposition*)
END_STRUCT;
END_TYPE
(*//Strukturen*)
TYPE
typ_States : STRUCT
bReferenceOk : BOOL;
bReferenceNOk : BOOL;
bMeasuereOk : BOOL;
bMeasureNOk : BOOL;
bCloseOk : BOOL;
bCloseNOk : BOOL;
bOpenOk : BOOL;
bOpenNOk : BOOL;
bPosOk : BOOL;
bPosNOk : BOOL;
bIncOk : BOOL;
bIncNOk : BOOL;
rPosClosed : REAL;
END_STRUCT;
typ_Times : STRUCT (*Zykluszeiten etc.*)
diSteptime : {REDUND_UNREPLICABLE} DINT; (*[<5B>s]*)
END_STRUCT;
typ_Parameter : STRUCT (*Parameter (Feste Parameter)*)
bGripDirection : BOOL; (*1: Innengreifen / 0: Aussengreifen*)
END_STRUCT;
END_TYPE
(*//Schrittketten / Befehle / Bedingungen*)
TYPE
typ_enStepEGP :
( (*Schrittkette*)
enEGP_Step_INIT := 0, (*Initstep*)
enEGP_Step_RESET, (*Fehler quittieren*)
enEGP_Step_REF, (*Referenzieren (max. <20>ffnung)*)
enEGB_Step_MEAS, (*Hubmessung (max. Schlie<69>en)*)
enEGP_Step_OPEN, (*<2A>ffnen*)
enEGP_Step_CLOSE, (*Schliesen*)
enEGP_Step_POS, (*Positionieren*)
enEGP_Step_INC (*Relativfahrt*)
);
END_TYPE
(*//Alarme*)
TYPE
typ_AlarmIDs : STRUCT (*Puffer f<>r Alarm IDs*)
udEGPError : UDINT; (*Fehler EGP Greifer*)
udEGPMaint : UDINT; (*Wartung EGP Erforderlich*)
udEGPSpec : UDINT; (*EGP au<61>er Spezifikation*)
udEGPNotReferenced : UDINT; (*EGP nicht Referenziert*)
END_STRUCT;
typ_AlarmSnippets : STRUCT (*Infos f<>r Alarmtexte*)
strDummy : STRING[40]; (*Dummystring*)
END_STRUCT;
END_TYPE

View File

@@ -0,0 +1,3 @@
PROGRAM _INIT
usGripper := 2;
END_PROGRAM

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.4.8.122 SP?>
<Program xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File Description="Aktionen" Reference="true">\Logical\Communication\EGP\EGPCom1\Action.st</File>
<File Description="Init Greifer 2">EGPComInit.st</File>
<File Description="Implementation code" Reference="true">\Logical\Communication\EGP\EGPCom1\EGPCom.st</File>
<File Description="Local variables" Private="true" Reference="true">\Logical\Communication\EGP\EGPCom1\EGPCom.var</File>
<File Description="Local data types" Private="true" Reference="true">\Logical\Communication\EGP\EGPCom1\Types.typ</File>
</Files>
</Program>

View File

@@ -0,0 +1,23 @@
(*//Interface EGP_Greifer*)
TYPE
gtyp_EGP : STRUCT
In : gtyp_EGP_In;
Out : gtyp_EGP_Out; (*Befehle an Greifer*)
END_STRUCT;
gtyp_EGP_Out : STRUCT
bReference : BOOL; (*Referenzieren (Max. <20>ffnung)*)
bMeasure : BOOL; (*Hubmessung (Max. Schlie<69>pos)*)
bOpen : BOOL; (*Greifer <20>ffnen*)
bClose : BOOL; (*Greifer schlie<69>en (Optional mit Werkst<73>ck Angabe)*)
bPosition : BOOL; (*Positonsfahrt (Angabe Position)*)
bIncremental : BOOL; (*Relativfahrt (Angabe Positon=*)
usForce : USINT; (*Kraftstufen //0 : 100%, 1 : 75%, 2 : 50%, 3 : 25%*)
rPosition : REAL; (*Sollposition*)
END_STRUCT;
gtyp_EGP_In : STRUCT
bGripperIsOpen : BOOL; (*Greifer ist Offen*)
bGripperIsClosed : BOOL; (*Greifer ist Geschlossen Ohne Teil*)
bGripperIsClosedWithPart : BOOL; (*Greifer ist Geschlossen Mit Teil*)
END_STRUCT;
END_TYPE

View File

@@ -0,0 +1,3 @@
VAR
gEGP : ARRAY[1..2] OF gtyp_EGP; (*Greifer Interface*)
END_VAR

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.4.8.122 SP?>
<Package xmlns="http://br-automation.co.at/AS/Package">
<Objects>
<Object Type="File" Description="Globale Typen EGP-Greifer">GlobalEGP.typ</Object>
<Object Type="File" Description="Globale Variablen EGP-Greifer">GlobalEGP.var</Object>
<Object Type="Program" Language="IEC" Description="Kommunikation mit EGP Greifer">EGPCom1</Object>
<Object Type="Program" Language="IEC" Description="Kommunikation mit EGP Greifer">EGPCom2</Object>
<Object Type="File" Description="Alarme">TxtAlarms.tmx</Object>
</Objects>
</Package>

View File

@@ -0,0 +1,41 @@
<?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">EGP/Alarms</prop>
</header>
<body>
<tu tuid="EGPError">
<tuv xml:lang="de">
<seg>Vereinzelung: Greifer Fehler</seg>
</tuv>
<tuv xml:lang="en">
<seg>Feeder: Gripper Error</seg>
</tuv>
</tu>
<tu tuid="EGPMaint">
<tuv xml:lang="de">
<seg>Vereinzelung: Greifer Wartung Erforderlich</seg>
</tuv>
<tuv xml:lang="en">
<seg>Feeder: Gripper Maintenance neccersary</seg>
</tuv>
</tu>
<tu tuid="EGPSpec">
<tuv xml:lang="de">
<seg>Vereinzelung: Greifer außerhalb Spezifikation</seg>
</tuv>
<tuv xml:lang="en">
<seg>Feeder: Gripper out of specifications</seg>
</tuv>
</tu>
<tu tuid="EGPNotReferenced">
<tuv xml:lang="de">
<seg>Vereinzelung: Greifer nicht referenziert</seg>
</tuv>
<tuv xml:lang="en">
<seg>Feeder: Gripper not referenced</seg>
</tuv>
</tu>
</body>
</tmx>

View File

@@ -0,0 +1,106 @@
ACTION DoRegisterMachParameter:
//Parameter PV in Mp Recipe registrieren
MpFUB.MpRecipeRegMachPar.MpLink := ADR (gRecipeMachPar);
MpFUB.MpRecipeRegMachPar.Category := ADR ('MachPar');
MpFUB.MpRecipeRegMachPar.Enable := TRUE;
MpFUB.MpRecipeRegMachPar.PVName := ADR ('Flexfeed:Parameter');
MpFUB.MpRecipeRegMachPar ();
END_ACTION
ACTION DoInitMachparameter:
//Standard Maschinenparameter Laden
//MpAuditCustomEvent (gMpAuditTrail, "Flexfeeder", "", "DefaultParameter");
Parameter.sCam_IP := '192.168.1.140';
Parameter.sCam_User := 'admin';
Parameter.sCam_Pass := '';
Parameter.sCam_CalibJob := 'Calibration32l-P';
END_ACTION
ACTION DoTimes:
//Zeiten berechnen
Times.diSteptimeTCP := gdiSystemTime - TimesLatch.diSteptimeTCP;
Times.diSteptimeFF := gdiSystemTime - TimesLatch.diSteptimeFF;
END_ACTION
ACTION DoFubs:
//Funktionsbausteine aufrufen
//===================================================
//Enables reset
IF enStepTCP <> enTCP_Step_Open THEN
FUBs.TCP_Open.enable := FALSE;
END_IF
IF enStepTCP <> enTCP_Step_Connect THEN
FUBs.TCP_Client.enable := FALSE;
END_IF
IF enStepTCP <> enTCP_Step_Connected THEN
FUBs.TCP_Send.enable := FALSE;
FUBs.TCP_Receive.enable := FALSE;
END_IF
IF enStepTCP <> enTCP_Step_Close THEN
FUBs.TCP_CLose.enable := FALSE;
END_IF
FUBs.TCP_Open ();
FUBs.TCP_Client ();
FUBs.TCP_CLose ();
FUBs.TCP_Send ();
FUBs.TCP_Receive ();
MpFUB.MpRecipeRegMachPar ();
END_ACTION
ACTION DoResetComAlarms:
//Kommunikations Alarme r<EFBFBD>cksetzen
//===================================================
Alarms.bFFCamUnrecognizedCmd := FALSE;
Alarms.bFFCamFilenameMissing := FALSE;
Alarms.bFFCamLoadJobFailed := FALSE;
Alarms.bFFCamOfflineManual := FALSE;
END_ACTION
ACTION DoAlarms:
//Alarme erzeugen bzw. r<EFBFBD>cksetzen
//===================================================
//Unbekannter Befehl
IF Alarms.bFFCamUnrecognizedCmd THEN
IF (AlarmIDs.udFFCamUnrecognizedCmd = 0) THEN
AlarmIDs.udFFCamUnrecognizedCmd := MpAlarmXSet (gMpAlarmXCore, 'FFCamUnrecognizedCmd');
END_IF
ELSIF (AlarmIDs.udFFCamUnrecognizedCmd > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udFFCamUnrecognizedCmd);
AlarmIDs.udFFCamUnrecognizedCmd := 0;
END_IF
//Laden Dateiname fehlt
IF Alarms.bFFCamFilenameMissing THEN
IF (AlarmIDs.udFFCamFilenameMissing = 0) THEN
AlarmIDs.udFFCamFilenameMissing := MpAlarmXSet (gMpAlarmXCore, 'FFCamFilenameMissing');
END_IF
ELSIF (AlarmIDs.udFFCamFilenameMissing > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udFFCamFilenameMissing);
AlarmIDs.udFFCamFilenameMissing := 0;
END_IF
//Laden Fehlgeschlagen
IF Alarms.bFFCamLoadJobFailed THEN
IF (AlarmIDs.udFFCamLoadJobFailed = 0) THEN
AlarmIDs.udFFCamLoadJobFailed := MpAlarmXSet (gMpAlarmXCore, 'FFCamLoadJobFailed');
END_IF
ELSIF (AlarmIDs.udFFCamLoadJobFailed > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udFFCamLoadJobFailed);
AlarmIDs.udFFCamLoadJobFailed := 0;
END_IF
//Kamera ist Offline
IF Alarms.bFFCamOfflineManual THEN
IF (AlarmIDs.udFFCamOfflineManual = 0) THEN
AlarmIDs.udFFCamOfflineManual := MpAlarmXSet (gMpAlarmXCore, 'FFCamOfflineManual');
END_IF
ELSIF (AlarmIDs.udFFCamOfflineManual > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udFFCamOfflineManual);
AlarmIDs.udFFCamOfflineManual := 0;
END_IF
END_ACTION

View File

@@ -0,0 +1,40 @@
(*//Dynamische Variablen*)
VAR
lProcParam : REFERENCE TO gtyp_PrcParam_Feeder; (*Akutelle Parameter*)
END_VAR
(*//Lokale Variablen*)
VAR
bParamSetChanged : BOOL;
usParamsetLatch : USINT;
sRecv : STRING[80];
sRecvCopy : STRING[80];
sSend : {REDUND_UNREPLICABLE} STRING[80];
sTemp : STRING[3];
sDebug1 : {REDUND_UNREPLICABLE} STRING[80];
sDebug2 : {REDUND_UNREPLICABLE} STRING[80];
END_VAR
(*//Processed Communication Structure*)
(*//Strukturen*)
VAR RETAIN
enStepTCP : typ_enTCP; (*Schrittkette*)
enStepFlexfeeder : typ_enFlexFeeder; (*Schrittkette*)
Status : typ_States; (*Statis*)
END_VAR
VAR
Alarms : typ_Alarms;
AlarmIDs : typ_AlarmIDs; (*Alarm IDs*)
Times : typ_Times;
TimesLatch : typ_Times; (*Gespeicherte Systemzeit*)
END_VAR
VAR RETAIN
Parameter : {REDUND_UNREPLICABLE} typ_Parameter; (*Parameter*)
END_VAR
(*//Funktionsbl<62>cke*)
VAR
FUBs : typ_FUB; (*Funktionsbausteine*)
MpFUB : typ_MpFUB;
END_VAR
(*//VC*)
VAR
VCButtons : typ_VCButtons; (*VC - Buttons*)
END_VAR

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,7 @@
PROGRAM _INIT
Status.bDataSent := FALSE;
enStepFlexfeeder := enFF_Step_Offline;
enStepTCP := enTCP_Step_Open;
usParamsetLatch := 0;
END_PROGRAM

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.7.3.93 SP?>
<Program SubType="IEC" xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File Description="Aktionen ">Action.st</File>
<File Description="Implementation code">FlexfeedInit.st</File>
<File Description="Implementation code">FlexFeedCyclic.st</File>
<File Description="Flexfeeder I/O" Private="true">IOs.var</File>
<File Description="Local variables" Private="true">FlexFeed.var</File>
<File Description="Local data types" Private="true">Types.typ</File>
</Files>
</Program>

View File

@@ -0,0 +1,6 @@
(*//IOs*)
(*//===========================================================*)
VAR
bOuFlexFeedPicksignal : BOOL; (*Pick Signal von Roboter an Flexfeeder*)
END_VAR
(*//===========================================================*)

View File

@@ -0,0 +1,115 @@
(*//I/Os*)
(*//Strukturen*)
TYPE
typ_States : STRUCT
bDisableConnReq : BOOL; (*Verbindungsaufbau unterbrechen*)
bDataReceived : BOOL; (*Daten erhalten*)
bSendData : BOOL; (*Daten senden*)
bDataSent : BOOL; (*Daten gesendet*)
bCalibration : BOOL; (*Kalibrieren*)
usCalPoint : USINT; (*Kalibrierpunkt 0-3*)
udSocket : UDINT; (*Socket Handle*)
diPosX : DINT; (*Pos X in 1/1000mm*)
diPosY : DINT; (*Pos Y in 1/1000mm*)
diRotC : DINT; (*Rot C in 1/1000mm*)
END_STRUCT;
typ_Times : STRUCT (*Zykluszeiten etc.*)
diSteptimeTCP : {REDUND_UNREPLICABLE} DINT; (*[<5B>s]*)
diSteptimeFF : {REDUND_UNREPLICABLE} DINT; (*[<5B>s]*)
END_STRUCT;
typ_Parameter : STRUCT (*Parameter (Feste Parameter Schrauber bezogen)*)
sCam_IP : STRING[15] := '192.168.1.140'; (*Kamera IP-Adresse*)
sCam_User : STRING[15] := 'admin'; (*Kamera User*)
sCam_Pass : STRING[15] := ''; (*Kamea Passwort*)
sCam_CalibJob : STRING[25] := 'Calibration32l-P'; (*Kamea Kalibrierjob*)
END_STRUCT;
typ_FUB : STRUCT
TCP_Open : TcpOpen; (*Socket <20>ffnen*)
TCP_Client : TcpClient; (*Verbindung aufbauen*)
TCP_CLose : TcpClose; (*Verbindung schlie<69>en*)
TCP_Send : TcpSend; (*Senden*)
TCP_Receive : TcpRecv; (*Empfangen*)
TON_NoPart : TON;
END_STRUCT;
typ_MpFUB : STRUCT (*MApp Funktionsbausteine*)
MpRecipeRegMachPar : MpRecipeRegPar; (*Maschinenparameter regsiterien*)
END_STRUCT;
END_TYPE
(*//Schrittketten / Befehle / Bedingungen*)
TYPE
typ_enTCP :
( (*Schrittkette*)
enTCP_Step_Open := 0, (*Socket <20>ffnen*)
enTCP_Step_Connect, (*Client verbindung aufbauen*)
enTCP_Step_Connected, (*Verbunden / Senden / Empfangen*)
enTCP_Step_Close (*Verbindung schlie<69>en*)
);
typ_enFlexFeeder :
(
enFF_Step_Offline, (*Flexfeeder Offline - Warte auf User Prompt - Username Senden*)
enFF_Step_SendUser, (*Flexfeeder Username senden und warte auf Pass Promt*)
enFF_Step_SendPass, (*Flexfeeder Passwort gesendet warte auf Loginbest<73>tigung*)
enFF_Step_LoggedIn, (*Login- Ok (sp<73>ter hier mal unterscheiden*)
enFF_Step_SetOffline, (*Cam Offline schalten*)
enFF_Step_LoadJob, (*Job laden*)
enFF_Step_StopFeederAuto, (*Feeder Automatik stoppen*)
enFF_Step_PickSigLow, (*PickSignal auf 0 setzen*)
enFF_Step_SetOnline, (*Cam Online Setzen*)
enFF_Step_SentOptInit, (*Optionae Initialisierung vom Flexfeeder*)
enFF_Step_WaitInit, (*Auf Kameraintialisierung warten 2s*)
enFF_Step_SentStateReq1, (*Statusanfrage 1*)
enFF_Step_SentStateReq2, (*Statusanfrage 2*)
enFF_Step_SentStateReq3, (*Statusanfrage 3*)
enFF_Step_StartFeederAuto, (*Feeder Automatik Starten*)
enFF_Step_IsOnline, (*Login Ok - Job laden (Erst Cam Offline schalten)*)
enFF_Step_StartStreaming,
enFF_Step_StreamingMode,
enFF_Step_StopStreaming,
enFF_Step_StopAutoAfterStreaming,
enFF_Step_CalCheckFeederHome, (*Kalibrierung Warten bis Feeder Home*)
enFF_Step_CalSelectPoint, (*Kalibrierung Kalibrierpunkt w<>hlen*)
enFF_Step_CalStartCycle, (*Kalibrierung Kalibrierablauf starten*)
enFF_Step_CalRobPickPlace, (*Kalibrierung Roboter Teil aufnehmnen und Ablegen*)
enFF_Step_CalGetTask, (*Kalibrierung Aufgabe auslesen*)
enFF_Step_CalSendX, (*Kalibrierung Ablagepos X <20>bermitteln*)
enFF_Step_CalSendY, (*Kalibrierung Ablagepos Y <20>bermitteln*)
enFF_Step_CalConfirmCmd, (*Kalibrierung Befehl best<73>tigen*)
enFF_Step_CalWait, (*Kalibrierung Ablagepos X <20>bermitteln*)
enFF_Step_Purge, (*Leeren*)
enFF_Step_PurgeCmd1, (*Leeren*)
enFF_Step_PurgeCmd2, (*Leeren*)
enFF_Step_PurgeWait (*Leeren*)
);
END_TYPE
(*//Alarme*)
TYPE
typ_Alarms : STRUCT (*Alarme*)
bFFCamUnrecognizedCmd : BOOL; (*Unbekannter Befehl*)
bFFCamFilenameMissing : BOOL; (*Laden Dateinahme Fehlt*)
bFFCamLoadJobFailed : BOOL; (*Laden fehlgeschlagen / System Online / Datei nicht gefunden*)
bFFCamOfflineManual : BOOL; (*Kamera <20>ber Insight Explorer Offline*)
END_STRUCT;
typ_AlarmIDs : STRUCT (*Puffer f<>r Alarm IDs*)
udFFCamUnrecognizedCmd : UDINT; (*Unbekannter Befehl*)
udFFCamFilenameMissing : UDINT; (*Laden Dateinahme Fehlt*)
udFFCamLoadJobFailed : UDINT; (*Laden fehlgeschlagen / System Online / Datei nicht gefunden*)
udFFCamOfflineManual : UDINT; (*Kamera <20>ber Insight Explorer Offline*)
END_STRUCT;
typ_AlarmSnippets : STRUCT (*Infos f<>r Alarmtexte*)
strDummy : STRING[40]; (*Dummystring*)
END_STRUCT;
END_TYPE
(*//Visual Components*)
TYPE
typ_VCButtons : STRUCT (*Visual Controls Buttons*)
DefaultParameter : gtyp_VCButton; (*Default Parameter Laden*)
ResetCommunications : gtyp_VCButton; (*Verbindung abbrechen*)
END_STRUCT;
END_TYPE

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.7.3.93 SP?>
<Package xmlns="http://br-automation.co.at/AS/Package">
<Objects>
<Object Type="Program" Language="IEC" Description="Kommunikation mit Fexfeeder/Cognex">Flexfeed</Object>
<Object Type="File" Description="Alarme">TxtAlarms.tmx</Object>
</Objects>
</Package>

View File

@@ -0,0 +1,41 @@
<?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">FF/Alarms</prop>
</header>
<body>
<tu tuid="FFCamUnrecognizedCmd">
<tuv xml:lang="de">
<seg>Flexfeeder: Kamera Unbekannter Befehl</seg>
</tuv>
<tuv xml:lang="en">
<seg>Flexfeeder: Cam Unrecognized Command</seg>
</tuv>
</tu>
<tu tuid="FFCamFilenameMissing">
<tuv xml:lang="de">
<seg>Flexfeeder: Kamera Job laden - Dateiname fehlt</seg>
</tuv>
<tuv xml:lang="en">
<seg>Flexfeeder: Cam Load Job - Filename missing</seg>
</tuv>
</tu>
<tu tuid="FFCamLoadJobFailed">
<tuv xml:lang="de">
<seg>Flexfeeder: Kamera Job laden fehlgeschlagen (Cam Online / Datei fehlt)</seg>
</tuv>
<tuv xml:lang="en">
<seg>Flexfeeder: Cam Load Job failed (System Online / File missing)</seg>
</tuv>
</tu>
<tu tuid="FFCamOfflineManual">
<tuv xml:lang="de">
<seg>Flexfeeder: Kamera Offline durch Insight Explorer</seg>
</tuv>
<tuv xml:lang="en">
<seg>Flexfeeder: Cam Offline by Insight Explorer</seg>
</tuv>
</tu>
</body>
</tmx>

View File

@@ -0,0 +1,36 @@
(*//Standard Interface ABB Roboter*)
TYPE
gtyp_ABBInterfaceIn : STRUCT (*Inputs from ABB Robot Interface*)
bMotorsOn : BOOL := FALSE; (*00 Motors are On (Flash = Unsync)*)
bMotorsOff : BOOL := FALSE; (*01 Motoren sind Aus (Blinken = Safety Chain)*)
bProgramRun : BOOL := FALSE; (*02 Programm l<>uft*)
bEStop : BOOL := FALSE; (*03 E-Stop von Roboter*)
bAutomatic : BOOL := FALSE; (*04 Automatik Modus*)
bError : BOOL := FALSE; (*05 Error von Roboter*)
bRunChainOk : BOOL; (*06 RunChain Ok*)
bLifebeat : BOOL := FALSE; (*07 Lifebeat von Roboter (<28>ber CC zur<75>ckgeroutet)*)
bMotionSupervisionTriggered : BOOL := FALSE; (*08 Bewegungs<67>berwachung ausgl<67>st*)
bWZHome : BOOL := FALSE; (*24 Roboter ist in Homepos*)
bWZChangetool : BOOL := FALSE; (*25 Roboter ist in Weltzone ChangeTool*)
bWZPlacepoint : BOOL := FALSE; (*26 Roboter ist in Weltzone Abgabepos <20>bergabestation*)
usStatus : USINT := 0; (*64 Status*)
END_STRUCT;
gtyp_ABBInterfaceOut : STRUCT (*Output to ABB Robot Interface*)
bSwitchMotorOn : BOOL := FALSE; (*00 Switch Motors On*)
bSwitchMotorOff : BOOL := FALSE; (*01 Switch Motors Off*)
bStart : BOOL := FALSE; (*02 Start - Nicht at Main*)
bStop : BOOL := FALSE; (*03 Stop Cycle*)
bResetEStop : BOOL := FALSE; (*04 Reset E-Stop*)
bResetError : BOOL := FALSE; (*05 Reset Errors*)
bStartAtMain : BOOL := FALSE; (*06 Start At Main (Continuous)*)
bLifebeat : BOOL := FALSE; (*07 Lifebeat an Roboter*)
bStartBackup : BOOL := FALSE; (*08 Start Backup*)
usProgNr : USINT := 0; (*64 Programm Number*)
END_STRUCT;
gtyp_ABBInterface : STRUCT (*ABB Robot Interface*)
bOnline : BOOL; (*Kommuniktion OK*)
In : gtyp_ABBInterfaceIn; (*Eing<6E>nge von ABB Roboter*)
Out : gtyp_ABBInterfaceOut; (*Ausga<67>nge an aBB Roboter*)
END_STRUCT;
END_TYPE

View File

@@ -0,0 +1,5 @@
(*//Kommunikationsstrukturen*)
VAR RETAIN
gABBRobot1 : gtyp_ABBInterface; (*Standard interface zu ABB Roboter*)
END_VAR
(*Variablen / Strukturen*)

View File

@@ -0,0 +1,50 @@
ACTION DoTimes:
//Zeiten berechnen
Times.diSteptime := gdiSystemTime - TimesLatch.diSteptime;
END_ACTION
ACTION DoAlarms:
//Alarme erzeugen bzw. r<EFBFBD>cksetzen
//===================================================
//Greifer Fehler
IF (EGPIn.usStatus = EGP_STAT_ERROR) AND bEGPSupplyOk THEN
IF (AlarmIDs.udEGPError = 0) THEN
AlarmIDs.udEGPError := MpAlarmXSet (gMpAlarmXCore, 'EGPError');
END_IF
ELSIF (EGPIn.usStatus = EGP_STAT_OK) AND (AlarmIDs.udEGPError > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udEGPError);
AlarmIDs.udEGPError := 0;
END_IF
//Greifer Wartung Erforderlich
IF (EGPIn.usStatus = EGP_STAT_MAINT) THEN
IF (AlarmIDs.udEGPMaint = 0) THEN
AlarmIDs.udEGPMaint := MpAlarmXSet (gMpAlarmXCore, 'EGPMaint');
END_IF
ELSIF (EGPIn.usStatus = EGP_STAT_OK) AND (AlarmIDs.udEGPMaint > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udEGPMaint);
AlarmIDs.udEGPMaint := 0;
END_IF
//Greifer au<EFBFBD>er Spezifikation
IF (EGPIn.usStatus = EGP_STAT_SPEC) THEN
IF (AlarmIDs.udEGPSpec = 0) THEN
AlarmIDs.udEGPSpec := MpAlarmXSet (gMpAlarmXCore, 'EGPSpec');
END_IF
ELSIF (EGPIn.usStatus = EGP_STAT_OK) AND (AlarmIDs.udEGPSpec > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udEGPSpec);
AlarmIDs.udEGPSpec := 0;
END_IF
IF (EGPIn.usStatus = EGP_STAT_OK) AND NOT EGPIn.bReferenced THEN
IF (AlarmIDs.udEGPNotReferenced = 0) THEN
AlarmIDs.udEGPNotReferenced := MpAlarmXSet (gMpAlarmXCore, 'EGPNotReferenced');
END_IF
ELSIF EGPIn.bReferenced AND (AlarmIDs.udEGPNotReferenced > 0) THEN
MpAlarmXResetID (gMpAlarmXCore, AlarmIDs.udEGPNotReferenced);
AlarmIDs.udEGPNotReferenced := 0;
END_IF
END_ACTION

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.4.8.122 SP?>
<Program xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File Description="Aktionen">Action.st</File>
<File Description="Implementation code">KEBInit.st</File>
<File Description="Implementation code">KEB_Cyclic.st</File>
<File Description="Local variables" Private="true">KEBCom.var</File>
<File Description="Local data types" Private="true">Types.typ</File>
</Files>
</Program>

View File

@@ -0,0 +1,16 @@
(*//Raw In/Out*)
VAR
diInStatusWord : DINT := 0; (*Statuswort*)
diOuCtrlWord : DINT := 0; (*Steuerwort*)
iOuSetSpeed : INT;
iInActSpeed : INT;
bOuEnable : BOOL;
END_VAR
(*//MAschineninterface f. Spindel*)
(*//Strukturen*)
VAR
FUBs : typ_FUB;
CtrlWord : typ_CtrlWord;
StatusWord : typ_StatusWord;
END_VAR
(*Insert your comment here.*)

View File

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

View File

@@ -0,0 +1,53 @@
PROGRAM _CYCLIC
//Statuswort einlesen
//==============================================
StatusWord.bST := diInStatusWord.0;
StatusWord.bError := diInStatusWord.1;
StatusWord.bStarted := diInStatusWord.2;
StatusWord.bLeftTurn := diInStatusWord.3;
StatusWord.bSetPointReached := diInStatusWord.11;
//Ansteuerung
//==============================================
//Freigabewen sicherheit OK
CtrlWord.bEnable := gbSOuSafetyOk AND gMachine1.bMachineON;
//Linkslauf notwendig
CtrlWord.bTrnLeft := FALSE;
//Start von Cmd Interface <EFBFBD>bernehmen
CtrlWord.bStart := FALSE; //Positionieren
IF gCmd1.Mill.ToMill.bStartMill THEN
iOuSetSpeed := - gCmd1.Mill.ToMill.iSpeed;
ELSE
iOuSetSpeed := FALSE;
END_IF
gCmd1.Mill.FromMill.bInVelocity := ABS (iInActSpeed) >= (0.95 * ABS (iOuSetSpeed));
FUBs.TON_Standstill.IN := ABS (iInActSpeed) = 0;
FUBs.TON_Standstill.PT := t#1s;
FUBs.TON_Standstill ();
gCmd1.Mill.FromMill.bInStandStill := FUBs.TON_Standstill.Q;
//Steuerwort ausgeben
//==============================================
diOuCtrlWord.0 := CtrlWord.bEnable;
diOuCtrlWord.1 := CtrlWord.bReset;
diOuCtrlWord.2 := CtrlWord.bStart;
diOuCtrlWord.3 := CtrlWord.bTrnLeft;
//Paramset
diOuCtrlWord.4 := CtrlWord.usParamset.0;
diOuCtrlWord.5 := CtrlWord.usParamset.1;
diOuCtrlWord.6 := CtrlWord.usParamset.1;
diOuCtrlWord.8 := CtrlWord.bFastStop;
//HW Enable immer notwendig
//==============================================
bOuEnable := CtrlWord.bEnable;
END_PROGRAM

View File

@@ -0,0 +1,41 @@
(*//I/Os*)
TYPE
typ_CtrlWord : STRUCT (*Steuerword*)
bEnable : BOOL; (*0.0 Freigabe*)
bReset : BOOL; (*0.1 Reset*)
bStart : BOOL; (*0.2 Start*)
bTrnLeft : BOOL; (*0.3 Linkslauf*)
usParamset : USINT; (*0.4-0.6 Parametersatz*)
bFastStop : BOOL; (*0.8*)
END_STRUCT;
typ_StatusWord : STRUCT (*Statusword*)
bST : BOOL; (*0.0 Freibabe Seitenz*)
bError : BOOL; (*0.1 Fehler*)
bStarted : BOOL; (*0.2*)
bLeftTurn : BOOL; (*0.3*)
bSetPointReached : BOOL; (*0.7*)
END_STRUCT;
END_TYPE
(*//Strukturen*)
TYPE
typ_FUB : STRUCT (*Funktionsbausteine*)
TON_Standstill : TON;
END_STRUCT;
END_TYPE
(*//Alarme*)
TYPE
typ_AlarmIDs : STRUCT (*Puffer f<>r Alarm IDs*)
udEGPError : UDINT; (*Fehler EGP Greifer*)
udEGPMaint : UDINT; (*Wartung EGP Erforderlich*)
udEGPSpec : UDINT; (*EGP au<61>er Spezifikation*)
udEGPNotReferenced : UDINT; (*EGP nicht Referenziert*)
END_STRUCT;
typ_AlarmSnippets : STRUCT (*Infos f<>r Alarmtexte*)
strDummy : STRING[40]; (*Dummystring*)
END_STRUCT;
END_TYPE

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.4.8.122 SP?>
<Package xmlns="http://br-automation.co.at/AS/Package">
<Objects>
<Object Type="Program" Language="IEC" Description="Kommunikation mit KEB-Umrichter">KEBCom</Object>
</Objects>
</Package>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.7.3.93 SP?>
<Package xmlns="http://br-automation.co.at/AS/Package">
<Objects>
<Object Type="File" Description="Communication Types">GlobalCom.typ</Object>
<Object Type="File" Description="Logging Vars">GlobalCom.var</Object>
<Object Type="Program" Language="IEC" Description="Communication to ABB Robot 1 (IRC 5 Version)">ABBCom</Object>
<Object Type="Package" Description="EGP-Greifer">EGP</Object>
<Object Type="Package" Description="KEB-Umrichter">KEB</Object>
<Object Type="Package" Description="Kommunikation mit Fexfeeder/Cognex">Flexfeeder</Object>
<Object Type="Package">RFID</Object>
<Object Type="Package" Description="Kommunikation mit Fexfeeder">Cognex</Object>
</Objects>
</Package>

View File

@@ -0,0 +1,8 @@
(*//Communicationstructures*)
(*//Transponders*)
VAR
gudRFIDReader1ID : UDINT; (*Gelesene ID*)
gudRFIDReader2ID : UDINT; (*Gelesene ID*)
gudRFIDReader3ID : UDINT; (*Gelesene ID*)
gudRFIDReader4ID : UDINT; (*Gelesene ID*)
END_VAR

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.7.3.93 SP?>
<Package xmlns="http://br-automation.co.at/AS/Package">
<Objects>
<Object Type="File" Description="Logging Vars">GlobaRFID.var</Object>
<Object Type="File" Description="Logging Vars" Private="true">RFID1var.var</Object>
<Object Type="Program" Language="IEC" Description="13 Mhz Transponder B&amp;R">RFID_USB</Object>
</Objects>
</Package>

View File

@@ -0,0 +1,8 @@
(*//Communicationstructures*)
(*//Transponders*)
VAR RETAIN
pudRFIDSerialReader1 : {REDUND_UNREPLICABLE} UDINT := 3735632; (*Serien Nr RFID Reader 1*)
pudRFIDSerialReader2 : {REDUND_UNREPLICABLE} UDINT := 0; (*Serien Nr RFID Reader 2*)
pudRFIDSerialReader3 : {REDUND_UNREPLICABLE} UDINT := 0; (*Serien Nr RFID Reader 3*)
pudRFIDSerialReader4 : {REDUND_UNREPLICABLE} UDINT := 0; (*Serien Nr RFID Reader 4*)
END_VAR

View File

@@ -0,0 +1,52 @@
FUNCTION ASCtoUDINT
ASCtoUDINT := 0;
udNextAdr := udInNextAdr;
IF bInReverse THEN
sStart := 7;
sEnd := 0;
sStep := -1;
ELSE
sStart := 0;
sEnd := 7;
sStep := 1;
END_IF
FOR usi := sStart TO sEnd BY sStep DO
brsmemcpy (ADR (usChar), udNextAdr + usi, 1);
CASE usChar OF
48:
ASCtoUDINT := SHL (ASCtoUDINT, 4) + 0;
49:
ASCtoUDINT := SHL (ASCtoUDINT, 4) + 1;
50:
ASCtoUDINT := SHL (ASCtoUDINT, 4) + 2;
51:
ASCtoUDINT := SHL (ASCtoUDINT, 4) + 3;
52:
ASCtoUDINT := SHL (ASCtoUDINT, 4) + 4;
53:
ASCtoUDINT := SHL (ASCtoUDINT, 4) + 5;
54:
ASCtoUDINT := SHL (ASCtoUDINT, 4) + 6;
55:
ASCtoUDINT := SHL (ASCtoUDINT, 4) + 7;
56:
ASCtoUDINT := SHL (ASCtoUDINT, 4) + 8;
57:
ASCtoUDINT := SHL (ASCtoUDINT, 4) + 9;
65:
ASCtoUDINT := SHL (ASCtoUDINT, 4) + 10;
66:
ASCtoUDINT := SHL (ASCtoUDINT, 4) + 11;
67:
ASCtoUDINT := SHL (ASCtoUDINT, 4) + 12;
68:
ASCtoUDINT := SHL (ASCtoUDINT, 4) + 13;
69:
ASCtoUDINT := SHL (ASCtoUDINT, 4) + 14;
70:
ASCtoUDINT := SHL (ASCtoUDINT, 4) + 15;
ELSE
ASCtoUDINT := SHL (ASCtoUDINT, 4) + 16#f;
END_CASE
END_FOR
END_FUNCTION

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.4.8.122 SP?>
<Program xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File Description="Implementation code">RFID_USB.st</File>
<File Description="Local variables" Private="true">RFID_USB.var</File>
<File Description="Local data types" Private="true">RFID_USB.typ</File>
<File Private="true">RFID_USB.fun</File>
<File Description="Convert ASCII Value to UDINT">ASCtoUDINT.st</File>
<File Description="Convert UDINT Value to ASCII">UDINTtoASC.st</File>
</Files>
</Program>

View File

@@ -0,0 +1,28 @@
FUNCTION ASCtoUDINT : UDINT (*Convert ASCII Value to UDINT*)
VAR_INPUT
udInNextAdr : UDINT; (*Next Pos in ByteStream (No CHECK)*)
bInReverse : BOOL;
END_VAR
VAR
udNextAdr : UDINT;
usi : SINT;
sStart : SINT;
sEnd : SINT;
sStep : SINT;
usChar : USINT;
END_VAR
END_FUNCTION
FUNCTION UDINTtoASC : UDINT (*Convert UDINT Value to ASCII*)
VAR_INPUT
udInNextAdr : UDINT; (*Next Pos in ByteStream (No CHECK)*)
udInValue : UDINT;
END_VAR
VAR
udNextAdr : UDINT;
udValue : UDINT;
usi : USINT;
usChar : USINT;
END_VAR
END_FUNCTION

View File

@@ -0,0 +1,609 @@
(********************************************************************
* COPYRIGHT --
********************************************************************
* Program: RFID_USB
* File: RFID_USB.st
* Author: michi
* Created: December 04, 2012
********************************************************************
* Implementation of program RFID_USB
* With 4 readers
********************************************************************)
PROGRAM _INIT
udAttachDetachCount := 0;
usNodeIx := 0;
enStep := enRFIDStep_INIT;
FUB_UsbDescriptorGet.descriptorType := asusb_USB_DESCR_STRING;
FUB_UsbDescriptorGet.descriptorIndex := 3; //DeviceDescr Serial Nr
//Seriennumer Reader
pudRFIDSerialReader1 := 3735632;
END_PROGRAM
PROGRAM _CYCLIC
CASE enStep OF
//Init
//---------------------------
enRFIDStep_INIT:
FUB_FrameRead1.enable := 0;
FUB_FrameRead2.enable := 0;
FUB_FrameRead3.enable := 0;
FUB_FrameRead4.enable := 0;
FUB_FrameReleaseBuffer1.enable := 0;
FUB_FrameReleaseBuffer2.enable := 0;
FUB_FrameReleaseBuffer3.enable := 0;
FUB_FrameReleaseBuffer4.enable := 0;
FUB_FrameWrite1.enable := 0;
FUB_FrameWrite2.enable := 0;
FUB_FrameWrite3.enable := 0;
FUB_FrameWrite4.enable := 0;
FUB_FrameXOpen1.enable := 0;
FUB_FrameXOpen2.enable := 0;
FUB_FrameXOpen3.enable := 0;
FUB_FrameXOpen4.enable := 0;
FUB_UsbNodeGet.enable := 0;
FUB_UsbNodeListGet.enable := 0;
enStep := enRFIDStep_USB_GETNODELIST;
//Get USB Nodelsit
//---------------------------
enRFIDStep_USB_GETNODELIST:
FUB_UsbNodeListGet.enable := 1;
FUB_UsbNodeListGet.pBuffer := ADR (udNodeList);
FUB_UsbNodeListGet.bufferSize := SIZEOF (udNodeList);
FUB_UsbNodeListGet.filterInterfaceClass := 0;
FUB_UsbNodeListGet.filterInterfaceSubClass := 0;
IF (FUB_UsbNodeListGet.status = ERR_OK) AND (FUB_UsbNodeListGet.listNodes > 0) THEN
// USB Device Attach or detach
FUB_UsbNodeListGet.enable := 0;
usNodeIx := 0;
udAttachDetachCount := FUB_UsbNodeListGet.attachDetachCount;
IF FUB_UsbNodeListGet.listNodes < NEEDED_DEVICES THEN
enStep := enRFIDStep_USB_SEARCHDEVICE;
//FixMe Error
END_IF
enStep := enRFIDStep_USB_SEARCHDEVICE;
usFoundReaders := 0;
END_IF
//else if (UsbNodeListGetFub.status == asusbERR_BUFSIZE || UsbNodeListGetFub.status == asusbERR_NULLPOINTER)
//Serch Reader in USB Devices
//---------------------------
enRFIDStep_USB_SEARCHDEVICE:
FUB_UsbNodeGet.enable := 1;
FUB_UsbNodeGet.nodeId := udNodeList[usNodeIx];
FUB_UsbNodeGet.pBuffer := ADR (usbDevice[usNodeIx]);
FUB_UsbNodeGet.bufferSize := SIZEOF (usbDevice[usNodeIx]);
IF (FUB_UsbNodeGet.status = ERR_OK ) THEN
FUB_UsbNodeGet.enable := 0;
// USB FTDI Transponder
IF (usbDevice[usNodeIx].vendorId = TRANSPONDER_FTDI_VENDOR_ID) AND
(usbDevice[usNodeIx].productId = TRANSPONDER_FTDI_PRODUCT_ID) AND
(usbDevice[usNodeIx].bcdDevice = TRANSPONDER_FTDI_BCD) THEN
// USB FTDI Transponder found
usFoundReaders := usFoundReaders + 1;
ELSE
udNodeList[usNodeIx] := 0; //Ignore
END_IF
usNodeIx := usNodeIx + 1;
IF (usNodeIx >= FUB_UsbNodeListGet.allNodes) THEN
//Find individual Readers
usNodeIx := 0;
enStep := enRFIDStep_USB_READDEVDESCR;
END_IF
ELSIF (FUB_UsbNodeGet.status = asusbERR_USB_NOTFOUND) THEN
// USB Device NOT found
enStep := enRFIDStep_USB_GETNODELIST;
END_IF
//ELSE IF (FUB_UsbNodeGet.status == asusbERR_BUFSIZE || FUB_UsbNodeGet.status == asusbERR_NULLPOINTER)
//Get DeviceDescriptor
enRFIDStep_USB_READDEVDESCR:
FUB_UsbDescriptorGet.enable := (udNodeList[usNodeIx] > 0);
FUB_UsbDescriptorGet.nodeId := udNodeList[usNodeIx];
FUB_UsbDescriptorGet.requestType := asusb_USB_RT_DEVICE;
FUB_UsbDescriptorGet.descriptorType := asusb_USB_DESCR_STRING;
FUB_UsbDescriptorGet.descriptorIndex := 3; //DeviceDescr Serial Nr
FUB_UsbDescriptorGet.languageId := 16#0409;
FUB_UsbDescriptorGet.pBuffer := ADR (strDeviceDescr[usNodeIx]);
FUB_UsbDescriptorGet.bufferSize := SIZEOF (strDeviceDescr[usNodeIx]);
IF (udNodeList[usNodeIx] = 0) THEN
usNodeIx := usNodeIx + 1;
ELSIF (FUB_UsbDescriptorGet.status = ERR_OK ) THEN
FUB_UsbDescriptorGet.enable := 0;
brsmemcpy (ADR (udSerialNr[usNodeIx]), ADR (strDeviceDescr[usNodeIx]) + 14, 4);
usNodeIx := usNodeIx + 1;
IF (udSerialNr[usNodeIx] = pudRFIDSerialReader1) AND (pudRFIDSerialReader1 > 0) THEN
usNodeIxReader1 := usNodeIx;
ELSIF (udSerialNr[usNodeIx] = pudRFIDSerialReader2) AND (pudRFIDSerialReader2 > 0) THEN
usNodeIxReader2 := usNodeIx;
ELSIF (udSerialNr[usNodeIx] = pudRFIDSerialReader3) AND (pudRFIDSerialReader3 > 0) THEN
usNodeIxReader3 := usNodeIx;
ELSIF (udSerialNr[usNodeIx] = pudRFIDSerialReader4) AND (pudRFIDSerialReader4 > 0) THEN
usNodeIxReader4 := usNodeIx;
END_IF
IF (usNodeIx >= FUB_UsbNodeListGet.allNodes) THEN
// Found All Devices
usNodeIx := 55;
enStep := enRFIDStep_IDLE;
END_IF
ELSIF (FUB_UsbDescriptorGet.status = asusbERR_USB_NOTFOUND) THEN
// USB Device NOT found
enStep := enRFIDStep_USB_GETNODELIST;
END_IF
END_CASE
CASE enStepReader1 OF
//Init
//---------------------------
enRFIDReaderStep_INIT:
IF (usNodeIxReader1 < 55) THEN
enStepReader1 := enRFIDReaderStep_USB_DVDEVOPEN;
END_IF;
//Open Reader Devicer
//---------------------------
enRFIDReaderStep_USB_DVDEVOPEN:
// initialize open structure */
FUB_FrameXOpen1.device :=ADR (usbDevice[usNodeIxReader1].ifName);
FUB_FrameXOpen1.mode := 0;
FUB_FrameXOpen1.config := 0;
FUB_FrameXOpen1.enable := (udNodeList[usNodeIxReader1] > 0);
IF (FUB_FrameXOpen1.status = frmERR_OK) THEN
FUB_FrameWrite1.ident := FUB_FrameXOpen1.ident;
FUB_FrameRead1.ident := FUB_FrameXOpen1.ident;
FUB_FrameReleaseBuffer1.ident := FUB_FrameXOpen1.ident;
FUB_FrameXOpen1.enable := 0;
enStepReader1 := enRFIDReaderStep_INIT_READER;
END_IF
//Get USB Nodelist
//---------------------------
enRFIDReaderStep_INIT_READER:
// Register Write:
// 5V operation, RF output active, full power; ISO 15693, low bit rate, 6.62 kbps, one subcarrier, 1 out OF 4
//
// 10 00 21 01 00
// | | | | |
// | | | | Value Register 0x01
// | | | ISO Control Register (0x01)
// | | Value Register 0x00
// | Chip Status Control Register (0x00)
// Register Write Cmd
// Set Protocol, 1 out OF 4, full power, low bit rate */
brsstrcpy (ADR (strWriteData[1]), ADR ('1000210100'));
brsstrcpy (ADR (strWriteDatalen[1]), ADR ('0C'));
uiReadAnswer[1] := 1;
enStepReader1 := enRFIDReaderStep_WRITE;
//IDLE
//---------------------------
enRFIDReaderStep_IDLE:
CASE enCmd1 OF
enRFIDCMD_NONE:
enRFIDCMD_READ_INVENTORY:
// Inventory
// 14 04 01 00
// | | | |
// | | | Mask Length
// | | Anticollision Cmd
// | Flags (Inventory flag = 1, HDR = 0)
// Inventory request
// inventory 16 slot
brsstrcpy (ADR (strWriteData[1]), ADR ('14040100'));
brsstrcpy (ADR (strWriteDatalen[1]), ADR ('0B'));
uiReadAnswer[1] := 16; // 16 slot answer
enStepReader1 := enRFIDReaderStep_WRITE;
enRFIDCMD_READ_SYSINFO:
// Read System Info
// 18 00 2B
// | | |
// | | Get System Info Cmd
// | Flags (Option = 0, HDR = 0)
// Request Cmd
brsstrcpy (ADR (strWriteData[1]), ADR ('18002B'));
brsstrcpy (ADR (strWriteDatalen[1]), ADR ('0A'));
uiReadAnswer[1] := 1;
enStepReader1 := enRFIDReaderStep_WRITE;
enRFIDCMD_READ_SBLOCK:
// Read Single Block
// 18 02 20
// | | |
// | | Read Single Block Cmd
// | Flags (Option = 1, HDR = 0)
// Request Cmd
//
// Option = 1: Return block security status
brsstrcpy (ADR (strWriteData[1]), ADR ('184020')); // read block #1
uiLength := brsitoa (usBlockNr, ADR (strTemp));
IF (uiLength = 1) THEN
brsstrcat (ADR (strWriteData[1]), ADR ('0'));
END_IF
brsstrcat (ADR (strWriteData[1]), ADR (strTemp));
brsstrcpy (ADR (strWriteDatalen[1]), ADR ('0B'));
uiReadAnswer[1] := 1;
enStepReader1 := enRFIDReaderStep_WRITE;
enRFIDCMD_WRITE_SBLOCK:
// Write Single Block
// 18 00 21
// | | |
// | | Write Single Block Cmd
// | Flags (Option = 0, HDR = 0)
// Request Cmd
brsstrcpy (ADR (strWriteData[1]), ADR ('180021')); // write block #1 (Data = 0x12345678)
uiLength := brsitoa (usBlockNr, ADR (strTemp));
IF (uiLength = 1) THEN
brsstrcat (ADR (strWriteData[1]), ADR ('0'));
END_IF
UDINTtoASC (ADR (strWriteData[1]) + 8, udWriteData);
brsstrcpy (ADR (strWriteDatalen[1]), ADR ('0F'));
uiReadAnswer[1] := 1;
enStepReader1 := enRFIDReaderStep_WRITE;
enRFIDCMD_WRITE_AFI:
// Write AFI
// 18 00 30
// | | |
// | | Get System Info Cmd
// | Flags (Option = 0, HDR = 0)
// Request Cmd
brsstrcpy (ADR (strWriteData[1]), ADR ('18002730')); // write AFI (0x30 = Identification)
brsstrcpy (ADR (strWriteDatalen[1]), ADR ('0B'));
uiReadAnswer[1] := 1;
enStepReader1 := enRFIDReaderStep_WRITE;
enRFIDCMD_WRITE_DFSID:
// Write DSFID
// 18 00 29
// | | |
// | | Write DSFID Cmd
// | Flags (Option = 0, HDR = 0)
// Request Cmd
brsstrcpy (ADR (strWriteData[1]), ADR ('18002918')); // write DSFID 0x18
brsstrcpy (ADR (strWriteDatalen[1]), ADR ('0B'));
uiReadAnswer[1] := 1;
enStepReader1 := enRFIDReaderStep_WRITE;
END_CASE
//WRITE
//---------------------------
enRFIDReaderStep_WRITE:
// initialize write structure */
//Frame Start
brsstrcpy (ADR (strWriteTelegram[1]), ADR ('01'));
//Length
brsstrcat (ADR (strWriteTelegram[1]), ADR (strWriteDatalen[1]));
//Const 00 + Start of Payload
brsstrcat (ADR (strWriteTelegram[1]), ADR ('000304'));
brsstrcat (ADR (strWriteTelegram[1]), ADR (strWriteData[1]));
//Frame End + \n $r$n
brsstrcat (ADR (strWriteTelegram[1]), ADR ('0000'));
FUB_FrameWrite1.buffer := ADR (strWriteTelegram[1]);
FUB_FrameWrite1.buflng := UDINT_TO_UINT (brsstrlen (ADR (strWriteTelegram[1])));
FUB_FrameWrite1.enable := 1;
IF (FUB_FrameWrite1.status = frmERR_OK) THEN
enStepReader1 := enRFIDReaderStep_READ;
FUB_FrameWrite1.enable := 0;
uiReadCount[1] := 0;
END_IF
//READ
//---------------------------
enRFIDReaderStep_READ:
// initialize read structure
FUB_FrameRead1.enable := 1;
pReadBuffer[1] := FUB_FrameRead1.buffer; // get adress OF read buffer */
uiReadBufferLength[1] := FUB_FrameRead1.buflng; // get length OF read buffer */
IF (FUB_FrameRead1.status = frmERR_NOINPUT) THEN
enStepReader1 := enRFIDReaderStep_WRITE; //Wiederholen
ELSIF (FUB_FrameRead1.status = frmERR_OK) THEN
udTemp := 0;
brsmemset (ADR (strReadData[1]), 0, SIZEOF (strReadData[1]));
brsmemcpy (ADR (strReadData[1]), pReadBuffer[1], uiReadBufferLength[1]); // copy read data into array */
IF (uiReadBufferLength[1] > 7) THEN
brsstrcpy (ADR (strReadTag[1]), ADR (strReadData[1])); // copy read data into Tag array */
END_IF
IF (uiReadBufferLength[1] = 16) THEN
udTemp := ASCtoUDINT (ADR (strReadData[1]) + 5, FALSE);
END_IF
IF (uiReadBufferLength[1] >= 23) THEN
//TagID Slot
udTemp := ASCtoUDINT (ADR (strReadData[1]) + 2, TRUE);
END_IF
// initialize release buffer structure */
FUB_FrameReleaseBuffer1.enable := 1;
FUB_FrameReleaseBuffer1.buffer := pReadBuffer[1];
FUB_FrameReleaseBuffer1.buflng := uiReadBufferLength[1];
FUB_FrameReleaseBuffer1 ();
uiReadCount[1] := uiReadCount[1] + 1;
IF udTemp > 0 THEN
gudRFIDReader1ID := udTemp;
udSave := udTemp;
END_IF
IF (uiReadCount[1] = uiReadAnswer[1]) THEN
FUB_FrameRead1.enable := 0;
enStepReader1 := enRFIDReaderStep_IDLE;
enCmd1 := enRFIDCMD_NONE;
END_IF
END_IF
END_CASE
CASE enStepReader2 OF
//Init
//---------------------------
enRFIDReaderStep_INIT:
IF (usNodeIxReader2 < 55) AND (NEEDED_DEVICES >= 2) THEN
enStepReader2 := enRFIDReaderStep_USB_DVDEVOPEN;
END_IF;
//Open Reader Devicer
//---------------------------
enRFIDReaderStep_USB_DVDEVOPEN:
// initialize open structure */
FUB_FrameXOpen2.device :=ADR (usbDevice[usNodeIxReader2].ifName);
FUB_FrameXOpen2.mode := 0;
FUB_FrameXOpen2.config := 0;
FUB_FrameXOpen2.enable := (udNodeList[usNodeIxReader2] > 0);
IF (FUB_FrameXOpen2.status = frmERR_OK) THEN
FUB_FrameWrite2.ident := FUB_FrameXOpen2.ident;
FUB_FrameRead2.ident := FUB_FrameXOpen2.ident;
FUB_FrameReleaseBuffer2.ident := FUB_FrameXOpen2.ident;
FUB_FrameXOpen2.enable := 0;
enStepReader2 := enRFIDReaderStep_INIT_READER;
END_IF
//Get USB Nodelist
//---------------------------
enRFIDReaderStep_INIT_READER:
// Register Write:
// 5V operation, RF output active, full power; ISO 15693, low bit rate, 6.62 kbps, one subcarrier, 1 out OF 4
//
// 10 00 21 01 00
// | | | | |
// | | | | Value Register 0x01
// | | | ISO Control Register (0x01)
// | | Value Register 0x00
// | Chip Status Control Register (0x00)
// Register Write Cmd
// Set Protocol, 1 out OF 4, full power, low bit rate */
brsstrcpy (ADR (strWriteData[2]), ADR ('1000210100'));
brsstrcpy (ADR (strWriteDatalen[2]), ADR ('0C'));
uiReadAnswer[2] := 1;
enStepReader2 := enRFIDReaderStep_WRITE;
//IDLE
//---------------------------
enRFIDReaderStep_IDLE:
CASE enCmd2 OF
enRFIDCMD_NONE:
enRFIDCMD_READ_INVENTORY:
// Inventory
// 14 04 01 00
// | | | |
// | | | Mask Length
// | | Anticollision Cmd
// | Flags (Inventory flag = 1, HDR = 0)
// Inventory request
// inventory 16 slot
brsstrcpy (ADR (strWriteData[2]), ADR ('14040100'));
brsstrcpy (ADR (strWriteDatalen[2]), ADR ('0B'));
uiReadAnswer[2] := 16; // 16 slot answer
enStepReader2 := enRFIDReaderStep_WRITE;
enRFIDCMD_READ_SYSINFO:
// Read System Info
// 18 00 2B
// | | |
// | | Get System Info Cmd
// | Flags (Option = 0, HDR = 0)
// Request Cmd
brsstrcpy (ADR (strWriteData[2]), ADR ('18002B'));
brsstrcpy (ADR (strWriteDatalen[2]), ADR ('0A'));
uiReadAnswer[2] := 1;
enStepReader2 := enRFIDReaderStep_WRITE;
enRFIDCMD_READ_SBLOCK:
// Read Single Block
// 18 02 20
// | | |
// | | Read Single Block Cmd
// | Flags (Option = 1, HDR = 0)
// Request Cmd
//
// Option = 1: Return block security status
brsstrcpy (ADR (strWriteData[2]), ADR ('184020')); // read block #1
uiLength := brsitoa (usBlockNr, ADR (strTemp));
IF (uiLength = 1) THEN
brsstrcat (ADR (strWriteData[2]), ADR ('0'));
END_IF
brsstrcat (ADR (strWriteData[2]), ADR (strTemp));
brsstrcpy (ADR (strWriteDatalen[2]), ADR ('0B'));
uiReadAnswer[2] := 1;
enStepReader2 := enRFIDReaderStep_WRITE;
enRFIDCMD_WRITE_SBLOCK:
// Write Single Block
// 18 00 21
// | | |
// | | Write Single Block Cmd
// | Flags (Option = 0, HDR = 0)
// Request Cmd
brsstrcpy (ADR (strWriteData[2]), ADR ('180021')); // write block #1 (Data = 0x12345678)
uiLength := brsitoa (usBlockNr, ADR (strTemp));
IF (uiLength = 1) THEN
brsstrcat (ADR (strWriteData[2]), ADR ('0'));
END_IF
UDINTtoASC (ADR (strWriteData[2]) + 8, udWriteData);
brsstrcpy (ADR (strWriteDatalen[2]), ADR ('0F'));
uiReadAnswer[2] := 1;
enStepReader2 := enRFIDReaderStep_WRITE;
enRFIDCMD_WRITE_AFI:
// Write AFI
// 18 00 30
// | | |
// | | Get System Info Cmd
// | Flags (Option = 0, HDR = 0)
// Request Cmd
brsstrcpy (ADR (strWriteData[2]), ADR ('18002730')); // write AFI (0x30 = Identification)
brsstrcpy (ADR (strWriteDatalen[2]), ADR ('0B'));
uiReadAnswer[2] := 1;
enStepReader2 := enRFIDReaderStep_WRITE;
enRFIDCMD_WRITE_DFSID:
// Write DSFID
// 18 00 29
// | | |
// | | Write DSFID Cmd
// | Flags (Option = 0, HDR = 0)
// Request Cmd
brsstrcpy (ADR (strWriteData[2]), ADR ('18002918')); // write DSFID 0x18
brsstrcpy (ADR (strWriteDatalen[2]), ADR ('0B'));
uiReadAnswer[2] := 1;
enStepReader2 := enRFIDReaderStep_WRITE;
END_CASE
//WRITE
//---------------------------
enRFIDReaderStep_WRITE:
// initialize write structure */
//Frame Start
brsstrcpy (ADR (strWriteTelegram[2]), ADR ('01'));
//Length
brsstrcat (ADR (strWriteTelegram[2]), ADR (strWriteDatalen[2]));
//Const 00 + Start of Payload
brsstrcat (ADR (strWriteTelegram[2]), ADR ('000304'));
brsstrcat (ADR (strWriteTelegram[2]), ADR (strWriteData[2]));
//Frame End
brsstrcat (ADR (strWriteTelegram[2]), ADR ('0000'));
FUB_FrameWrite2.buffer := ADR (strWriteTelegram[2]);
FUB_FrameWrite2.buflng := UDINT_TO_UINT (brsstrlen (ADR (strWriteTelegram[2])));
FUB_FrameWrite2.enable := 1;
IF (FUB_FrameWrite2.status = frmERR_OK) THEN
enStepReader2 := enRFIDReaderStep_READ;
FUB_FrameWrite2.enable := 0;
uiReadCount[2] := 0;
END_IF
//READ
//---------------------------
enRFIDReaderStep_READ:
// initialize read structure
FUB_FrameRead2.enable := 1;
pReadBuffer[2] := FUB_FrameRead2.buffer; // get adress OF read buffer */
uiReadBufferLength[2] := FUB_FrameRead2.buflng; // get length OF read buffer */
IF (FUB_FrameRead2.status = frmERR_OK) THEN
udTemp := 0;
brsmemset (ADR (strReadData[2]), 0, SIZEOF (strReadData[2]));
brsmemcpy (ADR (strReadData[2]), pReadBuffer[2], uiReadBufferLength[2]); // copy read data into array */
IF (uiReadBufferLength[2] > 7) THEN
brsstrcpy (ADR (strReadTag[2]), ADR (strReadData[2])); // copy read data into Tag array */
END_IF
IF (uiReadBufferLength[2] = 16) THEN
udTemp := ASCtoUDINT (ADR (strReadData[2]) + 5, FALSE);
END_IF
IF (uiReadBufferLength[2] >= 23) THEN
//TagID Slot
udTemp := ASCtoUDINT (ADR (strReadData[2]) + 2, TRUE);
END_IF
// initialize release buffer structure */
FUB_FrameReleaseBuffer2.enable := 1;
FUB_FrameReleaseBuffer2.buffer := pReadBuffer[2];
FUB_FrameReleaseBuffer2.buflng := uiReadBufferLength[2];
FUB_FrameReleaseBuffer2 ();
uiReadCount[2] := uiReadCount[2] + 1;
IF udTemp > 0 THEN
gudRFIDReader2ID := udTemp;
END_IF
IF (uiReadCount[2] = uiReadAnswer[2]) THEN
FUB_FrameRead2.enable := 0;
enStepReader2 := enRFIDReaderStep_IDLE;
enCmd2 := enRFIDCMD_NONE;
END_IF
END_IF
END_CASE
TON_Read1.IN := (enStepReader1 = enRFIDReaderStep_IDLE) AND (enCmd1 = enRFIDCMD_NONE) AND (NEEDED_DEVICES >= 1);
TON_Read1.PT := t#1s;
TON_Read1 ();
IF TON_Read1.Q THEN
enCmd1 := enRFIDCMD_READ_INVENTORY;
END_IF
TON_Read2.IN := (enStepReader2 = enRFIDReaderStep_IDLE) AND (enCmd2 = enRFIDCMD_NONE) AND (NEEDED_DEVICES >= 2);
TON_Read2.PT := t#1s;
TON_Read2 ();
IF TON_Read2.Q THEN
enCmd2 := enRFIDCMD_READ_INVENTORY;
END_IF
TON_Read3.IN := (enStepReader3 = enRFIDReaderStep_IDLE) AND (enCmd3 = enRFIDCMD_NONE AND (NEEDED_DEVICES >= 3));
TON_Read3.PT := t#1s;
TON_Read3 ();
IF TON_Read3.Q THEN
enCmd3 := enRFIDCMD_READ_INVENTORY;
END_IF
TON_Read4.IN := (enStepReader4 = enRFIDReaderStep_IDLE) AND (enCmd4 = enRFIDCMD_NONE AND (NEEDED_DEVICES >= 4));
TON_Read4.PT := t#1s;
TON_Read4 ();
IF TON_Read4.Q THEN
enCmd4 := enRFIDCMD_READ_INVENTORY;
END_IF
//Call FUBs
FUB_FrameRead1 ();
FUB_FrameRead2 ();
FUB_FrameRead3 ();
FUB_FrameRead4 ();
FUB_FrameWrite1 ();
FUB_FrameWrite2 ();
FUB_FrameWrite3 ();
FUB_FrameWrite4 ();
FUB_FrameXOpen1 ();
FUB_FrameXOpen2 ();
FUB_FrameXOpen3 ();
FUB_FrameXOpen4 ();
FUB_UsbNodeGet ();
FUB_UsbNodeListGet ();
FUB_UsbDescriptorGet ();
END_PROGRAM
PROGRAM _EXIT
(* TODO : Add your code here *)
END_PROGRAM

View File

@@ -0,0 +1,30 @@
TYPE
typ_enStepRFID :
( (*Schritte RFID Leser*)
enRFIDStep_INIT, (*Init -> Search Reader*)
enRFIDStep_USB_GETNODELIST, (*Get USB Devices*)
enRFIDStep_USB_SEARCHDEVICE, (*Search Reader in Devices*)
enRFIDStep_USB_READDEVDESCR, (*Get Device Descriptor*)
enRFIDStep_IDLE
);
typ_enCmdRFID :
(
enRFIDCMD_NONE,
enRFIDCMD_READ_INVENTORY,
enRFIDCMD_READ_SYSINFO,
enRFIDCMD_READ_SBLOCK,
enRFIDCMD_WRITE_SBLOCK,
enRFIDCMD_WRITE_AFI,
enRFIDCMD_WRITE_DFSID
);
typ_enStepRFIDReader :
( (*Schritte RFID Leser*)
enRFIDReaderStep_INIT, (*Init -> Search Reader*)
enRFIDReaderStep_USB_DVDEVOPEN, (*Open Reader*)
enRFIDReaderStep_INIT_READER, (*Initialize Reader*)
enRFIDReaderStep_IDLE, (*Wait for commands*)
enRFIDReaderStep_READ, (*READ from Reader*)
enRFIDReaderStep_WRITE (*WRITE to Reader*)
);
END_TYPE

View File

@@ -0,0 +1,71 @@
VAR
sizeUsbNode : USINT;
END_VAR
VAR RETAIN
usNodeIx : USINT;
END_VAR
VAR
usFoundReaders : USINT;
usNodeIxReader1 : USINT; (*Node Index Reader 1*)
usNodeIxReader2 : USINT; (*Node Index Reader 2*)
usNodeIxReader3 : USINT; (*Node Index Reader 3*)
usNodeIxReader4 : USINT; (*Node Index Reader 4*)
usBlockNr : USINT;
udSerialNr : ARRAY[0..31] OF UDINT;
uiReadAnswer : ARRAY[1..4] OF UINT;
uiReadBufferLength : ARRAY[1..4] OF UINT;
uiReadCount : ARRAY[1..4] OF UINT;
uiLength : UINT;
udAttachDetachCount : UDINT;
udNodeList : ARRAY[0..31] OF UDINT;
pReadBuffer : ARRAY[1..4] OF UDINT;
udTemp : UDINT;
udSave : UDINT;
udWriteData : UDINT;
strReadData : ARRAY[1..4] OF STRING[80];
strReadTag : ARRAY[1..4] OF STRING[80];
strDeviceDescr : ARRAY[1..4] OF WSTRING[80];
strWriteData : ARRAY[1..4] OF STRING[80];
strWriteDatalen : ARRAY[1..4] OF STRING[2];
strWriteTelegram : ARRAY[1..4] OF STRING[80];
strTemp : STRING[2];
enStep : typ_enStepRFID;
enStepReader1 : typ_enStepRFIDReader;
enStepReader2 : typ_enStepRFIDReader;
enStepReader3 : typ_enStepRFIDReader;
enStepReader4 : typ_enStepRFIDReader;
enCmd1 : typ_enCmdRFID;
enCmd2 : typ_enCmdRFID;
enCmd3 : typ_enCmdRFID;
enCmd4 : typ_enCmdRFID;
usbDevice : ARRAY[0..31] OF usbNode_typ;
FUB_FrameRead1 : FRM_read;
FUB_FrameRead2 : FRM_read;
FUB_FrameRead3 : FRM_read;
FUB_FrameRead4 : FRM_read;
FUB_FrameReleaseBuffer1 : FRM_rbuf;
FUB_FrameReleaseBuffer2 : FRM_rbuf;
FUB_FrameReleaseBuffer3 : FRM_rbuf;
FUB_FrameReleaseBuffer4 : FRM_rbuf;
FUB_FrameWrite1 : FRM_write;
FUB_FrameWrite2 : FRM_write;
FUB_FrameWrite3 : FRM_write;
FUB_FrameWrite4 : FRM_write;
FUB_FrameXOpen1 : FRM_xopen;
FUB_FrameXOpen2 : FRM_xopen;
FUB_FrameXOpen3 : FRM_xopen;
FUB_FrameXOpen4 : FRM_xopen;
FUB_UsbNodeGet : UsbNodeGet;
FUB_UsbNodeListGet : UsbNodeListGet;
FUB_UsbDescriptorGet : UsbDescriptorGet;
TON_Read1 : TON;
TON_Read2 : TON;
TON_Read3 : TON;
TON_Read4 : TON;
END_VAR
VAR CONSTANT
TRANSPONDER_FTDI_VENDOR_ID : UINT := 16#0403;
TRANSPONDER_FTDI_PRODUCT_ID : UINT := 16#6001;
TRANSPONDER_FTDI_BCD : UINT := 16#0600;
NEEDED_DEVICES : USINT := 1; (*4 RFID Leserverbaut*)
END_VAR

View File

@@ -0,0 +1,44 @@
FUNCTION UDINTtoASC
UDINTtoASC := udNextAdr + 8;
udNextAdr := udInNextAdr;
udValue := udInValue;
FOR usi:=7 TO 0 BY -1 DO
usChar := UDINT_TO_USINT (udValue MOD 16);
usChar := UDINT_TO_USINT (udValue / 16);
brsmemcpy (ADR (usChar), udNextAdr + usi, 1);
CASE usChar OF
0:
brsmemcpy (udNextAdr + usi, ADR ('0'), 1);
1:
brsmemcpy (udNextAdr + usi, ADR ('1'), 1);
2:
brsmemcpy (udNextAdr + usi, ADR ('2'), 1);
3:
brsmemcpy (udNextAdr + usi, ADR ('3'), 1);
4:
brsmemcpy (udNextAdr + usi, ADR ('4'), 1);
5:
brsmemcpy (udNextAdr + usi, ADR ('5'), 1);
6:
brsmemcpy (udNextAdr + usi, ADR ('6'), 1);
7:
brsmemcpy (udNextAdr + usi, ADR ('7'), 1);
8:
brsmemcpy (udNextAdr + usi, ADR ('8'), 1);
9:
brsmemcpy (udNextAdr + usi, ADR ('9'), 1);
10:
brsmemcpy (udNextAdr + usi, ADR ('A'), 1);
11:
brsmemcpy (udNextAdr + usi, ADR ('B'), 1);
12:
brsmemcpy (udNextAdr + usi, ADR ('C'), 1);
13:
brsmemcpy (udNextAdr + usi, ADR ('D'), 1);
14:
brsmemcpy (udNextAdr + usi, ADR ('E'), 1);
15:
brsmemcpy (udNextAdr + usi, ADR ('F'), 1);
END_CASE
END_FOR
END_FUNCTION

View File

@@ -0,0 +1,79 @@
TYPE
ACPinverter_typ : STRUCT (*Acopos Inverter*)
bModuleOK : BOOL;
In : ACPinverterIn_typ;
Out : ACPinverterOut_typ;
END_STRUCT;
ACPinverterIn_typ : STRUCT (*Acopos Inverter Inputs*)
bStat00_ReadytoSwitchOn : BOOL;
bStat01_SwitchedOnReady : BOOL;
bstat02_Enabled : BOOL;
bStat03_FaultDetecton : BOOL;
bStat04_VoltageDisabled : BOOL;
bStat05_QuickstopINV : BOOL;
bStat06_SwitchedOnDisabled : BOOL;
bStat07_Alarm : BOOL;
bStat09_ReferenceViaNetwork : BOOL;
bStat10_TargetReferenceReached : BOOL;
bStat11_InternalLimitActive : BOOL;
bStat14_StopViaKey : BOOL;
bStat15_RotationDirection : BOOL;
bExtStat00_EEPROM_NonVolatile : BOOL;
bExtStat01_ParameterConsCheck : BOOL;
bExtStat02_DriveInFault : BOOL;
bExtStat04_SpeedModeActive : BOOL;
bExtStat05_DCInjection : BOOL;
bExtStat06_TransientState : BOOL;
bExtStat07_ThermalTreshold : BOOL;
bExtStat08_Overbraking : BOOL;
bExtStat09_Accelerating : BOOL;
bExtStat10_Decellerating : BOOL;
bExtStat11_I_Limited : BOOL;
bExtStat12_FastStopping : BOOL;
bExtStat13_ExtControlled0 : BOOL;
bExtStat14_ExtCondrolled1 : BOOL;
bExtStat15_OperationDir : BOOL;
iRFRD_Velocity : INT;
iOTR_Torque : INT;
uiLCR_Current : UINT;
uiTHD_ThermalStateDrive : UINT;
uiTHR_ThermalStatMotor : UINT;
bInputLI1 : BOOL;
bInputLI2 : BOOL;
bInputLI3 : BOOL;
bInputLI4 : BOOL;
bRelay2State : BOOL;
uiErrorCode : UINT;
iLastFault : INT;
END_STRUCT;
ACPinverterOut_typ : STRUCT (*Acopos Inverter Outputs*)
bCmd00_SwitchOn : BOOL;
bCmd01_DisableVoltage : BOOL;
bCmd02_QuickStop : BOOL;
bCmd03_EnableOperation : BOOL;
bCmd07_ResetFault : BOOL;
bCmd11_Direction : BOOL;
bCmd12_StopCommand : BOOL;
bCmd13 : BOOL;
bCmd14 : BOOL;
bCmd15 : BOOL;
bCmi00_FactorySettings : BOOL;
bCmi01_SaveToEEPROM : BOOL;
bCmi03_ExternalFault : BOOL;
bCmi04_RampSwitching : BOOL;
bCmi09_FrequencyReference : BOOL;
bCmi13_LockOnStandstill : BOOL;
bCmi15_CheckParameterConsitency : BOOL;
iLFR_Setpointspeed : INT;
bOR_Relay2 : BOOL;
END_STRUCT;
PushButton_typ : STRUCT (*Leuchtringtaster*)
bInKeyStatus : BOOL; (*Taster - Status*)
bOuGreen : BOOL; (*Leuchtring Gr<47>n*)
bOuYellow : BOOL; (*Leuchtring Gelb*)
bOuRed : BOOL; (*Leuchtring Rot*)
bOuWhite : BOOL; (*Leuchtring Wei<65>*)
bOuBlue : BOOL; (*Leuchtring Blau (Optional)*)
END_STRUCT;
END_TYPE

View File

@@ -0,0 +1,198 @@
(*================================================================================================================*)
(*CPU (PWLnk Node 240)*)
(*----------------------------------------------------------------------------------------------------------------*)
VAR
udSerialNr : UDINT; (*Seriennummer*)
guiTemperatureCPU : UINT; (*CPU Temperatur*)
guiTemperatureENV : UINT; (*Umgebungstemperatur*)
gdiSystemTime : DINT; (*Systemzeit [<5B>s]*)
END_VAR
(*----------------------------------------------------------------------------------------------------------------*)
(*IF1.ST20 - X67DI1371*)
(*----------------------------------------------------------------------------------------------------------------*)
VAR
gbST20ModuleOk : BOOL;
gPB1 : PushButton_typ; (*Leuchtringtaster 1*)
gPB2 : PushButton_typ; (*Leuchtringtaster 2*)
gPB3 : PushButton_typ; (*Leuchtringtaster 3*)
gPB4 : PushButton_typ; (*Leuchtringtaster 4*)
gPB5 : PushButton_typ; (*Leuchtringtaster 5*)
END_VAR
(*----------------------------------------------------------------------------------------------------------------*)
(*IF1.ST3 - SLX811*)
(*----------------------------------------------------------------------------------------------------------------*)
VAR
gbSLXModuleOk : BOOL;
END_VAR
(*----------------------------------------------------------------------------------------------------------------*)
(*Signals to Safe PLC*)
(*----------------------------------------------------------------------------------------------------------------*)
VAR
gbSPLCResetEStop : BOOL; (*Reset Not-Halt*)
gbSPLCResetDoors : BOOL; (*Reset T<>ren*)
gbSPLCReadbackEstop : BOOL; (*R<>ckf<6B>hrkreis*)
END_VAR
(*R<>cklesesignale direkt von Eingang gemappt*)
(*----------------------------------------------------------------------------------------------------------------*)
(*Signals from Safe PLC*)
(*----------------------------------------------------------------------------------------------------------------*)
VAR
gbSPLCInEstopOk : BOOL; (*Safety PLC E-Stop ist Ok*)
gbSPLCInDoorsOk : BOOL; (*Safety PLC T<>rkreis it Ok*)
gbSPLCInErrorReadBackEStop : BOOL; (*Safety PlC Fehler R<>ckf<6B>hrkreis Netzsch<63>tze (PV Mapping von DI)*)
guiSPLCInESTOPDiag : UINT; (*DiagnoseCode E-Stop*)
END_VAR
(*----------------------------------------------------------------------------------------------------------------*)
(*I/O from SLX*)
(*----------------------------------------------------------------------------------------------------------------*)
VAR
gbSInMaintDoor1Ok : BOOL; (*Sicherer Eingang 01/02 Equivalent - Schutztuer 1 Ok*)
gbSInMaintDoor2Ok : BOOL; (*Sicherer Eingang 03/04 Equivalent - Schutztuer 2 Ok*)
gbSInMaintDoor3Ok : BOOL; (*Sicherer Eingang 05/06 Equivalent - Schutztuer 3 Ok*)
gbSInMaintDoor4Ok : BOOL; (*Sicherer Eingang 07/08 Equivalent - Schutztuer 4 Ok*)
gusST3FBK_2ChStatus12 : USINT; (*Status 2-kanal*)
gusST3FBK_2ChStatus34 : USINT; (*Status 2-kanal*)
gusST3FBK_2ChStatus56 : USINT; (*Status 2-kanal*)
gusST3FBK_2ChStatus78 : USINT; (*Status 2-kanal*)
END_VAR
(*----------------------------------------------------------------------------------------------------------------*)
(*IF1.ST4 - SC2212*)
(*----------------------------------------------------------------------------------------------------------------*)
VAR
gbSInMaintDoor5Ok : BOOL; (*Sicherer Eingang 01/02 Equivalent - Schutztuer 5 Ok*)
gbSInEStopRobotOk : BOOL; (*Sicherer Eingang 03/04 Equivalent - Nothalt von Roboter Ok*)
gbSInEStop1Ok : BOOL; (*Sicherer Eingang 05/06 Equivalent - Nothalt Bedientableau Ok*)
gbSOuMainValveAir : BOOL; (*Sicherer Ausgang 01 - Freigabe Luft*)
gusST4FBK_2ChStatus12 : USINT; (*Status 2-kanal*)
gusST4FBK_2ChStatus34 : USINT; (*Status 2-kanal*)
gusST4FBK_2ChStatus56 : USINT; (*Status 2-kanal*)
guiST4FBK_StatusRestInhibit : UINT; (*Status Wiederanlaufsperre*)
END_VAR
(*----------------------------------------------------------------------------------------------------------------*)
(*IF1.ST5 - SO6300*)
(*----------------------------------------------------------------------------------------------------------------*)
VAR
gbSOuEnable8T1 : BOOL; (*Sicherer Ausgang 01 - Freigabe KEB Umrichter*)
gbSOuEnable10T1 : BOOL; (*Sicherer Ausgang 02 - Freigabe Acopos Umrichter*)
gbSOuMains8T10_10T1 : BOOL; (*Sicherer Ausgang 03 - Netzsch<63>tz KEB/Acopos Umrichter*)
gbSOuMainsBunker : BOOL; (*Sicherer Ausgang 04 - Netzsch<63>tz Bunkerband*)
gudST5FBK_StatusRestInhibit : UDINT; (*Status Wiederanlaufsperre*)
END_VAR
(*----------------------------------------------------------------------------------------------------------------*)
(*IF1.ST5 - SO6530*)
(*----------------------------------------------------------------------------------------------------------------*)
VAR
gbSOuRobotEStop : BOOL; (*Sicherer Ausgang 01/02 Nothalt 2-kanalig an Roboter (General Stop / EStop)*)
gbSOuRobotAStop : BOOL; (*Sicherer Ausgang 03/04 Auto-Stop 2-kanalig an Roboter*)
gbSOuSafetyOk : BOOL; (*Sicherer Ausgang 05/06 Sicherheit Ok*)
END_VAR
(*IF1.ST5 - DI9371 (Eing<6E>nge Allgemein)*)
(*----------------------------------------------------------------------------------------------------------------*)
(*//1Spare*)
(*----------------------------------------------------------------------------------------------------------------*)
(*IF1.ST6 - DI9371 (Eing<6E>nge Allgemein)*)
(*----------------------------------------------------------------------------------------------------------------*)
(*----------------------------------------------------------------------------------------------------------------*)
(*IF1.ST7 - DI9371 (Eing<6E>nge*)
(*----------------------------------------------------------------------------------------------------------------*)
VAR
gbInDropOutFuseP2 : BOOL; (*Sicherungsfall 24V P2*)
gbInDropOutFuseFeeder : BOOL; (*Sicherungsfall 24V Anyfeeder*)
gbIn9M1FanOn : BOOL; (*Spindel - L<>fter l<>uft*)
gbIn9M1Standstill : BOOL; (*Spindel - Stillstand*)
END_VAR
(*//1Spare*)
(*//1Spare*)
(*//1Spare*)
VAR
gbIn9M1LPistonHome : BOOL; (*Spindel - Kolben Grundstellung*)
gbIn8T1Ready : BOOL; (*Spindel FU Bereit*)
gbIn8T1Setpoint : BOOL; (*Spindel FU Istwert*)
gbIn8T1Error : BOOL; (*Spindel FU Fehler*)
gbIn4G1Error : BOOL; (*Klimager<65>t Fehler*)
END_VAR
(*----------------------------------------------------------------------------------------------------------------*)
(*IF1.ST8 - DI9371 (Eing<6E>nge)*)
(*----------------------------------------------------------------------------------------------------------------*)
VAR
gbInMaintDoor1Error : BOOL; (*Wartungst<73>r 1 Diagnose - Fehler*)
gbInMaintDoor1Closed : BOOL; (*Wartungst<73>r 1 Geschlossen - nicht verriegelt*)
gbInMaintDoor2Error : BOOL; (*Wartungst<73>r 2 Diagnose - Fehler*)
gbInMaintDoor2Closed : BOOL; (*Wartungst<73>r 1 Geschlossen - nicht verriegelt*)
gbInMaintDoor3Error : BOOL; (*Wartungst<73>r 3 Diagnose - Fehler*)
gbInMaintDoor3Closed : BOOL; (*Wartungst<73>r 3 Geschlossen - nicht verriegelt*)
gbInMaintDoor4Error : BOOL; (*Wartungst<73>r 4 Diagnose - Fehler*)
gbInMaintDoor4Closed : BOOL; (*Wartungst<73>r 4 Geschlossen - nicht verriegelt*)
gbInMaintDoor5Error : BOOL; (*Wartungst<73>r 5 Diagnose - Fehler*)
gbInMaintDoor5Closed : BOOL; (*Wartungst<73>r 5 Geschlossen - nicht verriegelt*)
gbInMainAirOk : BOOL; (*Haupluft Druck Ok*)
gbInFdBackMainsInverters : BOOL; (*R<>ckf<6B>hrkreis Netzsch<63>tze Umrichter // PV Mapping auf PLC*)
END_VAR
(*----------------------------------------------------------------------------------------------------------------*)
(*IF1.ST9 - DI9371 (Eing<6E>nge)*)
(*----------------------------------------------------------------------------------------------------------------*)
(*1 St<53>rung 8R1 obsolete*)
(*4/5 Signale von Feeder ????*)
VAR
gbInPartReleased : BOOL; (*Bauteilspanner Offen*)
gbInPartLocked : BOOL; (*Bauteilspanner Verriegelt*)
gbInCamInspectionFinished : BOOL; (*Kamera Ausgang 0 Kamerainspektion beendet*)
gbInCamInspectionResultOk : BOOL; (*Kamera Ausgang 1 Ergebnis iO*)
gbInCamInspectionResultNOk : BOOL; (*Kamera Ausgang 2 Ergebnis NiO*)
END_VAR
(*8-10 Reserve*)
VAR
gbInKeyLockTool : BOOL; (*Werkzeug spannen*)
gbInKeyUnlockTool : BOOL; (*Werkzeug l<>sen*)
END_VAR
(*----------------------------------------------------------------------------------------------------------------*)
(*IF1.ST10 - X20DO9322*)
(*----------------------------------------------------------------------------------------------------------------*)
(*//5 Ausg<73>nge an KEB reserviert Ausgang 2 Wird in KEB Task verwendet*)
VAR
gbOuEnalbeBunker : BOOL; (*Freigabe Bunkerband*)
gbOuMaintDoor1Lock : BOOL; (*Wartungst<73>r 1 Verriegeln*)
gbOuMaintDoor2Lock : BOOL; (*Wartungst<73>r 2 Verriegeln*)
gbOuMaintDoor3Lock : BOOL; (*Wartungst<73>r 3 Verriegeln*)
gbOuMaintDoor4Lock : BOOL; (*Wartungst<73>r 4 Verriegeln*)
gbOuMaintDoor5Lock : BOOL; (*Wartungst<73>r 5 Verriegeln*)
END_VAR
(*----------------------------------------------------------------------------------------------------------------*)
(*IF1.ST11 - X20DO9322*)
(*----------------------------------------------------------------------------------------------------------------*)
VAR
gbOuLightOn : BOOL; (*Anlagenbeleuchtung*)
gbOuAnyFeederPicksignal : BOOL; (*Picksignal an Anyfeeder*)
gbOuSpindleCoolFan : BOOL; (*L<>fter Spindel*)
gbOuSpindleCleanAir : BOOL; (*Konusreinigung Spindel*)
gbOuTriggerMeasCam : BOOL; (*Trigger Kamera Messen*)
gbOuUnlockTool : BOOL; (*Spindel - Werkzeugwechsler l<>sen*)
END_VAR
(*//1Spare*)
VAR
gbOuPartRelease : BOOL; (*Bauteil freigeben*)
gbOuPartHold : BOOL; (*Bauteil spannen*)
gbOuBlowAir : BOOL; (*Abblasen*)
gbOuLampToolLocked : BOOL; (*Leuchtmelder Werkzeug gespannt*)
gbOuLampToolUnlocked : BOOL; (*Leuchtmelder Werkzeug gel<65>st*)
END_VAR
(*----------------------------------------------------------------------------------------------------------------*)
(*IF1.ST12 - X20DS438A*)
(*----------------------------------------------------------------------------------------------------------------*)
(*----------------------------------------------------------------------------------------------------------------*)
(*IF1.ST13 - X20SI2100*)
(*----------------------------------------------------------------------------------------------------------------*)
VAR
gbSInBunkerMounted : BOOL; (*Sicherer Eingang 01/02 Equivalent - Bunkerband Montiert*)
END_VAR
(*----------------------------------------------------------------------------------------------------------------*)
(*IF1.ST4 - Powerlinnk X67BC8321-1*)
(*----------------------------------------------------------------------------------------------------------------*)
VAR
gbInToolCode0 : BOOL; (*Werkzeugerkennung Bit 0*)
gbInToolCode1 : BOOL; (*Werkzeugerkennung Bit 1*)
gbInToolCode2 : BOOL; (*Werkzeugerkennung Bit 2*)
gbInToolCode3 : BOOL; (*Werkzeugerkennung Bit 3*)
gbInToolCode4 : BOOL; (*Werkzeugerkennung Bit 4*)
END_VAR
(*----------------------------------------------------------------------------------------------------------------*)

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.2.3.159?>
<Package xmlns="http://br-automation.co.at/AS/Package">
<Objects>
<Object Type="File">Global.typ</Object>
<Object Type="File" Description="Global variables / IOs">Global.var</Object>
</Objects>
</Package>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.4.8.122 SP?>
<Library Version="5.09.2" Description="PLCopen Motion Control function blocks" xmlns="http://br-automation.co.at/AS/Library">
<Files>
<File>acp10_mc.fun</File>
<File>acp10_mc.typ</File>
<File>acp10_mc.var</File>
</Files>
<Dependencies>
<Dependency ObjectName="Sys_lib" FromVersion="0.00.0" />
<Dependency ObjectName="Brsystem" FromVersion="0.00.0" />
<Dependency ObjectName="Acp10man" FromVersion="5.09.2" ToVersion="5.09.2" />
</Dependencies>
</Library>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,286 @@
VAR CONSTANT
mc5TH_ORDER_POLYNOMIAL : UINT := 4; (*motion rule*)
mcABOVE_WINDOW : USINT := 40; (*trigger event mode*)
mcABS : USINT := 1; (*encoder type*)
mcABSOLUTE : USINT := 0; (*start mode*)
mcABSOLUTE_NO_RESET : USINT := 2; (*definition for the shift input of MC_BR_Offset and MC_BR_Phasing*)
mcACKNOWLEDGE_ALL : UINT := 2; (*acknowledge all error records immediately*)
mcACT_CFG : UINT := 1;
mcACTUAL_POSITION : UINT := 1; (*position source for MPDC*)
mcACTUAL_VELOCITY : INT := 10; (*PLCopen motion parameter*)
mcADD_DATE_TIME : UINT := 1; (*additional data object type*)
mcALL_AXES : UDINT := 16#FFFFFFFF;
mcALL_EVENTS : USINT := 255; (*event index*)
mcALL_PARAMS : USINT := 0; (*parameter index*)
mcALL_STATES : USINT := 255; (*state index*)
mcAUT_POS_TOLERANCE : INT := 1009; (*PLCopen motion parameter*)
mcAUTOMAT_POS : USINT := 100; (*additional movement direction*)
mcAVERAGE : UINT := 2;
mcAVERAGE_WEIGHTED : UINT := 4;
mcAXIS_ERROR : USINT := 0;
mcAXIS_FACTOR : INT := 1007; (*PLCopen motion parameter*)
mcAXIS_FACTOR_MAPPING : INT := 1019; (*PLCopen motion parameter*)
mcAXIS_NETWORK_CYCLE_TIME: INT := 1018; (*PLCopen motion parameter*)
mcAXIS_PERIOD : INT := 1008; (*PLCopen motion parameter*)
mcAXIS_PERIOD_MAPPING : INT := 1020; (*PLCopen motion parameter*)
mcAXIS_WARNING : USINT := 1;
mcBASIS_PARAMETERS : REAL := 2.0; (*Option for DefaultMoveParameter*)
mcBELOW_WINDOW : USINT := 50; (*trigger event mode*)
mcBESTFIT_5TH_ORDER : UINT := 1024; (*interpolation rule*)
mcBESTFIT_6TH_ORDER : UINT := 1280; (*interpolation rule*)
mcBLANK : UINT := 0;
mcBRAKE_CONTROL_INIT : USINT := 8; (*brake command*)
mcBRAKE_TEST_INIT : USINT := 2; (*brake command*)
mcBRAKE_TEST_START : USINT := 4; (*brake command*)
mcCALCULATION : UINT := 11; (*setup mode*)
mcCATCH_UP : USINT := 4; (*synchronization mode*)
mcCHECK : UINT := 1; (*mode for automat compensation check*)
mcCHECK_HOMING_OFF : USINT := 1; (*disable homing check*)
mcCLOSE : USINT := 0;
mcCMD_ERROR : UINT := 1; (*error command*)
mcCMD_ERROR_COAST_TO_STANDSTILL : UINT := 5; (*error command*)
mcCMD_ERROR_INDUCTION_HALT : UINT := 6; (*error command*)
mcCMD_ERROR_STOP : UINT := 2; (*error command*)
mcCMD_ERROR_STOP_CTRL_OFF : UINT := 3; (*error command*)
mcCMD_ERROR_V_STOP_CTRL_OFF : UINT := 4; (*error command*)
mcCMD_WARNING : UINT := 0; (*error command *)
mcCOMMANDED_POSITION : INT := 1; (*PLCopen motion parameter*)
mcCOMMANDED_VELOCITY : INT := 11; (*PLCopen motion parameter*)
mcCONTINUE_CONTROLLER_OFF : UINT := 128; (* continue if controller is off *)
mcCORRECT_CURRENT_CYCLE : UINT := 32768; (*additive StartMode for MC_BR_CrossCutterControl*)
mcCUBIC_SPLINE : UINT := 256; (*interpolation rule*)
mcCURRENT_DIR : USINT := 2; (*movement direction*)
mcCYCLIC : UINT := 2; (*event move mode*)
mcCYCLIC_ALL_EVENTS : UINT := 3; (*event move mode*)
mcDATOBJ : UINT := 0; (*data object type*)
mcDEFAULT_MOVE_PARAMETERS : INT := 1012; (*PLCopen motion parameter*)
mcDIRECT : USINT := 7; (*start mode*)
mcDIR_DEPENDENT : UINT := 1; (*mode for MPDC*)
mcDIR_DEPENDENT_BACKLASH : UINT := 2; (*mode for MPDC*)
mcDIR_DEPENDENT_SET_POSITION : UINT := 5; (*mode for MPDC*)
mcDIR_INDEPENDENT : UINT := 3; (*mode for MPDC*)
mcDIR_INDEPENDENT_SPEED : UINT := 4; (*mode for MPDC*)
mcDIR_DEPENDENT_AX_POS : UINT := 257; (*mode for MPDC*)
mcDIR_DEPENDENT_BACKLASH_AX_POS : UINT := 258; (*mode for MPDC*)
mcDIR_DEPENDENT_SET_POS_AX_POS : UINT := 261; (*mode for MPDC*)
mcDIR_INDEPENDENT_AX_POS : UINT := 259; (*mode for MPDC*)
mcDIR_INDEPENDENT_SPEED_AX_POS : UINT := 260; (*mode for MPDC*)
mcDISTANCE_BASED : UINT := 0; (*basis for cam movement (e.g. for MC_BR_CamTransition)*)
mcDITHER : USINT := 32; (*setup mode*)
mcEDGE_SENSITIVE : USINT := 4; (*additional mode for trigger event*)
mcENABLE : UINT := 2;
mcENABLE_LIMIT_NEG : INT := 5; (*PLCopen motion parameter*)
mcENABLE_LIMIT_POS : INT := 4; (*PLCopen motion parameter*)
mcENABLE_POS_LAG_MONITORING : INT := 6; (*PLCopen motion parameter*)
mcENCODER : USINT := 0; (*setup mode*)
mcENCODER_POSITION : UINT := 2; (*position source for MPDC*)
mcEQUAL : UINT := 2;
mcEVERY_RECORD : UINT := 1; (*mode for MC_BR_CyclicRead*)
mcEXCEED_PERIOD : USINT := 8; (*movement direction*)
mcFB_ERROR : USINT := 2;
mcFB_INPUTS : REAL := 255.0; (*option for DefaultMoveParameters*)
mcFF : USINT := 32; (*setup, torque mode*)
mcFF_NEG_MOVE : UINT := 34; (*setup mode*)
mcFF_POS_MOVE : UINT := 33; (*setup mode*)
mcFILE : UINT := 1; (*data object type*)
mcFILE_BIN : UINT := 0; (*binary format*)
mcFILE_CSV : UINT := 1; (*CSV format*)
mcFILE_TXT : UINT := 2; (*text format*)
mcFINISH : UINT := 282;
mcFIRST_RM : UINT := 0;
mcFIRST_TRIGGER : UINT := 2;
mcFLUX : USINT := 1; (*setup mode*)
mcGE : UINT := 6;
mcGET_BRAKE_STATUS : USINT := 16; (*brake command*)
mcGREATER : UINT := 4;
mcHARMONIC_COMBINATION : UINT := 8; (*motion rule*)
mcHOLDOFF_DISTANCE : UINT := 16384;
mcHOME_ABS_SWITCH : USINT := 2; (*homing mode*)
mcHOME_ABSOLUTE : USINT := 4; (*homing mode*)
mcHOME_ABSOLUTE_CORR : USINT := 6; (*homing mode*)
mcHOME_AXIS_REF : USINT := 12; (*homing mode *)
mcHOME_BLOCK_DS : USINT := 14; (*homing mode *)
mcHOME_BLOCK_TORQUE : USINT := 13; (*homing mode *)
mcHOME_DCM : USINT := 9; (*homing mode*)
mcHOME_DCM_CORR : USINT := 10; (*homing mode*)
mcHOME_DEFAULT : USINT := 0; (*homing mode*)
mcHOME_DIRECT : USINT := 1; (*homing mode*)
mcHOME_LIMIT_SWITCH : USINT := 3; (*homing mode*)
mcHOME_REF_PULSE : USINT := 5; (*homing mode*)
mcHOME_RESTORE_POS : USINT := 11; (*homing mode*)
mcHOME_SET_PHASE : USINT := 7; (*homing mode*)
mcHOME_SWITCH_GATE : USINT := 8; (*homing mode*)
mcHORIZONTAL : USINT := 0; (*setup option for controller setup*)
mcIDENTIFICATION : UINT := 10; (*setup mode *)
mcIMMEDIATE : UINT := 0; (*mode for MC_BR_RegMarkCalc001, StartMode for MC_BR_CrossCutterControl, *)
mcIN_WINDOW : USINT := 20; (*trigger event mode*)
mcINC : USINT := 2; (*encoder type*)
mcINC_ABS : USINT := 4; (*encoder type*)
mcINC_REF : USINT := 3; (*encoder type*)
mcINCLINED_SINE_CURVE : UINT := 5; (*motion rule*)
mcINTERVAL_EVENT : UINT := 16;
mcINVERSE : USINT := 255; (*encoder count direction*)
mcIPL_LINEAR : USINT := 1; (*interpolation mode*)
mcIPL_OFF : USINT := 0; (*interpolation mode*)
mcIPL_QUADRATIC : USINT := 2; (*interpolation mode*)
mcIPL_QUADRATIC_NO_OVERSHOOT : USINT := 4; (*interpolation mode*)
mcISQ_F1_NOTCH : UINT := 128; (*setup mode*)
mcISQ_F2_NOTCH : UINT := 256; (*setup mode*)
mcISQ_F3_NOTCH : UINT := 512; (*setup mode*)
mcISQ_RIPPLE : UINT := 20; (*setup mode*)
mcLAST_POINT : UINT := 0; (*motion rule*)
mcLEAD_IN : UINT := 2;
mcLEAD_OUT : UINT := 4;
mcLENGTH_ONLY : UINT := 32;
mcLIMIT : USINT := 40; (*torque mode*)
mcLIMIT_PARAMETERS : REAL := 1.0; (*option for DefaultMoveParameters*)
mcLINEAR_CAM : USINT := 253; (*predefined 1:1 cam profile for MC_BR_CamDwell*)
mcLINEAR_CAM_NON_PERIODIC : USINT := 254; (*for predifined 1:1 cam profile*)
mcLINEAR_CAM_PERIODIC : USINT := 255; (*for predefined 1:1 cam profile*)
mcLOAD : UINT := 276; (*trace command*)
mcMANUAL_SEARCH : UINT := 64;
mcMASTER_DISTANCE_BASED : UINT := 3; (*basis for movement profile (e.g. for MC_BR_Offset or MC_BR_Phasing)*)
mcMASTER_INTERVAL : USINT := 0; (*start mode*)
mcMASTER_POSITION : UINT := 256; (*additional basis for movement profile (e.g. for MC_BR_Offset), StartMode for MC_BR_CrossCutterControl*)
mcMASTER_POSITION_BASED : UINT := 2; (*basis for movement profile (e.g. for MC_BR_Offset or MC_BR_Phasing)*)
mcMAX_ACCELERATION_APPL : INT := 13; (*PLCopen motion parameter*)
mcMAX_ACCELERATION_SYSTEM : INT := 12; (*PLCopen motion parameter*)
mcMAX_DECELERATION_APPL : INT := 15; (*PLCopen motion parameter*)
mcMAX_DECELERATION_SYSTEM : INT := 14; (*PLCopen motion parameter*)
mcMAX_IV_TIME : USINT := 8; (*additional mode for power evaluation*)
mcMAX_JERK : INT := 16; (*PLCopen motion parameter*)
mcMAX_LOAD_SYSTEM : INT := 1015; (*PLCopen motion parameter*)
mcMAX_POSITION_CHANGE : INT := 1016; (*PLCopen motion parameter*)
mcMAX_POSITION_LAG : INT := 7; (*PLCopen motion parameter*)
mcMAX_SLAVE_COMP_DISTANCE_NEG : UINT := 4; (*mode for automat compensation check*)
mcMAX_SLAVE_COMP_DISTANCE_POS : UINT := 3; (*mode for automat compensation check*)
mcMAX_VELOCITY_APPL : INT := 9; (*PLCopen motion parameter*)
mcMAX_VELOCITY_SYSTEM : INT := 8; (*PLCopen motion parameter*)
mcMIDDLE : USINT := 5;
mcMIN_MASTER_COMP_DISTANCE : UINT := 2; (*mode for automat compensation check*)
mcMODIFIED_ACCEL_TRAPEZOID : UINT := 6; (*motion rule*)
mcMODIFIED_SINE_CURVE : UINT := 7; (*motion rule*)
mcMOTOR : UINT := 258; (*switch on simulation mode*)
mcMOVE_ACCELERATION_NEG : INT := 1005; (*PLCopen motion parameter*)
mcMOVE_ACCELERATION_POS : INT := 1003; (*PLCopen motion parameter*)
mcMOVE_CYCL_POS_IPL_MODE : INT := 1010; (*PLCopen motion parameter*)
mcMOVE_CYCL_VEL_IPL_MODE : INT := 1011; (*PLCopen motion parameter*)
mcMOVE_DECELERATION_NEG : INT := 1006; (*PLCopen motion parameter*)
mcMOVE_DECELERATION_POS : INT := 1004; (*PLCopen motion parameter*)
mcMOVE_VELOCITY_NEG : INT := 1002; (*PLCopen motion parameter*)
mcMOVE_VELOCITY_POS : INT := 1001; (*PLCopen motion parameter*)
mcMULTI_AXIS_TRACE : UDINT := 0; (*parameter trace type*)
mcN_EDGE : USINT := 1;
mcNEGATIVE_DIR : USINT := 1; (*movement direction*)
mcNET_TRACE_GLOBAL : UDINT := 0; (*network trace type*)
mcNETWORK_CYCLE_TIME: INT := 1017; (*PLCopen motion parameter*)
mcNO_CHANGE_COMP : USINT := 2;
mcNO_EVENTS : USINT := 253; (*event index*)
mcNO_STATES : USINT := 253;
mcNO_PARAMS : USINT := 253; (*parameter index*)
mcNO_POSITION : USINT := 0;
mcNO_START_COMP : USINT := 1;
mcNO_TEXT : UINT := 0; (*no error text determination active*)
mcNON_PERIODIC : BOOL := FALSE; (*cam profile mode*)
mcNOT_AXIS_RELATED : UDINT := 16#FFFFFFFF;
mcNULL : UINT := 1;
mcOFF : BOOL := FALSE;
mcON : BOOL := TRUE;
mcONCE : UINT := 1;
mcONE_RECORD : UINT := 0; (*mode for MC_BR_CyclicRead*)
mcONLY_EVENTS : USINT := 254; (*event index*)
mcONLY_PSM : USINT := 1; (*power evaluation mode*)
mcOPEN : USINT := 1;
mcOPTIMIZED_ACCELERATION : UINT := 768; (*interpolation rule*)
mcOPTIMIZED_VELOCITY : UINT := 512; (*interpolation rule*)
mcOUT_WINDOW : USINT := 30; (*trigger event mode*)
mcOVERRIDE : INT := 1000; (*PLCopen motion parameter*)
mcP_EDGE : USINT := 0;
mcPASSIVE : UINT := 4; (*setup mode*)
mcPERIODIC : BOOL := TRUE; (*cam profile mode*)
mcPOSITION : USINT := 1; (*setup mode*)
mcPOSITIVE_DIR : USINT := 0; (*movement direction*)
mcQUADRATIC_PARABOLA : UINT := 2; (*motion rule*)
mcQUEUED : UINT := 1;
mcRELATIVE : USINT := 1; (*start mode*)
mcRELATIVE_NO_RESET : USINT := 3; (*start mode*)
mcRESET : UINT := 320; (*trace command*)
mcRESET_RING_STARTIDX : UINT := 4416; (*trace command (0x1000 + 0x0140)*)
mcRESTART : UINT := 273; (*StartMode for MC_BR_CrossCutterControl*)
mcREVERSE : UINT := 8;
mcSATURATION : USINT := 30; (*setup mode*)
mcSAVE : UINT := 341; (*trace command*)
mcSAVE_RING_STARTIDX : UINT := 4437; (*trace command (0x1000 + 0x0155)*)
mcSE : UINT := 3;
mcSET_GEN_ONLY : UINT := 1024; (*simulation with only set value generation*)
mcSET_OFFSET : USINT := 34; (*setup mode*)
mcSET_POSITION : UINT := 0; (*position source for MPDC*)
mcSHIFT_FROM_EXPECTED : UINT := 50; (*input for MC_BR_TouchProbe*)
mcSHIFT_FROM_RESULT : UINT := 49; (*input for MC_BR_TouchProbe*)
mcSHORTEST_WAY : USINT := 3; (*synchronization mode, movement direction*)
mcSIGNAL_CHIRP : UINT := 1; (*excitation signal type for controller setup*)
mcSIGNAL_CHIRP_TRAPEZOID : UINT := 2; (*excitation signal type for controller setup*)
mcSIGNAL_PRBS : UINT := 0; (*excitation signal type for controller setup*)
mcSIMPLE_SINE_CURVE : UINT := 3; (*motion rule*)
mcSIMULATION_INIT : UINT := 512; (*initialize simulation parameters*)
mcSIMULATION_OFF : UINT := 259; (*switch off simulation mode*)
mcSIMULATION_ON : UINT := 258; (*switch on simulation mode*)
mcSIMULATION_READ : UINT := 265; (*read calculated simulation parameters*)
mcSLAVE_POSITION : UINT := 0; (*additional basis for movement profile (e.g. for MC_BR_Offset)*)
mcSLOW_DOWN : USINT := 5; (*synchronization mode*)
mcSMALLER : UINT := 1;
mcSPEED : USINT := 2; (*setup mode*)
mcSTANDARD : USINT := 0; (*encoder count direction*)
mcSTART : UINT := 260;
mcSTART_N_FLANK : UINT := 128; (*start MPDC at negative flank*)
mcSTART_ONLY : USINT := 3; (*power evaluation mode*)
mcSTART_P_FLANK : UINT := 0; (*start MPDC at positive flank*)
mcSTEPPER : USINT := 31; (*setup mode*)
mcSTOP : UINT := 261;
mcSTOP_INDEX : INT := 1013; (*PLCopen motion parameter*)
mcSTRAIGHT_LINE : UINT := 1; (*motion rule*)
mcSW_END_ACTIVE : REAL := 0.0; (*SW end monitoring mode*)
mcSW_END_IGNORE : REAL := 1.0; (*SW end monitoring mode*)
mcSW_END_MONITORING : INT := 1014; (*PLCopen motion parameter*)
mcSW_END_SPF : REAL := 2.0; (*SW end monitoring mode*)
mcSW_LIMIT_NEG : INT := 3; (*PLCopen motion parameter*)
mcSW_LIMIT_POS : INT := 2; (*PLCopen motion parameter*)
mcSWITCH_OFF : UINT := 259; (*trace command*)
mcSWITCH_ON : UINT := 258; (*trace command*)
mcT_FILTER : UINT := 64; (*setup mode*)
mcT_FILTER_2 : UINT := 65; (*setup mode*)
mcTEST : UINT := 31; (*setup mode*)
mcTEXT : UINT := 1; (*error text determination active*)
mcTIME_BASED : UINT := 1; (*basis for movement profile (e.g. for MC_BR_Offset or MC_BR_Phasing)*)
mcTIME_LIMIT : USINT := 8; (*enable time dependent switch off of function*)
mcTRACE_DELAY : USINT := 6; (*trace status*)
mcTRACE_FINISHED : USINT := 1; (*trace status*)
mcTRACE_REST : USINT := 5; (*trace status*)
mcTRACE_RING : USINT := 4; (*trace status*)
mcTRACE_STARTED : USINT := 20; (*trace status*)
mcTRACE_TIME : USINT := 2; (*trace status*)
mcTRACE_TRIGGER : USINT := 3; (*trace status*)
mcTRANSITION_OFF : UINT := 0;
mcTRANSITION_ON : UINT := 1;
mcTUNE_STANDSTILL : USINT := 0; (*constant for OperatingPoint*)
mcTUNE_TN : UINT := 16; (*setup mode*)
mcTUNE_V_CONSTANT : USINT := 1; (*constant for OperatingPoint*)
mcUNEQUAL : UINT := 5;
mcUPDATE_PERIOD : UINT := 16#8000; (*input for MC_BR_TouchProbe*)
mcUSE_AXIS_PERIOD : UINT := 16#4000; (*input for MC_BR_TouchProbe*)
mcUSE_FILTER_PAR : UINT := 4; (*setup mode *)
mcUSE_FIRST_TRIGGER_POS : UINT := 64; (*additional input for MC_BR_TouchProbe*)
mcUSE_STOP_COMP : USINT := 4;
mcUSE_TN : UINT := 8; (*setup mode*)
mcV_LIMIT_CALC : USINT := 4; (*recalculate speed limit depending on user setting*)
mcV_LIMIT_OFF : USINT := 2; (*disable speed limit*)
mcVELOCITY_CONTROL : UINT := 4; (*basis for movement profile (e.g. for MC_BR_Offset or MC_BR_Phasing)*)
mcVERTICAL : USINT := 1; (*setup option for controller setup*)
mcWITH_PARAM : USINT := 2; (*power evaluation mode*)
mcWITHIN_PERIOD : USINT := 6; (*synchronization mode*)
mcWITHOUT_PERIOD : UINT := 4; (*input for MC_BR_TouchProbe*)
mcWITH_FF : USINT := 0; (*torque limit mode*)
mcWITHOUT_FF : USINT := 1; (*torque limit mode*)
mcWRAP : UINT := 2;
mcWRITE_DIRECT : UINT := 256; (*cyclic write mode*)
END_VAR

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.4.8.122 SP?>
<Library Version="5.09.2" Description="Motion Control Manager" xmlns="http://br-automation.co.at/AS/Library">
<Files>
<File>Acp10man.typ</File>
</Files>
<Dependencies>
<Dependency ObjectName="Acp10par" FromVersion="5.09.2" ToVersion="5.09.2" />
<Dependency ObjectName="Ncglobal" FromVersion="5.09.2" ToVersion="5.09.2" />
</Dependencies>
</Library>

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.4.8.122 SP?>
<Library Version="5.09.2" Description="ACOPOS Parameters" xmlns="http://br-automation.co.at/AS/Library">
<Files>
<File>Acp10par.var</File>
</Files>
</Library>

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,307 @@
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION_BLOCK ArEventLogCreate (*creates an event log module; asynchronous execution *)
VAR_INPUT
Execute : BOOL; (*enables execution*)
Name : STRING[256]; (*name of the event log module*)
Size : UDINT; (*size of the event log module*)
Persistence : USINT; (*persistence type of the log module*)
Info : UDINT; (*format of the additional data*)
END_VAR
VAR_OUTPUT
Done : BOOL; (*execution done*)
Busy : BOOL; (*execution running*)
Error : BOOL; (*execution failed*)
StatusID : DINT; (*execution error: see help*)
Ident : ArEventLogIdentType; (*ident for the event log module*)
END_VAR
VAR
Internal : ArEventLogAsyncInternalType;(*internal variable*)
END_VAR
END_FUNCTION_BLOCK
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION_BLOCK ArEventLogDelete (*deletes an event log module; asynchronous execution *)
VAR_INPUT
Execute : BOOL; (*enables execution*)
Ident : ArEventLogIdentType; (*ident for the event log module*)
END_VAR
VAR_OUTPUT
Done : BOOL; (*execution done*)
Busy : BOOL; (*execution running*)
Error : BOOL; (*execution failed*)
StatusID : DINT; (*execution error: see help*)
END_VAR
VAR
Internal : ArEventLogAsyncInternalType;(*internal variable*)
END_VAR
END_FUNCTION_BLOCK
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION_BLOCK ArEventLogGetIdent (*gets identifier of an event log module*)
VAR_INPUT
Execute : BOOL; (*enables execution*)
Name : STRING[256]; (*name of the event log module*)
END_VAR
VAR_OUTPUT
Done : BOOL; (*execution done*)
Error : BOOL; (*execution failed*)
StatusID : DINT; (*execution error: see help*)
Ident : ArEventLogIdentType; (*identifier of the event log module*)
END_VAR
VAR
Internal : ArEventLogInternalType; (*internal variable*)
END_VAR
END_FUNCTION_BLOCK
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION_BLOCK ArEventLogWrite (*writes a log entry to an event log module*)
VAR_INPUT
Execute : BOOL; (*enables execution*)
Ident : ArEventLogIdentType; (*ident for the event log module to be written*)
EventID : DINT; (*event id of the log entry*)
OriginRecordID : ArEventLogRecordIDType; (*record id of basic cause of error/warning, or 0*)
ObjectID : STRING[36]; (*object id - string of maximum 35 characters, string length of 0 object id is generated internally*)
AddDataSize : UDINT; (*size of the additional data, or 0 (no additional data)*)
AddDataFormat : USINT; (*format of the additional data*)
AddData : UDINT; (*additional data of the entry given as pointer, or 0 (no additional data)*)
TimeStamp : UDINT; (*external timestamp given as pointer to ArEventLogTimeStampType, or 0 (timestamp is taken internally)*)
END_VAR
VAR_OUTPUT
Done : BOOL; (*execution done*)
Error : BOOL; (*execution failed*)
StatusID : DINT; (*execution error: see help*)
RecordID : ArEventLogRecordIDType; (*id of current record*)
END_VAR
VAR
Internal : ArEventLogInternalType; (*internal variable*)
END_VAR
END_FUNCTION_BLOCK
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION_BLOCK ArEventLogGetLatestRecordID (*gets latest record id*)
VAR_INPUT
Execute : BOOL; (*enables execution*)
Ident : ArEventLogIdentType; (*ident for the event log module to be written*)
END_VAR
VAR_OUTPUT
Done : BOOL; (*execution done*)
Error : BOOL; (*execution failed*)
StatusID : DINT; (*execution error: see help*)
RecordID : ArEventLogRecordIDType; (*latest record id to read*)
END_VAR
VAR
Internal : ArEventLogInternalType; (*internal variable*)
END_VAR
END_FUNCTION_BLOCK
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION_BLOCK ArEventLogGetPreviousRecordID (*gets previous record id*)
VAR_INPUT
Execute : BOOL; (*enables execution*)
Ident : ArEventLogIdentType; (*ident for the event log module to be written*)
RecordID : ArEventLogRecordIDType; (*current record id*)
END_VAR
VAR_OUTPUT
Done : BOOL; (*execution done*)
Error : BOOL; (*execution failed*)
StatusID : DINT; (*execution error: see help*)
PrevRecordID : ArEventLogRecordIDType; (*previous record id to read*)
END_VAR
VAR
Internal : ArEventLogInternalType; (*internal variable*)
END_VAR
END_FUNCTION_BLOCK
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION_BLOCK ArEventLogRead (*reads a log entry from an event log module*)
VAR_INPUT
Execute : BOOL; (*enables execution*)
Ident : ArEventLogIdentType; (*ident for the event log module to be written*)
RecordID : ArEventLogRecordIDType; (*record id to read*)
END_VAR
VAR_OUTPUT
Done : BOOL; (*execution done*)
Error : BOOL; (*execution failed*)
StatusID : DINT; (*execution error: see help*)
EventID : DINT; (*event id of the log entry*)
OriginRecordID : ArEventLogRecordIDType; (*record id of basic cause of error/warning, or 0*)
AddDataFormat : USINT; (*format of the additional data*)
AddDataSize : UDINT; (*size of the additional data*)
TimeStamp : ArEventLogTimeStampType; (*timestamp*)
END_VAR
VAR
Internal : ArEventLogInternalType; (*internal variable*)
END_VAR
END_FUNCTION_BLOCK
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION_BLOCK ArEventLogReadDescription (*reads a description of an event id*)
VAR_INPUT
Execute : BOOL; (*enables execution*)
Ident : ArEventLogIdentType; (*ident for the event log module to be written*)
RecordID : ArEventLogRecordIDType; (*record id to read*)
LanguageCode : ArEventLogLanguageCodeType;(*language id of description*)
Qualifier : STRING[250]; (*additional qualifier - reserved for future use*)
TextBuffer : UDINT; (*buffer for description*)
TextBufferSize : UDINT; (*maximum description size*)
END_VAR
VAR_OUTPUT
Done : BOOL; (*execution done*)
Busy : BOOL; (*execution running*)
Error : BOOL; (*execution failed*)
StatusID : DINT; (*execution error: see help*)
TextSize : UDINT; (*size of description (including 0-termination)*)
END_VAR
VAR
Internal : ArEventLogAsyncInternalType; (*internal variable*)
END_VAR
END_FUNCTION_BLOCK
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION_BLOCK ArEventLogReadErrorNumber (*reads an error number log entry from an event log module*)
VAR_INPUT
Execute : BOOL; (*enables execution*)
Ident : ArEventLogIdentType; (*ident for the event log module to be written*)
RecordID : ArEventLogRecordIDType; (*record id to read*)
END_VAR
VAR_OUTPUT
Done : BOOL; (*execution done*)
Error : BOOL; (*execution failed*)
StatusID : DINT; (*execution error: see help*)
ErrorNumber : UDINT; (*error number of the log entry*)
Severity : USINT; (*severity of the log entry*)
END_VAR
VAR
Internal : ArEventLogInternalType; (*internal variable*)
END_VAR
END_FUNCTION_BLOCK
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION_BLOCK ArEventLogReadAddData (*reads the additional data from an event log module*)
VAR_INPUT
Execute : BOOL; (*enables execution*)
Ident : ArEventLogIdentType; (*ident for the event log module to be written*)
RecordID : ArEventLogRecordIDType; (*record id to read*)
AddData : UDINT; (*buffer for additional data given as pointer*)
BytesToRead : UDINT; (*buffer size for additional data*)
END_VAR
VAR_OUTPUT
Done : BOOL; (*execution done*)
Error : BOOL; (*execution failed*)
StatusID : DINT; (*execution status: see help*)
AddDataSize : UDINT; (*size of the additional data*)
END_VAR
VAR
Internal : ArEventLogInternalType; (*internal variable*)
END_VAR
END_FUNCTION_BLOCK
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION_BLOCK ArEventLogReadObjectID (*reads the object id from an event log module*)
VAR_INPUT
Execute : BOOL; (*enables execution*)
Ident : ArEventLogIdentType; (*ident for the event log module to be written*)
RecordID : ArEventLogRecordIDType; (*record id to read*)
END_VAR
VAR_OUTPUT
Done : BOOL; (*execution done*)
Error : BOOL; (*execution failed*)
StatusID : DINT; (*execution error: see help*)
ObjectID : STRING[36]; (*object id - string of maximum 35 characters*)
END_VAR
VAR
Internal : ArEventLogInternalType; (*internal variable*)
END_VAR
END_FUNCTION_BLOCK
{REDUND_OK} FUNCTION ArEventLogMakeEventID : DINT (*makes an event id*)
VAR_INPUT
Severity : USINT; (*severity code of event id*)
Facility : UINT; (*facility of event id*)
ErrorCode : UINT; (*error code of event id*)
END_VAR
END_FUNCTION
{REDUND_OK} FUNCTION ArEventLogIsError : BOOL (*returns true if event id is an error entry*)
VAR_INPUT
EventID : DINT; (*event id*)
END_VAR
END_FUNCTION
{REDUND_OK} FUNCTION ArEventLogIsWarning : BOOL (*returns true if event id is a warning entry*)
VAR_INPUT
EventID : DINT; (*event id*)
END_VAR
END_FUNCTION
{REDUND_OK} FUNCTION ArEventLogIsInformation : BOOL (*returns true if event id is a information entry*)
VAR_INPUT
EventID : DINT; (*event id*)
END_VAR
END_FUNCTION
{REDUND_OK} FUNCTION ArEventLogIsSuccess : BOOL (*returns true if event id is a success entry*)
VAR_INPUT
EventID : DINT; (*event id*)
END_VAR
END_FUNCTION
{REDUND_OK} FUNCTION ArEventLogIsCustomerArea : BOOL (*returns true if the customer flag of the event id is set*)
VAR_INPUT
EventID : DINT; (*event id*)
END_VAR
END_FUNCTION
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION ArEventLogAddDataInit : BOOL (*returns true on success, false on failure*)
VAR_INPUT
Buffer : UDINT; (*buffer for additional event log data*)
BufferSize : UDINT; (*buffer size*)
Format : USINT; (*format of the additional data*)
END_VAR
END_FUNCTION
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION ArEventLogAddDataUdint : BOOL (*returns true on success, false on failure*)
VAR_INPUT
Buffer : UDINT; (*buffer for additional event data*)
BufferSize : UDINT; (*buffer size*)
Value : UDINT; (*UDINT value*)
END_VAR
END_FUNCTION
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION ArEventLogAddDataDint : BOOL (*returns true on success, false on failure*)
VAR_INPUT
Buffer : UDINT; (*buffer for additional event data*)
BufferSize : UDINT; (*buffer size*)
Value : DINT; (*DINT value*)
END_VAR
END_FUNCTION
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION ArEventLogAddDataString : BOOL (*returns true on success, false on failure*)
VAR_INPUT
Buffer : UDINT; (*buffer for additional event log data*)
BufferSize : UDINT; (*buffer size*)
Value : UDINT; (*STRING value, given as pointer to null terminated string*)
END_VAR
END_FUNCTION
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION ArEventLogAddDataQuantity : BOOL (*returns true on success, false on failure*)
VAR_INPUT
Buffer : UDINT; (*buffer for additional event log data*)
BufferSize : UDINT; (*buffer size*)
Value : LREAL; (*LREAL value*)
UnitID : DINT; (*unit ID, -1 no unit*)
NamespaceURI : UDINT; (*namespace URI given as pointer to null terminated string, null is default namespace (CEFACT)*)
END_VAR
END_FUNCTION

View File

@@ -0,0 +1,20 @@
TYPE
ArEventLogIdentType : UDINT;
ArEventLogRecordIDType : UDINT;
ArEventLogLanguageCodeType : STRING[18]; (*String-type for language ID*)
ArEventLogTimeStampType : STRUCT
sec : UDINT; (*seconds*)
nsec : UDINT; (*nano seconds*)
END_STRUCT;
ArEventLogAsyncInternalType : STRUCT
FBStateCtx : ArFBStateInternalType;
AsyFuMaCtx : ArFBAsyFuMaInternalType;
END_STRUCT;
ArEventLogInternalType : STRUCT
FBStateCtx : ArFBStateInternalType;
END_STRUCT;
END_TYPE

View File

@@ -0,0 +1,42 @@
VAR CONSTANT
arEVENTLOG_ERR_PARAMETER : DINT := -1070586096; (*obsolete - invalid parameters specified*)
arEVENTLOG_ERR_RECORDID_INVALID : DINT := -1070586096; (*no record with the given id exists in the logbook*)
arEVENTLOG_ERR_EXISTING : DINT := -1070586095; (*obsolete- log module already exists*)
arEVENTLOG_ERR_LOGBOOK_EXISTS : DINT := -1070586095; (*a logbook with the given name already exists*)
arEVENTLOG_ERR_INTERNAL : DINT := -1070586094; (*unexpected internal error*)
arEVENTLOG_ERR_NAME_INVALID : DINT := -1070586093; (*the given name is invalid (empty)*)
arEVENTLOG_ERR_SIZE_INVALID : DINT := -1070586092; (*the given size is smaller than the minimum size of a logbook*)
arEVENTLOG_ERR_PERSISTENCE_INVAL : DINT := -1070586091; (*the given persistence level is unknown*)
arEVENTLOG_ERR_IDENT_INVALID : DINT := -1070586090; (*the given ident is invalid (NULL)*)
arEVENTLOG_ERR_IDENT_SYSTEM : DINT := -1070586089; (*access denied, the given ident belongs to a system logbook*)
arEVENTLOG_ERR_EVENTID_INVALID : DINT := -1070586088; (*the given event id is no customer event id*)
arEVENTLOG_ERR_LOGBOOK_NOT_FOUND : DINT := -1070586087; (*a logbook with the given name does not exist*)
arEVENTLOG_ERR_ADDDATA_NULL : DINT := -1070586086; (*the given pointer to the additional data buffer is NULL*)
arEVENTLOG_ERR_NO_ERRORNUMBER : DINT := -1070586085; (*the given record is no error number record*)
arEVENTLOG_ERR_MODULE_EXISTS : DINT := -1070586084; (*another module with the given name already exists*)
arEVENTLOG_ERR_NO_DESCRIPTION : DINT := -1070586083; (*no description was found for the given record id*)
arEVENTLOG_ERR_DESCRIPTION_NULL : DINT := -1070586082; (*the given pointer to the description buffer is NULL*)
arEVENTLOG_ERR_FORMAT_INVALID : DINT := -1070586081; (*the given format for the additional data is unknown*)
arEVENTLOG_WRN_NO_EVENTID : DINT := -2144327920; (*the given record is no event id record*)
arEVENTLOG_WRN_FORMAT_INVALID : DINT := -2144327919; (*the given format for the additional data is unknown*)
arEVENTLOG_WRN_ADDDATA_NULL : DINT := -2144327918; (*the given pointer to the additional data is NULL*)
arEVENTLOG_INF_SIZE : DINT := 1076897555; (*specified data size too small*)
arEVENTLOG_SEVERITY_SUCCESS : USINT := 0; (*severity code success*)
arEVENTLOG_SEVERITY_INFO : USINT := 1; (*severity code informational*)
arEVENTLOG_SEVERITY_WARNING : USINT := 2; (*severity code warning*)
arEVENTLOG_SEVERITY_ERROR : USINT := 3; (*severity code error*)
arEVENTLOG_PERSISTENCE_VOLATILE : USINT := 0; (*persistence volatile*)
arEVENTLOG_PERSISTENCE_REMANENT : USINT := 1; (*persistence remanent*)
arEVENTLOG_PERSISTENCE_PERSIST : USINT := 2; (*persistence persistent*)
arEVENTLOG_ADDFORMAT_BINARY : USINT := 0; (*additional data format binary*)
arEVENTLOG_ADDFORMAT_TEXT : USINT := 1; (*additional data format series of null terminated strings*)
arEVENTLOG_ADDFORMAT_CODED : USINT := 2; (*additional data format binary coded data*)
arEVENTLOG_ADDFORMAT_CUST_BASE : USINT := 100; (*additional data format begin of customer area*)
arEVENTLOG_ADDFORMAT_CUST_MAX : USINT := 150; (*additional data format end of customer area*)
END_VAR

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.0.0?>
<Library xmlns="http://br-automation.co.at/AS/Library" Description="The ArEventLog library can be used to collect additional error information and for further processing.">
<Files>
<File>ArEventLog.fun</File>
<File>ArEventLog.typ</File>
<File>ArEventLog.var</File>
</Files>
<Dependencies>
<Dependency ObjectName="runtime" />
</Dependencies>
</Library>

View File

@@ -0,0 +1,354 @@
/* Automation Studio generated header file */
/* Do not edit ! */
#ifndef _AREVENTLOG_
#define _AREVENTLOG_
#ifdef __cplusplus
extern "C"
{
#endif
#include <bur/plctypes.h>
#include <runtime.h>
#ifndef _BUR_PUBLIC
#define _BUR_PUBLIC
#endif
/* Constants */
#ifdef _REPLACE_CONST
#define arEVENTLOG_ADDFORMAT_CUST_MAX 150U
#define arEVENTLOG_ADDFORMAT_CUST_BASE 100U
#define arEVENTLOG_ADDFORMAT_CODED 2U
#define arEVENTLOG_ADDFORMAT_TEXT 1U
#define arEVENTLOG_ADDFORMAT_BINARY 0U
#define arEVENTLOG_PERSISTENCE_PERSIST 2U
#define arEVENTLOG_PERSISTENCE_REMANENT 1U
#define arEVENTLOG_PERSISTENCE_VOLATILE 0U
#define arEVENTLOG_SEVERITY_ERROR 3U
#define arEVENTLOG_SEVERITY_WARNING 2U
#define arEVENTLOG_SEVERITY_INFO 1U
#define arEVENTLOG_SEVERITY_SUCCESS 0U
#define arEVENTLOG_INF_SIZE 1076897555
#define arEVENTLOG_WRN_ADDDATA_NULL (-2144327918)
#define arEVENTLOG_WRN_FORMAT_INVALID (-2144327919)
#define arEVENTLOG_WRN_NO_EVENTID (-2144327920)
#define arEVENTLOG_ERR_FORMAT_INVALID (-1070586081)
#define arEVENTLOG_ERR_DESCRIPTION_NULL (-1070586082)
#define arEVENTLOG_ERR_NO_DESCRIPTION (-1070586083)
#define arEVENTLOG_ERR_MODULE_EXISTS (-1070586084)
#define arEVENTLOG_ERR_NO_ERRORNUMBER (-1070586085)
#define arEVENTLOG_ERR_ADDDATA_NULL (-1070586086)
#define arEVENTLOG_ERR_LOGBOOK_NOT_FOUND (-1070586087)
#define arEVENTLOG_ERR_EVENTID_INVALID (-1070586088)
#define arEVENTLOG_ERR_IDENT_SYSTEM (-1070586089)
#define arEVENTLOG_ERR_IDENT_INVALID (-1070586090)
#define arEVENTLOG_ERR_PERSISTENCE_INVAL (-1070586091)
#define arEVENTLOG_ERR_SIZE_INVALID (-1070586092)
#define arEVENTLOG_ERR_NAME_INVALID (-1070586093)
#define arEVENTLOG_ERR_INTERNAL (-1070586094)
#define arEVENTLOG_ERR_LOGBOOK_EXISTS (-1070586095)
#define arEVENTLOG_ERR_EXISTING (-1070586095)
#define arEVENTLOG_ERR_RECORDID_INVALID (-1070586096)
#define arEVENTLOG_ERR_PARAMETER (-1070586096)
#else
#ifndef _GLOBAL_CONST
#define _GLOBAL_CONST _WEAK const
#endif
_GLOBAL_CONST unsigned char arEVENTLOG_ADDFORMAT_CUST_MAX;
_GLOBAL_CONST unsigned char arEVENTLOG_ADDFORMAT_CUST_BASE;
_GLOBAL_CONST unsigned char arEVENTLOG_ADDFORMAT_CODED;
_GLOBAL_CONST unsigned char arEVENTLOG_ADDFORMAT_TEXT;
_GLOBAL_CONST unsigned char arEVENTLOG_ADDFORMAT_BINARY;
_GLOBAL_CONST unsigned char arEVENTLOG_PERSISTENCE_PERSIST;
_GLOBAL_CONST unsigned char arEVENTLOG_PERSISTENCE_REMANENT;
_GLOBAL_CONST unsigned char arEVENTLOG_PERSISTENCE_VOLATILE;
_GLOBAL_CONST unsigned char arEVENTLOG_SEVERITY_ERROR;
_GLOBAL_CONST unsigned char arEVENTLOG_SEVERITY_WARNING;
_GLOBAL_CONST unsigned char arEVENTLOG_SEVERITY_INFO;
_GLOBAL_CONST unsigned char arEVENTLOG_SEVERITY_SUCCESS;
_GLOBAL_CONST signed long arEVENTLOG_INF_SIZE;
_GLOBAL_CONST signed long arEVENTLOG_WRN_ADDDATA_NULL;
_GLOBAL_CONST signed long arEVENTLOG_WRN_FORMAT_INVALID;
_GLOBAL_CONST signed long arEVENTLOG_WRN_NO_EVENTID;
_GLOBAL_CONST signed long arEVENTLOG_ERR_FORMAT_INVALID;
_GLOBAL_CONST signed long arEVENTLOG_ERR_DESCRIPTION_NULL;
_GLOBAL_CONST signed long arEVENTLOG_ERR_NO_DESCRIPTION;
_GLOBAL_CONST signed long arEVENTLOG_ERR_MODULE_EXISTS;
_GLOBAL_CONST signed long arEVENTLOG_ERR_NO_ERRORNUMBER;
_GLOBAL_CONST signed long arEVENTLOG_ERR_ADDDATA_NULL;
_GLOBAL_CONST signed long arEVENTLOG_ERR_LOGBOOK_NOT_FOUND;
_GLOBAL_CONST signed long arEVENTLOG_ERR_EVENTID_INVALID;
_GLOBAL_CONST signed long arEVENTLOG_ERR_IDENT_SYSTEM;
_GLOBAL_CONST signed long arEVENTLOG_ERR_IDENT_INVALID;
_GLOBAL_CONST signed long arEVENTLOG_ERR_PERSISTENCE_INVAL;
_GLOBAL_CONST signed long arEVENTLOG_ERR_SIZE_INVALID;
_GLOBAL_CONST signed long arEVENTLOG_ERR_NAME_INVALID;
_GLOBAL_CONST signed long arEVENTLOG_ERR_INTERNAL;
_GLOBAL_CONST signed long arEVENTLOG_ERR_LOGBOOK_EXISTS;
_GLOBAL_CONST signed long arEVENTLOG_ERR_EXISTING;
_GLOBAL_CONST signed long arEVENTLOG_ERR_RECORDID_INVALID;
_GLOBAL_CONST signed long arEVENTLOG_ERR_PARAMETER;
#endif
/* Datatypes and datatypes of function blocks */
typedef struct ArEventLogTimeStampType
{ unsigned long sec;
unsigned long nsec;
} ArEventLogTimeStampType;
typedef struct ArEventLogAsyncInternalType
{ struct ArFBStateInternalType FBStateCtx;
struct ArFBAsyFuMaInternalType AsyFuMaCtx;
} ArEventLogAsyncInternalType;
typedef struct ArEventLogInternalType
{ struct ArFBStateInternalType FBStateCtx;
} ArEventLogInternalType;
typedef unsigned long ArEventLogIdentType;
typedef struct ArEventLogCreate
{
/* VAR_INPUT (analog) */
plcstring Name[257];
unsigned long Size;
unsigned char Persistence;
unsigned long Info;
/* VAR_OUTPUT (analog) */
signed long StatusID;
ArEventLogIdentType Ident;
/* VAR (analog) */
struct ArEventLogAsyncInternalType Internal;
/* VAR_INPUT (digital) */
plcbit Execute;
/* VAR_OUTPUT (digital) */
plcbit Done;
plcbit Busy;
plcbit Error;
} ArEventLogCreate_typ;
typedef struct ArEventLogDelete
{
/* VAR_INPUT (analog) */
ArEventLogIdentType Ident;
/* VAR_OUTPUT (analog) */
signed long StatusID;
/* VAR (analog) */
struct ArEventLogAsyncInternalType Internal;
/* VAR_INPUT (digital) */
plcbit Execute;
/* VAR_OUTPUT (digital) */
plcbit Done;
plcbit Busy;
plcbit Error;
} ArEventLogDelete_typ;
typedef struct ArEventLogGetIdent
{
/* VAR_INPUT (analog) */
plcstring Name[257];
/* VAR_OUTPUT (analog) */
signed long StatusID;
ArEventLogIdentType Ident;
/* VAR (analog) */
struct ArEventLogInternalType Internal;
/* VAR_INPUT (digital) */
plcbit Execute;
/* VAR_OUTPUT (digital) */
plcbit Done;
plcbit Error;
} ArEventLogGetIdent_typ;
typedef unsigned long ArEventLogRecordIDType;
typedef struct ArEventLogWrite
{
/* VAR_INPUT (analog) */
ArEventLogIdentType Ident;
signed long EventID;
ArEventLogRecordIDType OriginRecordID;
plcstring ObjectID[37];
unsigned long AddDataSize;
unsigned char AddDataFormat;
unsigned long AddData;
unsigned long TimeStamp;
/* VAR_OUTPUT (analog) */
signed long StatusID;
ArEventLogRecordIDType RecordID;
/* VAR (analog) */
struct ArEventLogInternalType Internal;
/* VAR_INPUT (digital) */
plcbit Execute;
/* VAR_OUTPUT (digital) */
plcbit Done;
plcbit Error;
} ArEventLogWrite_typ;
typedef struct ArEventLogGetLatestRecordID
{
/* VAR_INPUT (analog) */
ArEventLogIdentType Ident;
/* VAR_OUTPUT (analog) */
signed long StatusID;
ArEventLogRecordIDType RecordID;
/* VAR (analog) */
struct ArEventLogInternalType Internal;
/* VAR_INPUT (digital) */
plcbit Execute;
/* VAR_OUTPUT (digital) */
plcbit Done;
plcbit Error;
} ArEventLogGetLatestRecordID_typ;
typedef struct ArEventLogGetPreviousRecordID
{
/* VAR_INPUT (analog) */
ArEventLogIdentType Ident;
ArEventLogRecordIDType RecordID;
/* VAR_OUTPUT (analog) */
signed long StatusID;
ArEventLogRecordIDType PrevRecordID;
/* VAR (analog) */
struct ArEventLogInternalType Internal;
/* VAR_INPUT (digital) */
plcbit Execute;
/* VAR_OUTPUT (digital) */
plcbit Done;
plcbit Error;
} ArEventLogGetPreviousRecordID_typ;
typedef struct ArEventLogRead
{
/* VAR_INPUT (analog) */
ArEventLogIdentType Ident;
ArEventLogRecordIDType RecordID;
/* VAR_OUTPUT (analog) */
signed long StatusID;
signed long EventID;
ArEventLogRecordIDType OriginRecordID;
unsigned char AddDataFormat;
unsigned long AddDataSize;
struct ArEventLogTimeStampType TimeStamp;
/* VAR (analog) */
struct ArEventLogInternalType Internal;
/* VAR_INPUT (digital) */
plcbit Execute;
/* VAR_OUTPUT (digital) */
plcbit Done;
plcbit Error;
} ArEventLogRead_typ;
typedef plcstring ArEventLogLanguageCodeType[19];
typedef struct ArEventLogReadDescription
{
/* VAR_INPUT (analog) */
ArEventLogIdentType Ident;
ArEventLogRecordIDType RecordID;
ArEventLogLanguageCodeType LanguageCode;
plcstring Qualifier[251];
unsigned long TextBuffer;
unsigned long TextBufferSize;
/* VAR_OUTPUT (analog) */
signed long StatusID;
unsigned long TextSize;
/* VAR (analog) */
struct ArEventLogAsyncInternalType Internal;
/* VAR_INPUT (digital) */
plcbit Execute;
/* VAR_OUTPUT (digital) */
plcbit Done;
plcbit Busy;
plcbit Error;
} ArEventLogReadDescription_typ;
typedef struct ArEventLogReadErrorNumber
{
/* VAR_INPUT (analog) */
ArEventLogIdentType Ident;
ArEventLogRecordIDType RecordID;
/* VAR_OUTPUT (analog) */
signed long StatusID;
unsigned long ErrorNumber;
unsigned char Severity;
/* VAR (analog) */
struct ArEventLogInternalType Internal;
/* VAR_INPUT (digital) */
plcbit Execute;
/* VAR_OUTPUT (digital) */
plcbit Done;
plcbit Error;
} ArEventLogReadErrorNumber_typ;
typedef struct ArEventLogReadAddData
{
/* VAR_INPUT (analog) */
ArEventLogIdentType Ident;
ArEventLogRecordIDType RecordID;
unsigned long AddData;
unsigned long BytesToRead;
/* VAR_OUTPUT (analog) */
signed long StatusID;
unsigned long AddDataSize;
/* VAR (analog) */
struct ArEventLogInternalType Internal;
/* VAR_INPUT (digital) */
plcbit Execute;
/* VAR_OUTPUT (digital) */
plcbit Done;
plcbit Error;
} ArEventLogReadAddData_typ;
typedef struct ArEventLogReadObjectID
{
/* VAR_INPUT (analog) */
ArEventLogIdentType Ident;
ArEventLogRecordIDType RecordID;
/* VAR_OUTPUT (analog) */
signed long StatusID;
plcstring ObjectID[37];
/* VAR (analog) */
struct ArEventLogInternalType Internal;
/* VAR_INPUT (digital) */
plcbit Execute;
/* VAR_OUTPUT (digital) */
plcbit Done;
plcbit Error;
} ArEventLogReadObjectID_typ;
/* Prototyping of functions and function blocks */
_BUR_PUBLIC void ArEventLogCreate(struct ArEventLogCreate* inst);
_BUR_PUBLIC void ArEventLogDelete(struct ArEventLogDelete* inst);
_BUR_PUBLIC void ArEventLogGetIdent(struct ArEventLogGetIdent* inst);
_BUR_PUBLIC void ArEventLogWrite(struct ArEventLogWrite* inst);
_BUR_PUBLIC void ArEventLogGetLatestRecordID(struct ArEventLogGetLatestRecordID* inst);
_BUR_PUBLIC void ArEventLogGetPreviousRecordID(struct ArEventLogGetPreviousRecordID* inst);
_BUR_PUBLIC void ArEventLogRead(struct ArEventLogRead* inst);
_BUR_PUBLIC void ArEventLogReadDescription(struct ArEventLogReadDescription* inst);
_BUR_PUBLIC void ArEventLogReadErrorNumber(struct ArEventLogReadErrorNumber* inst);
_BUR_PUBLIC void ArEventLogReadAddData(struct ArEventLogReadAddData* inst);
_BUR_PUBLIC void ArEventLogReadObjectID(struct ArEventLogReadObjectID* inst);
_BUR_PUBLIC signed long ArEventLogMakeEventID(unsigned char Severity, unsigned short Facility, unsigned short ErrorCode);
_BUR_PUBLIC plcbit ArEventLogIsError(signed long EventID);
_BUR_PUBLIC plcbit ArEventLogIsWarning(signed long EventID);
_BUR_PUBLIC plcbit ArEventLogIsInformation(signed long EventID);
_BUR_PUBLIC plcbit ArEventLogIsSuccess(signed long EventID);
_BUR_PUBLIC plcbit ArEventLogIsCustomerArea(signed long EventID);
_BUR_PUBLIC plcbit ArEventLogAddDataInit(unsigned long Buffer, unsigned long BufferSize, unsigned char Format);
_BUR_PUBLIC plcbit ArEventLogAddDataUdint(unsigned long Buffer, unsigned long BufferSize, unsigned long Value);
_BUR_PUBLIC plcbit ArEventLogAddDataDint(unsigned long Buffer, unsigned long BufferSize, signed long Value);
_BUR_PUBLIC plcbit ArEventLogAddDataString(unsigned long Buffer, unsigned long BufferSize, unsigned long Value);
_BUR_PUBLIC plcbit ArEventLogAddDataQuantity(unsigned long Buffer, unsigned long BufferSize, double Value, signed long UnitID, unsigned long NamespaceURI);
#ifdef __cplusplus
};
#endif
#endif /* _AREVENTLOG_ */

View File

@@ -0,0 +1,123 @@
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION_BLOCK ArTextSysGetSystemLanguage (*determine preferred user-language*)
VAR_INPUT
Execute : BOOL; (*start on rising edge*)
END_VAR
VAR_OUTPUT
Done : BOOL; (*execution successful. FB finished*)
Busy : BOOL; (*FB is still active; needs call*)
Error : BOOL;
StatusID : DINT;
LanguageCode : ArTextSysLanguageCodeType;
END_VAR
VAR (*internals*)
Internal : ArTextSysExec1InternalType;
END_VAR
END_FUNCTION_BLOCK
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION_BLOCK ArTextSysSetSystemLanguage (*update preferred user-language*)
VAR_INPUT
Execute : BOOL;
LanguageCode : ArTextSysLanguageCodeType;
END_VAR
VAR_OUTPUT
Done : BOOL;
Busy : BOOL;
Error : BOOL; (*error occurred during operation*)
StatusID : DINT;
END_VAR
VAR (*internals*)
Internal : ArTextSysExec1InternalType;
END_VAR
END_FUNCTION_BLOCK
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION_BLOCK ArTextSysGetNamespaceLanguages
VAR_INPUT
Execute : BOOL; (*start on rising edge*)
Namespace : UDINT; (*string-pointer to namespace*)
First : BOOL; (*get first entry; or next*)
END_VAR
VAR_OUTPUT
Done : BOOL; (*execution successful. FB finished*)
Busy : BOOL; (*FB is still active; needs call*)
Error : BOOL; (*error occurred during operation*)
StatusID : DINT;
LanguageCode : ArTextSysLanguageCodeType;
EndOfList : BOOL; (*indicator for last found entry*)
END_VAR
VAR (*internals*)
Internal : ArTextSysIter1InternalType;
END_VAR
END_FUNCTION_BLOCK
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION_BLOCK ArTextSysGetText
VAR_INPUT
Execute : BOOL;
Namespace : UDINT; (*string-pointer to namespace*)
TextID : UDINT; (*string-pointer to text-key*)
LanguageCode : ArTextSysLanguageCodeType;
TextBufferSize : UDINT; (*size of result-buffer to get text*)
TextBuffer : UDINT; (*pointer to text result-buffer*)
SearchMode : ArTextSysSearchModeEnum;
END_VAR
VAR_OUTPUT
Done : BOOL; (*execution successful. FB finished*)
Busy : BOOL; (*FB is still active; needs call*)
Error : BOOL; (*error occurred during operation*)
StatusID : DINT;
TextSize : UDINT; (*Length of text in result-buffer*)
END_VAR
VAR (*internals*)
Internal : ArTextSysExec1InternalType;
END_VAR
END_FUNCTION_BLOCK
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION_BLOCK ArTextSysFormatString
VAR_INPUT
Execute : BOOL;
FormatString : UDINT; (*string-pointer to format-template*)
ArgumentCount : UINT; (*count of arguments in list*)
ArgumentList : ARRAY[0..9] OF ArTextSysFormatArgumentType;
LanguageCode : ArTextSysLanguageCodeType;
MeasurementCode : UDINT;
TextBufferSize : UDINT; (*size of result-buffer to get text*)
TextBuffer : UDINT; (*pointer to result-buffer*)
END_VAR
VAR_OUTPUT
Done : BOOL; (*execution successful. FB finished*)
Busy : BOOL; (*FB is still active; needs call*)
Error : BOOL; (*error occurred during operation*)
StatusID : DINT;
TextSize : UDINT; (*Length of text in result-buffer*)
END_VAR
VAR (*internals*)
Internal : ArTextSysExec1InternalType;
END_VAR
END_FUNCTION_BLOCK
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION_BLOCK ArTextSysGetFormattedText
VAR_INPUT
Execute : BOOL;
Namespace : UDINT; (*string-pointer to namespace*)
TextID : UDINT; (*string-pointer to text-key*)
ArgumentCount : UINT; (*count of arguments in list*)
ArgumentList : ARRAY[0..9] OF ArTextSysFormatArgumentType;
LanguageCode : ArTextSysLanguageCodeType;
MeasurementCode : UDINT;
TextBufferSize : UDINT; (*size of result-buffer to get text*)
TextBuffer : UDINT; (*pointer to result-buffer*)
SearchMode : ArTextSysSearchModeEnum;
END_VAR
VAR_OUTPUT
Done : BOOL; (*execution successful. FB finished*)
Busy : BOOL; (*FB is still active; needs call*)
Error : BOOL; (*error occurred during operation*)
StatusID : DINT;
TextSize : UDINT; (*Length of text in result-buffer*)
END_VAR
VAR (*internals*)
Internal : ArTextSysExec1InternalType;
END_VAR
END_FUNCTION_BLOCK

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