AS4 Initial Commit

This commit is contained in:
Michael Rest
2013-08-08 15:49:26 +02:00
parent cbd653019e
commit 291e105036
1141 changed files with 97302 additions and 0 deletions

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.22 SP04?>
<Package xmlns="http://br-automation.co.at/AS/Package">
<Objects>
<Object Type="DataObject" Language="Apt">gaxwirea</Object>
<Object Type="DataObject" Language="Apt">gaxbelta</Object>
<Object Type="DataObject" Language="Apt">gaxlanea</Object>
<Object Type="DataObject" Language="Apt">gaxbenda</Object>
</Objects>
</Package>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.21 SP03?>
<DataObject xmlns="http://br-automation.co.at/AS/DataObject">
<Files>
<File>gaxbelta.apt</File>
</Files>
</DataObject>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.22 SP04?>
<AcoposParameterTable>
<Root Name="Parameters">
<Parameter Name="SCALE_ENCOD_INCR" ID="109" Value="1024" Description="Encoder1: Encoder scaling: increments per SCALE_ENCOD_MOTOR_REV motor revolutions" />
<Parameter Name="SM_SCALE_LOAD_MOTREV" ID="64234" Value="1" Description="Stepper motor: Load scaling: Motor revolutions" />
<Parameter Name="SM_SCALE_LOAD_UNITS" ID="64233" Value="1200" Unit="Units" Description="Stepper motor: Load scaling: Units per SM_SCALE_LOAD_MOTREV motor revolutions [1/10 mm]" />
<Parameter Name="SM_SCALE_STEP" ID="64232" Value="51200" Description="Stepper motor: Step scaling: Steps per motor revolution" />
</Root>
</AcoposParameterTable>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.22 SP04?>
<DataObject xmlns="http://br-automation.co.at/AS/DataObject">
<Files>
<File>gaxbenda.apt</File>
</Files>
</DataObject>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.22 SP04?>
<AcoposParameterTable>
<Root Name="Parameters">
<Parameter Name="SCALE_ENCOD_INCR" ID="109" Value="1024" Description="Encoder1: Encoder scaling: increments per SCALE_ENCOD_MOTOR_REV motor revolutions" />
<Parameter Name="SM_SCALE_LOAD_MOTREV" ID="64234" Value="1" Description="Stepper motor: Load scaling: Motor revolutions" />
<Parameter Name="SM_SCALE_LOAD_UNITS" ID="64233" Value="180" Unit="Units" Description="Stepper motor: Load scaling: Units per SM_SCALE_LOAD_MOTREV motor revolutions" />
<Parameter Name="SM_SCALE_STEP" ID="64232" Value="51200" Description="Stepper motor: Step scaling: Steps per motor revolution" />
</Root>
</AcoposParameterTable>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.21 SP03?>
<DataObject xmlns="http://br-automation.co.at/AS/DataObject">
<Files>
<File>gaxlanea.apt</File>
</Files>
</DataObject>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.22 SP04?>
<AcoposParameterTable>
<Root Name="Parameters">
<Parameter Name="SCALE_ENCOD_INCR" ID="109" Value="1024" Description="Encoder1: Encoder scaling: increments per SCALE_ENCOD_MOTOR_REV motor revolutions" />
<Parameter Name="SM_SCALE_LOAD_MOTREV" ID="64234" Value="1" Description="Stepper motor: Load scaling: Motor revolutions" />
<Parameter Name="SM_SCALE_LOAD_UNITS" ID="64233" Value="40" Unit="Units" Description="Stepper motor: Load scaling: Units per SM_SCALE_LOAD_MOTREV motor revolutions [1/100mm]" />
<Parameter Name="SM_SCALE_STEP" ID="64232" Value="51200" Description="Stepper motor: Step scaling: Steps per motor revolution" />
</Root>
</AcoposParameterTable>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.22 SP04?>
<DataObject xmlns="http://br-automation.co.at/AS/DataObject">
<Files>
<File>gaxwirea.apt</File>
</Files>
</DataObject>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.22 SP04?>
<AcoposParameterTable>
<Root Name="Parameters">
<Parameter Name="SCALE_ENCOD_INCR" ID="109" Value="51200" Description="Encoder1: Encoder scaling: increments per SCALE_ENCOD_MOTOR_REV motor revolutions [µSteps]" />
<Parameter Name="SM_SCALE_LOAD_MOTREV" ID="64234" Value="1000" Description="Stepper motor: Load scaling: Motor revolutions" />
<Parameter Name="SM_SCALE_LOAD_UNITS" ID="64233" Value="314159" Unit="Units" Description="Stepper motor: Load scaling: Units per SM_SCALE_LOAD_MOTREV motor revolutions [10mm]" />
<Parameter Name="SM_SCALE_STEP" ID="64232" Value="51200" Description="Stepper motor: Step scaling: Steps per motor revolution" />
</Root>
</AcoposParameterTable>

View File

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

View File

@@ -0,0 +1,84 @@
(*//-----------------------------------------------------------------------------------------------------*)
(*//MC FunctionBlocks*)
VAR
Axis_MC_ACP_ENCOD_REF : MC_ACP_ENCOD_REF := (0);
Axis_MC_ACP_ENCOD_PARAM_REF : MC_ACP_ENCOD_PARAM_REF := (0);
Axis_MC_CamIn : MC_CamIn := (0); (*Start CAM coupling with master*)
Axis_MC_CamOut : MC_CamOut := (0); (*Stop CAM coupling *)
Axis_MC_CamTableSelect : MC_CamTableSelect := (0); (*Select CAM Table*)
Axis_MC_GearIn : MC_GearIn := (0); (*Start electronic Gear coupling with master*)
Axis_MC_GearInPos : MC_GearInPos := (0); (*Start electronic Gear coupling (Position mode) with master*)
Axis_MC_GearOut : MC_GearOut := (0); (*Sop electronic Gear coupling*)
Axis_MC_BR_HomeAcpEncoder : MC_BR_HomeAcpEncoder := (0);
Axis_MC_BR_InitAxisPar : MC_BR_InitAxisPar := (0);
Axis_MC_BR_ReadDriveStatus : MC_BR_ReadDriveStatus := (0);
Axis_MC_BR_Simulation : MC_BR_Simulation := (0);
Axis_MC_BR_TorqueControl : MC_BR_TorqueControl := (0); (*Continuous Movement with Cyclic Torque*)
Axis_MC_BR_VelocityControl : MC_BR_VelocityControl := (0); (*Cyclic Velocity / Torque*)
Axis_MC_Home : MC_Home := (0); (*Homing*)
Axis_MC_BR_InitModPos : MC_BR_InitModPos := (0); (*Modulo Position*)
Axis_MC_MoveAbsolute : MC_MoveAbsolute := (0); (*Absolute Movement*)
Axis_MC_BR_MoveAbsoluteTriggStop : MC_BR_MoveAbsoluteTriggStop := (0); (*Absolute Movement with Trigger Stop*)
Axis_MC_MoveAdditive : MC_MoveAdditive := (0); (*Additive Movement*)
Axis_MC_BR_MoveAdditiveTriggStop : MC_BR_MoveAdditiveTriggStop := (0); (*Additive Movement with Trigger Stop*)
Axis_MC_MoveVelocity : MC_MoveVelocity := (0); (*Continuous Movement with Cyclic Velocity*)
AXis_MC_BR_MoveVelocityTriggStop : MC_BR_MoveVelocityTriggStop := (0); (*Continuous Movement with Cyclic Velocity and Trigger Stop*)
Axis_MC_Power : MC_Power := (0);
Axis_MC_ReadActualPosition : MC_ReadActualPosition := (0);
Axis_MC_ReadActualTorque : MC_ReadActualTorque := (0);
Axis_MC_ReadActualVelocity : MC_ReadActualVelocity := (0);
Axis_MC_ReadAxisError : MC_ReadAxisError := (0);
Axis_MC_ReadStatus : MC_ReadStatus := (0);
Axis_MC_Reset : MC_Reset := (0);
Axis_MC_SetOverride : MC_SetOverride := (0);
Axis_MC_Stop : MC_Stop := (0);
END_VAR
(*//Further Parameter - Cyclic*)
VAR
Axis_MC_BR_CyclicRead : MC_BR_CyclicRead := (0); (*Read Further Axis Parameter*)
Axis_MC_BR_CyclicWrite : MC_BR_CyclicWrite := (0);
END_VAR
(*//Further Parameter*)
VAR
Axis_MC_BR_ReadParID : MC_BR_ReadParID := (0); (*Read Furhter Axis Parameter*)
END_VAR
(*//ParemeterTrace*)
VAR
Axis_MC_BR_WriteParID : MC_BR_WriteParID := (0); (*USER_R4_VAR1 used for Trace*)
END_VAR
(*//-----------------------------------------------------------------------------------------------------*)
(*//Dynamic Vars*)
VAR
lAxis : REFERENCE TO typAxis; (*Axis Datastruct *)
lAxisActPos : REFERENCE TO REAL;
lAxisMaster : REFERENCE TO typAxis;
lbSimulation : REFERENCE TO BOOL;
rUser_Var1 : REFERENCE TO REAL; (*Value for Cyclic transmission to Acopos*)
END_VAR
(*//-----------------------------------------------------------------------------------------------------*)
(*//Constants*)
VAR CONSTANT
uiTORQUE_NOT_REACHED : UINT := 0;
END_VAR
(*//-----------------------------------------------------------------------------------------------------*)
(*//Retain*)
(*//-----------------------------------------------------------------------------------------------------*)
(*//Local Vars*)
VAR
bAxisInit : BOOL := FALSE; (*Devel - Init Axis*)
bHomeAbs : BOOL := FALSE; (*Devel - Home Absolue Encoder*)
bTest : BOOL := FALSE;
usCamTableID : USINT;
uiRestartDelay : UINT := 2500; (*Wait Cycles after Cold restart*)
uiAbsStatus : UINT;
uiAxisUserVar1 : UINT := 0;
uiMCReadError : UINT := 0; (*Error in MC_Read_Paramaeter*)
uiMCWriteError : UINT := 0; (*Error in MC_Write_Paramaeter*)
udAxisMasterObj : UDINT;
udAxisSlaveObj : UDINT;
udAxisObj : UDINT;
udEnableTorqueLimit : UDINT := 0;
rOldVelocity : REAL := 0.0;
rOldTorquelimit : REAL := 0.0; (*//Used to Trigger Sending Value to Axis*)
rUser_VarTemp : REAL := 0.0;
END_VAR

View File

@@ -0,0 +1,870 @@
PROGRAM _CYCLIC
IF (uiRestartDelay > 0) THEN
uiRestartDelay = uiRestartDelay - 1
ENDIF
;Devel Axis Initialisation
Axis_MC_BR_InitAxisPar.Axis = udAxisObj
Axis_MC_BR_InitAxisPar.Execute = bAxisInit
Axis_MC_BR_InitAxisPar FUB MC_BR_InitAxisPar ()
IF (Axis_MC_BR_InitAxisPar.Done = TRUE) THEN
bAxisInit = FALSE
ENDIF
;Devel Absolute Encoder Homing
Axis_MC_ACP_ENCOD_REF.Axis = udAxisObj
Axis_MC_ACP_ENCOD_REF.Slot = 3
Axis_MC_ACP_ENCOD_PARAM_REF.HomingMode = mcHOME_ABSOLUTE
Axis_MC_ACP_ENCOD_PARAM_REF.Offset = 0
Axis_MC_ACP_ENCOD_PARAM_REF.ReadOffset = FALSE
Axis_MC_BR_HomeAcpEncoder.Execute = bHomeAbs
Axis_MC_BR_HomeAcpEncoder.AcpEncoder = Axis_MC_ACP_ENCOD_REF
Axis_MC_BR_HomeAcpEncoder.HomingParameters = Axis_MC_ACP_ENCOD_PARAM_REF
Axis_MC_BR_HomeAcpEncoder FUB MC_BR_HomeAcpEncoder ()
IF (Axis_MC_BR_HomeAcpEncoder.Done = TRUE) THEN
bHomeAbs = FALSE
ENDIF
;get axis information
Axis_MC_ReadAxisError.DataAddress = ADR (lAxis.Error.Text)
Axis_MC_ReadAxisError.DataLength = SIZEOF (lAxis.Error.Text)
Axis_MC_ReadAxisError FUB MC_ReadAxisError ()
Axis_MC_ReadStatus FUB MC_ReadStatus ()
IF (Axis_MC_ReadStatus.Valid = TRUE) THEN
lAxis.Status.bDisabled = Axis_MC_ReadStatus.Disabled
lAxis.Status.bStandstill = Axis_MC_ReadStatus.StandStill
lAxis.Status.bStopping = Axis_MC_ReadStatus.Stopping
lAxis.Status.bHoming = Axis_MC_ReadStatus.Homing
lAxis.Status.bMotionDiscrete = Axis_MC_ReadStatus.DiscreteMotion
lAxis.Status.bMotionContinous = Axis_MC_ReadStatus.ContinuousMotion
lAxis.Status.bMotionSynchronized = Axis_MC_ReadStatus.SynchronizedMotion
lAxis.Status.bErrorstop = Axis_MC_ReadStatus.Errorstop
ENDIF
Axis_MC_BR_ReadDriveStatus.AdrDriveStatus = ADR (lAxis.DriveStatus)
Axis_MC_BR_ReadDriveStatus FUB MC_BR_ReadDriveStatus ()
;Position
Axis_MC_ReadActualPosition FUB MC_ReadActualPosition ()
IF (Axis_MC_ReadActualPosition.Valid = TRUE) THEN
lAxis.rActPosition = Axis_MC_ReadActualPosition.Position
lAxisActPos = lAxis.rActPosition
ENDIF
;Velocity
Axis_MC_ReadActualVelocity FUB MC_ReadActualVelocity ()
IF (Axis_MC_ReadActualVelocity.Valid = TRUE) THEN
lAxis.rActVelocity = Axis_MC_ReadActualVelocity.Velocity
ENDIF
;Torque
Axis_MC_ReadActualTorque FUB MC_ReadActualTorque ()
IF (Axis_MC_ReadActualTorque.Valid = TRUE) THEN
lAxis.rActTorque = Axis_MC_ReadActualTorque.Torque
ENDIF
;STATE Machine Axis
SELECT lAxis.uiStep
;Check for general Axis errors
WHEN ((Axis_MC_ReadAxisError.AxisErrorID <> 0) AND (Axis_MC_ReadAxisError.Valid = TRUE))
NEXT AxSTATE_ERROR_AXIS
;power should be off
WHEN NOT lAxis.bPower AND((Axis_MC_ReadStatus.Errorstop = 1) AND (Axis_MC_ReadStatus.Valid = TRUE))
NEXT AxSTATE_ERROR_RESET
WHEN NOT lAxis.bPower AND NOT (lbSimulation XOR lAxis.DriveStatus.bSimulation)
NEXT AxSTATE_WAIT
;==============================================
;WAIT
STATE AxSTATE_WAIT
strcpy (ADR (lAxis.sStep), "AxSTATE_WAIT")
WHEN (lAxis.Status.bDisabled = 1) AND (lbSimulation = TRUE) AND (lAxis.DriveStatus.bSimulation = 0)
NEXT AxSTATE_SIMULATION_ON
WHEN (lAxis.Status.bDisabled = 1) AND (lbSimulation = FALSE) AND (lAxis.DriveStatus.bSimulation = 1)
NEXT AxSTATE_SIMULATION_OFF
WHEN (lAxis.bPower = 1)
NEXT AxSTATE_POWER_ON
;reset power
Axis_MC_Power.Enable = 0
;reset all fb execute inputs we use
Axis_MC_Home.Execute = 0
Axis_MC_BR_Simulation.Execute = 0
Axis_MC_Stop.Execute = 0
Axis_MC_MoveAbsolute.Execute = 0
Axis_MC_BR_MoveAbsoluteTriggStop.Execute = 0
Axis_MC_MoveAdditive.Execute = 0
Axis_MC_BR_MoveAdditiveTriggStop.Execute = 0
Axis_MC_MoveVelocity.Execute = 0
Axis_MC_MoveVelocity.Execute = 0
Axis_MC_BR_VelocityControl.Enable = 0
Axis_MC_BR_TorqueControl.Enable = 0
Axis_MC_CamTableSelect.Execute = 0
Axis_MC_CamIn.Execute = 0
Axis_MC_CamOut.Execute = 0
Axis_MC_GearIn.Execute = 0
Axis_MC_GearInPos.Execute = 0
Axis_MC_GearOut.Execute = 0
Axis_MC_ReadAxisError.Acknowledge = 0
Axis_MC_Reset.Execute = 0
;reset user commands
lAxis.bStop = 0
lAxis.bHome = 0
lAxis.Move.bJogPos = 0
lAxis.Move.bJogNeg = 0
lAxis.Move.bVelocity = 0
lAxis.Move.bVelocityControl = 0
lAxis.Move.bAbsolute = 0
lAxis.Move.bAdditive = 0
lAxis.Move.bTorqueControl = 0
lAxis.Move.bStartCAMSlave = 0
lAxis.Move.bStopCAMSlave = 0
lAxis.Move.bStartGearSlave = 0
lAxis.Move.bStartGearPosSlave = 0
lAxis.Move.bStopGearSlave = 0
lAxis.Error.uiID = 0
;==============================================
;Simulation On
STATE AxSTATE_SIMULATION_ON
strcpy (ADR (lAxis.sStep), "AxSTATE_SIMULATION_ON")
Axis_MC_BR_Simulation.Execute = 1
Axis_MC_BR_Simulation.SimulationCommand = mcMOTOR
WHEN (Axis_MC_BR_Simulation.Done = 1)
Axis_MC_BR_Simulation.Execute = 0
NEXT AxSTATE_WAIT
WHEN (Axis_MC_BR_Simulation.ErrorID <> 0)
lAxis.Error.uiID = Axis_MC_BR_Simulation.ErrorID
NEXT AxSTATE_ERROR
;==============================================
;Simulation Off
STATE AxSTATE_SIMULATION_OFF
strcpy (ADR (lAxis.sStep), "AxSTATE_SIMULATION_OFF")
Axis_MC_BR_Simulation.Execute = 1
Axis_MC_BR_Simulation.SimulationCommand = mcSIMULATION_OFF
WHEN (Axis_MC_BR_Simulation.Done = 1)
Axis_MC_BR_Simulation.Execute = 0
NEXT AxSTATE_WAIT
WHEN (Axis_MC_BR_Simulation.ErrorID <> 0)
lAxis.Error.uiID = Axis_MC_BR_Simulation.ErrorID
NEXT AxSTATE_ERROR
;==============================================
;Power On
STATE AxSTATE_POWER_ON
strcpy (ADR (lAxis.sStep), "AxSTATE_POWER_ON")
Axis_MC_Power.Enable = 1
WHEN (Axis_MC_Power.Status = 1)
NEXT AxSTATE_READY
WHEN (Axis_MC_Power.ErrorID <> 0)
lAxis.Error.uiID = Axis_MC_Power.ErrorID
NEXT AxSTATE_ERROR
;==============================================
;Ready, wait for commands
STATE AxSTATE_READY
strcpy (ADR (lAxis.sStep), "AxSTATE_READY")
WHEN lAxis.bHome
lAxis.bHome = 0
NEXT AxSTATE_HOME
WHEN lAxis.bStop
;lAxis.bStop = 0
NEXT AxSTATE_STOP
WHEN lAxis.Move.bJogPos
//Movement will stopped when command is resetted
NEXT AxSTATE_JOG_POSITIVE
WHEN lAxis.Move.bJogNeg
//Movement will stopped when command is resetted
NEXT AxSTATE_JOG_NEGATIVE
WHEN lAxis.Move.bAbsolute AND NOT lAxis.Para.bTriggStop
//Movement will stopped when command is resetted
NEXT AxSTATE_MOVE_ABSOLUTE
WHEN lAxis.Move.bAbsolute AND lAxis.Para.bTriggStop
//Movement will stopped when command is resetted
NEXT AxSTATE_MOVE_ABSOLUTE_TRIGGSTOP
WHEN lAxis.Move.bAdditive AND NOT lAxis.Para.bTriggStop
//Movement will stopped when command is resetted
NEXT AxSTATE_MOVE_ADDITIVE
WHEN lAxis.Move.bAdditive AND lAxis.Para.bTriggStop
//Movement will stopped when command is resetted
NEXT AxSTATE_MOVE_ADDITIVE_TRIGGSTOP
WHEN lAxis.Move.bVelocity
lAxis.Move.bVelocity = 0
lAxis.Status.bTorqueLimitReached = FALSE
NEXT AxSTATE_MOVE_VELOCITY
WHEN lAxis.Move.bVelocityControl
lAxis.Move.bVelocityControl = 0
lAxis.Status.bTorqueLimitReached = FALSE
NEXT AxSTATE_MOVE_VELOCITY_CTRL
WHEN lAxis.Move.bTorqueControl
lAxis.Move.bTorqueControl = 0
lAxis.Status.bTorqueLimitReached = FALSE
NEXT AxSTATE_MOVE_TORQUE_CTRL
WHEN lAxis.Move.bStopCAMSlave
lAxis.Move.bStopCAMSlave = 0
NEXT AxSTATE_MOVE_CAM_STOP
WHEN lAxis.Move.bStartCAMSlave
lAxis.Move.bStopCAMSlave = 0
NEXT AxSTATE_MOVE_CAM_SELECT
WHEN lAxis.Move.bStartGearSlave
lAxis.Move.bStartGearSlave = 0
NEXT AxSTATE_MOVE_GEAR_START
WHEN lAxis.Move.bStartGearPosSlave
lAxis.Move.bStartGearSlave = 0
NEXT AxSTATE_MOVE_GEARPOS_START
WHEN lAxis.Move.bStopGearSlave
lAxis.Move.bStopGearSlave = 0
NEXT AxSTATE_MOVE_GEAR_STOP
;==============================================
;Drive Home
STATE AxSTATE_HOME
strcpy (ADR (lAxis.sStep), "AxSTATE_HOME")
Axis_MC_Home.Position = lAxis.Para.rHomePosition
Axis_MC_Home.HomingMode = mcHOME_DEFAULT ;use Axis-Init Value
Axis_MC_Home.Execute = 1
WHEN lAxis.bStop
;lAxis.bStop = 0
Axis_MC_Home.Execute = 0
NEXT AxSTATE_STOP
WHEN Axis_MC_Home.Done AND (lAxis.Para.udAxisModPosFactor > 0) AND (lAxis.Para.udAxisModPosPeriod > 0)
Axis_MC_Home.Execute = 0
NEXT AxSTATE_INIT_MOD_POS
WHEN Axis_MC_Home.Done
Axis_MC_Home.Execute = 0
NEXT AxSTATE_READY
WHEN (Axis_MC_Home.ErrorID <> 0)
Axis_MC_Home.Execute = 0
lAxis.Error.uiID = Axis_MC_Home.ErrorID
NEXT AxSTATE_ERROR
;==============================================
;Initialize Modulo Position
STATE AxSTATE_INIT_MOD_POS
strcpy (ADR (lAxis.sStep), "AxSTATE_INIT_MOD_POS")
Axis_MC_BR_InitModPos.Factor = lAxis.Para.udAxisModPosFactor
Axis_MC_BR_InitModPos.Period = lAxis.Para.udAxisModPosPeriod
Axis_MC_BR_InitModPos.Execute = 1
WHEN Axis_MC_BR_InitModPos.Done
Axis_MC_BR_InitModPos.Execute = 0
NEXT AxSTATE_READY
WHEN (Axis_MC_BR_InitModPos.ErrorID <> 0)
Axis_MC_BR_InitModPos.Execute = 0
lAxis.Error.uiID = Axis_MC_BR_InitModPos.ErrorID
NEXT AxSTATE_ERROR
;==============================================
;Stop Movement
STATE AxSTATE_STOP
strcpy (ADR (lAxis.sStep), "AxSTATE_STOP")
Axis_MC_Stop.Deceleration = lAxis.Para.rDeceleration
Axis_MC_Stop.Execute = 1
WHEN Axis_MC_Stop.Done OR lAxis.Status.bStandstill
Axis_MC_Stop.Execute = 0
lAxis.bStop = 0
NEXT AxSTATE_READY
WHEN (Axis_MC_Stop.ErrorID <> 0)
Axis_MC_Stop.Execute = 0
lAxis.Error.uiID = Axis_MC_Stop.ErrorID
lAxis.bStop = 0
NEXT AxSTATE_ERROR
;==============================================
;Jog Positive
STATE AxSTATE_JOG_POSITIVE
strcpy (ADR (lAxis.sStep), "AxSTATE_JOG_POSITIVE")
Axis_MC_MoveVelocity.Velocity = lAxis.Para.rJogVelocity
Axis_MC_MoveVelocity.Acceleration = lAxis.Para.rAcceleration
Axis_MC_MoveVelocity.Deceleration = lAxis.Para.rDeceleration
Axis_MC_MoveVelocity.Direction = mcPOSITIVE_DIR
Axis_MC_MoveVelocity.Execute = 1
WHEN NOT lAxis.Move.bJogPos OR lAxis.bStop
Axis_MC_MoveVelocity.Execute = 0
NEXT AxSTATE_STOP
WHEN (Axis_MC_MoveVelocity.ErrorID <> 0)
Axis_MC_MoveVelocity.Execute = 0
lAxis.Error.uiID = Axis_MC_MoveVelocity.ErrorID
NEXT AxSTATE_ERROR
;==============================================
;Jog Negative
STATE AxSTATE_JOG_NEGATIVE
strcpy (ADR (lAxis.sStep), "AxSTATE_JOG_NEGATIVE")
Axis_MC_MoveVelocity.Velocity = lAxis.Para.rJogVelocity
Axis_MC_MoveVelocity.Acceleration = lAxis.Para.rAcceleration
Axis_MC_MoveVelocity.Deceleration = lAxis.Para.rDeceleration
Axis_MC_MoveVelocity.Direction = mcNEGATIVE_DIR
Axis_MC_MoveVelocity.Execute = 1
WHEN NOT lAxis.Move.bJogNeg OR lAxis.bStop
Axis_MC_MoveVelocity.Execute = 0
NEXT AxSTATE_STOP
WHEN (Axis_MC_MoveVelocity.ErrorID <> 0)
Axis_MC_MoveVelocity.Execute = 0
lAxis.Error.uiID = Axis_MC_MoveVelocity.ErrorID
NEXT AxSTATE_ERROR
;==============================================
;Move Absolute
STATE AxSTATE_MOVE_ABSOLUTE
strcpy (ADR (lAxis.sStep), "AxSTATE_MOVE_ABSOLUTE")
Axis_MC_MoveAbsolute.Position = lAxis.Para.rPosition
Axis_MC_MoveAbsolute.Velocity = lAxis.Para.rVelocity
Axis_MC_MoveAbsolute.Acceleration = lAxis.Para.rAcceleration
Axis_MC_MoveAbsolute.Deceleration = lAxis.Para.rDeceleration
Axis_MC_MoveAbsolute.Direction = lAxis.Para.usDirection //??
Axis_MC_MoveAbsolute.Execute = 1
WHEN lAxis.bStop OR NOT lAxis.Move.bAbsolute
;lAxis.bStop = 0
Axis_MC_MoveAbsolute.Execute = 0
lAxis.Move.bAbsolute = 0
NEXT AxSTATE_STOP
WHEN (Axis_MC_MoveAbsolute.Done = 1)
Axis_MC_MoveAbsolute.Execute = 0
lAxis.Move.bAbsolute = 0
NEXT AxSTATE_READY
WHEN (Axis_MC_MoveAbsolute.ErrorID <> 0)
Axis_MC_MoveAbsolute.Execute = 0
lAxis.Error.uiID = Axis_MC_MoveAbsolute.ErrorID
lAxis.Move.bAbsolute = 0
NEXT AxSTATE_ERROR
;==============================================
;Move Absolute
STATE AxSTATE_MOVE_ABSOLUTE_TRIGGSTOP
strcpy (ADR (lAxis.sStep), "AxSTATE_MOVE_ABSOLUTE_TRIGGSTOP")
Axis_MC_BR_MoveAbsoluteTriggStop.Position = lAxis.Para.rPosition
Axis_MC_BR_MoveAbsoluteTriggStop.Velocity = lAxis.Para.rVelocity
Axis_MC_BR_MoveAbsoluteTriggStop.Acceleration = lAxis.Para.rAcceleration
Axis_MC_BR_MoveAbsoluteTriggStop.Deceleration = lAxis.Para.rDeceleration
Axis_MC_BR_MoveAbsoluteTriggStop.Direction = lAxis.Para.usDirection // ?
//Triggerinput is configured in Init Up
Axis_MC_BR_MoveAbsoluteTriggStop.TriggerDistance = lAxis.Para.rTriggDistance
Axis_MC_BR_MoveAbsoluteTriggStop.ForceTriggerDistance = mcOFF // --> force Trigger Dist even if Dest Pos is Exeeded
Axis_MC_BR_MoveAbsoluteTriggStop.Execute = 1
WHEN lAxis.bStop OR NOT lAxis.Move.bAbsolute
Axis_MC_BR_MoveAbsoluteTriggStop.Execute = 0
lAxis.Move.bAbsolute = 0
NEXT AxSTATE_STOP
WHEN Axis_MC_BR_MoveAbsoluteTriggStop.Done
Axis_MC_BR_MoveAbsoluteTriggStop.Execute = 0
lAxis.Move.bAbsolute = 0
NEXT AxSTATE_READY
WHEN (Axis_MC_BR_MoveAbsoluteTriggStop.ErrorID <> 0)
Axis_MC_BR_MoveAbsoluteTriggStop.Execute = 0
lAxis.Error.uiID = Axis_MC_MoveAbsolute.ErrorID
lAxis.Move.bAbsolute = 0
NEXT AxSTATE_ERROR
;==============================================
;Move Additive
STATE AxSTATE_MOVE_ADDITIVE
strcpy (ADR (lAxis.sStep), "AxSTATE_MOVE_ADDITIVE")
Axis_MC_MoveAdditive.Distance = lAxis.Para.rDistance
Axis_MC_MoveAdditive.Velocity = lAxis.Para.rVelocity
Axis_MC_MoveAdditive.Acceleration = lAxis.Para.rAcceleration
Axis_MC_MoveAdditive.Deceleration = lAxis.Para.rDeceleration
Axis_MC_MoveAdditive.Execute = 1
WHEN lAxis.bStop OR NOT lAxis.Move.bAdditive
lAxis.Move.bAdditive = 0
Axis_MC_MoveAdditive.Execute = 0
NEXT AxSTATE_STOP
WHEN Axis_MC_MoveAdditive.Done
lAxis.Move.bAdditive = 0
Axis_MC_MoveAdditive.Execute = 0
NEXT AxSTATE_READY
WHEN (Axis_MC_MoveAdditive.ErrorID <> 0)
lAxis.Move.bAdditive = 0
Axis_MC_MoveAdditive.Execute = 0
lAxis.Error.uiID = Axis_MC_MoveAdditive.ErrorID
NEXT AxSTATE_ERROR
;==============================================
;Move Additive
STATE AxSTATE_MOVE_ADDITIVE_TRIGGSTOP
strcpy (ADR (lAxis.sStep), "AxSTATE_MOVE_ADDITIVE_TRIGGSTOP")
Axis_MC_BR_MoveAdditiveTriggStop.Distance = lAxis.Para.rDistance
Axis_MC_BR_MoveAdditiveTriggStop.Velocity = lAxis.Para.rVelocity
Axis_MC_BR_MoveAdditiveTriggStop.Acceleration = lAxis.Para.rAcceleration
Axis_MC_BR_MoveAdditiveTriggStop.Deceleration = lAxis.Para.rDeceleration
//Triggerinput is configured in Init Up
Axis_MC_BR_MoveAdditiveTriggStop.TriggerDistance = lAxis.Para.rTriggDistance
Axis_MC_BR_MoveAdditiveTriggStop.ForceTriggerDistance = mcOFF // --> force Trigger Dist even if Dest Pos is Exeeded
Axis_MC_BR_MoveAdditiveTriggStop.Execute = 1
WHEN lAxis.bStop OR NOT lAxis.Move.bAdditive
lAxis.Move.bAdditive = 0
Axis_MC_MoveAdditive.Execute = 0
NEXT AxSTATE_STOP
WHEN Axis_MC_BR_MoveAdditiveTriggStop.Done
lAxis.Move.bAdditive = 0
Axis_MC_BR_MoveAdditiveTriggStop.Execute = 0
NEXT AxSTATE_READY
WHEN (Axis_MC_BR_MoveAdditiveTriggStop.ErrorID <> 0)
lAxis.Move.bAdditive = 0
Axis_MC_BR_MoveAdditiveTriggStop.Execute = 0
lAxis.Error.uiID = Axis_MC_BR_MoveAdditiveTriggStop.ErrorID
NEXT AxSTATE_ERROR
;==============================================
;Move Velocity
STATE AxSTATE_MOVE_VELOCITY
strcpy (ADR (lAxis.sStep), "AxSTATE_MOVE_VELOCITY")
Axis_MC_MoveVelocity.Velocity = lAxis.Para.rVelocity
Axis_MC_MoveVelocity.Acceleration = lAxis.Para.rAcceleration
Axis_MC_MoveVelocity.Deceleration = lAxis.Para.rDeceleration
Axis_MC_MoveVelocity.Direction = lAxis.Para.usDirection
Axis_MC_MoveVelocity.Execute = 1
WHEN lAxis.bStop
;lAxis.bStop = 0
Axis_MC_MoveVelocity.Execute = 0
NEXT AxSTATE_STOP
WHEN (Axis_MC_MoveVelocity.ErrorID <> 0)
Axis_MC_MoveVelocity.Execute = 0
lAxis.Error.uiID = Axis_MC_MoveVelocity.ErrorID
NEXT AxSTATE_ERROR
;==============================================
;Move Velocity Control (Only POWERLINK)
;FixMe just prepared
STATE AxSTATE_MOVE_VELOCITY_CTRL
strcpy (ADR (lAxis.sStep), "AxSTATE_MOVE_VELOCITY_CTRL")
Axis_MC_BR_VelocityControl.CyclicVelocityCorrection = 0
Axis_MC_BR_VelocityControl.CyclicVelocity = lAxis.Para.rVelocity
Axis_MC_BR_VelocityControl.CyclicTorque = lAxis.Para.rTorqueLimit
Axis_MC_BR_VelocityControl.Acceleration = lAxis.Para.rAcceleration
Axis_MC_BR_VelocityControl.Deceleration = lAxis.Para.rDeceleration
Axis_MC_BR_VelocityControl.TorqueMode = mcLIMIT
Axis_MC_BR_VelocityControl.Enable = 1
;==============================================
;Move Torque Control
STATE AxSTATE_MOVE_TORQUE_CTRL
strcpy (ADR (lAxis.sStep), "AxSTATE_MOVE_TORQUE_CTRL")
Axis_MC_BR_TorqueControl.StartSignal = NOT lAxis.bStop
Axis_MC_BR_TorqueControl.Acceleration = lAxis.Para.rAcceleration
Axis_MC_BR_TorqueControl.PosMaxVelocity = lAxis.Para.rVelocity
Axis_MC_BR_TorqueControl.NegMaxVelocity = -lAxis.Para.rVelocity
Axis_MC_BR_TorqueControl.Mode = mcCHECK_HOMING_OFF
;mcV_LIMIT_OFF ;(No Speed Limit)
;mcV_LIMIT_CALC ;(No Speed Overrrun)
;mcTIME_LIMIT ;(Enable Timelimit)
Axis_MC_BR_TorqueControl.TimeLimit = 0
Axis_MC_BR_TorqueControl.StartParID = 0 ;Not Used by now
Axis_MC_BR_TorqueControl.TorqueRamp = 0 ;Ramp Disabled
Axis_MC_BR_TorqueControl.Torque = lAxis.Para.rTorqueLimit
;Axis_MC_BR_TorqueControl.TorqueParID = 0 ;Alternativ Torque Source
Axis_MC_BR_TorqueControl.Enable = 1
;Trigger Parameter rewrite
Axis_MC_BR_TorqueControl.InitData = (lAxis.Para.rVelocity <> rOldVelocity) OR \
(lAxis.Para.rTorqueLimit <> rOldTorquelimit)
rOldVelocity = lAxis.Para.rVelocity
rOldTorquelimit = lAxis.Para.rTorqueLimit
lAxis.Status.bTorqueLimitReached = Axis_MC_BR_TorqueControl.InTorque AND \
NOT Axis_MC_BR_TorqueControl.AxisLimitActive
WHEN lAxis.bStop
Axis_MC_BR_TorqueControl.Enable = 0
lAxis.Status.bTorqueLimitReached = 0
NEXT AxSTATE_STOP
WHEN (Axis_MC_BR_TorqueControl.ErrorID <> 0)
Axis_MC_BR_TorqueControl.Enable = 0
lAxis.Status.bTorqueLimitReached = 0
lAxis.Error.uiID = Axis_MC_BR_TorqueControl.ErrorID
NEXT AxSTATE_ERROR
;==============================================
;Move CAM TABLE SELECT
STATE AxSTATE_MOVE_CAM_SELECT
strcpy (ADR (lAxis.sStep), "AxSTATE_MOVE_CAM_SELECT")
Axis_MC_CamTableSelect.CamTable = lAxis.Para.strCamTable
Axis_MC_CamTableSelect.Periodic = mcNON_PERIODIC
;mcPEIODIC
Axis_MC_CamTableSelect.Execute = 1
;wait for select done
WHEN Axis_MC_CamTableSelect.Done
usCamTableID = Axis_MC_CamTableSelect.CamTableID
Axis_MC_CamTableSelect.Execute = 0
NEXT AxSTATE_MOVE_CAM_START
;check for error occured
WHEN (Axis_MC_CamTableSelect.ErrorID <> 0)
lAxis.Error.uiID = Axis_MC_CamTableSelect.ErrorID
Axis_MC_CamTableSelect.Execute = 0
NEXT AxSTATE_ERROR
;==============================================
;Move CAM START
STATE AxSTATE_MOVE_CAM_START
strcpy (ADR (lAxis.sStep), "AxSTATE_MOVE_CAM_START")
Axis_MC_CamIn.MasterOffset = 0.0
Axis_MC_CamIn.SlaveOffset = 0.0
Axis_MC_CamIn.MasterScaling = 1000.0
Axis_MC_CamIn.SlaveScaling = 1000.0
Axis_MC_CamIn.StartMode = mcRELATIVE
;mcABSOLUTE
;mcDIRECT
Axis_MC_CamIn.CamTableID = usCamTableID
Axis_MC_CamIn.Execute = 1
WHEN lAxis.bStop
;lAxis.bStop = 0
Axis_MC_CamIn.Execute = 0
NEXT AxSTATE_STOP
WHEN lAxis.Move.bStopCAMSlave
lAxis.Move.bStopCAMSlave = 0
Axis_MC_CamIn.Execute = 0
NEXT AxSTATE_MOVE_CAM_STOP
;check for error occured
WHEN (Axis_MC_CamIn.ErrorID <> 0)
lAxis.Error.uiID = Axis_MC_CamIn.ErrorID
Axis_MC_CamIn.Execute = 0
NEXT AxSTATE_ERROR
;==============================================
;Move CAM STOP
STATE AxSTATE_MOVE_CAM_STOP
strcpy (ADR (lAxis.sStep), "AxSTATE_MOVE_CAM_STOP")
Axis_MC_CamOut.Execute = 1
;check if coupling is stopped
WHEN Axis_MC_CamOut.Done
Axis_MC_CamOut.Execute = 0
NEXT AxSTATE_READY
;check for error occured
WHEN (Axis_MC_CamOut.ErrorID <> 0)
lAxis.Error.uiID = Axis_MC_CamOut.ErrorID
Axis_MC_CamOut.Execute = 0
NEXT AxSTATE_ERROR
;==============================================
;Move GEAR START
STATE AxSTATE_MOVE_GEAR_START
strcpy (ADR (lAxis.sStep), "AxSTATE_MOVE_GEAR_START")
Axis_MC_GearIn.Acceleration = lAxis.Para.rAcceleration
Axis_MC_GearIn.Deceleration = lAxis.Para.rDeceleration
Axis_MC_GearIn.RatioNumerator = lAxis.Para.iGearRatioNumerator
Axis_MC_GearIn.RatioDenominator = lAxis.Para.uiGearRatioDenominator
Axis_MC_GearIn.Execute = 1
WHEN lAxis.bStop
;lAxis.bStop = 0
Axis_MC_GearIn.Execute = 0
NEXT AxSTATE_STOP
WHEN lAxis.Move.bStopGearSlave
lAxis.Move.bStopGearSlave = 0
Axis_MC_GearIn.Execute = 0
NEXT AxSTATE_MOVE_GEAR_STOP
;check for error occured
WHEN (Axis_MC_GearIn.ErrorID <> 0)
lAxis.Error.uiID = Axis_MC_GearIn.ErrorID
Axis_MC_GearIn.Execute = 0
next AxSTATE_ERROR
;==============================================
;Move GEAR POS START
STATE AxSTATE_MOVE_GEARPOS_START
strcpy (ADR (lAxis.sStep), "AxSTATE_MOVE_GEARPOS_START")
Axis_MC_GearInPos.Acceleration = lAxis.Para.rAcceleration
Axis_MC_GearInPos.RatioNumerator = lAxis.Para.iGearRatioNumerator
Axis_MC_GearInPos.RatioDenominator = lAxis.Para.uiGearRatioDenominator
Axis_MC_GearInPos.MasterSyncPosition = 0
Axis_MC_GearInPos.SlaveSyncPosition = 0
Axis_MC_GearInPos.SyncMode = mcSHORTEST_WAY
Axis_MC_GearInPos.Execute = 1
WHEN lAxis.bStop
;lAxis.bStop = 0
Axis_MC_GearInPos.Execute = 0
NEXT AxSTATE_STOP
WHEN lAxis.Move.bStopGearSlave
lAxis.Move.bStopGearSlave = 0
Axis_MC_GearInPos.Execute = 0
NEXT AxSTATE_MOVE_GEAR_STOP
;check for error occured
WHEN (Axis_MC_GearInPos.ErrorID <> 0)
lAxis.Error.uiID = Axis_MC_GearInPos.ErrorID
Axis_MC_GearInPos.Execute = 0
NEXT AxSTATE_ERROR
;==============================================
;Move CAM STOP
STATE AxSTATE_MOVE_GEAR_STOP
strcpy (ADR (lAxis.sStep), "AxSTATE_MOVE_GEAR_STOP")
Axis_MC_GearOut.Execute = 1
;check if coupling is stopped
WHEN Axis_MC_GearOut.Done
Axis_MC_GearOut.Execute = 0
next AxSTATE_READY
;check for error occured
WHEN (Axis_MC_GearOut.ErrorID <> 0)
lAxis.Error.uiID = Axis_MC_GearOut.ErrorID
Axis_MC_GearOut.Execute = 0
next AxSTATE_ERROR
;==============================================
;Error
STATE AxSTATE_ERROR
strcpy (ADR (lAxis.sStep), "AxSTATE_ERROR")
WHEN (lAxis.Error.uiID = 29226)
NEXT AxSTATE_ERROR_AXIS
WHEN lAxis.Error.bAcknowledge AND \\
Axis_MC_ReadStatus.Errorstop AND \\
Axis_MC_ReadStatus.Valid
lAxis.Error.bAcknowledge = 0
lAxis.Error.uiID = 0
NEXT AxSTATE_ERROR_RESET
WHEN lAxis.Error.bAcknowledge
lAxis.Error.bAcknowledge = 0
lAxis.Error.uiID = 0
NEXT AxSTATE_WAIT
;==============================================
;Error Axis
STATE AxSTATE_ERROR_AXIS
strcpy (ADR (lAxis.sStep), "AxSTATE_ERROR_AXIS")
WHEN NOT (Axis_MC_ReadAxisError.Valid = TRUE)
NEXT AxSTATE_ERROR_AXIS
IF (Axis_MC_ReadAxisError.AxisErrorID <> 0) THEN
lAxis.Error.uiID = Axis_MC_ReadAxisError.AxisErrorID
ENDIF
IF (lAxis.Error.uiID = 1004) AND (uiRestartDelay > 0) THEN
lAxis.Error.bAcknowledge = 1
ENDIF
Axis_MC_ReadAxisError.Acknowledge = 0
IF lAxis.Error.bAcknowledge THEN
lAxis.Error.bAcknowledge = 0
IF (Axis_MC_ReadAxisError.AxisErrorID <> 0) THEN
Axis_MC_ReadAxisError.Acknowledge = 1
ENDIF
ENDIF
WHEN (Axis_MC_ReadAxisError.AxisErrorCount = 0) AND \\
Axis_MC_ReadStatus.Errorstop AND \\
Axis_MC_ReadStatus.Valid
lAxis.Error.uiID = 0
NEXT AxSTATE_ERROR_RESET
WHEN (Axis_MC_ReadAxisError.AxisErrorCount = 0)
lAxis.Error.uiID = 0
NEXT AxSTATE_WAIT
;==============================================
;Reset DONE
STATE AxSTATE_ERROR_RESET
strcpy (ADR (lAxis.sStep), "AxSTATE_ERROR_RESET")
Axis_MC_Reset.Execute = 1
IF Axis_MC_Power.Error THEN
Axis_MC_Power.Enable = 0
ENDIF
WHEN Axis_MC_Reset.Done
Axis_MC_Reset.Execute = 0
NEXT AxSTATE_WAIT
;check for error occured
WHEN (Axis_MC_Reset.ErrorID <> 0)
lAxis.Error.uiID = Axis_MC_Reset.ErrorID
Axis_MC_Reset.Execute = 0
NEXT AxSTATE_ERROR
; when ((Axis_MC_ReadAxisError.AxisErrorID = 0) and (Axis_MC_ReadAxisError.Valid = true))
; Axis_MC_Reset.Execute = 0
; next AxSTATE_WAIT
ENDSELECT
;--------------------------------------------
;Override Velocity and Acceleration
Axis_MC_SetOverride.Enable = (lAxis.Para.rOverrideVelocity <> 1.0) OR (lAxis.Para.rOverrideAcceleration <> 1.0)
Axis_MC_SetOverride.VelFactor = lAxis.Para.rOverrideVelocity
Axis_MC_SetOverride.AccFactor = lAxis.Para.rOverrideAcceleration
Axis_MC_SetOverride FUB MC_SetOverride ()
;--------------------------------------------
;Call Function Blocks
Axis_MC_Power FUB MC_Power ()
Axis_MC_BR_Simulation FUB MC_BR_Simulation ()
Axis_MC_Home FUB MC_Home ()
Axis_MC_BR_InitModPos FUB MC_BR_InitModPos ()
Axis_MC_MoveAbsolute FUB MC_MoveAbsolute ()
Axis_MC_BR_MoveAbsoluteTriggStop FUB MC_BR_MoveAbsoluteTriggStop ()
Axis_MC_MoveAdditive FUB MC_MoveAdditive ()
Axis_MC_BR_MoveAdditiveTriggStop FUB MC_BR_MoveAdditiveTriggStop ()
Axis_MC_MoveVelocity FUB MC_MoveVelocity ()
AXis_MC_BR_MoveVelocityTriggStop FUB MC_BR_MoveVelocityTriggStop ()
Axis_MC_CamTableSelect FUB MC_CamTableSelect()
Axis_MC_CamIn FUB MC_CamIn ()
Axis_MC_CamOut FUB MC_CamOut ()
Axis_MC_GearIn FUB MC_GearIn ()
Axis_MC_GearInPos FUB MC_GearInPos ()
Axis_MC_GearOut FUB MC_GearOut ()
Axis_MC_Stop FUB MC_Stop ()
Axis_MC_Reset FUB MC_Reset ()
Axis_MC_BR_TorqueControl FUB MC_BR_TorqueControl ()
;--------------------------------------------
;Cyclic Parameter Read
Axis_MC_BR_CyclicRead.Enable = 0
;Axis_MC_BR_CyclicRead.ParID = 4160 ; 4160 User Variable0 I2
;Axis_MC_BR_CyclicRead.DataAddress = adr ()
;Axis_MC_BR_CyclicRead.DataType = ncPAR_TYP_INT
Axis_MC_BR_CyclicRead FUB MC_BR_CyclicRead ()
;---------------------------------------------
;Read individual Parameter
IF Axis_MC_BR_ReadParID.Done THEN
ENDIF
IF Axis_MC_BR_ReadParID.Error THEN
uiMCReadError = Axis_MC_BR_ReadParID.ErrorID
ENDIF
Axis_MC_BR_ReadParID.Execute = 0
Axis_MC_BR_ReadParID.ParID = 4128
Axis_MC_BR_ReadParID.DataAddress = ADR (lAxis)
Axis_MC_BR_ReadParID.DataType = ncPAR_TYP_REAL
Axis_MC_BR_ReadParID FUB MC_BR_ReadParID ()
;--------------------------------------------
;Write individual Parameter
;Write UserParam1 on change
(*
rUser_Var1 access lAxis.Para.udAdrParamUserVar1
if (rUser_VarTemp <> rUser_Var1) and\
not Axis_MC_BR_WriteParID.Busy then
Axis_MC_BR_WriteParID.Execute = 1
rUser_VarTemp = rUser_Var1
endif
if Axis_MC_BR_WriteParID.Done or Axis_MC_BR_WriteParID.Error then
if Axis_MC_BR_WriteParID.Error then
uiMCWriteError = Axis_MC_BR_WriteParID.ErrorID
endif
Axis_MC_BR_WriteParID.Execute = 0
endif
Axis_MC_BR_WriteParID.ParID = 586 ;USER_R4_VAR1
Axis_MC_BR_WriteParID.DataAddress = adr (rUser_VarTemp)
Axis_MC_BR_WriteParID.DataType = ncPAR_TYP_REAL
Axis_MC_BR_WriteParID fub MC_BR_WriteParID ()
*)
;-----------------------------------------------
;Cyclick write of Parameter
Axis_MC_BR_CyclicWrite.Enable = FALSE
Axis_MC_BR_CyclicWrite.DataAddress = ADR (rUser_VarTemp)
Axis_MC_BR_CyclicWrite.DataType = ncPAR_TYP_REAL
Axis_MC_BR_CyclicWrite.ParID = 586 ;USER_R4_VAR1
Axis_MC_BR_CyclicWrite FUB MC_BR_CyclicWrite ()
END_PROGRAM

View File

@@ -0,0 +1,80 @@
PROGRAM _INIT
(* init program *)
;Which Axis
lAxis ACCESS ADR (gAxis[0])
lAxisActPos ACCESS ADR (gAxisActPos[0])
lAxisMaster ACCESS ADR (gAxis[1])
lbSimulation ACCESS ADR (gFalse)
rUser_Var1 ACCESS ADR (grDummy)
;Configure Trigger for Triggermovements (Absolute/Additive/Velocity)
Axis_MC_BR_MoveAbsoluteTriggStop.TriggerInput.InputSource = ncTRIGGER1 //ncTrigger2
Axis_MC_BR_MoveAbsoluteTriggStop.TriggerInput.Edge = ncP_EDGE //ncN_Edge
Axis_MC_BR_MoveAdditiveTriggStop.TriggerInput.InputSource = ncTRIGGER1 //ncTrigger2
Axis_MC_BR_MoveAdditiveTriggStop.TriggerInput.Edge = ncP_EDGE //ncN_Edge
AXis_MC_BR_MoveVelocityTriggStop.TriggerInput.InputSource = ncTRIGGER1 //ncTrigger2
AXis_MC_BR_MoveVelocityTriggStop.TriggerInput.Edge = ncP_EDGE //ncN_Edge
;Access global ACP10 Axis Objects
udAxisObj = ADR (gAxWire1)
;This Axis is always slave (incase of CAM/Gea
udAxisMasterObj = ADR (gAxWire1)
udAxisSlaveObj = udAxisObj
;Initial Step
lAxis.uiStep = AxSTATE_WAIT
;Overhand Axis Obj to FunctionBlocks
Axis_MC_BR_ReadDriveStatus.Axis = udAxisObj
Axis_MC_BR_Simulation.Axis = udAxisObj
Axis_MC_BR_TorqueControl.Axis = udAxisObj
Axis_MC_BR_VelocityControl.Axis = udAxisObj
Axis_MC_CamIn.Master = udAxisMasterObj
Axis_MC_CamIn.Slave = udAxisSlaveObj
Axis_MC_CamOut.Slave = udAxisSlaveObj
Axis_MC_CamTableSelect.Master = udAxisMasterObj
Axis_MC_CamTableSelect.Slave = udAxisSlaveObj
Axis_MC_GearIn.Master = udAxisMasterObj
Axis_MC_GearIn.Slave = udAxisSlaveObj
Axis_MC_GearInPos.Master = udAxisMasterObj
Axis_MC_GearInPos.Slave = udAxisSlaveObj
Axis_MC_GearOut.Slave = udAxisSlaveObj
Axis_MC_Home.Axis = udAxisObj
Axis_MC_BR_InitModPos.Axis = udAxisMasterObj
Axis_MC_MoveAbsolute.Axis = udAxisObj
Axis_MC_BR_MoveAbsoluteTriggStop.Axis = udAxisObj
Axis_MC_MoveAdditive.Axis = udAxisObj
Axis_MC_BR_MoveAdditiveTriggStop.Axis = udAxisObj
Axis_MC_MoveVelocity.Axis = udAxisObj
AXis_MC_BR_MoveVelocityTriggStop.Axis = udAxisObj
Axis_MC_Power.Axis = udAxisObj
Axis_MC_ReadActualPosition.Axis = udAxisObj
Axis_MC_ReadActualVelocity.Axis = udAxisObj
Axis_MC_ReadActualTorque.Axis = udAxisObj
Axis_MC_ReadAxisError.Axis = udAxisObj
Axis_MC_ReadStatus.Axis = udAxisObj
Axis_MC_Reset.Axis = udAxisObj
Axis_MC_SetOverride.Axis = udAxisObj
Axis_MC_Stop.Axis = udAxisObj
;Parameter
Axis_MC_BR_CyclicRead.Axis = udAxisObj
Axis_MC_BR_CyclicWrite.Axis = udAxisObj
Axis_MC_BR_ReadParID.Axis = udAxisObj
Axis_MC_BR_WriteParID.Axis = udAxisObj
strcpy (ADR (Axis_MC_ReadAxisError.DataObjectName), "acp10etxde")
;Enable Fubs
Axis_MC_ReadAxisError.Enable = true
Axis_MC_ReadStatus.Enable = true
Axis_MC_ReadActualPosition.Enable = true
Axis_MC_ReadActualVelocity.Enable = true
Axis_MC_ReadActualTorque.Enable = false //Not for Stepper Axises
Axis_MC_BR_ReadDriveStatus.Enable = true
END_PROGRAM

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.21 SP03?>
<Program xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File>axInit.ab</File>
<File Reference="true">\Logical\Axises\Axis1\axCyclic.ab</File>
<File Description="Local variables" Private="true" Reference="true">\Logical\Axises\Axis1\ax.var</File>
</Files>
</Program>

View File

@@ -0,0 +1,80 @@
PROGRAM _INIT
(* init program *)
;Which Axis
lAxis ACCESS ADR (gAxis[1])
lAxisActPos ACCESS ADR (gAxisActPos[1])
lAxisMaster ACCESS ADR (gAxis[0])
lbSimulation ACCESS ADR (gFalse)
rUser_Var1 ACCESS ADR (grDummy)
;Configure Trigger for Triggermovements (Absolute/Additive/Velocity)
Axis_MC_BR_MoveAbsoluteTriggStop.TriggerInput.InputSource = ncTRIGGER1 //ncTrigger2
Axis_MC_BR_MoveAbsoluteTriggStop.TriggerInput.Edge = ncP_EDGE //ncN_Edge
Axis_MC_BR_MoveAdditiveTriggStop.TriggerInput.InputSource = ncTRIGGER1 //ncTrigger2
Axis_MC_BR_MoveAdditiveTriggStop.TriggerInput.Edge = ncP_EDGE //ncN_Edge
AXis_MC_BR_MoveVelocityTriggStop.TriggerInput.InputSource = ncTRIGGER1 //ncTrigger2
AXis_MC_BR_MoveVelocityTriggStop.TriggerInput.Edge = ncP_EDGE //ncN_Edge
;Access global ACP10 Axis Objects
udAxisObj = ADR (gAxWire2)
;This Axis is always slave (incase of CAM/Gear)
udAxisMasterObj = ADR (gAxWire1)
udAxisSlaveObj = udAxisObj
;Initial Step
lAxis.uiStep = AxSTATE_WAIT
;Overhand Axis Obj to FunctionBlocks
Axis_MC_BR_ReadDriveStatus.Axis = udAxisObj
Axis_MC_BR_Simulation.Axis = udAxisObj
Axis_MC_BR_TorqueControl.Axis = udAxisObj
Axis_MC_BR_VelocityControl.Axis = udAxisObj
Axis_MC_CamIn.Master = udAxisMasterObj
Axis_MC_CamIn.Slave = udAxisSlaveObj
Axis_MC_CamOut.Slave = udAxisSlaveObj
Axis_MC_CamTableSelect.Master = udAxisMasterObj
Axis_MC_CamTableSelect.Slave = udAxisSlaveObj
Axis_MC_GearIn.Master = udAxisMasterObj
Axis_MC_GearIn.Slave = udAxisSlaveObj
Axis_MC_GearInPos.Master = udAxisMasterObj
Axis_MC_GearInPos.Slave = udAxisSlaveObj
Axis_MC_GearOut.Slave = udAxisSlaveObj
Axis_MC_Home.Axis = udAxisObj
Axis_MC_BR_InitModPos.Axis = udAxisMasterObj
Axis_MC_MoveAbsolute.Axis = udAxisObj
Axis_MC_BR_MoveAbsoluteTriggStop.Axis = udAxisObj
Axis_MC_MoveAdditive.Axis = udAxisObj
Axis_MC_BR_MoveAdditiveTriggStop.Axis = udAxisObj
Axis_MC_MoveVelocity.Axis = udAxisObj
AXis_MC_BR_MoveVelocityTriggStop.Axis = udAxisObj
Axis_MC_Power.Axis = udAxisObj
Axis_MC_ReadActualPosition.Axis = udAxisObj
Axis_MC_ReadActualVelocity.Axis = udAxisObj
Axis_MC_ReadActualTorque.Axis = udAxisObj
Axis_MC_ReadAxisError.Axis = udAxisObj
Axis_MC_ReadStatus.Axis = udAxisObj
Axis_MC_Reset.Axis = udAxisObj
Axis_MC_SetOverride.Axis = udAxisObj
Axis_MC_Stop.Axis = udAxisObj
;Parameter
Axis_MC_BR_CyclicRead.Axis = udAxisObj
Axis_MC_BR_CyclicWrite.Axis = udAxisObj
Axis_MC_BR_ReadParID.Axis = udAxisObj
Axis_MC_BR_WriteParID.Axis = udAxisObj
strcpy (ADR (Axis_MC_ReadAxisError.DataObjectName), "acp10etxde")
;Enable Fubs
Axis_MC_ReadAxisError.Enable = true
Axis_MC_ReadStatus.Enable = true
Axis_MC_ReadActualPosition.Enable = true
Axis_MC_ReadActualVelocity.Enable = true
Axis_MC_ReadActualTorque.Enable = false //Not for Stepper Axises
Axis_MC_BR_ReadDriveStatus.Enable = true
END_PROGRAM

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.21 SP03?>
<Program xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File>axInit.ab</File>
<File Reference="true">\Logical\Axises\Axis1\axCyclic.ab</File>
<File Description="Local variables" Private="true" Reference="true">\Logical\Axises\Axis1\ax.var</File>
</Files>
</Program>

View File

@@ -0,0 +1,80 @@
PROGRAM _INIT
(* init program *)
;Which Axis
lAxis ACCESS ADR (gAxis[2])
lAxisActPos ACCESS ADR (gAxisActPos[2])
lAxisMaster ACCESS ADR (gAxis[0])
lbSimulation ACCESS ADR (gFalse)
rUser_Var1 ACCESS ADR (grDummy)
;Configure Trigger for Triggermovements (Absolute/Additive/Velocity)
Axis_MC_BR_MoveAbsoluteTriggStop.TriggerInput.InputSource = ncTRIGGER1 //ncTrigger2
Axis_MC_BR_MoveAbsoluteTriggStop.TriggerInput.Edge = ncP_EDGE //ncN_Edge
Axis_MC_BR_MoveAdditiveTriggStop.TriggerInput.InputSource = ncTRIGGER1 //ncTrigger2
Axis_MC_BR_MoveAdditiveTriggStop.TriggerInput.Edge = ncP_EDGE //ncN_Edge
AXis_MC_BR_MoveVelocityTriggStop.TriggerInput.InputSource = ncTRIGGER1 //ncTrigger2
AXis_MC_BR_MoveVelocityTriggStop.TriggerInput.Edge = ncP_EDGE //ncN_Edge
;Access global ACP10 Axis Objects
udAxisObj = ADR (gAxBelt)
;This Axis is always slave (incase of CAM/Gear)
udAxisMasterObj = ADR (gAxBelt)
udAxisSlaveObj = udAxisObj
;Initial Step
lAxis.uiStep = AxSTATE_WAIT
;Overhand Axis Obj to FunctionBlocks
Axis_MC_BR_ReadDriveStatus.Axis = udAxisObj
Axis_MC_BR_Simulation.Axis = udAxisObj
Axis_MC_BR_TorqueControl.Axis = udAxisObj
Axis_MC_BR_VelocityControl.Axis = udAxisObj
Axis_MC_CamIn.Master = udAxisMasterObj
Axis_MC_CamIn.Slave = udAxisSlaveObj
Axis_MC_CamOut.Slave = udAxisSlaveObj
Axis_MC_CamTableSelect.Master = udAxisMasterObj
Axis_MC_CamTableSelect.Slave = udAxisSlaveObj
Axis_MC_GearIn.Master = udAxisMasterObj
Axis_MC_GearIn.Slave = udAxisSlaveObj
Axis_MC_GearInPos.Master = udAxisMasterObj
Axis_MC_GearInPos.Slave = udAxisSlaveObj
Axis_MC_GearOut.Slave = udAxisSlaveObj
Axis_MC_Home.Axis = udAxisObj
Axis_MC_BR_InitModPos.Axis = udAxisMasterObj
Axis_MC_MoveAbsolute.Axis = udAxisObj
Axis_MC_BR_MoveAbsoluteTriggStop.Axis = udAxisObj
Axis_MC_MoveAdditive.Axis = udAxisObj
Axis_MC_BR_MoveAdditiveTriggStop.Axis = udAxisObj
Axis_MC_MoveVelocity.Axis = udAxisObj
AXis_MC_BR_MoveVelocityTriggStop.Axis = udAxisObj
Axis_MC_Power.Axis = udAxisObj
Axis_MC_ReadActualPosition.Axis = udAxisObj
Axis_MC_ReadActualVelocity.Axis = udAxisObj
Axis_MC_ReadActualTorque.Axis = udAxisObj
Axis_MC_ReadAxisError.Axis = udAxisObj
Axis_MC_ReadStatus.Axis = udAxisObj
Axis_MC_Reset.Axis = udAxisObj
Axis_MC_SetOverride.Axis = udAxisObj
Axis_MC_Stop.Axis = udAxisObj
;Parameter
Axis_MC_BR_CyclicRead.Axis = udAxisObj
Axis_MC_BR_CyclicWrite.Axis = udAxisObj
Axis_MC_BR_ReadParID.Axis = udAxisObj
Axis_MC_BR_WriteParID.Axis = udAxisObj
strcpy (ADR (Axis_MC_ReadAxisError.DataObjectName), "acp10etxde")
;Enable Fubs
Axis_MC_ReadAxisError.Enable = true
Axis_MC_ReadStatus.Enable = true
Axis_MC_ReadActualPosition.Enable = true
Axis_MC_ReadActualVelocity.Enable = true
Axis_MC_ReadActualTorque.Enable = false //Not for Stepper Axises
Axis_MC_BR_ReadDriveStatus.Enable = true
END_PROGRAM

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.21 SP03?>
<Program xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File>axInit.ab</File>
<File Reference="true">\Logical\Axises\Axis1\axCyclic.ab</File>
<File Description="Local variables" Private="true" Reference="true">\Logical\Axises\Axis1\ax.var</File>
</Files>
</Program>

View File

@@ -0,0 +1,80 @@
PROGRAM _INIT
(* init program *)
;Which Axis
lAxis ACCESS ADR (gAxis[3])
lAxisActPos ACCESS ADR (gAxisActPos[3])
lAxisMaster ACCESS ADR (gAxis[0])
lbSimulation ACCESS ADR (gFalse)
rUser_Var1 ACCESS ADR (grDummy)
;Configure Trigger for Triggermovements (Absolute/Additive/Velocity)
Axis_MC_BR_MoveAbsoluteTriggStop.TriggerInput.InputSource = ncTRIGGER1 //ncTrigger2
Axis_MC_BR_MoveAbsoluteTriggStop.TriggerInput.Edge = ncP_EDGE //ncN_Edge
Axis_MC_BR_MoveAdditiveTriggStop.TriggerInput.InputSource = ncTRIGGER1 //ncTrigger2
Axis_MC_BR_MoveAdditiveTriggStop.TriggerInput.Edge = ncP_EDGE //ncN_Edge
AXis_MC_BR_MoveVelocityTriggStop.TriggerInput.InputSource = ncTRIGGER1 //ncTrigger2
AXis_MC_BR_MoveVelocityTriggStop.TriggerInput.Edge = ncP_EDGE //ncN_Edge
;Access global ACP10 Axis Objects
udAxisObj = ADR (gAxLane)
;This Axis is always slave (incase of CAM/Gear)
udAxisMasterObj = ADR (gAxLane)
udAxisSlaveObj = udAxisObj
;Initial Step
lAxis.uiStep = AxSTATE_WAIT
;Overhand Axis Obj to FunctionBlocks
Axis_MC_BR_ReadDriveStatus.Axis = udAxisObj
Axis_MC_BR_Simulation.Axis = udAxisObj
Axis_MC_BR_TorqueControl.Axis = udAxisObj
Axis_MC_BR_VelocityControl.Axis = udAxisObj
Axis_MC_CamIn.Master = udAxisMasterObj
Axis_MC_CamIn.Slave = udAxisSlaveObj
Axis_MC_CamOut.Slave = udAxisSlaveObj
Axis_MC_CamTableSelect.Master = udAxisMasterObj
Axis_MC_CamTableSelect.Slave = udAxisSlaveObj
Axis_MC_GearIn.Master = udAxisMasterObj
Axis_MC_GearIn.Slave = udAxisSlaveObj
Axis_MC_GearInPos.Master = udAxisMasterObj
Axis_MC_GearInPos.Slave = udAxisSlaveObj
Axis_MC_GearOut.Slave = udAxisSlaveObj
Axis_MC_Home.Axis = udAxisObj
Axis_MC_BR_InitModPos.Axis = udAxisMasterObj
Axis_MC_MoveAbsolute.Axis = udAxisObj
Axis_MC_BR_MoveAbsoluteTriggStop.Axis = udAxisObj
Axis_MC_MoveAdditive.Axis = udAxisObj
Axis_MC_BR_MoveAdditiveTriggStop.Axis = udAxisObj
Axis_MC_MoveVelocity.Axis = udAxisObj
AXis_MC_BR_MoveVelocityTriggStop.Axis = udAxisObj
Axis_MC_Power.Axis = udAxisObj
Axis_MC_ReadActualPosition.Axis = udAxisObj
Axis_MC_ReadActualVelocity.Axis = udAxisObj
Axis_MC_ReadActualTorque.Axis = udAxisObj
Axis_MC_ReadAxisError.Axis = udAxisObj
Axis_MC_ReadStatus.Axis = udAxisObj
Axis_MC_Reset.Axis = udAxisObj
Axis_MC_SetOverride.Axis = udAxisObj
Axis_MC_Stop.Axis = udAxisObj
;Parameter
Axis_MC_BR_CyclicRead.Axis = udAxisObj
Axis_MC_BR_CyclicWrite.Axis = udAxisObj
Axis_MC_BR_ReadParID.Axis = udAxisObj
Axis_MC_BR_WriteParID.Axis = udAxisObj
strcpy (ADR (Axis_MC_ReadAxisError.DataObjectName), "acp10etxde")
;Enable Fubs
Axis_MC_ReadAxisError.Enable = true
Axis_MC_ReadStatus.Enable = true
Axis_MC_ReadActualPosition.Enable = true
Axis_MC_ReadActualVelocity.Enable = true
Axis_MC_ReadActualTorque.Enable = false //Not for Stepper Axises
Axis_MC_BR_ReadDriveStatus.Enable = true
END_PROGRAM

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.21 SP03?>
<Program xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File>axInit.ab</File>
<File Reference="true">\Logical\Axises\Axis1\axCyclic.ab</File>
<File Description="Local variables" Private="true" Reference="true">\Logical\Axises\Axis1\ax.var</File>
</Files>
</Program>

View File

@@ -0,0 +1,80 @@
PROGRAM _INIT
(* init program *)
;Which Axis
lAxis ACCESS ADR (gAxis[4])
lAxisActPos ACCESS ADR (gAxisActPos[4])
lAxisMaster ACCESS ADR (gAxis[0])
lbSimulation ACCESS ADR (gFalse)
rUser_Var1 ACCESS ADR (grDummy)
;Configure Trigger for Triggermovements (Absolute/Additive/Velocity)
Axis_MC_BR_MoveAbsoluteTriggStop.TriggerInput.InputSource = ncTRIGGER1 //ncTrigger2
Axis_MC_BR_MoveAbsoluteTriggStop.TriggerInput.Edge = ncP_EDGE //ncN_Edge
Axis_MC_BR_MoveAdditiveTriggStop.TriggerInput.InputSource = ncTRIGGER1 //ncTrigger2
Axis_MC_BR_MoveAdditiveTriggStop.TriggerInput.Edge = ncP_EDGE //ncN_Edge
AXis_MC_BR_MoveVelocityTriggStop.TriggerInput.InputSource = ncTRIGGER1 //ncTrigger2
AXis_MC_BR_MoveVelocityTriggStop.TriggerInput.Edge = ncP_EDGE //ncN_Edge
;Access global ACP10 Axis Objects
udAxisObj = ADR (gAxBend1)
;This Axis is always slave (incase of CAM/Gear)
udAxisMasterObj = ADR (gAxBend1)
udAxisSlaveObj = udAxisObj
;Initial Step
lAxis.uiStep = AxSTATE_WAIT
;Overhand Axis Obj to FunctionBlocks
Axis_MC_BR_ReadDriveStatus.Axis = udAxisObj
Axis_MC_BR_Simulation.Axis = udAxisObj
Axis_MC_BR_TorqueControl.Axis = udAxisObj
Axis_MC_BR_VelocityControl.Axis = udAxisObj
Axis_MC_CamIn.Master = udAxisMasterObj
Axis_MC_CamIn.Slave = udAxisSlaveObj
Axis_MC_CamOut.Slave = udAxisSlaveObj
Axis_MC_CamTableSelect.Master = udAxisMasterObj
Axis_MC_CamTableSelect.Slave = udAxisSlaveObj
Axis_MC_GearIn.Master = udAxisMasterObj
Axis_MC_GearIn.Slave = udAxisSlaveObj
Axis_MC_GearInPos.Master = udAxisMasterObj
Axis_MC_GearInPos.Slave = udAxisSlaveObj
Axis_MC_GearOut.Slave = udAxisSlaveObj
Axis_MC_Home.Axis = udAxisObj
Axis_MC_BR_InitModPos.Axis = udAxisMasterObj
Axis_MC_MoveAbsolute.Axis = udAxisObj
Axis_MC_BR_MoveAbsoluteTriggStop.Axis = udAxisObj
Axis_MC_MoveAdditive.Axis = udAxisObj
Axis_MC_BR_MoveAdditiveTriggStop.Axis = udAxisObj
Axis_MC_MoveVelocity.Axis = udAxisObj
AXis_MC_BR_MoveVelocityTriggStop.Axis = udAxisObj
Axis_MC_Power.Axis = udAxisObj
Axis_MC_ReadActualPosition.Axis = udAxisObj
Axis_MC_ReadActualVelocity.Axis = udAxisObj
Axis_MC_ReadActualTorque.Axis = udAxisObj
Axis_MC_ReadAxisError.Axis = udAxisObj
Axis_MC_ReadStatus.Axis = udAxisObj
Axis_MC_Reset.Axis = udAxisObj
Axis_MC_SetOverride.Axis = udAxisObj
Axis_MC_Stop.Axis = udAxisObj
;Parameter
Axis_MC_BR_CyclicRead.Axis = udAxisObj
Axis_MC_BR_CyclicWrite.Axis = udAxisObj
Axis_MC_BR_ReadParID.Axis = udAxisObj
Axis_MC_BR_WriteParID.Axis = udAxisObj
strcpy (ADR (Axis_MC_ReadAxisError.DataObjectName), "acp10etxde")
;Enable Fubs
Axis_MC_ReadAxisError.Enable = true
Axis_MC_ReadStatus.Enable = true
Axis_MC_ReadActualPosition.Enable = true
Axis_MC_ReadActualVelocity.Enable = true
Axis_MC_ReadActualTorque.Enable = false //Not for Stepper Axises
Axis_MC_BR_ReadDriveStatus.Enable = true
END_PROGRAM

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.21 SP03?>
<Program xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File>axInit.ab</File>
<File Reference="true">\Logical\Axises\Axis1\axCyclic.ab</File>
<File Description="Local variables" Private="true" Reference="true">\Logical\Axises\Axis1\ax.var</File>
</Files>
</Program>

View File

@@ -0,0 +1,80 @@
PROGRAM _INIT
(* init program *)
;Which Axis
lAxis ACCESS ADR (gAxis[5])
lAxisActPos ACCESS ADR (gAxisActPos[5])
lAxisMaster ACCESS ADR (gAxis[0])
lbSimulation ACCESS ADR (gFalse)
rUser_Var1 ACCESS ADR (grDummy)
;Configure Trigger for Triggermovements (Absolute/Additive/Velocity)
Axis_MC_BR_MoveAbsoluteTriggStop.TriggerInput.InputSource = ncTRIGGER1 //ncTrigger2
Axis_MC_BR_MoveAbsoluteTriggStop.TriggerInput.Edge = ncP_EDGE //ncN_Edge
Axis_MC_BR_MoveAdditiveTriggStop.TriggerInput.InputSource = ncTRIGGER1 //ncTrigger2
Axis_MC_BR_MoveAdditiveTriggStop.TriggerInput.Edge = ncP_EDGE //ncN_Edge
AXis_MC_BR_MoveVelocityTriggStop.TriggerInput.InputSource = ncTRIGGER1 //ncTrigger2
AXis_MC_BR_MoveVelocityTriggStop.TriggerInput.Edge = ncP_EDGE //ncN_Edge
;Access global ACP10 Axis Objects
udAxisObj = ADR (gAxBend2)
;This Axis is always slave (incase of CAM/Gear)
udAxisMasterObj = ADR (gAxBend2)
udAxisSlaveObj = udAxisObj
;Initial Step
lAxis.uiStep = AxSTATE_WAIT
;Overhand Axis Obj to FunctionBlocks
Axis_MC_BR_ReadDriveStatus.Axis = udAxisObj
Axis_MC_BR_Simulation.Axis = udAxisObj
Axis_MC_BR_TorqueControl.Axis = udAxisObj
Axis_MC_BR_VelocityControl.Axis = udAxisObj
Axis_MC_CamIn.Master = udAxisMasterObj
Axis_MC_CamIn.Slave = udAxisSlaveObj
Axis_MC_CamOut.Slave = udAxisSlaveObj
Axis_MC_CamTableSelect.Master = udAxisMasterObj
Axis_MC_CamTableSelect.Slave = udAxisSlaveObj
Axis_MC_GearIn.Master = udAxisMasterObj
Axis_MC_GearIn.Slave = udAxisSlaveObj
Axis_MC_GearInPos.Master = udAxisMasterObj
Axis_MC_GearInPos.Slave = udAxisSlaveObj
Axis_MC_GearOut.Slave = udAxisSlaveObj
Axis_MC_Home.Axis = udAxisObj
Axis_MC_BR_InitModPos.Axis = udAxisMasterObj
Axis_MC_MoveAbsolute.Axis = udAxisObj
Axis_MC_BR_MoveAbsoluteTriggStop.Axis = udAxisObj
Axis_MC_MoveAdditive.Axis = udAxisObj
Axis_MC_BR_MoveAdditiveTriggStop.Axis = udAxisObj
Axis_MC_MoveVelocity.Axis = udAxisObj
AXis_MC_BR_MoveVelocityTriggStop.Axis = udAxisObj
Axis_MC_Power.Axis = udAxisObj
Axis_MC_ReadActualPosition.Axis = udAxisObj
Axis_MC_ReadActualVelocity.Axis = udAxisObj
Axis_MC_ReadActualTorque.Axis = udAxisObj
Axis_MC_ReadAxisError.Axis = udAxisObj
Axis_MC_ReadStatus.Axis = udAxisObj
Axis_MC_Reset.Axis = udAxisObj
Axis_MC_SetOverride.Axis = udAxisObj
Axis_MC_Stop.Axis = udAxisObj
;Parameter
Axis_MC_BR_CyclicRead.Axis = udAxisObj
Axis_MC_BR_CyclicWrite.Axis = udAxisObj
Axis_MC_BR_ReadParID.Axis = udAxisObj
Axis_MC_BR_WriteParID.Axis = udAxisObj
strcpy (ADR (Axis_MC_ReadAxisError.DataObjectName), "acp10etxde")
;Enable Fubs
Axis_MC_ReadAxisError.Enable = true
Axis_MC_ReadStatus.Enable = true
Axis_MC_ReadActualPosition.Enable = true
Axis_MC_ReadActualVelocity.Enable = true
Axis_MC_ReadActualTorque.Enable = false //Not for Stepper Axises
Axis_MC_BR_ReadDriveStatus.Enable = true
END_PROGRAM

View File

@@ -0,0 +1,100 @@
TYPE
typAxis_Move : STRUCT
bAbsolute : BOOL; (*Absolute Movement*)
bAdditive : BOOL; (*Additive Movement*)
bVelocity : BOOL; (*Continuous Movement with Constant Velocity*)
bVelocityControl : BOOL; (*Continuous Movement with variable Velocity / Torquelimit ONLY Powerlink*)
bTorqueControl : BOOL; (*Continuous Movement with variable Velocity / Torquecontrol*)
bJogPos : BOOL; (*Jog Mode*)
bJogNeg : BOOL; (*Jog Mode*)
bStartCAMSlave : BOOL; (*CAM*)
bStopCAMSlave : BOOL; (*CAM*)
bStartGearSlave : BOOL; (*Gear Speed*)
bStartGearPosSlave : BOOL; (*Gear Position*)
bStopGearSlave : BOOL; (*Gear*)
END_STRUCT;
typAxis_Error : STRUCT
uiNcAccess : UINT;
uiNcAccessMaster : UINT;
bAcknowledge : BOOL;
uiID : UINT;
Text : ARRAY[0..3]OF STRING[79];
END_STRUCT;
typAxis_Status : STRUCT (*Status of Axopos*)
bDisabled : BOOL;
bStandstill : BOOL;
bStopping : BOOL;
bHoming : BOOL;
bMotionDiscrete : BOOL;
bMotionContinous : BOOL;
bMotionSynchronized : BOOL;
bErrorstop : BOOL;
bTorqueLimitReached : BOOL; (*Torquelimit from Move.bTorqueControl *)
END_STRUCT;
typAxis_DriveStatus : STRUCT
bSimulation : BOOL; (*Axis Simulation*)
bNetworkInit : BOOL;
bHomeSwitch : BOOL;
bPosHWSwitch : BOOL;
bNegHWSwitch : BOOL;
bTrigger1 : BOOL;
bTrigger2 : BOOL;
bDriveEnable : BOOL;
bControllerReady : BOOL;
bControllerStatus : BOOL;
bHomingOk : BOOL;
bAxisError : BOOL;
bLagWarning : BOOL;
END_STRUCT;
typAxis_Para : STRUCT
bTriggStop : BOOL; (*Use Trigger Stop for Move Absolute/Additive/Velocity*)
usDirection : USINT; (*Direction for Move Velocity*)
udAxisModPosPeriod : UDINT := 0; (*For Modulo Position - Axis period*)
udAxisModPosFactor : UDINT := 0; (*For Modulo Position - Axis Factor*)
udAdrParamUserVar1 : UDINT; (*Address: Cyclic to Acopos transmitted Value*)
rPosition : REAL; (*Position for Absolute Movement*)
rDistance : REAL; (*Distance for Additive Movement*)
rTriggDistance : REAL; (*Distance for Trigger Movements (Absolue/Additive/Velocity)*)
rVelocity : REAL; (*Velocity for Movements*)
rOverrideVelocity : REAL := 1.0; (*Overridevalue for Velicity*)
rAcceleration : REAL; (*Acceleration for Movements*)
rOverrideAcceleration : REAL := 1.0; (*Overridevalue for Acceleration*)
rDeceleration : REAL; (*Deceleration for Movements*)
rHomePosition : REAL; (*Homepositoin for Homing*)
rJogVelocity : REAL; (*Velocity for Jog*)
rTorqueLimit : REAL; (*Torquelimit for TorqueControl*)
iGearRatioNumerator : INT := 1; (*CAM/Gear*)
uiGearRatioDenominator : UINT := 1; (*CAM/Gear*)
strCamTable : STRING[12]; (*CAM*)
END_STRUCT;
typAxis : STRUCT
sStep : STRING[40];
uiStep : UINT;
bPower : BOOL;
bHome : BOOL;
bStop : BOOL;
rActPosition : REAL; (*Current Position*)
rActVelocity : REAL; (*Current Velocity*)
rActTorque : REAL; (*Current Torque*)
rReachedTorque : REAL; (*Reached Torque After Stop with Torquelimit*)
diPositionReachedTorque : DINT; (*Position where Torque was reached*)
Move : typAxis_Move;
Error : typAxis_Error;
Status : typAxis_Status;
DriveStatus : typAxis_DriveStatus;
Para : typAxis_Para;
END_STRUCT;
typMultAx_Trace : STRUCT (*MultiaxTrace*)
sStep : STRING[25];
bStartSave : BOOL; (*Activate Trace*)
bLoadConfig : BOOL; (*Load Trace Config*)
bStop : USINT; (*Stop Trace*)
uiTraceStep : USINT; (*Step of Trace*)
uiTraceState : UINT; (*Status of Trace*)
uiTraceError : UINT; (*Error of Trace*)
Trace_Config : MC_PARTRACECONFIG_REF; (*Configuration of Trase*)
Trace_DatObj_Refercence : MC_DATOBJ_REF; (*Parameter for Save the Trace-Config*)
Trace_Error_Record : MC_ERRORRECORD_REF; (*Fehlerspeicher*)
END_STRUCT;
END_TYPE

View File

@@ -0,0 +1,61 @@
VAR
gAxis : ARRAY[0..7] OF typAxis; (*Axis Datasructure / Controlinterface*)
gMAxTrace : typMultAx_Trace; (*Multiaxtrace*)
gAxisActPos : ARRAY[0..7] OF REAL;
grDummy : REAL; (*Dummy Real to be accessed from Axistasks*)
END_VAR
(*//ACP/SDC Axobjects*)
VAR
gAxWire1 : ACP10AXIS_typ;
gAxWire2 : ACP10AXIS_typ;
gAxWire1_HW : SdcHwCfg_typ := (0);
gAxWire1_DrvIf : SdcDrvIf16_typ := (0);
gAxWire1_EncIf1 : SdcEncIf16_typ := (0);
gAxWire1_DiDoIf : SdcDiDoIf_typ := (0);
gAxWire1_TrigIf : SdcTrigIf_typ := (0);
gAxWire1_MotorStep0 : INT := 0;
gAxWire2_HW : SdcHwCfg_typ := (0);
gAxWire2_DrvIf : SdcDrvIf16_typ := (0);
gAxWire2_EncIf1 : SdcEncIf16_typ := (0);
gAxWire2_DiDoIf : SdcDiDoIf_typ := (0);
gAxWire2_MotorStep0 : INT := 0;
gAxLane : ACP10AXIS_typ;
gAxBelt : ACP10AXIS_typ;
gAxLane_HW : SdcHwCfg_typ := (0);
gAxLane_DrvIf : SdcDrvIf16_typ := (0);
gAxLane_EncIf1 : SdcEncIf16_typ := (0);
gAxLane_DiDoIf : SdcDiDoIf_typ := (0);
gAxLane_MotorStep0 : INT := 0;
gAxBelt_HW : SdcHwCfg_typ := (0);
gAxBelt_DrvIf : SdcDrvIf16_typ := (0);
gAxBelt_EncIf1 : SdcEncIf16_typ := (0);
gAxBelt_DiDoIf : SdcDiDoIf_typ := (0);
gAxBelt_MotorStep0 : INT := 0;
gAxBend1 : ACP10AXIS_typ;
gAxBend2 : ACP10AXIS_typ;
gAxBend1_HW : SdcHwCfg_typ := (0);
gAxBend1_DrvIf : SdcDrvIf16_typ := (0);
gAxBend1_EncIf1 : SdcEncIf16_typ := (0);
gAxBend1_DiDoIf : SdcDiDoIf_typ := (0);
gAxBend1_MotorStep0 : INT := 0;
gAxBend2_HW : SdcHwCfg_typ := (0);
gAxBend2_DrvIf : SdcDrvIf16_typ := (0);
gAxBend2_EncIf1 : SdcEncIf16_typ := (0);
gAxBend2_DiDoIf : SdcDiDoIf_typ := (0);
gAxBend2_MotorStep0 : INT := 0;
END_VAR
(*Constants*)
VAR CONSTANT
AxSTATE_WAIT : USINT := 0;
END_VAR
(*Grillparameter*)
VAR RETAIN
gbBladePoleUp : ARRAY[1..30] OF BOOL; (*Lamellenzapfen oben*)
gusBladesInFrame : ARRAY[1..30] OF USINT; (*Anzahl Lamellen f<>r Rahmen*)
gudOverallFramecount : UDINT;
gudFramecount : ARRAY[1..30] OF UDINT; (*Z<>hler*)
grBladewidth : ARRAY[1..30] OF REAL; (*Spurbreite f<>r Lamelle*)
grBladeShiftwidth : ARRAY[1..30] OF REAL; (*Takteweite f<>r Lamelle*)
grBladeWeldPos : ARRAY[1..30] OF REAL; (*Grillpos f<>r Lamelle*)
grBladeStartPos : ARRAY[1..30] OF REAL; (*Start f<>r Lamelle*)
END_VAR

View File

@@ -0,0 +1,90 @@
(**)
TYPE
typ_enBlade :
( (*Lamellentyp*)
enBlade_None, (*Dummytyp*)
enBlade_7789_Z07,
enBlade_7789_Z08,
enBlade_7789_Z09,
enBlade_7789_Z10,
enBlade_7617_Z04,
enBlade_7617_Z05,
enBlade_7618_Z04,
enBlade_7618_Z05,
enBlade_7619_Z04,
enBlade_7619_Z05,
enBlade_7620_Z04,
enBlade_7620_Z05,
enBlade_7733_Z01,
enBlade_7733_Z03,
enBlade_7734_Z01,
enBlade_7734_Z03,
enBlade_7735_Z01,
enBlade_7735_Z03,
enBlade_7736_Z01,
enBlade_7736_Z03
);
typ_enStepWirefeed :
( (*Schritte Drahtzuf<75>hrung / Verteiler*)
enWireStep_INIT,
enWireStep_FEED, (*Draht zuf<75>hren*)
enWireStep_BEND_END2, (*Drahtende 2 biegen*)
enWireStep_WAIT_BENT_END2, (*warten bis Drahtende 2 gebogen*)
enWireStep_WATT_BENDER2_OPEN, (*Drahtende 2 freigegeben*)
enWireStep_CUT, (*Draht schneiden*)
enWireStep_HOME_CUTTER, (*Cutter zur<75>ck in GS*)
enWireStep_BEND_END1, (*Drahtende 1 biegen*)
enWireStep_WAIT_BENT_END1, (*warten bis Drahtende 1 gebogen*)
enWireStep_WATT_BENDER1_OPEN, (*Drahtende 1 freigeben*)
enWireStep_CHANGE_LANE, (*Spurwechsel*)
enWireStep_WAIT_WIRE_PICKED, (*Warten bis Draht gegriffen ist*)
enWireStep_OPEN_WIREDISTRIBUTOR, (*Drahtverteiler <20>ffnen*)
enWireStep_WAIT_WIRE_AWAY, (*Warten bis Draht abgeholt ist*)
enWireStep_RETURN_LANE1, (*Auf Spur 1 (ggf.) zur<75>ck*)
enWireStep_WAIT_BENDERS_HOMED, (*Warten bis Bieger zur<75>ckgestelt sind*)
enWireStep_CLOSE_WIREDISTRIBUTOR, (*Drahtverteiler schlie<69>en*)
enWireStep_STOP
);
typ_enStepWireHandling :
( (*Schritte Drahthandlingeinheit*)
enWireHandlingStep_INIT,
enWireHandlingStep_WAIT_WIRE, (*Auf Draht warten*)
enWireHandlingStep_INSERT_HDL, (*Handling in Drahtverteiler einfahren*)
enWireHandlingStep_PRESTRETCH, (*Greifer vorspannen*)
enWireHandlingStep_PICK_WIRE, (*Draht greifen*)
enWireHandlingStep_WAIT_OPEN_D, (*Warten bis Drahtverteiler ge<67>ffnet*)
enWireHandlingStep_RETURN_HDL, (*Handling zur<75>ck fahren*)
enWireHandlingStep_LIFT_WIRE, (*Draht auffahren*)
enWireHandlingStep_WAIT_2ndWIRE, (*Synchronisieren mit Draht 2 bzw. 1*)
enWireHandlingStep_HEAT_WIRE, (*Draht vorheizen*)
enWireHandlingStep_INSERT_WIRE, (*Draht in Lamelle Einfahren*)
enWireHandlingStep_COOL_WIRE, (*Draht abk<62>hlen lassen*)
enWireHandlingStep_OPEN_GRIPPER, (*Draht freigeben*)
enWireHandlingStep_RETURN_HDL2, (*Handling zur<75>ckfahren*)
enWireHandlingStep_SINK_HDL (*Handling absenken*)
);
typ_enWireState :
( (*Zustand Draht in Verteiler*)
enWire_NOWIRE, (*Kein Draht im Verteiler*)
enWire_FEEDING, (*Drahtzufuhr ist gestartet*)
enWire_FEEDED, (*Draht ist zugef<65>hrt*)
enWire_END2_BENT1, (*Drahtende 2 ist gebogen f<>r Handling 1*)
enWire_END2_BENT2, (*Drahtende 2 ist gebogen f<>r Handling 2*)
enWire_CUT1, (*Draht ist Geschnitten f<>r Handling 1*)
enWire_CUT2, (*Draht ist Geschnitten f<>r Handling 2*)
enWire_BENT1, (*Draht ist fertig gebogen f<>r Handling 1*)
enWire_BENT2 (*Draht ist fertig gebogen f<>r Handling 2*)
);
typ_enStepBelt :
( (*Schritte Taktband*)
enBeltStep_INIT,
enBeltStep_MOVE_TO_LOADPOS, (*Best<73>ckungsposition anfahren*)
enBeltStep_ADJUST_LANE, (*Spur einstellen*)
enBeltStep_WAIT_LOADED, (*Warten bis Band best<73>ckt*)
enBeltStep_MOVE_TO_WELDPOS, (*Schwei<65>positon anfahren*)
enBeltStep_WAIT_WELDED, (*Warten bis Schwei<65>vorgang beendet*)
enBeltStep_WAIT_ALL_RETURNED, (*Warten bis alles zur<75>ckgestelt ist*)
enBeltStep_EJECT_FRAME (*Rahmen auswerfen*)
);
END_TYPE

View File

@@ -0,0 +1,108 @@
(********************************************************************
* COPYRIGHT --
********************************************************************
* Program: AxCtrl
* File: AxCtrl.var
* Author: michi
* Created: July 17, 2012
********************************************************************
* Local variables of program AxCtrl
********************************************************************)
(*//-----------------------------------------------------------------------------------------------------*)
(*//Dynamic Vars*)
VAR
lAxisWire1 : REFERENCE TO typAxis; (*Axis Datastruct *)
lAxisWire2 : REFERENCE TO typAxis; (*Axis Datastruct *)
lAxisBelt : REFERENCE TO typAxis; (*Axis Datastruct *)
lAxisLane : REFERENCE TO typAxis; (*Axis Datastruct *)
lAxisBend1 : REFERENCE TO typAxis; (*Axis Datastruct *)
lAxisBend2 : REFERENCE TO typAxis; (*Axis Datastruct *)
END_VAR
(*//Local Vars*)
VAR
bEnableNextStep : BOOL; (*N<>chsten Schritt (Semiautomatik) Freigeben*)
END_VAR
VAR RETAIN
bWireLane12 : BOOL;
bHorStrokeWire1Fw : BOOL;
bVerStrokeWire1Fw : BOOL;
bHorStrokeWire2Fw : BOOL;
bVerStrokeWire2Fw : BOOL;
END_VAR
VAR
bHomePosWireprocess : BOOL; (*Grundstellung Drahtverarbeitung*)
END_VAR
VAR RETAIN
bBladesUp : BOOL; (*Lamellenzapfen oben*)
END_VAR
VAR
bBender1Pos0 : BOOL; (*Bender 1 is in 0<> Pos*)
bBender2Pos0 : BOOL; (*Bender 2 is in 0<> Pos*)
usActBladesInFrame : USINT;
usErrorReset : USINT;
usHideButErrorReset : USINT;
usStateBtLoadWire : USINT; (*Status Button Drahtzufuhr starten*)
usStateBtBeltLoaded : USINT; (*Status Button Taktband geladen*)
usStateBtWireHeated : USINT; (*Status Button Draht aufgeheizt*)
usStateBtWireWelded : USINT; (*Status Button Draht gegrillt*)
END_VAR
VAR RETAIN
udTimePreheat : UDINT := 8; (*Vorheizzeit [s]*)
udTimeWeld : UDINT := 4; (*Schwei<65>zeit [s]*)
udTimeCool : UDINT := 9; (*Abk<62>hlzeit [s]*)
END_VAR
VAR
udStartTime : UDINT;
END_VAR
VAR RETAIN
udTimeLastCycle : UDINT;
END_VAR
VAR
udActualFramecount : REFERENCE TO UDINT;
END_VAR
VAR RETAIN
enBladetype : typ_enBlade; (*Lamellentyp*)
END_VAR
VAR
enLastBladetype : typ_enBlade; (*Letzer Lamellentyp*)
enStepWirefeed : typ_enStepWirefeed; (*Schritte Drahtzuf<75>hrung / Verteiler*)
enStepWirehandling1 : typ_enStepWireHandling; (*Schritte Drahthandling 1*)
enStepWirehandling2 : typ_enStepWireHandling; (*Schritte Drahthandling 2*)
enStepBelt : typ_enStepBelt; (*Schritte Taktband*)
enStateWire : typ_enWireState; (*Drahtstatus*)
END_VAR
(*//Positions Bender*)
VAR
rBender1Pos0 : REAL := 19.0; (*Bender 1 0<> Infeedpos*)
rBender1Pos90 : REAL := 123.0; (*Bender 1 90<39> Bendpos Lane1*)
rBender1Pos270 : REAL := -78.0; (*Bender 1 270<37> Bendpos Lane2*)
rBender2Pos0 : REAL := -33.0; (*Bender 2 0<> Infeedpos*)
rBender2Pos90 : REAL := -131.0; (*Bender 2 90<39> Bendpos Lane1*)
rBender2Pos270 : REAL := 70.0; (*Bender 2 270<37> Bendpos Lane2*)
rBenderOpenAngle : REAL := 1.0; (*Bender Angle for Open after Bending*)
rBenderOpenAngle2 : REAL := 3.0; (*Bender Angle for Open after Bending*)
rBeltVelocityEmpty : REAL := 1250.0; (*Taktband leerfahrt (1500)*)
rBeltVelocityLoaded : REAL := 1000.0; (*Taktband leerfahrt (1500)*)
rBeltVelocityShift : REAL := 250.0; (*Taktband Takten*)
rCurrent : REAL := 19.5; (*Strom zum Grillen*)
rCurrentFactor : REAL;
rVoltage : REAL := 8.0; (*Strom zum Grillen*)
rVoltageFactor : REAL;
lrActualWeldpos : REFERENCE TO REAL;
END_VAR
(*//FUBs*)
VAR
TON_StoreWeldpos : TON; (*Schwei<65>pos Speichern*)
TON_WireCutterClosed : TON; (*Drahtschneider geschlossen verz<72>gert*)
TOF_WireCutterClosed : TOF;
TON_Wiregrippers1Closed : TON; (*Drahtgreifer Draht 1 geschlossen verz<72>gert*)
TOF_Wiregrippers1Closed : TOF; (*Drahtgreifer Draht 1 geschlossen verz<72>gert*)
TON_Wiregrippers2Closed : TON; (*Drahtgreifer Draht 2 geschlossen verz<72>gert*)
TOF_Wiregrippers2Closed : TOF; (*Drahtgreifer Draht 1 geschlossen verz<72>gert*)
TON_Gripper1Prestreched : TON; (*Draht 1 Vorgespannt*)
TON_Gripper2Prestreched : TON; (*Draht 2 Vorgespannt*)
TON_WaitShiftBelt : TON; (*Warten Best<73>cken Lamelle*)
TON_WireHeated : TON; (*Draht vorgeheizt*)
TON_WireWelded : TON; (*Draht Verschwei<65>t*)
TON_WireCooled : TON; (*Draht 1 Abgek<65>hlt*)
END_VAR

View File

@@ -0,0 +1,875 @@
PROGRAM _CYCLIC
//Gear Coupling Axis2 is Slave from Axis 1
lAxisWire2.Para.iGearRatioNumerator := -1;
lAxisWire2.Para.uiGearRatioDenominator := 1;
//Pransfer Values to Axis2
lAxisWire2.Para.rAcceleration := lAxisWire1.Para.rAcceleration;
lAxisWire2.Para.rDeceleration := lAxisWire1.Para.rDeceleration;
//Power Up Axises
lAxisWire1.bPower := (gMachine.enMode <> enMACH_OFFLINE);
lAxisWire2.bPower := (gMachine.enMode <> enMACH_OFFLINE);
lAxisBelt.bPower := (gMachine.enMode <> enMACH_OFFLINE);
lAxisLane.bPower := (gMachine.enMode <> enMACH_OFFLINE);
lAxisBelt.bPower := (gMachine.enMode <> enMACH_OFFLINE);
lAxisBend1.bPower := (gMachine.enMode <> enMACH_OFFLINE);
lAxisBend2.bPower := (gMachine.enMode <> enMACH_OFFLINE);
//Home
lAxisWire1.bHome := NOT lAxisWire1.DriveStatus.bHomingOk AND ((gMachine.enMode = enMACH_ONLINE) OR (gMachine.enMode = enMACH_JOG));
lAxisWire2.bHome := NOT lAxisWire2.DriveStatus.bHomingOk AND ((gMachine.enMode = enMACH_ONLINE) OR (gMachine.enMode = enMACH_JOG));
lAxisBelt.bHome := NOT lAxisBelt.DriveStatus.bHomingOk AND ((gMachine.enMode = enMACH_ONLINE) OR (gMachine.enMode = enMACH_JOG));
//Couple Axis 2 of wirefeed
IF lAxisWire1.DriveStatus.bHomingOk AND lAxisWire2.DriveStatus.bHomingOk THEN
lAxisWire2.Move.bStartGearSlave := TRUE;
END_IF
TON_WireCutterClosed (IN := gbOuCutWire,
PT := t#400ms);
TOF_WireCutterClosed (IN := gbOuCutWire,
PT := t#400ms);
TON_Wiregrippers1Closed (IN := gbOuCloseWireGrippers1,
PT := t#400ms);
TOF_Wiregrippers1Closed (IN := gbOuCloseWireGrippers1,
PT := t#400ms);
TON_Wiregrippers2Closed (IN := gbOuCloseWireGrippers2,
PT := t#400ms);
TOF_Wiregrippers2Closed (IN := gbOuCloseWireGrippers2,
PT := t#400ms);
TON_Gripper1Prestreched (IN := gbOuStretchWire1,
PT := t#1s);
TON_Gripper2Prestreched (IN := gbOuStretchWire2,
PT := t#1s);
TON_WaitShiftBelt (IN := ((enStepBelt = enBeltStep_WAIT_LOADED) AND NOT lAxisBelt.Move.bAdditive),
PT := t#900ms);
TON_WireHeated (IN := (enStepWirehandling1 = enWireHandlingStep_HEAT_WIRE) AND (gMachine.enMode = enMACH_AUTOMATIC),
PT := UDINT_TO_TIME (udTimePreheat * 1000));
TON_WireWelded (IN := (enStepWirehandling1 = enWireHandlingStep_INSERT_WIRE),
PT := UDINT_TO_TIME (udTimeWeld * 1000));
TON_WireCooled (IN := (enStepWirehandling1 = enWireHandlingStep_COOL_WIRE),
PT := UDINT_TO_TIME (udTimeCool * 1000));
//Common States
bBender1Pos0 := (lAxisBend1.rActPosition = rBender1Pos0);
bBender2Pos0 := (lAxisBend2.rActPosition = rBender2Pos0);
bHomePosWireprocess := bBender1Pos0 AND bBender2Pos0 AND NOT gbOuReleaseWire AND gbInWireDistributorClosed AND gbInWireDistributorLane1;
TON_StoreWeldpos.IN := gManualCommands.bStoreWeldPosition;
TON_StoreWeldpos.PT := t#3s;
TON_StoreWeldpos ();
//Jog Mode
//==========================================================================================
IF gMachine.enMode = enMACH_JOG THEN
//Uncritical Movements
IF EDGEPOS (gManualCommands.bToggleWireClutch) THEN
gbOuReleaseWire := NOT gbOuReleaseWire;
END_IF
IF EDGEPOS (gManualCommands.bToggleSetStrokeWireCutter) THEN
gbOuSetStrokeWireCutter := NOT gbOuSetStrokeWireCutter;
END_IF
gbOuCutWire := gManualCommands.bCutWire;
IF EDGEPOS (gManualCommands.bHomeBelt) THEN
lAxisBelt.bHome := TRUE;
END_IF
IF EDGEPOS (gManualCommands.bBeltFwd) THEN
lAxisBelt.Para.rDistance := - grBladeShiftwidth[enBladetype];
lAxisBelt.Move.bAdditive := TRUE;
END_IF
IF gManualCommands.bBeltJogFwdCont THEN
lAxisBelt.Para.rJogVelocity := 1500;
ELSE
lAxisBelt.Para.rJogVelocity := 100;
END_IF
lAxisBelt.Move.bJogNeg := gManualCommands.bBeltJogFwd OR gManualCommands.bBeltJogFwdCont;
lAxisBelt.Move.bJogPos := gManualCommands.bBeltJogBwd;
IF EDGEPOS (gManualCommands.bBelt1stPos) THEN
lAxisBelt.Para.usDirection := mcNEGATIVE_DIR;
lAxisBelt.Para.rPosition := grBladeWeldPos[enBladetype];
lAxisBelt.Move.bAbsolute:= TRUE;
END_IF
//Critical Movements
IF EDGEPOS (gManualCommands.bFeedWire) AND gbInWireDistributorLane1 THEN
lAxisWire1.Move.bAdditive := TRUE;
END_IF
IF gbInWireDistributorLane2 THEN
IF EDGEPOS (gManualCommands.bJogWireFwd) THEN
lAxisWire1.Move.bJogPos := NOT lAxisWire1.Move.bJogPos;
END_IF
ELSE
lAxisWire1.Move.bJogPos := gManualCommands.bJogWireFwd AND (gbInWireDistributorLane1 OR gbInWireDistributorLane2) AND NOT gbInWireFeeded AND NOT gbOuCutWire;
END_IF
IF EDGEPOS (gManualCommands.bHomeLane) THEN
lAxisLane.bHome := TRUE;
END_IF
lAxisLane.Move.bJogPos := gManualCommands.bCloseLane;
lAxisLane.Move.bJogNeg := gManualCommands.bOpenLane;
IF EDGEPOS (gManualCommands.bToggleLane) THEN
bWireLane12 := NOT bWireLane12;
END_IF
IF EDGEPOS (gManualCommands.bToggleWireDistributorOpCl) THEN
gbOuWireDistirbutorOpen := NOT gbOuWireDistirbutorOpen;
END_IF
//Bender 1
IF EDGEPOS (gManualCommands.bBend1Home) AND gbInWireDistributorOpen THEN
lAxisBend1.bHome := TRUE;
END_IF
lAxisBend1.Move.bJogPos := gManualCommands.bBend1JogFwd;
lAxisBend1.Move.bJogNeg := gManualCommands.bBend1JogBwd;
IF EDGEPOS (gManualCommands.bBend1Pos0) AND lAxisBend1.Status.bStandstill THEN
lAxisBend1.Para.rPosition := rBender1Pos0;
lAxisBend1.Move.bAbsolute := TRUE;
END_IF
IF EDGEPOS (gManualCommands.bBend1Pos90) AND lAxisBend1.Status.bStandstill THEN
lAxisBend1.Para.rPosition := rBender1Pos90;
lAxisBend1.Move.bAbsolute := TRUE;
END_IF
IF EDGEPOS (gManualCommands.bBend1Pos270) AND lAxisBend1.Status.bStandstill THEN
lAxisBend1.Para.rPosition := rBender1Pos270;
lAxisBend1.Move.bAbsolute := TRUE;
END_IF
//Bender 2
IF EDGEPOS (gManualCommands.bBend2Home) AND gbInWireDistributorOpen THEN
lAxisBend2.bHome := TRUE;
END_IF
lAxisBend2.Move.bJogPos := gManualCommands.bBend2JogFwd;
lAxisBend2.Move.bJogNeg := gManualCommands.bBend2JogBwd;
IF EDGEPOS (gManualCommands.bBend2Pos0) AND lAxisBend2.Status.bStandstill THEN
lAxisBend2.Para.rPosition := rBender2Pos0;
lAxisBend2.Move.bAbsolute := TRUE;
END_IF
IF EDGEPOS (gManualCommands.bBend2Pos90) AND lAxisBend2.Status.bStandstill THEN
lAxisBend2.Para.rPosition := rBender2Pos90;
lAxisBend2.Move.bAbsolute := TRUE;
END_IF
IF EDGEPOS (gManualCommands.bBend2Pos270) AND lAxisBend2.Status.bStandstill THEN
lAxisBend2.Para.rPosition := rBender2Pos270;
lAxisBend2.Move.bAbsolute := TRUE;
END_IF
//Wire 1
IF EDGEPOS (gManualCommands.bWireToggleSetStroke) THEN
bBladesUp := NOT bBladesUp;
END_IF
IF EDGEPOS (gManualCommands.bWire1VertStrokeUp) AND gbInHorStrokeBwWire1 THEN
bVerStrokeWire1Fw := TRUE;
END_IF
IF EDGEPOS (gManualCommands.bWire1VertStrokeDown) AND gbInHorStrokeBwWire1 THEN
bVerStrokeWire1Fw := FALSE;
END_IF
IF EDGEPOS (gManualCommands.bWire1HorStrokeFw) AND ((gbInVertStrokeBwWire1 AND NOT gbOuStretchWire1) OR gbInVertStrokeFwWire1) THEN
bHorStrokeWire1Fw := TRUE;
END_IF
IF EDGEPOS (gManualCommands.bWire1HorStrokeBw) AND (gbInVertStrokeBwWire1 OR gbInVertStrokeFwWire1) THEN
bHorStrokeWire1Fw := FALSE;
END_IF
IF EDGEPOS (gManualCommands.bWire1ToggleStretcher) THEN
gbOuStretchWire1 := NOT gbOuStretchWire1;
END_IF
IF EDGEPOS (gManualCommands.bWire1ToggleGripper) THEN
gbOuCloseWireGrippers1 := NOT gbOuCloseWireGrippers1;
END_IF
//Wire2
IF EDGEPOS (gManualCommands.bWire2VertStrokeUp) AND gbInHorStrokeBwWire2 THEN
bVerStrokeWire2Fw := TRUE;
END_IF
IF EDGEPOS (gManualCommands.bWire2VertStrokeDown) AND gbInHorStrokeBwWire2 THEN
bVerStrokeWire2Fw := FALSE;
END_IF
IF EDGEPOS (gManualCommands.bWire2HorStrokeFw) AND ((gbInVertStrokeBwWire2 AND NOT gbOuStretchWire2) OR gbInVertStrokeFwWire2) THEN
bHorStrokeWire2Fw := TRUE;
END_IF
IF EDGEPOS (gManualCommands.bWire2HorStrokeBw) AND (gbInVertStrokeBwWire2 OR gbInVertStrokeFwWire2) THEN
bHorStrokeWire2Fw := FALSE;
END_IF
IF EDGEPOS (gManualCommands.bWire2ToggleStretcher) THEN
gbOuStretchWire2 := NOT gbOuStretchWire2;
END_IF
IF EDGEPOS (gManualCommands.bWire2ToggleGripper) THEN
gbOuCloseWireGrippers2 := NOT gbOuCloseWireGrippers2;
END_IF
//Param
IF EDGEPOS (TON_StoreWeldpos.Q) THEN
grBladeWeldPos[enBladetype] := lAxisBelt.rActPosition;
END_IF
ELSE
gManualCommands.bBeltJogFwdCont := FALSE;
END_IF
//(Semi) - Automaticmode
//==========================================================================================
IF (gMachine.enMode = enMACH_MANUAL) OR (gMachine.enMode = enMACH_AUTOMATIC) THEN
bEnableNextStep := EDGEPOS (gManualCommands.bNextManStep) OR (gMachine.enMode = enMACH_AUTOMATIC) ;
//Wirefeed
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CASE enStepWirefeed OF
//Init
//---------------------------
enWireStep_INIT:
gbOuWireDistirbutorOpen := FALSE;
IF bHomePosWireprocess AND (enBladetype <> enBlade_None) THEN
enStepWirefeed := enWireStep_FEED;
enStateWire := enWire_FEEDING;
lAxisWire1.Move.bAdditive := TRUE;
END_IF
//Feed Wire
//---------------------------
enWireStep_FEED:
IF gbInWireFeeded THEN
lAxisWire1.bStop := TRUE;
enStateWire := enWire_FEEDED;
END_IF
IF gbInWireFeeded AND lAxisWire1.Status.bStandstill THEN
enStepWirefeed := enWireStep_BEND_END2;
END_IF
//Bend Wire End 2 (wait for Handling)
//---------------------------
enWireStep_BEND_END2:
//Decide Destination for Wire
IF (enStepWirehandling2 = enWireHandlingStep_WAIT_WIRE) AND (gbInVertStrokeBwWire1 OR gbInVertStrokeBwWire1) THEN
lAxisBend2.Para.rPosition := rBender2Pos270 ;
lAxisBend2.Move.bAbsolute := TRUE;
enStepWirefeed := enWireStep_WAIT_BENT_END2;
ELSIF (enStepWirehandling1 = enWireHandlingStep_WAIT_WIRE) THEN
lAxisBend2.Para.rPosition := rBender2Pos90 ;
lAxisBend2.Move.bAbsolute := TRUE;
enStepWirefeed := enWireStep_WAIT_BENT_END2;
END_IF
//Also prepare WireCutter (Wait for Handling 2 is down
gbOuSetStrokeWireCutter := gbInVertStrokeBwWire1;
//Wait Wire End 2 is Bent
//---------------------------
enWireStep_WAIT_BENT_END2:
IF lAxisBend2.Status.bStandstill AND NOT lAxisBend2.Move.bAbsolute THEN
//Decide Destination for Wire
IF (lAxisBend2.Para.rPosition = rBender2Pos90) THEN
lAxisBend2.Para.rPosition := rBender2Pos90 + rBenderOpenAngle2;
lAxisBend2.Move.bAbsolute := TRUE;
enStateWire := enWire_END2_BENT1;
ELSIF (lAxisBend2.Para.rPosition = rBender2Pos270) THEN
lAxisBend2.Para.rPosition := rBender2Pos270 - rBenderOpenAngle2;
lAxisBend2.Move.bAbsolute := TRUE;
enStateWire := enWire_END2_BENT2;
END_IF
enStepWirefeed := enWireStep_WATT_BENDER2_OPEN;
END_IF
//Wire End 2 Open
//---------------------------
enWireStep_WATT_BENDER2_OPEN:
IF lAxisBend2.Status.bStandstill AND NOT lAxisBend2.Move.bAbsolute THEN
enStepWirefeed := enWireStep_CUT;
END_IF
//Cut Wire
//---------------------------
enWireStep_CUT:
IF gbInSetStrokeCutterFw THEN
gbOuCutWire := TRUE;
END_IF
IF TON_WireCutterClosed.Q THEN
gbOuCutWire := FALSE;
enStepWirefeed := enWireStep_HOME_CUTTER;
IF (enStateWire = enWire_END2_BENT1) THEN
enStateWire := enWire_CUT1;
ELSIF (enStateWire = enWire_END2_BENT2) THEN
enStateWire := enWire_CUT2;
END_IF
END_IF
//Home Cutter
//---------------------------
enWireStep_HOME_CUTTER:
gbOuSetStrokeWireCutter := FALSE;
IF gbInSetStrokeCutterBw THEN
enStepWirefeed := enWireStep_BEND_END1;
END_IF
//Bend Wire End 1
//---------------------------
enWireStep_BEND_END1:
enStepWirefeed := enWireStep_INIT;
//Decide Destination for Wire
IF (enStateWire = enWire_CUT1) THEN
lAxisBend1.Para.rPosition := rBender1Pos90;
ELSIF (enStateWire = enWire_CUT2) THEN
lAxisBend1.Para.rPosition := rBender1Pos270;
END_IF
lAxisBend1.Move.bAbsolute := TRUE;
enStepWirefeed := enWireStep_WAIT_BENT_END1;
//Wait Wire End 1 is Bent
//---------------------------
enWireStep_WAIT_BENT_END1:
IF lAxisBend1.Status.bStandstill AND NOT lAxisBend1.Move.bAbsolute THEN
//Decide Destination for Wire
IF (lAxisBend1.Para.rPosition = rBender1Pos90) THEN
lAxisBend1.Para.rPosition := rBender1Pos90 - rBenderOpenAngle;
enStateWire := enWire_BENT1;
ELSIF (lAxisBend1.Para.rPosition = rBender1Pos270) THEN
lAxisBend1.Para.rPosition := rBender1Pos270 + rBenderOpenAngle;
enStateWire := enWire_BENT2;
END_IF
lAxisBend1.Move.bAbsolute := TRUE;
enStepWirefeed := enWireStep_WATT_BENDER1_OPEN;
END_IF
//Bender 1 Open
//---------------------------
enWireStep_WATT_BENDER1_OPEN:
IF lAxisBend1.Status.bStandstill AND NOT lAxisBend1.Move.bAbsolute THEN
enStepWirefeed := enWireStep_CHANGE_LANE;
END_IF
//Ggf. Spur wechseln
//---------------------------
enWireStep_CHANGE_LANE:
bWireLane12 := (enStateWire = enWire_BENT2);
IF (gbInWireDistributorLane1 AND (enStateWire = enWire_BENT1)) OR
(gbInWireDistributorLane2 AND (enStateWire = enWire_BENT2)) THEN
enStepWirefeed := enWireStep_WAIT_WIRE_PICKED;
END_IF
//Warten bis Draht gegriffen
//---------------------------
enWireStep_WAIT_WIRE_PICKED:
IF (gbInWireDistributorLane1 AND (enStepWirehandling1 = enWireHandlingStep_WAIT_OPEN_D)) OR
(gbInWireDistributorLane2 AND (enStepWirehandling2 = enWireHandlingStep_WAIT_OPEN_D)) THEN
enStepWirefeed := enWireStep_OPEN_WIREDISTRIBUTOR;
END_IF
//Drahtverteiler <EFBFBD>ffnen
//---------------------------
enWireStep_OPEN_WIREDISTRIBUTOR:
gbOuWireDistirbutorOpen := TRUE;
IF gbInWireDistributorOpen THEN
enStepWirefeed := enWireStep_WAIT_WIRE_AWAY;
END_IF
//Warten bis Draht abgeholt
//---------------------------
enWireStep_WAIT_WIRE_AWAY:
IF (gbInWireDistributorLane1 AND gbInHorStrokeBwWire1) OR
(gbInWireDistributorLane2 AND gbInHorStrokeBwWire2) THEN
enStepWirefeed := enWireStep_RETURN_LANE1;
END_IF
//GGf auf Spur 1 zur<EFBFBD>ckfahren
//---------------------------
enWireStep_RETURN_LANE1:
bWireLane12 := FALSE;
IF gbInWireDistributorLane1 THEN
enStepWirefeed := enWireStep_WAIT_BENDERS_HOMED;
lAxisBend1.Para.rPosition := rBender1Pos0;
lAxisBend1.Move.bAbsolute := TRUE;
lAxisBend2.Para.rPosition := rBender2Pos0;
lAxisBend2.Move.bAbsolute := TRUE;
enStateWire := enWire_NOWIRE;
END_IF
//Bieger zur<EFBFBD>ckstellen
//---------------------------
enWireStep_WAIT_BENDERS_HOMED:
IF (lAxisBend1.Para.rPosition = rBender1Pos0) AND (lAxisBend2.Para.rPosition = rBender2Pos0) THEN
enStepWirefeed := enWireStep_CLOSE_WIREDISTRIBUTOR;
END_IF
//Close Wiredistributor
//---------------------------
enWireStep_CLOSE_WIREDISTRIBUTOR:
gbOuWireDistirbutorOpen := FALSE;
IF gbInWireDistributorClosed THEN
enStepWirefeed := enWireStep_INIT;
END_IF
//Stop
//---------------------------
enWireStep_STOP:
ELSE
END_CASE;
//Wirehandling 1
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CASE enStepWirehandling1 OF
//Init
//---------------------------
enWireStep_INIT:
bHorStrokeWire1Fw := FALSE;
gbOuStretchWire1 := FALSE;
gbOuCloseWireGrippers1 := FALSE;
IF gbInHorStrokeBwWire1 THEN
bVerStrokeWire1Fw := FALSE;
END_IF
IF NOT gbOuCloseWireGrippers1 AND gbInVertStrokeBwWire1 AND gbInHorStrokeBwWire1 THEN
enStepWirehandling1 := enWireHandlingStep_WAIT_WIRE;
END_IF
//Wait for Wire
//---------------------------
enWireHandlingStep_WAIT_WIRE:
gbOuStretchWire1 := FALSE;
IF gbInWireDistributorLane1 AND (enStateWire = enWire_BENT1) AND
(enStepWirefeed = enWireStep_WAIT_WIRE_PICKED) THEN
enStepWirehandling1 := enWireHandlingStep_INSERT_HDL;
END_IF
//Insert Hadling
//---------------------------
enWireHandlingStep_INSERT_HDL:
bHorStrokeWire1Fw := TRUE;
IF gbInHorStrokeFwWire1 THEN
enStepWirehandling1 := enWireHandlingStep_PRESTRETCH;
END_IF
//Prestrech Gripper
//---------------------------
enWireHandlingStep_PRESTRETCH:
gbOuStretchWire1 := TRUE;
IF TON_Gripper1Prestreched.Q THEN
enStepWirehandling1 := enWireHandlingStep_PICK_WIRE;
END_IF
//Pick Wire
//---------------------------
enWireHandlingStep_PICK_WIRE:
gbOuCloseWireGrippers1 := TRUE;
IF TON_Wiregrippers1Closed.Q THEN
enStepWirehandling1 := enWireHandlingStep_WAIT_OPEN_D;
gbOuStretchWire1 := FALSE;
END_IF
//Wait for Distributor opended
//---------------------------
enWireHandlingStep_WAIT_OPEN_D:
IF (enStepWirefeed = enWireStep_WAIT_WIRE_AWAY) THEN
enStepWirehandling1 := enWireHandlingStep_RETURN_HDL;
END_IF
//Return Handling from Wiredistributor
//---------------------------
enWireHandlingStep_RETURN_HDL:
bHorStrokeWire1Fw := FALSE;
IF gbInHorStrokeBwWire1 THEN
enStepWirehandling1 := enWireHandlingStep_LIFT_WIRE;
END_IF
//Lift Wire
//---------------------------
enWireHandlingStep_LIFT_WIRE:
bVerStrokeWire1Fw := TRUE;
IF gbInVertStrokeFwWire1 THEN
enStepWirehandling1 := enWireHandlingStep_WAIT_2ndWIRE;
END_IF
//Wait for 2nd Wire finished
//---------------------------
enWireHandlingStep_WAIT_2ndWIRE:
IF (enStepWirehandling2 = enWireHandlingStep_WAIT_2ndWIRE) AND
((enStepBelt = enBeltStep_MOVE_TO_WELDPOS) OR (enStepBelt = enBeltStep_WAIT_WELDED)) THEN
enStepWirehandling1 := enWireHandlingStep_HEAT_WIRE;
enStepWirehandling2 := enWireHandlingStep_HEAT_WIRE;
END_IF
IF EDGEPOS (gManualCommands.bCancelPocess) THEN
enStepWirehandling1 := enWireHandlingStep_OPEN_GRIPPER;
END_IF
//Heat Wire
//---------------------------
enWireHandlingStep_HEAT_WIRE:
//IF EDGEPOS (gManualCommands.bWireHeated) THEN
IF TON_WireHeated.Q AND (enStepBelt = enBeltStep_WAIT_WELDED) THEN
enStepWirehandling1 := enWireHandlingStep_INSERT_WIRE;
enStepWirehandling2 := enWireHandlingStep_INSERT_WIRE;
END_IF
IF EDGEPOS (gManualCommands.bCancelPocess) THEN
enStepWirehandling1 := enWireHandlingStep_OPEN_GRIPPER;
enStepWirehandling2 := enWireHandlingStep_OPEN_GRIPPER;
END_IF
//Insert Wire
//---------------------------
enWireHandlingStep_INSERT_WIRE:
bHorStrokeWire1Fw := TRUE;
IF TON_WireWelded.Q THEN
enStepWirehandling1 := enWireHandlingStep_COOL_WIRE;
END_IF
IF EDGEPOS (gManualCommands.bCancelPocess) THEN
enStepWirehandling1 := enWireHandlingStep_OPEN_GRIPPER;
enStepWirehandling2 := enWireHandlingStep_OPEN_GRIPPER;
END_IF
//Cool Wire
//---------------------------
enWireHandlingStep_COOL_WIRE:
IF TON_WireCooled.Q THEN
enStepWirehandling1 := enWireHandlingStep_OPEN_GRIPPER;
enStepWirehandling2 := enWireHandlingStep_OPEN_GRIPPER;
END_IF
//Open Grippers
//---------------------------
enWireHandlingStep_OPEN_GRIPPER:
gbOuCloseWireGrippers1 := FALSE;
IF NOT TOF_Wiregrippers1Closed.Q THEN
enStepWirehandling1 := enWireHandlingStep_RETURN_HDL2;
END_IF
//Return Handling from Wiredistributor
//---------------------------
enWireHandlingStep_RETURN_HDL2:
bHorStrokeWire1Fw := FALSE;
IF gbInHorStrokeBwWire1 THEN
enStepWirehandling1 := enWireHandlingStep_SINK_HDL;
END_IF
//Move Down
//---------------------------
enWireHandlingStep_SINK_HDL:
bVerStrokeWire1Fw := FALSE;
IF gbInVertStrokeBwWire1 THEN
enStepWirehandling1 := enWireHandlingStep_INIT;
END_IF
END_CASE;
//Wirehandling 2
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CASE enStepWirehandling2 OF
//Init
//---------------------------
enWireStep_INIT:
//Return Valves
bHorStrokeWire2Fw := FALSE;
gbOuStretchWire2 := FALSE;
gbOuCloseWireGrippers2 := FALSE;
IF gbInHorStrokeBwWire2 THEN
bVerStrokeWire2Fw := FALSE;
END_IF
IF NOT gbOuCloseWireGrippers2 AND gbInVertStrokeBwWire2 AND gbInHorStrokeBwWire2 THEN
enStepWirehandling2 := enWireHandlingStep_WAIT_WIRE;
END_IF
//Wait for Wire
//---------------------------
enWireHandlingStep_WAIT_WIRE:
gbOuStretchWire2 := FALSE;
IF gbInWireDistributorLane2 AND (enStateWire = enWire_BENT2) AND
(enStepWirefeed = enWireStep_WAIT_WIRE_PICKED) THEN
enStepWirehandling2 := enWireHandlingStep_INSERT_HDL;
END_IF
//Insert Hadling
//---------------------------
enWireHandlingStep_INSERT_HDL:
bHorStrokeWire2Fw := TRUE;
IF gbInHorStrokeFwWire2 THEN
enStepWirehandling2 := enWireHandlingStep_PRESTRETCH;
END_IF
//Prestrech Gripper
//---------------------------
enWireHandlingStep_PRESTRETCH:
gbOuStretchWire2 := TRUE;
IF TON_Gripper2Prestreched.Q THEN
enStepWirehandling2 := enWireHandlingStep_PICK_WIRE;
END_IF
//Pick Wire
//---------------------------
enWireHandlingStep_PICK_WIRE:
gbOuCloseWireGrippers2 := TRUE;
IF TON_Wiregrippers2Closed.Q THEN
enStepWirehandling2 := enWireHandlingStep_WAIT_OPEN_D;
gbOuStretchWire2 := FALSE;
END_IF
//Wait for Distributor opended
//---------------------------
enWireHandlingStep_WAIT_OPEN_D:
IF (enStepWirefeed = enWireStep_WAIT_WIRE_AWAY) THEN
enStepWirehandling2 := enWireHandlingStep_RETURN_HDL;
END_IF
//Return Handling from Wiredistributor
//---------------------------
enWireHandlingStep_RETURN_HDL:
bHorStrokeWire2Fw := FALSE;
IF gbInHorStrokeBwWire2 THEN
enStepWirehandling2 := enWireHandlingStep_LIFT_WIRE;
END_IF
//Lift Wire
//---------------------------
enWireHandlingStep_LIFT_WIRE:
bVerStrokeWire2Fw := TRUE;
IF gbInVertStrokeFwWire2 THEN
enStepWirehandling2 := enWireHandlingStep_WAIT_2ndWIRE;
END_IF
//Wait for 2nd Wire finished
//---------------------------
enWireHandlingStep_WAIT_2ndWIRE:
IF EDGEPOS (gManualCommands.bCancelPocess) THEN
enStepWirehandling2 := enWireHandlingStep_OPEN_GRIPPER;
END_IF
//Heat Wire
//---------------------------
enWireHandlingStep_HEAT_WIRE:
//Insert Wire
//---------------------------
enWireHandlingStep_INSERT_WIRE:
bHorStrokeWire2Fw := TRUE;
IF (enStepWirehandling1 = enWireHandlingStep_COOL_WIRE) THEN
enStepWirehandling2 := enWireHandlingStep_COOL_WIRE;
END_IF
//Cool Wire
//---------------------------
enWireHandlingStep_COOL_WIRE:
//Open Grippers
//---------------------------
enWireHandlingStep_OPEN_GRIPPER:
gbOuCloseWireGrippers2 := FALSE;
IF NOT TOF_Wiregrippers2Closed.Q THEN
enStepWirehandling2 := enWireHandlingStep_RETURN_HDL2;
END_IF
//Return Handling from Wiredistributor
//---------------------------
enWireHandlingStep_RETURN_HDL2:
bHorStrokeWire2Fw := FALSE;
IF gbInHorStrokeBwWire2 THEN
enStepWirehandling2 := enWireHandlingStep_SINK_HDL;
END_IF
//Move Down
//---------------------------
enWireHandlingStep_SINK_HDL:
bVerStrokeWire2Fw := FALSE;
IF gbInVertStrokeBwWire2 THEN
enStepWirehandling2 := enWireHandlingStep_INIT;
END_IF
END_CASE;
//ShiftBelt
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CASE enStepBelt OF
//Init
//---------------------------
enBeltStep_INIT:
IF (enBladetype <> enBlade_None) THEN
lAxisLane.Para.rPosition := grBladewidth[enBladetype];
IF (lAxisLane.Para.rPosition > -10) THEN
lAxisLane.Para.rPosition := grBladewidth[enBlade_7789_Z07];
END_IF;
lAxisBelt.Para.rVelocity := rBeltVelocityEmpty;
lAxisLane.Move.bAbsolute:= TRUE;
enStepBelt := enBeltStep_ADJUST_LANE;
END_IF
//Adjust Lane
//---------------------------
enBeltStep_ADJUST_LANE:
IF NOT lAxisLane.Move.bAbsolute THEN
lAxisBelt.Para.usDirection := mcNEGATIVE_DIR;
lAxisBelt.Para.rPosition := grBladeStartPos[enBladetype];
lAxisBelt.Para.rVelocity := rBeltVelocityEmpty;
lAxisBelt.Move.bAbsolute:= TRUE;
enStepBelt := enBeltStep_MOVE_TO_LOADPOS;
enLastBladetype := enBladetype;
usActBladesInFrame := 1;
END_IF
//Move to Loadpos
//---------------------------
enBeltStep_MOVE_TO_LOADPOS:
IF NOT lAxisBelt.Move.bAbsolute THEN
udTimeLastCycle := gudUnixTimeUTC - udStartTime;
udStartTime := gudUnixTimeUTC;
enStepBelt := enBeltStep_WAIT_LOADED;
END_IF
//Wait Belt Loaded
//---------------------------
enBeltStep_WAIT_LOADED:
//FixMe not with Robot !!!!
IF (enBladetype <> enLastBladetype) THEN
udActualFramecount ACCESS ADR (gudFramecount[enBladetype]);
lrActualWeldpos ACCESS ADR (grBladeWeldPos[enBladetype]);
lAxisBelt.Para.usDirection := mcNEGATIVE_DIR;
lAxisLane.Para.rPosition := grBladewidth[enBladetype];
lAxisLane.Move.bAbsolute:= TRUE;
enStepBelt := enBeltStep_ADJUST_LANE;
END_IF
bBladesUp := gbBladePoleUp[enBladetype];
IF TON_WaitShiftBelt.Q AND (usActBladesInFrame <= gusBladesInFrame[enBladetype]) THEN
usActBladesInFrame := usActBladesInFrame + 1;
lAxisBelt.Para.rVelocity := rBeltVelocityShift;
lAxisBelt.Para.usDirection := mcNEGATIVE_DIR;
lAxisBelt.Para.rDistance := - grBladeShiftwidth[enBladetype];
lAxisBelt.Move.bAdditive := TRUE;
END_IF
IF (EDGEPOS (gManualCommands.bFrameLoaded) OR EDGEPOS (gbInBladeLoaded)) AND (usActBladesInFrame > gusBladesInFrame[enBladetype]) THEN
enStepBelt := enBeltStep_MOVE_TO_WELDPOS;
lAxisBelt.Para.rVelocity := rBeltVelocityLoaded;
lAxisBelt.Para.usDirection := mcNEGATIVE_DIR;
lAxisBelt.Para.rPosition := grBladeWeldPos[enBladetype];
lAxisBelt.Move.bAbsolute:= TRUE;
END_IF
//Move to Loadpos
//---------------------------
enBeltStep_MOVE_TO_WELDPOS:
IF NOT lAxisBelt.Move.bAbsolute THEN
enStepBelt := enBeltStep_WAIT_WELDED;
END_IF
//Wait for Wire Welded
//---------------------------
enBeltStep_WAIT_WELDED:
IF (enStepWirehandling1 = enWireHandlingStep_RETURN_HDL2) THEN
enStepBelt := enBeltStep_WAIT_ALL_RETURNED;
END_IF
//Insert Hadling
//---------------------------
enBeltStep_WAIT_ALL_RETURNED:
IF (gbInHorStrokeBwWire1 OR gbInVertStrokeBwWire1) AND
(gbInHorStrokeBwWire2 OR gbInVertStrokeBwWire2) THEN
lAxisBelt.Para.rVelocity := rBeltVelocityEmpty;
lAxisBelt.Para.rDistance := -5000;
lAxisBelt.Move.bAdditive := TRUE;
enStepBelt := enBeltStep_EJECT_FRAME;
END_IF
//EJECT FRAME
//---------------------------
enBeltStep_EJECT_FRAME:
IF NOT lAxisBelt.Move.bAdditive AND lAxisBelt.Status.bStandstill THEN
lAxisBelt.Para.rVelocity := rBeltVelocityEmpty;
lAxisBelt.Para.usDirection := mcNEGATIVE_DIR;
gudFramecount[enBladetype] := gudFramecount[enBladetype] + 1;
gudOverallFramecount := gudOverallFramecount + 1;
gBBCLog.udProdID := gudUnixTimeUTC;
gBBCLog.udProdNr := enBladetype;
gBBCLog.udCount := gusBladesInFrame[enBladetype];
gBBCLog.udType := 2; //Sparerib
gBBCLog.udLotNr := 99; //LK Nr
gBBCLog.bLog := TRUE;
enStepBelt := enBeltStep_INIT;
END_IF
END_CASE;
END_IF;
IF (enStepBelt = enBeltStep_EJECT_FRAME) THEN
giOuPulseDurationPWM1 := -22500;
giOuPulseDurationPWM2 := -22500;
ELSE
giOuPulseDurationPWM1 := 0;
giOuPulseDurationPWM2 := 0;
END_IF
//Control Valves with 2 Hs
gbOuHorStrokeFwWire1 := bHorStrokeWire1Fw;
gbOuHorStrokeBwWire1 := NOT bHorStrokeWire1Fw;
gbOuVertStrokeFwWire1 := bVerStrokeWire1Fw;
gbOuVertStrokeBwWire1 := NOT bVerStrokeWire1Fw;
gbOuHorStrokeFwWire2 := bHorStrokeWire2Fw;
gbOuHorStrokeBwWire2 := NOT bHorStrokeWire2Fw;
gbOuVertStrokeFwWire2 := bVerStrokeWire2Fw;
gbOuVertStrokeBwWire2 := NOT bVerStrokeWire2Fw;
gbOuWireDistributorLane1 := NOT bWireLane12;
gbOuWireDistributorLane2 := bWireLane12;
gbOuSetStrokeBwWire1 := bBladesUp;
gbOuSetStrokeFwWire1 := NOT bBladesUp;
gbOuSetStrokeBwWire2 := bBladesUp;
gbOuSetStrokeFwWire2 := NOT bBladesUp;
//Visu Buttons
usStateBtBeltLoaded := BOOL_TO_USINT (enStepBelt <> enBeltStep_WAIT_LOADED);
usStateBtLoadWire := BOOL_TO_USINT (enStepWirefeed <> enWireStep_INIT);
usStateBtWireHeated := BOOL_TO_USINT (enStepWirehandling1 <> enWireHandlingStep_HEAT_WIRE);
usStateBtWireWelded := BOOL_TO_USINT (enStepWirehandling1 <> enWireHandlingStep_INSERT_WIRE);
//Hide Button for Error Reset
usHideButErrorReset := (lAxisWire1.Error.uiID = 0) AND
(lAxisWire2.Error.uiID = 0) AND
(lAxisBend1.Error.uiID = 0) AND
(lAxisBend2.Error.uiID = 0) AND
(lAxisLane.Error.uiID = 0) AND
(lAxisBelt.Error.uiID = 0);
giOuWireheatCurrent := REAL_TO_INT (rCurrent * rCurrentFactor);
giOuWireheatVoltage := REAL_TO_INT (rVoltage * rVoltageFactor);
IF (giOuWireheatCurrent > 16383) THEN
giOuWireheatCurrent := 16383;
END_IF
IF (giOuWireheatVoltage > 16383) THEN
giOuWireheatVoltage := 16383;
END_IF
gbOuWireheatOn1 := (((enStepWirehandling1 = enWireHandlingStep_HEAT_WIRE) AND (enStepWirehandling2 = enWireHandlingStep_HEAT_WIRE)) OR
(enStepWirehandling1 = enWireHandlingStep_INSERT_WIRE)) AND
((gMachine.enMode = enMACH_AUTOMATIC) OR (gMachine.enMode = enMACH_MANUAL));
gbOuSmokeFanOn := ((enStepWirehandling1 = enWireHandlingStep_INSERT_WIRE) OR (enStepWirehandling2 = enWireHandlingStep_INSERT_WIRE) OR
(enStepWirehandling1 = enWireHandlingStep_COOL_WIRE) OR (enStepWirehandling2 = enWireHandlingStep_COOL_WIRE)) AND
((gMachine.enMode = enMACH_AUTOMATIC) OR (gMachine.enMode = enMACH_MANUAL));
IF EDGEPOS (usErrorReset = 1) THEN
lAxisWire1.Error.bAcknowledge := (lAxisWire1.Error.uiID > 0);
lAxisWire2.Error.bAcknowledge := (lAxisWire2.Error.uiID > 0);
lAxisBend1.Error.bAcknowledge := (lAxisBend1.Error.uiID > 0);
lAxisBend2.Error.bAcknowledge := (lAxisBend2.Error.uiID > 0);
lAxisLane.Error.bAcknowledge := (lAxisLane.Error.uiID > 0);
lAxisBelt.Error.bAcknowledge := (lAxisBelt.Error.uiID > 0);
usErrorReset := 0;
END_IF
END_PROGRAM

View File

@@ -0,0 +1,79 @@
PROGRAM _INIT
lAxisWire1 ACCESS ADR (gAxis[0]);
lAxisWire2 ACCESS ADR (gAxis[1]);
lAxisBelt ACCESS ADR (gAxis[2]);
lAxisLane ACCESS ADR (gAxis[3]);
lAxisBend1 ACCESS ADR (gAxis[4]);
lAxisBend2 ACCESS ADR (gAxis[5]);
//Prepare Trace (later from Dataobject)
strcpy (ADR (gMAxTrace.Trace_Config.DatObj.Device), ADR ("logfiles"));
strcpy (ADR (gMAxTrace.Trace_Config.DatObj.Name), ADR ("ParTrace"));
gMAxTrace.Trace_Config.DatObj.Type := mcFILE + mcADD_DATE_TIME;
//Setup Trace
gMAxTrace.Trace_Config.ParTrace.Parameter[0].Axis := ADR (gAxWire1);
gMAxTrace.Trace_Config.ParTrace.Parameter[0].ParID := ACP10PAR_PCTRL_V_SET;
gMAxTrace.Trace_Config.ParTrace.Parameter[1].Axis := ADR (gAxWire2);
gMAxTrace.Trace_Config.ParTrace.Parameter[1].ParID := ACP10PAR_PCTRL_V_SET;
gMAxTrace.Trace_Config.ParTrace.Parameter[2].Axis := ADR (gAxWire1);
gMAxTrace.Trace_Config.ParTrace.Parameter[2].ParID := ACP10PAR_PCTRL_S_ACT;
gMAxTrace.Trace_Config.ParTrace.Parameter[3].Axis := ADR (gAxWire2);
gMAxTrace.Trace_Config.ParTrace.Parameter[3].ParID := ACP10PAR_PCTRL_S_ACT ; //ACP10PAR_PCTRL_S_ACT
gMAxTrace.Trace_Config.ParTrace.Trigger.Axis := ADR (gAxWire1);
gMAxTrace.Trace_Config.ParTrace.Trigger.ParID := ACP10PAR_PCTRL_V_SET;
gMAxTrace.Trace_Config.ParTrace.Trigger.Event:= mcOUT_WINDOW;
gMAxTrace.Trace_Config.ParTrace.Trigger.Threshold := 1;
gMAxTrace.Trace_Config.ParTrace.Trigger.Window := 1;
gMAxTrace.Trace_Config.ParTrace.Type := mcMULTI_AXIS_TRACE;
gMAxTrace.Trace_Config.ParTrace.TracingTime := 60;
gMAxTrace.Trace_Config.ParTrace.SamplingTime := 0.08;
gMAxTrace.Trace_Config.ParTrace.Delay := 0.0;
gMAxTrace.Trace_Config.ParTrace.NetTriggerDelay := 0;
udStartTime := gudUnixTimeUTC;
//Parameter
rCurrentFactor := 368;
rCurrent := 19.5;
rVoltageFactor := 975;
rVoltage := 8;
lAxisWire1.Para.rVelocity := 80;
lAxisWire1.Para.rAcceleration := 500;
lAxisWire1.Para.rDeceleration := 50000;
lAxisWire1.Para.rPosition := 100;
lAxisWire1.Para.rDistance := 340;
lAxisWire1.Para.rJogVelocity := 40;
lAxisLane.Para.rVelocity := 150;
lAxisLane.Para.rAcceleration := 250;
lAxisLane.Para.rDeceleration := 250;
lAxisLane.Para.rJogVelocity := 100;
lAxisBelt.Para.rVelocity := rBeltVelocityEmpty;
lAxisBelt.Para.rJogVelocity := 1500;
lAxisBelt.Para.rAcceleration := 20000; //30000
lAxisBelt.Para.rDeceleration := 20000; //30000
lAxisBelt.Para.rDistance := -160;
lAxisBelt.Para.udAxisModPosPeriod := 16200;
lAxisBelt.Para.udAxisModPosFactor := 1;
lAxisBend1.Para.rVelocity := 300;
lAxisBend1.Para.rJogVelocity := 100;
lAxisBend1.Para.rAcceleration := 5000;
lAxisBend1.Para.rDeceleration := 5000;
lAxisBend2.Para.rVelocity := 300;
lAxisBend2.Para.rJogVelocity := 100;
lAxisBend2.Para.rAcceleration := 5000;
lAxisBend2.Para.rDeceleration := 5000;
//BladeSetup
IF enBladetype = enBlade_None THEN
enBladetype := enBlade_7789_Z07;
END_IF
udActualFramecount ACCESS ADR (gudFramecount[enBladetype]);
lrActualWeldpos ACCESS ADR (grBladeWeldPos[enBladetype]);
END_PROGRAM

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.23 SP05?>
<Program xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File Description="Implementation code">GrillCtrlCyclic.st</File>
<File>GrillCtrllInit.st</File>
<File Description="Local data types" Private="true">GrillCtrl.typ</File>
<File Description="Local variables" Private="true">GrillCtrl.var</File>
</Files>
</Program>

View File

@@ -0,0 +1,161 @@
//7789_Z07 swapped
gbBladePoleUp[enBlade_7789_Z07] := TRUE;
gusBladesInFrame[enBlade_7789_Z07] := 19;
grBladewidth[enBlade_7789_Z07] := -410;
grBladeShiftwidth[enBlade_7789_Z07] := 150;
grBladeStartPos[enBlade_7789_Z07] := 5550;
grBladeWeldPos[enBlade_7789_Z07] := 15995; //16038;
//7789_Z08 swapped
gbBladePoleUp[enBlade_7789_Z08] := FALSE;
gusBladesInFrame[enBlade_7789_Z08] := 19;
grBladewidth[enBlade_7789_Z08] := -410;
grBladeShiftwidth[enBlade_7789_Z08] := 150;
grBladeStartPos[enBlade_7789_Z08] := 5550;
grBladeWeldPos[enBlade_7789_Z08] := 15988; // 16015;// 16053; //16028;
//7789_Z09 swapped
gbBladePoleUp[enBlade_7789_Z09] := TRUE;
gusBladesInFrame[enBlade_7789_Z09] := 19;
grBladewidth[enBlade_7789_Z09] := -410;
grBladeShiftwidth[enBlade_7789_Z09] := 150;
grBladeStartPos[enBlade_7789_Z09] := 5550;
grBladeWeldPos[enBlade_7789_Z09] := 16029; //16038;
//7789_Z10 swapped
gbBladePoleUp[enBlade_7789_Z10] := FALSE;
gusBladesInFrame[enBlade_7789_Z10] := 19;
grBladewidth[enBlade_7789_Z10] := -410;
grBladeShiftwidth[enBlade_7789_Z10] := 150;
grBladeStartPos[enBlade_7789_Z10] := 5550;
grBladeWeldPos[enBlade_7789_Z10] := 16028;
//7617_Z04 swapped
gbBladePoleUp[enBlade_7617_Z04] := TRUE;
gusBladesInFrame[enBlade_7617_Z04] := 17;
grBladewidth[enBlade_7617_Z04] := -720;
grBladeShiftwidth[enBlade_7617_Z04] := 165;
grBladeStartPos[enBlade_7617_Z04] := 2255;
grBladeWeldPos[enBlade_7617_Z04] := 12750; //12759;
//7617_Z05 swapped
gbBladePoleUp[enBlade_7617_Z05] := FALSE;
gusBladesInFrame[enBlade_7617_Z05] := 17;
grBladewidth[enBlade_7617_Z05] := -580;
grBladeShiftwidth[enBlade_7617_Z05] := 165;
grBladeStartPos[enBlade_7617_Z05] := 2255;
grBladeWeldPos[enBlade_7617_Z05] := 12735;
//7618_Z04 swapped
gbBladePoleUp[enBlade_7618_Z04] := FALSE;
gusBladesInFrame[enBlade_7618_Z04] := 17;
grBladewidth[enBlade_7618_Z04] := -330;
grBladeShiftwidth[enBlade_7618_Z04] := 165;
grBladeStartPos[enBlade_7618_Z04] := 2255;
grBladeWeldPos[enBlade_7618_Z04] := 12754; //12735;
//7618_Z05 swapped
gbBladePoleUp[enBlade_7618_Z05] := TRUE;
gusBladesInFrame[enBlade_7618_Z05] := 17;
grBladewidth[enBlade_7618_Z05] := -195;
grBladeShiftwidth[enBlade_7618_Z05] := 165;
grBladeStartPos[enBlade_7618_Z05] := 2255;
grBladeWeldPos[enBlade_7618_Z05] := 12880.0;
//7619_Z04 swapped
gbBladePoleUp[enBlade_7619_Z04] := FALSE;
gusBladesInFrame[enBlade_7619_Z04] := 17;
grBladewidth[enBlade_7619_Z04] := -314;
grBladeShiftwidth[enBlade_7619_Z04] := 165;
grBladeStartPos[enBlade_7619_Z04] := 2255;
grBladeWeldPos[enBlade_7619_Z04] := 12870; //12818; // 12758.0; //12724;
//7619_Z05 swapped
gbBladePoleUp[enBlade_7619_Z05] := TRUE;
gusBladesInFrame[enBlade_7619_Z05] := 17;
grBladewidth[enBlade_7619_Z05] := -195;
grBladeShiftwidth[enBlade_7619_Z05] := 165;
grBladeStartPos[enBlade_7619_Z05] := 2255;
grBladeWeldPos[enBlade_7619_Z05] := 12740.0;
//7620_Z04 swapped
gbBladePoleUp[enBlade_7620_Z04] := TRUE;
gusBladesInFrame[enBlade_7620_Z04] := 17;
grBladewidth[enBlade_7620_Z04] := -720;
grBladeShiftwidth[enBlade_7620_Z04] := 165;
grBladeStartPos[enBlade_7620_Z04] := 2255;
grBladeWeldPos[enBlade_7620_Z04] := 12802; // 12730;
//7620_Z05 swapped
gbBladePoleUp[enBlade_7620_Z05] := FALSE;
gusBladesInFrame[enBlade_7620_Z05] := 17;
grBladewidth[enBlade_7620_Z05] := -580;
grBladeShiftwidth[enBlade_7620_Z05] := 165;
grBladeStartPos[enBlade_7620_Z05] := 2255;
grBladeWeldPos[enBlade_7620_Z05] := 12872; // 12776.0; //12735;
//7733_Z01 swapped
gbBladePoleUp[enBlade_7733_Z01] := FALSE;
gusBladesInFrame[enBlade_7733_Z01] := 19;
grBladewidth[enBlade_7733_Z01] := -650;
grBladeShiftwidth[enBlade_7733_Z01] := 150;
grBladeStartPos[enBlade_7733_Z01] := 5550;
grBladeWeldPos[enBlade_7733_Z01] := 16054;
//7733_Z03 swapped with 7736_Z03
gbBladePoleUp[enBlade_7733_Z03] := FALSE;
gusBladesInFrame[enBlade_7733_Z03] := 19;
grBladewidth[enBlade_7733_Z03] := -480;
grBladeShiftwidth[enBlade_7733_Z03] := 150;
grBladeStartPos[enBlade_7733_Z03] := 5550;
grBladeWeldPos[enBlade_7733_Z03] := 16007; //16031;
//7734_Z01 swapped with 35_Z01
gbBladePoleUp[enBlade_7734_Z01] := FALSE; //TRUE;
gusBladesInFrame[enBlade_7734_Z01] := 16;
grBladewidth[enBlade_7734_Z01] := -555;
grBladeShiftwidth[enBlade_7734_Z01] := 180;// 195; //180;
grBladeStartPos[enBlade_7734_Z01] := 15000; //11676; //15000;
grBladeWeldPos[enBlade_7734_Z01] := 9595; //6376.0; //6404; //9595;
//7734_Z03 swapped with 35_Z03
gbBladePoleUp[enBlade_7734_Z03] := FALSE;
gusBladesInFrame[enBlade_7734_Z03] := 17;
grBladewidth[enBlade_7734_Z03] := -304;
grBladeShiftwidth[enBlade_7734_Z03] := 165;
grBladeStartPos[enBlade_7734_Z03] := 2255;
grBladeWeldPos[enBlade_7734_Z03] := 12723; //12735; //12767; //12794;
//7735_Z01 (swappted wicht 34_z01)
gbBladePoleUp[enBlade_7735_Z01] := TRUE; //FALSE;
gusBladesInFrame[enBlade_7735_Z01] := 16;
grBladewidth[enBlade_7735_Z01] := -555;
grBladeShiftwidth[enBlade_7735_Z01] := 194; //180;
grBladeStartPos[enBlade_7735_Z01] := 11676; //15000;
grBladeWeldPos[enBlade_7735_Z01] := 6376.0; //9595;
//7735_Z03 swapped 7734_Z03
gbBladePoleUp[enBlade_7735_Z03] := TRUE;
gusBladesInFrame[enBlade_7735_Z03] := 17;
grBladewidth[enBlade_7735_Z03] := -304;
grBladeShiftwidth[enBlade_7735_Z03] := 165;
grBladeStartPos[enBlade_7735_Z03] := 2255;
grBladeWeldPos[enBlade_7735_Z03] := 12888;// 12740; //12794;
//7736_Z01
gbBladePoleUp[enBlade_7736_Z01] := TRUE;
gusBladesInFrame[enBlade_7736_Z01] := 19;
grBladewidth[enBlade_7736_Z01] := -650;
grBladeShiftwidth[enBlade_7736_Z01] := 150;
grBladeStartPos[enBlade_7736_Z01] := 5550;
grBladeWeldPos[enBlade_7736_Z01] := 16054;
//7736_Z03 swapped with 7733_Z03
gbBladePoleUp[enBlade_7736_Z03] := TRUE;
gusBladesInFrame[enBlade_7736_Z03] := 19;
grBladewidth[enBlade_7736_Z03] := -480;
grBladeShiftwidth[enBlade_7736_Z03] := 150;
grBladeStartPos[enBlade_7736_Z03] := 5550;
grBladeWeldPos[enBlade_7736_Z03] := 16021; //16047;

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.22 SP04?>
<Package xmlns="http://br-automation.co.at/AS/Package">
<Objects>
<Object Type="DataObject" Language="Ax">gaxwirei</Object>
<Object Type="DataObject" Language="Ax">gaxbelti</Object>
<Object Type="DataObject" Language="Ax">gaxlanei</Object>
<Object Type="DataObject" Language="Ax">gaxbend1i</Object>
<Object Type="DataObject" Language="Ax">gaxbend2i</Object>
</Objects>
</Package>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.21 SP03?>
<DataObject xmlns="http://br-automation.co.at/AS/DataObject">
<Files>
<File>gaxbelti.ax</File>
</Files>
</DataObject>

View File

@@ -0,0 +1,170 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.0.14.206?>
<InitParameter Version="2.34.1" NcSwId="acp10">
<Group ID="ACP10AXIS_typ">
<Group ID="dig_in">
<Group ID="level">
<Parameter ID="reference" Value="ncACTIV_HI" />
<Parameter ID="pos_hw_end" Value="ncACTIV_HI" />
<Parameter ID="neg_hw_end" Value="ncACTIV_HI" />
<Parameter ID="trigger1" Value="ncACTIV_HI" />
<Parameter ID="trigger2" Value="ncACTIV_HI" />
</Group>
</Group>
<Group ID="encoder_if">
<Group ID="parameter">
<Parameter ID="count_dir" Value="ncSTANDARD" />
<Group ID="scaling">
<Group ID="load">
<Parameter ID="units" Value="1200" Description="Units at the load [1/10 mm]" />
<Parameter ID="rev_motor" Value="1" />
</Group>
</Group>
</Group>
</Group>
<Group ID="limit">
<Group ID="parameter">
<Parameter ID="v_pos" Value="10000" />
<Parameter ID="v_neg" Value="10000" />
<Parameter ID="a1_pos" Value="50000" />
<Parameter ID="a2_pos" Value="50000" />
<Parameter ID="a1_neg" Value="50000" />
<Parameter ID="a2_neg" Value="50000" />
<Parameter ID="t_jolt" Value="0" />
<Parameter ID="t_in_pos" Value="0" />
<Parameter ID="pos_sw_end" Value="2000000000" />
<Parameter ID="neg_sw_end" Value="-2000000000" />
<Parameter ID="ds_warning" Value="1000.0" />
<Parameter ID="ds_stop" Value="2000.0" />
<Parameter ID="a_stop" Value="1.0e30" />
<Parameter ID="dv_stop" Value="0" />
<Parameter ID="dv_stop_mode" Value="ncOFF" />
</Group>
</Group>
<Group ID="controller">
<Parameter ID="mode" Value="ncPOSITION" />
<Group ID="position">
<Parameter ID="kv" Value="50" />
<Parameter ID="tn" Value="0" />
<Parameter ID="t_predict" Value="0.020000" />
<Parameter ID="t_total" Value="0.020000" />
<Parameter ID="p_max" Value="10000" />
<Parameter ID="i_max" Value="0" />
</Group>
<Group ID="speed">
<Parameter ID="kv" Value="2.0" />
<Parameter ID="tn" Value="0" />
<Parameter ID="t_filter" Value="0.0" />
<Group ID="isq_filter1">
<Parameter ID="type" Value="ncOFF" />
<Parameter ID="a0" Value="0.0" />
<Parameter ID="a1" Value="0.0" />
<Parameter ID="b0" Value="0.0" />
<Parameter ID="b1" Value="0.0" />
<Parameter ID="b2" Value="0.0" />
<Parameter ID="c0_par_id" Value="0" />
<Parameter ID="c1_par_id" Value="0" />
</Group>
<Group ID="isq_filter2">
<Parameter ID="type" Value="ncOFF" />
<Parameter ID="a0" Value="0.0" />
<Parameter ID="a1" Value="0.0" />
<Parameter ID="b0" Value="0.0" />
<Parameter ID="b1" Value="0.0" />
<Parameter ID="b2" Value="0.0" />
<Parameter ID="c0_par_id" Value="0" />
<Parameter ID="c1_par_id" Value="0" />
</Group>
<Group ID="isq_filter3">
<Parameter ID="type" Value="ncOFF" />
<Parameter ID="a0" Value="0.0" />
<Parameter ID="a1" Value="0.0" />
<Parameter ID="b0" Value="0.0" />
<Parameter ID="b1" Value="0.0" />
<Parameter ID="b2" Value="0.0" />
<Parameter ID="c0_par_id" Value="0" />
<Parameter ID="c1_par_id" Value="0" />
</Group>
</Group>
<Group ID="uf">
<Parameter ID="type" Value="ncLINEAR" />
<Parameter ID="auto_config" Value="ncMOTOR_PAR" />
<Parameter ID="u0" Value="0" />
<Parameter ID="un" Value="0" />
<Parameter ID="fn" Value="50.0" />
<Parameter ID="k_f_slip" Value="0" />
</Group>
<Group ID="ff">
<Parameter ID="torque_load" Value="0.0" />
<Parameter ID="torque_pos" Value="0.0" />
<Parameter ID="torque_neg" Value="0.0" />
<Parameter ID="kv_torque" Value="0.0" />
<Parameter ID="inertia" Value="0.0" />
<Parameter ID="t_filter_a" Value="0.0" />
</Group>
</Group>
<Group ID="move">
<Group ID="stop">
<Group ID="parameter[0]">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
<Parameter ID="controller" Value="ncON" />
</Group>
<Group ID="parameter[1]">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
<Parameter ID="controller" Value="ncON" />
</Group>
<Group ID="parameter[2]">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
<Parameter ID="controller" Value="ncON" />
</Group>
<Group ID="parameter[3]">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
<Parameter ID="controller" Value="ncON" />
</Group>
<Group ID="quickstop">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
</Group>
<Group ID="drive_error">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
</Group>
</Group>
<Group ID="homing">
<Group ID="parameter">
<Parameter ID="s" Value="0" />
<Parameter ID="v_switch" Value="1000.0" />
<Parameter ID="v_trigger" Value="500" />
<Parameter ID="a" Value="50000" />
<Parameter ID="mode" Value="ncABS_SWITCH" />
<Parameter ID="edge_sw" Value="ncNEGATIVE" />
<Parameter ID="start_dir" Value="ncPOSITIVE" />
<Parameter ID="trigg_dir" Value="ncNEGATIVE" />
<Parameter ID="ref_pulse" Value="ncOFF" />
<Parameter ID="fix_dir" Value="ncOFF" />
<Parameter ID="tr_s_block" Value="0" />
<Parameter ID="torque_lim" Value="0" />
<Parameter ID="ds_block" Value="0" />
<Parameter ID="ds_stop" Value="0" />
</Group>
</Group>
<Group ID="basis">
<Group ID="parameter">
<Parameter ID="v_pos" Value="10000" />
<Parameter ID="v_neg" Value="10000" />
<Parameter ID="a1_pos" Value="50000" />
<Parameter ID="a2_pos" Value="50000" />
<Parameter ID="a1_neg" Value="50000" />
<Parameter ID="a2_neg" Value="50000" />
</Group>
</Group>
</Group>
<Group ID="message">
<Group ID="text">
<Group ID="parameter">
<Parameter ID="format" Value="ncBREAK" />
<Parameter ID="columns" Value="80" />
<Parameter ID="data_modul" Value="acp10etxde" />
</Group>
</Group>
</Group>
</Group>
</InitParameter>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.21 SP03?>
<DataObject xmlns="http://br-automation.co.at/AS/DataObject">
<Files>
<File>gaxbend1i.ax</File>
</Files>
</DataObject>

View File

@@ -0,0 +1,166 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.22 SP04?>
<InitParameter Version="2.34.1" NcSwId="acp10">
<Group ID="ACP10AXIS_typ" Description="">
<Group ID="dig_in">
<Group ID="level">
<Parameter ID="reference" Value="ncACTIV_HI" />
<Parameter ID="pos_hw_end" Value="ncACTIV_HI" />
<Parameter ID="neg_hw_end" Value="ncACTIV_HI" />
<Parameter ID="trigger1" Value="ncACTIV_HI" />
<Parameter ID="trigger2" Value="ncACTIV_HI" />
</Group>
</Group>
<Group ID="encoder_if">
<Group ID="parameter">
<Parameter ID="count_dir" Value="ncSTANDARD" />
<Group ID="scaling">
<Group ID="load">
<Parameter ID="units" Value="180" />
<Parameter ID="rev_motor" Value="1" />
</Group>
</Group>
</Group>
</Group>
<Group ID="limit">
<Group ID="parameter">
<Parameter ID="v_pos" Value="10000" />
<Parameter ID="v_neg" Value="10000" />
<Parameter ID="a1_pos" Value="50000" />
<Parameter ID="a2_pos" Value="50000" />
<Parameter ID="a1_neg" Value="50000" />
<Parameter ID="a2_neg" Value="50000" />
<Parameter ID="t_jolt" Value="0" />
<Parameter ID="t_in_pos" Value="0" />
<Parameter ID="pos_sw_end" Value="2000000000" />
<Parameter ID="neg_sw_end" Value="-2000000000" />
<Parameter ID="ds_warning" Value="500" />
<Parameter ID="ds_stop" Value="1000" />
<Parameter ID="a_stop" Value="1.0e30" />
<Parameter ID="dv_stop" Value="0" />
<Parameter ID="dv_stop_mode" Value="ncOFF" />
</Group>
</Group>
<Group ID="controller">
<Parameter ID="mode" Value="ncPOSITION" />
<Group ID="position">
<Parameter ID="kv" Value="50" />
<Parameter ID="tn" Value="0" />
<Parameter ID="t_predict" Value="0.020000" />
<Parameter ID="t_total" Value="0.020000" />
<Parameter ID="p_max" Value="10000" />
<Parameter ID="i_max" Value="0" />
</Group>
<Group ID="speed">
<Parameter ID="kv" Value="2.0" />
<Parameter ID="tn" Value="0" />
<Parameter ID="t_filter" Value="0.0" />
<Group ID="isq_filter1">
<Parameter ID="type" Value="ncOFF" />
<Parameter ID="a0" Value="0.0" />
<Parameter ID="a1" Value="0.0" />
<Parameter ID="b0" Value="0.0" />
<Parameter ID="b1" Value="0.0" />
<Parameter ID="b2" Value="0.0" />
<Parameter ID="c0_par_id" Value="0" />
<Parameter ID="c1_par_id" Value="0" />
</Group>
<Group ID="isq_filter2">
<Parameter ID="type" Value="ncOFF" />
<Parameter ID="a0" Value="0.0" />
<Parameter ID="a1" Value="0.0" />
<Parameter ID="b0" Value="0.0" />
<Parameter ID="b1" Value="0.0" />
<Parameter ID="b2" Value="0.0" />
<Parameter ID="c0_par_id" Value="0" />
<Parameter ID="c1_par_id" Value="0" />
</Group>
<Group ID="isq_filter3">
<Parameter ID="type" Value="ncOFF" />
<Parameter ID="a0" Value="0.0" />
<Parameter ID="a1" Value="0.0" />
<Parameter ID="b0" Value="0.0" />
<Parameter ID="b1" Value="0.0" />
<Parameter ID="b2" Value="0.0" />
<Parameter ID="c0_par_id" Value="0" />
<Parameter ID="c1_par_id" Value="0" />
</Group>
</Group>
<Group ID="uf">
<Parameter ID="type" Value="ncLINEAR" />
<Parameter ID="auto_config" Value="ncMOTOR_PAR" />
<Parameter ID="u0" Value="0" />
<Parameter ID="un" Value="0" />
<Parameter ID="fn" Value="50.0" />
<Parameter ID="k_f_slip" Value="0" />
</Group>
<Group ID="ff">
<Parameter ID="torque_load" Value="0.0" />
<Parameter ID="torque_pos" Value="0.0" />
<Parameter ID="torque_neg" Value="0.0" />
<Parameter ID="kv_torque" Value="0.0" />
<Parameter ID="inertia" Value="0.0" />
<Parameter ID="t_filter_a" Value="0.0" />
</Group>
</Group>
<Group ID="move">
<Group ID="stop">
<Group ID="parameter[0]">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
<Parameter ID="controller" Value="ncON" />
</Group>
<Group ID="parameter[1]">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
<Parameter ID="controller" Value="ncON" />
</Group>
<Group ID="parameter[2]">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
<Parameter ID="controller" Value="ncON" />
</Group>
<Group ID="parameter[3]">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
<Parameter ID="controller" Value="ncON" />
</Group>
<Group ID="quickstop">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
</Group>
<Group ID="drive_error">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
</Group>
</Group>
<Group ID="homing">
<Group ID="parameter">
<Parameter ID="s" Value="0" />
<Parameter ID="v_switch" Value="350.0" />
<Parameter ID="v_trigger" Value="100.0" />
<Parameter ID="a" Value="50000" />
<Parameter ID="mode" Value="ncABS_SWITCH" />
<Parameter ID="edge_sw" Value="ncNEGATIVE" />
<Parameter ID="start_dir" Value="ncNEGATIVE" />
<Parameter ID="trigg_dir" Value="ncPOSITIVE" />
<Parameter ID="ref_pulse" Value="ncOFF" />
<Parameter ID="tr_s_block" Value="0" />
</Group>
</Group>
<Group ID="basis">
<Group ID="parameter">
<Parameter ID="v_pos" Value="10000" />
<Parameter ID="v_neg" Value="10000" />
<Parameter ID="a1_pos" Value="50000" />
<Parameter ID="a2_pos" Value="50000" />
<Parameter ID="a1_neg" Value="50000" />
<Parameter ID="a2_neg" Value="50000" />
</Group>
</Group>
</Group>
<Group ID="message">
<Group ID="text">
<Group ID="parameter">
<Parameter ID="format" Value="ncBREAK" />
<Parameter ID="columns" Value="80" />
<Parameter ID="data_modul" Value="acp10etxde" />
</Group>
</Group>
</Group>
</Group>
</InitParameter>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.21 SP03?>
<DataObject xmlns="http://br-automation.co.at/AS/DataObject">
<Files>
<File>gaxbend2i.ax</File>
</Files>
</DataObject>

View File

@@ -0,0 +1,166 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.22 SP04?>
<InitParameter Version="2.34.1" NcSwId="acp10">
<Group ID="ACP10AXIS_typ" Description="">
<Group ID="dig_in">
<Group ID="level">
<Parameter ID="reference" Value="ncACTIV_HI" />
<Parameter ID="pos_hw_end" Value="ncACTIV_HI" />
<Parameter ID="neg_hw_end" Value="ncACTIV_HI" />
<Parameter ID="trigger1" Value="ncACTIV_HI" />
<Parameter ID="trigger2" Value="ncACTIV_HI" />
</Group>
</Group>
<Group ID="encoder_if">
<Group ID="parameter">
<Parameter ID="count_dir" Value="ncSTANDARD" />
<Group ID="scaling">
<Group ID="load">
<Parameter ID="units" Value="180" />
<Parameter ID="rev_motor" Value="1" />
</Group>
</Group>
</Group>
</Group>
<Group ID="limit">
<Group ID="parameter">
<Parameter ID="v_pos" Value="10000" />
<Parameter ID="v_neg" Value="10000" />
<Parameter ID="a1_pos" Value="50000" />
<Parameter ID="a2_pos" Value="50000" />
<Parameter ID="a1_neg" Value="50000" />
<Parameter ID="a2_neg" Value="50000" />
<Parameter ID="t_jolt" Value="0" />
<Parameter ID="t_in_pos" Value="0" />
<Parameter ID="pos_sw_end" Value="2000000000" />
<Parameter ID="neg_sw_end" Value="-2000000000" />
<Parameter ID="ds_warning" Value="500" />
<Parameter ID="ds_stop" Value="1000" />
<Parameter ID="a_stop" Value="1.0e30" />
<Parameter ID="dv_stop" Value="0" />
<Parameter ID="dv_stop_mode" Value="ncOFF" />
</Group>
</Group>
<Group ID="controller">
<Parameter ID="mode" Value="ncPOSITION" />
<Group ID="position">
<Parameter ID="kv" Value="50" />
<Parameter ID="tn" Value="0" />
<Parameter ID="t_predict" Value="0.020000" />
<Parameter ID="t_total" Value="0.020000" />
<Parameter ID="p_max" Value="10000" />
<Parameter ID="i_max" Value="0" />
</Group>
<Group ID="speed">
<Parameter ID="kv" Value="2.0" />
<Parameter ID="tn" Value="0" />
<Parameter ID="t_filter" Value="0.0" />
<Group ID="isq_filter1">
<Parameter ID="type" Value="ncOFF" />
<Parameter ID="a0" Value="0.0" />
<Parameter ID="a1" Value="0.0" />
<Parameter ID="b0" Value="0.0" />
<Parameter ID="b1" Value="0.0" />
<Parameter ID="b2" Value="0.0" />
<Parameter ID="c0_par_id" Value="0" />
<Parameter ID="c1_par_id" Value="0" />
</Group>
<Group ID="isq_filter2">
<Parameter ID="type" Value="ncOFF" />
<Parameter ID="a0" Value="0.0" />
<Parameter ID="a1" Value="0.0" />
<Parameter ID="b0" Value="0.0" />
<Parameter ID="b1" Value="0.0" />
<Parameter ID="b2" Value="0.0" />
<Parameter ID="c0_par_id" Value="0" />
<Parameter ID="c1_par_id" Value="0" />
</Group>
<Group ID="isq_filter3">
<Parameter ID="type" Value="ncOFF" />
<Parameter ID="a0" Value="0.0" />
<Parameter ID="a1" Value="0.0" />
<Parameter ID="b0" Value="0.0" />
<Parameter ID="b1" Value="0.0" />
<Parameter ID="b2" Value="0.0" />
<Parameter ID="c0_par_id" Value="0" />
<Parameter ID="c1_par_id" Value="0" />
</Group>
</Group>
<Group ID="uf">
<Parameter ID="type" Value="ncLINEAR" />
<Parameter ID="auto_config" Value="ncMOTOR_PAR" />
<Parameter ID="u0" Value="0" />
<Parameter ID="un" Value="0" />
<Parameter ID="fn" Value="50.0" />
<Parameter ID="k_f_slip" Value="0" />
</Group>
<Group ID="ff">
<Parameter ID="torque_load" Value="0.0" />
<Parameter ID="torque_pos" Value="0.0" />
<Parameter ID="torque_neg" Value="0.0" />
<Parameter ID="kv_torque" Value="0.0" />
<Parameter ID="inertia" Value="0.0" />
<Parameter ID="t_filter_a" Value="0.0" />
</Group>
</Group>
<Group ID="move">
<Group ID="stop">
<Group ID="parameter[0]">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
<Parameter ID="controller" Value="ncON" />
</Group>
<Group ID="parameter[1]">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
<Parameter ID="controller" Value="ncON" />
</Group>
<Group ID="parameter[2]">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
<Parameter ID="controller" Value="ncON" />
</Group>
<Group ID="parameter[3]">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
<Parameter ID="controller" Value="ncON" />
</Group>
<Group ID="quickstop">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
</Group>
<Group ID="drive_error">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
</Group>
</Group>
<Group ID="homing">
<Group ID="parameter">
<Parameter ID="s" Value="0" />
<Parameter ID="v_switch" Value="350.0" />
<Parameter ID="v_trigger" Value="100.0" />
<Parameter ID="a" Value="50000" />
<Parameter ID="mode" Value="ncABS_SWITCH" />
<Parameter ID="edge_sw" Value="ncNEGATIVE" />
<Parameter ID="start_dir" Value="ncNEGATIVE" />
<Parameter ID="trigg_dir" Value="ncPOSITIVE" />
<Parameter ID="ref_pulse" Value="ncOFF" />
<Parameter ID="tr_s_block" Value="0" />
</Group>
</Group>
<Group ID="basis">
<Group ID="parameter">
<Parameter ID="v_pos" Value="10000" />
<Parameter ID="v_neg" Value="10000" />
<Parameter ID="a1_pos" Value="50000" />
<Parameter ID="a2_pos" Value="50000" />
<Parameter ID="a1_neg" Value="50000" />
<Parameter ID="a2_neg" Value="50000" />
</Group>
</Group>
</Group>
<Group ID="message">
<Group ID="text">
<Group ID="parameter">
<Parameter ID="format" Value="ncBREAK" />
<Parameter ID="columns" Value="80" />
<Parameter ID="data_modul" Value="acp10etxde" />
</Group>
</Group>
</Group>
</Group>
</InitParameter>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.21 SP03?>
<DataObject xmlns="http://br-automation.co.at/AS/DataObject">
<Files>
<File>gaxlanei.ax</File>
</Files>
</DataObject>

View File

@@ -0,0 +1,166 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.22 SP04?>
<InitParameter Version="2.34.1" NcSwId="acp10">
<Group ID="ACP10AXIS_typ" Description="">
<Group ID="dig_in">
<Group ID="level">
<Parameter ID="reference" Value="ncACTIV_HI" />
<Parameter ID="pos_hw_end" Value="ncACTIV_HI" />
<Parameter ID="neg_hw_end" Value="ncACTIV_HI" />
<Parameter ID="trigger1" Value="ncACTIV_HI" />
<Parameter ID="trigger2" Value="ncACTIV_HI" />
</Group>
</Group>
<Group ID="encoder_if">
<Group ID="parameter">
<Parameter ID="count_dir" Value="ncSTANDARD" />
<Group ID="scaling">
<Group ID="load">
<Parameter ID="units" Value="40" />
<Parameter ID="rev_motor" Value="1" />
</Group>
</Group>
</Group>
</Group>
<Group ID="limit">
<Group ID="parameter">
<Parameter ID="v_pos" Value="10000" />
<Parameter ID="v_neg" Value="10000" />
<Parameter ID="a1_pos" Value="50000" />
<Parameter ID="a2_pos" Value="50000" />
<Parameter ID="a1_neg" Value="50000" />
<Parameter ID="a2_neg" Value="50000" />
<Parameter ID="t_jolt" Value="0" />
<Parameter ID="t_in_pos" Value="0" />
<Parameter ID="pos_sw_end" Value="0" />
<Parameter ID="neg_sw_end" Value="-755" />
<Parameter ID="ds_warning" Value="500" />
<Parameter ID="ds_stop" Value="1000" />
<Parameter ID="a_stop" Value="1.0e30" />
<Parameter ID="dv_stop" Value="0" />
<Parameter ID="dv_stop_mode" Value="ncOFF" />
</Group>
</Group>
<Group ID="controller">
<Parameter ID="mode" Value="ncPOSITION" />
<Group ID="position">
<Parameter ID="kv" Value="50" />
<Parameter ID="tn" Value="0" />
<Parameter ID="t_predict" Value="0.020000" />
<Parameter ID="t_total" Value="0.020000" />
<Parameter ID="p_max" Value="10000" />
<Parameter ID="i_max" Value="0" />
</Group>
<Group ID="speed">
<Parameter ID="kv" Value="2.0" />
<Parameter ID="tn" Value="0" />
<Parameter ID="t_filter" Value="0.0" />
<Group ID="isq_filter1">
<Parameter ID="type" Value="ncOFF" />
<Parameter ID="a0" Value="0.0" />
<Parameter ID="a1" Value="0.0" />
<Parameter ID="b0" Value="0.0" />
<Parameter ID="b1" Value="0.0" />
<Parameter ID="b2" Value="0.0" />
<Parameter ID="c0_par_id" Value="0" />
<Parameter ID="c1_par_id" Value="0" />
</Group>
<Group ID="isq_filter2">
<Parameter ID="type" Value="ncOFF" />
<Parameter ID="a0" Value="0.0" />
<Parameter ID="a1" Value="0.0" />
<Parameter ID="b0" Value="0.0" />
<Parameter ID="b1" Value="0.0" />
<Parameter ID="b2" Value="0.0" />
<Parameter ID="c0_par_id" Value="0" />
<Parameter ID="c1_par_id" Value="0" />
</Group>
<Group ID="isq_filter3">
<Parameter ID="type" Value="ncOFF" />
<Parameter ID="a0" Value="0.0" />
<Parameter ID="a1" Value="0.0" />
<Parameter ID="b0" Value="0.0" />
<Parameter ID="b1" Value="0.0" />
<Parameter ID="b2" Value="0.0" />
<Parameter ID="c0_par_id" Value="0" />
<Parameter ID="c1_par_id" Value="0" />
</Group>
</Group>
<Group ID="uf">
<Parameter ID="type" Value="ncLINEAR" />
<Parameter ID="auto_config" Value="ncMOTOR_PAR" />
<Parameter ID="u0" Value="0" />
<Parameter ID="un" Value="0" />
<Parameter ID="fn" Value="50.0" />
<Parameter ID="k_f_slip" Value="0" />
</Group>
<Group ID="ff">
<Parameter ID="torque_load" Value="0.0" />
<Parameter ID="torque_pos" Value="0.0" />
<Parameter ID="torque_neg" Value="0.0" />
<Parameter ID="kv_torque" Value="0.0" />
<Parameter ID="inertia" Value="0.0" />
<Parameter ID="t_filter_a" Value="0.0" />
</Group>
</Group>
<Group ID="move">
<Group ID="stop">
<Group ID="parameter[0]">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
<Parameter ID="controller" Value="ncON" />
</Group>
<Group ID="parameter[1]">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
<Parameter ID="controller" Value="ncON" />
</Group>
<Group ID="parameter[2]">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
<Parameter ID="controller" Value="ncON" />
</Group>
<Group ID="parameter[3]">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
<Parameter ID="controller" Value="ncON" />
</Group>
<Group ID="quickstop">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
</Group>
<Group ID="drive_error">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
</Group>
</Group>
<Group ID="homing">
<Group ID="parameter">
<Parameter ID="s" Value="0" />
<Parameter ID="v_switch" Value="25.0" />
<Parameter ID="v_trigger" Value="10.0" />
<Parameter ID="a" Value="50000" />
<Parameter ID="mode" Value="ncABS_SWITCH" />
<Parameter ID="edge_sw" Value="ncPOSITIVE" />
<Parameter ID="start_dir" Value="ncPOSITIVE" />
<Parameter ID="trigg_dir" Value="ncNEGATIVE" />
<Parameter ID="ref_pulse" Value="ncOFF" />
<Parameter ID="tr_s_block" Value="0" />
</Group>
</Group>
<Group ID="basis">
<Group ID="parameter">
<Parameter ID="v_pos" Value="10000" />
<Parameter ID="v_neg" Value="10000" />
<Parameter ID="a1_pos" Value="50000" />
<Parameter ID="a2_pos" Value="50000" />
<Parameter ID="a1_neg" Value="50000" />
<Parameter ID="a2_neg" Value="50000" />
</Group>
</Group>
</Group>
<Group ID="message">
<Group ID="text">
<Group ID="parameter">
<Parameter ID="format" Value="ncBREAK" />
<Parameter ID="columns" Value="80" />
<Parameter ID="data_modul" Value="acp10etxde" />
</Group>
</Group>
</Group>
</Group>
</InitParameter>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.22 SP04?>
<DataObject xmlns="http://br-automation.co.at/AS/DataObject">
<Files>
<File>gaxwirei.ax</File>
</Files>
</DataObject>

View File

@@ -0,0 +1,166 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.22 SP04?>
<InitParameter Version="2.34.1" NcSwId="acp10">
<Group ID="ACP10AXIS_typ" Description="">
<Group ID="dig_in">
<Group ID="level">
<Parameter ID="reference" Value="ncACTIV_HI" />
<Parameter ID="pos_hw_end" Value="ncACTIV_HI" />
<Parameter ID="neg_hw_end" Value="ncACTIV_HI" />
<Parameter ID="trigger1" Value="ncACTIV_HI" />
<Parameter ID="trigger2" Value="ncACTIV_HI" />
</Group>
</Group>
<Group ID="encoder_if">
<Group ID="parameter">
<Parameter ID="count_dir" Value="ncSTANDARD" />
<Group ID="scaling">
<Group ID="load">
<Parameter ID="units" Value="314159" />
<Parameter ID="rev_motor" Value="1000" />
</Group>
</Group>
</Group>
</Group>
<Group ID="limit">
<Group ID="parameter">
<Parameter ID="v_pos" Value="10000" />
<Parameter ID="v_neg" Value="10000" />
<Parameter ID="a1_pos" Value="50000" />
<Parameter ID="a2_pos" Value="50000" />
<Parameter ID="a1_neg" Value="50000" />
<Parameter ID="a2_neg" Value="50000" />
<Parameter ID="t_jolt" Value="0" />
<Parameter ID="t_in_pos" Value="0" />
<Parameter ID="pos_sw_end" Value="2000000000" />
<Parameter ID="neg_sw_end" Value="-2000000000" />
<Parameter ID="ds_warning" Value="500" />
<Parameter ID="ds_stop" Value="1000" />
<Parameter ID="a_stop" Value="1.0e30" />
<Parameter ID="dv_stop" Value="0" />
<Parameter ID="dv_stop_mode" Value="ncOFF" />
</Group>
</Group>
<Group ID="controller">
<Parameter ID="mode" Value="ncPOSITION" />
<Group ID="position">
<Parameter ID="kv" Value="50" />
<Parameter ID="tn" Value="0" />
<Parameter ID="t_predict" Value="0.020000" />
<Parameter ID="t_total" Value="0.020000" />
<Parameter ID="p_max" Value="10000" />
<Parameter ID="i_max" Value="0" />
</Group>
<Group ID="speed">
<Parameter ID="kv" Value="2.0" />
<Parameter ID="tn" Value="0" />
<Parameter ID="t_filter" Value="0.0" />
<Group ID="isq_filter1">
<Parameter ID="type" Value="ncOFF" />
<Parameter ID="a0" Value="0.0" />
<Parameter ID="a1" Value="0.0" />
<Parameter ID="b0" Value="0.0" />
<Parameter ID="b1" Value="0.0" />
<Parameter ID="b2" Value="0.0" />
<Parameter ID="c0_par_id" Value="0" />
<Parameter ID="c1_par_id" Value="0" />
</Group>
<Group ID="isq_filter2">
<Parameter ID="type" Value="ncOFF" />
<Parameter ID="a0" Value="0.0" />
<Parameter ID="a1" Value="0.0" />
<Parameter ID="b0" Value="0.0" />
<Parameter ID="b1" Value="0.0" />
<Parameter ID="b2" Value="0.0" />
<Parameter ID="c0_par_id" Value="0" />
<Parameter ID="c1_par_id" Value="0" />
</Group>
<Group ID="isq_filter3">
<Parameter ID="type" Value="ncOFF" />
<Parameter ID="a0" Value="0.0" />
<Parameter ID="a1" Value="0.0" />
<Parameter ID="b0" Value="0.0" />
<Parameter ID="b1" Value="0.0" />
<Parameter ID="b2" Value="0.0" />
<Parameter ID="c0_par_id" Value="0" />
<Parameter ID="c1_par_id" Value="0" />
</Group>
</Group>
<Group ID="uf">
<Parameter ID="type" Value="ncLINEAR" />
<Parameter ID="auto_config" Value="ncMOTOR_PAR" />
<Parameter ID="u0" Value="0" />
<Parameter ID="un" Value="0" />
<Parameter ID="fn" Value="50.0" />
<Parameter ID="k_f_slip" Value="0" />
</Group>
<Group ID="ff">
<Parameter ID="torque_load" Value="0.0" />
<Parameter ID="torque_pos" Value="0.0" />
<Parameter ID="torque_neg" Value="0.0" />
<Parameter ID="kv_torque" Value="0.0" />
<Parameter ID="inertia" Value="0.0" />
<Parameter ID="t_filter_a" Value="0.0" />
</Group>
</Group>
<Group ID="move">
<Group ID="stop">
<Group ID="parameter[0]">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
<Parameter ID="controller" Value="ncON" />
</Group>
<Group ID="parameter[1]">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
<Parameter ID="controller" Value="ncON" />
</Group>
<Group ID="parameter[2]">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
<Parameter ID="controller" Value="ncON" />
</Group>
<Group ID="parameter[3]">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
<Parameter ID="controller" Value="ncON" />
</Group>
<Group ID="quickstop">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
</Group>
<Group ID="drive_error">
<Parameter ID="decel_ramp" Value="ncA_LIMIT" />
</Group>
</Group>
<Group ID="homing">
<Group ID="parameter">
<Parameter ID="s" Value="0" />
<Parameter ID="v_switch" Value="5000" />
<Parameter ID="v_trigger" Value="500" />
<Parameter ID="a" Value="50000" />
<Parameter ID="mode" Value="ncDIRECT" />
<Parameter ID="edge_sw" Value="ncPOSITIVE" />
<Parameter ID="start_dir" Value="ncPOSITIVE" />
<Parameter ID="trigg_dir" Value="ncPOSITIVE" />
<Parameter ID="ref_pulse" Value="ncOFF" />
<Parameter ID="tr_s_block" Value="0" />
</Group>
</Group>
<Group ID="basis">
<Group ID="parameter">
<Parameter ID="v_pos" Value="10000" />
<Parameter ID="v_neg" Value="10000" />
<Parameter ID="a1_pos" Value="50000" />
<Parameter ID="a2_pos" Value="50000" />
<Parameter ID="a1_neg" Value="50000" />
<Parameter ID="a2_neg" Value="50000" />
</Group>
</Group>
</Group>
<Group ID="message">
<Group ID="text">
<Group ID="parameter">
<Parameter ID="format" Value="ncBREAK" />
<Parameter ID="columns" Value="80" />
<Parameter ID="data_modul" Value="acp10etxde" />
</Group>
</Group>
</Group>
</Group>
</InitParameter>

View File

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

View File

@@ -0,0 +1,11 @@
(*//-----------------------------------------------------------------------------------------------------*)
(*//MC FunctionBlocks*)
VAR
Axis_MC_BR_ParTrace : MC_BR_ParTrace := (0); (*Parameter Trace*)
Axis_MC_BR_ReadParTraceStatus : MC_BR_ReadParTraceStatus := (0); (*Parameter Trace Status*)
END_VAR
(*//-----------------------------------------------------------------------------------------------------*)
(*//Dynamic Vars*)
VAR
lMAxTrace : REFERENCE TO typMultAx_Trace; (*Axis Datastruct *)
END_VAR

View File

@@ -0,0 +1,107 @@
(********************************************************************
* COPYRIGHT --
********************************************************************
* Program: MAxTrace
* File: MAxTraceCyclic.ab
* Author: michi
* Created: July 18, 2012
********************************************************************
* Implementation of program MAxTrace
********************************************************************)
PROGRAM _CYCLIC
;STATE Machine Trace
SELECT lMAxTrace.uiTraceStep
;==============================================
;READY
STATE AxTraceSTATE_READY
strcpy (ADR (lMAxTrace.sStep), "AxTraceSTATE_READY")
WHEN (lMAxTrace.bLoadConfig = 1)
lMAxTrace.bLoadConfig = 0
NEXT AxTraceSTATE_LOAD_CONFIG
WHEN (lMAxTrace.bStartSave = 1)
lMAxTrace.bStartSave = 0
NEXT AxTraceSTATE_START_SAVE
Axis_MC_BR_ParTrace.Execute = 0
//Axis_MC_BR_ParTraceConfig.Execute = 0
Axis_MC_BR_ReadParTraceStatus.Enable = 0
;==============================================
;Load Trace Config
STATE AxTraceSTATE_LOAD_CONFIG
strcpy (ADR (lMAxTrace.sStep), "AxTraceSTATE_LOAD_CONFIG")
//Axis_MC_BR_ParTraceConfig.Command = mcLoad
//Axis_MC_BR_ParTraceConfig.AdrTraceConfig = adr (lMAxTrace.Trace_DatObj_Refercence)
//Axis_MC_BR_ParTraceConfig.Execute = 1
;check if loading is finished
//when (Axis_MC_BR_ParTrace.Done)
// Axis_MC_BR_ParTraceConfig.Execute = 0
//next AxTraceSTATE_READY
;check for error occured
//when (Axis_MC_BR_ParTraceConfig.Error)
// Axis_MC_BR_ParTraceConfig.Execute = 0
// Axis_MC_BR_ParTraceConfig.ErrorRecord
//next AxTraceSTATE_ERROR
;==============================================
;Start and Save Trace
STATE AxTraceSTATE_START_SAVE
strcpy (ADR (lMAxTrace.sStep), "AxTraceSTATE_START_SAVE")
Axis_MC_BR_ParTrace.Configuration = lMAxTrace.Trace_Config
Axis_MC_BR_ParTrace.Command = mcSTART + mcSAVE
Axis_MC_BR_ParTrace.Execute = 1
;check if Trace is finished
WHEN (Axis_MC_BR_ParTrace.Done)
Axis_MC_BR_ParTrace.Execute = 0
NEXT AxTraceSTATE_READY
;check for error occured
WHEN (Axis_MC_BR_ParTrace.Error)
Axis_MC_BR_ParTrace.Execute = 0
lMAxTrace.uiTraceError = Axis_MC_BR_ParTrace.ErrorID
lMAxTrace.Trace_Error_Record = Axis_MC_BR_ParTrace.ErrorRecord
NEXT AxTraceSTATE_ERROR
WHEN (lMAxTrace.bStop = 1)
Axis_MC_BR_ParTrace.Execute = 0
lMAxTrace.bStop = 0
NEXT AxTraceSTATE_STOP
;==============================================
;Stop Trace
STATE AxTraceSTATE_STOP
strcpy (ADR (lMAxTrace.sStep), "AxTraceSTATE_STOP")
Axis_MC_BR_ParTrace.Command = mcSTOP
Axis_MC_BR_ParTrace.Execute = 1
;check if Trace is finished
WHEN (Axis_MC_BR_ParTrace.Done)
Axis_MC_BR_ParTrace.Execute = 0
NEXT AxTraceSTATE_READY
;check for error occured
WHEN (Axis_MC_BR_ParTrace.Error)
Axis_MC_BR_ParTrace.Execute = 0
;Axis_MC_BR_ParTrace.ErrorRecord
NEXT AxTraceSTATE_ERROR
;==============================================
;Error
STATE AxTraceSTATE_ERROR
strcpy (ADR (lMAxTrace.sStep), "AxTraceSTATE_ERROR")
WHEN (1 = 1)
NEXT AxTraceSTATE_READY
ENDSELECT
Axis_MC_BR_ParTrace FUB MC_BR_ParTrace ()
//Axis_MC_BR_ParTraceConfig fub MC_BR_ParTraceConfig ()
Axis_MC_BR_ReadParTraceStatus FUB MC_BR_ReadParTraceStatus ()
END_PROGRAM

View File

@@ -0,0 +1,17 @@
(********************************************************************
* COPYRIGHT --
********************************************************************
* Program: MAxTrace
* File: MAxTraceInit.ab
* Author: michi
* Created: July 18, 2012
********************************************************************
* Implementation of program MAxTrace
********************************************************************)
PROGRAM _INIT
lMAxTrace ACCESS ADR (gMAxTrace);
END_PROGRAM

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.0.14.207?>
<Package xmlns="http://br-automation.co.at/AS/Package">
<Objects>
<Object Type="File" Description="Package data types">GlobalAxis.typ</Object>
<Object Type="File" Description="Package variables">GlobalAxis.var</Object>
<Object Type="Program" Language="IEC">ncsdcctrl</Object>
<Object Type="Program" Language="IEC" Description="Controller">GrillCtrl</Object>
<Object Type="Program" Language="IEC" Description="Multi Axis Trace">MAxTrace</Object>
<Object Type="Program" Language="IEC" Description="Wire Axis1">Axis1</Object>
<Object Type="Program" Language="IEC" Description="Wire Axis2">Axis2</Object>
<Object Type="Program" Language="IEC" Description="Belt Axis">Axis3</Object>
<Object Type="Program" Language="IEC" Description="Lane Axis">Axis4</Object>
<Object Type="Program" Language="IEC" Description="Bend1 Axis">Axis5</Object>
<Object Type="Program" Language="IEC" Description="Bend2 Axis">Axis6</Object>
<Object Type="Package">Init</Object>
<Object Type="Package">ACPPar</Object>
<Object Type="DataObject" Language="Ett">acp10etxen</Object>
<Object Type="DataObject" Language="Ett">acp10etxde</Object>
<Object Type="File">GrillValues.txt</Object>
</Objects>
</Package>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.21 SP03?>
<DataObject xmlns="http://br-automation.co.at/AS/DataObject">
<Files>
<File>acp10etxde.ett</File>
</Files>
</DataObject>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.21 SP03?>
<DataObject xmlns="http://br-automation.co.at/AS/DataObject">
<Files>
<File>acp10etxen.ett</File>
</Files>
</DataObject>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.21 SP03?>
<Program xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File>ncsdcctrl.st</File>
<File Private="true">ncsdcctrl.var</File>
</Files>
</Program>

View File

@@ -0,0 +1,185 @@
PROGRAM _INIT
//gAxWire1
//=========================================================
gAxWire1_HW.EncIf1_Typ := ncSDC_ENC16;
strcpy (ADR (gAxWire1_HW.EncIf1_Name), ADR ('gAxWire1_EncIf1'));
gAxWire1_HW.DrvIf_Typ := ncSDC_DRVSM16;
strcpy (ADR (gAxWire1_HW.DrvIf_Name), ADR( 'gAxWire1_DrvIf'));
gAxWire1_HW.DiDoIf_Typ := ncSDC_DIDO;
strcpy (ADR (gAxWire1_HW.DiDoIf_Name), ADR ('gAxWire1_DiDoIf'));
//gAxWire1_HW.TrigIf1_Typ := ncSDC_TRIGDIGin;
//strcpy (ADR (gAxWire1_HW.TrigIf1_Name), ADR ('gAxWire1_TrigIf'));
(* force variable offset generation *)
gAxWire1.size := gAxWire1.size;
gAxWire1_EncIf1.iLifeCnt := gAxWire1_EncIf1.iLifeCnt;
//gAxWire1_TrigIfDin400.iTriggerInput := gAxWire1_TrigIfDin.iTriggerInput;
gAxWire1_TrigIf.iLifeCnt := gAxWire1_TrigIf.iLifeCnt;
(* initialize old-value for delta step calculation *)
gAxWire1_oSetPosOld := gAxWire1_DrvIf.oSetPos;
//gAxWire2
//=========================================================
gAxWire2_HW.EncIf1_Typ := ncSDC_ENC16;
strcpy (ADR (gAxWire2_HW.EncIf1_Name), ADR ('gAxWire2_EncIf1'));
gAxWire2_HW.DrvIf_Typ := ncSDC_DRVSM16;
strcpy (ADR (gAxWire2_HW.DrvIf_Name), ADR ('gAxWire2_DrvIf'));
gAxWire2_HW.DiDoIf_Typ := ncSDC_DIDO;
strcpy (ADR (gAxWire2_HW.DiDoIf_Name), ADR ('gAxWire2_DiDoIf'));
(* force variable offset generation *)
gAxWire2.size := gAxWire2.size;
gAxWire2_EncIf1.iLifeCnt := gAxWire2_EncIf1.iLifeCnt;
(* initialize old-value for delta step calculation *)
gAxWire2_oSetPosOld := gAxWire2_DrvIf.oSetPos;
(* ### END gAxWire2 ### *)
(* ### BEGIN gAxLane ### *)
(* initialize variables *)
gAxLane_HW.EncIf1_Typ := ncSDC_ENC16;
strcpy (ADR (gAxLane_HW.EncIf1_Name), ADR ('gAxLane_EncIf1'));
gAxLane_HW.DrvIf_Typ := ncSDC_DRVSM16;
strcpy (ADR (gAxLane_HW.DrvIf_Name), ADR ('gAxLane_DrvIf'));
gAxLane_HW.DiDoIf_Typ := ncSDC_DIDO;
strcpy (ADR (gAxLane_HW.DiDoIf_Name), ADR ('gAxLane_DiDoIf'));
(* force variable offset generation *)
gAxLane.size := gAxLane.size;
gAxLane_EncIf1.iLifeCnt := gAxLane_EncIf1.iLifeCnt;
(* initialize old-value for delta step calculation *)
gAxLane_oSetPosOld := gAxLane_DrvIf.oSetPos;
//gAxBelt
//=========================================================
gAxBelt_HW.EncIf1_Typ := ncSDC_ENC16;
strcpy (ADR (gAxBelt_HW.EncIf1_Name), ADR ('gAxBelt_EncIf1'));
gAxBelt_HW.DrvIf_Typ := ncSDC_DRVSM16;
strcpy (ADR (gAxBelt_HW.DrvIf_Name), ADR ('gAxBelt_DrvIf'));
gAxBelt_HW.DiDoIf_Typ := ncSDC_DIDO;
strcpy (ADR (gAxBelt_HW.DiDoIf_Name), ADR ('gAxBelt_DiDoIf'));
(* force variable offset generation *)
gAxBelt.size := gAxBelt.size;
gAxBelt_EncIf1.iLifeCnt := gAxBelt_EncIf1.iLifeCnt;
(* initialize old-value for delta step calculation *)
gAxBelt_oSetPosOld := gAxBelt_DrvIf.oSetPos;
//gAxBend1
//=========================================================
gAxBend1_HW.EncIf1_Typ := ncSDC_ENC16;
strcpy (ADR (gAxBend1_HW.EncIf1_Name), ADR ('gAxBend1_EncIf1'));
gAxBend1_HW.DrvIf_Typ := ncSDC_DRVSM16;
strcpy (ADR (gAxBend1_HW.DrvIf_Name), ADR ('gAxBend1_DrvIf'));
gAxBend1_HW.DiDoIf_Typ := ncSDC_DIDO;
strcpy (ADR (gAxBend1_HW.DiDoIf_Name), ADR ('gAxBend1_DiDoIf'));
(* force variable offset generation *)
gAxBend1.size := gAxBend1.size;
gAxBend1_EncIf1.iLifeCnt := gAxBend1_EncIf1.iLifeCnt;
(* initialize old-value for delta step calculation *)
gAxBend1_oSetPosOld := gAxBend1_DrvIf.oSetPos;
//gAxBend2
//=========================================================
gAxBend2_HW.EncIf1_Typ := ncSDC_ENC16;
strcpy (ADR (gAxBend2_HW.EncIf1_Name), ADR ('gAxBend2_EncIf1'));
gAxBend2_HW.DrvIf_Typ := ncSDC_DRVSM16;
strcpy (ADR (gAxBend2_HW.DrvIf_Name), ADR ('gAxBend2_DrvIf'));
gAxBend2_HW.DiDoIf_Typ := ncSDC_DIDO;
strcpy (ADR (gAxBend2_HW.DiDoIf_Name), ADR ('gAxBend2_DiDoIf'));
(* force variable offset generation *)
gAxBend2.size := gAxBend2.size;
gAxBend2_EncIf1.iLifeCnt := gAxBend2_EncIf1.iLifeCnt;
(* initialize old-value for delta step calculation *)
gAxBend2_oSetPosOld := gAxBend2_DrvIf.oSetPos;
END_PROGRAM
PROGRAM _CYCLIC
//gAxWire1
//=========================================================
(* life counter emulation of digital inputs *)
gAxWire1_DiDoIf.iLifeCntReference := gAxWire1_DiDoIf.iLifeCntReference + 1;
gAxWire1_DiDoIf.iLifeCntNegHwEnd := gAxWire1_DiDoIf.iLifeCntNegHwEnd + 1;
gAxWire1_DiDoIf.iLifeCntPosHwEnd := gAxWire1_DiDoIf.iLifeCntPosHwEnd + 1;
gAxWire1_TrigIf.iLifeCnt := gAxWire1_TrigIf.iLifeCnt + 1;
(* default function model of ACOPOSmicro: convert absolute steps to delta steps *)
gAxWire1_MotorStep0 := gAxWire1_DrvIf.oSetPos - gAxWire1_oSetPosOld; (* overflow save delta calculation *)
gAxWire1_oSetPosOld := gAxWire1_DrvIf.oSetPos;
//gAxWire1
//=========================================================
(* life counter emulation of digital inputs *)
gAxWire2_DiDoIf.iLifeCntReference := gAxWire2_DiDoIf.iLifeCntReference + 1;
gAxWire2_DiDoIf.iLifeCntNegHwEnd := gAxWire2_DiDoIf.iLifeCntNegHwEnd + 1;
gAxWire2_DiDoIf.iLifeCntPosHwEnd := gAxWire2_DiDoIf.iLifeCntPosHwEnd + 1;
(* default function model of ACOPOSmicro: convert absolute steps to delta steps *)
gAxWire2_MotorStep0 := gAxWire2_DrvIf.oSetPos - gAxWire2_oSetPosOld; (* overflow save delta calculation *)
gAxWire2_oSetPosOld := gAxWire2_DrvIf.oSetPos;
//gAxLane
//=========================================================
(* life counter emulation of digital inputs *)
gAxLane_DiDoIf.iLifeCntReference := gAxLane_DiDoIf.iLifeCntReference + 1;
gAxLane_DiDoIf.iLifeCntNegHwEnd := gAxLane_DiDoIf.iLifeCntNegHwEnd + 1;
gAxLane_DiDoIf.iLifeCntPosHwEnd := gAxLane_DiDoIf.iLifeCntPosHwEnd + 1;
(* default function model of ACOPOSmicro: convert absolute steps to delta steps *)
gAxLane_MotorStep0 := gAxLane_DrvIf.oSetPos - gAxLane_oSetPosOld; (* overflow save delta calculation *)
gAxLane_oSetPosOld := gAxLane_DrvIf.oSetPos;
//gAxBelt
//=========================================================
(* life counter emulation of digital inputs *)
gAxBelt_DiDoIf.iLifeCntReference := gAxBelt_DiDoIf.iLifeCntReference + 1;
gAxBelt_DiDoIf.iLifeCntNegHwEnd := gAxBelt_DiDoIf.iLifeCntNegHwEnd + 1;
gAxBelt_DiDoIf.iLifeCntPosHwEnd := gAxBelt_DiDoIf.iLifeCntPosHwEnd + 1;
(* default function model of ACOPOSmicro: convert absolute steps to delta steps *)
gAxBelt_MotorStep0 := gAxBelt_DrvIf.oSetPos - gAxBelt_oSetPosOld; (* overflow save delta calculation *)
gAxBelt_oSetPosOld := gAxBelt_DrvIf.oSetPos;
//gAxBend1
//=========================================================
(* life counter emulation of digital inputs *)
gAxBend1_DiDoIf.iLifeCntReference := gAxBend1_DiDoIf.iLifeCntReference + 1;
gAxBend1_DiDoIf.iLifeCntNegHwEnd := gAxBend1_DiDoIf.iLifeCntNegHwEnd + 1;
gAxBend1_DiDoIf.iLifeCntPosHwEnd := gAxBend1_DiDoIf.iLifeCntPosHwEnd + 1;
(* default function model of ACOPOSmicro: convert absolute steps to delta steps *)
gAxBend1_MotorStep0 := gAxBend1_DrvIf.oSetPos - gAxBend1_oSetPosOld; (* overflow save delta calculation *)
(* old value for delta step generation *)
gAxBend1_oSetPosOld := gAxBend1_DrvIf.oSetPos;
//gAxBend2
//=========================================================
(* life counter emulation of digital inputs *)
gAxBend2_DiDoIf.iLifeCntReference := gAxBend2_DiDoIf.iLifeCntReference + 1;
gAxBend2_DiDoIf.iLifeCntNegHwEnd := gAxBend2_DiDoIf.iLifeCntNegHwEnd + 1;
gAxBend2_DiDoIf.iLifeCntPosHwEnd := gAxBend2_DiDoIf.iLifeCntPosHwEnd + 1;
(* default function model of ACOPOSmicro: convert absolute steps to delta steps *)
gAxBend2_MotorStep0 := gAxBend2_DrvIf.oSetPos - gAxBend2_oSetPosOld; (* overflow save delta calculation *)
gAxBend2_oSetPosOld := gAxBend2_DrvIf.oSetPos;
END_PROGRAM

View File

@@ -0,0 +1,12 @@
VAR
gAxWire1_oSetPosOld : INT := 0;
gAxWire2_oSetPosOld : INT := 0;
gAxLane_oSetPosOld : INT := 0;
gAxBelt_oSetPosOld : INT := 0;
gAxBend1_oSetPosOld : INT := 0;
gAxBend2_oSetPosOld : INT := 0;
gAxis01_oSetPosOld : INT := 0;

View File

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

View File

@@ -0,0 +1,14 @@
VAR
bBlink0_1 : BOOL;
bBlink0_5 : BOOL;
bBlink1_0 : BOOL;
bBlink2_0 : BOOL;
bBlink5_0 : BOOL;
bBlink10_0 : BOOL;
bBlink20_0 : BOOL;
gdtActTime : DATE_AND_TIME; (*Current Date and Time*)
gDTSActTimeUTC : DTStructure := (0); (*Current Date and Time as DTS (ms) UTC !!!*)
gudUnixTimeUTC : UDINT; (*Current Date and Time as Unixts UTC !!!*)
gOuNull : BOOL; (*DUMMY for Output*)
gAOuNull : INT; (*DUMMY for Output*)
END_VAR

View File

@@ -0,0 +1,10 @@
(*// Constants*)
VAR CONSTANT
gAInNull : INT := 0; (*O FOR Analog Input*)
gTrue : BOOL := TRUE; (*Konstant TRUE*)
gFalse : BOOL := FALSE; (*Konstant False*)
gInNull : BOOL := FALSE; (*FALSE FOR Input *)
giAIVoltageOverflow : INT := 16#7FFF; (* Analog Input Voltage Mode,Overflow *)
giAIVoltageUnderflow : INT := -32767; (* Analog Input Voltage Underflow *)
grAIVoltageOverflow : REAL := 32767.0; (*Analog Input Voltage Mode,Overflow *)
END_VAR

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.23 SP05?>
<Package xmlns="http://br-automation.co.at/AS/Package">
<Objects>
<Object Type="File">Global.typ</Object>
<Object Type="File" Description="Local variables">GlobalComon.var</Object>
<Object Type="File" Description="Local variables">GlobalConstants.var</Object>
<Object Type="Program" Language="IEC" Description="Actual Date_And_Time">get_dt</Object>
<Object Type="Program" Language="IEC" Description="Blinker 0,1 -0,5s">blinker</Object>
</Objects>
</Package>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.22 SP04?>
<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 10ms
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=3.0.90.23 SP05?>
<Program xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File Private="true">get_dt.var</File>
<File>get_dtCyclic.ab</File>
<File>get_dtInit.ab</File>
</Files>
</Program>

View File

@@ -0,0 +1,13 @@
VAR
lDTGetTime : DTGetTime;
lUtcDTStructureGetTime : UtcDTStructureGetTime;
END_VAR
(*For unixtimestamp conversion*)
VAR CONSTANT
uiDaysToMonthStart : ARRAY[0..11] OF UINT := [0,31,59,90,120,151,181,212,243,273,304,334];
END_VAR
VAR
udYears : UDINT;
udSwitchYears : UDINT;
udUnixTime : UDINT;
END_VAR

View File

@@ -0,0 +1,28 @@
PROGRAM _CYCLIC
//Retrieve actual Date and Time in different Formats
//as Date and Time
lDTGetTime.enable = true
lDTGetTime FUB DTGetTime()
gdtActTime = lDTGetTime.DT1
//as Datetime Structure
lUtcDTStructureGetTime.enable = TRUE
lUtcDTStructureGetTime.pDTStructure = ADR (gDTSActTimeUTC)
lUtcDTStructureGetTime FUB UtcDTStructureGetTime ()
//as Unix Timestamp
udYears = gDTSActTimeUTC.year - 1970
udSwitchYears = ((gDTSActTimeUTC.year - 1) - 1968) / 4\
- ((gDTSActTimeUTC.year - 1) - 1900) / 100\
+ ((gDTSActTimeUTC.year - 1) - 1600) / 400
udUnixTime = gDTSActTimeUTC.second + UDINT (60) * gDTSActTimeUTC.minute + UDINT (3600) * gDTSActTimeUTC.hour + \
(uiDaysToMonthStart[gDTSActTimeUTC.month - 1] + gDTSActTimeUTC.day -1 + udYears * 365 + udSwitchYears) * 86400
IF (gDTSActTimeUTC.month > 2) AND (gDTSActTimeUTC.year MOD 4 = 0) AND ((gDTSActTimeUTC.year MOD 100 <> 0) OR (gDTSActTimeUTC.year MOD 400 = 0)) THEN
udUnixTime = udUnixTime + 86400
ENDIF
gudUnixTimeUTC = udUnixTime
END_PROGRAM

View File

@@ -0,0 +1,5 @@
PROGRAM _INIT
(* init program *)
;tSEtSntpClient_0.enalbe = true
END_PROGRAM

View File

@@ -0,0 +1,144 @@
(********************************************************************
* COPYRIGHT -- Bernecker + Rainer
********************************************************************
* Program: BarcodeRdr
* File: BarcodeRdr.st
* Author: Bernecker + Rainer
* Created: September 15, 2009
********************************************************************
* Descirption: Reads data from a USB barcode reader
********************************************************************)
(********************************************************************
* INIT UP
********************************************************************)
PROGRAM _INIT
usbAttachDetachCount := 0;
usbNodeIx := 0;
enStep := enUSBRDRStep_INIT;
END_PROGRAM
(********************************************************************
* CYCLIC TASK
********************************************************************)
PROGRAM _CYCLIC
CASE enStep OF
enUSBRDRStep_INIT:
enStep := enUSBRDRStep_USB_GETNODELIST;
enUSBRDRStep_USB_GETNODELIST: (* STEP: Find all plugged USB devices *)
UsbNodeListGetFub (enable := TRUE,
pBuffer := ADR (usbNodeList),
bufferSize := SIZEOF (usbNodeList),
filterInterfaceClass := 0,
filterInterfaceSubClass := 0);
IF UsbNodeListGetFub.status = ERR_OK AND UsbNodeListGetFub.listNodes <> 0 THEN
(* USB device attach or detach *)
enStep := enUSBRDRStep_USB_SEARCHDEVICE;
usbNodeIx := 0;
usbAttachDetachCount := UsbNodeListGetFub.attachDetachCount;
ELSIF UsbNodeListGetFub.status = asusbERR_BUFSIZE OR UsbNodeListGetFub.status = asusbERR_NULLPOINTER THEN
(* Error handling *)
END_IF
enUSBRDRStep_USB_SEARCHDEVICE: (* STEP: Search USB barcode reader device *)
sizeUsbNode := SIZEOF (usbDevice);
UsbNodeGetFub (enable := TRUE,
nodeId := usbNodeList[usbNodeIx],
pBuffer := ADR (usbDevice),
bufferSize := SIZEOF (usbDevice));
IF UsbNodeGetFub.status = ERR_OK THEN
(* USB reader? *)
IF usbDevice.vendorId = VENDOR_ID_CS650 AND usbDevice.productId = PRODUCT_ID_CS650 THEN
(* USB reader found *)
strcpy (ADR (StringDevice), ADR (usbDevice.ifName));
usbNodeId := usbNodeList[usbNodeIx];
enStep := enUSBRDRStep_USB_DVDEVOPEN;
ELSE
usbNodeIx := usbNodeIx + 1;
IF usbNodeIx >= UsbNodeListGetFub.allNodes THEN
(* USB device not found *)
enStep := enUSBRDRStep_USB_GETNODELIST;
END_IF
END_IF
ELSIF UsbNodeGetFub.status = asusbERR_USB_NOTFOUND THEN
(* USB device not found *)
enStep := enUSBRDRStep_USB_GETNODELIST;
ELSIF UsbNodeGetFub.status = asusbERR_BUFSIZE OR UsbNodeGetFub.status = asusbERR_NULLPOINTER THEN
(* Error handling *)
END_IF
enUSBRDRStep_USB_DVDEVOPEN: (* STEP: Open device *)
(* Initialize open structure *)
FrameXOpenFub (enable := TRUE,
device := ADR (StringDevice),
mode := 0,
config := 0);
IF FrameXOpenFub.status = ERR_OK THEN
enStep := enUSBRDRStep_READ;
END_IF
enUSBRDRStep_READ: (* STEP: Read data from buffer *)
(* Initialize read structure *)
FrameReadFub (enable := TRUE,
ident := FrameXOpenFub.ident);
IF FrameReadFub.status = 0 THEN (* check status *)
IF readIx < SIZEOF (ReadData) THEN
(* Copy read data into array *)
memcpy (ADR (ReadData[readIx]), FrameReadFub.buffer, FrameReadFub.buflng);
memcpy (ADR (ReadData2[readIx]), FrameReadFub.buffer, FrameReadFub.buflng);
readIx := readIx + UINT_TO_USINT (FrameReadFub.buflng);
(* Start frame translation if Return key received *)
IF ReadData[readIx-1] = 16#A8 THEN
enStep := enUSBRDRStep_DECODE;
END_IF
END_IF
(* Initialize release buffer structure *)
FrameReleaseBufferFub (enable := TRUE,
ident := FrameXOpenFub.ident,
buffer := FrameReadFub.buffer,
buflng := FrameReadFub.buflng);
END_IF
enUSBRDRStep_DECODE: (* STEP: Translate USB HID to ASCII characters *)
udCodeNr := 0;
memset (ADR (AsciiData), 0, SIZEOF (AsciiData));
j := 0;
(* Filter KeyUp codes and invalid data *)
FOR i := 0 TO readIx - 2 DO
IF ReadData[i] + 16#80 = ReadData[i+1] THEN
AsciiData[j] := ReadData[i];
j := j + 1;
END_IF
END_FOR
(* Translate to ASCII *)
FOR i := 0 TO j - 1 DO
(* Check that data is within valid LUT range *)
IF AsciiData[i] <= 16#30 AND AsciiData[i] <= 16#39 THEN
AsciiData[i] := ASCII_LUT[AsciiData[i]];
udCodeNr := udCodeNr * 10 + USINT_TO_UDINT (AsciiData[i] - 16#30);
END_IF
END_FOR
(* Clear raw data buffer *)
memset (ADR (ReadData), 0, SIZEOF (ReadData));
readIx := 0;
enStep := enUSBRDRStep_READ;
END_CASE
END_PROGRAM

View File

@@ -0,0 +1,12 @@
TYPE
typ_enStepUSBRDR :
( (*Schritte USB Leser*)
enUSBRDRStep_INIT, (*Init -> Search Reader*)
enUSBRDRStep_USB_GETNODELIST, (*Get USB Devices*)
enUSBRDRStep_USB_SEARCHDEVICE, (*Search Reader in Devices*)
enUSBRDRStep_USB_DVDEVOPEN, (*Open Reader*)
enUSBRDRStep_READ, (*READ from Reader*)
enUSBRDRStep_DECODE
);
END_TYPE

View File

@@ -0,0 +1,41 @@
(********************************************************************
* COPYRIGHT -- Bernecker + Rainer
********************************************************************
* Program: BarcodeRdr
* File: BarcodeRdr.var
* Author: Bernecker + Rainer
* Created: September 15, 2009
********************************************************************
* Local variables of program BarcodeRdr
********************************************************************)
VAR
readIx : USINT;
sizeUsbNode : USINT;
usbNodeIx : USINT;
enStep : typ_enStepUSBRDR; (*Step variable*)
i : UINT; (*Loop counter*)
j : UINT; (*Loop counter*)
usbAttachDetachCount : UDINT;
usbNodeId : UDINT;
udCodeNr : UDINT;
AsciiData : ARRAY[0..255] OF USINT; (*Translated (ASCII) data*)
ReadData : ARRAY[0..255] OF USINT; (*Raw data*)
ReadData2 : ARRAY[0..255] OF USINT; (*Raw data*)
StringDevice : ARRAY[0..29] OF STRING[80]; (*Logical device path*)
usbNodeList : ARRAY[0..31] OF UDINT;
FrameReadFub : FRM_read;
FrameReleaseBufferFub : FRM_rbuf;
FrameXOpenFub : FRM_xopen;
UsbNodeGetFub : UsbNodeGet;
UsbNodeListGetFub : UsbNodeListGet;
usbDevice : usbNode_typ;
END_VAR
VAR CONSTANT
ASCII_ENDINDEX : USINT := 39; (*Last index of ASCII LUT*)
ASCII_STARTINDEX : USINT := 4; (*Start index of ASCII LUT*)
ASCII_LUT : ARRAY[ASCII_STARTINDEX..ASCII_ENDINDEX] OF USINT := [65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,49,50,51,52,53,54,55,56,57,48]; (*Lookup Table USB HID to ASCII*)
PRODUCT_ID_DATALOGICREADER : UINT := 16#8706; (*USB Product ID*)
VENDOR_ID_DATALOGICREADER : UINT := 16#1529; (*USB Vendor ID*)
PRODUCT_ID_CS650 : UINT := 16#008C; (*USB Product ID*)
VENDOR_ID_CS650 : UINT := 16#0809; (*USB Vendor ID*)
END_VAR

View File

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

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.23 SP05?>
<Package xmlns="http://br-automation.co.at/AS/Package">
<Objects>
<Object Type="Program" Language="IEC" Description="Collectd Client">collectd</Object>
<Object Type="Program" Language="IEC" Description="13 Mhz Transponder B&amp;R">RFID_USB</Object>
<Object Type="Program" Language="IEC">BarcodeRdr</Object>
<Object Type="Program" Language="IEC" Description="Sick RFID Reader">RFID</Object>
<Object Type="Program" Language="IEC" Description="S7 ABB Roboter">S7ABB</Object>
</Objects>
</Package>

View File

@@ -0,0 +1,43 @@
FUNCTION ASCtoUDINT
ASCtoUDINT := 0;
udNextAdr := udInNextAdr;
FOR usi:=0 TO 7 BY 1 DO
memcpy (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=3.0.90.23 SP05?>
<Program xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File Private="true">RFID.var</File>
<File Description="Local data types" Private="true">RFID.typ</File>
<File>RFIDCyclic.st</File>
<File>RFIDInit.st</File>
<File Private="true">RFID.fun</File>
<File Description="Convert ASCII Value to UDINT">ASCtoUDINT.st</File>
</Files>
</Program>

View File

@@ -0,0 +1,11 @@
FUNCTION ASCtoUDINT : UDINT (*Convert ASCII Value to UDINT*)
VAR_INPUT
udInNextAdr : UDINT; (*Next Pos in ByteStream (No CHECK)*)
END_VAR
VAR
udNextAdr : UDINT;
usi : USINT;
usChar : USINT;
END_VAR
END_FUNCTION

View File

@@ -0,0 +1,12 @@
TYPE
Steps_enum :
( (*Steps of RFID Statemachine*)
enSTEP_INIT,
enSTEP_OPEN,
enSTEP_OPENED,
enSTEP_CONNECTED,
enSTEP_CLOSE,
enSTEP_CLOSED
);
END_TYPE

View File

@@ -0,0 +1,41 @@
(*FUB Instances*)
VAR
FUB_TcpOpen : TcpOpen;
FUB_TcpClient : TcpClient;
FUB_TcpClose : TcpClose;
FUB_TcpRecv : TcpRecv;
FUB_TcpSend : TcpSend;
END_VAR
(*//Local VArs*)
VAR
bAllowData : BOOL;
bSend : BOOL;
bGateEnable : BOOL;
usi : USINT := 0;
usTemp : USINT := 0;
usCodes : USINT := 0;
usTelegramNr : USINT;
uiProdNr : UINT;
udTagID : UDINT;
udRackID : UDINT;
udProdID : UDINT;
udClosePortID : UDINT;
udClientID : UDINT;
udSocketID : UDINT;
strServerIP : STRING[20];
strBindIP : STRING[20];
strRecvBufferChar : STRING[2];
strCharCmp : STRING[2];
strRecvBuffer : STRING[120];
strRecvBufferSave : STRING[120];
strSendBuffer : STRING[120];
enState : Steps_enum;
END_VAR
(*//ASCII Constants*)
VAR CONSTANT
usSTX : USINT := 2; (*ASCII STX*)
usETX : USINT := 3; (*ASCII ETX*)
usCR : USINT := 13; (*ASCII CR*)
strStartRead : STRING[15] := 'sMN mTCgateon';
strStopRead : STRING[16] := 'sMN mTCgateoff';
END_VAR

View File

@@ -0,0 +1,132 @@
PROGRAM _CYCLIC
IF enState = enSTEP_INIT THEN
enState := enSTEP_OPEN;
END_IF
//Open listener Socket
FUB_TcpOpen.enable := (enState = enSTEP_OPEN);
FUB_TcpOpen ();
IF FUB_TcpOpen.status = 0 THEN
udSocketID := FUB_TcpOpen.ident;
enState := enSTEP_OPENED;
ELSIF FUB_TcpOpen.status = tcpERR_ALREADY_EXIST THEN
udClosePortID := FUB_TcpOpen.ident;
enState := enSTEP_CLOSE;
ELSIF FUB_TcpOpen.status = tcpERR_NOMORE_IDENTS THEN
udClosePortID := 1; //Close Port 1
enState := enSTEP_CLOSE;
END_IF
//connect to server
FUB_TcpClient.enable := (enState = enSTEP_OPENED);
FUB_TcpClient.ident := udSocketID;
FUB_TcpClient ();
IF FUB_TcpClient.status = 0 THEN
//New Connection on Socket
enState := enSTEP_CONNECTED;
udClientID := udSocketID;
ELSIF FUB_TcpClient.status = tcpERR_INVALID THEN
udClosePortID := udSocketID;
enState := enSTEP_CLOSE;
ELSIF FUB_TcpClient.status = tcpERR_ALREADY_CONNECTED THEN
udClosePortID := udSocketID;
enState := enSTEP_CLOSE;
END_IF
//Close listener Socket //Or Reset All
FUB_TcpClose.enable := (enState = enSTEP_CLOSE);
FUB_TcpClose.ident := udClosePortID;
FUB_TcpClose.how := (tcpSHUT_RD OR tcpSHUT_WR);
FUB_TcpClose ();
IF (FUB_TcpClose.status = 0) OR
(FUB_TcpClose.status = tcpERR_INVALID_IDENT) THEN
enState := enSTEP_CLOSED;
END_IF
//Receive Data an Client Connections
FUB_TcpRecv.enable := (enState = enSTEP_CONNECTED);
FUB_TcpRecv.ident := udClientID;
FUB_TcpRecv.pData := ADR (strRecvBuffer);
FUB_TcpRecv.datamax := 120;
FUB_TcpRecv.flags := 0;
FUB_TcpRecv ();
IF (FUB_TcpRecv.recvlen > 0) AND bAllowData THEN
// strcpy (ADR (strRecvBuffer), ADR (''));
memcpy (ADR (usi), ADR (strRecvBuffer), 1);
IF (FUB_TcpRecv.recvlen >= 29) THEN
IF memcmp (ADR (strRecvBuffer), ADR (usSTX), 1) = 0 THEN
//New Telegram
memcpy (ADR (usTelegramNr), ADR (strRecvBuffer) + 1, 1);
memcpy (ADR (usCodes), ADR (strRecvBuffer) + 2, 1);
IF memcmp (ADR (strRecvBuffer) + 3, ADR (usCR), 1) = 0 THEN
//Code Start
//strcpy (ADR (strRecvBufferSave), ADR (strRecvBuffer));
udTagID := ASCtoUDINT (ADR (strRecvBuffer) + 12);
IF memcmp (ADR (strRecvBuffer) + 20, ADR ('RACK'), 4) = 0 THEN
udRackID := udTagID;
udProdID := 0;
uiProdNr := 0;
ELSIF memcmp (ADR (strRecvBuffer) + 20, ADR ('PROD'), 4) = 0 THEN
udRackID := 0;
memcpy (ADR (udProdID), ADR (strRecvBuffer) + 24, 4);
memcpy (ADR (uiProdNr), ADR (strRecvBuffer) + 28, 2);
END_IF
END_IF
END_IF
END_IF
END_IF
IF EDGEPOS (bGateEnable) THEN
memcpy (ADR (strSendBuffer), ADR (usSTX), 1);
memcpy (ADR (strSendBuffer) + 1, ADR (strStartRead), 13);
memcpy (ADR (strSendBuffer), ADR (usETX), 1);
FUB_TcpSend.datalen := 15;
bSend := TRUE;
ELSIF EDGENEG (bGateEnable) THEN
memcpy (ADR (strSendBuffer), ADR (usSTX), 1);
memcpy (ADR (strSendBuffer) + 1, ADR (strStopRead), 13);
memcpy (ADR (strSendBuffer), ADR (usETX), 1);
FUB_TcpSend.datalen := 16;
bSend := TRUE;
END_IF
//Send Data on Client Connections
IF (enState = enSTEP_CONNECTED) THEN
FUB_TcpSend.enable := bSend;
FUB_TcpSend.pData := ADR (strSendBuffer);
FUB_TcpSend.ident := udClientID;
FUB_TcpSend.flags := 0;
FUB_TcpSend ();
IF FUB_TcpSend.status = 0 THEN
bSend := FALSE;
END_IF
END_IF
END_PROGRAM
PROGRAM _EXIT
FUB_TcpClose.enable := TRUE;
FUB_TcpClose.ident := udClosePortID;
FUB_TcpClose.how := (tcpSHUT_RD OR tcpSHUT_WR);
WHILE TRUE DO
FUB_TcpClose ();
IF (FUB_TcpClose.status <> ERR_FUB_BUSY) THEN
EXIT;
END_IF
END_WHILE
END_PROGRAM

View File

@@ -0,0 +1,16 @@
PROGRAM _INIT
strcpy (ADR (strServerIP), ADR ('192.168.100.61'));
strcpy (ADR (strBindIP), ADR ('192.168.100.68'));
FUB_TcpOpen.pIfAddr := ADR (strBindIP);
FUB_TcpOpen.port := 0;
FUB_TcpOpen.options := tcpOPT_REUSEADDR;
FUB_TcpClient.portserv := 2112;
FUB_TcpClient.pServer := ADR (strServerIP);
enState := enSTEP_INIT;
bAllowData := TRUE;
END_PROGRAM

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
memcpy (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=3.0.90.23 SP05?>
<Program xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File Description="Implementation code">RFID_USB.st</File>
<File Description="Local variables" Private="true">RFID_USB.var</File>
<File Description="Local data types" Private="true">RFID_USB.typ</File>
<File Private="true">RFID_USB.fun</File>
<File Description="Convert ASCII Value to UDINT">ASCtoUDINT.st</File>
<File Description="Convert UDINT Value to ASCII">UDINTtoASC.st</File>
</Files>
</Program>

View File

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

View File

@@ -0,0 +1,331 @@
(********************************************************************
* COPYRIGHT --
********************************************************************
* Program: RFID_USB
* File: RFID_USB.st
* Author: michi
* Created: December 04, 2012
********************************************************************
* Implementation of program RFID_USB
********************************************************************)
PROGRAM _INIT
udAttachDetachCount := 0;
usNodeIx := 0;
enStep := enRFIDStep_INIT;
END_PROGRAM
PROGRAM _CYCLIC
CASE enStep OF
//Init
//---------------------------
enRFIDStep_INIT:
FUB_FrameRead.enable := 0;
FUB_FrameReleaseBuffer.enable := 0;
FUB_FrameWrite.enable := 0;
FUB_FrameXOpen.enable := 0;
FUB_UsbNodeGet.enable := 0;
FUB_UsbNodeListGet.enable := 0;
enStep := enRFIDStep_USB_GETNODELIST;
//Get USB Nodelsit
//---------------------------
enRFIDStep_USB_GETNODELIST:
FUB_UsbNodeListGet.enable := 1;
FUB_UsbNodeListGet.pBuffer := ADR (udNodeList);
FUB_UsbNodeListGet.bufferSize := SIZEOF (udNodeList);
FUB_UsbNodeListGet.filterInterfaceClass := 0;
FUB_UsbNodeListGet.filterInterfaceSubClass := 0;
IF (FUB_UsbNodeListGet.status = ERR_OK) AND (FUB_UsbNodeListGet.listNodes > 0) THEN
// USB Device Attach or detach
FUB_UsbNodeListGet.enable := 0;
usNodeIx := 0;
udAttachDetachCount := FUB_UsbNodeListGet.attachDetachCount;
enStep := enRFIDStep_USB_SEARCHDEVICE;
END_IF
//else if (UsbNodeListGetFub.status == asusbERR_BUFSIZE || UsbNodeListGetFub.status == asusbERR_NULLPOINTER)
//Serch Reader in USB Devices
//---------------------------
enRFIDStep_USB_SEARCHDEVICE:
FUB_UsbNodeGet.enable := 1;
FUB_UsbNodeGet.nodeId := udNodeList[usNodeIx];
FUB_UsbNodeGet.pBuffer := ADR (usbDevice);
FUB_UsbNodeGet.bufferSize := SIZEOF (usbDevice);
IF (FUB_UsbNodeGet.status = ERR_OK ) THEN
FUB_UsbNodeGet.enable := 0;
// USB FTDI Transponder
IF (usbDevice.vendorId = TRANSPONDER_FTDI_VENDOR_ID) AND
(usbDevice.productId = TRANSPONDER_FTDI_PRODUCT_ID) AND
(usbDevice.bcdDevice = TRANSPONDER_FTDI_BCD) THEN
// USB FTDI Transponder found
strcpy (ADR (strDevice), ADR (usbDevice.ifName));
udNodeId := udNodeList[usNodeIx];
enStep := enRFIDStep_USB_DVDEVOPEN;
ELSE
usNodeIx := usNodeIx + 1;
IF (usNodeIx >= FUB_UsbNodeListGet.allNodes) THEN
// USB Device not found
enStep := enRFIDStep_USB_GETNODELIST;
END_IF
END_IF
ELSIF (FUB_UsbNodeGet.status = asusbERR_USB_NOTFOUND) THEN
// USB Device NOT found
enStep := enRFIDStep_USB_GETNODELIST;
END_IF
//ELSE IF (FUB_UsbNodeGet.status == asusbERR_BUFSIZE || FUB_UsbNodeGet.status == asusbERR_NULLPOINTER)
//Open Reader Devicer
//---------------------------
enRFIDStep_USB_DVDEVOPEN:
// initialize open structure */
FUB_FrameXOpen.device := ADR (strDevice);
FUB_FrameXOpen.mode := 0;
FUB_FrameXOpen.config := 0;
FUB_FrameXOpen.enable := 1;
IF (FUB_FrameXOpen.status = frmERR_OK) THEN
FUB_FrameWrite.ident := FUB_FrameXOpen.ident;
FUB_FrameRead.ident := FUB_FrameXOpen.ident;
FUB_FrameReleaseBuffer.ident := FUB_FrameXOpen.ident;
FUB_FrameXOpen.enable := 0;
enStep := enRFIDStep_INIT_READER;
END_IF
//Get USB Nodelist
//---------------------------
enRFIDStep_INIT_READER:
// Register Write:
// 5V operation, RF output active, full power; ISO 15693, low bit rate, 6.62 kbps, one subcarrier, 1 out OF 4
//
// 10 00 21 01 00
// | | | | |
// | | | | Value Register 0x01
// | | | ISO Control Register (0x01)
// | | Value Register 0x00
// | Chip Status Control Register (0x00)
// Register Write Cmd
// Set Protocol, 1 out OF 4, full power, low bit rate */
strcpy (ADR (strWriteData), ADR ('1000210100'));
strcpy (ADR (strWriteDatalen), ADR ('0C'));
uiReadAnswer := 1;
enStep := enRFIDStep_WRITE;
//IDLE
//---------------------------
enRFIDStep_IDLE:
CASE enCmd OF
enRFIDCMD_NONE:
IF gTransponder.enTransponderCmd = enTransponderREAD_Data THEN
usBlockNr := 0;
gTransponder.enTransponderCmd := enTransponderREAD_Data_Wait;
enCmd := enRFIDCMD_READ_SBLOCK;
ELSIF gTransponder.enTransponderCmd = enTransponderREAD_Data2 THEN
usBlockNr := 1;
enCmd := enRFIDCMD_READ_SBLOCK;
gTransponder.enTransponderCmd := enTransponderREAD_Data2_Wait;
ELSIF gTransponder.enTransponderCmd = enTransponderWRITE_Data THEN
usBlockNr := 0;
udWriteData := gTransponder.udProdID;
gTransponder.enTransponderCmd := enTransponderWRITE_Data_Wait;
enCmd := enRFIDCMD_READ_SBLOCK;
ELSIF gTransponder.enTransponderCmd = enTransponderWRITE_Data2 THEN
usBlockNr := 1;
udWriteData := gTransponder.udProdNr;
gTransponder.enTransponderCmd := enTransponderWRITE_Data2_Wait;
enCmd := enRFIDCMD_READ_SBLOCK;
END_IF
enRFIDCMD_READ_INVENTORY:
// Inventory
// 14 04 01 00
// | | | |
// | | | Mask Length
// | | Anticollision Cmd
// | Flags (Inventory flag = 1, HDR = 0)
// Inventory request
// inventory 16 slot
strcpy (ADR (strWriteData), ADR ('14040100'));
strcpy (ADR (strWriteDatalen), ADR ('0B'));
uiReadAnswer := 16; // 16 slot answer
enStep := enRFIDStep_WRITE;
enRFIDCMD_READ_SYSINFO:
// Read System Info
// 18 00 2B
// | | |
// | | Get System Info Cmd
// | Flags (Option = 0, HDR = 0)
// Request Cmd
strcpy (ADR (strWriteData), ADR ('18002B'));
strcpy (ADR (strWriteDatalen), ADR ('0A'));
uiReadAnswer := 1;
enStep := enRFIDStep_WRITE;
enRFIDCMD_READ_SBLOCK:
// Read Single Block
// 18 02 20
// | | |
// | | Read Single Block Cmd
// | Flags (Option = 1, HDR = 0)
// Request Cmd
//
// Option = 1: Return block security status
strcpy (ADR (strWriteData), ADR ('184020')); // read block #1
uiLength := itoa (usBlockNr, ADR (strTemp));
IF (uiLength = 1) THEN
strcat (ADR (strWriteData), ADR ('0'));
END_IF
strcat (ADR (strWriteData), ADR (strTemp));
strcpy (ADR (strWriteDatalen), ADR ('0B'));
uiReadAnswer := 1;
enStep := enRFIDStep_WRITE;
enRFIDCMD_WRITE_SBLOCK:
// Write Single Block
// 18 00 21
// | | |
// | | Write Single Block Cmd
// | Flags (Option = 0, HDR = 0)
// Request Cmd
strcpy (ADR (strWriteData), ADR ('180021')); // write block #1 (Data = 0x12345678)
uiLength := itoa (usBlockNr, ADR (strTemp));
IF (uiLength = 1) THEN
strcat (ADR (strWriteData), ADR ('0'));
END_IF
UDINTtoASC (ADR (strWriteData) + 8, udWriteData);
strcpy (ADR (strWriteDatalen), ADR ('0F'));
uiReadAnswer := 1;
enStep := enRFIDStep_WRITE;
enRFIDCMD_WRITE_AFI:
// Write AFI
// 18 00 30
// | | |
// | | Get System Info Cmd
// | Flags (Option = 0, HDR = 0)
// Request Cmd
strcpy (ADR (strWriteData), ADR ('18002730')); // write AFI (0x30 = Identification)
strcpy (ADR (strWriteDatalen), ADR ('0B'));
uiReadAnswer := 1;
enStep := enRFIDStep_WRITE;
enRFIDCMD_WRITE_DFSID:
// Write DSFID
// 18 00 29
// | | |
// | | Write DSFID Cmd
// | Flags (Option = 0, HDR = 0)
// Request Cmd
strcpy (ADR (strWriteData), ADR ('18002918')); // write DSFID 0x18
strcpy (ADR (strWriteDatalen), ADR ('0B'));
uiReadAnswer := 1;
enStep := enRFIDStep_WRITE;
END_CASE
//WRITE
//---------------------------
enRFIDStep_WRITE:
// initialize write structure */
//Frame Start
strcpy (ADR (strWriteTelegram), ADR ('01'));
//Length
strcat (ADR (strWriteTelegram), ADR (strWriteDatalen));
//Const 00 + Start of Payload
strcat (ADR (strWriteTelegram), ADR ('000304'));
strcat (ADR (strWriteTelegram), ADR (strWriteData));
//Frame End
strcat (ADR (strWriteTelegram), ADR ('0000'));
FUB_FrameWrite.buffer := ADR (strWriteTelegram);
FUB_FrameWrite.buflng := strlen (ADR (strWriteTelegram));
FUB_FrameWrite.enable := 1;
IF (FUB_FrameWrite.status = frmERR_OK) THEN
enStep := enRFIDStep_READ;
FUB_FrameWrite.enable := 0;
uiReadCount := 0;
END_IF
//READ
//---------------------------
enRFIDStep_READ:
// initialize read structure
FUB_FrameRead.enable := 1;
pReadBuffer := FUB_FrameRead.buffer; // get adress OF read buffer */
uiReadBufferLength := FUB_FrameRead.buflng; // get length OF read buffer */
IF (FUB_FrameRead.status = frmERR_OK) THEN
udTemp := 0;
memset (ADR (strReadData), 0, SIZEOF (strReadData));
memcpy (ADR (strReadData), pReadBuffer, uiReadBufferLength); // copy read data into array */
IF (uiReadBufferLength > 7) THEN
strcpy (ADR (strReadTag), ADR (strReadData)); // copy read data into Tag array */
END_IF
IF (uiReadBufferLength = 16) THEN
udTemp := ASCtoUDINT (ADR (strReadData) + 5, FALSE);
END_IF
IF (uiReadBufferLength =23) THEN
//TagID Slot
udTemp := ASCtoUDINT (ADR (strReadData) + 2, TRUE);
udTemp2 := ASCtoUDINT (ADR (strReadData) + 2, FALSE);
END_IF
// initialize release buffer structure */
FUB_FrameReleaseBuffer.enable := 1;
FUB_FrameReleaseBuffer.buffer := pReadBuffer;
FUB_FrameReleaseBuffer.buflng := uiReadBufferLength;
FUB_FrameReleaseBuffer ();
uiReadCount := uiReadCount + 1;
IF gTransponder.enTransponderCmd = enTransponderREAD_Data_Wait THEN
gTransponder.udProdIDRdBack := udTemp;
gTransponder.enTransponderCmd := enTransponderREAD_Data2;
ELSIF gTransponder.enTransponderCmd = enTransponderREAD_Data2_Wait THEN
gTransponder.udProdNrRdBack := udTemp;
gTransponder.enTransponderCmd := enTransponderIDLE;
ELSIF gTransponder.enTransponderCmd = enTransponderWRITE_Data_Wait THEN
gTransponder.enTransponderCmd := enTransponderWRITE_Data2;
ELSIF gTransponder.enTransponderCmd = enTransponderWRITE_Data2_Wait THEN
gTransponder.enTransponderCmd := enTransponderREAD_Data;
ELSIF udTemp > 0 THEN
gTransponder.udTagID := udTemp;
END_IF
IF (uiReadCount = uiReadAnswer) THEN
FUB_FrameRead.enable := 0;
enStep := enRFIDStep_IDLE;
enCmd := enRFIDCMD_NONE;
END_IF
END_IF
END_CASE
TON_Read.IN := (enStep = enRFIDStep_IDLE) AND (enCmd = enRFIDCMD_NONE) AND (gTransponder.enTransponderCmd = enTransponderIDLE);
TON_Read.PT := t#1s;
TON_Read ();
IF TON_Read.Q THEN
enCmd := enRFIDCMD_READ_INVENTORY;
END_IF
//Call FUBs
FUB_FrameRead ();
FUB_FrameWrite ();
FUB_FrameXOpen ();
FUB_UsbNodeGet ();
FUB_UsbNodeListGet ();
END_PROGRAM
PROGRAM _EXIT
(* TODO : Add your code here *)
END_PROGRAM

View File

@@ -0,0 +1,24 @@
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_DVDEVOPEN, (*Open Reader*)
enRFIDStep_INIT_READER, (*Initialize Reader*)
enRFIDStep_IDLE, (*Wait for commands*)
enRFIDStep_READ, (*READ from Reader*)
enRFIDStep_WRITE (*WRITE to Reader*)
);
typ_enCmdRFID :
(
enRFIDCMD_NONE,
enRFIDCMD_READ_INVENTORY,
enRFIDCMD_READ_SYSINFO,
enRFIDCMD_READ_SBLOCK,
enRFIDCMD_WRITE_SBLOCK,
enRFIDCMD_WRITE_AFI,
enRFIDCMD_WRITE_DFSID
);
END_TYPE

View File

@@ -0,0 +1,48 @@
(********************************************************************
* COPYRIGHT --
********************************************************************
* Program: RFID_USB
* File: RFID_USB.var
* Author: michi
* Created: December 04, 2012
********************************************************************
* Local variables of program RFID_USB
********************************************************************)
VAR
sizeUsbNode : USINT;
usNodeIx : USINT;
usBlockNr : USINT;
uiReadAnswer : UINT;
uiReadBufferLength : UINT;
uiReadCount : UINT;
uiLength : UINT;
udAttachDetachCount : UDINT;
udNodeId : UDINT;
udNodeList : ARRAY[0..31] OF UDINT;
pReadBuffer : UDINT;
udTemp : UDINT;
udTemp2 : UDINT;
udWriteData : UDINT;
strReadData : STRING[80];
strReadTag : STRING[80];
strDevice : STRING[20];
strWriteData : STRING[80];
strWriteDatalen : STRING[2];
strWriteTelegram : STRING[80];
strTemp : STRING[2];
enStep : typ_enStepRFID;
enCmd : typ_enCmdRFID;
usbDevice : usbNode_typ;
FUB_FrameRead : FRM_read;
FUB_FrameReleaseBuffer : FRM_rbuf;
FUB_FrameWrite : FRM_write;
FUB_FrameXOpen : FRM_xopen;
FUB_UsbNodeGet : UsbNodeGet;
FUB_UsbNodeListGet : UsbNodeListGet;
TON_Read : TON;
END_VAR
VAR CONSTANT
TRANSPONDER_FTDI_VENDOR_ID : UINT := 16#0403;
TRANSPONDER_FTDI_PRODUCT_ID : UINT := 16#6001;
TRANSPONDER_FTDI_BCD : UINT := 16#0600;
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);
memcpy (ADR (usChar), udNextAdr + usi, 1);
CASE usChar OF
0:
memcpy (udNextAdr + usi, ADR ('0'), 1);
1:
memcpy (udNextAdr + usi, ADR ('1'), 1);
2:
memcpy (udNextAdr + usi, ADR ('2'), 1);
3:
memcpy (udNextAdr + usi, ADR ('3'), 1);
4:
memcpy (udNextAdr + usi, ADR ('4'), 1);
5:
memcpy (udNextAdr + usi, ADR ('5'), 1);
6:
memcpy (udNextAdr + usi, ADR ('6'), 1);
7:
memcpy (udNextAdr + usi, ADR ('7'), 1);
8:
memcpy (udNextAdr + usi, ADR ('8'), 1);
9:
memcpy (udNextAdr + usi, ADR ('9'), 1);
10:
memcpy (udNextAdr + usi, ADR ('A'), 1);
11:
memcpy (udNextAdr + usi, ADR ('B'), 1);
12:
memcpy (udNextAdr + usi, ADR ('C'), 1);
13:
memcpy (udNextAdr + usi, ADR ('D'), 1);
14:
memcpy (udNextAdr + usi, ADR ('E'), 1);
15:
memcpy (udNextAdr + usi, ADR ('F'), 1);
END_CASE
END_FOR
END_FUNCTION

View File

@@ -0,0 +1,43 @@
FUNCTION ASCtoUDINT
ASCtoUDINT := 0;
udNextAdr := udInNextAdr;
FOR usi:=0 TO 7 BY 1 DO
memcpy (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=3.0.90.23 SP05?>
<Program xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File Private="true">S7ABB.var</File>
<File Description="Local data types" Private="true">S7ABB.typ</File>
<File>S7ABBCyclic.st</File>
<File>S7ABBInit.st</File>
<File Private="true">S7ABB.fun</File>
<File Description="Convert ASCII Value to UDINT">ASCtoUDINT.st</File>
</Files>
</Program>

View File

@@ -0,0 +1,11 @@
FUNCTION ASCtoUDINT : UDINT (*Convert ASCII Value to UDINT*)
VAR_INPUT
udInNextAdr : UDINT; (*Next Pos in ByteStream (No CHECK)*)
END_VAR
VAR
udNextAdr : UDINT;
usi : USINT;
usChar : USINT;
END_VAR
END_FUNCTION

View File

@@ -0,0 +1,12 @@
TYPE
Steps_enum :
( (*Steps of RFID Statemachine*)
enSTEP_INIT,
enSTEP_OPEN,
enSTEP_OPENED,
enSTEP_CONNECTED,
enSTEP_CLOSE,
enSTEP_CLOSED
);
END_TYPE

View File

@@ -0,0 +1,32 @@
(*FUB Instances*)
VAR
FUB_TcpOpen : TcpOpen;
FUB_TcpServ : TcpServer;
FUB_TcpClose : TcpClose;
FUB_TcpRecv : TcpRecv;
FUB_TcpSend : TcpSend;
TON_Lifebeat : TON;
END_VAR
(*//Local VArs*)
VAR
bAllowData : BOOL;
bSend : BOOL;
bGateEnable : BOOL;
usi : USINT := 0;
usTemp : USINT := 0;
usCodes : USINT := 0;
usLifecount : USINT;
usTelegramNr : USINT;
uiProdNr : UINT;
udClosePortID : UDINT;
udClientID : UDINT;
udSocketID : UDINT;
strServerIP : STRING[20];
strClientIP : STRING[20];
strBindIP : STRING[20];
strRecvBufferChar : STRING[2];
strCharCmp : STRING[2];
strRecvBuffer : STRING[120];
strRecvBufferSave : STRING[120];
enState : Steps_enum;
END_VAR

View File

@@ -0,0 +1,121 @@
PROGRAM _CYCLIC
IF enState = enSTEP_INIT THEN
enState := enSTEP_OPEN;
END_IF
//Open listener Socket
FUB_TcpOpen.enable := (enState = enSTEP_OPEN);
FUB_TcpOpen ();
IF FUB_TcpOpen.status = 0 THEN
udSocketID := FUB_TcpOpen.ident;
FUB_TcpServ.ident := udSocketID;
enState := enSTEP_OPENED;
ELSIF FUB_TcpOpen.status = tcpERR_ALREADY_EXIST THEN
udClosePortID := FUB_TcpOpen.ident;
enState := enSTEP_CLOSE;
ELSIF FUB_TcpOpen.status = tcpERR_NOMORE_IDENTS THEN
udClosePortID := 1; //Close Port 1
enState := enSTEP_CLOSE;
END_IF
//connect to server
FUB_TcpServ.enable:= (enState > enSTEP_OPEN);
FUB_TcpServ.backlog := 1;
FUB_TcpServ ();
IF FUB_TcpServ.status = 0 THEN
IF (enState = enSTEP_CONNECTED) THEN
udClosePortID := FUB_TcpOpen.ident;
enState := enSTEP_CLOSE;
udClientID := 0;
END_IF
//New Connection on Socket
enState := enSTEP_CONNECTED;
udClientID := FUB_TcpServ.identclnt;
END_IF
//Close listener Socket //Or Reset All
FUB_TcpClose.enable := (enState = enSTEP_CLOSE);
FUB_TcpClose.ident := udClosePortID;
FUB_TcpClose.how := (tcpSHUT_RD OR tcpSHUT_WR);
FUB_TcpClose ();
IF (FUB_TcpClose.status = 0) OR
(FUB_TcpClose.status = tcpERR_INVALID_IDENT) THEN
IF (udClientID = 0) THEN
enState := enSTEP_OPENED;
ELSE
enState := enSTEP_CONNECTED;
END_IF
END_IF
//Receive Data an Client Connections
FUB_TcpRecv.enable := (enState = enSTEP_CONNECTED);
FUB_TcpRecv.ident := udClientID;
FUB_TcpRecv.pData := ADR (strRecvBuffer);
FUB_TcpRecv.datamax := 120;
FUB_TcpRecv.flags := 0;
FUB_TcpRecv ();
IF (FUB_TcpRecv.recvlen = 2) AND (FUB_TcpRecv.status = 0) THEN
memcpy (ADR (uiProdNr), ADR (strRecvBuffer), 2);
gABBLog.udProdNr := UINT_TO_UDINT (N_TO_HUINT (uiProdNr));
gABBLog.udProdID := gudUnixTimeUTC;
gABBLog.bLog := TRUE;
END_IF
TON_Lifebeat.IN := NOT bSend AND (enState = enSTEP_CONNECTED);
TON_Lifebeat.PT := t#5s;
TON_Lifebeat ();
IF TON_Lifebeat.Q THEN
bSend := TRUE;
END_IF
//Send Data on Client Connections
IF (enState = enSTEP_CONNECTED) THEN
FUB_TcpSend.enable := bSend;
FUB_TcpSend.pData := ADR (usLifecount);
FUB_TcpSend.datalen := 1;
FUB_TcpSend.ident := udClientID;
FUB_TcpSend.flags := 0;
FUB_TcpSend ();
IF FUB_TcpSend.status = 0 THEN
usLifecount := usLifecount + 1;
bSend := FALSE;
END_IF
END_IF
END_PROGRAM
PROGRAM _EXIT
FUB_TcpClose.enable := TRUE;
FUB_TcpClose.ident := udSocketID;
FUB_TcpClose.how := (tcpSHUT_RD OR tcpSHUT_WR);
WHILE TRUE DO
FUB_TcpClose ();
IF (FUB_TcpClose.status <> ERR_FUB_BUSY) THEN
EXIT;
END_IF
END_WHILE
FUB_TcpClose.enable := TRUE;
FUB_TcpClose.ident := udClientID;
FUB_TcpClose.how := (tcpSHUT_RD OR tcpSHUT_WR);
WHILE TRUE DO
FUB_TcpClose ();
IF (FUB_TcpClose.status <> ERR_FUB_BUSY) THEN
EXIT;
END_IF
END_WHILE
END_PROGRAM

View File

@@ -0,0 +1,14 @@
PROGRAM _INIT
strcpy (ADR (strBindIP), ADR ('192.168.100.54'));
FUB_TcpOpen.pIfAddr := ADR (strBindIP);
FUB_TcpOpen.port := 8000;
FUB_TcpOpen.options := tcpOPT_REUSEADDR;
FUB_TcpServ.pIpAddr := ADR (strClientIP);
enState := enSTEP_INIT;
bAllowData := TRUE;
END_PROGRAM

View File

@@ -0,0 +1,6 @@
(* Append String to Bytestream (with 2Byte Len and 0 Termination) *)
FUNCTION AppendDINT
ldData := H_TO_NDINT (dInDINT);
ludNextAdr := memcpy (udInNextAdr, ADR (ludNull), 4);
AppendDINT := memcpy (ludNextAdr, ADR (ldData), 4);
END_FUNCTION

View File

@@ -0,0 +1,6 @@
(* Append Int to Bytestream *)
FUNCTION AppendINT
liData := H_TO_NINT (iInINT);
ludNextAdr := memcpy (udInNextAdr, ADR (ludNull), 6);
AppendINT := memcpy (ludNextAdr, ADR (liData), 2);
END_FUNCTION

View File

@@ -0,0 +1,5 @@
(* Append String to Bytestream (with 2Byte Len and 0 Termination) *)
FUNCTION AppendLREAL
ldrData := drInLREAL;
AppendLREAL := memcpy (udInNextAdr, ADR (ldrData), 8);
END_FUNCTION

View File

@@ -0,0 +1,9 @@
(* Append String to Bytestream (with 2Byte Len and 0 Termination) *)
FUNCTION AppendStr
//Append NULL Byte also
luiStrlen := strlen (ADR (pstrInString)) + 1;
luiPartlen := H_TO_NUINT (luiStrlen + 4);
//Lenghtindicator 2 Byte Partidentifier, 2 Byte Len, Strlen)
ludNextAdr := memcpy (udInNextAdr, ADR (luiPartlen), 2);
AppendStr := memcpy (ludNextAdr, ADR (pstrInString), luiStrlen);
END_FUNCTION

View File

@@ -0,0 +1,6 @@
(* Append Int to Bytestream *)
FUNCTION AppendUINT
luiData := H_TO_NUINT (uiInUINT);
ludNextAdr := memcpy (udInNextAdr, ADR (ludNull), 6);
AppendUINT := memcpy (ludNextAdr, ADR (luiData), 2);
END_FUNCTION

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.90.23 SP05?>
<Program xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File Description="Implementation code">collectd.st</File>
<File Description="Local data types" Private="true">collectd.typ</File>
<File Description="Local variables" Private="true">collectd.var</File>
<File Private="true">collectd.fun</File>
<File Description="Append String to Bytestream (with 2Byte Len and 0 Termination)">AppendStr.st</File>
<File Description="Append Int to Bytestream (with 2Byte Len)">AppendINT.st</File>
<File Description="Append Unsigned Int to Bytestream (with 2Byte Len)">AppendUINT.st</File>
<File Description="Append Int to Bytestream (with 2Byte Len and 0 Termination)">AppendDINT.st</File>
<File Description="Append Int to Bytestream (with 2Byte Len and 0 Termination)">AppendLREAL.st</File>
</Files>
</Program>

View File

@@ -0,0 +1,59 @@
(*Decode String for Collectd*)
FUNCTION AppendStr : UDINT (*Append String to Bytestream (with 2Byte Len and 0 Termination)*)
VAR_INPUT
udInNextAdr : UDINT; (*Next Pos in ByteStream (No CHECK)*)
pstrInString : REFERENCE TO STRING[80]; (*Address of String to Append*)
END_VAR
VAR
luiStrlen : UINT;
luiPartlen : UINT;
ludNextAdr : UDINT;
END_VAR
END_FUNCTION
FUNCTION AppendINT : UDINT (*Append Integer to Bytestream (with 2Byte Len)*)
VAR_INPUT
udInNextAdr : UDINT; (*Next Pos in ByteStream (No CHECK)*)
iInINT : INT; (*Address of Int to Append*)
END_VAR
VAR
liData : INT; (*Data*)
ludNextAdr : UDINT;
ludNull : UDINT;
END_VAR
END_FUNCTION
FUNCTION AppendUINT : UDINT (*Append Integer to Bytestream (with 2Byte Len)*)
VAR_INPUT
udInNextAdr : UDINT; (*Next Pos in ByteStream (No CHECK)*)
uiInUINT : UINT; (*Address of Int to Append*)
END_VAR
VAR
luiData : UINT; (*Data*)
ludNextAdr : UDINT;
ludNull : UDINT;
END_VAR
END_FUNCTION
FUNCTION AppendDINT : UDINT (*Append Integer to Bytestream (with 2Byte Len)*)
VAR_INPUT
udInNextAdr : UDINT; (*Next Pos in ByteStream (No CHECK)*)
dInDINT : DINT; (*Address of Int to Append*)
END_VAR
VAR
ldData : DINT; (*Data*)
ludNextAdr : UDINT;
ludNull : UDINT;
END_VAR
END_FUNCTION
FUNCTION AppendLREAL : UDINT (*Append Integer to Bytestream (with 2Byte Len)*)
VAR_INPUT
udInNextAdr : UDINT; (*Next Pos in ByteStream (No CHECK)*)
drInLREAL : LREAL; (*Address of Int to Append*)
END_VAR
VAR
ldrData : LREAL;
END_VAR
END_FUNCTION

File diff suppressed because it is too large Load Diff

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