Workbackup

This commit is contained in:
2020-01-29 14:00:57 +01:00
parent 8abceb2f93
commit 08a52f57a6
1557 changed files with 137185 additions and 0 deletions

16
KD_Boell_RR.apj Normal file
View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version="4.4.8.122 SP"?>
<Project Version="1.00.0" Edition="Standard" EditionComment="Standard" xmlns="http://br-automation.co.at/AS/Project">
<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>
<mapp Version="5.8.0" />
<mappCockpit Version="5.8.0" />
<mappMotion McAcpDrv="5.8.2" McAcpSim="5.8.2" McAcpSys="5.8.2" McMechSys="5.8.2" Version="5.8.2" />
<mappView Version="5.8.1" />
</TechnologyPackages>
</Project>

7
LastUser.set Normal file
View File

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

View File

View File

@@ -0,0 +1,25 @@
VAR
bBlink0_1 : BOOL;
bBlink0_5 : BOOL;
bBlink1_0 : BOOL;
bBlink2_0 : BOOL;
bBlink5_0 : BOOL;
gdtCurrentTime : DATE_AND_TIME; (*Aktuelles Datum/Uhrzeit DT*)
gDTstrucCurrentTime : DTStructure := (0); (*Aktuelles Datum/Uhrzeit DTStructure*)
gsCurrentTime : STRING[25] := ''; (*Aktuelles Datum/Uhrzeit String*)
gsCurrentTimestamp : STRING[19] := ''; (*Aktuelles Datum/Uhrzeit String Timestamp*)
gTCurrentTime : TIME := T#0ms; (*Aktuelle Zeit*)
END_VAR
VAR CONSTANT
gAInNull : INT := 0; (*0 f<>r Analogeing<6E>nge*)
gTrue : BOOL := TRUE; (*Konstant TRUE*)
gFalse : BOOL := FALSE; (*Konstant False*)
gInNull : BOOL := FALSE; (*FALSE FOR Input *)
END_VAR
VAR
gOuNull : BOOL; (*DUMMY for Ausg<73>nge*)
END_VAR
VAR CONSTANT
iAIVoltageOverflow : INT := 16#7FFF; (* Analog Eingang Spannungsmodus,Overflow *)
iAIVoltageUnderflow : INT := -32767; (* Analog Eingang Spannungsmodus Underflow *)
END_VAR

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.4.7.144 SP?>
<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="Aktuelles Datum / Uhrzeig auslesen">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.4.7.144 SP?>
<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.4.7.144 SP?>
<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,96 @@
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)
//Timestamp
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
brsstrcat (ADR (gsCurrentTimestamp), "")
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))
//Timestamp
brsstrcpy (ADR (gsCurrentTimestamp), "")
IF (gDTstrucCurrentTime.day < 10) THEN
brsstrcat (ADR (gsCurrentTimestamp), "0")
ENDIF
brsstrcat (ADR (gsCurrentTimestamp), "")
brsitoa (gDTstrucCurrentTime.day, ADR (sTemp))
brsstrcat (ADR (gsCurrentTimestamp), ADR (sTemp))
brsstrcat (ADR (gsCurrentTimestamp), ".")
IF (gDTstrucCurrentTime.month < 10) THEN
brsstrcat (ADR (gsCurrentTimestamp), "0")
ENDIF
brsitoa (gDTstrucCurrentTime.month, ADR (sTemp))
brsstrcat (ADR (gsCurrentTimestamp), ADR (sTemp))
brsstrcat (ADR (gsCurrentTimestamp), ".")
brsitoa (gDTstrucCurrentTime.year, ADR (sTemp))
brsstrcat (ADR (gsCurrentTimestamp), ADR (sTemp))
brsstrcat (ADR (gsCurrentTimestamp), " ")
IF (gDTstrucCurrentTime.hour < 10) THEN
brsstrcat (ADR (gsCurrentTimestamp), "0")
ENDIF
brsitoa (gDTstrucCurrentTime.hour, ADR (sTemp))
brsstrcat (ADR (gsCurrentTimestamp), ADR (sTemp))
brsstrcat (ADR (gsCurrentTimestamp), ":")
IF (gDTstrucCurrentTime.minute < 10) THEN
brsstrcat (ADR (gsCurrentTimestamp), "0")
ENDIF
brsitoa (gDTstrucCurrentTime.minute, ADR (sTemp))
brsstrcat (ADR (gsCurrentTimestamp), ADR (sTemp))
brsstrcat (ADR (gsCurrentTimestamp), ":")
IF (gDTstrucCurrentTime.second < 10) THEN
brsstrcat (ADR (gsCurrentTimestamp), "0")
ENDIF
brsitoa (gDTstrucCurrentTime.second, ADR (sTemp))
brsstrcat (ADR (gsCurrentTimestamp), 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,133 @@
PROGRAM _CYCLIC
//Zeiger auf Roboter Stellen (Zyklisch wg. Download)
lABBRobot ACCESS ADR (gABBRobot1);
//Lifebeat erzeugen
lABBRobot.Out.bLifebeat := bBlink0_5;
//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)
//Eingangs Byte 2 (16-23)
lABBRobot.In.bOpenGripper := dpInByte[2].0;
IF lABBRobot.In.bOpenGripper THEN
IF NOT gEGP1.In.bGripperIsOpen THEN
gEGP1.Out.bOpen := TRUE;
END_IF
END_IF
lABBRobot.In.bCloseGripper := dpInByte[2].1;
IF lABBRobot.In.bCloseGripper THEN
IF NOT gEGP1.In.bGripperIsClosed AND NOT gEGP1.In.bGripperIsClosedWithPart THEN
gEGP1.Out.bClose := TRUE;
END_IF
END_IF
lABBRobot.In.bGripperDropPart := dpInByte[2].2;
IF lABBRobot.In.bGripperDropPart THEN
IF NOT gEGP1.In.bGripperDroppedPart THEN
gEGP1.Out.bPosition := TRUE;
//Wert ist in EGP - Parameter hinterleg1
END_IF
END_IF
//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;
//Eingangs Byte 4 (32-39)
lABBRobot.In.bWZFeederFree := dpInByte[4].0;
lABBRobot.In.bWZOvHndFree := 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.usRotations := dpInByte[5];
//Eingangs Byte 6 (48-55)
lABBRobot.In.usRotationSpeed := dpInByte[6];
//Eingangs Byte 7 (56-63)
lABBRobot.In.usTurnTablePos := dpInByte[7];
//Eingangs Byte 8 (64-71)
lABBRobot.In.usStatus := dpInByte[8];
//Eingangs Byte 9 (72-80)
//Eingangs Byte 10 (81-88)
//Eingangs Byte 11 (89-96)
//Eingangs Byte 12 (97-104)
//Eingangs Byte 13 (105-112)
//Eingangs Byte 14 (113-120)
//Eingangs Byte 15 (121-128)
//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 := gEGP1.In.bGripperIsOpen;
dpOutByte[2].1 := gEGP1.In.bGripperIsClosed OR gEGP1.In.bGripperIsClosedWithPart;
dpOutByte[2].2 := gCmd1.FeederRobFeed.FdToRobfeed.bTangUpsideDownOk;
dpOutByte[2].3 := gCmd1.FeederRobFeed.FdToRobfeed.bTangUpsideOk;
dpOutByte[2].4 := gCmd1.FeederRobFeed.FdToRobfeed.bNoTang;
dpOutByte[2].5 := gCmd1.FeederRobFeed.FdToRobfeed.bOvHndBackAndFree;
dpOutByte[2].6 := gCmd1.FeederRobFeed.FdToRobfeed.bOvHndBusy;
dpOutByte[2].7 := gEGP1.In.bGripperDroppedPart;
//Schrauber ist weg von <EFBFBD>bergabe
dpOutByte[3].0 := gCmd1.ScrewdriverRob[1].RobToScr.bRobAwayFromOvHnd;
//Ausgangs Byte 3 (24-31)
//Ausgangs Byte 4 (32-39)
// dpOutByte[4] := UINT_TO_USINT (lABBRobot.Out.uiRotationPos MOD 256);
// dpOutByte[5] := UINT_TO_USINT (SHR (lABBRobot.Out.uiRotationPos, 8));
//Ausgangs Byte 5 (40-47)
// dpOutByte[5] := lABBRobot.Out.usRotationsDone;
//Ausgangs Byte 6 (48-55)
//dpOutByte[6] := lABBRobot.Out.usPartsNr;
//Ausgangs Byte 7 (56-63)
//dpOutByte[7] := lABBRobot.Out.usTurnTablePos;
//Ausgangs Byte 8 (64-71)
dpOutByte[8] := lABBRobot.Out.usProgNr;
//Ausgangs Byte 9 (72-79)
//Ausgangs Byte 10 (80-87)
//Ausgangs Byte 11 (88-95)
//Ausgangs Byte 12 (96-103)
//Ausgangs Byte 13 (104-111)
//Ausgangs Byte 14 (112-119)
//Ausgangs Byte 15 (120-127)
END_PROGRAM

View File

@@ -0,0 +1,8 @@
VAR
lABBRobot : REFERENCE TO TypABBInterface; (*Referenz to ABB Interface*)
dpOutByte : ARRAY[0..63] OF USINT := [64(0)]; (*Raw Output Bytes Abb Interface*)
dpInByte : ARRAY[0..63] OF USINT := [64(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.4.7.144 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,45 @@
(*//Interface ABB Roboter*)
TYPE
typABBInterfaceIn : 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)*)
bOpenGripper : BOOL := FALSE; (*16 Greifer <20>ffnen*)
bCloseGripper : BOOL := FALSE; (*17 Greifer Schlie<69>en*)
bGripperDropPart : BOOL := FALSE; (*18 Greifer zum abwerfen <20>ffnen*)
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*)
bWZFeederFree : BOOL := FALSE; (*32 Roboter ist nicht Weltzone Feeder*)
bWZOvHndFree : BOOL := FALSE; (*33 Roboter ist in Weltzone <20>bergabe*)
usTurnTablePos : USINT := 0; (*40 Sollpos Drehtisch (0<>, 180<38>)*)
usRotationPos : USINT := 0; (*48 Rotationspos (in 10<31> Schritten 0 - 36)*)
usRotationSpeed : USINT := 0; (*56 Rotationsgeschwindigkeit 1-255*)
usStatus : USINT := 0; (*64 Status*)
END_STRUCT;
typABBInterfaceOut : 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 (1Cycle)*)
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;
TypABBInterface : STRUCT (*ABB Robot Interface*)
bOnline : BOOL; (*Kommuniktion OK*)
In : typABBInterfaceIn; (*Eing<6E>nge von ABB Roboter*)
Out : typABBInterfaceOut; (*Ausga<67>nge an aBB Roboter*)
END_STRUCT;
END_TYPE
(**)

View File

@@ -0,0 +1,5 @@
(*//Kommunikationsstrukturen*)
VAR RETAIN
gABBRobot1 : TypABBInterface;
END_VAR
(*Variablen / Strukturen*)

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.4.7.144 SP?>
<Package xmlns="http://br-automation.co.at/AS/Package">
<Objects>
<Object Type="File" Description="Globale Typen ABB-Roboter">GlobalABBCom.typ</Object>
<Object Type="File" Description="Globale Varibalen ABB-Roboter">GlobalABBCom.var</Object>
<Object Type="Program" Language="IEC" Description="Communication to ABB Robot 1 (IRC 5 Version)">ABBCom</Object>
</Objects>
</Package>

View File

@@ -0,0 +1,211 @@
PROGRAM _CYCLIC
//Zeiger auf Roboter Stellen (Zyklisch wg. Download)
lABBRobot ACCESS ADR (gABBRobot2);
//Zapfenbrecher erkennen
IF gToolsDetected.Tangbreaker[1] THEN
usTangBreaker := 1;
ELSIF gToolsDetected.Tangbreaker[2] THEN
usTangBreaker := 2;
ELSIF gToolsDetected.Tangbreaker[3] THEN
usTangBreaker := 3;
ELSE
usTangBreaker := 0;
END_IF
//Lifebeat erzeugen
lABBRobot.Out.bLifebeat := bBlink0_5;
//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;
// Reserve
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)
gCmd1.ScrewdriverRob[1].RobToScr.bPowerOff := dpInByte[1].0;
gCmd1.ScrewdriverRob[1].RobToScr.bRobAwayFromOvHnd := dpInByte[1].1;
gCmd1.ScrewdriverRob[1].RobToScr.bRobInOvHndPos := dpInByte[1].2;
gCmd1.FeederRob[1].RobToFd.bRobotInLoadPos := dpInByte[1].2;
gCmd1.ScrewdriverRob[1].RobToScr.bRobInSetpos := dpInByte[1].3;
//Eingangs Byte 2 (16-23)
gCmd1.ScrewdriverRob[1].RobToScr.bStartLoad := dpInByte[2].0;
gCmd1.ScrewdriverRob[1].RobToScr.bSetHelicoil := dpInByte[2].1;
gCmd1.ScrewdriverRob[1].RobToScr.bDropHelicoil := dpInByte[2].2;
//Eingangs Byte 3 (24-31)
lABBRobot.In.bWZHome := dpInByte[3].0;
//lABBRobot.In.bWZLimit1 := dpInByte[3].1;
//lABBRobot.In.bWZLimit2 := dpInByte[3].2;
// lABBRobot.In.bWZCleanPos := dpInByte[2].5;
// lABBRobot.In.bPaintOn := dpInByte[3].0;
// lABBRobot.In.bPaintRound := dpInByte[3].1;
// lABBRobot.In.bPaintWide := dpInByte[3].2;
// lABBRobot.In.bCleanOn := dpInByte[3].3;
//In Zapfenbrechpos
gCmd1.TangBreakerRob[1].RobToTBrk.bRobInTangbreakpos := dpInByte[3].4;
gCmd1.TangBreakerRob[2].RobToTBrk.bRobInTangbreakpos := dpInByte[3].4;
gCmd1.TangBreakerRob[3].RobToTBrk.bRobInTangbreakpos := dpInByte[3].4;
//In Absaugpos
gCmd1.TangBreakerRob[1].RobToTBrk.bRobInSuckpos := dpInByte[3].5;
gCmd1.TangBreakerRob[2].RobToTBrk.bRobInSuckpos := dpInByte[3].5;
gCmd1.TangBreakerRob[3].RobToTBrk.bRobInSuckpos := dpInByte[3].5;
//In Abwurfpos
gCmd1.TangBreakerRob[1].RobToTBrk.bRobInDroppos := dpInByte[3].6;
gCmd1.TangBreakerRob[2].RobToTBrk.bRobInDroppos := dpInByte[3].6;
gCmd1.TangBreakerRob[3].RobToTBrk.bRobInDroppos := dpInByte[3].6;
gCmd1.TangDetectionRob.RobToTBrk.bRobInDroppos := dpInByte[3].6;
//Eingangs Byte 4 (32-39)
//Befehl Zapfenbrechen f<EFBFBD>r aktives Werkzeug (f. Inaktive wird der Befehl in der Werkzeugtask gel<EFBFBD>scht)
gCmd1.TangBreakerRob[usTangBreaker].RobToTBrk.bBrkTang := dpInByte[4].0;
//Befehl Zapfen absaugen f<EFBFBD>r aktives Werkzeug (f. Inaktive wird der Befehl in der Werkzeugtask gel<EFBFBD>scht)
gCmd1.TangBreakerRob[usTangBreaker].RobToTBrk.bSuckTang := dpInByte[4].1;
//Befehl Zapfenb abwerfen f<EFBFBD>r aktives Werkzeug (f. Inaktive wird der Befehl in der Werkzeugtask gel<EFBFBD>scht)
gCmd1.TangBreakerRob[usTangBreaker].RobToTBrk.bDropTang := dpInByte[4].2;
//Werkzeug l<EFBFBD>sen
bDoUnlockTool := dpInByte[5].4;
// lABBRobot.In.uiRotationPos := SHL (USINT_TO_UINT (dpInByte[4]), 8) + USINT_TO_UINT (dpInByte[4]);
//Eingangs Byte 5 (40-47)
// lABBRobot.In.usRotations := dpInByte[5];
//Eingangs Byte 6 (48-55)
//Eingangs Byte 7 (56-63)
//Eingangs Byte 8 (64-71)
//Eingangs Byte 9 (72-79)
//Eingangs Byte 10 (80-87)
//Eingangs Byte 11 (88-95)
//Eingangs Byte 12 (96-103)
//Eingangs Byte 13 (104-111)
//Eingangs Byte 14 (112-119)
//Eingangs Byte 15 (120-127)
//Eingangs Byte 25 (200-207)
lABBRobot.In.usStatus := dpInByte[25];
//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)
//Schrauber 1 erkannt
dpOutByte[1].0 := gToolsDetected.Screwdiver[1];
//Ausgangs Byte 2 (16-23)
dpOutByte[2].0 := gCmd1.ScrewdriverRob[1].ScrToRob.bAxisRefereced;
dpOutByte[2].1 := gCmd1.ScrewdriverRob[1].ScrToRob.bHCOnMandrel;
dpOutByte[2].2 := gCmd1.ScrewdriverRob[1].ScrToRob.bMandelIsBack;
dpOutByte[2].3 := gCmd1.ScrewdriverRob[1].ScrToRob.bMandrelLoadPos;
dpOutByte[2].3 := gCmd1.ScrewdriverRob[1].ScrToRob.bMandrelisEmpty;
//Ausgangs Byte 3 (24-31)
dpOutByte[3].0 := gABBRobot1.In.bWZOvHndFree;
dpOutByte[3].1 := gCmd1.FeederRob[1].FdToRob.bFeederIsLoaded;
dpOutByte[3].2 := gCmd1.FeederRob[1].FdToRob.bFeederisHome;
//Ausgangs Byte 4 (32-39)
dpOutByte[4].0 := gCmd1.ScrewdriverRob[1].ScrToRob.bHCSetOk;
dpOutByte[4].1 := gCmd1.ScrewdriverRob[1].ScrToRob.bHCSetNOK;
dpOutByte[4].2 := gCmd1.ScrewdriverRob[1].ScrToRob.bHCDidntReachFinalPos;
dpOutByte[4].3 := gCmd1.ScrewdriverRob[1].ScrToRob.bHCTorqueToHighDuringSet;
dpOutByte[4].4 := gCmd1.ScrewdriverRob[1].ScrToRob.bHCTorqueToSmallDuringSpindleOut;
dpOutByte[4].5 := gCmd1.ScrewdriverRob[1].ScrToRob.bHCDidntDetectPart;
//Ausgangs Byte 5 (40-47)
//Zapfenbrecher 1-4 erkannt
dpOutByte[5].0 := gToolsDetected.Tangbreaker[1];
dpOutByte[5].1 := gToolsDetected.Tangbreaker[2];
dpOutByte[5].2 := gToolsDetected.Tangbreaker[3];
dpOutByte[5].4 := bDiToolLocked;
dpOutByte[5].5 := bDiToolUnlocked;
//Ausgangs Byte 6 (48-55)
dpOutByte[6].0 := gCmd1.TangBreakerRob[usTangBreaker].TBrkToRob.bTBrkIsHome;
dpOutByte[6].1 := gCmd1.TangBreakerRob[usTangBreaker].TBrkToRob.bSuckunitIsHome;
dpOutByte[6].2 := gCmd1.TangBreakerRob[usTangBreaker].TBrkToRob.bHoleCoverIsBack;
dpOutByte[6].3 := gCmd1.TangBreakerRob[usTangBreaker].TBrkToRob.bLidIsOpen;
//Ausgangs Byte 7 (56-63)
dpOutByte[7].0 := gCmd1.TangBreakerRob[usTangBreaker].TBrkToRob.bTangBroken;
dpOutByte[7].1 := gCmd1.TangBreakerRob[usTangBreaker].TBrkToRob.bTangNotBroken;
dpOutByte[7].2 := gCmd1.TangBreakerRob[usTangBreaker].TBrkToRob.bTangSucked;
dpOutByte[7].3 := gCmd1.TangBreakerRob[usTangBreaker].TBrkToRob.bTangNotSucked;
dpOutByte[7].4 := gCmd1.TangDetectionRob.TBrkToRob.bTangDetected;
//Ausgangs Byte 8 (64-71)
//Ausgangs Byte 9 (72-79)
//Ausgangs Byte 10 (80-87)
//Ausgangs Byte 11 (88-95)
dTemp :=(gCmd1.ScrewdriverRob[1].ScrToRob.diDepth);
dpOutByte[8] := DINT_TO_USINT (dTemp);
dpOutByte[9] := DINT_TO_USINT (SHR (dTemp, 8));
dpOutByte[10] := DINT_TO_USINT (SHR (dTemp, 16));
dpOutByte[11] := DINT_TO_USINT (SHR (dTemp, 24));
//Ausgangs Byte 12 (96-103)
//Ausgangs Byte 13 (104-111)
//Ausgangs Byte 14 (112-119)
//Ausgangs Byte 15 (120-127)
//Ausgangs Byte 16 (128-135)
//Ausgangs Byte 17 (136-143)
//Ausgangs Byte 18 (144-151)
//Ausgangs Byte 19 (152-159)
//Ausgangs Byte 20 (160-167)
//Ausgangs Byte 21 (168-175)
//Ausgangs Byte 22 (176-183)
//Ausgangs Byte 23 (184-191)
//Ausgangs Byte 24 (192-199)
//Ausgangs Byte 25 (200-207)
dpOutByte[25] := gABBRobot2.Out.usProgNr;
//Ausgangs Byte 26 (208-215)
//Ausgangs Byte 27 (216-223)
//Ausgangs Byte 28 (224-231)
dpOutByte[28] := gTestmachine.usOuHoleColumn;
//Ausgangs Byte 28 (232-239)
dpOutByte[29] := gTestmachine.usOuHoleNumber;
//Lochnummer auch an Schrauber wg logging
gCmd1.ScrewdriverRob[1].RobToScr.usHoleNr := gTestmachine.usOuHoleNumber;
END_PROGRAM

View File

@@ -0,0 +1,13 @@
VAR
lABBRobot : REFERENCE TO TypABBInterface2; (*Referenz to ABB Interface*)
dTemp : DINT;
usTangBreaker : USINT;
dpOutByte : ARRAY[0..63] OF USINT := [64(0)]; (*Raw Output Bytes Abb Interface*)
dpInByte : ARRAY[0..63] OF USINT := [64(0)]; (*Raw Input Bytes Abb Interface*)
TOF_Reset_EStop : TOF;
TON_Motors_On : TON;
TON_Lifebeat : TON;
bDiToolLocked : BOOL;
bDiToolUnlocked : BOOL;
bDoUnlockTool : BOOL;
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.4.7.144 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,38 @@
(*//Interface Machine*)
(*//Interface ABB Roboter*)
TYPE
typABBInterfaceIn2 : 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*)
bLifebeat : BOOL := FALSE; (*07 Lifebeat von Roboter (<28>ber CC zur<75>ckgeroutet)*)
bOpenGripper : BOOL := FALSE; (*16 Greifer <20>ffnen*)
bCloseGripper : BOOL := FALSE; (*17 Greifer Schlie<69>en*)
bWZHome : BOOL := FALSE; (*24 Roboter ist in Homepos*)
bWZChangetool : BOOL := FALSE; (*25 Roboter ist in Workzone ChangeTool*)
bWZOverHandFree : USINT;
usStatus : USINT := 0; (*200 Status*)
END_STRUCT;
typABBInterfaceOut2 : 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 (1Cycle)*)
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*)
usProgNr : USINT := 0; (*200 Programm Number*)
END_STRUCT;
TypABBInterface2 : STRUCT (*ABB Robot Interface*)
bOnline : BOOL; (*Kommuniktion OK*)
In : typABBInterfaceIn2; (*Eing<6E>nge von ABB Roboter*)
Out : typABBInterfaceOut2; (*Ausga<67>nge an aBB Roboter*)
END_STRUCT;
END_TYPE
(**)

View File

@@ -0,0 +1,5 @@
(*//Kommunikationsstrukturen*)
VAR RETAIN
gABBRobot2 : TypABBInterface2;
END_VAR
(*Variablen / Strukturen*)

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.4.7.144 SP?>
<Package xmlns="http://br-automation.co.at/AS/Package">
<Objects>
<Object Type="File" Description="Globale Typen ABB-Roboter">GlobalABBCom2.typ</Object>
<Object Type="File" Description="Globale Varibalen ABB-Roboter">GlobalABBCom2.var</Object>
<Object Type="Program" Language="IEC" Description="Communication to ABB Robot 1 (IRC 5 Version)">ABBCom2</Object>
</Objects>
</Package>

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,335 @@
PROGRAM _CYCLIC
//Zeiger auf Interface Stellen (Zyklisch wg. Download)
lEGPIf ACCESS ADR (gEGP1);
//lABBRobot ACCESS ADR (gABBRobot1);
//FixMe Error nur wenn ESTOP Ok
bEGPSupplyOk := gbSPLCInSafetySperation1Ok;
//FixMe Kraft
lEGPIf.Out.usForce := 3;
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 berechne
DoTimes;
//Stati
lEGPIf.In.bGripperIsOpen := (EGPIn.rPosition <= 0.1);
lEGPIf.In.bGripperIsClosed := FC_InTolerance (EGPIn.rPosition, Status.rPosClosed, -0.1, 0.1);
lEGPIf.In.bGripperIsClosedWithPart := FC_InTolerance (EGPIn.rPosition, Status.rPosClosed, -0.1, 0.1);
lEGPIf.In.bGripperDroppedPart := EGPIn.rPosition < (Status.rPosClosed + Parameter.rOpenRel + 0.1);
//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 (max. <EFBFBD>ffnung)
//---------------------------
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;
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;
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;
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;
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 := Status.rPosClosed + Parameter.rOpenRel; // 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;
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;
END_IF
END_IF
END_CASE
//Greifer ansteuern
EGPOu.usForce := lEGPIf.Out.usForce; //0 : 100%, 1 : 75%, 2 : 50%, 3 : 25%
EGPOu.bGripDirection := FALSE; //Force Aussengreifen
//Ausgangswrte 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,51 @@
(*//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 gtpy_EGP;
END_VAR
(*//Lokale Variablen*)
VAR
bCmdSent : BOOL;
bEGPSupplyOk : BOOL; (*EGP wird mit Spannung versorgt*)
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,2 @@
PROGRAM _INIT
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 TBrk-Ctrl">Action.st</File>
<File Description="Implementation code">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 Schrauber bezogen)*)
rOpenRel : REAL := -0.7; (*<2A>fnnen des Greifers*)
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,24 @@
(*//Interface EGP_Greifer*)
TYPE
gtpy_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*)
bGripperDroppedPart : BOOL; (*Greifer Teilweise ge<67>ffnet*)
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
gEGP1 : gtpy_EGP; (*g *)
END_VAR

View File

@@ -0,0 +1,10 @@
<?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">EGPCom</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,7 @@
(*Variablen / Strukturen*)
VAR
gudRFIDReader1ID : UDINT;
gudRFIDReader2ID : UDINT;
gudRFIDReader3ID : UDINT;
gudRFIDReader4ID : UDINT;
END_VAR

View File

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

View File

@@ -0,0 +1,94 @@
PROGRAM _INIT
//FixMe
bComDisabled := TRUE;
END_PROGRAM
PROGRAM _CYCLIC
//Erkennen welches Werkzeug
IF gToolsDetected.Screwdiver[1] THEN
usActScrewdriver := 1;
ELSE
usActScrewdriver := 0;
END_IF
IF NOT bComDisabled THEN
//Lifebeat usComIn[0].0;
//Reset Error := usComIn[0].1;
IF usActScrewdriver > 1 THEN
gCmd1.ScrewdriverRob[usActScrewdriver].RobToScr.bPowerOff := usComIn[1].0;
gCmd1.ScrewdriverRob[usActScrewdriver].RobToScr.bRobAwayFromOvHnd := usComIn[1].1;
gCmd1.ScrewdriverRob[usActScrewdriver].RobToScr.bRobInOvHndPos := usComIn[1].2;
gCmd1.ScrewdriverRob[usActScrewdriver].RobToScr.bRobInSetpos := usComIn[1].3;
END_IF
//Simu
usComOut[0].0 := gMachine1.bMachineON;
usComOut[0].1 := TRUE; //FixME kein Fehler
usComOut[0].2 := FALSE; //FixMe Vorwarnung Helicoils
usComOut[0].3 := FALSE;
usComOut[0].4 := FALSE;
usComOut[0].5 := FALSE;
usComOut[0].6 := FALSE;
usComOut[0].7 := FALSE;
usComOut[1].0 := TRUE; //FixMe Schrauber 1 als Werkzeug erkannt
IF usActScrewdriver > 1 THEN
usComOut[2].0 := gCmd1.ScrewdriverRob[usActScrewdriver].ScrToRob.bAxisRefereced;
usComOut[2].1 := gCmd1.ScrewdriverRob[usActScrewdriver].ScrToRob.bHCOnMandrel;
usComOut[2].2 := gCmd1.ScrewdriverRob[usActScrewdriver].ScrToRob.bMandelIsBack;
usComOut[2].3 := gCmd1.ScrewdriverRob[usActScrewdriver].ScrToRob.bMandrelLoadPos;
END_IF
//Feeder
usComOut[3].0 := TRUE; //FixMe FeedRobot is away - no collsion at Moment
usComOut[3].1 := gCmd1.FeederRob[1].FdToRob.bFeederIsLoaded;
usComOut[3].2 := gCmd1.FeederRob[1].FdToRob.bFeederisHome;
//pResults of Screwdriver
IF usActScrewdriver > 1 THEN
usComOut[4].0 := gCmd1.ScrewdriverRob[usActScrewdriver].ScrToRob.bHCSetOk;
usComOut[4].1 := gCmd1.ScrewdriverRob[usActScrewdriver].ScrToRob.bHCSetNOK;
usComOut[4].2 := gCmd1.ScrewdriverRob[usActScrewdriver].ScrToRob.bHCDidntReachFinalPos;
usComOut[4].3 := gCmd1.ScrewdriverRob[usActScrewdriver].ScrToRob.bHCTorqueToHighDuringSet;
usComOut[4].4 := gCmd1.ScrewdriverRob[usActScrewdriver].ScrToRob.bHCTorqueToSmallDuringSpindleOut;
usComOut[4].5 := gCmd1.ScrewdriverRob[usActScrewdriver].ScrToRob.bHCDidntDetectPart;
END_IF
//pResults of Screwdriver
IF usActScrewdriver > 1 THEN
dTemp := gCmd1.ScrewdriverRob[usActScrewdriver].ScrToRob.diDepth;
usComOut[7] := DINT_TO_USINT (dTemp);
usComOut[6] := DINT_TO_USINT (SHR (dTemp, 8));
usComOut[5] := DINT_TO_USINT (SHR (dTemp, 16));
usComOut[4] := DINT_TO_USINT (SHR (dTemp, 24));
dTemp := gCmd1.ScrewdriverRob[usActScrewdriver].ScrToRob.diPartPos;
usComOut[11] := DINT_TO_USINT (dTemp);
usComOut[10] := DINT_TO_USINT (SHR (dTemp, 8));
usComOut[9] := DINT_TO_USINT (SHR (dTemp, 16));
usComOut[8] := DINT_TO_USINT (SHR (dTemp, 24));
dTemp := gCmd1.ScrewdriverRob[usActScrewdriver].ScrToRob.diRevolutions;
usComOut[15] := DINT_TO_USINT (dTemp);
usComOut[14] := DINT_TO_USINT (SHR (dTemp, 8));
usComOut[13] := DINT_TO_USINT (SHR (dTemp, 16));
usComOut[12] := DINT_TO_USINT (SHR (dTemp, 24));
dTemp := gCmd1.ScrewdriverRob[usActScrewdriver].ScrToRob.diMaxTorqueSet;
usComOut[19] := DINT_TO_USINT (dTemp);
usComOut[18] := DINT_TO_USINT (SHR (dTemp, 8));
usComOut[17] := DINT_TO_USINT (SHR (dTemp, 16));
usComOut[16] := DINT_TO_USINT (SHR (dTemp, 24));
dTemp := gCmd1.ScrewdriverRob[usActScrewdriver].ScrToRob.diMaxTorqueSpindleOut;
usComOut[23] := DINT_TO_USINT (dTemp);
usComOut[22] := DINT_TO_USINT (SHR (dTemp, 8));
usComOut[21] := DINT_TO_USINT (SHR (dTemp, 16));
usComOut[20] := DINT_TO_USINT (SHR (dTemp, 24));
END_IF
END_PROGRAM

View File

@@ -0,0 +1,7 @@
(*//FunctionBlocks / Daten*)
TYPE
typ_FUB : STRUCT (*Funktionsbausteine*)
TOF_Lifeat : TOF;
END_STRUCT;
END_TYPE

View File

@@ -0,0 +1,9 @@
VAR
usComIn : {REDUND_UNREPLICABLE} ARRAY[0..31] OF USINT;
usComOut : {REDUND_UNREPLICABLE} ARRAY[0..31] OF USINT;
bComDisabled : BOOL; (*F<>r Inbetriebnahme*)
usActScrewdriver : USINT;
usActTangbreaker : USINT;
uiTemp : UINT;
dTemp : DINT;
END_VAR

View File

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

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.4.7.144 SP?>
<Package xmlns="http://br-automation.co.at/AS/Package">
<Objects>
<Object Type="File" Description="Logging Vars">GlobalCom.var</Object>
<Object Type="Program" Language="IEC" Description="13 Mhz Transponder B&amp;R + Scanner HR 100">RFID_USB</Object>
<Object Type="Package" Description="AnlagenInterface">MachIf</Object>
<Object Type="Package" Description="EGP-Greifer">EGP</Object>
<Object Type="Package" Description="Kommunikation mit ABB Roboter">ABBCom</Object>
<Object Type="Package" Description="Kommunikation mit ABB Roboter">ABBCom2</Object>
</Objects>
</Package>

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.7.144 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

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,68 @@
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_INIT_SET_AGC, (*Initialize Reader*)
enRFIDReaderStep_INIT_SET_RCVM, (*Initialize Reader*)
enRFIDReaderStep_IDLE, (*Wait for commands*)
enRFIDReaderStep_READ, (*READ from Reader*)
enRFIDReaderStep_WRITE (*WRITE to Reader*)
);
typ_FUBs : STRUCT (*Funktionsblocks*)
UsbNodeGet : {REDUND_UNREPLICABLE} UsbNodeGet;
UsbNodeListGet : {REDUND_UNREPLICABLE} UsbNodeListGet;
UsbDescriptorGet : {REDUND_UNREPLICABLE} UsbDescriptorGet;
FrameRead1 : {REDUND_UNREPLICABLE} FRM_read;
FrameRead2 : {REDUND_UNREPLICABLE} FRM_read;
FrameRead3 : {REDUND_UNREPLICABLE} FRM_read;
FrameRead4 : {REDUND_UNREPLICABLE} FRM_read;
FrameRead5 : {REDUND_UNREPLICABLE} FRM_read;
FrameReleaseBuffer1 : {REDUND_UNREPLICABLE} FRM_rbuf;
FrameReleaseBuffer2 : {REDUND_UNREPLICABLE} FRM_rbuf;
FrameReleaseBuffer3 : {REDUND_UNREPLICABLE} FRM_rbuf;
FrameReleaseBuffer4 : {REDUND_UNREPLICABLE} FRM_rbuf;
FrameReleaseBuffer5 : {REDUND_UNREPLICABLE} FRM_rbuf;
FrameWrite1 : {REDUND_UNREPLICABLE} FRM_write;
FrameWrite2 : {REDUND_UNREPLICABLE} FRM_write;
FrameWrite3 : {REDUND_UNREPLICABLE} FRM_write;
FrameWrite4 : {REDUND_UNREPLICABLE} FRM_write;
FrameWrite5 : {REDUND_UNREPLICABLE} FRM_write;
FrameXOpen1 : {REDUND_UNREPLICABLE} FRM_xopen;
FrameXOpen2 : {REDUND_UNREPLICABLE} FRM_xopen;
FrameXOpen3 : {REDUND_UNREPLICABLE} FRM_xopen;
FrameXOpen4 : {REDUND_UNREPLICABLE} FRM_xopen;
FrameXOpen5 : {REDUND_UNREPLICABLE} FRM_xopen;
TON_DelayUSB : TON;
TON_Read1 : {REDUND_UNREPLICABLE} TON;
TON_Read2 : {REDUND_UNREPLICABLE} TON;
TON_Read3 : {REDUND_UNREPLICABLE} TON;
TON_Read4 : {REDUND_UNREPLICABLE} TON;
TON_Read5 : {REDUND_UNREPLICABLE} TON;
TON_Timeout1 : {REDUND_UNREPLICABLE} TON;
TON_Timeout2 : {REDUND_UNREPLICABLE} TON;
TON_Timeout3 : {REDUND_UNREPLICABLE} TON;
TON_Timeout4 : {REDUND_UNREPLICABLE} TON;
TON_Timeout5 : {REDUND_UNREPLICABLE} TON;
END_STRUCT;
END_TYPE

View File

@@ -0,0 +1,76 @@
(*//Konfiguration*)
VAR
NEEDED_DEVICES : {REDUND_UNREPLICABLE} USINT := 1; (*Anzahl RFID Leser verbaut*)
udRFIDSerialReader1 : {REDUND_UNREPLICABLE} UDINT := 1; (*Serien Nr RFID Reader 1 (User Auth)*)
udRFIDSerialReader2 : {REDUND_UNREPLICABLE} UDINT := 0; (*Serien Nr RFID Reader 2 (Tool 1)*)
udRFIDSerialReader3 : {REDUND_UNREPLICABLE} UDINT := 0; (*Serien Nr RFID Reader 3 (Tool 2)*)
udRFIDSerialReader4 : {REDUND_UNREPLICABLE} UDINT := 0; (*Serien Nr RFID Reader 4*)
END_VAR
(*//---------------------------------------------*)
VAR
bDbgFlag : USINT;
sizeUsbNode : USINT;
END_VAR
VAR RETAIN
usNodeIx : USINT;
END_VAR
VAR
usi : USINT;
uij : UINT;
usFoundReaders : USINT;
usFoundScanner : USINT;
END_VAR
VAR RETAIN
usNodeIxSanner : USINT := 99; (*Node Index Scanner*)
usNodeIxReader1 : USINT := 99; (*Node Index Reader 1*)
usNodeIxReader2 : USINT := 99; (*Node Index Reader 2*)
usNodeIxReader3 : USINT := 99; (*Node Index Reader 3*)
usNodeIxReader4 : USINT := 99; (*Node Index Reader 4*)
END_VAR
VAR
usBlockNr : USINT;
usTemp : USINT;
udSerialNr : ARRAY[0..31] OF UDINT;
uiReadAnswer : ARRAY[1..5] OF UINT;
uiReadBufferLength : ARRAY[1..5] OF UINT;
uiReadCount : ARRAY[1..5] OF UINT;
uiLength : UINT;
udAttachDetachCount : UDINT;
udNodeList : ARRAY[0..31] OF UDINT;
pReadBuffer : ARRAY[1..5] OF UDINT;
udTemp : UDINT;
usTempSc : ARRAY[0..200] OF USINT;
udLastAuthRFID : UDINT;
udTemp2 : UDINT;
udWriteData : UDINT;
udErrors : ARRAY[1..5] OF UDINT;
strReadData : {REDUND_UNREPLICABLE} ARRAY[1..5] OF STRING[80];
strReadTag : ARRAY[1..5] OF STRING[80];
strDeviceDescr : ARRAY[1..5] OF WSTRING[80];
strWriteData : ARRAY[1..5] OF STRING[80];
strWriteDatalen : ARRAY[1..5] OF STRING[2];
strWriteTelegram : ARRAY[1..5] OF STRING[80];
strTemp : STRING[2];
enStep : typ_enStepRFID;
enStepReader1 : typ_enStepRFIDReader;
enStepReader1_Latch : typ_enStepRFIDReader;
enStepReader2 : typ_enStepRFIDReader;
enStepReader2_Latch : typ_enStepRFIDReader;
enStepReader3 : typ_enStepRFIDReader;
enStepReader3_Latch : typ_enStepRFIDReader;
enStepReader4 : typ_enStepRFIDReader;
enStepReader4_Latch : typ_enStepRFIDReader;
enStepScanner : typ_enStepRFIDReader;
enStepScanner_Latch : typ_enStepRFIDReader;
enCmd1 : typ_enCmdRFID;
enCmd2 : typ_enCmdRFID;
enCmd3 : typ_enCmdRFID;
enCmd4 : typ_enCmdRFID;
usbDevice : ARRAY[0..31] OF usbNode_typ;
FUBs : typ_FUBs;
END_VAR
VAR CONSTANT
TRANSPONDER_FTDI_VENDOR_ID : UINT := 16#0403;
TRANSPONDER_FTDI_PRODUCT_ID : UINT := 16#6001;
TRANSPONDER_FTDI_BCD : UINT := 16#0600;
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,324 @@
PROGRAM _CYCLIC
strDevice := 'CNC_PrgDir';
strPath := '';
//Parameter
VCCtrl.ListboxEdit.usMinIndex := 0;
VCCtrl.ListboxEdit.usMaxIndex := Parameter.usEditLines;
lstrEditline ACCESS ADR (strLines[VCCtrl.ListboxEdit.usIndexDatapoint]);
FUBs.TON_ReadDir.IN := NOT bReadDir;
FUBs.TON_ReadDir.PT := t#90s;
FUBs.TON_ReadDir ();
IF FUBs.TON_ReadDir.Q THEN
bReadDir := TRUE;
END_IF
CASE enDirStep OF
//auf Befehl warten
//=================================
enDirStep_WAIT:
IF bReadDir THEN
enDirStep := enDirStep_DIRINFO;
bReadDir := FALSE;
END_IF
//Verzeichnisinfo lesen
//=================================
enDirStep_DIRINFO:
FUBs.DirInfo.pDevice := ADR (strDevice);
FUBs.DirInfo.pPath := ADR (strPath);
FUBs.DirInfo.enable := TRUE;
IF (FUBs.DirInfo.status = ERR_OK) THEN
FUBs.DirInfo.enable := FALSE;
States.udFilesInDir := FUBs.DirInfo.filenum;
IF (States.udFilesInDir > 0) THEN
States.udFilesInDir := States.udFilesInDir - 1;
END_IF
VCCtrl.DropDownBoxFile.usMaxIndex := UDINT_TO_USINT (States.udFilesInDir);
udCurrentFile := 0;
enDirStep := enDirStep_READDIR;
ELSIF (FUBs.DirInfo.status < ERR_FUB_ENABLE_FALSE) THEN
//Fehler
FUBStates.DirInfo := FUBs.DirInfo.status;
FUBs.DirInfo.enable := FALSE;
enDirStep := enDirStep_WAIT;
END_IF
//Datei lesen
//=================================
enDirStep_READDIR:
FUBs.DirRead.enable := (udCurrentFile <= States.udFilesInDir);
FUBs.DirRead.entry := udCurrentFile;
FUBs.DirRead.pDevice := ADR (strDevice);
FUBs.DirRead.pPath := ADR (strPath);
FUBs.DirRead.option := fiFILE;
FUBs.DirRead.pData := ADR (DirReadData);
FUBs.DirRead.data_len := SIZEOF (DirReadData);
IF (udCurrentFile > States.udFilesInDir) THEN
enDirStep := enDirStep_WAIT;
ELSIF (FUBs.DirRead.status = ERR_OK) THEN
FUBs.DirRead.enable := FALSE;
enDirStep := enDirStep_BUILDLIST;
ELSIF (FUBs.DirRead.status < ERR_FUB_ENABLE_FALSE) THEN
//Fehler
FUBStates.DirRead := FUBs.DirRead.status;
FUBs.DirRead.enable := FALSE;
enDirStep := enDirStep_WAIT;
END_IF
//Liste Bilden
enDirStep_BUILDLIST:
brsmemcpy (ADR (gstrFilenames[udCurrentFile]), ADR (DirReadData.Filename), SIZEOF (gstrFilenames[0]));
udCurrentFile := udCurrentFile + 1;
enDirStep := enDirStep_READDIR;
END_CASE
//Buttons Anzeigen Verriegeln etc.
VCCtrl.LineDown.usStatus.0 := (enFileStep <> enFileStep_WAITCMD2);
VCCtrl.LineDown.usStatus.1 := (States.udOrgLineOffset[0] >= States.udFileLen);
VCCtrl.LineUp.usStatus.0 := (enFileStep <> enFileStep_WAITCMD2);
VCCtrl.LineUp.usStatus.1 := (States.udOrgLineOffset[0] = 0) AND (VCCtrl.ListboxEdit.usIndexDatapoint = 0);
VCCtrl.ScrollDown.usStatus.0 := (enFileStep <> enFileStep_WAITCMD2);
VCCtrl.ScrollDown.usStatus.1 := (States.udOrgLineOffset[0] >= States.udFileLen);
VCCtrl.ScrollUp.usStatus.0 := (enFileStep <> enFileStep_WAITCMD2);
VCCtrl.ScrollUp.usStatus.1 := (States.udOrgLineOffset[0] = 0);
VCCtrl.Cancel.usStatus.0 := (enFileStep <> enFileStep_WAITCMD2);
VCCtrl.DropDownBoxFile.usStatus.0 := (enFileStep <> enFileStep_WAIT);
VCCtrl.LoadEdit.usStatus.0 := (enFileStep <> enFileStep_WAIT);
CASE enFileStep OF
//auf Befehl warten
//=================================
enFileStep_WAIT:
FUBs.FileOpen.enable := FALSE;
strFile := gstrFilenames[usEditFileSelection];
IF VCCtrl.LoadEdit.bCommand THEN
VCCtrl.LoadEdit.bCommand := FALSE;
VCCtrl.DropDownBoxFile.bCompletion := FALSE;
enFileStep := enFileStep_OPEN;
END_IF
IF (States.udFileHandle > 0) THEN
//Offenes File schlie<EFBFBD>en
FUBs.FileClose.ident := States.udFileHandle;
enFileStep := enFileStep_CLOSE;
END_IF
//Datei <EFBFBD>ffnen
//=================================
enFileStep_OPEN:
FUBs.FileOpen.mode := fiREAD_WRITE;
FUBs.FileOpen.pDevice := ADR (strDevice);
FUBs.FileOpen.pFile := ADR (strFile);
FUBs.FileOpen.enable := TRUE;
IF (FUBs.FileOpen.status = ERR_OK) THEN
FUBs.FileOpen.enable := FALSE;
enFileStep := enFileStep_READLINE;
States.udFileHandle := FUBs.FileOpen.ident;
States.udReadlineOffset := 0;
States.uiCurrentBlockLine := 0;
States.udFileLen := FUBs.FileOpen.filelen;
ELSIF (FUBs.FileOpen.status < ERR_FUB_ENABLE_FALSE) THEN
//Fehler
FUBs.FileOpen.enable := FALSE;
enFileStep := enFileStep_WAIT;
States.udFileHandle := 0;
END_IF
//Datei "Zeile Lesen"
//=================================
enFileStep_READLINE:
FUBs.FileRead.ident := States.udFileHandle;
FUBs.FileRead.offset := States.udReadlineOffset;
FUBs.FileRead.pDest := ADR (strReadBuffer);
FUBs.FileRead.len := SIZEOF (strReadBuffer);
FUBs.FileRead.enable := TRUE;
IF (FUBs.FileRead.status = ERR_OK) THEN
FUBs.FileRead.enable := FALSE;
States.udReadLineLen := FUBs.FileRead.bytesread;
IF (States.udReadLineLen = 0) THEN
enFileStep := enFileStep_WAITCMD2;
FOR usi := UINT_TO_USINT (States.uiCurrentBlockLine) TO Parameter.usEditLines DO
brsmemset (ADR (strLines[usi]), 0, SIZEOF (strLines[usi]));
END_FOR
ELSE
enFileStep := enFileStep_PARSELINE;
END_IF
ELSIF (FUBs.FileRead.status < ERR_FUB_ENABLE_FALSE) THEN
//Fehler
FUBs.FileRead.enable := FALSE;
//Offenes File schlie<EFBFBD>en
FUBs.FileClose.ident := States.udFileHandle;
enFileStep := enFileStep_CLOSE;
END_IF
//Gelesene Zeile parsen
//=================================
enFileStep_PARSELINE:
FOR udi := 0 TO (States.udReadLineLen - 2) DO
IF (brsmemcmp (ADR (strReadBuffer) + udi, ADR (strLineEnd), 2) = 0) THEN
brsmemcpy (ADR (strLines[States.uiCurrentBlockLine]), ADR (strReadBuffer), udi);
//Offset und L<EFBFBD>nge speichern und Zeiter weiterstellen
States.udOrgLineLen[States.uiCurrentBlockLine] := udi;
States.udOrgLineOffset[States.uiCurrentBlockLine] := States.udReadlineOffset;
States.udReadlineOffset := States.udReadlineOffset + udi + 2;
brsmemset (ADR (strLines[States.uiCurrentBlockLine]) + udi, 0, 1);
States.uiCurrentBlockLine := States.uiCurrentBlockLine + 1;
IF States.uiCurrentBlockLine = Parameter.usEditLines THEN
enFileStep := enFileStep_WAITCMD2;
EXIT;
ELSE
brsmemset (ADR (strReadBuffer) + udi, 0, SIZEOF (strReadBuffer));
enFileStep := enFileStep_READLINE;
EXIT;
END_IF
END_IF
END_FOR
//Auf neue Befehle warten
//=================================
enFileStep_WAITCMD2:
IF VCCtrl.ScrollDown.bCommand AND (States.udOrgLineOffset[0] < States.udFileLen) THEN
FOR usi := 0 TO Parameter.usPageLines DO
//Zeilen shiften
brsstrcpy (ADR (strLines[usi]), ADR (strLines[usi + Parameter.usPageLines]));
END_FOR
States.uiCurrentBlockLine := Parameter.usPageLines;
VCCtrl.ScrollDown.bCommand := FALSE;
enFileStep := enFileStep_READLINE;
ELSIF VCCtrl.ScrollUp.bCommand AND (States.udOrgLineOffset[0] > 0) THEN
VCCtrl.ScrollUp.bCommand := FALSE;
States.udReadlineOffset := 0;
States.uiCurrentBlockLine := 0;
enFileStep := enFileStep_READLINE;
ELSIF VCCtrl.LineUp.bCommand THEN
IF (VCCtrl.ListboxEdit.usIndexDatapoint > 0) THEN
VCCtrl.ListboxEdit.usIndexDatapoint := VCCtrl.ListboxEdit.usIndexDatapoint - 1;
ELSIF (States.udOrgLineOffset[0] > 0) THEN
//Seite scrollen
VCCtrl.ScrollUp.bCommand := FALSE;
END_IF
VCCtrl.LineUp.bCommand := FALSE;
ELSIF VCCtrl.LineDown.bCommand THEN
IF (VCCtrl.ListboxEdit.usIndexDatapoint < VCCtrl.ListboxEdit.usMaxIndex) THEN
VCCtrl.ListboxEdit.usIndexDatapoint := VCCtrl.ListboxEdit.usIndexDatapoint + 1;
ELSIF (States.udOrgLineOffset[0] < States.udFileLen) THEN
VCCtrl.ScrollDown.bCommand := TRUE;
END_IF
VCCtrl.LineDown.bCommand := FALSE;
ELSIF VCCtrl.Cancel.bCommand THEN
VCCtrl.Cancel.bCommand := FALSE;
enFileStep := enFileStep_CLOSE;
END_IF
IF VCCtrl.LineEdit.bCompletion THEN
VCCtrl.LineEdit.bCompletion := FALSE;
//Eingabe abgeschlossen
udNewLen := brsstrlen (ADR (lstrEditline));
brsmemset (ADR (strWriteBuffer) + udi, 0, SIZEOF (strWriteBuffer));
brsstrcpy (ADR (strWriteBuffer), ADR (lstrEditline));
brsstrcat (ADR (strWriteBuffer), ADR (strLineEnd));
IF (udNewLen = States.udOrgLineLen[VCCtrl.ListboxEdit.usIndexDatapoint]) THEN
//Gleiche L<EFBFBD>nge einfach <EFBFBD>berschreiben
enFileStep := enFileStep_WRITELINE;
ELSE
enFileStep := enFileStep_READFILEREST;
END_IF
END_IF
//Restliches File auslesen
//=================================
enFileStep_READFILEREST:
FUBs.FileRead.ident := States.udFileHandle;
FUBs.FileRead.offset := States.udOrgLineOffset[VCCtrl.ListboxEdit.usIndexDatapoint] +
States.udOrgLineLen[VCCtrl.ListboxEdit.usIndexDatapoint] + 2;
FUBs.FileRead.pDest := ADR (usBuffer);
FUBs.FileRead.len := SIZEOF (usBuffer);
FUBs.FileRead.enable := TRUE;
IF (FUBs.FileRead.status = ERR_OK) THEN
FUBs.FileRead.enable := FALSE;
States.udReadFileRestLen := FUBs.FileRead.bytesread;
enFileStep := enFileStep_WRITELINE;
ELSIF (FUBs.FileRead.status < ERR_FUB_ENABLE_FALSE) THEN
//Fehler
FUBs.FileRead.enable := FALSE;
//Offenes File schlie<EFBFBD>en
FUBs.FileClose.ident := States.udFileHandle;
enFileStep := enFileStep_CLOSE;
END_IF
//Ge<EFBFBD>nderte Zeile in Datei schreiben
//=================================
enFileStep_WRITELINE:
FUBs.FileWrite.ident := States.udFileHandle;
FUBs.FileWrite.pSrc := ADR (strWriteBuffer);
FUBs.FileWrite.offset := States.udOrgLineOffset[VCCtrl.ListboxEdit.usIndexDatapoint];
FUBs.FileWrite.len := brsstrlen (ADR (strWriteBuffer));
FUBs.FileWrite.option := 0; //No Trunc
FUBs.FileWrite.enable := TRUE;
IF (FUBs.FileWrite.status = ERR_OK) THEN
FUBs.FileWrite.enable := FALSE;
IF (udNewLen = States.udOrgLineLen[VCCtrl.ListboxEdit.usIndexDatapoint]) THEN
//Editierte Zeile ohne L<EFBFBD>ngen<EFBFBD>nderung
enFileStep := enFileStep_WAITCMD2;
ELSE
enFileStep := enFileStep_WriteFILEREST;
END_IF
ELSIF (FUBs.FileWrite.status < ERR_FUB_ENABLE_FALSE) THEN
//Fehler
FUBs.FileWrite.enable := FALSE;
//Offenes File schlie<EFBFBD>en
FUBs.FileClose.ident := States.udFileHandle;
enFileStep := enFileStep_CLOSE;
END_IF
//Restdaten in Datei schreiben
//=================================
enFileStep_WriteFILEREST:
FUBs.FileWrite.ident := States.udFileHandle;
FUBs.FileWrite.pSrc := ADR (usBuffer);
FUBs.FileWrite.offset := States.udOrgLineOffset[VCCtrl.ListboxEdit.usIndexDatapoint] + brsstrlen (ADR (strWriteBuffer));
FUBs.FileWrite.len := States.udReadFileRestLen;
FUBs.FileWrite.option := 1; //With Trunc
FUBs.FileWrite.enable := TRUE;
IF (FUBs.FileWrite.status = ERR_OK) THEN
FUBs.FileWrite.enable := FALSE;
States.udReadlineOffset := States.udOrgLineOffset[VCCtrl.ListboxEdit.usIndexDatapoint];
States.uiCurrentBlockLine := VCCtrl.ListboxEdit.usIndexDatapoint;
enFileStep := enFileStep_READLINE;
ELSIF (FUBs.FileWrite.status < ERR_FUB_ENABLE_FALSE) THEN
//Fehler
FUBs.FileWrite.enable := FALSE;
//Offenes File schlie<EFBFBD>en
FUBs.FileClose.ident := States.udFileHandle;
enFileStep := enFileStep_CLOSE;
END_IF
//Datei schlie<EFBFBD>en
//=================================
enFileStep_CLOSE:
FUBs.FileClose.enable := TRUE;
IF (FUBs.FileClose.status = ERR_OK) OR (FUBs.FileClose.status < ERR_FUB_ENABLE_FALSE) THEN
FUBs.FileClose.enable := FALSE;
States.udFileHandle := 0;
enFileStep := enFileStep_WAIT;
END_IF
END_CASE
FUBs.DirInfo ();
FUBs.DirRead ();
FUBs.FileOpen ();
FUBs.FileRead ();
FUBs.FileWrite ();
FUBs.FileClose ();
END_PROGRAM

View File

@@ -0,0 +1,6 @@
PROGRAM _EXIT
(* Insert code here *)
END_PROGRAM

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,4 @@
PROGRAM _CYCLIC
(* Insert code here *)
END_PROGRAM

View File

@@ -0,0 +1,6 @@
PROGRAM _EXIT
(* Insert code here *)
END_PROGRAM

View File

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

View File

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

View File

@@ -0,0 +1,8 @@
(*//FunctionBlocks / Daten*)
TYPE
typ_MpFUB : STRUCT (*Funktionsbausteine*)
MpFileManagerUI : MpFileManagerUI;
MpFileManagerConfig : MpFileManagerConfig;
END_STRUCT;
END_TYPE

View File

@@ -0,0 +1,4 @@
(*//Funktionsbl<62>cke*)
VAR
MpFUBs : typ_MpFUB;
END_VAR

View File

@@ -0,0 +1,3 @@
VAR
gstrFilenames : ARRAY[0..100] OF STRING[25];
END_VAR

10
Logical/File/Package.pkg Normal file
View File

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

View File

@@ -0,0 +1,3 @@
VAR
VisuPageCtrl_File : gtyp_VisuCtrlPage; (*Seiteninterface allgemein*)
END_VAR

View File

@@ -0,0 +1,97 @@
TYPE
gtyp_ACPinverter : STRUCT (*Acopos Inverter*)
bModuleOK : BOOL;
In : gtyp_ACPinverterIn;
Out : gtyp_ACPinverterOut;
END_STRUCT;
gtyp_ACPinverterIn : 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;
gtyp_ACPinverterOut : 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;
gtyp_PushButton : 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;
gtyp_PowerSupply : STRUCT (*80PS Stromversorgung*)
In : gtyp_PowerSupplyInuts;
Out : gtyp_PowerSupplyOutputs;
END_STRUCT;
gtyp_PowerSupplyInuts : STRUCT (*80PS Stromversorgung*)
bIurrentLimitActive : BOOL; (*Strombegrenzung 01 aktiv*)
siVoltage : SINT; (*Ausgangsspannung 01 [V]*)
iCurrent : INT; (*Ausgangsstrom [0.1 A]*)
bErrorOutput : BOOL; (*Ausgang abgeschaltet*)
bErrorPhaseDetection : BOOL; (*Phasenausfall*)
bErrorOvertemperature : BOOL; (*<2A>bertemperatur*)
bErrorOverload : BOOL; (*<2A>berlast*)
bErrorOverVoltage : BOOL; (*<2A>berstrom*)
bError24VDC : BOOL; (*Fehler 24 Ausgang*)
END_STRUCT;
gtyp_PowerSupplyOutputs : STRUCT (*80PS Stromversorgung*)
bClearError : BOOL; (*St<53>rung quittieren*)
END_STRUCT;
END_TYPE

View File

@@ -0,0 +1,108 @@
(*================================================================================================================*)
(*CPU (PWLnk Node 240)*)
(*----------------------------------------------------------------------------------------------------------------*)
VAR
gusBatteryStateCPU : USINT; (*Batterie Status CPU (0=Schwach, 1=Ok)*)
guiTemperatureCPU : UINT; (*CPU Temperatur [0.1<EFBFBD>C]*)
guiTemperatureENV : UINT; (*Umgebungstemperatur [0.1<EFBFBD>C]*)
gdiSystemTime : DINT; (*Systemzeit [<5B>s]*)
END_VAR
(*----------------------------------------------------------------------------------------------------------------*)
(*IF6.ST1 - 20K1 CMR111*)
(*----------------------------------------------------------------------------------------------------------------*)
VAR
giRelHumidityCabinet : INT; (*Luftfeuchtigkeit Schaltschrank [%]*)
giTemperatureCabinet : INT; (*Temperatur Schaltschrank [0.1<EFBFBD>C]*)
giAccelerationCabinet1 : INT; (*Beschleunigung Achse 1 16g = 32767*)
giAccelerationCabinet2 : INT; (*Beschleunigung Achse 2 16g = 32767*)
giAccelerationCabinet3 : INT; (*Beschleunigung Achse 3 16g = 32767*)
giRotationCabinet1 : INT; (*Drehrate Achse 1 2000dps = 32767*)
giRotationCabinet2 : INT; (*Drehrate Achse 2 2000dps = 32767*)
giRotationCabinet3 : INT; (*Drehrate Achse 3 2000dps = 32767*)
END_VAR
(*----------------------------------------------------------------------------------------------------------------*)
(*IF6.ST2 - 21K1 SLX410*)
(*----------------------------------------------------------------------------------------------------------------*)
VAR
gbIF6ST1ModuleOk : BOOL;
END_VAR
(*----------------------------------------------------------------------------------------------------------------*)
(*Signals to Safe PLC*)
(*----------------------------------------------------------------------------------------------------------------*)
VAR
gbSPLCMachineOn : BOOL;
gbSPLCJogMode : BOOL; (*Handbetrieb*)
gbSPLCResetEStop : BOOL; (*Not-Halt Quittierung ??*)
gbSPLCReadbackEStop : BOOL; (*R<>ckf<6B>hrkreis Not-Halt an <20>bergeordnete Maschine*)
gbSPLCReadbackSafetyScrewdriver1 : BOOL; (*R<>ckf<6B>hrkreis*)
gbSPLCReadbackSafetySeperation1 : BOOL; (*R<>ckf<6B>hrkreis*)
gbSPLCResetReadbackError : BOOL; (*Reset R<>ckf<6B>hrkreisfehler*)
END_VAR
(*2 R<>cklesesignale direkt von Eingang gemappt*)
(*----------------------------------------------------------------------------------------------------------------*)
(*Signals from Safe PLC*)
(*----------------------------------------------------------------------------------------------------------------*)
VAR
gbSPLCInEstopOk : BOOL; (*Safety PLC E-Stop ist Ok*)
gbSPLCInSafetySperation1Ok : BOOL; (*Safety PLC Sicherheit Vereinzelung 1 Ok*)
gbSPLCInSafetyScrewdriver1Ok : BOOL; (*Safety PLC Sicherheit Schrauber 1 Ok*)
gbSPLCInRdbckErrorEStop : BOOL; (*Safety PLC R<>cklesefehler Not-Halt an <20>bergeordnete Maschine*)
gbSPLCInRdbckErrorSeperation1 : BOOL; (*Safety PLC R<>cklesefehler Sicherheit Vereinzelung 1*)
gbSPLCInRdbckErrorScrewdriver1 : BOOL; (*Safety PLC R<>cklesefehler Sicherheit Schrauber 1*)
END_VAR
(*----------------------------------------------------------------------------------------------------------------*)
(*I/O from SLX*)
(*----------------------------------------------------------------------------------------------------------------*)
VAR
gbSInEStop1 : BOOL; (*Sicherer Eingang 01/02 Equivalent - Nothalt 1 Optional*)
gbSInEStop2 : BOOL; (*Sicherer Eingang 02/03 Equivalent - Nothalt 2 Optional*)
END_VAR
(*----------------------------------------------------------------------------------------------------------------*)
(*IF6.ST3 - 21K2 SC2212*)
(*----------------------------------------------------------------------------------------------------------------*)
VAR
gbSInEStopExt : BOOL; (*Sicherer Eingang 01/02 Equivalent - Nothalt Extern*)
gbSInSafetyExt : BOOL; (*Sicherer Eingang 03/04 Equivalent - Sicherheit Extern*)
gbSInEStop3 : BOOL; (*Sicherer Eingang 05/06 Equivalent - Nothalt 3 Optional*)
gbSOuEnableAxisSpindle1 : BOOL; (*Sicherer Ausgang 01 - STO Achse Spindel 1*)
gbSOuMainValve : BOOL; (*Sicherer Ausgang 02 - Hauptventil*)
END_VAR
(*----------------------------------------------------------------------------------------------------------------*)
(*IF6.ST4 - 21K3 SSO4110*)
(*----------------------------------------------------------------------------------------------------------------*)
VAR
gbSOuSafetyOkToExt : BOOL; (*Sicherer Ausgang 02 - Sicherheitseinrichtungen OK an <20>bergeordnete Maschine (Optional)*)
END_VAR
(*----------------------------------------------------------------------------------------------------------------*)
(*IF6.ST5 - 22K1 - DI9371 (Eing<6E>nge Allgemein)*)
(*----------------------------------------------------------------------------------------------------------------*)
VAR
gbInFdBckEStopToExt : BOOL; (*R<>ckf<6B>hrkreis Not-Halt an <20>bergeordnete Maschine*)
gbInFdBckSafetyOkToExt : BOOL; (*R<>ckf<6B>hrkreis Sicherheiseinrichtungen OK an <20>Bergeordnete Maschine*)
gbInFuse10F3Ok : BOOL; (*24V Versorgung Extern Ok*)
gbInFdBackAir : BOOL; (*Abfrage Luft*)
gbSOuEStopOkToExt : BOOL; (*Sicherer Ausgang 01 - Not-Halt an <20>bergeordnete Maschine*)
END_VAR
(*----------------------------------------------------------------------------------------------------------------*)
(*IF6.ST6 - 22K2 - DO9322 ( Ausg<73>nge Allgemein)*)
(*----------------------------------------------------------------------------------------------------------------*)
(*================================================================================================================*)
(*IF3.ST2 - Vereinzelung*)
(*----------------------------------------------------------------------------------------------------------------*)
(*IF3.ST2.IF1.ST2 - 208K4 SI4100*)
(*----------------------------------------------------------------------------------------------------------------*)
VAR
gbSInEStopRobot : BOOL; (*Sicherer Eingang 01/02 Equivalent - Nothalt von Roboter*)
END_VAR
(*----------------------------------------------------------------------------------------------------------------*)
(*IF3.ST2.IF1.ST3 - 208K5 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*)
gbSOuSafetySeperationOk : BOOL; (*Sicherer Ausgang 05/06 Sicherheit f<>r Vereinzelung Ok (Versorgung Greifer / Hauptventil)*)
END_VAR
(*----------------------------------------------------------------------------------------------------------------*)
(*----------------------------------------------------------------------------------------------------------------*)
(*----------------------------------------------------------------------------------------------------------------*)
(*----------------------------------------------------------------------------------------------------------------*)

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.4.7.144 SP?>
<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,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

View File

@@ -0,0 +1,32 @@
TYPE
ArTextSysLanguageCodeType : STRING[18]; (*String-type for language ID*)
(*Enumeration for ArTextSysGetText-FUBs*)
ArTextSysSearchModeEnum :
(
arTEXTSYS_SEARCH_FALLBACK_SUBST, (*with fallback-languages or substitute*)
arTEXTSYS_SEARCH_LANGUAGE_ONLY, (*search for matching language only*)
arTEXTSYS_SEARCH_FALLBACK (*with fallback-searches, no substitute*)
);
(*argument-properties for formatter*)
ArTextSysFormatArgumentType : STRUCT
Datatype : UINT; (*type of argument; eg. IEC_DATATYPE_UDINT*)
Data : UDINT; (*pointer to Argument*)
UnitNamespace : UDINT; (*namespace of UnitID; default OPC-UA recommended*)
UnitID : UDINT;
END_STRUCT;
(*Internal type(s) for FUB-processing*)
ArTextSysExec1InternalType : STRUCT
i_serno : UINT;
i_state : UINT;
Result : DINT;
END_STRUCT;
ArTextSysIter1InternalType : STRUCT
i_base : ArTextSysExec1InternalType;
m_iter : DINT; (*internal iterator; eg. ArTextSysGetNamespaceLanguages*)
END_STRUCT;
END_TYPE

View File

@@ -0,0 +1,21 @@
VAR CONSTANT
arTEXTSYS_ERR_OUT_OF_MEMORY : UDINT := 16#C030_280A; (*fatal error: out of memory*)
arTEXTSYS_ERR_INVALID_ARG : UDINT := 16#8030_280B; (*provided argument is invalid*)
arTEXTSYS_ERR_FAILED : UDINT := 16#8030_280C; (*internal operation failure*)
arTEXTSYS_ERR_ACCESS_DENIED : UDINT := 16#8030_280D; (*resource-access denied*)
arTEXTSYS_ERR_INVALID_HANDLE : UDINT := 16#8030_280E; (*invalid handle detected*)
arTEXTSYS_ERR_CANT_OPEN_TEXTDB : UDINT := 16#8030_2811; (*opening of text-db failed*)
arTEXTSYS_INF_ALREADY_OPENED : DINT := 16#4030_2812; (*text-db is open and ready*)
arTEXTSYS_ERR_TEXTDB_SCHEMA : UDINT := 16#8030_2813; (*unrecognised text-db schema or structure*)
arTEXTSYS_ERR_TEXTDB_READER : UDINT := 16#8030_2814; (*read of open text-db failed*)
arTEXTSYS_ERR_TEXTDB_INTERNAL : UDINT := 16#8030_2815; (*other kind of text-db error*)
arTEXTSYS_INF_NOT_SET_DURABLE : DINT := 16#4030_2816; (*configuration-change is not durable*)
arTEXTSYS_ERR_NO_TEXT_FOUND : UDINT := 16#8030_2818; (*no requested text found*)
arTEXTSYS_INF_LANGUAGE_DIFFERS : DINT := 16#4030_281A; (*text-language differs; not in requested language*)
arTEXTSYS_INF_SUBSTITUTE_TEXT : DINT := 16#4030_281B; (*no text found, but substitute-text provided*)
arTEXTSYS_ERR_NOT_EXISTS : UDINT := 16#8030_281C; (*record not found; doesn't exist*)
arTEXTSYS_ERR_END_REACHED : UDINT := 16#8030_281D; (*no further suitable entry found*)
END_VAR

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.4.8.122 SP?>
<Library Description="IEC Text-System Library." xmlns="http://br-automation.co.at/AS/Library">
<Files>
<File>ArTextSys.fun</File>
<File>ArTextSys.typ</File>
<File>ArTextSys.var</File>
</Files>
</Library>

View File

@@ -0,0 +1,221 @@
/* Automation Studio generated header file */
/* Do not edit ! */
#ifndef _ARTEXTSYS_
#define _ARTEXTSYS_
#ifdef __cplusplus
extern "C"
{
#endif
#include <bur/plctypes.h>
#ifndef _BUR_PUBLIC
#define _BUR_PUBLIC
#endif
/* Constants */
#ifdef _REPLACE_CONST
#define arTEXTSYS_ERR_END_REACHED 2150639645U
#define arTEXTSYS_ERR_NOT_EXISTS 2150639644U
#define arTEXTSYS_INF_SUBSTITUTE_TEXT 1076897819
#define arTEXTSYS_INF_LANGUAGE_DIFFERS 1076897818
#define arTEXTSYS_ERR_NO_TEXT_FOUND 2150639640U
#define arTEXTSYS_INF_NOT_SET_DURABLE 1076897814
#define arTEXTSYS_ERR_TEXTDB_INTERNAL 2150639637U
#define arTEXTSYS_ERR_TEXTDB_READER 2150639636U
#define arTEXTSYS_ERR_TEXTDB_SCHEMA 2150639635U
#define arTEXTSYS_INF_ALREADY_OPENED 1076897810
#define arTEXTSYS_ERR_CANT_OPEN_TEXTDB 2150639633U
#define arTEXTSYS_ERR_INVALID_HANDLE 2150639630U
#define arTEXTSYS_ERR_ACCESS_DENIED 2150639629U
#define arTEXTSYS_ERR_FAILED 2150639628U
#define arTEXTSYS_ERR_INVALID_ARG 2150639627U
#define arTEXTSYS_ERR_OUT_OF_MEMORY 3224381450U
#else
#ifndef _GLOBAL_CONST
#define _GLOBAL_CONST _WEAK const
#endif
_GLOBAL_CONST unsigned long arTEXTSYS_ERR_END_REACHED;
_GLOBAL_CONST unsigned long arTEXTSYS_ERR_NOT_EXISTS;
_GLOBAL_CONST signed long arTEXTSYS_INF_SUBSTITUTE_TEXT;
_GLOBAL_CONST signed long arTEXTSYS_INF_LANGUAGE_DIFFERS;
_GLOBAL_CONST unsigned long arTEXTSYS_ERR_NO_TEXT_FOUND;
_GLOBAL_CONST signed long arTEXTSYS_INF_NOT_SET_DURABLE;
_GLOBAL_CONST unsigned long arTEXTSYS_ERR_TEXTDB_INTERNAL;
_GLOBAL_CONST unsigned long arTEXTSYS_ERR_TEXTDB_READER;
_GLOBAL_CONST unsigned long arTEXTSYS_ERR_TEXTDB_SCHEMA;
_GLOBAL_CONST signed long arTEXTSYS_INF_ALREADY_OPENED;
_GLOBAL_CONST unsigned long arTEXTSYS_ERR_CANT_OPEN_TEXTDB;
_GLOBAL_CONST unsigned long arTEXTSYS_ERR_INVALID_HANDLE;
_GLOBAL_CONST unsigned long arTEXTSYS_ERR_ACCESS_DENIED;
_GLOBAL_CONST unsigned long arTEXTSYS_ERR_FAILED;
_GLOBAL_CONST unsigned long arTEXTSYS_ERR_INVALID_ARG;
_GLOBAL_CONST unsigned long arTEXTSYS_ERR_OUT_OF_MEMORY;
#endif
/* Datatypes and datatypes of function blocks */
typedef enum ArTextSysSearchModeEnum
{ arTEXTSYS_SEARCH_FALLBACK_SUBST,
arTEXTSYS_SEARCH_LANGUAGE_ONLY,
arTEXTSYS_SEARCH_FALLBACK
} ArTextSysSearchModeEnum;
typedef struct ArTextSysFormatArgumentType
{ unsigned short Datatype;
unsigned long Data;
unsigned long UnitNamespace;
unsigned long UnitID;
} ArTextSysFormatArgumentType;
typedef struct ArTextSysExec1InternalType
{ unsigned short i_serno;
unsigned short i_state;
signed long Result;
} ArTextSysExec1InternalType;
typedef struct ArTextSysIter1InternalType
{ struct ArTextSysExec1InternalType i_base;
signed long m_iter;
} ArTextSysIter1InternalType;
typedef plcstring ArTextSysLanguageCodeType[19];
typedef struct ArTextSysGetSystemLanguage
{
/* VAR_OUTPUT (analog) */
signed long StatusID;
ArTextSysLanguageCodeType LanguageCode;
/* VAR (analog) */
struct ArTextSysExec1InternalType Internal;
/* VAR_INPUT (digital) */
plcbit Execute;
/* VAR_OUTPUT (digital) */
plcbit Done;
plcbit Busy;
plcbit Error;
} ArTextSysGetSystemLanguage_typ;
typedef struct ArTextSysSetSystemLanguage
{
/* VAR_INPUT (analog) */
ArTextSysLanguageCodeType LanguageCode;
/* VAR_OUTPUT (analog) */
signed long StatusID;
/* VAR (analog) */
struct ArTextSysExec1InternalType Internal;
/* VAR_INPUT (digital) */
plcbit Execute;
/* VAR_OUTPUT (digital) */
plcbit Done;
plcbit Busy;
plcbit Error;
} ArTextSysSetSystemLanguage_typ;
typedef struct ArTextSysGetNamespaceLanguages
{
/* VAR_INPUT (analog) */
unsigned long Namespace;
/* VAR_OUTPUT (analog) */
signed long StatusID;
ArTextSysLanguageCodeType LanguageCode;
/* VAR (analog) */
struct ArTextSysIter1InternalType Internal;
/* VAR_INPUT (digital) */
plcbit Execute;
plcbit First;
/* VAR_OUTPUT (digital) */
plcbit Done;
plcbit Busy;
plcbit Error;
plcbit EndOfList;
} ArTextSysGetNamespaceLanguages_typ;
typedef struct ArTextSysGetText
{
/* VAR_INPUT (analog) */
unsigned long Namespace;
unsigned long TextID;
ArTextSysLanguageCodeType LanguageCode;
unsigned long TextBufferSize;
unsigned long TextBuffer;
enum ArTextSysSearchModeEnum SearchMode;
/* VAR_OUTPUT (analog) */
signed long StatusID;
unsigned long TextSize;
/* VAR (analog) */
struct ArTextSysExec1InternalType Internal;
/* VAR_INPUT (digital) */
plcbit Execute;
/* VAR_OUTPUT (digital) */
plcbit Done;
plcbit Busy;
plcbit Error;
} ArTextSysGetText_typ;
typedef struct ArTextSysFormatString
{
/* VAR_INPUT (analog) */
unsigned long FormatString;
unsigned short ArgumentCount;
struct ArTextSysFormatArgumentType ArgumentList[10];
ArTextSysLanguageCodeType LanguageCode;
unsigned long MeasurementCode;
unsigned long TextBufferSize;
unsigned long TextBuffer;
/* VAR_OUTPUT (analog) */
signed long StatusID;
unsigned long TextSize;
/* VAR (analog) */
struct ArTextSysExec1InternalType Internal;
/* VAR_INPUT (digital) */
plcbit Execute;
/* VAR_OUTPUT (digital) */
plcbit Done;
plcbit Busy;
plcbit Error;
} ArTextSysFormatString_typ;
typedef struct ArTextSysGetFormattedText
{
/* VAR_INPUT (analog) */
unsigned long Namespace;
unsigned long TextID;
unsigned short ArgumentCount;
struct ArTextSysFormatArgumentType ArgumentList[10];
ArTextSysLanguageCodeType LanguageCode;
unsigned long MeasurementCode;
unsigned long TextBufferSize;
unsigned long TextBuffer;
enum ArTextSysSearchModeEnum SearchMode;
/* VAR_OUTPUT (analog) */
signed long StatusID;
unsigned long TextSize;
/* VAR (analog) */
struct ArTextSysExec1InternalType Internal;
/* VAR_INPUT (digital) */
plcbit Execute;
/* VAR_OUTPUT (digital) */
plcbit Done;
plcbit Busy;
plcbit Error;
} ArTextSysGetFormattedText_typ;
/* Prototyping of functions and function blocks */
_BUR_PUBLIC void ArTextSysGetSystemLanguage(struct ArTextSysGetSystemLanguage* inst);
_BUR_PUBLIC void ArTextSysSetSystemLanguage(struct ArTextSysSetSystemLanguage* inst);
_BUR_PUBLIC void ArTextSysGetNamespaceLanguages(struct ArTextSysGetNamespaceLanguages* inst);
_BUR_PUBLIC void ArTextSysGetText(struct ArTextSysGetText* inst);
_BUR_PUBLIC void ArTextSysFormatString(struct ArTextSysFormatString* inst);
_BUR_PUBLIC void ArTextSysGetFormattedText(struct ArTextSysGetFormattedText* inst);
#ifdef __cplusplus
};
#endif
#endif /* _ARTEXTSYS_ */

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,11 @@
TYPE
cfgLease_typ : STRUCT (*lease structure*)
name : STRING[8]; (*name of lease (max 8)*)
startAdr : STRING[16]; (*start address of lease*)
stopAdr : STRING[16]; (*stop address of lease*)
subnetMask : STRING[16]; (*subnet mask of lease*)
defaultGateway : STRING[16]; (*default gateway of lease*)
leaseTimeout : DINT; (*-1 for infinite timeout*)
END_STRUCT;
END_TYPE

View File

@@ -0,0 +1,88 @@
VAR CONSTANT
cfgERR_DEVICE_NOT_EXIST : UINT := 29000; (*device doesn't exist or device not configured*)
cfgERR_DEVICE_INVALID : UINT := 29001; (*FBK "pDevice" parameter invalid (e.g. pDevice = 0)*)
cfgERR_OPTION_INVALID : UINT := 29002; (*FBK "Option" parameter invalid*)
cfgERR_VALUE_INVALID : UINT := 29003; (*invalid FBK parameter, error text depends on the function block*)
cfgERR_SET_NOT_POSSIBLE : UINT := 29004; (*not possible to set the subnet mask (e.g. DHCP client)*)
cfgERR_ARREG : UINT := 29005; (*error in the AR registry*)
cfgERR_INANODE_NOT_SUPPORTED : UINT := 29006; (*INA device does not support INA node numbers (e.g. IF1 = RS232)*)
cfgERR_FTP_SINIT : UINT := 29007; (*initialization error on FTP server*)
cfgERR_FTP_SDOWN : UINT := 29008; (*shutdown error on FTP server*)
cfgERR_PARAM_NOT_SET : UINT := 29009; (*default gateway not defined*)
cfgERR_SNTP_SERVER : UINT := 29010; (*could not start the SNTP server*)
cfgERR_SNTP_CLIENT : UINT := 29011; (*error starting SNTP client (e.g. client already running)*)
cfgERR_SNTP_INTERVAL : UINT := 29012; (*invalid FBK parameter - values from 1 to 60 are valid*)
cfgERR_SYSTEM : UINT := 29013; (*unexpected system error*)
cfgERR_TIMEZONE : UINT := 29014; (*invalid timezone specified*)
cfgERR_YEAR_INVALID : UINT := 29015; (*invalid year specified*)
cfgERR_CIFS_DOMAIN_INVALID : UINT := 29016; (*cifs domain name not defined *)
cfgERR_CIFS_DEFAULTUSER_INVALID : UINT := 29017; (*cifs defaultuser not defined *)
cfgERR_INANODE_NUMBER_SET : UINT := 29018; (*could not set the INA node number*)
cfgERR_CIFS_DEFAULTPW_INVALID : UINT := 29019; (*cifs default password not defined *)
cfgERR_DHCP_SERVER_STARTED : UINT := 29020; (*server is already working*)
cfgERR_INTERFACELIST_BUFFER : UINT := 29021; (*interfacelist buffer to small*)
cfgERR_LEASES_BUFFER : UINT := 29022; (*leases array to small*)
cfgERR_LEASE_EXISTS : UINT := 29023; (*leasename already exists*)
cfgERR_LEASE_TIMEOUT : UINT := 29024; (*invalid lease timeout*)
cfgERR_DHCP_CONFIG : UINT := 29025; (*DHCP server is not configured*)
cfgERR_SDM_FUNCTION_NOT_FOUND : UINT := 29026; (*used arsdm function was not found*)
cfgERR_CLEAR_NV_DATA : UINT := 29027; (*could not clear NV data*)
cfgERR_FUNCTION_NOT_FOUND : UINT := 29028; (*referenced function was not found*)
cfgERR_SDM_DISABLED : UINT := 29029; (*System diagnostics disabled*)
cfgERR_WEBSERV_DISABLED : UINT := 29030; (*Web Server disabled*)
cfgERR_DHCP_NO_DHCP_IP_OBTAINED : UINT := 29031; (*DHCP activated, but no IP obtained*)
cfgERR_NTP_SERVER : UINT := 29032; (*could not start the NTP server*)
cfgERR_NTP_CLIENT : UINT := 29033; (*error starting NTP client*)
cfgERR_ROUTE_TABLE : UINT := 29034; (*error updating network routing table*)
cfgERR_DST : UINT := 29035; (*could not enable or disable automatic daylight saving*)
cfgETHBAUDRATE_AUTO : UDINT := 0; (*auto-detect*)
cfgETHBAUDRATE_10 : UDINT := 10; (*10 MBaud, half-duplex*)
cfgETHBAUDRATE_10FD : UDINT := 11; (*10 MBaud, full-duplex*)
cfgETHBAUDRATE_100 : UDINT := 100; (*100 MBaud, half-duplex*)
cfgETHBAUDRATE_100FD : UDINT := 101; (*100 MBaud, full-duplex*)
cfgETHBAUDRATE_1000FD : UDINT := 1001; (*1 GBaud, full-duplex*)
cfgOPTION_NON_VOLATILE : UDINT := 1; (*permanently sets parameters*)
cfgOPTION_VOLATILE : UDINT := 0; (*temporarily sets parameters*)
cfgCONFIGMODE_MANUALLY : UDINT := 0; (*manual configuration*)
cfgCONFIGMODE_DHCPCLIENT : UDINT := 1; (*DHCP client*)
cfgOPTION_DISABLE : UDINT := 0; (*disable*)
cfgOPTION_ENABLE : UDINT := 1; (*enable*)
cfgOPTION_WORKGROUP : USINT := 1; (*Domain is Workgroup*)
cfgOPTION_NON_WORKGROUP : USINT := 0; (*Domain isn't Workgroup*)
cfgOPTION_ENABLE_SDM : USINT := 1; (*enable sdm*)
cfgOPTION_DISABLE_SDM : USINT := 2; (*disable sdm*)
cfgSTATUS_SDM_ENABLED : USINT := 1; (*sdm is enabled*)
cfgSTATUS_SDM_DISABLED : USINT := 2; (*sdm is disabled*)
cfgWEB_MODE_GOFORM_DISABLE : UINT := 0; (*Webserver Goform disabled*)
cfgWEB_MODE_GOFORM_ENABLE : UINT := 1; (*Webserver Goform enabled*)
cfgWEB_MODE_GOFORM_NO_WRITE : UINT := 2; (*Webserver Goform readonly*)
cfgWEB_MODE_MIME_DEL : UINT := 0; (*Webserver delete MimeType*)
cfgWEB_MODE_MIME_ADD : UINT := 1; (*Webserver set MimeType*)
cfgWEB_MODE_DISABLED : UINT := 0; (*Webserver disabled*)
cfgWEB_MODE_ENABLED : UINT := 1; (*Webserver enabled*)
cfgOPTION_DNS_OFF : USINT := 0; (*disable DNS service*)
cfgOPTION_DNS_ON_CONFIG : USINT := 1; (*DNS service using the server address as configured*)
cfgOPTION_DNS_ON_DHCP : USINT := 2; (*Get the DNS address from the DHCP server*)
cfgNTP_START : UINT := 1; (*start NTP server/client*)
cfgNTP_STOP : UINT := 0; (*stop NTP server/client*)
cfgSTATUS_NTP_ACTIVE : UINT := 1; (*NTP server/client active*)
cfgSTATUS_NTP_INACTIVE : UINT := 0; (*NTP server/client inactive*)
cfgSDM_COLOR_DEFAULT : UDINT := 2147483648; (*sdm default color*)
cfgDHCP_OPTION_VENDOR_CLASS_ID : USINT := 60; (*DHCP option vendor class identifier*)
END_VAR

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.4.7.144 SP?>
<Library Description="The AsARCfg library supports reading and writing Automation Runtime configurations." xmlns="http://br-automation.co.at/AS/Library">
<Files>
<File>AsARCfg.fun</File>
<File>AsARCfg.typ</File>
<File>AsARCfg.var</File>
</Files>
<Dependencies>
<Dependency ObjectName="runtime" />
</Dependencies>
</Library>

View File

@@ -0,0 +1,204 @@
/* Automation Studio generated header file */
/* Do not edit ! */
#ifndef _ASARCFG_
#define _ASARCFG_
#ifdef __cplusplus
extern "C"
{
#endif
#include <bur/plctypes.h>
#include <runtime.h>
#ifndef _IEC_CONST
#define _IEC_CONST _WEAK const
#endif
/* Constants */
#ifdef _REPLACE_CONST
#define cfgSTATUS_SDM_DISABLED 2U
#define cfgSTATUS_SDM_ENABLED 1U
#define cfgOPTION_DISABLE_SDM 2U
#define cfgOPTION_ENABLE_SDM 1U
#define cfgOPTION_NON_WORKGROUP 0U
#define cfgOPTION_WORKGROUP 1U
#define cfgOPTION_ENABLE 1U
#define cfgOPTION_DISABLE 0U
#define cfgCONFIGMODE_DHCPCLIENT 1U
#define cfgCONFIGMODE_MANUALLY 0U
#define cfgOPTION_VOLATILE 0U
#define cfgOPTION_NON_VOLATILE 1U
#define cfgETHBAUDRATE_1000FD 1001U
#define cfgETHBAUDRATE_100FD 101U
#define cfgETHBAUDRATE_100 100U
#define cfgETHBAUDRATE_10FD 11U
#define cfgETHBAUDRATE_10 10U
#define cfgETHBAUDRATE_AUTO 0U
#define cfgERR_CLEAR_NV_DATA 29027U
#define cfgERR_SDM_FUNCTION_NOT_FOUND 29026U
#define cfgERR_LEASE_TIMEOUT 29024U
#define cfgERR_LEASE_EXISTS 29023U
#define cfgERR_LEASES_BUFFER 29022U
#define cfgERR_INTERFACELIST_BUFFER 29021U
#define cfgERR_DHCP_SERVER_STARTED 29020U
#define cfgERR_CIFS_DEFAULTPW_INVALID 29019U
#define cfgERR_INANODE_NUMBER_SET 29018U
#define cfgERR_CIFS_DEFAULTUSER_INVALID 29017U
#define cfgERR_CIFS_DOMAIN_INVALID 29016U
#define cfgERR_YEAR_INVALID 29015U
#define cfgERR_TIMEZONE 29014U
#define cfgERR_SYSTEM 29013U
#define cfgERR_SNTP_INTERVAL 29012U
#define cfgERR_SNTP_CLIENT 29011U
#define cfgERR_SNTP_SERVER 29010U
#define cfgERR_PARAM_NOT_SET 29009U
#define cfgERR_FTP_SDOWN 29008U
#define cfgERR_FTP_SINIT 29007U
#define cfgERR_INANODE_NOT_SUPPORTED 29006U
#define cfgERR_ARREG 29005U
#define cfgERR_SET_NOT_POSSIBLE 29004U
#define cfgERR_VALUE_INVALID 29003U
#define cfgERR_OPTION_INVALID 29002U
#define cfgERR_DEVICE_INVALID 29001U
#define cfgERR_DEVICE_NOT_EXIST 29000U
#else
_IEC_CONST unsigned char cfgSTATUS_SDM_DISABLED = 2U;
_IEC_CONST unsigned char cfgSTATUS_SDM_ENABLED = 1U;
_IEC_CONST unsigned char cfgOPTION_DISABLE_SDM = 2U;
_IEC_CONST unsigned char cfgOPTION_ENABLE_SDM = 1U;
_IEC_CONST unsigned char cfgOPTION_NON_WORKGROUP = 0U;
_IEC_CONST unsigned char cfgOPTION_WORKGROUP = 1U;
_IEC_CONST unsigned long cfgOPTION_ENABLE = 1U;
_IEC_CONST unsigned long cfgOPTION_DISABLE = 0U;
_IEC_CONST unsigned long cfgCONFIGMODE_DHCPCLIENT = 1U;
_IEC_CONST unsigned long cfgCONFIGMODE_MANUALLY = 0U;
_IEC_CONST unsigned long cfgOPTION_VOLATILE = 0U;
_IEC_CONST unsigned long cfgOPTION_NON_VOLATILE = 1U;
_IEC_CONST unsigned long cfgETHBAUDRATE_1000FD = 1001U;
_IEC_CONST unsigned long cfgETHBAUDRATE_100FD = 101U;
_IEC_CONST unsigned long cfgETHBAUDRATE_100 = 100U;
_IEC_CONST unsigned long cfgETHBAUDRATE_10FD = 11U;
_IEC_CONST unsigned long cfgETHBAUDRATE_10 = 10U;
_IEC_CONST unsigned long cfgETHBAUDRATE_AUTO = 0U;
_IEC_CONST unsigned short cfgERR_CLEAR_NV_DATA = 29027U;
_IEC_CONST unsigned short cfgERR_SDM_FUNCTION_NOT_FOUND = 29026U;
_IEC_CONST unsigned short cfgERR_LEASE_TIMEOUT = 29024U;
_IEC_CONST unsigned short cfgERR_LEASE_EXISTS = 29023U;
_IEC_CONST unsigned short cfgERR_LEASES_BUFFER = 29022U;
_IEC_CONST unsigned short cfgERR_INTERFACELIST_BUFFER = 29021U;
_IEC_CONST unsigned short cfgERR_DHCP_SERVER_STARTED = 29020U;
_IEC_CONST unsigned short cfgERR_CIFS_DEFAULTPW_INVALID = 29019U;
_IEC_CONST unsigned short cfgERR_INANODE_NUMBER_SET = 29018U;
_IEC_CONST unsigned short cfgERR_CIFS_DEFAULTUSER_INVALID = 29017U;
_IEC_CONST unsigned short cfgERR_CIFS_DOMAIN_INVALID = 29016U;
_IEC_CONST unsigned short cfgERR_YEAR_INVALID = 29015U;
_IEC_CONST unsigned short cfgERR_TIMEZONE = 29014U;
_IEC_CONST unsigned short cfgERR_SYSTEM = 29013U;
_IEC_CONST unsigned short cfgERR_SNTP_INTERVAL = 29012U;
_IEC_CONST unsigned short cfgERR_SNTP_CLIENT = 29011U;
_IEC_CONST unsigned short cfgERR_SNTP_SERVER = 29010U;
_IEC_CONST unsigned short cfgERR_PARAM_NOT_SET = 29009U;
_IEC_CONST unsigned short cfgERR_FTP_SDOWN = 29008U;
_IEC_CONST unsigned short cfgERR_FTP_SINIT = 29007U;
_IEC_CONST unsigned short cfgERR_INANODE_NOT_SUPPORTED = 29006U;
_IEC_CONST unsigned short cfgERR_ARREG = 29005U;
_IEC_CONST unsigned short cfgERR_SET_NOT_POSSIBLE = 29004U;
_IEC_CONST unsigned short cfgERR_VALUE_INVALID = 29003U;
_IEC_CONST unsigned short cfgERR_OPTION_INVALID = 29002U;
_IEC_CONST unsigned short cfgERR_DEVICE_INVALID = 29001U;
_IEC_CONST unsigned short cfgERR_DEVICE_NOT_EXIST = 29000U;
#endif
/* Datatypes and datatypes of function blocks */
typedef struct cfgLease_typ
{ plcstring name[9];
plcstring startAdr[17];
plcstring stopAdr[17];
plcstring subnetMask[17];
plcstring defaultGateway[17];
signed long leaseTimeout;
} cfgLease_typ;
typedef struct CfgGetInaNode
{
/* VAR_INPUT (analog) */
unsigned long pDevice;
/* VAR_OUTPUT (analog) */
unsigned short status;
unsigned char InaNode;
/* VAR (analog) */
unsigned short i_state;
unsigned short i_result;
unsigned long i_tmp;
/* VAR_INPUT (digital) */
plcbit enable;
} CfgGetInaNode_typ;
typedef struct CfgGetIPAddr
{
/* VAR_INPUT (analog) */
unsigned long pDevice;
unsigned long pIPAddr;
unsigned char Len;
/* VAR_OUTPUT (analog) */
unsigned short status;
/* VAR (analog) */
unsigned short i_state;
unsigned short i_result;
unsigned long i_tmp;
/* VAR_INPUT (digital) */
plcbit enable;
} CfgGetIPAddr_typ;
typedef struct CfgGetSubnetMask
{
/* VAR_INPUT (analog) */
unsigned long pDevice;
unsigned long pSubnetMask;
unsigned char Len;
/* VAR_OUTPUT (analog) */
unsigned short status;
/* VAR (analog) */
unsigned short i_state;
unsigned short i_result;
unsigned long i_tmp;
/* VAR_INPUT (digital) */
plcbit enable;
} CfgGetSubnetMask_typ;
typedef struct CfgGetMacAddr
{
/* VAR_INPUT (analog) */
unsigned long pDevice;
unsigned long pMacAddr;
unsigned char Len;
/* VAR_OUTPUT (analog) */
unsigned short status;
/* VAR (analog) */
unsigned short i_state;
unsigned short i_result;
unsigned long i_tmp;
/* VAR_INPUT (digital) */
plcbit enable;
} CfgGetMacAddr_typ;
/* Prototyping of functions and function blocks */
void CfgGetInaNode(struct CfgGetInaNode* inst);
void CfgGetIPAddr(struct CfgGetIPAddr* inst);
void CfgGetSubnetMask(struct CfgGetSubnetMask* inst);
void CfgGetMacAddr(struct CfgGetMacAddr* inst);
#ifdef __cplusplus
};
#endif
#endif /* _ASARCFG_ */

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,272 @@
/* Automation Studio generated header file */
/* Do not edit ! */
#ifndef _ASARCFG_
#define _ASARCFG_
#ifdef __cplusplus
extern "C"
{
#endif
#include <bur/plctypes.h>
#include <runtime.h>
#ifndef _IEC_CONST
#define _IEC_CONST _WEAK const
#endif
/* Constants */
#ifdef _REPLACE_CONST
#define cfgSTATUS_SDM_DISABLED 2U
#define cfgSTATUS_SDM_ENABLED 1U
#define cfgOPTION_DISABLE_SDM 2U
#define cfgOPTION_ENABLE_SDM 1U
#define cfgOPTION_NON_WORKGROUP 0U
#define cfgOPTION_WORKGROUP 1U
#define cfgOPTION_ENABLE 1U
#define cfgOPTION_DISABLE 0U
#define cfgCONFIGMODE_DHCPCLIENT 1U
#define cfgCONFIGMODE_MANUALLY 0U
#define cfgOPTION_VOLATILE 0U
#define cfgOPTION_NON_VOLATILE 1U
#define cfgETHBAUDRATE_1000FD 1001U
#define cfgETHBAUDRATE_100FD 101U
#define cfgETHBAUDRATE_100 100U
#define cfgETHBAUDRATE_10FD 11U
#define cfgETHBAUDRATE_10 10U
#define cfgETHBAUDRATE_AUTO 0U
#define cfgERR_CLEAR_NV_DATA 29027U
#define cfgERR_SDM_FUNCTION_NOT_FOUND 29026U
#define cfgERR_LEASE_TIMEOUT 29024U
#define cfgERR_LEASE_EXISTS 29023U
#define cfgERR_LEASES_BUFFER 29022U
#define cfgERR_INTERFACELIST_BUFFER 29021U
#define cfgERR_DHCP_SERVER_STARTED 29020U
#define cfgERR_CIFS_DEFAULTPW_INVALID 29019U
#define cfgERR_INANODE_NUMBER_SET 29018U
#define cfgERR_CIFS_DEFAULTUSER_INVALID 29017U
#define cfgERR_CIFS_DOMAIN_INVALID 29016U
#define cfgERR_YEAR_INVALID 29015U
#define cfgERR_TIMEZONE 29014U
#define cfgERR_SYSTEM 29013U
#define cfgERR_SNTP_INTERVAL 29012U
#define cfgERR_SNTP_CLIENT 29011U
#define cfgERR_SNTP_SERVER 29010U
#define cfgERR_PARAM_NOT_SET 29009U
#define cfgERR_FTP_SDOWN 29008U
#define cfgERR_FTP_SINIT 29007U
#define cfgERR_INANODE_NOT_SUPPORTED 29006U
#define cfgERR_ARREG 29005U
#define cfgERR_SET_NOT_POSSIBLE 29004U
#define cfgERR_VALUE_INVALID 29003U
#define cfgERR_OPTION_INVALID 29002U
#define cfgERR_DEVICE_INVALID 29001U
#define cfgERR_DEVICE_NOT_EXIST 29000U
#else
_IEC_CONST unsigned char cfgSTATUS_SDM_DISABLED = 2U;
_IEC_CONST unsigned char cfgSTATUS_SDM_ENABLED = 1U;
_IEC_CONST unsigned char cfgOPTION_DISABLE_SDM = 2U;
_IEC_CONST unsigned char cfgOPTION_ENABLE_SDM = 1U;
_IEC_CONST unsigned char cfgOPTION_NON_WORKGROUP = 0U;
_IEC_CONST unsigned char cfgOPTION_WORKGROUP = 1U;
_IEC_CONST unsigned long cfgOPTION_ENABLE = 1U;
_IEC_CONST unsigned long cfgOPTION_DISABLE = 0U;
_IEC_CONST unsigned long cfgCONFIGMODE_DHCPCLIENT = 1U;
_IEC_CONST unsigned long cfgCONFIGMODE_MANUALLY = 0U;
_IEC_CONST unsigned long cfgOPTION_VOLATILE = 0U;
_IEC_CONST unsigned long cfgOPTION_NON_VOLATILE = 1U;
_IEC_CONST unsigned long cfgETHBAUDRATE_1000FD = 1001U;
_IEC_CONST unsigned long cfgETHBAUDRATE_100FD = 101U;
_IEC_CONST unsigned long cfgETHBAUDRATE_100 = 100U;
_IEC_CONST unsigned long cfgETHBAUDRATE_10FD = 11U;
_IEC_CONST unsigned long cfgETHBAUDRATE_10 = 10U;
_IEC_CONST unsigned long cfgETHBAUDRATE_AUTO = 0U;
_IEC_CONST unsigned short cfgERR_CLEAR_NV_DATA = 29027U;
_IEC_CONST unsigned short cfgERR_SDM_FUNCTION_NOT_FOUND = 29026U;
_IEC_CONST unsigned short cfgERR_LEASE_TIMEOUT = 29024U;
_IEC_CONST unsigned short cfgERR_LEASE_EXISTS = 29023U;
_IEC_CONST unsigned short cfgERR_LEASES_BUFFER = 29022U;
_IEC_CONST unsigned short cfgERR_INTERFACELIST_BUFFER = 29021U;
_IEC_CONST unsigned short cfgERR_DHCP_SERVER_STARTED = 29020U;
_IEC_CONST unsigned short cfgERR_CIFS_DEFAULTPW_INVALID = 29019U;
_IEC_CONST unsigned short cfgERR_INANODE_NUMBER_SET = 29018U;
_IEC_CONST unsigned short cfgERR_CIFS_DEFAULTUSER_INVALID = 29017U;
_IEC_CONST unsigned short cfgERR_CIFS_DOMAIN_INVALID = 29016U;
_IEC_CONST unsigned short cfgERR_YEAR_INVALID = 29015U;
_IEC_CONST unsigned short cfgERR_TIMEZONE = 29014U;
_IEC_CONST unsigned short cfgERR_SYSTEM = 29013U;
_IEC_CONST unsigned short cfgERR_SNTP_INTERVAL = 29012U;
_IEC_CONST unsigned short cfgERR_SNTP_CLIENT = 29011U;
_IEC_CONST unsigned short cfgERR_SNTP_SERVER = 29010U;
_IEC_CONST unsigned short cfgERR_PARAM_NOT_SET = 29009U;
_IEC_CONST unsigned short cfgERR_FTP_SDOWN = 29008U;
_IEC_CONST unsigned short cfgERR_FTP_SINIT = 29007U;
_IEC_CONST unsigned short cfgERR_INANODE_NOT_SUPPORTED = 29006U;
_IEC_CONST unsigned short cfgERR_ARREG = 29005U;
_IEC_CONST unsigned short cfgERR_SET_NOT_POSSIBLE = 29004U;
_IEC_CONST unsigned short cfgERR_VALUE_INVALID = 29003U;
_IEC_CONST unsigned short cfgERR_OPTION_INVALID = 29002U;
_IEC_CONST unsigned short cfgERR_DEVICE_INVALID = 29001U;
_IEC_CONST unsigned short cfgERR_DEVICE_NOT_EXIST = 29000U;
#endif
/* Datatypes and datatypes of function blocks */
typedef struct cfgLease_typ
{ plcstring name[9];
plcstring startAdr[17];
plcstring stopAdr[17];
plcstring subnetMask[17];
plcstring defaultGateway[17];
signed long leaseTimeout;
} cfgLease_typ;
typedef struct CfgGetInaNode
{
/* VAR_INPUT (analog) */
unsigned long pDevice;
/* VAR_OUTPUT (analog) */
unsigned short status;
unsigned char InaNode;
/* VAR (analog) */
unsigned short i_state;
unsigned short i_result;
unsigned long i_tmp;
/* VAR_INPUT (digital) */
plcbit enable;
} CfgGetInaNode_typ;
typedef struct CfgGetIPAddr
{
/* VAR_INPUT (analog) */
unsigned long pDevice;
unsigned long pIPAddr;
unsigned char Len;
/* VAR_OUTPUT (analog) */
unsigned short status;
/* VAR (analog) */
unsigned short i_state;
unsigned short i_result;
unsigned long i_tmp;
/* VAR_INPUT (digital) */
plcbit enable;
} CfgGetIPAddr_typ;
typedef struct CfgSetIPAddr
{
/* VAR_INPUT (analog) */
unsigned long pDevice;
unsigned long pIPAddr;
unsigned long Option;
/* VAR_OUTPUT (analog) */
unsigned short status;
/* VAR (analog) */
unsigned short i_state;
unsigned short i_result;
unsigned long i_tmp;
/* VAR_INPUT (digital) */
plcbit enable;
} CfgSetIPAddr_typ;
typedef struct CfgGetSubnetMask
{
/* VAR_INPUT (analog) */
unsigned long pDevice;
unsigned long pSubnetMask;
unsigned char Len;
/* VAR_OUTPUT (analog) */
unsigned short status;
/* VAR (analog) */
unsigned short i_state;
unsigned short i_result;
unsigned long i_tmp;
/* VAR_INPUT (digital) */
plcbit enable;
} CfgGetSubnetMask_typ;
typedef struct CfgSetSubnetMask
{
/* VAR_INPUT (analog) */
unsigned long pDevice;
unsigned long pSubnetMask;
unsigned long Option;
/* VAR_OUTPUT (analog) */
unsigned short status;
/* VAR (analog) */
unsigned short i_state;
unsigned short i_result;
unsigned long i_tmp;
/* VAR_INPUT (digital) */
plcbit enable;
} CfgSetSubnetMask_typ;
typedef struct CfgGetDefaultGateway
{
/* VAR_INPUT (analog) */
unsigned long pDevice;
unsigned long pGateway;
unsigned char Len;
/* VAR_OUTPUT (analog) */
unsigned short status;
/* VAR (analog) */
unsigned short i_state;
unsigned short i_result;
unsigned long i_tmp;
/* VAR_INPUT (digital) */
plcbit enable;
} CfgGetDefaultGateway_typ;
typedef struct CfgSetDefaultGateway
{
/* VAR_INPUT (analog) */
unsigned long pDevice;
unsigned long pGateway;
unsigned long Option;
/* VAR_OUTPUT (analog) */
unsigned short status;
/* VAR (analog) */
unsigned short i_state;
unsigned short i_result;
unsigned long i_tmp;
/* VAR_INPUT (digital) */
plcbit enable;
} CfgSetDefaultGateway_typ;
typedef struct CfgGetMacAddr
{
/* VAR_INPUT (analog) */
unsigned long pDevice;
unsigned long pMacAddr;
unsigned char Len;
/* VAR_OUTPUT (analog) */
unsigned short status;
/* VAR (analog) */
unsigned short i_state;
unsigned short i_result;
unsigned long i_tmp;
/* VAR_INPUT (digital) */
plcbit enable;
} CfgGetMacAddr_typ;
/* Prototyping of functions and function blocks */
void CfgGetInaNode(struct CfgGetInaNode* inst);
void CfgGetIPAddr(struct CfgGetIPAddr* inst);
void CfgSetIPAddr(struct CfgSetIPAddr* inst);
void CfgGetSubnetMask(struct CfgGetSubnetMask* inst);
void CfgSetSubnetMask(struct CfgSetSubnetMask* inst);
void CfgGetDefaultGateway(struct CfgGetDefaultGateway* inst);
void CfgSetDefaultGateway(struct CfgSetDefaultGateway* inst);
void CfgGetMacAddr(struct CfgGetMacAddr* inst);
#ifdef __cplusplus
};
#endif
#endif /* _ASARCFG_ */

View File

@@ -0,0 +1,39 @@
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION_BLOCK SdmSystemDump (*SDM - create a system dump; asynchronous execution*)
VAR_INPUT
enable : BOOL; (*enables execution*)
configuration : UDINT; (*cfgSDM_SYSTEMDUMP_PARAM(0) parameters only or cfgSDM_SYSTEMDUMP_DATA(1) parameters and data-files*)
pDevice : UDINT; (*Devicename given as a pointer*)
pFile : UDINT; (*Filename given as a pointer*)
pParam : UDINT; (*Parameterstring given as a pointer*)
END_VAR
VAR_OUTPUT
status : UINT; (*execution status: ERR_OK, ERR_FUB_ENABLE_FALSE, ERR_FUB_BUSY, 0xXXXX = see help*)
END_VAR
VAR
i_state : UINT; (*internal variable*)
i_result : UINT; (*internal variable*)
i_tmp : UDINT; (*internal variable*)
END_VAR
END_FUNCTION_BLOCK
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION_BLOCK SdmSetAppParam (*SDM - set application mode; asynchronous execution*)
VAR_INPUT
enable : BOOL; (*enables execution*)
appMode : UDINT; (*cfgSDM_APPMODE_OK(1),cfgSDM_APPMODE_WARNING(2),cfgSDM_APPMODE_ERROR(3)*)
pLink : UDINT; (*URL given as a pointer*)
Option : UDINT; (*options: cfgOPTION_VOLATILE, cfgOPTION_NON_VOLATILE*)
END_VAR
VAR_OUTPUT
status : UINT; (*execution status: ERR_OK, ERR_FUB_ENABLE_FALSE, ERR_FUB_BUSY, 0xXXXX = see help*)
END_VAR
VAR
i_state : UINT; (*internal variable*)
i_result : UINT; (*internal variable*)
i_tmp : UDINT; (*internal variable*)
END_VAR
END_FUNCTION_BLOCK

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1,21 @@
VAR CONSTANT
sdmERR_NOT_EXIST : UINT := 34900; (*SDM not active*)
sdmERR_ARREG : UINT := 34901; (*SDM AR registry error*)
sdmERR_SYSTEMDUMP : UINT := 34902; (*SDM System dump error*)
sdmERR_INVALID_DEVICE : UINT := 34903; (*SDM System dump invalid device*)
sdmERR_INVALID_POINTER : UINT := 34904; (*SDM System dump invalid pointer*)
sdmERR_INVALID_VALUE : UINT := 34905; (*SDM Invalid application mode*)
sdmERR_OPTION_INVALID : UINT := 34906; (*SDM"Option" parameter invalid*)
sdm_SYSTEMDUMP_PARAM : UINT := 0; (*SDM System Dump parameters only*)
sdm_SYSTEMDUMP_DATA : UINT := 1; (*SDM SDM System Dump parameters and data files*)
sdm_APPMODE_NOTUSED : UINT := 0; (*SDM Applicationmode not set*)
sdm_APPMODE_OK : UINT := 1; (*SDM Application ok*)
sdm_APPMODE_WARNING : UINT := 2; (*SDM Application warning *)
sdm_APPMODE_ERROR : UINT := 3; (*SDM Application error*)
sdmOPTION_NON_VOLATILE : UDINT := 1; (*permanently sets parameters*)
sdmOPTION_VOLATILE : UDINT := 0; (*temporarily sets parameters*)
END_VAR

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.4.7.144 SP?>
<Library Description="The AsArSdm library supports the System Diagnostics Manager" xmlns="http://br-automation.co.at/AS/Library">
<Files>
<File>AsArSdm.fun</File>
<File>AsArSdm.typ</File>
<File>AsArSdm.var</File>
</Files>
<Dependencies>
<Dependency ObjectName="runtime" />
</Dependencies>
</Library>

View File

@@ -0,0 +1,104 @@
/* Automation Studio generated header file */
/* Do not edit ! */
#ifndef _ASARSDM_
#define _ASARSDM_
#ifdef __cplusplus
extern "C"
{
#endif
#include <bur/plctypes.h>
#include <runtime.h>
#ifndef _BUR_PUBLIC
#define _BUR_PUBLIC
#endif
/* Constants */
#ifdef _REPLACE_CONST
#define sdmOPTION_VOLATILE 0U
#define sdmOPTION_NON_VOLATILE 1U
#define sdm_APPMODE_ERROR 3U
#define sdm_APPMODE_WARNING 2U
#define sdm_APPMODE_OK 1U
#define sdm_APPMODE_NOTUSED 0U
#define sdm_SYSTEMDUMP_DATA 1U
#define sdm_SYSTEMDUMP_PARAM 0U
#define sdmERR_OPTION_INVALID 34906U
#define sdmERR_INVALID_VALUE 34905U
#define sdmERR_INVALID_POINTER 34904U
#define sdmERR_INVALID_DEVICE 34903U
#define sdmERR_SYSTEMDUMP 34902U
#define sdmERR_ARREG 34901U
#define sdmERR_NOT_EXIST 34900U
#else
#ifndef _GLOBAL_CONST
#define _GLOBAL_CONST _WEAK const
#endif
_GLOBAL_CONST unsigned long sdmOPTION_VOLATILE;
_GLOBAL_CONST unsigned long sdmOPTION_NON_VOLATILE;
_GLOBAL_CONST unsigned short sdm_APPMODE_ERROR;
_GLOBAL_CONST unsigned short sdm_APPMODE_WARNING;
_GLOBAL_CONST unsigned short sdm_APPMODE_OK;
_GLOBAL_CONST unsigned short sdm_APPMODE_NOTUSED;
_GLOBAL_CONST unsigned short sdm_SYSTEMDUMP_DATA;
_GLOBAL_CONST unsigned short sdm_SYSTEMDUMP_PARAM;
_GLOBAL_CONST unsigned short sdmERR_OPTION_INVALID;
_GLOBAL_CONST unsigned short sdmERR_INVALID_VALUE;
_GLOBAL_CONST unsigned short sdmERR_INVALID_POINTER;
_GLOBAL_CONST unsigned short sdmERR_INVALID_DEVICE;
_GLOBAL_CONST unsigned short sdmERR_SYSTEMDUMP;
_GLOBAL_CONST unsigned short sdmERR_ARREG;
_GLOBAL_CONST unsigned short sdmERR_NOT_EXIST;
#endif
/* Datatypes and datatypes of function blocks */
typedef struct SdmSystemDump
{
/* VAR_INPUT (analog) */
unsigned long configuration;
unsigned long pDevice;
unsigned long pFile;
unsigned long pParam;
/* VAR_OUTPUT (analog) */
unsigned short status;
/* VAR (analog) */
unsigned short i_state;
unsigned short i_result;
unsigned long i_tmp;
/* VAR_INPUT (digital) */
plcbit enable;
} SdmSystemDump_typ;
typedef struct SdmSetAppParam
{
/* VAR_INPUT (analog) */
unsigned long appMode;
unsigned long pLink;
unsigned long Option;
/* VAR_OUTPUT (analog) */
unsigned short status;
/* VAR (analog) */
unsigned short i_state;
unsigned short i_result;
unsigned long i_tmp;
/* VAR_INPUT (digital) */
plcbit enable;
} SdmSetAppParam_typ;
/* Prototyping of functions and function blocks */
_BUR_PUBLIC void SdmSystemDump(struct SdmSystemDump* inst);
_BUR_PUBLIC void SdmSetAppParam(struct SdmSetAppParam* inst);
#ifdef __cplusplus
};
#endif
#endif /* _ASARSDM_ */

View File

@@ -0,0 +1,80 @@
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION brsftoa : UINT (*converts a REAL value into a character string*)
VAR_INPUT
value :REAL; (*REAL (FLOAT) value to be converted into a character string*)
pString :UDINT; (*pointer to the destination character string*)
END_VAR
END_FUNCTION
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION brsatof : REAL (*converts a character string into a REAL (FLOAT) value*)
VAR_INPUT
pString :UDINT; (*pointer to the character string to be converted*)
END_VAR
END_FUNCTION
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION brsatod : LREAL (*converts a character string into a LREAL (DOUBLE) value*)
VAR_INPUT
pString :UDINT; (*pointer to the character string to be converted*)
END_VAR
END_FUNCTION
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION brsitoa : UINT (*converts a DINT value into a character string*)
VAR_INPUT
value :DINT; (*numerical value to be converted into a string*)
pString :UDINT; (*pointer to the destination character string*)
END_VAR
END_FUNCTION
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION brsatoi : DINT (*converts a character string into a DINT value*)
VAR_INPUT
pString :UDINT; (*pointer to the character string to be converted*)
END_VAR
END_FUNCTION
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION brsmemset : UDINT (*fills the memory area with specific values*)
VAR_INPUT
pDest :UDINT; (*pointer to the destination memory*)
value :USINT; (*initialization value*)
length :UDINT; (*number of bytes to be initialized*)
END_VAR
END_FUNCTION
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION brsmemcpy : UDINT (*copies the memory area*)
VAR_INPUT
pDest :UDINT; (*pointer to the destination memory*)
pSrc :UDINT; (*pointer to the data to be copied*)
length :UDINT; (*size of bytes to be copied*)
END_VAR
END_FUNCTION
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION brsmemmove : UDINT (*copies the memory area (even if the memory areas overlap)*)
VAR_INPUT
pDest :UDINT; (*pointer to the destination memory*)
pSrc :UDINT; (*pointer to the data to be copied*)
length :UDINT; (*size of bytes to be copied*)
END_VAR
END_FUNCTION
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION brsmemcmp : DINT (*compares memory areas*)
VAR_INPUT
pMem1 :UDINT; (*pointer to the memory area 1*)
pMem2 :UDINT; (*pointer to the memory area 2*)
length :UDINT; (*size of bytes to be checked*)
END_VAR
END_FUNCTION
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION brsstrcat : UDINT (*attaches character strings to one another*)
VAR_INPUT
pDest :UDINT; (*pointer to the destination character string*)
pSrc :UDINT; (*pointer to the source character string*)
END_VAR
END_FUNCTION
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION brsstrlen : UDINT (*provides the length of a character string*)
VAR_INPUT
pString :UDINT; (*pointer to the source character string*)
END_VAR
END_FUNCTION
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION brsstrcpy : UDINT (*copies one character string into another*)
VAR_INPUT
pDest :UDINT; (*pointer to the destination character string*)
pSrc :UDINT; (*pointer to the source character string*)
END_VAR
END_FUNCTION
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION brsstrcmp : DINT (*compares two character strings*)
VAR_INPUT
pString1 :UDINT; (*pointer to the first character string*)
pString2 :UDINT; (*pointer to the second character string*)
END_VAR
END_FUNCTION

View File

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

View File

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

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.4.7.144 SP?>
<Library Description="The AsBrStr Library contains FBKs for memory and character string handling." xmlns="http://br-automation.co.at/AS/Library">
<Files>
<File>AsBrStr.fun</File>
<File>AsBrStr.typ</File>
<File>AsBrStr.var</File>
</Files>
</Library>

View File

@@ -0,0 +1,39 @@
/* Automation Studio generated header file */
/* Do not edit ! */
#ifndef _ASBRSTR_
#define _ASBRSTR_
#ifdef __cplusplus
extern "C"
{
#endif
#include <bur/plctypes.h>
#ifndef _IEC_CONST
#define _IEC_CONST _WEAK const
#endif
/* Prototyping of functions and function blocks */
unsigned short brsftoa(float value, unsigned long pString);
float brsatof(unsigned long pString);
unsigned short brsitoa(signed long value, unsigned long pString);
signed long brsatoi(unsigned long pString);
unsigned long brsmemset(unsigned long pDest, unsigned char value, unsigned long length);
unsigned long brsmemcpy(unsigned long pDest, unsigned long pSrc, unsigned long length);
unsigned long brsmemmove(unsigned long pDest, unsigned long pSrc, unsigned long length);
signed long brsmemcmp(unsigned long pMem1, unsigned long pMem2, unsigned long length);
unsigned long brsstrcat(unsigned long pDest, unsigned long pSrc);
unsigned long brsstrlen(unsigned long pString);
unsigned long brsstrcpy(unsigned long pDest, unsigned long pSrc);
signed long brsstrcmp(unsigned long pString1, unsigned long pString2);
#ifdef __cplusplus
};
#endif
#endif /* _ASBRSTR_ */

View File

@@ -0,0 +1,39 @@
/* Automation Studio generated header file */
/* Do not edit ! */
#ifndef _ASBRSTR_
#define _ASBRSTR_
#ifdef __cplusplus
extern "C"
{
#endif
#include <bur/plctypes.h>
#ifndef _BUR_PUBLIC
#define _BUR_PUBLIC
#endif
/* Prototyping of functions and function blocks */
_BUR_PUBLIC unsigned short brsftoa(float value, unsigned long pString);
_BUR_PUBLIC float brsatof(unsigned long pString);
_BUR_PUBLIC double brsatod(unsigned long pString);
_BUR_PUBLIC unsigned short brsitoa(signed long value, unsigned long pString);
_BUR_PUBLIC signed long brsatoi(unsigned long pString);
_BUR_PUBLIC unsigned long brsmemset(unsigned long pDest, unsigned char value, unsigned long length);
_BUR_PUBLIC unsigned long brsmemcpy(unsigned long pDest, unsigned long pSrc, unsigned long length);
_BUR_PUBLIC unsigned long brsmemmove(unsigned long pDest, unsigned long pSrc, unsigned long length);
_BUR_PUBLIC signed long brsmemcmp(unsigned long pMem1, unsigned long pMem2, unsigned long length);
_BUR_PUBLIC unsigned long brsstrcat(unsigned long pDest, unsigned long pSrc);
_BUR_PUBLIC unsigned long brsstrlen(unsigned long pString);
_BUR_PUBLIC unsigned long brsstrcpy(unsigned long pDest, unsigned long pSrc);
_BUR_PUBLIC signed long brsstrcmp(unsigned long pString1, unsigned long pString2);
#ifdef __cplusplus
};
#endif
#endif /* _ASBRSTR_ */

View File

@@ -0,0 +1,39 @@
/* Automation Studio generated header file */
/* Do not edit ! */
#ifndef _ASBRSTR_
#define _ASBRSTR_
#ifdef __cplusplus
extern "C"
{
#endif
#include <bur/plctypes.h>
#ifndef _IEC_CONST
#define _IEC_CONST _WEAK const
#endif
/* Prototyping of functions and function blocks */
unsigned short brsftoa(float value, unsigned long pString);
float brsatof(unsigned long pString);
unsigned short brsitoa(signed long value, unsigned long pString);
signed long brsatoi(unsigned long pString);
unsigned long brsmemset(unsigned long pDest, unsigned char value, unsigned long length);
unsigned long brsmemcpy(unsigned long pDest, unsigned long pSrc, unsigned long length);
unsigned long brsmemmove(unsigned long pDest, unsigned long pSrc, unsigned long length);
signed long brsmemcmp(unsigned long pMem1, unsigned long pMem2, unsigned long length);
unsigned long brsstrcat(unsigned long pDest, unsigned long pSrc);
unsigned long brsstrlen(unsigned long pString);
unsigned long brsstrcpy(unsigned long pDest, unsigned long pSrc);
signed long brsstrcmp(unsigned long pString1, unsigned long pString2);
#ifdef __cplusplus
};
#endif
#endif /* _ASBRSTR_ */

View File

@@ -0,0 +1,70 @@
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION_BLOCK AsIOAccRead (*reads noncyclical register (only inputs); asynchronous execution*)
VAR_INPUT
enable :BOOL; (*enables execution*)
pDeviceName :UDINT; (*device name given as a pointer*)
pChannelName :UDINT; (*pointer to the channel name*)
END_VAR
VAR_OUTPUT
status :UINT; (*execution status: ERR_OK, ERR_FUB_ENABLE_FALSE, ERR_FUB_BUSY, 0xXXXX = see help*)
value :UDINT; (*value read*)
END_VAR
VAR
intern :IOAC_I_TYPE; (*internal variable*)
END_VAR
END_FUNCTION_BLOCK
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION_BLOCK AsIOAccWrite (*writes noncyclical register (ONLY outputs); asynchronous execution*)
VAR_INPUT
enable :BOOL; (*enables execution*)
pDeviceName :UDINT; (*device name given as a pointer*)
pChannelName :UDINT; (*pointer to the channel name*)
value :UDINT; (*value to be written*)
END_VAR
VAR_OUTPUT
status :UINT; (*execution status: ERR_OK, ERR_FUB_ENABLE_FALSE, ERR_FUB_BUSY, 0xXXXX = see help*)
END_VAR
VAR
intern :IOAC_I_TYPE; (*internal variable*)
END_VAR
END_FUNCTION_BLOCK
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION_BLOCK AsIOAccReadReg (*reads noncyclical register (SGC only); asynchronous execution*)
VAR_INPUT
enable : BOOL; (*enables execution*)
nodeNr : USINT; (*node number of x2x module*)
registerNr : UINT; (*register number*)
size : USINT; (*register size*)
END_VAR
VAR_OUTPUT
status : UINT; (*execution status: ERR_OK, ERR_FUB_ENABLE_FALSE, ERR_FUB_BUSY, 0xXXXX = see help*)
value : UDINT; (*regsiter value*)
END_VAR
VAR
i_state : UINT; (*internal variable*)
i_result : UINT; (*internal variable*)
i_tmp : UDINT; (*internal variable*)
END_VAR
END_FUNCTION_BLOCK
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION_BLOCK AsIOAccWriteReg (*writes noncyclical register (SGC only); asynchronous execution*)
VAR_INPUT
enable : BOOL; (*enables execution*)
nodeNr : USINT; (*node number of x2x module*)
registerNr : UINT; (*register number*)
size : USINT; (*register size*)
value : UDINT; (*new register value*)
END_VAR
VAR_OUTPUT
status : UINT; (*execution status: ERR_OK, ERR_FUB_ENABLE_FALSE, ERR_FUB_BUSY, 0xXXXX = see help*)
END_VAR
VAR
i_state : UINT; (*internal variable*)
i_result : UINT; (*internal variable*)
i_tmp : UDINT; (*internal variable*)
END_VAR
END_FUNCTION_BLOCK

View File

@@ -0,0 +1,15 @@
TYPE
IOAC_I_TYPE : STRUCT (*internal use*)
StateMan : UINT ;
ErrMan : UINT ;
Init : UDINT ;
Taskhandle : UDINT ;
Semaphore : UDINT ;
Requestsize : UDINT ;
Answersize : UDINT ;
pAccessObj : UDINT ;
Offset : UDINT ;
flags : UDINT ;
END_STRUCT;
END_TYPE

View File

@@ -0,0 +1,10 @@
VAR CONSTANT
ioacERR_INTERNAL : UINT := 30190; (*internal error*)
ioacERR_DEVICE : UINT := 30191; (*I/O module does not exist*)
ioacERR_CHANNEL : UINT := 30192; (*incorrect channel name specified*)
ioacERR_TIMEOUT : UINT := 30193; (*timeout reached*)
ioacERR_NOTSUPPORTED : UINT := 30194; (*not supported*)
ioacERR_PARAMETER : UINT := 30195; (*invalid parameter*)
ioacERR_ACCESS : UINT := 30196; (*access error*)
END_VAR

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.4.7.144 SP?>
<Library Description="This library provides read and write access to non-cyclic I/O data points." xmlns="http://br-automation.co.at/AS/Library">
<Files>
<File>AsIOAcc.fun</File>
<File>AsIOAcc.typ</File>
<File>AsIOAcc.var</File>
</Files>
<Dependencies>
<Dependency ObjectName="runtime" />
</Dependencies>
</Library>

View File

@@ -0,0 +1,132 @@
/* Automation Studio generated header file */
/* Do not edit ! */
#ifndef _ASIOACC_
#define _ASIOACC_
#ifdef __cplusplus
extern "C"
{
#endif
#include <bur/plctypes.h>
#include <runtime.h>
#ifndef _BUR_PUBLIC
#define _BUR_PUBLIC
#endif
/* Constants */
#ifdef _REPLACE_CONST
#define ioacERR_ACCESS 30196U
#define ioacERR_PARAMETER 30195U
#define ioacERR_NOTSUPPORTED 30194U
#define ioacERR_TIMEOUT 30193U
#define ioacERR_CHANNEL 30192U
#define ioacERR_DEVICE 30191U
#define ioacERR_INTERNAL 30190U
#else
#ifndef _GLOBAL_CONST
#define _GLOBAL_CONST _WEAK const
#endif
_GLOBAL_CONST unsigned short ioacERR_ACCESS;
_GLOBAL_CONST unsigned short ioacERR_PARAMETER;
_GLOBAL_CONST unsigned short ioacERR_NOTSUPPORTED;
_GLOBAL_CONST unsigned short ioacERR_TIMEOUT;
_GLOBAL_CONST unsigned short ioacERR_CHANNEL;
_GLOBAL_CONST unsigned short ioacERR_DEVICE;
_GLOBAL_CONST unsigned short ioacERR_INTERNAL;
#endif
/* Datatypes and datatypes of function blocks */
typedef struct IOAC_I_TYPE
{ unsigned short StateMan;
unsigned short ErrMan;
unsigned long Init;
unsigned long Taskhandle;
unsigned long Semaphore;
unsigned long Requestsize;
unsigned long Answersize;
unsigned long pAccessObj;
unsigned long Offset;
unsigned long flags;
} IOAC_I_TYPE;
typedef struct AsIOAccRead
{
/* VAR_INPUT (analog) */
unsigned long pDeviceName;
unsigned long pChannelName;
/* VAR_OUTPUT (analog) */
unsigned short status;
unsigned long value;
/* VAR (analog) */
struct IOAC_I_TYPE intern;
/* VAR_INPUT (digital) */
plcbit enable;
} AsIOAccRead_typ;
typedef struct AsIOAccWrite
{
/* VAR_INPUT (analog) */
unsigned long pDeviceName;
unsigned long pChannelName;
unsigned long value;
/* VAR_OUTPUT (analog) */
unsigned short status;
/* VAR (analog) */
struct IOAC_I_TYPE intern;
/* VAR_INPUT (digital) */
plcbit enable;
} AsIOAccWrite_typ;
typedef struct AsIOAccReadReg
{
/* VAR_INPUT (analog) */
unsigned char nodeNr;
unsigned short registerNr;
unsigned char size;
/* VAR_OUTPUT (analog) */
unsigned short status;
unsigned long value;
/* VAR (analog) */
unsigned short i_state;
unsigned short i_result;
unsigned long i_tmp;
/* VAR_INPUT (digital) */
plcbit enable;
} AsIOAccReadReg_typ;
typedef struct AsIOAccWriteReg
{
/* VAR_INPUT (analog) */
unsigned char nodeNr;
unsigned short registerNr;
unsigned char size;
unsigned long value;
/* VAR_OUTPUT (analog) */
unsigned short status;
/* VAR (analog) */
unsigned short i_state;
unsigned short i_result;
unsigned long i_tmp;
/* VAR_INPUT (digital) */
plcbit enable;
} AsIOAccWriteReg_typ;
/* Prototyping of functions and function blocks */
_BUR_PUBLIC void AsIOAccRead(struct AsIOAccRead* inst);
_BUR_PUBLIC void AsIOAccWrite(struct AsIOAccWrite* inst);
_BUR_PUBLIC void AsIOAccReadReg(struct AsIOAccReadReg* inst);
_BUR_PUBLIC void AsIOAccWriteReg(struct AsIOAccWriteReg* inst);
#ifdef __cplusplus
};
#endif
#endif /* _ASIOACC_ */

View File

@@ -0,0 +1,101 @@
/* Automation Studio generated header file */
/* Do not edit ! */
#ifndef _ASIOACC_
#define _ASIOACC_
#ifdef __cplusplus
extern "C"
{
#endif
#include <bur/plctypes.h>
#include <runtime.h>
#ifndef _IEC_CONST
#define _IEC_CONST _WEAK const
#endif
/* Constants */
#ifdef _REPLACE_CONST
#define ioacERR_ACCESS 30196U
#define ioacERR_PARAMETER 30195U
#define ioacERR_NOTSUPPORTED 30194U
#define ioacERR_TIMEOUT 30193U
#define ioacERR_CHANNEL 30192U
#define ioacERR_DEVICE 30191U
#define ioacERR_INTERNAL 30190U
#else
_IEC_CONST unsigned short ioacERR_ACCESS = 30196U;
_IEC_CONST unsigned short ioacERR_PARAMETER = 30195U;
_IEC_CONST unsigned short ioacERR_NOTSUPPORTED = 30194U;
_IEC_CONST unsigned short ioacERR_TIMEOUT = 30193U;
_IEC_CONST unsigned short ioacERR_CHANNEL = 30192U;
_IEC_CONST unsigned short ioacERR_DEVICE = 30191U;
_IEC_CONST unsigned short ioacERR_INTERNAL = 30190U;
#endif
/* Datatypes and datatypes of function blocks */
typedef struct IOAC_I_TYPE
{ unsigned short StateMan;
unsigned short ErrMan;
unsigned long Init;
unsigned long Taskhandle;
unsigned long Semaphore;
unsigned long Requestsize;
unsigned long Answersize;
unsigned long pAccessObj;
unsigned long Offset;
unsigned long flags;
} IOAC_I_TYPE;
typedef struct AsIOAccReadReg
{
/* VAR_INPUT (analog) */
unsigned char nodeNr;
unsigned short registerNr;
unsigned char size;
/* VAR_OUTPUT (analog) */
unsigned short status;
unsigned long value;
/* VAR (analog) */
unsigned short i_state;
unsigned short i_result;
unsigned long i_tmp;
/* VAR_INPUT (digital) */
plcbit enable;
} AsIOAccReadReg_typ;
typedef struct AsIOAccWriteReg
{
/* VAR_INPUT (analog) */
unsigned char nodeNr;
unsigned short registerNr;
unsigned char size;
unsigned long value;
/* VAR_OUTPUT (analog) */
unsigned short status;
/* VAR (analog) */
unsigned short i_state;
unsigned short i_result;
unsigned long i_tmp;
/* VAR_INPUT (digital) */
plcbit enable;
} AsIOAccWriteReg_typ;
/* Prototyping of functions and function blocks */
void AsIOAccReadReg(struct AsIOAccReadReg* inst);
void AsIOAccWriteReg(struct AsIOAccWriteReg* inst);
#ifdef __cplusplus
};
#endif
#endif /* _ASIOACC_ */

View File

@@ -0,0 +1,75 @@
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION_BLOCK DiagCreateInfo (*collects information about the currently configured and/or inserted hardware modules; asynchronous execution*)
VAR_INPUT
enable : BOOL; (*enables execution*)
infoKind : UDINT; (*type of information to be generated, e.g. asdiagPLUGGED, asdiagCONFIGURED, ..*)
END_VAR
VAR
StateMan : UINT; (*internal variable*)
ErrMan : UINT; (*internal variable*)
Init : UDINT; (*internal variable*)
END_VAR
VAR_OUTPUT
status : UINT; (*execution status: ERR_OK, ERR_FUB_ENABLE_FALSE, ERR_FUB_BUSY, 0xXXXX = see help*)
ident : UDINT; (*identifier of the generated information*)
nrEntries : UDINT; (*number of generated information entries*)
END_VAR
END_FUNCTION_BLOCK
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION_BLOCK DiagDisposeInfo (*frees up the resources taken up by DiagCreateInfo(); asynchronous execution*)
VAR_INPUT
enable : BOOL; (*enables execution*)
ident : UDINT; (*identifier of the information to be freed up*)
END_VAR
VAR
StateMan : UINT; (*internal variable*)
ErrMan : UINT; (*internal variable*)
Init : UDINT; (*internal variable*)
END_VAR
VAR_OUTPUT
status : UINT; (*execution status: ERR_OK, ERR_FUB_ENABLE_FALSE, ERR_FUB_BUSY, 0xXXXX = see help*)
END_VAR
END_FUNCTION_BLOCK
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION_BLOCK DiagGetNumInfo (*queries the numeric value of a specified information entry*)
VAR_INPUT
enable : BOOL; (*enables execution*)
ident : UDINT; (*identifier returned from DiagCreateInfo()*)
index : UDINT; (*index of the entry [0..nrEntries-1]*)
infoCode : UDINT; (*code of the desired information, e.g. asdiagMODUL_STATE, asdiagPLUGGED_MODNO, ..*)
END_VAR
VAR_OUTPUT
status : UINT; (*execution status: ERR_OK, ERR_FUB_ENABLE_FALSE, 0xXXXX = see help*)
value : UDINT; (*numeric value*)
END_VAR
END_FUNCTION_BLOCK
{REDUND_CONTEXT} {REDUND_UNREPLICABLE} FUNCTION_BLOCK DiagGetStrInfo (*queries the string value of a specified information entry*)
VAR_INPUT
enable : BOOL; (*enables execution*)
ident : UDINT; (*identifier returned from DiagCreateInfo()*)
index : UDINT; (*index of the entry [0..nrEntries-1]*)
infoCode : UDINT; (*code of the desired information*)
pBuffer : UDINT; (*pointer to the return buffer*)
bufferLen : UDINT; (*size of the return buffer*)
END_VAR
VAR_OUTPUT
status : UINT; (*execution status: ERR_OK, ERR_FUB_ENABLE_FALSE, 0xXXXX = see help*)
stringLen: UDINT; (*string length of the original data*)
END_VAR
END_FUNCTION_BLOCK
{REDUND_OK} {REDUND_UNREPLICABLE} FUNCTION DiagCpuIsSimulated : BOOL (*queries if CPU is simulated *)
END_FUNCTION
{REDUND_OK} {REDUND_UNREPLICABLE} FUNCTION DiagCpuIsARsim : BOOL (*queries if CPU is ARsim *)
END_FUNCTION

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