Working Version without Rob and Safety

This commit is contained in:
Michael Rest
2014-12-01 08:56:41 +01:00
parent 2355e2e0aa
commit b4e619230b
669 changed files with 79754 additions and 0 deletions

6
LastUser.set Normal file
View File

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

View File

@@ -0,0 +1,91 @@
(*//-----------------------------------------------------------------------------------------------------*)
(*//MC FunctionBlocks*)
VAR
Axis_MC_BR_AxisErrorCollector : MC_BR_AxisErrorCollector;
Axis_MC_ACP_ENCOD_REF : MC_ACP_ENCOD_REF := (0);
Axis_MC_ACP_ENCOD_PARAM_REF : MC_ACP_ENCOD_PARAM_REF := (0);
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); (*Stop electronic Gear coupling*)
Axis_MC_BR_BrakeControl : MC_BR_BrakeControl := (0);
Axis_MC_BR_GetErrorText : MC_BR_GetErrorText := (0);
Axis_MC_BR_HomeAcpEncoder : MC_BR_HomeAcpEncoder := (0);
Axis_MC_BR_InitAxisPar : MC_BR_InitAxisPar := (0);
Axis_MC_BR_JogVelocity : MC_BR_JogVelocity := (0);
Axis_MC_BR_JogLimitPosition : MC_BR_JogLimitPosition := (0);
Axis_MC_BR_JogTargetPosition : MC_BR_JogTargetPosition := (0);
Axis_MC_BR_ReadDriveStatus : MC_BR_ReadDriveStatus := (0);
Axis_MC_BR_Simulation : MC_BR_Simulation := (0);
Axis_MC_BR_SetHardwareInputs : MC_BR_SetHardwareInputs := (0); (*Set HW-Inputs (Limits for Axises)*)
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_Halt : MC_Halt := (0); (*Halt*)
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_BR_ReadAxisError : MC_BR_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*)
bDisableCommands : BOOL := FALSE;
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;
TON_HomingOk : TON;
END_VAR

View File

@@ -0,0 +1,716 @@
PROGRAM _CYCLIC
IF (uiRestartDelay > 0) THEN
uiRestartDelay := uiRestartDelay - 1;
END_IF
//Devel Axis Initialisation
Axis_MC_BR_InitAxisPar.Axis := udAxisObj;
Axis_MC_BR_InitAxisPar.Execute := bAxisInit;
Axis_MC_BR_InitAxisPar ();
IF Axis_MC_BR_InitAxisPar.Done THEN
bAxisInit := FALSE;
END_IF
//Devel Absolute Encoder Homing
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 ();
IF Axis_MC_BR_HomeAcpEncoder.Done THEN
bHomeAbs := FALSE;
END_IF
//Set Hardware inputs
//Direct map IO
Axis_MC_BR_SetHardwareInputs.Enable := lAxis.Para.bSetHWInputs;
Axis_MC_BR_SetHardwareInputs ();
//get axis information
Axis_MC_BR_AxisErrorCollector ();
(***********************CHECK FOR ERRORS**************************)
IF (lAxis.enStep < enAxSTATE_STOP_AFTER_ERROR) THEN
IF (Axis_MC_BR_AxisErrorCollector.Errorstop) THEN
lAxis.enStep := enAxSTATE_ERROR;
ELSIF (Axis_MC_BR_AxisErrorCollector.FunctionBlockError) OR
(Axis_MC_BR_AxisErrorCollector.AxisError) OR
(Axis_MC_BR_AxisErrorCollector.AxisWarning) THEN
lAxis.enStep := enAxSTATE_STOP_AFTER_ERROR;
END_IF
END_IF
Axis_MC_BR_ReadAxisError ();
Axis_MC_ReadStatus ();
IF Axis_MC_ReadStatus.Valid 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;
END_IF
Axis_MC_BR_ReadDriveStatus ();
TON_HomingOk.IN := lAxis.DriveStatus.bHomingOk AND NOT lAxis.Status.bHoming;
IF EDGEPOS (lAxis.bHome) THEN
TON_HomingOk.IN := FALSE;
END_IF
TON_HomingOk.PT := t#50ms;
TON_HomingOk ();
lAxis.Status.bHomingOkDelayed := TON_HomingOk.Q;
//Position
Axis_MC_ReadActualPosition ();
IF Axis_MC_ReadActualPosition.Valid THEN
lAxis.rActPosition := Axis_MC_ReadActualPosition.Position;
lAxisActPos := lAxis.rActPosition;
END_IF
//Velocity
Axis_MC_ReadActualVelocity ();
IF Axis_MC_ReadActualVelocity.Valid THEN
lAxis.rActVelocity := Axis_MC_ReadActualVelocity.Velocity;
END_IF
//Torque
IF lbSimulation OR lAxis.DriveStatus.bSimulation OR lAxis.bVAxis THEN
Axis_MC_ReadActualTorque.Enable := FALSE; //Disable for Simulation (not Possible)
END_IF
Axis_MC_ReadActualTorque ();
IF Axis_MC_ReadActualTorque.Valid THEN
lAxis.rActTorque := Axis_MC_ReadActualTorque.Torque;
END_IF
//Power OFF
IF NOT lAxis.bPower AND lAxis.DriveStatus.bControllerStatus THEN
lAxis.enStep := enAxSTATE_POWER_OFF;
END_IF
CASE lAxis.enStep OF
//==============================================
//WAIT
enAxSTATE_WAIT:
//IF lAxis.Status.bDisabled AND lbSimulation AND NOT lAxis.DriveStatus.bSimulation THEN
// lAxis.enStep := enAxSTATE_SIMULATION_ON;
//ELSIF lAxis.Status.bDisabled AND NOT lbSimulation AND lAxis.DriveStatus.bSimulation THEN
// lAxis.enStep := enAxSTATE_SIMULATION_OFF;
IF lAxis.bPower THEN
lAxis.enStep := enAxSTATE_POWER_ON;
ELSE
bDisableCommands := TRUE;
END_IF
//==============================================
//Simulation On
enAxSTATE_SIMULATION_ON:
Axis_MC_BR_Simulation.Execute := 1;
Axis_MC_BR_Simulation.SimulationCommand := mcMOTOR;
IF Axis_MC_BR_Simulation.Done THEN
Axis_MC_BR_Simulation.Execute := 0;
lAxis.enStep := enAxSTATE_WAIT;
ELSIF (Axis_MC_BR_Simulation.ErrorID <> 0) THEN
lAxis.enStep := enAxSTATE_ERROR;
END_IF
//==============================================
//Simulation Off
enAxSTATE_SIMULATION_OFF;
Axis_MC_BR_Simulation.Execute := 1;
Axis_MC_BR_Simulation.SimulationCommand := mcSIMULATION_OFF;
IF Axis_MC_BR_Simulation.Done THEN
Axis_MC_BR_Simulation.Execute := 0;
lAxis.enStep := enAxSTATE_WAIT;
ELSIF (Axis_MC_BR_Simulation.ErrorID <> 0) THEN
lAxis.enStep := enAxSTATE_ERROR;
END_IF
//==============================================
//Power On
enAxSTATE_POWER_ON:
Axis_MC_Power.Enable := TRUE;
IF Axis_MC_Power.Status THEN
lAxis.enStep := enAxSTATE_READY;
ELSIF (Axis_MC_Power.ErrorID <> 0) THEN
lAxis.enStep := enAxSTATE_ERROR;
END_IF
//==============================================
//Power Off
enAxSTATE_POWER_OFF:
Axis_MC_Power.Enable := FALSE;
IF Axis_MC_Power.Status THEN
lAxis.enStep := enAxSTATE_WAIT;
ELSIF (Axis_MC_Power.ErrorID <> 0) THEN
lAxis.enStep := enAxSTATE_ERROR;
END_IF
//==============================================
//Ready, wait for commands
enAxSTATE_READY:
IF lAxis.bStop THEN
lAxis.bStop := 0;
lAxis.enStep := enAxSTATE_STOP;
ELSIF lAxis.bHome THEN
lAxis.enStep := enAxSTATE_HOME;
ELSIF lAxis.Move.bBraketest THEN
lAxis.Move.bBraketest := 0;
lAxis.enStep := enAxSTATE_BRAKE_TEST;
ELSIF lAxis.Move.bJogPos OR lAxis.Move.bJogNeg THEN
//Movement will stopped when command is resetted
lAxis.enStep := enAxSTATE_JOG;
ELSIF lAxis.Move.bAbsolute AND NOT lAxis.Para.bTriggStop THEN
//Movement will stopped when command is resetted
lAxis.enStep := enAxSTATE_MOVE_ABSOLUTE;
ELSIF lAxis.Move.bAbsolute AND lAxis.Para.bTriggStop THEN
//Movement will stopped when command is resetted
lAxis.enStep := enAxSTATE_MOVE_ABSOLUTE_TRIGSTP;
ELSIF lAxis.Move.bAdditive AND NOT lAxis.Para.bTriggStop THEN
//Movement will stopped when command is resetted
lAxis.enStep := enAxSTATE_MOVE_ADDITIVE;
ELSIF lAxis.Move.bAdditive AND lAxis.Para.bTriggStop THEN
//Movement will stopped when command is resetted
lAxis.enStep := enAxSTATE_MOVE_ADDITIVE_TRIGSTP;
ELSIF lAxis.Move.bVelocity THEN
lAxis.Move.bVelocity := 0;
lAxis.Status.bTorqueLimitReached := 0;
lAxis.enStep := enAxSTATE_MOVE_VELOCITY;
ELSIF lAxis.Move.bVelocityControl THEN
lAxis.Move.bVelocityControl := 0;
lAxis.Status.bTorqueLimitReached := 0;
lAxis.enStep := enAxSTATE_MOVE_VELOCITY_CTRL;
ELSIF lAxis.Move.bTorqueControl THEN
lAxis.Move.bTorqueControl := 0;
lAxis.Status.bTorqueLimitReached := 0;
lAxis.enStep := enAxSTATE_MOVE_TORQUE_CTRL;
ELSIF lAxis.Move.bStartGearSlave THEN
lAxis.Move.bStartGearSlave := 0;
lAxis.enStep := enAxSTATE_MOVE_GEAR_START;
ELSIF lAxis.Move.bStartGearPosSlave THEN
lAxis.Move.bStartGearSlave := 0;
lAxis.enStep := enAxSTATE_MOVE_GEARPOS_START;
ELSIF lAxis.Move.bStopGearSlave THEN
lAxis.Move.bStopGearSlave := 0;
lAxis.enStep := enAxSTATE_MOVE_GEAR_STOP;
END_IF
//==============================================
//Drive Home
enAxSTATE_HOME:
Axis_MC_Home.Position := lAxis.Para.rHomePosition;
Axis_MC_Home.HomingMode := lAxis.Para.usHomeingMode;
Axis_MC_Home.Execute := 1;
IF lAxis.bStop THEN
Axis_MC_Home.Execute := 0;
lAxis.enStep := enAxSTATE_STOP;
lAxis.bHome := 0;
ELSIF Axis_MC_Home.Done AND (lAxis.Para.udAxisModPosFactor > 0) AND (lAxis.Para.udAxisModPosPeriod > 0) THEN
Axis_MC_Home.Execute := 0;
lAxis.enStep := enAxSTATE_INIT_MOD_POS;
lAxis.bHome := 0;
ELSIF Axis_MC_Home.Done THEN
Axis_MC_Home.Execute := 0;
lAxis.enStep := enAxSTATE_READY;
lAxis.bHome := 0;
END_IF
//==============================================
//Test Brake
enAxSTATE_BRAKE_TEST:
Axis_MC_BR_BrakeControl.Command := mcBRAKE_TEST_START;
Axis_MC_BR_BrakeControl.Configuration.BrakeTest.PositionLimit := lAxis.Para.rBraketestPosLimit;
Axis_MC_BR_BrakeControl.Configuration.BrakeTest.TestTorque := lAxis.Para.rBraketestTorque;
Axis_MC_BR_BrakeControl.Execute := 1;
IF lAxis.bStop THEN
Axis_MC_BR_BrakeControl.Execute := 0;
lAxis.enStep := enAxSTATE_STOP;
ELSIF Axis_MC_Home.Done THEN
Axis_MC_BR_BrakeControl.Execute := 0;
lAxis.enStep := enAxSTATE_READY;
END_IF
//==============================================
//Initialize Modulo Position
enAxSTATE_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;
IF Axis_MC_BR_InitModPos.Done THEN
Axis_MC_BR_InitModPos.Execute := 0;
lAxis.enStep := enAxSTATE_READY;
END_IF
//==============================================
//Stop Movement (as long as Stop Command is set)
enAxSTATE_STOP:
Axis_MC_Stop.Deceleration := lAxis.Para.rDeceleration;
Axis_MC_Stop.Execute := 1;
IF Axis_MC_Stop.Done AND NOT lAxis.bStop THEN
Axis_MC_Stop.Execute := 0;
lAxis.enStep := enAxSTATE_READY;
END_IF
IF (Axis_MC_Stop.Error OR Axis_MC_Stop.CommandAborted) AND NOT lAxis.bStop THEN
Axis_MC_Stop.Execute := 0;
lAxis.enStep := enAxSTATE_READY;
END_IF
//==============================================
//Jog Positive
enAxSTATE_JOG:
Axis_MC_BR_JogVelocity.Acceleration := lAxis.Para.rAcceleration;
Axis_MC_BR_JogVelocity.Deceleration := lAxis.Para.rDeceleration;
Axis_MC_BR_JogVelocity.Velocity := lAxis.Para.rJogVelocity;
Axis_MC_BR_JogVelocity.JogPositive := lAxis.Move.bJogPos;
Axis_MC_BR_JogVelocity.JogNegative := lAxis.Move.bJogNeg;
Axis_MC_BR_JogVelocity.Enable := (lAxis.Para.JogMode = enAxJOG);
Axis_MC_BR_JogLimitPosition.Acceleration := lAxis.Para.rAcceleration;
Axis_MC_BR_JogLimitPosition.Deceleration := lAxis.Para.rDeceleration;
Axis_MC_BR_JogLimitPosition.Velocity := lAxis.Para.rJogVelocity;
Axis_MC_BR_JogLimitPosition.JogPositive := lAxis.Move.bJogPos;
Axis_MC_BR_JogLimitPosition.JogNegative := lAxis.Move.bJogNeg;
Axis_MC_BR_JogLimitPosition.FirstPosition := lAxis.Para.rJogLimitLow;
Axis_MC_BR_JogLimitPosition.LastPosition := lAxis.Para.rJogLimitHigh;
Axis_MC_BR_JogLimitPosition.Enable := (lAxis.Para.JogMode = enAxJOG_Limits);
Axis_MC_BR_JogTargetPosition.Acceleration := lAxis.Para.rAcceleration;
Axis_MC_BR_JogTargetPosition.Deceleration := lAxis.Para.rDeceleration;
Axis_MC_BR_JogTargetPosition.Velocity := lAxis.Para.rJogVelocity;
Axis_MC_BR_JogTargetPosition.TargetPosition:= lAxis.Para.rPosition;
Axis_MC_BR_JogTargetPosition.JogToTarget := lAxis.Move.bJogPos OR lAxis.Move.bJogNeg;
Axis_MC_BR_JogTargetPosition.JogPositive := FALSE;
Axis_MC_BR_JogTargetPosition.JogNegative := FALSE;
Axis_MC_BR_JogTargetPosition.Enable := (lAxis.Para.JogMode = enAxJOG_Target);
IF (NOT lAxis.Move.bJogPos AND NOT lAxis.Move.bJogNeg) OR lAxis.bStop THEN
Axis_MC_BR_JogVelocity.Enable := 0;
Axis_MC_BR_JogLimitPosition.Enable := 0;
Axis_MC_BR_JogTargetPosition.Enable := 0;
lAxis.enStep := enAxSTATE_STOP;
END_IF
//==============================================
//Move Absolute
enAxSTATE_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; //Interesting on Periodic Axises
Axis_MC_MoveAbsolute.Execute := 1;
IF lAxis.bStop OR NOT lAxis.Move.bAbsolute THEN
;lAxis.bStop := 0;
Axis_MC_MoveAbsolute.Execute := 0;
lAxis.Move.bAbsolute := 0;
lAxis.enStep := enAxSTATE_STOP;
ELSIF Axis_MC_MoveAbsolute.Done THEN
Axis_MC_MoveAbsolute.Execute := 0;
lAxis.Move.bAbsolute := 0;
lAxis.enStep := enAxSTATE_READY;
END_IF
//==============================================
//Move Absolute (Stopp with Trigger
enAxSTATE_MOVE_ABSOLUTE_TRIGSTP:
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; //Interesting on Periodic Axises
//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;
IF lAxis.bStop OR NOT lAxis.Move.bAbsolute THEN
Axis_MC_BR_MoveAbsoluteTriggStop.Execute := 0;
lAxis.Move.bAbsolute := 0;
lAxis.enStep := enAxSTATE_STOP;
ELSIF Axis_MC_BR_MoveAbsoluteTriggStop.Done THEN
Axis_MC_BR_MoveAbsoluteTriggStop.Execute := 0;
lAxis.Move.bAbsolute := 0;
lAxis.enStep := enAxSTATE_READY;
END_IF
//==============================================
//Move Additive
enAxSTATE_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;
IF lAxis.bStop OR NOT lAxis.Move.bAdditive THEN
lAxis.Move.bAdditive := 0;
Axis_MC_MoveAdditive.Execute := 0;
lAxis.enStep := enAxSTATE_STOP;
ELSIF Axis_MC_MoveAdditive.Done THEN
lAxis.Move.bAdditive := 0;
Axis_MC_MoveAdditive.Execute := 0;
lAxis.enStep := enAxSTATE_READY;
END_IF
//==============================================
//Move Additive
enAxSTATE_MOVE_ADDITIVE_TRIGSTP:
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;
IF lAxis.bStop OR NOT lAxis.Move.bAdditive THEN
lAxis.Move.bAdditive := 0;
Axis_MC_MoveAdditive.Execute := 0;
lAxis.enStep := enAxSTATE_STOP;
ELSIF Axis_MC_BR_MoveAdditiveTriggStop.Done THEN
lAxis.Move.bAdditive := 0;
Axis_MC_BR_MoveAdditiveTriggStop.Execute := 0;
lAxis.enStep := enAxSTATE_READY;
END_IF
//==============================================
//Move Velocity
enAxSTATE_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;
IF lAxis.bStop THEN
Axis_MC_MoveVelocity.Execute := 0;
lAxis.enStep := enAxSTATE_STOP;
END_IF
//==============================================
//Move Velocity Control (Only POWERLINK)
//FixMe just prepared
enAxSTATE_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
enAxSTATE_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; //Alternative 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;
IF lAxis.bStop THEN
Axis_MC_BR_TorqueControl.Enable := 0;
lAxis.Status.bTorqueLimitReached := 0;
lAxis.enStep := enAxSTATE_STOP;
END_IF
//==============================================
//Move GEAR START
enAxSTATE_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;
IF Axis_MC_GearIn.InGear THEN
Axis_MC_GearIn.Execute := 0;
lAxis.enStep := enAxSTATE_READY;
ELSIF lAxis.bStop THEN
Axis_MC_GearIn.Execute := 0;
lAxis.enStep := enAxSTATE_STOP;
ELSIF lAxis.Move.bStopGearSlave THEN
lAxis.Move.bStopGearSlave := 0;
Axis_MC_GearIn.Execute := 0;
lAxis.enStep := enAxSTATE_MOVE_GEAR_STOP;
END_IF
//==============================================
//Move GEAR POS START
enAxSTATE_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 := lAxis.Para.rGearMasterSyncPos;
Axis_MC_GearInPos.SlaveSyncPosition := lAxis.Para.rGearSlaveSyncPos;
Axis_MC_GearInPos.Velocity := lAxis.Para.rGearSyncVelocity;
Axis_MC_GearInPos.Acceleration := lAxis.Para.rGearSyncAcceleration;
Axis_MC_GearInPos.SyncMode := mcSHORTEST_WAY;
Axis_MC_GearInPos.Execute := 1;
IF Axis_MC_GearInPos.InSync THEN
Axis_MC_GearIn.Execute := 0;
lAxis.enStep := enAxSTATE_READY;
ELSIF lAxis.bStop THEN
Axis_MC_GearInPos.Execute := 0;
lAxis.enStep := enAxSTATE_STOP;
ELSIF lAxis.Move.bStopGearSlave THEN
lAxis.Move.bStopGearSlave := 0;
Axis_MC_GearInPos.Execute := 0;
lAxis.enStep := enAxSTATE_MOVE_GEAR_STOP;
END_IF
//==============================================
//Move GEAR STOP
enAxSTATE_MOVE_GEAR_STOP:
Axis_MC_GearOut.Execute := 1;
IF Axis_MC_GearOut.Done THEN
Axis_MC_GearOut.Execute := 0;
lAxis.enStep := enAxSTATE_READY;
END_IF
//==============================================
//Stop after an Error
enAxSTATE_STOP_AFTER_ERROR:
IF (lAxis.Status.bMotionContinous) OR
(lAxis.Status.bMotionDiscrete) OR
(lAxis.Status.bMotionSynchronized) OR
(lAxis.Status.bHoming) THEN
Axis_MC_Stop.Deceleration := lAxis.Para.rDeceleration;
Axis_MC_Stop.Execute := TRUE;
IF Axis_MC_Stop.Done OR Axis_MC_Stop.Error THEN
Axis_MC_Stop.Execute := FALSE;
lAxis.enStep := enAxSTATE_ERROR;
END_IF
ELSE
lAxis.enStep := enAxSTATE_ERROR;
END_IF
//==============================================
//Error
enAxSTATE_ERROR:
bDisableCommands := TRUE;
IF Axis_MC_BR_ReadAxisError.Valid THEN
IF (Axis_MC_BR_ReadAxisError.ErrorRecord.Number <> 0) THEN
lAxis.Error.uiID := Axis_MC_BR_ReadAxisError.ErrorRecord.Number;
END_IF
IF lAxis.Error.bAcknowledge THEN
lAxis.Error.bAcknowledge := FALSE;
IF (Axis_MC_BR_ReadAxisError.ErrorRecord.Number <> 0) THEN
Axis_MC_BR_ReadAxisError.Acknowledge:=TRUE;
END_IF
lAxis.enStep := enAxSTATE_ERROR_CHECK;
END_IF
ELSIF (Axis_MC_BR_ReadAxisError.ErrorID = 29294) THEN
IF lAxis.Error.bAcknowledge THEN
lAxis.Error.bAcknowledge := FALSE;
lAxis.enStep := enAxSTATE_ERROR_RESET;
END_IF
END_IF
//==============================================
//Error Axis
enAxSTATE_ERROR_CHECK:
IF (Axis_MC_BR_ReadAxisError.Valid) THEN
IF (Axis_MC_BR_ReadAxisError.ErrorRecord.Number = 0) THEN
lAxis.Error.uiID := 0;
(* reset axis state IF the axis is in state ErrorStop *)
IF lAxis.Status.bErrorstop AND Axis_MC_ReadStatus.Valid THEN
lAxis.enStep := enAxSTATE_ERROR_RESET;
ELSE
lAxis.enStep := enAxSTATE_WAIT;
END_IF
ELSE
lAxis.enStep := enAxSTATE_ERROR;
END_IF
Axis_MC_BR_ReadAxisError.Acknowledge := FALSE;
END_IF
//==============================================
//Reset DONE
enAxSTATE_ERROR_RESET:
Axis_MC_Reset.Execute := 1;
IF Axis_MC_Power.Error THEN
Axis_MC_Power.Enable := 0;
END_IF
IF Axis_MC_Reset.Done THEN
Axis_MC_Reset.Execute := 0;
lAxis.enStep := enAxSTATE_WAIT;
ELSIF (Axis_MC_Reset.ErrorID <> 0) THEN
lAxis.Error.uiID := Axis_MC_Reset.ErrorID;
Axis_MC_Reset.Execute := 0;
lAxis.enStep := enAxSTATE_ERROR;
END_IF
END_CASE
IF bDisableCommands THEN
//reset power
Axis_MC_Power.Enable := 0;
//reset all fb execute inputs we use
Axis_MC_Home.Execute := 0;
Axis_MC_BR_BrakeControl.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_GearIn.Execute := 0;
Axis_MC_GearInPos.Execute := 0;
Axis_MC_GearOut.Execute := 0;
Axis_MC_Reset.Execute := 0;
//reset user commands
lAxis.bStop := 0;
lAxis.bHome := 0;
lAxis.Move.bBraketest := 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.bStartGearSlave := 0;
lAxis.Move.bStartGearPosSlave := 0;
lAxis.Move.bStopGearSlave := 0;
bDisableCommands := FALSE;
END_IF
//--------------------------------------------
//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 ();
//--------------------------------------------
//Call Function Blocks
Axis_MC_Power ();
Axis_MC_BR_Simulation ();
Axis_MC_Home ();
Axis_MC_BR_BrakeControl ();
Axis_MC_BR_InitModPos();
Axis_MC_BR_JogVelocity ();
Axis_MC_BR_JogLimitPosition ();
Axis_MC_BR_JogTargetPosition ();
Axis_MC_MoveAbsolute ();
Axis_MC_BR_MoveAbsoluteTriggStop();
Axis_MC_MoveAdditive ();
Axis_MC_BR_MoveAdditiveTriggStop ();
Axis_MC_MoveVelocity ();
AXis_MC_BR_MoveVelocityTriggStop ();
Axis_MC_GearIn ();
Axis_MC_GearInPos ();
Axis_MC_GearOut ();
Axis_MC_Stop ();
Axis_MC_Reset ();
Axis_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 ();
//---------------------------------------------
//Read individual Parameter
IF Axis_MC_BR_ReadParID.Done THEN
END_IF
IF Axis_MC_BR_ReadParID.Error THEN
uiMCReadError := Axis_MC_BR_ReadParID.ErrorID;
END_IF
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 ();
//--------------------------------------------
//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
END_IF
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
END_IF
Axis_MC_BR_WriteParID.Execute := 0;
END_IF
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 := 0;
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 ();
END_PROGRAM

View File

@@ -0,0 +1,90 @@
PROGRAM _INIT
(* init program *)
//Which Axis
lAxis ACCESS ADR (gAxis[0]);
lAxisActPos ACCESS ADR (gAxisActPos[0]);
lAxisMaster ACCESS ADR (gAxis[0]);
lbSimulation ACCESS ADR (gMachine.bSimulation);
rUser_Var1 ACCESS ADR (grDummy);
lAxis.bVAxis := FALSE;
//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 (gAxShaft1);
//This Axis is always slave (in case OF CAM/Gear)
udAxisMasterObj := ADR (gAxShaft1);
udAxisSlaveObj := udAxisObj;
//Initial Step
lAxis.enStep := enAxSTATE_WAIT;
//Overhand Axis Obj to FunctionBlocks
Axis_MC_BR_AxisErrorCollector.Axis := udAxisObj;
Axis_MC_BR_ReadDriveStatus.Axis := udAxisObj;
Axis_MC_BR_ReadDriveStatus.AdrDriveStatus := ADR (lAxis.DriveStatus);
Axis_MC_BR_JogVelocity.Axis := udAxisObj;
Axis_MC_BR_JogLimitPosition.Axis := udAxisObj;
Axis_MC_BR_JogTargetPosition.Axis := udAxisObj;
Axis_MC_BR_Simulation.Axis := udAxisObj;
Axis_MC_BR_SetHardwareInputs.Axis := udAxisObj;
Axis_MC_BR_TorqueControl.Axis := udAxisObj;
Axis_MC_BR_VelocityControl.Axis := udAxisObj;
Axis_MC_ACP_ENCOD_REF.Axis := udAxisObj;
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_BR_ReadAxisError.Axis := udAxisObj;
Axis_MC_BR_ReadAxisError.Mode := mcTEXT;
Axis_MC_BR_ReadAxisError.Configuration.DataAddress := ADR (lAxis.Error.Text);
Axis_MC_BR_ReadAxisError.Configuration.DataLength := SIZEOF (lAxis.Error.Text);
Axis_MC_BR_ReadAxisError.Configuration.DataObjectName := 'acp10etxde';
Axis_MC_BR_ReadAxisError.Configuration.Format := mcWRAP + mcNULL;
Axis_MC_BR_ReadAxisError.Configuration.LineLength := SIZEOF (lAxis.Error.Text[0]);
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;
//Enable Fubs
Axis_MC_BR_AxisErrorCollector.Enable := TRUE;
Axis_MC_BR_ReadAxisError.Enable := TRUE;
Axis_MC_ReadStatus.Enable := TRUE;
Axis_MC_ReadActualPosition.Enable := TRUE;
Axis_MC_ReadActualVelocity.Enable := TRUE;
Axis_MC_ReadActualTorque.Enable := TRUE; //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=4.0.14.207?>
<Program xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File Description="Initialization code">AxisctrlInit.st</File>
<File Description="Cyclic code">AxisctrlCyclic.st</File>
<File Description="Local variables" Private="true">Axisctrl.var</File>
</Files>
</Program>

View File

@@ -0,0 +1,90 @@
PROGRAM _INIT
(* init program *)
//Which Axis
lAxis ACCESS ADR (gAxis[1]);
lAxisActPos ACCESS ADR (gAxisActPos[1]);
lAxisMaster ACCESS ADR (gAxis[1]);
lbSimulation ACCESS ADR (gMachine.bSimulation);
rUser_Var1 ACCESS ADR (grDummy);
lAxis.bVAxis := FALSE;
//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 (gAxShaft2);
//This Axis is always slave (in case OF CAM/Gear)
udAxisMasterObj := ADR (gAxShaft2);
udAxisSlaveObj := udAxisObj;
//Initial Step
lAxis.enStep := enAxSTATE_WAIT;
//Overhand Axis Obj to FunctionBlocks
Axis_MC_BR_AxisErrorCollector.Axis := udAxisObj;
Axis_MC_BR_ReadDriveStatus.Axis := udAxisObj;
Axis_MC_BR_ReadDriveStatus.AdrDriveStatus := ADR (lAxis.DriveStatus);
Axis_MC_BR_JogVelocity.Axis := udAxisObj;
Axis_MC_BR_JogLimitPosition.Axis := udAxisObj;
Axis_MC_BR_JogTargetPosition.Axis := udAxisObj;
Axis_MC_BR_Simulation.Axis := udAxisObj;
Axis_MC_BR_SetHardwareInputs.Axis := udAxisObj;
Axis_MC_BR_TorqueControl.Axis := udAxisObj;
Axis_MC_BR_VelocityControl.Axis := udAxisObj;
Axis_MC_ACP_ENCOD_REF.Axis := udAxisObj;
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_BR_ReadAxisError.Axis := udAxisObj;
Axis_MC_BR_ReadAxisError.Mode := mcTEXT;
Axis_MC_BR_ReadAxisError.Configuration.DataAddress := ADR (lAxis.Error.Text);
Axis_MC_BR_ReadAxisError.Configuration.DataLength := SIZEOF (lAxis.Error.Text);
Axis_MC_BR_ReadAxisError.Configuration.DataObjectName := 'acp10etxde';
Axis_MC_BR_ReadAxisError.Configuration.Format := mcWRAP + mcNULL;
Axis_MC_BR_ReadAxisError.Configuration.LineLength := SIZEOF (lAxis.Error.Text[0]);
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;
//Enable Fubs
Axis_MC_BR_AxisErrorCollector.Enable := TRUE;
Axis_MC_BR_ReadAxisError.Enable := TRUE;
Axis_MC_ReadStatus.Enable := TRUE;
Axis_MC_ReadActualPosition.Enable := TRUE;
Axis_MC_ReadActualVelocity.Enable := TRUE;
Axis_MC_ReadActualTorque.Enable := TRUE; //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=4.0.20.56 SP?>
<Program xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File Description="Initialization code">AxisctrlInit.st</File>
<File Reference="true">\Logical\Axises\Axisctrl\AxisctrlCyclic.st</File>
<File Description="Local variables" Private="true" Reference="true">\Logical\Axises\Axisctrl\Axisctrl.var</File>
</Files>
</Program>

View File

@@ -0,0 +1,191 @@
TYPE
typAxis_Move : STRUCT (*Achsbewegungen*)
bAbsolute : BOOL; (*Absolute Bewegung*)
bAdditive : BOOL; (*Inkrementelle Bewegung*)
bVelocity : BOOL; (*Bewegung mit konstanter Geschwindigkeit*)
bVelocityControl : BOOL; (*Bewegung mit konstanter Geschwindigkeit / Drehmomentbegrenzt (Nur EPL)*)
bTorqueControl : BOOL; (*Bewegung mit konstanter Geschwindigkeit / Drehmomentregelung*)
bJogPos : BOOL; (*Tipp Vorw<72>rts*)
bJogNeg : BOOL; (*Tipp R<>ckw<6B>rts*)
bBraketest : BOOL; (*Bremstest*)
bStartGearSlave : BOOL; (*Elektronisches Getriebe Slave (Geschwindigkeit)*)
bStartGearPosSlave : BOOL; (*Elektronisches Getriebe Slave (Positon)*)
bStopGearSlave : BOOL; (*Eektronisches Getriebe Slave Stoppen*)
END_STRUCT;
typAxis_Error : STRUCT (*Achsfehler*)
bAcknowledge : BOOL;
uiID : UINT;
Text : ARRAY[0..3]OF STRING[79];
END_STRUCT;
error_typ : STRUCT (*error structure *)
AxisErrorCount : UINT; (*number of active axis errors*)
AxisWarningCount : UINT; (*number of active axis warinings*)
FunctionBlockErrorCount : UINT; (*number of active function block errors*)
ErrorRecord : MC_ERRORRECORD_REF; (*error record information*)
ErrorText : ARRAY[0..3]OF STRING[79]; (*description of first active error or warning*)
END_STRUCT;
typAxis_Status : STRUCT (*Acopos Status*)
bDisabled : BOOL; (*Disabled*)
bStandstill : BOOL; (*Standstill*)
bStopping : BOOL; (*Stopping*)
bHoming : BOOL; (*Homing*)
bMotionDiscrete : BOOL; (*Motion Discrete*)
bMotionContinous : BOOL; (*Motion Continous*)
bMotionSynchronized : BOOL; (*Motion Synchronized*)
bErrorstop : BOOL; (*Error Stop*)
bTorqueLimitReached : BOOL; (*Torquelimit from Move.bTorqueControl *)
bHomingOkDelayed : BOOL;
END_STRUCT;
typAxis_DriveStatus : STRUCT (*Acopos Drive Statos*)
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 (*Achsparameter*)
bTriggStop : BOOL; (*Use Trigger Stop for Move Absolute/Additive/Velocity*)
bSetHWInputs : BOOL := 0; (*Set HW Inputs (e.g. for ACPMulti when need Limit/Ref)*)
usDirection : USINT; (*Direction for Move Velocity*)
usHomeingMode : USINT := mcHOME_DEFAULT;
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 (And Jog Target)*)
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; (*Homeposition for Homing*)
JogMode : enAxisJogMode := (0); (*Tippbetriebsart*)
rJogLimitLow : REAL; (*Unteres Limit f<>r Jog Limits*)
rJogLimitHigh : REAL; (*Oberes Limit f<>r Jog Limits*)
rJogVelocity : REAL; (*Velocity for Jog*)
rTorqueLimit : REAL; (*Torquelimit for TorqueControl*)
rBraketestTorque : REAL; (*Tourque for Braketest*)
rBraketestPosLimit : REAL; (*Tourque for Braketest*)
iGearRatioNumerator : INT := 1; (*CAM/Gear*)
uiGearRatioDenominator : UINT := 1; (*CAM/Gear*)
rGearMasterSyncPos : REAL; (*Pos Gear *)
rGearSlaveSyncPos : REAL; (*Pos Gear *)
rGearMasterStartDistance : REAL; (*Pos Gear*)
rGearSyncVelocity : REAL; (*Pos Gear*)
rGearSyncAcceleration : REAL; (*Pos Gear*)
END_STRUCT;
typAxis : STRUCT (*Acopos Achse*)
enStep : enAxisStep; (*Achs Schritt*)
bVAxis : BOOL; (*Achse ist Virtuell*)
bPower : BOOL; (*Achse Einschalten*)
bHome : BOOL; (*Achse referenzieren*)
bHalt : BOOL; (*Achse anhalten (kann durch andres Kommando abgebr. werden)*)
bStop : BOOL; (*Achse stoppen (solange Kommando gesetzt ist)*)
rActPosition : REAL; (*Aktuelle Position*)
rActVelocity : REAL; (*Aktuelle Geschwindigkeit*)
rActTorque : REAL; (*Aktuelles Drehmoment*)
rReachedTorque : REAL; (*Erreichtes Drehmoment bei Stop mit M-Limit*)
diPositionReachedTorque : DINT; (*Position bei Erreichen des Drehmoments*)
Move : typAxis_Move; (*Achsbewegungen*)
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;
enAxisJogMode :
(
enAxJOG, (*Tippbetrieb un<75>berwacht*)
enAxJOG_Limits, (*Tippbetrieb innerhalb Limits*)
enAxJOG_Target (*Tippbetrieb auf Ziel*)
);
enAxisStep :
( (*Acopos Schritt*)
enAxSTATE_WAIT, (*Waruten*)
enAxSTATE_SIMULATION_ON, (*Simulation einschalten*)
enAxSTATE_SIMULATION_OFF, (*Simulation ausschalten*)
enAxSTATE_POWER_ON, (*Achse einschalten*)
enAxSTATE_POWER_OFF, (*Achse einschalten*)
enAxSTATE_READY, (*Achse Bereit*)
enAxSTATE_HOME, (*Achse referenzieren*)
enAxSTATE_BRAKE_TEST, (*Bremstest durchf<68>hren*)
enAxSTATE_INIT_MOD_POS, (*Modulo Posiotion initialisieren*)
enAxSTATE_STOP, (*Achse stopppen*)
enAxSTATE_JOG, (*Axhse tippen*)
enAxSTATE_MOVE_ABSOLUTE, (*Achse absolut positionieren*)
enAxSTATE_MOVE_ABSOLUTE_TRIGSTP, (*Achse absolut positionieren Stop mit Trigger*)
enAxSTATE_MOVE_ADDITIVE, (*Achse inkrementell positionieren*)
enAxSTATE_MOVE_ADDITIVE_TRIGSTP, (*Achse inkrementell positionieren Stop mit Trigger*)
enAxSTATE_MOVE_VELOCITY, (*Achse mit konstanter Geschwindigkeit bewegen*)
enAxSTATE_MOVE_VELOCITY_CTRL, (*Achse Geschwindigkeitsregeln (M-Regelung)*)
enAxSTATE_MOVE_TORQUE_CTRL, (*Achse Drehmomentregeln*)
enAxSTATE_MOVE_GEAR_START, (*Elektronisches Getriebe Starten*)
enAxSTATE_MOVE_GEARPOS_START, (*Elektronisches Getriebe (Positionsmodus) Starten*)
enAxSTATE_MOVE_GEAR_STOP, (*Elektronisches Getriebe Stoppen*)
enAxSTATE_STOP_AFTER_ERROR, (*Stoppen nach Fehler*)
enAxSTATE_ERROR, (*Fehler*)
enAxSTATE_ERROR_CHECK, (*Fehler pr<70>fen*)
enAxSTATE_ERROR_RESET (*Achsfehler quittieren*)
);
typPS_Command : STRUCT (*command structure for power supply modules*)
bPower : BOOL; (*switch on the controller of the psm*)
bStartPowerMeter : BOOL; (*start the power evaluation of psm*)
bStopPowerMeter : BOOL; (*stop the power evaluation of psm*)
bRestartInterval : BOOL; (*restart the interval of power evaluation*)
END_STRUCT;
typPS_Parameter : STRUCT (*parameter structure for psm*)
uiIntervalTime : UINT; (*interval time for the power evaluation*)
END_STRUCT;
typPS_Status : STRUCT (*status structure for psm*)
mcPowerData : MC_POWERDATA_REF; (*evaluated power data*)
uiMissedInterval : UINT; (*MissedIntervals with power evaluation*)
END_STRUCT;
typPS_Energy : STRUCT
rConsumedEnergy : REAL; (*Verbrauchte Energie [Ws]*)
rRegeneratedEnergy : REAL; (*R<>ckgespeiste Energie [Ws]*)
END_STRUCT;
typPS : STRUCT (*substructure for psm*)
enStep : enPSStep; (*Achs Schritt*)
Command : typPS_Command; (*command structure for psm*)
Parameter : typPS_Parameter; (*parameter structure for psm*)
Status : typPS_Status; (*status structure for psm*)
Energy : typPS_Energy;
AxisState : typAxis_Status; (*axis state structure*)
DriveStatus : typAxis_DriveStatus;
Error : typAxis_Error; (*error structure*)
END_STRUCT;
enPSStep :
(
enPSSTATE_WAIT, (*Waruten*)
enPSSTATE_READY,
enPSSTATE_POWER_OFF,
enPSSTATE_POWER_ON,
enPSSTATE_POWERMETER_START,
enPSSTATE_POWERMETER_STOP,
enPSSTATE_RESTART_INTERVAL,
enPSSTATE_ERROR, (*Fehler bei FUB ausf<73>hrung*)
enPSSTATE_ERROR_AXIS, (*Achsfehler*)
enPSSTATE_ERROR_RESET (*Achsfehler quittieren*)
);
END_TYPE

View File

@@ -0,0 +1,16 @@
VAR
gAxis : ARRAY[0..6] OF typAxis; (*Axis Datasructure / Controlinterface*)
gMAxTrace : typMultAx_Trace; (*Multiaxtrace*)
gAxisActPos : ARRAY[0..6] OF REAL;
grDummy : REAL; (*Dummy Real to be accessed from Axistasks*)
END_VAR
(*//ACP/SDC Axobjects*)
VAR
gAxShaft1 : ACP10AXIS_typ;
gAxShaft2 : ACP10AXIS_typ;
END_VAR
(*//-----------------------------------------------------------------------------------------------------*)
VAR RETAIN
grAxisABSOffShaft1 : REAL;
grAxisABSOffShaft2 : REAL;
END_VAR

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.0.20.56 SP?>
<Package xmlns="http://br-automation.co.at/AS/Package">
<Objects>
<Object Type="File" Description="Achsdatentypen">GlobalAxis.typ</Object>
<Object Type="File" Description="Package variables">GlobalAxis.var</Object>
<Object Type="Program" Language="IEC" Description="Controller">SSTCtrl</Object>
<Object Type="Program" Language="IEC" Description="AxisCtrl (Master)">Axisctrl</Object>
<Object Type="Program" Language="IEC" Description="AxisCtrl (Master)">Axisctrl1</Object>
<Object Type="DataObject" Language="Ett">acp10etxde</Object>
</Objects>
</Package>

View File

@@ -0,0 +1,46 @@
FUNCTION HomeAxis
IF (enInStep = enHomeOffsetPerm) THEN
//Home with permanent Stored Offset
//---------------------------
InAxis.Para.rHomePosition := rInPermanentOffset;
InAxis.bHome := TRUE;
enInStep := enHomeOffsetPermDone;
ELSIF (enInStep = enHomeOffsetPermDone) THEN
//Home with permanent Stored Offset
//---------------------------
IF InAxis.Status.bHomingOkDelayed AND NOT InAxis.bHome THEN
enInStep := enHomeIdle;
END_IF
ELSIF (enInStep = enHomeOffset0) THEN
//Home with Stored 0
//---------------------------
InAxis.Para.rHomePosition := 0.0;
InAxis.bHome := TRUE;
enInStep := enHomeOffset0Done;
ELSIF (enInStep = enHomeOffset0Done) THEN
//Home with Stored 0
//---------------------------
IF InAxis.Status.bHomingOkDelayed AND NOT InAxis.bHome THEN
enInStep := enHomeStorePos;
END_IF
ELSIF (enInStep = enHomeOffset0NoStore) THEN
//Home with Stored 0
//---------------------------
InAxis.Para.rHomePosition := 0.0;
InAxis.bHome := TRUE;
enInStep := enHomeOffset0DoneNoStore;
ELSIF (enInStep = enHomeOffset0DoneNoStore) THEN
//Home with Stored 0
//---------------------------
IF InAxis.Status.bHomingOkDelayed AND NOT InAxis.bHome THEN
enInStep := enHomeIdle;
END_IF
ELSIF (enInStep = enHomeStorePos) THEN
//Store Axis Position
//---------------------------
rInPermanentOffset := - InAxis.rActPosition + rInOffset;
ERRxwarning (50001, 0 , ADR ('Permanenter Geberoffset einer Spindel wurde ver<65>ndert'));
enInStep := enHomeOffsetPerm;
END_IF
END_FUNCTION

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.0.20.56 SP?>
<Program xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File Description="Cyclic code">SSTCtrlCyclic.st</File>
<File Description="Initialization code">SSTCtrlInit.st</File>
<File Description="Local data types" Private="true">SSTCtrl.typ</File>
<File Description="Local variables" Private="true">SSTCtrl.var</File>
<File Description="Home an Absolute Encoder Axis">HomeAxis.st</File>
<File Private="true">SSTCtrl.fun</File>
</Files>
</Program>

View File

@@ -0,0 +1,9 @@
FUNCTION HomeAxis : BOOL (*Home an Absolute Encoder Axis*) (*$GROUP=User*)
VAR_INPUT
InAxis : REFERENCE TO typAxis; (*Achsreferenz*)
rInPermanentOffset : REFERENCE TO REAL; (*Referenz auf permanenten Offset*)
rInOffset : REAL;
enInStep : REFERENCE TO typ_enHome; (*Step*)
END_VAR
END_FUNCTION

View File

@@ -0,0 +1,83 @@
(**)
TYPE
typ_enStepSST :
(
enSSTStep_INIT := 0, (*Grundstellung pr<70>fen*)
enSSTStep_WAIT_START, (*Auf Startbefehl warten (mit Teil)*)
enSSTStep_AX_BACK, (*Achsen zur<75>ckstellen*)
enSSTSTep_TURN, (*Tisch drehen*)
enSSTStep_FIND_POS, (*Position f<>r Blende finden*)
enSSTSTep_WAIT_POS, (*Warten bis Pos. Blende zugestellt*)
enSSTStep_AX_FW, (*Achse + Vlies zustellen*)
enSSTStep_START_BRUSH, (*B<>rsten starten*)
enSSTStep_WAIT_BRUSHED, (*warten bis geb<65>rstet*)
enSSTStep_AX_BACK_BRUSH (*Achsen zur<75>ckstellen*)
);
typ_enStepHoming :
( (*Grundstellungsfahrt*)
enPressStepHoming_INIT, (*Auf Start warten*)
enPressStepHoming_WAIT_START, (*Auf Startbefehl warten*)
enPressStepHoming_REF, (*Referenzwerte Laden*)
enPressStepHoming_MOVE_HOME, (*Alles in Grundstellung fahren*)
enPressStepHoming_MOVE_HOME_TT, (*Drehtisch in Grundstellung*)
enPressStepHoming_FW_AX, (*Achse an Einlegeposition Zustellen*)
enPressStepHoming_DONE (*GST-Fahrt abgeschlossen*)
);
typ_enHome :
(
enHomeIdle,
enHomeOffsetPerm, (*Mit permanet gesp. Offset*)
enHomeOffsetPermDone, (*Mit permanet gesp. Offset*)
enHomeOffset0, (*Mit Offset 0 referenzieren*)
enHomeOffset0Done, (*Mit Offset 0 referenzieren*)
enHomeOffset0NoStore, (*Mit Offset 0 referenzieren*)
enHomeOffset0DoneNoStore, (*Mit Offset 0 referenzieren*)
enHomeStorePos (*Aktuelle Pos als Offset (zum Allg Offset) speichern*)
);
typStatusPressVCControls : STRUCT (*Controlbytes f<>r Visu*)
usStartHoming : USINT;
usJogPosShaft1 : USINT;
usJogPosShaft2 : USINT;
usShaft1MaskPos : USINT;
usShaft2MaskPos : USINT;
usTurnPosShaft1 : USINT; (*Drehtisch auf Achse 1 drehen*)
usTurnPosShaft2 : USINT; (*Drehtisch auf Achse 2 drehen*)
usAxis1Fw : USINT;
usAxis1Bw : USINT;
usAxis2Fw : USINT;
usAxis2Bw : USINT;
usGrinderFw : USINT;
usGrinderBw : USINT;
usReferencePress : USINT; (*Presse Referenzieren*)
usReferencePressABS : USINT; (*Presse Referenzieren mit gespeicherten Absolutwerten*)
END_STRUCT;
typManualCommnands : STRUCT (*Kommandos f<>r Hand / Automatikbetrieb*)
bNextManStep : BOOL; (*N<>chster Schritt (Semi) Automatic*)
bStartHoming : BOOL; (*Maschine in Grundstellung fahren*)
bReferenceAxis1 : BOOL; (*Achse 1 Referenzieren*)
bReferenceAxis2 : BOOL; (*Achse 1 Referenzieren*)
bJogPosShaft1 : BOOL; (*Achse1 Drehen*)
bJogPosShaft2 : BOOL; (*Achse2 Drehen*)
bShaft1MaskPos : BOOL; (*Achse1 Auf Maskenposition bringen*)
bShaft2MaskPos : BOOL; (*Achse2 Auf Maskenposition bringen*)
bTurnPosShaft1 : BOOL; (*Drehtisch auf Achse 1 drehen*)
bTunrPosShaft2 : BOOL; (*Drehtisch auf Achse 2 drehen*)
bAxis1Fw : BOOL;
bAxis1Bw : BOOL;
bAxis2Fw : BOOL;
bAxis2Bw : BOOL;
bGrinderFw : BOOL;
bGrinderBw : BOOL;
END_STRUCT;
typMoveConditions : STRUCT (*Bewegungsfreigaben*)
bEnableTurnTable : BOOL;
bEnablePosShaft1 : BOOL;
bEnablePosShaft2 : BOOL;
bEnableReferencePress : BOOL; (*Presse Referenzieren*)
bEnableReferencePressABS : BOOL; (*Presse Referenzieren*)
bEnableAxis1Fw : BOOL; (*Achse 1 Zustellen*)
bEnableAxis2Fw : BOOL; (*Achse 2 Zustellen*)
bEnableGrinderFw : BOOL; (*Schleifvlies Zustellen*)
END_STRUCT;
END_TYPE

View File

@@ -0,0 +1,49 @@
(*//-----------------------------------------------------------------------------------------------------*)
(*//Dynamic Vars*)
VAR
lAxisShaft1 : REFERENCE TO typAxis; (*Axis Datastruct *)
lAxisShaft2 : REFERENCE TO typAxis; (*Axis Datastruct *)
END_VAR
(*//Local Vars*)
VAR
bTransitionCondition : BOOL;
bSafetyOk : BOOL;
bSafetyOkFP : BOOL;
bHome : BOOL := FALSE;
bReferenedShaft1 : BOOL;
bReferenedShaft2 : BOOL;
bStop : BOOL;
bHalt : BOOL;
bEnableNextStep : BOOL; (*N<>chsten Schritt (Semiautomatik) Freigeben*)
bMachIsInHomepos : BOOL;
bAxis1Reverse : BOOL;
bAxis2Reverse : BOOL;
usi : USINT;
usErrorReset : USINT;
usMaskPos : USINT;
udSteptime : UDINT; (*[0.1s]*)
udCycletime : UDINT;
udBrushtime : UDINT := 6000;
diModPos : DINT;
StatusVCControls : typStatusPressVCControls;
ManualCommands : typManualCommnands; (*Kommandos Betriebsart Hand*)
MoveConditions : typMoveConditions;
enStepHomeShaft1 : typ_enHome;
enStepHomeShaft2 : typ_enHome;
enStepSST : typ_enStepSST;
enStepSSTHoming : typ_enStepHoming;
rMaskPos : REAL;
rAveragePos : REAL;
rOverrideVelocity : REAL := 100.0;
END_VAR
VAR CONSTANT
rHOMEPOS : REAL := 0.0; (*Referenzierpos[0.1mm]*)
END_VAR
(*//Pressparams*)
(*//FUBS*)
VAR
FUB_AsArLogWrite : AsArLogWrite;
TOF_ResetAxisErrors : TOF;
TON_Slay1Up : TON;
TON_Slay2Up : TON;
END_VAR

View File

@@ -0,0 +1,537 @@
PROGRAM _CYCLIC
bSafetyOk := TRUE; //Safety for Acopos is OK
bSafetyOkFP := EDGEPOS (bSafetyOk);
IF EDGEPOS (bBlink0_1) THEN
udSteptime := udSteptime + 100;
udCycletime := udCycletime + 100;
END_IF
//Set Override
IF (rOverrideVelocity < 1) THEN
rOverrideVelocity := 1;
ELSIF rOverrideVelocity > 100 THEN
rOverrideVelocity := 100;
END_IF
//No override necersary
rOverrideVelocity := 100;
lAxisShaft1.Para.rOverrideVelocity := rOverrideVelocity * 0.01;
lAxisShaft2.Para.rOverrideVelocity := rOverrideVelocity * 0.01;
//Power Up Axises (FixMe UserPos
lAxisShaft1.bPower := gMachine.bMachineON AND lAxisShaft1.DriveStatus.bControllerReady AND bSafetyOk AND
NOT (((gMachine.enMode = enMACH_AUTOMATIC) OR (gMachine.enMode = enMACH_MANUAL)) AND (enStepSST = enSSTStep_WAIT_START) AND NOT gMachine.bSetupMode) AND
NOT ((gMachine.enMode = enMACH_HOMEPOS));
lAxisShaft2.bPower := gMachine.bMachineON AND lAxisShaft2.DriveStatus.bControllerReady AND bSafetyOk AND
NOT (((gMachine.enMode = enMACH_AUTOMATIC) OR (gMachine.enMode = enMACH_MANUAL)) AND (enStepSST = enSSTStep_WAIT_START) AND NOT gMachine.bSetupMode) AND
NOT ((gMachine.enMode = enMACH_HOMEPOS));
IF bStop THEN
lAxisShaft1.bStop := TRUE;
lAxisShaft2.bStop := TRUE;
END_IF
bMachIsInHomepos := gbInGrinderFw AND (
(gbInTurnTablePos1 AND gbInAxis2Fw AND gbInAxis1Bw) OR
(gbInTurnTablePos2 AND gbInAxis1Fw AND gbInAxis2Bw));
//Move Conditions
MoveConditions.bEnablePosShaft1 := gbInTurnTablePos1 OR gMachine.bSetupMode;
MoveConditions.bEnablePosShaft2 := gbInTurnTablePos2 OR gMachine.bSetupMode;
MoveConditions.bEnableTurnTable := gbInGrinderBw AND gbInAxis1Bw AND gbInAxis2Bw;
MoveConditions.bEnableAxis1Fw := gbInTurnTablePos1 OR gbInTurnTablePos2;
MoveConditions.bEnableAxis2Fw := gbInTurnTablePos1 OR gbInTurnTablePos2;
MoveConditions.bEnableGrinderFw := gbInTurnTablePos1 OR gbInTurnTablePos2;
//Status Control vor Visual Component Controls
StatusVCControls.usJogPosShaft1 := SHL (BOOL_TO_USINT (NOT MoveConditions.bEnablePosShaft1), VC_LOCK_BITPOS) +
SHL (BOOL_TO_USINT (NOT gbInTurnTablePos1 OR (gMachine.enMode <> enMACH_JOG) OR (genAccessLevel < enACCESSLEVEL_4)), VC_HIDE_BITPOS);
StatusVCControls.usJogPosShaft2 := SHL (BOOL_TO_USINT (NOT MoveConditions.bEnablePosShaft2), VC_LOCK_BITPOS) +
SHL (BOOL_TO_USINT (NOT gbInTurnTablePos2 OR (gMachine.enMode <> enMACH_JOG) OR (genAccessLevel < enACCESSLEVEL_4)), VC_HIDE_BITPOS);
StatusVCControls.usShaft1MaskPos := SHL (BOOL_TO_USINT (NOT MoveConditions.bEnablePosShaft1), VC_LOCK_BITPOS) +
SHL (BOOL_TO_USINT (NOT gbInTurnTablePos1 OR (gMachine.enMode <> enMACH_JOG) OR (genAccessLevel < enACCESSLEVEL_4)), VC_HIDE_BITPOS);
StatusVCControls.usShaft2MaskPos := SHL (BOOL_TO_USINT (NOT MoveConditions.bEnablePosShaft2), VC_LOCK_BITPOS) +
SHL (BOOL_TO_USINT (NOT gbInTurnTablePos2 OR (gMachine.enMode <> enMACH_JOG) OR (genAccessLevel < enACCESSLEVEL_4)), VC_HIDE_BITPOS);
StatusVCControls.usTurnPosShaft1 := SHL (BOOL_TO_USINT (NOT MoveConditions.bEnableTurnTable), VC_LOCK_BITPOS) +
SHL (BOOL_TO_USINT (gbInTurnTablePos1 OR (gMachine.enMode <> enMACH_JOG) OR (genAccessLevel < enACCESSLEVEL_4)), VC_HIDE_BITPOS);
StatusVCControls.usTurnPosShaft2 := SHL (BOOL_TO_USINT (NOT MoveConditions.bEnableTurnTable), VC_LOCK_BITPOS) +
SHL (BOOL_TO_USINT (gbInTurnTablePos2 OR (gMachine.enMode <> enMACH_JOG) OR (genAccessLevel < enACCESSLEVEL_4)), VC_HIDE_BITPOS);
StatusVCControls.usAxis1Fw := SHL (BOOL_TO_USINT (NOT MoveConditions.bEnableAxis1Fw), VC_LOCK_BITPOS) +
SHL (BOOL_TO_USINT (gbInAxis1Fw OR (gMachine.enMode <> enMACH_JOG) OR (genAccessLevel < enACCESSLEVEL_4)), VC_HIDE_BITPOS);
StatusVCControls.usAxis1Bw := SHL (BOOL_TO_USINT (FALSE), VC_LOCK_BITPOS) +
SHL (BOOL_TO_USINT (gbInAxis1Bw OR (gMachine.enMode <> enMACH_JOG) OR (genAccessLevel < enACCESSLEVEL_4)), VC_HIDE_BITPOS);
StatusVCControls.usAxis2Fw := SHL (BOOL_TO_USINT (NOT MoveConditions.bEnableAxis2Fw), VC_LOCK_BITPOS) +
SHL (BOOL_TO_USINT (gbInAxis2Fw OR (gMachine.enMode <> enMACH_JOG) OR (genAccessLevel < enACCESSLEVEL_4)), VC_HIDE_BITPOS);
StatusVCControls.usAxis2Bw := SHL (BOOL_TO_USINT (FALSE), VC_LOCK_BITPOS) +
SHL (BOOL_TO_USINT (gbInAxis2Bw OR (gMachine.enMode <> enMACH_JOG) OR (genAccessLevel < enACCESSLEVEL_4)), VC_HIDE_BITPOS);
StatusVCControls.usGrinderFw := SHL (BOOL_TO_USINT (NOT MoveConditions.bEnableGrinderFw), VC_LOCK_BITPOS) +
SHL (BOOL_TO_USINT (gbInGrinderFw OR (gMachine.enMode <> enMACH_JOG) OR (genAccessLevel < enACCESSLEVEL_4)), VC_HIDE_BITPOS);
StatusVCControls.usGrinderBw := SHL (BOOL_TO_USINT (FALSE), VC_LOCK_BITPOS) +
SHL (BOOL_TO_USINT (gbInGrinderBw OR (gMachine.enMode <> enMACH_JOG) OR (genAccessLevel < enACCESSLEVEL_4)), VC_HIDE_BITPOS);
StatusVCControls.usReferencePress := SHL (BOOL_TO_USINT (NOT MoveConditions.bEnableReferencePress), VC_LOCK_BITPOS) +
SHL (BOOL_TO_USINT ((gMachine.enMode <> enMACH_JOG) OR (genAccessLevel < enACCESSLEVEL_4)) , VC_HIDE_BITPOS);
StatusVCControls.usReferencePressABS := SHL (BOOL_TO_USINT (NOT MoveConditions.bEnableReferencePressABS), VC_LOCK_BITPOS) +
SHL (BOOL_TO_USINT (gMachine.enMode <> enMACH_JOG) , VC_HIDE_BITPOS);
//Maskposition
usMaskPos := SHL(BOOL_TO_USINT (gbInMaskPosPos1), 4) +
SHL(BOOL_TO_USINT (gbInMaskPosPos0), 3) +
SHL(BOOL_TO_USINT (gbInMaskPosMid), 2) +
SHL(BOOL_TO_USINT (gbInMaskPosNeg0), 1) +
BOOL_TO_USINT (gbInMaskPosNeg1);
IF (usMaskPos = 2#00100) THEN
rMaskPos := 0.0;
ELSIF (usMaskPos = 2#00101) THEN
rMaskPos := 40.0;
ELSIF (usMaskPos = 2#00001) THEN
rMaskPos := 80.0;
ELSIF (usMaskPos = 2#01001) THEN
rMaskPos := 120.0;
ELSIF (usMaskPos = 2#01000) THEN
rMaskPos := 160.0;
ELSIF (usMaskPos = 2#01010) THEN
rMaskPos := 200.0;
ELSIF (usMaskPos = 2#00010) THEN
rMaskPos := 240.0;
ELSIF (usMaskPos = 2#10010) THEN
rMaskPos := 280.0;
ELSIF (usMaskPos = 2#10000) THEN
rMaskPos := 320.0;
ELSIF (usMaskPos = 2#10100) THEN
rMaskPos := 360.0;
END_IF;
//Home
IF (gMachine.bMachineON OR (gMachine.enMode = enMACH_JOG)) THEN
IF NOT lAxisShaft1.DriveStatus.bHomingOk AND lAxisShaft1.DriveStatus.bControllerReady THEN
lAxisShaft1.bHome := TRUE;
END_IF
END_IF
IF (gMachine.bMachineON OR (gMachine.enMode = enMACH_JOG)) THEN
IF NOT lAxisShaft2.DriveStatus.bHomingOk AND lAxisShaft2.DriveStatus.bControllerReady THEN
lAxisShaft2.bHome := TRUE;
END_IF
END_IF
IF (gMachine.bMachineON OR (gMachine.enMode = enMACH_JOG) OR (gMachine.enMode = enMACH_HOMEPOS)) AND bHome THEN
IF (enStepHomeShaft1 = enHomeIdle) AND (NOT lAxisShaft1.DriveStatus.bHomingOk OR bHome) AND lAxisShaft1.DriveStatus.bControllerReady THEN
enStepHomeShaft1 := enHomeOffsetPerm;
END_IF
END_IF
HomeAxis (ADR (lAxisShaft1),
ADR (grAxisABSOffShaft1),
rHOMEPOS,
ADR (enStepHomeShaft1));
IF (gMachine.bMachineON OR (gMachine.enMode = enMACH_JOG) OR (gMachine.enMode = enMACH_HOMEPOS)) AND bHome THEN
IF (enStepHomeShaft2 = enHomeIdle) AND (NOT lAxisShaft2.DriveStatus.bHomingOk OR bHome) AND lAxisShaft2.DriveStatus.bControllerReady THEN
enStepHomeShaft2 := enHomeOffsetPerm;
END_IF
END_IF
bHome :=FALSE;
HomeAxis (ADR (lAxisShaft2),
ADR (grAxisABSOffShaft2),
rHOMEPOS,
ADR (enStepHomeShaft2));
IF (gMachine.enMode <> enMACH_HOMEPOS) THEN
enStepSSTHoming := 0;
END_IF
IF (gMachine.enMode <> enMACH_AUTOMATIC) AND (gMachine.enMode <> enMACH_MANUAL) THEN
enStepSST := 0;
END_IF
//Jog Mode
//==========================================================================================
IF gMachine.enMode = enMACH_JOG THEN
//Clear Commands
lAxisShaft1.Move.bAbsolute := FALSE;
//Uncritical Movements
IF gMachine.bSetupMode THEN
lAxisShaft1.Para.JogMode := enAxJOG;
lAxisShaft2.Para.JogMode := enAxJOG;
END_IF
lAxisShaft1.Move.bJogNeg := FALSE;
lAxisShaft1.Move.bJogPos := ManualCommands.bJogPosShaft1 AND MoveConditions.bEnablePosShaft1;
lAxisShaft2.Move.bJogNeg := FALSE;
lAxisShaft2.Move.bJogPos := ManualCommands.bJogPosShaft2 AND MoveConditions.bEnablePosShaft2;
IF MoveConditions.bEnableTurnTable THEN
IF ManualCommands.bTurnPosShaft1 THEN
gbOuTurnFw := TRUE;
gbOuTurnBw := FALSE;
ELSIF ManualCommands.bTunrPosShaft2 THEN
gbOuTurnFw := FALSE;
gbOuTurnBw := TRUE;
END_IF
END_IF
IF MoveConditions.bEnableAxis1Fw AND ManualCommands.bAxis1Fw THEN
gbOuAxis1Fw := TRUE;
gbOuAxis1Bw := FALSE;
ELSIF ManualCommands.bAxis1Bw THEN
gbOuAxis1Fw := FALSE;
gbOuAxis1Bw := TRUE;
END_IF
IF MoveConditions.bEnableAxis2Fw AND ManualCommands.bAxis2Fw THEN
gbOuAxis2Fw := TRUE;
gbOuAxis2Bw := FALSE;
ELSIF ManualCommands.bAxis2Bw THEN
gbOuAxis2Fw := FALSE;
gbOuAxis2Bw := TRUE;
END_IF
IF MoveConditions.bEnableGrinderFw AND ManualCommands.bGrinderFw THEN
gbOuGrinderFw := TRUE;
gbOuGrinderBw := FALSE;
ELSIF ManualCommands.bGrinderBw THEN
gbOuGrinderFw := FALSE;
gbOuGrinderBw := TRUE;
END_IF
IF EDGEPOS (ManualCommands.bReferenceAxis1) THEN
lAxisShaft1.Para.usHomeingMode := mcHOME_DIRECT;
lAxisShaft1.bHome := TRUE;
ELSIF ManualCommands.bReferenceAxis1 THEN
IF lAxisShaft1.Status.bStandstill AND (lAxisShaft1.enStep = enAxSTATE_READY) THEN
enStepHomeShaft1 := enHomeOffset0;
bReferenedShaft1 := TRUE;
END_IF
IF bReferenedShaft1 THEN
ManualCommands.bReferenceAxis1 := FALSE;
bReferenedShaft1 := FALSE;
END_IF
END_IF
IF EDGEPOS (ManualCommands.bReferenceAxis2) THEN
lAxisShaft2.Para.usHomeingMode := mcHOME_DIRECT;
lAxisShaft2.bHome := TRUE;
ELSIF ManualCommands.bReferenceAxis2 THEN
IF lAxisShaft2.Status.bStandstill AND (lAxisShaft2.enStep = enAxSTATE_READY) THEN
enStepHomeShaft2 := enHomeOffset0;
bReferenedShaft2 := TRUE;
END_IF
IF bReferenedShaft2 THEN
ManualCommands.bReferenceAxis2 := FALSE;
bReferenedShaft2 := FALSE;
END_IF
END_IF
IF EDGEPOS (ManualCommands.bShaft1MaskPos) THEN
lAxisShaft1.Para.rPosition := rMaskPos;
lAxisShaft1.Move.bAbsolute := TRUE;
END_IF
IF EDGEPOS (ManualCommands.bShaft2MaskPos) THEN
lAxisShaft2.Para.rPosition := rMaskPos;
lAxisShaft2.Move.bAbsolute := TRUE;
END_IF
//Homing Mode
//==========================================================================================
ELSIF (gMachine.enMode = enMACH_HOMEPOS) THEN
//Press
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CASE enStepSSTHoming OF
//Init
//---------------------------
enPressStepHoming_INIT:
enStepSSTHoming := enPressStepHoming_WAIT_START;
//Wait for Start
//---------------------------
enPressStepHoming_WAIT_START:
IF (ManualCommands.bStartHoming OR EDGEPOS (gbInStartProcess)) AND NOT bMachIsInHomepos THEN
bHome :=TRUE;
lAxisShaft1.Para.usHomeingMode := mcHOME_ABSOLUTE;
lAxisShaft2.Para.usHomeingMode := mcHOME_ABSOLUTE;
enStepSSTHoming := enPressStepHoming_REF;
END_IF
//Wait for Reference
//---------------------------
enPressStepHoming_REF:
IF NOT bHome THEN
enStepSSTHoming := enPressStepHoming_MOVE_HOME;
END_IF
//Home Cylinders
//---------------------------
enPressStepHoming_MOVE_HOME:
gbOuAxis1Fw := FALSE;
gbOuAxis1Bw := TRUE;
gbOuAxis2Fw := FALSE;
gbOuAxis2Bw := TRUE;
gbOuGrinderFw := FALSE;
gbOuGrinderBw := TRUE;
IF MoveConditions.bEnableTurnTable THEN
enStepSSTHoming := enPressStepHoming_MOVE_HOME_TT;
END_IF
//Home (Turntable)
//---------------------------
enPressStepHoming_MOVE_HOME_TT:
IF gbInTurnTablePos2 THEN
gbOuTurnFw := FALSE;
gbOuTurnBw := TRUE;
enStepSSTHoming := enPressStepHoming_FW_AX;
ELSE
gbOuTurnFw := TRUE;
gbOuTurnBw := FALSE;
IF gbInTurnTablePos1 THEN
enStepSSTHoming := enPressStepHoming_FW_AX;
END_IF;
END_IF;
//Move Cylinder home
//---------------------------
enPressStepHoming_FW_AX:
gbOuAxis1Fw := gbInTurnTablePos2;
gbOuAxis1Bw := NOT gbInTurnTablePos2;
gbOuAxis2Fw := gbInTurnTablePos1;
gbOuAxis2Bw := NOT gbInTurnTablePos1;
gbOuGrinderFw := TRUE;
gbOuGrinderBw := FALSE;
IF ((gbOuAxis1Fw AND gbInAxis1Fw) OR
(gbOuAxis2Fw AND gbInAxis2Fw)) AND gbInGrinderFw THEN
enStepSSTHoming := enPressStepHoming_DONE;
END_IF;
//Homing Done
//---------------------------
enPressStepHoming_DONE:
gMachine.bRequestHoming := FALSE;
enStepSSTHoming := enPressStepHoming_INIT;
END_CASE
//(Semi) - Automaticmode
//==========================================================================================
ELSIF (gMachine.enMode = enMACH_MANUAL) OR (gMachine.enMode = enMACH_AUTOMATIC) THEN
bEnableNextStep := EDGEPOS (ManualCommands.bNextManStep) OR (gMachine.enMode = enMACH_AUTOMATIC);
//
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CASE enStepSST OF
//Init
//---------------------------
enSSTStep_INIT:
bTransitionCondition := bMachIsInHomepos;
IF bTransitionCondition THEN
enStepSST := enSSTStep_WAIT_START;
END_IF
//Wait for Start
//---------------------------
enSSTStep_WAIT_START:
udCycletime := 0;
bTransitionCondition := (EDGEPOS (gbInStartProcess) OR (gMachine.enMode = enMACH_MANUAL)) AND bSafetyOk ;
IF (bSafetyOkFP OR (bTransitionCondition AND (bEnableNextStep OR gbInStartProcess))) THEN
enStepSST := enSSTStep_AX_BACK;
END_IF
//Achse Einlegepos zur<EFBFBD>ckstellen
//------------------------------
enSSTStep_AX_BACK:
gbOuAxis1Bw := TRUE;
gbOuAxis1Fw := FALSE;
gbOuAxis2Bw := TRUE;
gbOuAxis2Fw := FALSE;
gbOuGrinderFw := FALSE;
gbOuGrinderBw := TRUE;
bTransitionCondition := MoveConditions.bEnableTurnTable;
IF bTransitionCondition THEN
enStepSST := enSSTSTep_TURN;
IF gbInTurnTablePos1 THEN
gbOuTurnBw := TRUE;
gbOuTurnFw := FALSE;
ELSIF gbInTurnTablePos2 THEN
gbOuTurnFw := TRUE;
gbOuTurnBw := FALSE;
END_IF
END_IF
//Tisch drehen und einlege zylinder zustellen
//---------------------------
enSSTSTep_TURN:
bTransitionCondition := (gbInTurnTablePos1 AND gbOuTurnFw) OR(gbInTurnTablePos2 AND gbOuTurnBw);
IF bTransitionCondition THEN
IF gbInTurnTablePos1 THEN
gbOuAxis2Fw := TRUE;
gbOuAxis2Bw := FALSE;
ELSIF gbInTurnTablePos2 THEN
gbOuAxis1Fw := TRUE;
gbOuAxis1Bw := FALSE;
END_IF
enStepSST := enSSTStep_FIND_POS;
lAxisShaft1.Move.bTorqueControl := FALSE;
lAxisShaft1.bStop := 1;
udSteptime := 0;
END_IF
//Find Positon for Axis to hit Cover
//---------------------------
enSSTStep_FIND_POS:
bTransitionCondition := TRUE;
IF gbInTurnTablePos1 THEN
diModPos := REAL_TO_DINT (lAxisShaft1.rActPosition) / 3600;
lAxisShaft1.Para.rPosition := DINT_TO_REAL (diModPos * 3600) + rMaskPos;
lAxisShaft1.Para.rVelocity := 10000;
ELSIF gbInTurnTablePos2 THEN
diModPos := REAL_TO_DINT (lAxisShaft2.rActPosition) / 3600;
lAxisShaft2.Para.rPosition := DINT_TO_REAL (diModPos * 3600) + rMaskPos;
lAxisShaft2.Para.rVelocity := 10000;
END_IF;
bTransitionCondition := (gbInTurnTablePos1 AND MoveConditions.bEnablePosShaft1) OR
(gbInTurnTablePos2 AND MoveConditions.bEnablePosShaft2);
IF bTransitionCondition THEN
lAxisShaft1.Move.bAbsolute := gbInTurnTablePos1;
lAxisShaft2.Move.bAbsolute := gbInTurnTablePos2;
enStepSST := enSSTSTep_WAIT_POS;
END_IF
//Warten bis Blendenpos angefahren
//---------------------------
enSSTSTep_WAIT_POS:
bTransitionCondition := (gbInTurnTablePos1 AND lAxisShaft1.Status.bStandstill) OR
(gbInTurnTablePos2 AND lAxisShaft2.Status.bStandstill);
IF bTransitionCondition THEN
IF gbInTurnTablePos1 THEN
gbOuAxis1Fw := TRUE;
gbOuAxis1Bw := FALSE;
ELSIF gbInTurnTablePos2 THEN
gbOuAxis2Fw := TRUE;
gbOuAxis2Bw := FALSE;
END_IF
lAxisShaft1.Move.bAbsolute := FALSE;
lAxisShaft1.Move.bAbsolute := FALSE;
enStepSST := enSSTStep_AX_FW;
END_IF
//Achse B<EFBFBD>rstpos zur<EFBFBD>ckstellen
//------------------------------
enSSTStep_AX_FW:
gbOuGrinderFw := TRUE;
gbOuGrinderBw := FALSE;
bTransitionCondition := (gbInTurnTablePos1 AND gbInAxis1Fw) OR
(gbInTurnTablePos2 AND gbInAxis2Fw);
IF bTransitionCondition THEN
enStepSST := enSSTStep_START_BRUSH;
END_IF
//B<EFBFBD>rsten starten
//---------------------------
enSSTStep_START_BRUSH:
bTransitionCondition := TRUE;
//FixMe Calc Pos
IF gbInTurnTablePos1 THEN
lAxisShaft1.Para.rPosition := 0;
lAxisShaft1.Para.rVelocity := 5000;
IF bAxis1Reverse THEN
lAxisShaft1.Para.usDirection := mcNEGATIVE_DIR;;
ELSE
lAxisShaft1.Para.usDirection := mcPOSITIVE_DIR;;
END_IF
bAxis1Reverse := NOT bAxis1Reverse;
ELSIF gbInTurnTablePos2 THEN
lAxisShaft2.Para.rPosition := 0;
lAxisShaft2.Para.rVelocity := 5000;
IF bAxis2Reverse THEN
lAxisShaft2.Para.usDirection := mcNEGATIVE_DIR;;
ELSE
lAxisShaft2.Para.usDirection := mcPOSITIVE_DIR;;
END_IF
bAxis2Reverse := NOT bAxis2Reverse;
END_IF
IF bTransitionCondition THEN
lAxisShaft1.Move.bVelocity := gbInTurnTablePos1;
lAxisShaft2.Move.bVelocity := gbInTurnTablePos2;
udSteptime := 0;
enStepSST := enSSTStep_WAIT_BRUSHED;
END_IF
//Warten bis geb<EFBFBD>rstet
//---------------------------
enSSTStep_WAIT_BRUSHED:
bTransitionCondition := (udSteptime >= udBrushtime);
IF bTransitionCondition THEN
lAxisShaft1.Move.bVelocity := FALSE;
lAxisShaft2.Move.bVelocity := FALSE;
IF gbInTurnTablePos1 THEN
lAxisShaft1.bStop := TRUE;
END_IF
IF gbInTurnTablePos2 THEN
lAxisShaft2.bStop := TRUE;
END_IF
IF gbInTurnTablePos1 THEN
gbOuAxis1Fw := FALSE;
gbOuAxis1Bw := TRUE;
ELSIF gbInTurnTablePos2 THEN
gbOuAxis2Fw := FALSE;
gbOuAxis2Bw := TRUE;
END_IF
enStepSST := enSSTStep_AX_BACK_BRUSH;
END_IF
//Warten bis Achse zur<EFBFBD>ck
//---------------------------
enSSTStep_AX_BACK_BRUSH:
bTransitionCondition := ((gbInTurnTablePos1 AND gbInAxis1Bw) OR
(gbInTurnTablePos2 AND gbInAxis2Bw)) AND gbInGrinderFw;
IF bTransitionCondition THEN
enStepSST := enSSTStep_WAIT_START;
lAxisShaft1.bStop := FALSE;
lAxisShaft2.bStop := FALSE;
END_IF;
END_CASE
END_IF;
gbEnableNextStepBtn := bTransitionCondition AND (gMachine.enMode = enMACH_MANUAL);
//Set Ouputs
IF bSafetyOkFP THEN
FOR usi:=100 TO 126 DO
// gMachineAlarms.Alarm[usi] := FALSE;
END_FOR
END_IF
gStatusVCControls.usBtnErrorReset := (lAxisShaft1.Error.uiID = 0);
gbOuLEDStart := ((gMachine.enMode = enMACH_HOMEPOS) AND (enStepSSTHoming = enPressStepHoming_WAIT_START)) OR
((gMachine.enMode = enMACH_AUTOMATIC) AND (enStepSST = enSSTStep_WAIT_START));
TOF_ResetAxisErrors.IN := bSafetyOk;
TOF_ResetAxisErrors.PT := t#3s;
TOF_ResetAxisErrors ();
IF EDGEPOS (gVCCommands.bErrorReset) OR (TOF_ResetAxisErrors.Q AND bBlink0_1) OR EDGEPOS (FALSE) THEN
lAxisShaft1.Error.bAcknowledge := (lAxisShaft1.Error.uiID > 0);
usErrorReset := 0;
END_IF
END_PROGRAM

View File

@@ -0,0 +1,34 @@
PROGRAM _INIT
lAxisShaft1 ACCESS ADR (gAxis[0]);
lAxisShaft2 ACCESS ADR (gAxis[1]);
FUB_AsArLogWrite.ident := arlogBASE_USER_LOG_IDENT;
lAxisShaft1.Para.rAcceleration := 15000;
lAxisShaft1.Para.rDeceleration := 15000;
lAxisShaft1.Para.rJogVelocity := 36000; // [0.1<EFBFBD>/s]
lAxisShaft1.Para.rVelocity := 3960; // [0.1<EFBFBD>/s]
lAxisShaft2.Para.rAcceleration := 15000;
lAxisShaft2.Para.rDeceleration := 15000;
lAxisShaft2.Para.rJogVelocity := 36000; // [0.1<EFBFBD>/s]
lAxisShaft2.Para.rVelocity := 3900; // [0.1<EFBFBD>/s]
lAxisShaft1.Para.usHomeingMode := mcHOME_ABSOLUTE;
lAxisShaft2.Para.usHomeingMode := mcHOME_ABSOLUTE;
gbOuAxis1Bw := gbInAxis1Bw;
gbOuAxis1Fw := gbInAxis1Fw;
gbOuAxis2Bw := gbInAxis2Bw;
gbOuAxis2Fw := gbInAxis2Fw;
gbOuGrinderFw := TRUE;
IF gbInTurnTablePos1 THEN
gbOuTurnFw := TRUE;
gbOuTurnBw := FALSE;
ELSIF gbInTurnTablePos2 THEN
gbOuTurnFw := FALSE;
gbOuTurnBw := TRUE;
END_IF
END_PROGRAM

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.0.14.207?>
<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,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,23 @@
VAR
bBlink0_1 : BOOL;
bBlink0_5 : BOOL;
bBlink1_0 : BOOL;
bBlink2_0 : BOOL;
bBlink5_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 !!!*)
END_VAR
VAR CONSTANT
gAInNull : INT := 0; (*O FOR Analog Input*)
gTrue : BOOL := TRUE; (*Konstant TRUE*)
gFalse : BOOL := FALSE; (*Konstant False*)
gInNull : BOOL := FALSE; (*FALSE FOR Input *)
END_VAR
VAR
gOuNull : BOOL; (*DUMMY for Output*)
END_VAR
VAR CONSTANT
iAIVoltageOverflow : INT := 16#7FFF; (* Analog Input Voltage Mode,Overflow *)
iAIVoltageUnderflow : INT := -32767; (* Analog Input Voltage Underflow *)
END_VAR

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.0.16.81 SP?>
<Package xmlns="http://br-automation.co.at/AS/Package">
<Objects>
<Object Type="File">GlobalCommon.typ</Object>
<Object Type="File">GlobalComon.var</Object>
<Object Type="Program" Language="IEC" Description="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=4.0.14.207?>
<Program xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File Description="Local variables" Private="true">blinker.var</File>
<File Description="Initialization code">blinkerInit.ab</File>
<File Description="Cyclic code">blinkerCyclic.ab</File>
</Files>
</Program>

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.0.16.81 SP?>
<Program xmlns="http://br-automation.co.at/AS/Program">
<Files>
<File Private="true">get_dt.var</File>
<File>get_dtInit.ab</File>
<File>get_dtCyclic.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 + 60 * gDTSActTimeUTC.minute + 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

13
Logical/Global.typ Normal file
View File

@@ -0,0 +1,13 @@
(********************************************************************
* COPYRIGHT --
********************************************************************
* File: Global.typ
* Author: michi
* Created: March 15, 2013
********************************************************************
* Global data types of project franz_boerdel
********************************************************************)
TYPE
END_TYPE

View File

@@ -0,0 +1,13 @@
(********************************************************************
* COPYRIGHT -- kA
********************************************************************
* File: Global.typ
* Author: michi
* Created: August 14, 2009
********************************************************************
* Global data types of project schrauber
********************************************************************)
TYPE
END_TYPE

View File

@@ -0,0 +1,39 @@
(*//ST 2*)
VAR
gbInEStopPressed : BOOL;
gbInStartProcess : BOOL;
gbInEStopOk : BOOL; (*Nothaltkreis Ok*)
gbInSafetyChainOk : BOOL; (*Sicherheitskreis gesamt Ok*)
END_VAR
(*//ST3*)
VAR
gbOuLEDEStop : BOOL;
gbOuLEDStart : BOOL;
END_VAR
(*//ST5 XV-Valves*)
VAR
gbOuTurnFw : BOOL; (*Drehtisch rechts*)
gbOuTurnBw : BOOL; (*Drehtisch links*)
gbOuAxis1Fw : BOOL; (*Achse 1 Ausfahren*)
gbOuAxis1Bw : BOOL; (*Achse 1 Einfahren*)
gbOuAxis2Fw : BOOL; (*Achse 2 Ausfahren*)
gbOuAxis2Bw : BOOL; (*Achse 2 Einfahren*)
gbOuGrinderFw : BOOL; (*Schleifvlies Ausfahren*)
gbOuGrinderBw : BOOL; (*Schleifvlies Einfahren*)
END_VAR
(*//ST6 Machine Inputs*)
VAR
gbInTurnTablePos1 : BOOL; (*Drehtisch Pos 1*)
gbInTurnTablePos2 : BOOL; (*Drehtisch Pos 1*)
gbInAxis1Fw : BOOL; (*Achse 1 Zustellhub AS*)
gbInAxis1Bw : BOOL; (*Achse 1 Zustellhub GS*)
gbInAxis2Fw : BOOL; (*Achse 2 Zustellhub AS*)
gbInAxis2Bw : BOOL; (*Achse 2 Zustellhub GS*)
gbInGrinderFw : BOOL; (*Schleifvlies Zustellhub AS*)
gbInGrinderBw : BOOL; (*Schleifvlies Zustellhub GS*)
gbInMaskPosMid : BOOL; (*Schleifblende Pos Mitte*)
gbInMaskPosNeg0 : BOOL; (*Schleifblende Pos 0 Negativ*)
gbInMaskPosPos0 : BOOL; (*Schleifblende Pos 0 Positiv*)
gbInMaskPosNeg1 : BOOL; (*Schleifblende Pos 1 Negativ*)
gbInMaskPosPos1 : BOOL; (*Schleifblende Pos 1 Positiv*)
END_VAR

View File

@@ -0,0 +1,8 @@
<?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="Global data types">Global.typ</Object>
<Object Type="File" Description="Global variables">Global.var</Object>
</Objects>
</Package>

View File

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

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,197 @@
VAR CONSTANT
mc5TH_ORDER_POLYNOMIAL : UINT := 4; (*motion rule*)
mcABOVE_WINDOW : USINT := 40; (*trigger event mode*)
mcABSOLUTE : USINT := 0; (*start mode*)
mcABSOLUTE_NO_RESET : USINT := 2; (*definition for the shift input of MC_BR_Offset and MC_BR_Phasing*)
mcACKNOWLEDGE_ALL : UINT := 2; (*acknowledge all error records immediately*)
mcACT_CFG : UINT := 1;
mcADD_DATE_TIME : UINT := 1; (*additional data object type*)
mcALL_AXES : UDINT := 16#FFFFFFFF;
mcALL_EVENTS : USINT := 255; (*event index*)
mcALL_PARAMS : USINT := 0; (*parameter index*)
mcALL_STATES : USINT := 255; (*state index*)
mcAUTOMAT_POS : USINT := 100; (*additional movement direction*)
mcAVERAGE : UINT := 2;
mcAVERAGE_WEIGHTED : UINT := 4;
mcAXIS_ERROR : USINT := 0;
mcAXIS_WARNING : USINT := 1;
mcBASIS_PARAMETERS : REAL := 2.0; (*Option for DefaultMoveParameter*)
mcBELOW_WINDOW : USINT := 50; (*trigger event mode*)
mcBESTFIT_5TH_ORDER : UINT := 1024; (*interpolation rule*)
mcBESTFIT_6TH_ORDER : UINT := 1280; (*interpolation rule*)
mcBLANK : UINT := 0;
mcBRAKE_CONTROL_INIT : USINT := 8; (*brake command*)
mcBRAKE_TEST_INIT : USINT := 2; (*brake command*)
mcBRAKE_TEST_START : USINT := 4; (*brake command*)
mcCALCULATION : UINT := 11; (*setup mode*)
mcCATCH_UP : USINT := 4; (*synchronization mode*)
mcCHECK : UINT := 1; (*mode for automat compensation check*)
mcCHECK_HOMING_OFF : USINT := 1; (*disable homing check*)
mcCLOSE : USINT := 0;
mcCONTINUE_CONTROLLER_OFF : UINT := 128; (* continue if controller is off *)
mcCORRECT_CURRENT_CYCLE : UINT := 32768; (*additive StartMode for MC_BR_CrossCutterControl*)
mcCUBIC_SPLINE : UINT := 256; (*interpolation rule*)
mcCURRENT_DIR : USINT := 2; (*movement direction*)
mcCYCLIC : UINT := 2; (*event move mode*)
mcCYCLIC_ALL_EVENTS : UINT := 3; (*event move mode*)
mcDATOBJ : UINT := 0; (*data object type*)
mcDIRECT : USINT := 7; (*start mode*)
mcDISTANCE_BASED : UINT := 0; (*basis for cam movement (e.g. for MC_BR_CamTransition)*)
mcDITHER : USINT := 32; (*setup mode*)
mcEDGE_SENSITIVE : USINT := 4; (*additional mode for trigger event*)
mcENCODER : USINT := 0; (*setup mode*)
mcEQUAL : UINT := 2;
mcEVERY_RECORD : UINT := 1; (*mode for MC_BR_CyclicRead*)
mcEXCEED_PERIOD : USINT := 8; (*movement direction*)
mcFB_ERROR : USINT := 2;
mcFB_INPUTS : REAL := 255.0; (*option for DefaultMoveParameters*)
mcFF : USINT := 32; (*setup, torque mode*)
mcFF_NEG_MOVE : UINT := 34; (*setup mode*)
mcFF_POS_MOVE : UINT := 33; (*setup mode*)
mcFILE : UINT := 1; (*data object type*)
mcFILE_BIN : UINT := 0; (*binary format*)
mcFILE_CSV : UINT := 1; (*CSV format*)
mcFILE_TXT : UINT := 2; (*text format*)
mcFIRST_TRIGGER : UINT := 2;
mcFLUX : USINT := 1; (*setup mode*)
mcGE : UINT := 6;
mcGET_BRAKE_STATUS : USINT := 16; (*brake command*)
mcGREATER : UINT := 4;
mcHARMONIC_COMBINATION : UINT := 8; (*motion rule*)
mcHOLDOFF_DISTANCE : UINT := 16384;
mcHOME_ABS_SWITCH : USINT := 2; (*homing mode*)
mcHOME_ABSOLUTE : USINT := 4; (*homing mode*)
mcHOME_ABSOLUTE_CORR : USINT := 6; (*homing mode*)
mcHOME_AXIS_REF : USINT := 12; (*homing mode *)
mcHOME_BLOCK_DS : USINT := 14; (*homing mode *)
mcHOME_BLOCK_TORQUE : USINT := 13; (*homing mode *)
mcHOME_DCM : USINT := 9; (*homing mode*)
mcHOME_DCM_CORR : USINT := 10; (*homing mode*)
mcHOME_DEFAULT : USINT := 0; (*homing mode*)
mcHOME_DIRECT : USINT := 1; (*homing mode*)
mcHOME_LIMIT_SWITCH : USINT := 3; (*homing mode*)
mcHOME_REF_PULSE : USINT := 5; (*homing mode*)
mcHOME_RESTORE_POS : USINT := 11; (*homing mode*)
mcHOME_SET_PHASE : USINT := 7; (*homing mode*)
mcHOME_SWITCH_GATE : USINT := 8; (*homing mode*)
mcHORIZONTAL : USINT := 0; (*setup option for controller setup*)
mcIDENTIFICATION : UINT := 10; (*setup mode *)
mcIMMEDIATE : UINT := 0; (*mode for MC_BR_RegMarkCalc001, StartMode for MC_BR_CrossCutterControl, *)
mcIN_WINDOW : USINT := 20; (*trigger event mode*)
mcINCLINED_SINE_CURVE : UINT := 5; (*motion rule*)
mcINTERVAL_EVENT : UINT := 16;
mcIPL_LINEAR : USINT := 1; (*interpolation mode*)
mcIPL_OFF : USINT := 0; (*interpolation mode*)
mcIPL_QUADRATIC : USINT := 2; (*interpolation mode*)
mcIPL_QUADRATIC_NO_OVERSHOOT : USINT := 4; (*interpolation mode*)
mcISQ_F1_NOTCH : UINT := 128; (*setup mode*)
mcISQ_F2_NOTCH : UINT := 256; (*setup mode*)
mcISQ_F3_NOTCH : UINT := 512; (*setup mode*)
mcISQ_RIPPLE : UINT := 20; (*setup mode*)
mcLAST_POINT : UINT := 0; (*motion rule*)
mcLEAD_IN : UINT := 2;
mcLEAD_OUT : UINT := 4;
mcLENGTH_ONLY : UINT := 32;
mcLIMIT : USINT := 40; (*torque mode*)
mcLIMIT_PARAMETERS : REAL := 1.0; (*option for DefaultMoveParameters*)
mcLINEAR_CAM : USINT := 253; (*predefined 1:1 cam profile for MC_BR_CamDwell*)
mcLINEAR_CAM_NON_PERIODIC : USINT := 254; (*for predifined 1:1 cam profile*)
mcLINEAR_CAM_PERIODIC : USINT := 255; (*for predefined 1:1 cam profile*)
mcLOAD : UINT := 276; (*trace command*)
mcMANUAL_SEARCH : UINT := 64;
mcMASTER_DISTANCE_BASED : UINT := 3; (*basis for movement profile (e.g. for MC_BR_Offset or MC_BR_Phasing)*)
mcMASTER_POSITION : UINT := 256; (*additional basis for movement profile (e.g. for MC_BR_Offset), StartMode for MC_BR_CrossCutterControl*)
mcMASTER_POSITION_BASED : UINT := 2; (*basis for movement profile (e.g. for MC_BR_Offset or MC_BR_Phasing)*)
mcMAX_IV_TIME : USINT := 8; (*additional mode for power evaluation*)
mcMAX_SLAVE_COMP_DISTANCE_NEG : UINT := 4; (*mode for automat compensation check*)
mcMAX_SLAVE_COMP_DISTANCE_POS : UINT := 3; (*mode for automat compensation check*)
mcMIDDLE : USINT := 5;
mcMIN_MASTER_COMP_DISTANCE : UINT := 2; (*mode for automat compensation check*)
mcMODIFIED_ACCEL_TRAPEZOID : UINT := 6; (*motion rule*)
mcMODIFIED_SINE_CURVE : UINT := 7; (*motion rule*)
mcMOTOR : UINT := 258; (*switch on simulation mode*)
mcMULTI_AXIS_TRACE : UDINT := 0; (*parameter trace type*)
mcN_EDGE : USINT := 1;
mcNEGATIVE_DIR : USINT := 1; (*movement direction*)
mcNET_TRACE_GLOBAL : UDINT := 0; (*network trace type*)
mcNO_CHANGE_COMP : USINT := 2;
mcNO_EVENTS : USINT := 253; (*event index*)
mcNO_PARAMS : USINT := 253; (*parameter index*)
mcNO_POSITION : USINT := 0;
mcNO_START_COMP : USINT := 1;
mcNO_TEXT : UINT := 0; (*no error text determination active*)
mcNON_PERIODIC : BOOL := FALSE; (*cam profile mode*)
mcNOT_AXIS_RELATED : UDINT := 16#FFFFFFFF;
mcNULL : UINT := 1;
mcOFF : BOOL := FALSE;
mcON : BOOL := TRUE;
mcONCE : UINT := 1;
mcONE_RECORD : UINT := 0; (*mode for MC_BR_CyclicRead*)
mcONLY_EVENTS : USINT := 254; (*event index*)
mcONLY_PSM : USINT := 1; (*power evaluation mode*)
mcOPEN : USINT := 1;
mcOPTIMIZED_ACCELERATION : UINT := 768; (*interpolation rule*)
mcOPTIMIZED_VELOCITY : UINT := 512; (*interpolation rule*)
mcOUT_WINDOW : USINT := 30; (*trigger event mode*)
mcP_EDGE : USINT := 0;
mcPERIODIC : BOOL := TRUE; (*cam profile mode*)
mcPOSITION : USINT := 1; (*setup mode*)
mcPOSITIVE_DIR : USINT := 0; (*movement direction*)
mcQUADRATIC_PARABOLA : UINT := 2; (*motion rule*)
mcQUEUED : UINT := 1;
mcRELATIVE : USINT := 1; (*start mode*)
mcRESET : UINT := 320; (*trace command*)
mcRESTART : UINT := 273; (*StartMode for MC_BR_CrossCutterControl*)
mcREVERSE : UINT := 8;
mcSATURATION : USINT := 30; (*setup mode*)
mcSAVE : UINT := 341; (*trace command*)
mcSE : UINT := 3;
mcSET_OFFSET : USINT := 34; (*setup mode*)
mcSHIFT_FROM_EXPECTED : UINT := 50; (*input for MC_BR_TouchProbe*)
mcSHIFT_FROM_RESULT : UINT := 49; (*input for MC_BR_TouchProbe*)
mcSHORTEST_WAY : USINT := 3; (*synchronization mode, movement direction*)
mcSIMPLE_SINE_CURVE : UINT := 3; (*motion rule*)
mcSIMULATION_OFF : UINT := 259; (*switch off simulation mode*)
mcSLAVE_POSITION : UINT := 0; (*additional basis for movement profile (e.g. for MC_BR_Offset)*)
mcSLOW_DOWN : USINT := 5; (*synchronization mode*)
mcSMALLER : UINT := 1;
mcSPEED : USINT := 2; (*setup mode*)
mcSTART : UINT := 260;
mcSTART_ONLY : USINT := 3; (*power evaluation mode*)
mcSTEPPER : USINT := 31; (*setup mode*)
mcSTOP : UINT := 261;
mcSTRAIGHT_LINE : UINT := 1; (*motion rule*)
mcSW_END_ACTIVE : REAL := 0.0; (*SW end monitoring mode*)
mcSW_END_IGNORE : REAL := 1.0; (*SW end monitoring mode*)
mcSW_END_SPF : REAL := 2.0; (*SW end monitoring mode*)
mcSWITCH_OFF : UINT := 259; (*trace command*)
mcSWITCH_ON : UINT := 258; (*trace command*)
mcT_FILTER : UINT := 64; (*setup mode*)
mcTEST : UINT := 31; (*setup mode*)
mcTEXT : UINT := 1; (*error text determination active*)
mcTIME_BASED : UINT := 1; (*basis for movement profile (e.g. for MC_BR_Offset or MC_BR_Phasing)*)
mcTIME_LIMIT : USINT := 8; (*enable time dependent switch off of function*)
mcTRACE_DELAY : USINT := 6; (*trace status*)
mcTRACE_FINISHED : USINT := 1; (*trace status*)
mcTRACE_REST : USINT := 5; (*trace status*)
mcTRACE_RING : USINT := 4; (*trace status*)
mcTRACE_STARTED : USINT := 20; (*trace status*)
mcTRACE_TIME : USINT := 2; (*trace status*)
mcTRACE_TRIGGER : USINT := 3; (*trace status*)
mcTRANSITION_OFF : UINT := 0;
mcTRANSITION_ON : UINT := 1;
mcUNEQUAL : UINT := 5;
mcUPDATE_PERIOD : UINT := 16#8000; (*input for MC_BR_TouchProbe*)
mcUSE_AXIS_PERIOD : UINT := 16#4000; (*input for MC_BR_TouchProbe*)
mcUSE_FILTER_PAR : UINT := 4; (*setup mode *)
mcUSE_FIRST_TRIGGER_POS : UINT := 64; (*additional input for MC_BR_TouchProbe*)
mcUSE_STOP_COMP : USINT := 4;
mcV_LIMIT_CALC : USINT := 4; (*recalculate speed limit depending on user setting*)
mcV_LIMIT_OFF : USINT := 2; (*disable speed limit*)
mcVELOCITY_CONTROL : UINT := 4; (*basis for movement profile (e.g. for MC_BR_Offset or MC_BR_Phasing)*)
mcVERTICAL : USINT := 1; (*setup option for controller setup*)
mcWITH_PARAM : USINT := 2; (*power evaluation mode*)
mcWITHIN_PERIOD : USINT := 6; (*synchronization mode*)
mcWITHOUT_PERIOD : UINT := 4; (*input for MC_BR_TouchProbe*)
mcWRAP : UINT := 2;
END_VAR

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

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

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

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

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -0,0 +1,133 @@
(********************************************************************
* COPYRIGHT -- Bernecker + Rainer
********************************************************************
* Library: AsArLog
* File: AsArLog.fun
* Author: B+R
********************************************************************
* Functions and function blocks of library AsArLog
********************************************************************)
FUNCTION_BLOCK AsArLogCreate (*creates an AR logger user module; asynchronous execution*)
VAR_INPUT
enable : BOOL; (*enables execution*)
pName : UDINT; (*name of the AR logger user module to be created give as a pointer, e.g. "vclog".*)
len : UDINT; (*length of the log data area*)
memType : UDINT; (*memory type on the target: arlogDRAM, arlogUSRRAM, arlogUSRROM*)
END_VAR
VAR
intResult : UDINT; (*internal variable*)
intState : UDINT; (*internal variable*)
intRes : UDINT; (*internal variable*)
END_VAR
VAR_OUTPUT
status : UINT; (*execution status: ERR_OK, ERR_FUB_ENABLE_FALSE, ERR_FUB_BUSY, 0xXXXX = see help*)
ident : UDINT; (*ident of the AR logger basis module to be generated*)
END_VAR
END_FUNCTION_BLOCK
FUNCTION_BLOCK AsArLogDelete (*deletes an AR logger user module; asynchronous execution*)
VAR_INPUT
enable : BOOL; (*enables execution*)
ident : UDINT; (*ident of the AR logger user module to be deleted*)
END_VAR
VAR
intResult : UDINT; (*internal variable*)
intState : UDINT; (*internal variable*)
intRes : UDINT; (*internal variable*)
END_VAR
VAR_OUTPUT
status : UINT; (*execution status: ERR_OK, ERR_FUB_ENABLE_FALSE, ERR_FUB_BUSY, 0xXXXX = see help*)
END_VAR
END_FUNCTION_BLOCK
FUNCTION_BLOCK AsArLogWrite (*writes a log entry to a AR logger user module; asynchronous execution*)
VAR_INPUT
enable : BOOL; (*enables execution*)
ident : UDINT; (*ident for the AR logger module to be written (user module or base module)*)
logLevel : UDINT; (*log level of the log entry*)
errornr : UDINT; (*error number of the entry*)
mem : UDINT; (*binary log data given as a pointer*)
len : UDINT; (*length of the binary log data in bytes*)
asciiString : UDINT; (*log-specific zero-terminated ASCII string give as a pointer*)
END_VAR
VAR
intResult : UDINT; (*internal variable*)
intState : UDINT; (*internal variable*)
intRes : UDINT; (*internal variable*)
intTaskName : ARRAY[0..35] OF USINT; (*internal variable*)
intRtkTime : ARRAY[0..3] OF UDINT; (*internal variable*)
END_VAR
VAR_OUTPUT
status : UINT; (*execution status: ERR_OK, ERR_FUB_ENABLE_FALSE, ERR_FUB_BUSY, 0xXXXX = see help*)
END_VAR
END_FUNCTION_BLOCK
FUNCTION_BLOCK AsArLogRead (*reads a log entry from a AR logger module; asynchronous execution*)
VAR_INPUT
enable : BOOL; (*enables execution*)
ident : UDINT; (*ident for the AR logger module to be read (user module or base module)*)
index : UDINT; (*index of the log entry to be read*)
arlogRead : UDINT; (*specifies read structure (given as a pointer) where the header data for the log entry can be copied*)
memBin : UDINT; (*buffer for binary log data given as a pointer (if NULL, no binary log data is copied)*)
lenBin : UDINT; (*number of binary log data bytes to be read (if NULL, no binary log data is copied)*)
memAscii : UDINT; (*buffer for ASCII string given as a pointer*)
lenAscii : UDINT; (*number of bytes to be read for the ASCII string*)
END_VAR
VAR
intResult : UDINT; (*internal variable*)
intState : UDINT; (*internal variable*)
intRes : UDINT; (*internal variable*)
END_VAR
VAR_OUTPUT
status : UINT; (*execution status: ERR_OK, ERR_FUB_ENABLE_FALSE, ERR_FUB_BUSY, 0xXXXX = see help*)
END_VAR
END_FUNCTION_BLOCK
FUNCTION_BLOCK AsArLogClear (*deletes or reinitializes the log data in an AR logger user module; asynchronous execution*)
VAR_INPUT
enable : BOOL; (*enables execution*)
ident : UDINT; (*ident of the AR logger user module to be reinitialized*)
END_VAR
VAR
intResult : UDINT; (*internal variable*)
intState : UDINT; (*internal variable*)
intRes : UDINT; (*internal variable*)
END_VAR
VAR_OUTPUT
status : UINT; (*execution status: ERR_OK, ERR_FUB_ENABLE_FALSE, ERR_FUB_BUSY, 0xXXXX = see help*)
END_VAR
END_FUNCTION_BLOCK
FUNCTION_BLOCK AsArLogGetInfo (*reads information from a self-generated AR logger user module or AR logger base user module*)
VAR_INPUT
enable : BOOL; (*enables execution*)
pName : UDINT; (*name of the AR logger user module (e.g. "vclog") given as a pointer*)
END_VAR
VAR
intResult : UDINT; (*internal variable*)
intState : UDINT; (*internal variable*)
intRes : UDINT; (*internal variable*)
END_VAR
VAR_OUTPUT
status : UINT; (*execution status: ERR_OK, ERR_FUB_ENABLE_FALSE, 0xXXXX = see help*)
ident : UDINT; (*ident of the AR logger BR module*)
len : UDINT; (*length of the log data area*)
memType : UDINT; (*memory type on the target*)
actualIndex : UDINT; (*current entry index in the specified AR logger BR module*)
FormatVer : UDINT; (*version of de log data format*)
END_VAR
END_FUNCTION_BLOCK

View File

@@ -0,0 +1,29 @@
(********************************************************************
* COPYRIGHT -- Bernecker + Rainer
********************************************************************
* Library: AsArLog
* File: AsArLog.typ
* Author: B+R
********************************************************************
* Data types of library AsArLog
********************************************************************)
TYPE
asarlogRead : STRUCT
len : UDINT; (*length of the entire log entry (header + binary log data + ASCII string)*)
lenBin : UDINT; (*length of the binary log data*)
lenAscii : UDINT; (*length of the ASCII log data*)
logLevel : UDINT; (*log level of the log entry*)
errornr : UDINT; (*error number of the entry*)
taskName : ARRAY[0..35] OF USINT; (*task name*)
errYear : UDINT; (*year (date of error)*)
errMonth : UDINT; (*month (date of error)*)
errDay : UDINT; (*day (date of error)*)
errHour : UDINT; (*hour (time of error)*)
errMinute : UDINT; (*minute (time of error)*)
errSecond : UDINT; (*second (time of error)*)
errMilliSec : UDINT; (*millisecond (time of error)*)
errMicroSec : UDINT; (*microsecond (time of error)*)
END_STRUCT;
END_TYPE

View File

@@ -0,0 +1,53 @@
(********************************************************************
* COPYRIGHT -- Bernecker + Rainer
********************************************************************
* Library: AsArLog
* File: AsArLog.var
* Author: B+R
********************************************************************
* Local variables of library AsArLog
********************************************************************)
VAR CONSTANT
arlogDRAM : USINT := 65; (*temporary AR log modules (DRAM)*)
arlogUSRRAM : USINT := 3; (*USERRAM*)
arlogUSRROM : USINT := 2; (*USERROM (USER FLASH)*)
arlogLEVEL_INFO : UDINT := 1; (*log level INFO*)
arlogLEVEL_WARNING : UDINT := 2; (*log level WARNING*)
arlogLEVEL_FATAL : UDINT := 3; (*log level FATAL*)
arlogMIN_LOGDATA_SIZE : UINT := 4096; (*minimum log data size of 4 KB*)
arlogBASE_SYSTEM_LOG_IDENT : UDINT := 0; (*fixed ID for the "$arlogsys" base system module*)
arlogBASE_USER_LOG_IDENT : UDINT := 1; (*fixed ID for the "$arlogusr" base user module*)
arlogBASE_FIELDBUS_LOG_IDENT : UDINT := 2; (*fixed ID for the "fieldbus" logger module*)
arlogBASE_SAFETY_LOG_IDENT : UDINT := 3; (*fixed ID for the "safety" logger module*)
arlogERR_ILL_NAME : UINT := 31400; (*incorrect or invalid name*)
arlogERR_ILL_MEMTYPE : UINT := 31401; (*incorrect memory type*)
arlogERR_ILL_LOGLEVEL : UINT := 31402; (*invalid log level (only arlogLEVEL_INFO, arlogLEVEL_WARNING, and arlogLEVEL_FATAL valid)*)
arlogERR_ILL_PARAM : UINT := 31403; (*invalid parameters specified*)
arlogERR_ILL_LEN : UINT := 31404; (*incorrect log data length. Must be >= arlogMIN_LOGDATA_SIZE (4096 bytes)*)
arlogERR_EXISTING : UINT := 31405; (*log module already exists*)
arlogERR_CREATE : UINT := 31406; (*general create error (create failed)*)
arlogERR_INSTALL : UINT := 31407; (*install error for AsArLogCreate*)
arlogERR_ACCESS_DENIED : UINT := 31408; (*cannot access the "$arlogsys" and "$arlogusr" base log modules*)
arlogERR_IN_ACCESS : UINT := 31409; (*access denied since other critical FBK simultaneously active*)
arlogERR_INVALID_IDENT : UINT := 31410; (*invalid ident specified*)
arlogERR_DELETE : UINT := 31411; (*general delete error (delete failed)*)
arlogERR_NOMEMORY : UINT := 31412; (*not enough buffer to copy*)
arlogERR_NOTEXISTING : UINT := 31416; (*AR log module doesn't exist*)
arlogERR_WRITE : UINT := 31417; (*general write error (write failed)*)
arlogERR_WRITE_CALC_DATA : UINT := 31418; (*error calculating referencing index*)
arlogERR_READ : UINT := 31419; (*general read error (read failed)*)
arlogERR_READ_BUFFER : UINT := 31420; (*invalid buffer specified*)
arlogERR_INVALID_INDEX : UINT := 31421; (*invalid index (smaller than the reference index and larger than the current index)*)
arlogERR_INVALID_ENTRY : UINT := 31422; (*invalid log entry read*)
arlogERR_READ_BINARY_BUFFER : UINT := 31423; (*buffer length for binary data too small*)
arlogERR_READ_ASCII_BUFFER : UINT := 31424; (*buffer length for ASCII data too small*)
arlogERR_NO_MORE_ENTRY : UINT := 31425; (*FBK still working*)
END_VAR

View File

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

View File

@@ -0,0 +1,234 @@
/* Automation Studio generated header file */
/* Do not edit ! */
#ifndef _ASARLOG_
#define _ASARLOG_
#ifdef __cplusplus
extern "C"
{
#endif
#include <bur/plctypes.h>
#include <runtime.h>
#ifndef _IEC_CONST
#define _IEC_CONST _WEAK const
#endif
/* Constants */
#ifdef _REPLACE_CONST
#define arlogERR_NO_MORE_ENTRY 31425U
#define arlogERR_READ_ASCII_BUFFER 31424U
#define arlogERR_READ_BINARY_BUFFER 31423U
#define arlogERR_INVALID_ENTRY 31422U
#define arlogERR_INVALID_INDEX 31421U
#define arlogERR_READ_BUFFER 31420U
#define arlogERR_READ 31419U
#define arlogERR_WRITE_CALC_DATA 31418U
#define arlogERR_WRITE 31417U
#define arlogERR_NOTEXISTING 31416U
#define arlogERR_NOMEMORY 31412U
#define arlogERR_DELETE 31411U
#define arlogERR_INVALID_IDENT 31410U
#define arlogERR_IN_ACCESS 31409U
#define arlogERR_ACCESS_DENIED 31408U
#define arlogERR_INSTALL 31407U
#define arlogERR_CREATE 31406U
#define arlogERR_EXISTING 31405U
#define arlogERR_ILL_LEN 31404U
#define arlogERR_ILL_PARAM 31403U
#define arlogERR_ILL_LOGLEVEL 31402U
#define arlogERR_ILL_MEMTYPE 31401U
#define arlogERR_ILL_NAME 31400U
#define arlogBASE_SAFETY_LOG_IDENT 3U
#define arlogBASE_FIELDBUS_LOG_IDENT 2U
#define arlogBASE_USER_LOG_IDENT 1U
#define arlogBASE_SYSTEM_LOG_IDENT 0U
#define arlogMIN_LOGDATA_SIZE 4096U
#define arlogLEVEL_FATAL 3U
#define arlogLEVEL_WARNING 2U
#define arlogLEVEL_INFO 1U
#define arlogUSRROM 2U
#define arlogUSRRAM 3U
#define arlogDRAM 65U
#else
_IEC_CONST unsigned short arlogERR_NO_MORE_ENTRY = 31425U;
_IEC_CONST unsigned short arlogERR_READ_ASCII_BUFFER = 31424U;
_IEC_CONST unsigned short arlogERR_READ_BINARY_BUFFER = 31423U;
_IEC_CONST unsigned short arlogERR_INVALID_ENTRY = 31422U;
_IEC_CONST unsigned short arlogERR_INVALID_INDEX = 31421U;
_IEC_CONST unsigned short arlogERR_READ_BUFFER = 31420U;
_IEC_CONST unsigned short arlogERR_READ = 31419U;
_IEC_CONST unsigned short arlogERR_WRITE_CALC_DATA = 31418U;
_IEC_CONST unsigned short arlogERR_WRITE = 31417U;
_IEC_CONST unsigned short arlogERR_NOTEXISTING = 31416U;
_IEC_CONST unsigned short arlogERR_NOMEMORY = 31412U;
_IEC_CONST unsigned short arlogERR_DELETE = 31411U;
_IEC_CONST unsigned short arlogERR_INVALID_IDENT = 31410U;
_IEC_CONST unsigned short arlogERR_IN_ACCESS = 31409U;
_IEC_CONST unsigned short arlogERR_ACCESS_DENIED = 31408U;
_IEC_CONST unsigned short arlogERR_INSTALL = 31407U;
_IEC_CONST unsigned short arlogERR_CREATE = 31406U;
_IEC_CONST unsigned short arlogERR_EXISTING = 31405U;
_IEC_CONST unsigned short arlogERR_ILL_LEN = 31404U;
_IEC_CONST unsigned short arlogERR_ILL_PARAM = 31403U;
_IEC_CONST unsigned short arlogERR_ILL_LOGLEVEL = 31402U;
_IEC_CONST unsigned short arlogERR_ILL_MEMTYPE = 31401U;
_IEC_CONST unsigned short arlogERR_ILL_NAME = 31400U;
_IEC_CONST unsigned long arlogBASE_SAFETY_LOG_IDENT = 3U;
_IEC_CONST unsigned long arlogBASE_FIELDBUS_LOG_IDENT = 2U;
_IEC_CONST unsigned long arlogBASE_USER_LOG_IDENT = 1U;
_IEC_CONST unsigned long arlogBASE_SYSTEM_LOG_IDENT = 0U;
_IEC_CONST unsigned short arlogMIN_LOGDATA_SIZE = 4096U;
_IEC_CONST unsigned long arlogLEVEL_FATAL = 3U;
_IEC_CONST unsigned long arlogLEVEL_WARNING = 2U;
_IEC_CONST unsigned long arlogLEVEL_INFO = 1U;
_IEC_CONST unsigned char arlogUSRROM = 2U;
_IEC_CONST unsigned char arlogUSRRAM = 3U;
_IEC_CONST unsigned char arlogDRAM = 65U;
#endif
/* Datatypes and datatypes of function blocks */
typedef struct asarlogRead
{ unsigned long len;
unsigned long lenBin;
unsigned long lenAscii;
unsigned long logLevel;
unsigned long errornr;
unsigned char taskName[36];
unsigned long errYear;
unsigned long errMonth;
unsigned long errDay;
unsigned long errHour;
unsigned long errMinute;
unsigned long errSecond;
unsigned long errMilliSec;
unsigned long errMicroSec;
} asarlogRead;
typedef struct AsArLogCreate
{
/* VAR_INPUT (analog) */
unsigned long pName;
unsigned long len;
unsigned long memType;
/* VAR_OUTPUT (analog) */
unsigned short status;
unsigned long ident;
/* VAR (analog) */
unsigned long intResult;
unsigned long intState;
unsigned long intRes;
/* VAR_INPUT (digital) */
plcbit enable;
} AsArLogCreate_typ;
typedef struct AsArLogDelete
{
/* VAR_INPUT (analog) */
unsigned long ident;
/* VAR_OUTPUT (analog) */
unsigned short status;
/* VAR (analog) */
unsigned long intResult;
unsigned long intState;
unsigned long intRes;
/* VAR_INPUT (digital) */
plcbit enable;
} AsArLogDelete_typ;
typedef struct AsArLogWrite
{
/* VAR_INPUT (analog) */
unsigned long ident;
unsigned long logLevel;
unsigned long errornr;
unsigned long mem;
unsigned long len;
unsigned long asciiString;
/* VAR_OUTPUT (analog) */
unsigned short status;
/* VAR (analog) */
unsigned long intResult;
unsigned long intState;
unsigned long intRes;
unsigned char intTaskName[36];
unsigned long intRtkTime[4];
/* VAR_INPUT (digital) */
plcbit enable;
} AsArLogWrite_typ;
typedef struct AsArLogRead
{
/* VAR_INPUT (analog) */
unsigned long ident;
unsigned long index;
unsigned long arlogRead;
unsigned long memBin;
unsigned long lenBin;
unsigned long memAscii;
unsigned long lenAscii;
/* VAR_OUTPUT (analog) */
unsigned short status;
/* VAR (analog) */
unsigned long intResult;
unsigned long intState;
unsigned long intRes;
/* VAR_INPUT (digital) */
plcbit enable;
} AsArLogRead_typ;
typedef struct AsArLogClear
{
/* VAR_INPUT (analog) */
unsigned long ident;
/* VAR_OUTPUT (analog) */
unsigned short status;
/* VAR (analog) */
unsigned long intResult;
unsigned long intState;
unsigned long intRes;
/* VAR_INPUT (digital) */
plcbit enable;
} AsArLogClear_typ;
typedef struct AsArLogGetInfo
{
/* VAR_INPUT (analog) */
unsigned long pName;
/* VAR_OUTPUT (analog) */
unsigned short status;
unsigned long ident;
unsigned long len;
unsigned long memType;
unsigned long actualIndex;
unsigned long FormatVer;
/* VAR (analog) */
unsigned long intResult;
unsigned long intState;
unsigned long intRes;
/* VAR_INPUT (digital) */
plcbit enable;
} AsArLogGetInfo_typ;
/* Prototyping of functions and function blocks */
void AsArLogCreate(struct AsArLogCreate* inst);
void AsArLogDelete(struct AsArLogDelete* inst);
void AsArLogWrite(struct AsArLogWrite* inst);
void AsArLogRead(struct AsArLogRead* inst);
void AsArLogClear(struct AsArLogClear* inst);
void AsArLogGetInfo(struct AsArLogGetInfo* inst);
#ifdef __cplusplus
};
#endif
#endif /* _ASARLOG_ */

View File

@@ -0,0 +1,81 @@
(********************************************************************
* COPYRIGHT -- Bernecker + Rainer
********************************************************************
* Library: AsBrMath
* File: AsBrMath.fun
* Author: B+R
********************************************************************
* Functions and function blocks of library AsBrMath
********************************************************************)
FUNCTION brmatan2 : REAL (*calculates the arc tangent of y/x*)
VAR_INPUT
y :REAL; (*y*)
x :REAL; (*x*)
END_VAR
END_FUNCTION
FUNCTION brmceil : REAL (*calculates the smallest integer value which is greater than or equal to the input value*)
VAR_INPUT
x :REAL; (*input value*)
END_VAR
END_FUNCTION
FUNCTION brmcosh : REAL (*calculates the hyperbolic cosine of x*)
VAR_INPUT
x :REAL; (*input value*)
END_VAR
END_FUNCTION
FUNCTION brmfloor : REAL (*calculates the largest integer value which is less than or equal to the input value*)
VAR_INPUT
x :REAL; (*input value*)
END_VAR
END_FUNCTION
FUNCTION brmfmod : REAL (*calculates the remainder of the division x/y*)
VAR_INPUT
x :REAL; (*numerator*)
y :REAL; (*denominator*)
END_VAR
END_FUNCTION
FUNCTION brmfrexp : REAL (*calculates the mantissa and the exponent of a floating point number*)
VAR_INPUT
x :REAL; (*input value*)
pExp :UDINT; (*address of the exponent (address of DINT) (base 2)*)
END_VAR
END_FUNCTION
FUNCTION brmldexp : REAL (*calculates a floating point number from mantissa x and exponent exp*)
VAR_INPUT
x :REAL; (*mantissa*)
exp_val :DINT; (*exponent (base 2)*)
END_VAR
END_FUNCTION
FUNCTION brmmodf : REAL (*separates a floating point number into an integer and decimal part*)
VAR_INPUT
x :REAL; (*input value*)
plp :UDINT; (*address of the integer part (address of a REAL value)*)
END_VAR
END_FUNCTION
FUNCTION brmpow : REAL (*calculates x raised to the power of y*)
VAR_INPUT
x :REAL; (*base*)
y :REAL; (*exponent*)
END_VAR
END_FUNCTION
FUNCTION brmsinh : REAL (*calculates the hyperbolic sine of x*)
VAR_INPUT
x :REAL; (*input value*)
END_VAR
END_FUNCTION
FUNCTION brmtanh : REAL (*calculates the hyperbolic tangent of x*)
VAR_INPUT
x :REAL; (*input value*)
END_VAR
END_FUNCTION

View File

@@ -0,0 +1,34 @@
(********************************************************************
* COPYRIGHT -- Bernecker + Rainer
********************************************************************
* Library: AsBrMath
* File: AsBrMath.var
* Author: B+R
********************************************************************
* Local variables of library AsBrMath
********************************************************************)
VAR CONSTANT
brm2_SQRTPI : REAL := 1.12838; (*2/(square root from PI)*)
brmSQRT1_2 : REAL := 0.707107; (*square root from 1/2*)
brmSQRTPI : REAL := 1.77245; (*square root from PI*)
brmLOG2_E : REAL := 0.693147; (*log with the base 2 from E*)
brmLOG10E : REAL := 0.434294; (*log with the base 10 from E*)
brmIVLN10 : REAL := 0.434294; (*1/(ln from 10)*)
brmINVLN2 : REAL := 1.4427; (*1/(ln from 2)*)
brmTWOPI : REAL := 6.28319; (*2 PI*)
brmSQRT3 : REAL := 1.73205; (*square root from 3*)
brmSQRT2 : REAL := 1.41421; (*square root from 2*)
brmLOG2E : REAL := 1.4427; (*log with the base 2 from E*)
brmLN2LO : REAL := 1.90821e-010; (*log with the base 2 from LOW*)
brmLN2HI : REAL := 0.693147; (*log with the base 2 from HIGH*)
brm3PI_4 : REAL := 2.35619; (*3/4 PI*)
brmPI_4 : REAL := 0.785398; (*PI/4*)
brmPI_2 : REAL := 1.5708; (*PI/2*)
brmLN10 : REAL := 2.30259; (*ln from 10*)
brm2_PI : REAL := 0.63662; (*2/PI*)
brm1_PI : REAL := 0.31831; (*1/PI*)
brmLN2 : REAL := 0.693147; (*ln from 2*)
brmPI : REAL := 3.14159; (*PI*)
brmE : REAL := 2.71828; (*E*)
END_VAR

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.0.14.207?>
<Library Description="This library integrates mathematical functions such as angle functions, rounding off, etc. into the program." xmlns="http://br-automation.co.at/AS/Library">
<Files>
<File>AsBrMath.var</File>
<File>AsBrMath.fun</File>
</Files>
</Library>

View File

@@ -0,0 +1,90 @@
/* Automation Studio generated header file */
/* Do not edit ! */
#ifndef _ASBRMATH_
#define _ASBRMATH_
#ifdef __cplusplus
extern "C"
{
#endif
#include <bur/plctypes.h>
#ifndef _IEC_CONST
#define _IEC_CONST _WEAK const
#endif
/* Constants */
#ifdef _REPLACE_CONST
#define brm2_SQRTPI 1.12838
#define brmSQRT1_2 0.707107
#define brmSQRTPI 1.77245
#define brmLOG2_E 0.693147
#define brmLOG10E 0.434294
#define brmIVLN10 0.434294
#define brmINVLN2 1.4427
#define brmTWOPI 6.28319
#define brmSQRT3 1.73205
#define brmSQRT2 1.41421
#define brmLOG2E 1.4427
#define brmLN2LO 1.90821e-010
#define brmLN2HI 0.693147
#define brm3PI_4 2.35619
#define brmPI_4 0.785398
#define brmPI_2 1.5708
#define brmLN10 2.30259
#define brm2_PI 0.63662
#define brm1_PI 0.31831
#define brmLN2 0.693147
#define brmPI 3.14159
#define brmE 2.71828
#else
_IEC_CONST float brm2_SQRTPI = 1.12838;
_IEC_CONST float brmSQRT1_2 = 0.707107;
_IEC_CONST float brmSQRTPI = 1.77245;
_IEC_CONST float brmLOG2_E = 0.693147;
_IEC_CONST float brmLOG10E = 0.434294;
_IEC_CONST float brmIVLN10 = 0.434294;
_IEC_CONST float brmINVLN2 = 1.4427;
_IEC_CONST float brmTWOPI = 6.28319;
_IEC_CONST float brmSQRT3 = 1.73205;
_IEC_CONST float brmSQRT2 = 1.41421;
_IEC_CONST float brmLOG2E = 1.4427;
_IEC_CONST float brmLN2LO = 1.90821e-010;
_IEC_CONST float brmLN2HI = 0.693147;
_IEC_CONST float brm3PI_4 = 2.35619;
_IEC_CONST float brmPI_4 = 0.785398;
_IEC_CONST float brmPI_2 = 1.5708;
_IEC_CONST float brmLN10 = 2.30259;
_IEC_CONST float brm2_PI = 0.63662;
_IEC_CONST float brm1_PI = 0.31831;
_IEC_CONST float brmLN2 = 0.693147;
_IEC_CONST float brmPI = 3.14159;
_IEC_CONST float brmE = 2.71828;
#endif
/* Prototyping of functions and function blocks */
float brmatan2(float y, float x);
float brmceil(float x);
float brmcosh(float x);
float brmfloor(float x);
float brmfmod(float x, float y);
float brmfrexp(float x, unsigned long pExp);
float brmldexp(float x, signed long exp_val);
float brmmodf(float x, unsigned long plp);
float brmpow(float x, float y);
float brmsinh(float x);
float brmtanh(float x);
#ifdef __cplusplus
};
#endif
#endif /* _ASBRMATH_ */

View File

@@ -0,0 +1,91 @@
/* Automation Studio generated header file */
/* Do not edit ! */
#ifndef _ASBRMATH_
#define _ASBRMATH_
#ifdef __cplusplus
extern "C"
{
#endif
#include <bur/plctypes.h>
#ifndef _IEC_CONST
#define _IEC_CONST _WEAK const
#endif
/* Constants */
#ifdef _REPLACE_CONST
#define brm2_SQRTPI 1.12838
#define brmSQRT1_2 0.707107
#define brmSQRTPI 1.77245
#define brmLOG2_E 0.693147
#define brmLOG10E 0.434294
#define brmIVLN10 0.434294
#define brmINVLN2 1.4427
#define brmTWOPI 6.28319
#define brmSQRT3 1.73205
#define brmSQRT2 1.41421
#define brmLOG2E 1.4427
#define brmLN2LO 1.90821e-010
#define brmLN2HI 0.693147
#define brm3PI_4 2.35619
#define brmPI_4 0.785398
#define brmPI_2 1.5708
#define brmLN10 2.30259
#define brm2_PI 0.63662
#define brm1_PI 0.31831
#define brmLN2 0.693147
#define brmPI 3.14159
#define brmE 2.71828
#else
_IEC_CONST float brm2_SQRTPI = 1.12838;
_IEC_CONST float brmSQRT1_2 = 0.707107;
_IEC_CONST float brmSQRTPI = 1.77245;
_IEC_CONST float brmLOG2_E = 0.693147;
_IEC_CONST float brmLOG10E = 0.434294;
_IEC_CONST float brmIVLN10 = 0.434294;
_IEC_CONST float brmINVLN2 = 1.4427;
_IEC_CONST float brmTWOPI = 6.28319;
_IEC_CONST float brmSQRT3 = 1.73205;
_IEC_CONST float brmSQRT2 = 1.41421;
_IEC_CONST float brmLOG2E = 1.4427;
_IEC_CONST float brmLN2LO = 1.90821e-010;
_IEC_CONST float brmLN2HI = 0.693147;
_IEC_CONST float brm3PI_4 = 2.35619;
_IEC_CONST float brmPI_4 = 0.785398;
_IEC_CONST float brmPI_2 = 1.5708;
_IEC_CONST float brmLN10 = 2.30259;
_IEC_CONST float brm2_PI = 0.63662;
_IEC_CONST float brm1_PI = 0.31831;
_IEC_CONST float brmLN2 = 0.693147;
_IEC_CONST float brmPI = 3.14159;
_IEC_CONST float brmE = 2.71828;
#endif
/* Prototyping of functions and function blocks */
float brmatan2(float y, float x);
float brmceil(float x);
float brmcosh(float x);
float brmfloor(float x);
float brmfmod(float x, float y);
float brmfrexp(float x, unsigned long pExp);
float brmldexp(float x, signed long exp_val);
float brmmodf(float x, unsigned long plp);
float brmpow(float x, float y);
float brmsinh(float x);
float brmtanh(float x);
#ifdef __cplusplus
};
#endif
#endif /* _ASBRMATH_ */

View File

@@ -0,0 +1,90 @@
/* Automation Studio generated header file */
/* Do not edit ! */
#ifndef _ASBRMATH_
#define _ASBRMATH_
#ifdef __cplusplus
extern "C"
{
#endif
#include <bur/plctypes.h>
#ifndef _IEC_CONST
#define _IEC_CONST _WEAK const
#endif
/* Constants */
#ifdef _REPLACE_CONST
#define brm2_SQRTPI 1.12838
#define brmSQRT1_2 0.707107
#define brmSQRTPI 1.77245
#define brmLOG2_E 0.693147
#define brmLOG10E 0.434294
#define brmIVLN10 0.434294
#define brmINVLN2 1.4427
#define brmTWOPI 6.28319
#define brmSQRT3 1.73205
#define brmSQRT2 1.41421
#define brmLOG2E 1.4427
#define brmLN2LO 1.90821e-010
#define brmLN2HI 0.693147
#define brm3PI_4 2.35619
#define brmPI_4 0.785398
#define brmPI_2 1.5708
#define brmLN10 2.30259
#define brm2_PI 0.63662
#define brm1_PI 0.31831
#define brmLN2 0.693147
#define brmPI 3.14159
#define brmE 2.71828
#else
_IEC_CONST float brm2_SQRTPI = 1.12838;
_IEC_CONST float brmSQRT1_2 = 0.707107;
_IEC_CONST float brmSQRTPI = 1.77245;
_IEC_CONST float brmLOG2_E = 0.693147;
_IEC_CONST float brmLOG10E = 0.434294;
_IEC_CONST float brmIVLN10 = 0.434294;
_IEC_CONST float brmINVLN2 = 1.4427;
_IEC_CONST float brmTWOPI = 6.28319;
_IEC_CONST float brmSQRT3 = 1.73205;
_IEC_CONST float brmSQRT2 = 1.41421;
_IEC_CONST float brmLOG2E = 1.4427;
_IEC_CONST float brmLN2LO = 1.90821e-010;
_IEC_CONST float brmLN2HI = 0.693147;
_IEC_CONST float brm3PI_4 = 2.35619;
_IEC_CONST float brmPI_4 = 0.785398;
_IEC_CONST float brmPI_2 = 1.5708;
_IEC_CONST float brmLN10 = 2.30259;
_IEC_CONST float brm2_PI = 0.63662;
_IEC_CONST float brm1_PI = 0.31831;
_IEC_CONST float brmLN2 = 0.693147;
_IEC_CONST float brmPI = 3.14159;
_IEC_CONST float brmE = 2.71828;
#endif
/* Prototyping of functions and function blocks */
float brmatan2(float y, float x);
float brmceil(float x);
float brmcosh(float x);
float brmfloor(float x);
float brmfmod(float x, float y);
float brmfrexp(float x, unsigned long pExp);
float brmldexp(float x, signed long exp_val);
float brmmodf(float x, unsigned long plp);
float brmpow(float x, float y);
float brmsinh(float x);
float brmtanh(float x);
#ifdef __cplusplus
};
#endif
#endif /* _ASBRMATH_ */

View File

@@ -0,0 +1,202 @@
(********************************************************************
* COPYRIGHT -- Bernecker + Rainer
********************************************************************
* Library: AsDb
* File: AsDb.fun
* Author: B+R
********************************************************************
* Functions and function blocks of library AsDb
********************************************************************)
FUNCTION_BLOCK dbConnect (*connects to an existing database; asynchronous execution*)
VAR_INPUT
enable : BOOL; (*enables execution*)
pServerName : UDINT; (*pointer to IP address or host name of the database server, e.g. "sun.galaxy.one"*)
pUserName : UDINT; (*pointer to the user name*)
pPassword : UDINT; (*pointer to the user password*)
pDatabaseName : UDINT; (*pointer to the name of the database*)
databaseSystem : UDINT; (*database system*)
END_VAR
VAR_OUTPUT
status : UINT; (*execution status: ERR_OK, ERR_FUB_ENABLE_FALSE, ERR_FUB_BUSY, 0xXXXX = see help*)
dbError : INT; (*error number of the database*)
connectionIdent : UDINT; (*identifier of the database connection*)
END_VAR
VAR
_statemachine : UINT; (*internal variable*)
_result : UINT; (*internal variable*)
END_VAR
END_FUNCTION_BLOCK
FUNCTION_BLOCK dbConnectEnc (*connects to an existing database using given encoding; asynchronous execution*)
VAR_INPUT
enable : BOOL; (*enables execution*)
pServerName : UDINT; (*pointer to IP address or host name of the database server, e.g. "sun.galaxy.one"*)
pUserName : UDINT; (*pointer to the user name*)
pPassword : UDINT; (*pointer to the user password*)
pDatabaseName : UDINT; (*pointer to the name of the database*)
databaseSystem : UDINT; (*database system*)
pEncoding : UDINT; (*character encoding*)
END_VAR
VAR_OUTPUT
status : UINT; (*execution status: ERR_OK, ERR_FUB_ENABLE_FALSE, ERR_FUB_BUSY, 0xXXXX = see help*)
dbError : INT; (*error number of the database*)
connectionIdent : UDINT; (*identifier of the database connection*)
END_VAR
VAR
_statemachine : UINT; (*internal variable*)
_result : UINT; (*internal variable*)
END_VAR
END_FUNCTION_BLOCK
FUNCTION_BLOCK dbExecuteSql (*executes an SQL statement; asynchronous execution*)
VAR_INPUT
enable : BOOL; (*enables execution*)
connectionIdent : UDINT; (*identifier of the database connection*)
pSqlStatement : UDINT; (*pointer to the SQL statement*)
END_VAR
VAR_OUTPUT
status : UINT; (*execution status: ERR_OK, ERR_FUB_ENABLE_FALSE, ERR_FUB_BUSY, 0xXXXX = see help*)
dbError : INT; (*error number of the database*)
END_VAR
VAR
_statemachine : UINT; (*internal variable*)
_result : UINT; (*internal variable*)
END_VAR
END_FUNCTION_BLOCK
FUNCTION_BLOCK dbGetAffectedRows (*determines the number of rows affected by an INSERT, UPDATE or DELETE SQL statement; asynchronous execution*)
VAR_INPUT
enable : BOOL; (*enables execution*)
connectionIdent : UDINT; (*identifier of the database connection*)
END_VAR
VAR_OUTPUT
status : UINT; (*execution status: ERR_OK, ERR_FUB_ENABLE_FALSE, ERR_FUB_BUSY, 0xXXXX = see help*)
dbError : INT; (*error number of the database*)
affectedRows: UDINT; (*number of affected rows*)
END_VAR
VAR
_statemachine : UINT; (*internal variable*)
_result : UINT; (*internal variable*)
END_VAR
END_FUNCTION_BLOCK
FUNCTION_BLOCK dbGetColumnCount (*determines the number of columns in the result set of an SELECT SQL statement; asynchronous execution*)
VAR_INPUT
enable : BOOL; (*enables execution*)
connectionIdent : UDINT; (*identifier of the database connection*)
END_VAR
VAR_OUTPUT
status : UINT; (*execution status: ERR_OK, ERR_FUB_ENABLE_FALSE, ERR_FUB_BUSY, 0xXXXX = see help*)
dbError : INT; (*error number of the database*)
columnCount : INT; (*number of columns in the result set*)
END_VAR
VAR
_statemachine : UINT; (*internal variable*)
_result : UINT; (*internal variable*)
END_VAR
END_FUNCTION_BLOCK
FUNCTION_BLOCK dbFetchNextRow (*fetches the next row into the memory; asynchronous execution*)
VAR_INPUT
enable : BOOL; (*enables execution*)
connectionIdent : UDINT; (*identifier of the database connection*)
END_VAR
VAR_OUTPUT
status : UINT; (*execution status: ERR_OK, ERR_FUB_ENABLE_FALSE, ERR_FUB_BUSY, 0xXXXX = see help*)
dbError : INT; (*error number of the database*)
END_VAR
VAR
_statemachine : UINT; (*internal variable*)
_result : UINT; (*internal variable*)
END_VAR
END_FUNCTION_BLOCK
FUNCTION_BLOCK dbGetData (*gets the data of the current row of the given column*)
VAR_INPUT
enable : BOOL; (*enables execution*)
connectionIdent : UDINT; (*identifier of the database connection*)
columnIdx : UDINT; (*the data column index*)
dataType : INT; (*type of the data*)
pData : UDINT; (*pointer to the data buffer*)
dataSize : UDINT; (*size of the data buffer*)
END_VAR
VAR_OUTPUT
status : UINT; (*execution status: ERR_OK, ERR_FUB_ENABLE_FALSE, ERR_FUB_BUSY, 0xXXXX = see help*)
dbError : INT; (*error number of the database*)
actDataSize : UDINT; (*size of the written data or needed data size*)
END_VAR
END_FUNCTION_BLOCK
FUNCTION_BLOCK dbDisconnect (*disconnects the connection to the database; asynchronous execution*)
VAR_INPUT
enable : BOOL; (*enables execution*)
connectionIdent : UDINT; (*identifier of the database connection*)
END_VAR
VAR_OUTPUT
status : UINT; (*execution status: ERR_OK, ERR_FUB_ENABLE_FALSE, ERR_FUB_BUSY, 0xXXXX = see help*)
dbError : INT; (*error number of the database*)
END_VAR
VAR
_statemachine : UINT; (*internal variable*)
_result : UINT; (*internal variable*)
END_VAR
END_FUNCTION_BLOCK
FUNCTION_BLOCK dbGetInfo (*gets database information; asynchronous execution*)
VAR_INPUT
enable : BOOL; (*enables execution*)
connectionIdent : UDINT; (*identifier of the database connection*)
infoType : UINT; (*type of information*)
pServerInfo : UDINT; (*pointer to buffer for the database information*)
serverInfoSize : UDINT; (*size of the buffer*)
END_VAR
VAR_OUTPUT
status : UINT; (*execution status: ERR_OK, ERR_FUB_ENABLE_FALSE, ERR_FUB_BUSY, 0xXXXX = see help*)
dbError : INT; (*error number of the database*)
actServerInfoSize : UINT; (*current size of database information or needed size*)
END_VAR
VAR
_statemachine : UINT; (*internal variable*)
_result : UINT; (*internal variable*)
END_VAR
END_FUNCTION_BLOCK
FUNCTION_BLOCK dbGetErrorMessage (*gets the current database error message; asynchronous execution*)
VAR_INPUT
enable : BOOL; (*enables execution*)
connectionIdent : UDINT; (*identifier of the database connection*)
pErrorMessage : UDINT; (*buffer for the database error message*)
errorMessageSize: UDINT; (*size of the buffer*)
END_VAR
VAR_OUTPUT
status : UINT; (*execution status: ERR_OK, ERR_FUB_ENABLE_FALSE, ERR_FUB_BUSY, 0xXXXX = see help*)
dbError : INT; (*error number of the database*)
sqlState : ARRAY [0..5] OF USINT;(*five-character SQLSTATE code*)
nativeError : DINT; (*native error code, specific to the data source*)
actErrorMessageSize : INT; (*current size for the error message of the database or necessary size*)
END_VAR
VAR
_statemachine : UINT; (*internal variable*)
_result : UINT; (*internal variable*)
END_VAR
END_FUNCTION_BLOCK

View File

@@ -0,0 +1,12 @@
(********************************************************************
* COPYRIGHT -- Bernecker + Rainer
********************************************************************
* Library: AsDb
* File: AsDb.typ
* Author: B+R
********************************************************************
* Data types of library AsDb
********************************************************************)
TYPE
END_TYPE

View File

@@ -0,0 +1,58 @@
(********************************************************************
* COPYRIGHT -- Bernecker + Rainer
********************************************************************
* Library: AsDb
* File: AsDb.var
* Author: B+R
********************************************************************
* Local variables of library AsDb
********************************************************************)
VAR CONSTANT
DB_SYSTEM_SYBASE : UINT := 1; (*Sybase database*)
DB_SYSTEM_MS_SQL : UINT := 2; (*Microsoft SQL database*)
DB_DEFAULT_PORT : UINT := 5000; (*default database port*)
DB_SQL_ERROR : INT := -1; (*SQL error*)
DB_SQL_INVALID_HANDLE : INT := -2; (*invalid SQL database handle*)
DB_SQL_NO_DATA : INT := 100; (*no data available*)
DB_SQL_CHAR : INT := 1; (*character data type of either fixed length or variable length*)
DB_SQL_NUMERIC : INT := 2; (*numeric data type with fixed precision and scale*)
DB_SQL_DECIMAL : INT := 3; (*numeric data type with fixed precision and scale*)
DB_SQL_BIGINT : INT := -25; (*big integer 8 bytes*)
DB_SQL_INTEGER : INT := 4; (*DINT*)
DB_SQL_SMALLINT : INT := 5; (*INT*)
DB_SQL_TINYINT : INT := -6; (*SINT*)
DB_SQL_REAL : INT := 7; (*REAL*)
DB_SQL_DOUBLE : INT := 8; (*LREAL*)
DB_SQL_DATE : INT := 9; (*date, 6 bytes: yy.mm.dd*)
DB_SQL_TIME : INT := 10; (*time of a day without time zone based on a 24-hour clock, 6 bytes: hh:mm:ss*)
DB_SQL_TIMESTAMP : INT := 11; (*DB_SQL_DATE + TIME 12 bytes: yy.mm.dd hh:mm:ss*)
DB_SQL_VARCHAR : INT := 12; (*character data type of either fixed length or variable length*)
DB_SQL_GUID : INT := -11; (*16 byte GUID*)
dbERR_MEMORY : UINT := 34930; (*memory error*)
dbERR_DATABASE : UINT := 34931; (*database returned an error*)
dbERR_INVALID_HANDLE : UINT := 34932; (*invalid handle specified*)
dbERR_INVALID_COLUMN : UINT := 34933; (*invalid column index specified*)
dbERR_UNSUPPORTED_DATABASE : UINT := 34934; (*unsupported database*)
dbERR_BUFFER_SIZE : UINT := 34935; (*buffer too small*)
dbERR_INVALID_SERVERNAME : UINT := 34936; (*invalid server name*)
dbERR_INVALID_USERNAME : UINT := 34937; (*invalid user name*)
dbERR_INVALID_PASSWORD : UINT := 34938; (*invalid password*)
dbERR_INVALID_DATABASE_NAME : UINT := 34939; (*invalid database name*)
dbERR_INVALID_SQL_STATEMENT : UINT := 34940; (*invalid SQL statement*)
dbERR_SQL_EXECUTE_REQUIRED : UINT := 34941; (*dbExecuteSql() must be called before*)
dbERR_INVALID_DATATYPE : UINT := 34942; (*invalid data type*)
dbERR_NULLPOINTER : UINT := 34943; (*null pointer*)
dbERR_NOT_AVAILABLE : UINT := 34944; (*information not available*)
dbERR_UNSUPPORTED_ENCODING : UINT := 34945; (*unsupported encoding specified*)
END_VAR
VAR CONSTANT
DB_ENCODING_ISO_8859_1 : STRING[12] := 'ISO-8859-1'; (*ISO-8859-1 encoding*)
DB_ENCODING_UTF_8 : STRING[12] := 'UTF-8'; (*UTF-8 encoding*)
END_VAR

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.0.16.81 SP?>
<Library Description="The AsDb library supports access to Sybase und MS SQL databases." xmlns="http://br-automation.co.at/AS/Library">
<Files>
<File>AsDb.var</File>
<File>AsDb.typ</File>
<File>AsDb.fun</File>
</Files>
<Dependencies>
<Dependency ObjectName="runtime" />
</Dependencies>
</Library>

View File

@@ -0,0 +1,288 @@
/* Automation Studio generated header file */
/* Do not edit ! */
#ifndef _ASDB_
#define _ASDB_
#ifdef __cplusplus
extern "C"
{
#endif
#include <bur/plctypes.h>
#include <runtime.h>
#ifndef _IEC_CONST
#define _IEC_CONST _WEAK const
#endif
/* Constants */
#ifdef _REPLACE_CONST
#define DB_ENCODING_UTF_8 "UTF-8"
#define DB_ENCODING_ISO_8859_1 "ISO-8859-1"
#define dbERR_UNSUPPORTED_ENCODING 34945U
#define dbERR_NOT_AVAILABLE 34944U
#define dbERR_NULLPOINTER 34943U
#define dbERR_INVALID_DATATYPE 34942U
#define dbERR_SQL_EXECUTE_REQUIRED 34941U
#define dbERR_INVALID_SQL_STATEMENT 34940U
#define dbERR_INVALID_DATABASE_NAME 34939U
#define dbERR_INVALID_PASSWORD 34938U
#define dbERR_INVALID_USERNAME 34937U
#define dbERR_INVALID_SERVERNAME 34936U
#define dbERR_BUFFER_SIZE 34935U
#define dbERR_UNSUPPORTED_DATABASE 34934U
#define dbERR_INVALID_COLUMN 34933U
#define dbERR_INVALID_HANDLE 34932U
#define dbERR_DATABASE 34931U
#define dbERR_MEMORY 34930U
#define DB_SQL_GUID (-11)
#define DB_SQL_VARCHAR 12
#define DB_SQL_TIMESTAMP 11
#define DB_SQL_TIME 10
#define DB_SQL_DATE 9
#define DB_SQL_DOUBLE 8
#define DB_SQL_REAL 7
#define DB_SQL_TINYINT (-6)
#define DB_SQL_SMALLINT 5
#define DB_SQL_INTEGER 4
#define DB_SQL_BIGINT (-25)
#define DB_SQL_DECIMAL 3
#define DB_SQL_NUMERIC 2
#define DB_SQL_CHAR 1
#define DB_SQL_NO_DATA 100
#define DB_SQL_INVALID_HANDLE (-2)
#define DB_SQL_ERROR (-1)
#define DB_DEFAULT_PORT 5000U
#define DB_SYSTEM_MS_SQL 2U
#define DB_SYSTEM_SYBASE 1U
#else
_IEC_CONST plcstring DB_ENCODING_UTF_8[13] = "UTF-8";
_IEC_CONST plcstring DB_ENCODING_ISO_8859_1[13] = "ISO-8859-1";
_IEC_CONST unsigned short dbERR_UNSUPPORTED_ENCODING = 34945U;
_IEC_CONST unsigned short dbERR_NOT_AVAILABLE = 34944U;
_IEC_CONST unsigned short dbERR_NULLPOINTER = 34943U;
_IEC_CONST unsigned short dbERR_INVALID_DATATYPE = 34942U;
_IEC_CONST unsigned short dbERR_SQL_EXECUTE_REQUIRED = 34941U;
_IEC_CONST unsigned short dbERR_INVALID_SQL_STATEMENT = 34940U;
_IEC_CONST unsigned short dbERR_INVALID_DATABASE_NAME = 34939U;
_IEC_CONST unsigned short dbERR_INVALID_PASSWORD = 34938U;
_IEC_CONST unsigned short dbERR_INVALID_USERNAME = 34937U;
_IEC_CONST unsigned short dbERR_INVALID_SERVERNAME = 34936U;
_IEC_CONST unsigned short dbERR_BUFFER_SIZE = 34935U;
_IEC_CONST unsigned short dbERR_UNSUPPORTED_DATABASE = 34934U;
_IEC_CONST unsigned short dbERR_INVALID_COLUMN = 34933U;
_IEC_CONST unsigned short dbERR_INVALID_HANDLE = 34932U;
_IEC_CONST unsigned short dbERR_DATABASE = 34931U;
_IEC_CONST unsigned short dbERR_MEMORY = 34930U;
_IEC_CONST signed short DB_SQL_GUID = -11;
_IEC_CONST signed short DB_SQL_VARCHAR = 12;
_IEC_CONST signed short DB_SQL_TIMESTAMP = 11;
_IEC_CONST signed short DB_SQL_TIME = 10;
_IEC_CONST signed short DB_SQL_DATE = 9;
_IEC_CONST signed short DB_SQL_DOUBLE = 8;
_IEC_CONST signed short DB_SQL_REAL = 7;
_IEC_CONST signed short DB_SQL_TINYINT = -6;
_IEC_CONST signed short DB_SQL_SMALLINT = 5;
_IEC_CONST signed short DB_SQL_INTEGER = 4;
_IEC_CONST signed short DB_SQL_BIGINT = -25;
_IEC_CONST signed short DB_SQL_DECIMAL = 3;
_IEC_CONST signed short DB_SQL_NUMERIC = 2;
_IEC_CONST signed short DB_SQL_CHAR = 1;
_IEC_CONST signed short DB_SQL_NO_DATA = 100;
_IEC_CONST signed short DB_SQL_INVALID_HANDLE = -2;
_IEC_CONST signed short DB_SQL_ERROR = -1;
_IEC_CONST unsigned short DB_DEFAULT_PORT = 5000U;
_IEC_CONST unsigned short DB_SYSTEM_MS_SQL = 2U;
_IEC_CONST unsigned short DB_SYSTEM_SYBASE = 1U;
#endif
/* Datatypes and datatypes of function blocks */
typedef struct dbConnect
{
/* VAR_INPUT (analog) */
unsigned long pServerName;
unsigned long pUserName;
unsigned long pPassword;
unsigned long pDatabaseName;
unsigned long databaseSystem;
/* VAR_OUTPUT (analog) */
unsigned short status;
signed short dbError;
unsigned long connectionIdent;
/* VAR (analog) */
unsigned short _statemachine;
unsigned short _result;
/* VAR_INPUT (digital) */
plcbit enable;
} dbConnect_typ;
typedef struct dbConnectEnc
{
/* VAR_INPUT (analog) */
unsigned long pServerName;
unsigned long pUserName;
unsigned long pPassword;
unsigned long pDatabaseName;
unsigned long databaseSystem;
unsigned long pEncoding;
/* VAR_OUTPUT (analog) */
unsigned short status;
signed short dbError;
unsigned long connectionIdent;
/* VAR (analog) */
unsigned short _statemachine;
unsigned short _result;
/* VAR_INPUT (digital) */
plcbit enable;
} dbConnectEnc_typ;
typedef struct dbExecuteSql
{
/* VAR_INPUT (analog) */
unsigned long connectionIdent;
unsigned long pSqlStatement;
/* VAR_OUTPUT (analog) */
unsigned short status;
signed short dbError;
/* VAR (analog) */
unsigned short _statemachine;
unsigned short _result;
/* VAR_INPUT (digital) */
plcbit enable;
} dbExecuteSql_typ;
typedef struct dbGetAffectedRows
{
/* VAR_INPUT (analog) */
unsigned long connectionIdent;
/* VAR_OUTPUT (analog) */
unsigned short status;
signed short dbError;
unsigned long affectedRows;
/* VAR (analog) */
unsigned short _statemachine;
unsigned short _result;
/* VAR_INPUT (digital) */
plcbit enable;
} dbGetAffectedRows_typ;
typedef struct dbGetColumnCount
{
/* VAR_INPUT (analog) */
unsigned long connectionIdent;
/* VAR_OUTPUT (analog) */
unsigned short status;
signed short dbError;
signed short columnCount;
/* VAR (analog) */
unsigned short _statemachine;
unsigned short _result;
/* VAR_INPUT (digital) */
plcbit enable;
} dbGetColumnCount_typ;
typedef struct dbFetchNextRow
{
/* VAR_INPUT (analog) */
unsigned long connectionIdent;
/* VAR_OUTPUT (analog) */
unsigned short status;
signed short dbError;
/* VAR (analog) */
unsigned short _statemachine;
unsigned short _result;
/* VAR_INPUT (digital) */
plcbit enable;
} dbFetchNextRow_typ;
typedef struct dbGetData
{
/* VAR_INPUT (analog) */
unsigned long connectionIdent;
unsigned long columnIdx;
signed short dataType;
unsigned long pData;
unsigned long dataSize;
/* VAR_OUTPUT (analog) */
unsigned short status;
signed short dbError;
unsigned long actDataSize;
/* VAR_INPUT (digital) */
plcbit enable;
} dbGetData_typ;
typedef struct dbDisconnect
{
/* VAR_INPUT (analog) */
unsigned long connectionIdent;
/* VAR_OUTPUT (analog) */
unsigned short status;
signed short dbError;
/* VAR (analog) */
unsigned short _statemachine;
unsigned short _result;
/* VAR_INPUT (digital) */
plcbit enable;
} dbDisconnect_typ;
typedef struct dbGetInfo
{
/* VAR_INPUT (analog) */
unsigned long connectionIdent;
unsigned short infoType;
unsigned long pServerInfo;
unsigned long serverInfoSize;
/* VAR_OUTPUT (analog) */
unsigned short status;
signed short dbError;
unsigned short actServerInfoSize;
/* VAR (analog) */
unsigned short _statemachine;
unsigned short _result;
/* VAR_INPUT (digital) */
plcbit enable;
} dbGetInfo_typ;
typedef struct dbGetErrorMessage
{
/* VAR_INPUT (analog) */
unsigned long connectionIdent;
unsigned long pErrorMessage;
unsigned long errorMessageSize;
/* VAR_OUTPUT (analog) */
unsigned short status;
signed short dbError;
unsigned char sqlState[6];
signed long nativeError;
signed short actErrorMessageSize;
/* VAR (analog) */
unsigned short _statemachine;
unsigned short _result;
/* VAR_INPUT (digital) */
plcbit enable;
} dbGetErrorMessage_typ;
/* Prototyping of functions and function blocks */
void dbConnect(struct dbConnect* inst);
void dbConnectEnc(struct dbConnectEnc* inst);
void dbExecuteSql(struct dbExecuteSql* inst);
void dbGetAffectedRows(struct dbGetAffectedRows* inst);
void dbGetColumnCount(struct dbGetColumnCount* inst);
void dbFetchNextRow(struct dbFetchNextRow* inst);
void dbGetData(struct dbGetData* inst);
void dbDisconnect(struct dbDisconnect* inst);
void dbGetInfo(struct dbGetInfo* inst);
void dbGetErrorMessage(struct dbGetErrorMessage* inst);
#ifdef __cplusplus
};
#endif
#endif /* _ASDB_ */

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=3.0.0.0?>
<Library xmlns="http://br-automation.co.at/AS/Library" Description="This library contains function interfaces for IEC 1131-3 conversion functions.">
<Files>
<File>AsIecCon.fun</File>
</Files>
<Dependencies>
<Dependency ObjectName="AsTime" />
</Dependencies>
</Library>

View File

@@ -0,0 +1,49 @@
/* Automation Studio Generated Header File, Format Version 1.00 */
/* do not change */
#ifndef ASIECCON_H_
#define ASIECCON_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <bur/plc.h>
/* Constants */
/* Datatypes */
/* Datatypes of function blocks */
/* Prototyping of functions and function blocks */
signed short H_TO_NINT(signed short IN);
unsigned short H_TO_NUINT(unsigned short IN);
signed long H_TO_NDINT(signed long IN);
unsigned long H_TO_NUDINT(unsigned long IN);
float H_TO_NREAL(float IN);
plctime H_TO_NTIME(plctime IN);
DATE_AND_TIME H_TO_NDT(DATE_AND_TIME IN);
signed short N_TO_HINT(signed short IN);
unsigned short N_TO_HUINT(unsigned short IN);
signed long N_TO_HDINT(signed long IN);
unsigned long N_TO_HUDINT(unsigned long IN);
float N_TO_HREAL(float IN);
plctime N_TO_HTIME(plctime IN);
DATE_AND_TIME N_TO_HDT(DATE_AND_TIME IN);
signed short swapINT(signed short IN);
unsigned short swapUINT(unsigned short IN);
signed long swapDINT(signed long IN);
unsigned long swapUDINT(unsigned long IN);
float swapREAL(float IN);
#ifdef __cplusplus
};
#endif
#endif /* ASIECCON_H_ */

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