FUNCTION "SaiAxisCtrl_UnpubDataSyncAxis" : Void { S7_Optimized_Access := 'TRUE' } VERSION : 0.1 VAR_INPUT axis {InstructionName := 'TO_SynchronousAxis'; LibVersion := '5.0'} : TO_SynchronousAxis; END_VAR VAR_OUTPUT targetPosition : LReal; // 目标位置 position : LReal; // 位置设定值 velocity : LReal; // 速度设定值 overrideVelocity : LReal; // 速度超驰 actualPosition : LReal; // 实际位置 actualVelocity : LReal; // 实际速度 followingError : LReal; // 跟随误差 maxVelocity : LReal; // 最大速度 maxAcceleration : LReal; // 最大加速度 maxDeceleration : LReal; // 最大减速度 maxJerk : LReal; // 最大加加速度 END_VAR BEGIN (/* 读取同步轴工艺对象运动状态 */) (/*目标位置*/) #targetPosition := #axis.StatusPositioning.TargetPosition; (/*位置设定值*/) #position := #axis.Position; (/*速度设定值*/) #velocity := #axis.Velocity; (/*速度超驰*/) #overrideVelocity := #axis.Override.Velocity; (/*实际位置*/) #actualPosition := #axis.ActualPosition; (/*实际速度*/) #actualVelocity := #axis.ActualVelocity; (/*跟随误差*/) #followingError := #axis.StatusPositioning.FollowingError; (/*最大速度*/) #maxVelocity := #axis.DynamicLimits.MaxVelocity; (/*最大加速度*/) #maxAcceleration := #axis.DynamicLimits.MaxAcceleration; (/*最大减速度*/) #maxDeceleration := #axis.DynamicLimits.MaxDeceleration; (/*最大加加速度*/) #maxJerk := #axis.DynamicLimits.MaxJerk; END_FUNCTION FUNCTION "SaiAxisCtrl_UnpubDataPosAxis" : Void { S7_Optimized_Access := 'TRUE' } VERSION : 0.1 VAR_INPUT axis {InstructionName := 'TO_PositioningAxis'; LibVersion := '5.0'} : TO_PositioningAxis; END_VAR VAR_OUTPUT targetPosition : LReal; // 目标位置 position : LReal; // 位置设定值 velocity : LReal; // 速度设定值 overrideVelocity : LReal; // 速度超驰 actualPosition : LReal; // 实际位置 actualVelocity : LReal; // 实际速度 followingError : LReal; // 跟随误差 maxVelocity : LReal; // 最大速度 maxAcceleration : LReal; // 最大加速度 maxDeceleration : LReal; // 最大减速度 maxJerk : LReal; // 最大加加速度 END_VAR BEGIN (/* 读取定位轴工艺对象运动状态 */) (/*目标位置*/) #targetPosition := #axis.StatusPositioning.TargetPosition; (/*位置设定值*/) #position := #axis.Position; (/*速度设定值*/) #velocity := #axis.Velocity; (/*速度超驰*/) #overrideVelocity := #axis.Override.Velocity; (/*实际位置*/) #actualPosition := #axis.ActualPosition; (/*实际速度*/) #actualVelocity := #axis.ActualVelocity; (/*跟随误差*/) #followingError := #axis.StatusPositioning.FollowingError; (/*最大速度*/) #maxVelocity := #axis.DynamicLimits.MaxVelocity; (/*最大加速度*/) #maxAcceleration := #axis.DynamicLimits.MaxAcceleration; (/*最大减速度*/) #maxDeceleration := #axis.DynamicLimits.MaxDeceleration; (/*最大加加速度*/) #maxJerk := #axis.DynamicLimits.MaxJerk; END_FUNCTION FUNCTION "SaiAxisCtrl_UnpubDataExtEncoder" : Void { S7_Optimized_Access := 'TRUE' } VERSION : 0.1 VAR_INPUT axis {InstructionName := 'TO_ExternalEncoder'; LibVersion := '5.0'} : TO_ExternalEncoder; END_VAR VAR_OUTPUT actualPosition : LReal; // 实际位置 actualVelocity : LReal; // 实际速度 END_VAR BEGIN (/* 读取外部编码器工艺对象运动状态 */) (/*实际位置*/) #actualPosition := #axis.ActualPosition; (/*实际速度*/) #actualVelocity := #axis.ActualVelocity; END_FUNCTION FUNCTION "SaiAxisCtrl_UnpubDataSpeedAxis" : Void { S7_Optimized_Access := 'TRUE' } VERSION : 0.1 VAR_INPUT axis {InstructionName := 'TO_SpeedAxis'; LibVersion := '5.0'} : TO_SpeedAxis; END_VAR VAR_OUTPUT velocity : LReal; // 速度设定值 overrideVelocity : LReal; // 速度超驰 actualVelocity : LReal; // 实际速度 maxVelocity : LReal; // 最大速度 maxAcceleration : LReal; // 最大加速度 maxDeceleration : LReal; // 最大减速度 maxJerk : LReal; // 最大加加速度 END_VAR BEGIN (/* 读取速度轴工艺对象运动状态 */) (/*速度设定值*/) #velocity := #axis.Velocity; (/*速度超驰*/) #overrideVelocity := #axis.Override.Velocity; (/*实际速度*/) #actualVelocity := #axis.ActualSpeed; (/*最大速度*/) #maxVelocity := #axis.DynamicLimits.MaxVelocity; (/*最大加速度*/) #maxAcceleration := #axis.DynamicLimits.MaxAcceleration; (/*最大减速度*/) #maxDeceleration := #axis.DynamicLimits.MaxDeceleration; (/*最大加加速度*/) #maxJerk := #axis.DynamicLimits.MaxJerk; END_FUNCTION FUNCTION_BLOCK "SaiAxisCtrl_AxisData" { S7_Optimized_Access := 'TRUE' } VERSION : 0.1 VAR_INPUT axis : DB_ANY; END_VAR VAR_OUTPUT status { ExternalWritable := 'False'} : Word; targetPosition : LReal; // 目标位置 position : LReal; // 位置设定值 velocity : LReal; // 速度设定值 overrideVelocity : LReal; // 速度超驰 actualPosition : LReal; // 实际位置 actualVelocity : LReal; // 实际速度 followingError : LReal; // 跟随误差 maxVelocity : LReal; // 最大速度 maxAcceleration : LReal; // 最大加速度 maxDeceleration : LReal; // 最大减速度 maxJerk : LReal; // 最大加加速度 END_VAR VAR CONSTANT ERROR_INVALID_TECHNOLOGY_OBJECT : Word := 16#8002; FINISHED : Word; END_VAR BEGIN CASE TypeOfDB(#axis) OF TO_ExternalEncoder: "SaiAxisCtrl_UnpubDataExtEncoder"(axis := #axis, actualPosition => #actualPosition, actualVelocity => #actualVelocity); (/*目标位置*/) #targetPosition := -1.0; (/*位置设定值*/) #position := -1.0; (/*速度设定值*/) #velocity := -1.0; (/*速度超驰*/) #overrideVelocity := -1.0; (/*跟随误差*/) #followingError := -1.0; (/*最大速度*/) #maxVelocity := -1.0; (/*最大加速度*/) #maxAcceleration := -1.0; (/*最大减速度*/) #maxDeceleration := -1.0; (/*最大加加速度*/) #maxJerk := -1.0; (/* 正确的axis 工艺对象 */) #status := #FINISHED; TO_SpeedAxis: "SaiAxisCtrl_UnpubDataSpeedAxis"(axis := #axis, velocity => #velocity, overrideVelocity => #overrideVelocity, actualVelocity => #actualVelocity, maxVelocity => #maxVelocity, maxAcceleration => #maxAcceleration, maxDeceleration => #maxDeceleration, maxJerk => #maxJerk); (/*目标位置*/) #targetPosition := -1.0; (/*位置设定值*/) #position := -1.0; (/*实际位置*/) #actualPosition := -1.0; (/*跟随误差*/) #followingError := -1.0; (/* 正确的axis 工艺对象 */) #status := #FINISHED; TO_PositioningAxis: "SaiAxisCtrl_UnpubDataPosAxis"(axis := #axis, targetPosition => #targetPosition, position => #position, velocity => #velocity, overrideVelocity => #overrideVelocity, actualPosition => #actualPosition, actualVelocity => #actualVelocity, followingError => #followingError, maxVelocity => #maxVelocity, maxAcceleration => #maxAcceleration, maxDeceleration => #maxDeceleration, maxJerk => #maxJerk); #status := #FINISHED; TO_SynchronousAxis: "SaiAxisCtrl_UnpubDataSyncAxis"(axis := #axis, targetPosition => #targetPosition, position => #position, velocity => #velocity, overrideVelocity => #overrideVelocity, actualPosition => #actualPosition, actualVelocity => #actualVelocity, followingError => #followingError, maxVelocity => #maxVelocity, maxAcceleration => #maxAcceleration, maxDeceleration => #maxDeceleration, maxJerk => #maxJerk); (/* 正确的axis 工艺对象 */) #status := #FINISHED; ELSE (/* 非以上工艺对象类型输出状态字 16#8002 */) #status := #ERROR_INVALID_TECHNOLOGY_OBJECT; ENO := FALSE; END_CASE; END_FUNCTION_BLOCK