倍福TwinCAT3伺服控制常用功能块的实现

2、伺服PTP功能块定义
2.1定义轴变量
_axis1: AXIS_REF; //轴变量
2.2添加轴控制指令
定义功能块变量:

MC_POWER_0:							MC_POWER;				//轴使能										
MC_Reset_0:							MC_Reset;				//轴复位
MC_Stop_0:							MC_Stop;				//轴停止			
MC_Jog_0:							MC_Jog;
MC_MoveAdditive_0:					MC_MoveAdditive;
MC_MoveRelative_0:					MC_MoveRelative;
MC_MoveAbsolute_0:					MC_MoveAbsolute;
MC_MoveVelocity_0:					MC_MoveVelocity;
MC_SetOverride_0:					MC_SetOverride;			//设置轴速度缩放系数
MC_SetPosition_0:					MC_SetPosition;			//设置当前位置
MC_ReadActualPosition_0:			MC_ReadActualPosition;
MC_ReadActualVelocity_0:			MC_ReadActualVelocity;	
MC_ReadStatus_0:					MC_ReadStatus;

2.3添加全局变量
定义控制的全局变量:

//轴控制指令	
bi_Power:								BOOL;			//使能
bi_Reset:								BOOL;			//复位
bi_Stop:								BOOL;			//停止	
bi_JogForward:							BOOL;			//正向点动
bi_JogBackwards:						BOOL;			//反向点动		
bi_MoveAdditive:						BOOL;			//增量位置运动
bi_MoveRelative:						BOOL;			//相对位置运动
bi_MoveAbsolute:						BOOL;			//绝对位置运动	
bi_MoveVelocity:						BOOL;			//速度方式运动
bi_SetOverride:							BOOL;			//轴速度缩放启用
bi_SetPosition:							BOOL;			//增量式伺服,设置当前位置值
bi_AxisRead:							BOOL;			//读取轴的状态

定义输入的控制参数变量:

//轴运动参数设置
di_Stop_Deceleration:					LREAL:=4000;	//停止速度(MC_Stop)
di_SetPosition:							LREAL:=0;		//

di_Jog_Velocity:						LREAL;
di_Jog_Acceleration:					LREAL:=3000;
di_Jog_Deceleration:					LREAL:=3000;
di_Jog_Jerk:							LREAL:=0;		//加加速度。	

di_MoveAdditive_Distance:				LREAL:=0;
di_MoveAdditive_Velocity:				LREAL:=100;
di_MoveAdditive_Acceleration:			LREAL:=500;	
di_MoveAdditive_Deceleration:			LREAL:=500;
di_MoveAdditive_Jerk:					LREAL:=0;

di_MoveRelative_Distance:				LREAL:=0;
di_MoveRelative_Velocity:				LREAL:=100;
di_MoveRelative_Acceleration:			LREAL:=500;
di_MoveRelative_Deceleration:			LREAL:=500;
di_MoveRelative_Jerk:					LREAL:=0;

di_MoveAbsolute_Position:				LREAL:=0;
di_MoveAbsolute_Velocity:				LREAL:=100;
di_MoveAbsolute_Acceleration:			LREAL:=500;
di_MoveAbsolute_Deceleration:			LREAL:=500;
di_MoveAbsolute_Jerk:					LREAL:=0;

di_MoveVelocity_Velocity:				LREAL:=100;
di_MoveVelocity_Acceleration:			LREAL:=500;
di_MoveVelocity_Deceleration:			LREAL:=500;
di_MoveVelocity_Jerk:					LREAL:=0;
di_MoveVelocity_Direction:				MC_Direction:=1;			//1:Positive	3:Negative
di_VelFactor:							LREAL:=1.0;					//1.0=100%		范围:0.01-1.0

定义存储反馈得轴状态变量

//轴状态反馈
bo_AxisError:							BOOL;
bo_ErrorStop:							BOOL;			//故障未复位的情况下再次转动电机输出故障停车信号
bo_Homing:								BOOL;			//轴回原点进行中
bo_Homed:								BOOL;			//轴已经回原点		
bo_Moving:								BOOL;			//轴运动中
bo_Disabled:							BOOL;
bo_Stopping:							BOOL;			//停止信号输出一次
bo_StandStill:							BOOL;			//待机中
bo_DiscreteMotion:						BOOL;			//不连续运动
bo_ContinuousMotion:					BOOL;			//连续运动
bo_SynchronizedMotion:					BOOL;			//同步运动
bo_ConstantVelocity:					BOOL;			//恒速运行中
bo_Accelerating:						BOOL;			//加速中
bo_Decelerating:						BOOL;			//减速中
		
//
do_ActualPosition:						LREAL;			//轴当前位置
do_ActualVelocity:						LREAL;			//轴当前速度
do_AxisErroID:							DWORD;			//故障代码
	
dg_ActualTorque			AT%I*:			INT;			// Axises's Actual Torque

2.4轴控功能块ST语言实现

//*轴使能
MC_POWER_0(
Axis:= _axis1,
Enable:= bi_Power, //TRUE使能,FALSE去使能
Enable_Positive:= TRUE,
Enable_Negative:= TRUE,
Override:= ,
BufferMode:= ,
Options:= ,
Status=> ,
Busy=> ,
Active=> ,
Error=> ,
ErrorID=> );

//*轴复位
MC_Reset_0(
Axis:= _axis1,
Execute:= bi_Reset, //上升沿信号触发
Done=> ,
Busy=> ,
Error=> ,
ErrorID=> );

//*轴停机
MC_Stop_0(
Axis:= _axis1,
Execute:= bi_Stop, //上升沿信号触发
Deceleration:= di_Stop_Deceleration,
Jerk:= ,
Options:= ,
Done=> ,
Busy=> ,
Active=> ,
CommandAborted=> ,
Error=> ,
ErrorID=> );

//Jog点动
MC_Jog_0(
Axis:= _axis1,
JogForward:= bi_JogForward,
JogBackwards:= bi_JogBackwards,
Mode:= MC_JOGMODE_CONTINOUS, //点动模式
Position:= ,
Velocity:= di_Jog_Velocity,
Acceleration:=di_Jog_Acceleration ,
Deceleration:= di_Jog_Deceleration,
Jerk:= di_Jog_Jerk,
Done=> ,
Busy=> ,
Active=> ,
CommandAborted=> ,
Error=> ,
ErrorID=> );

//*轴相对定位-MoveAdd //
MC_MoveAdditive_0(
Axis:= _axis1,
Execute:= bi_MoveAdditive, //上升沿信号触发
Distance:= di_MoveAdditive_Distance,
Velocity:= di_MoveAdditive_Velocity,
Acceleration:= di_MoveAdditive_Acceleration,
Deceleration:= di_MoveAdditive_Deceleration,
Jerk:= di_MoveAdditive_Jerk,
BufferMode:= ,
Options:= ,
Done=> ,
Busy=> ,
Active=> ,
CommandAborted=> ,
Error=> ,
ErrorID=> );

//*轴相对定位-MoveRela //
MC_MoveRelative_0(
Axis:= _axis1,
Execute:= bi_MoveRelative, //上升沿信号触发
Distance:= di_MoveRelative_Distance,
Velocity:= di_MoveRelative_Velocity,
Acceleration:= di_MoveRelative_Acceleration,
Deceleration:= di_MoveRelative_Deceleration,
Jerk:= di_MoveRelative_Jerk,
BufferMode:= ,
Options:= ,
Done=> ,
Busy=> ,
Active=> ,
CommandAborted=> ,
Error=> ,
ErrorID=> );

//**轴绝对定位启动
MC_MoveAbsolute_0(
Axis:= _axis1,
Execute:= bi_MoveAbsolute, //上升沿信号触发
Position:= di_MoveAbsolute_Position,
Velocity:= di_MoveAbsolute_Velocity,
Acceleration:= di_MoveAbsolute_Acceleration,
Deceleration:= di_MoveAbsolute_Deceleration,
Jerk:= di_MoveAbsolute_Jerk,
BufferMode:= ,
Options:= ,
Done=> ,
Busy=> ,
Active=> ,
CommandAborted=> ,
Error=> ,
ErrorID=> );

//**以速度方式运行
MC_MoveVelocity_0(
Axis:= _axis1,
Execute:= bi_MoveVelocity, //上升沿信号触发
Velocity:=di_MoveVelocity_Velocity ,
Acceleration:= di_MoveVelocity_Acceleration,
Deceleration:= di_MoveVelocity_Deceleration,
Jerk:= di_MoveVelocity_Jerk,
Direction:= di_MoveVelocity_Direction, //MC_Negative_Direction -> 反向 MC_Positive_Direction -> 正向
BufferMode:= ,
Options:= ,
InVelocity=> ,
Busy=> ,
Active=> ,
CommandAborted=> ,
Error=> ,
ErrorID=> );

//**轴速度缩放系数设置
MC_SetOverride_0(
Axis:= _axis1,
Enable:= bi_SetOverride, //TRUE生效,FALSE无效
VelFactor:= di_VelFactor, //1.0=100% 0.01-1.0
AccFactor:= ,
JerkFactor:= ,
Enabled=> ,
Busy=> ,
Error=> ,
ErrorID=> );

//*当前轴位置设置(增量式编码器电机)
MC_SetPosition_0(
Axis:= _axis1,
Execute:= bi_SetPosition, //TRUE生效,FALSE无效
Position:= 0,
Mode:= ,
Options:= ,
Done=> ,
Busy=> ,
Error=> ,
ErrorID=> );
IF MC_SetPosition_0.Done THEN
bi_SetPosition:=FALSE;
END_IF

//*读轴位置
MC_ReadActualPosition_0(
Axis:= _axis1,
Enable:= bi_AxisRead, //TRUE生效,FALSE无效
Valid=> ,
Busy=> ,
Error=> ,
ErrorID=> ,
Position=> do_ActualPosition);

//*读轴速度
MC_ReadActualVelocity_0(
Axis:= _axis1,
Enable:= bi_AxisRead, //TRUE生效,FALSE无效
Valid=> ,
Busy=> ,
Error=> ,
ErrorID=> ,
ActualVelocity=>do_ActualVelocity );

//*读轴状态
MC_ReadStatus_0(
Axis:= _axis1,
Enable:= bi_AxisRead, //TRUE生效,FALSE无效
Valid=> ,
Busy=> ,
Error=> bo_AxisError,
ErrorID=>do_AxisErroID ,
ErrorStop=> bo_ErrorStop,
Disabled=> bo_Disabled,
Stopping=> bo_Stopping,
StandStill=> bo_StandStill,
DiscreteMotion=> bo_DiscreteMotion,
ContinuousMotion=> bo_ContinuousMotion,
SynchronizedMotion=> bo_SynchronizedMotion,
Homing=> bo_Homing,
ConstantVelocity=> bo_ConstantVelocity,
Accelerating=> bo_Accelerating,
Decelerating=> bo_Decelerating,
Status=> );

2.5轴控功能块梯形图(LD)实现
1在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.6程序在线监控

ST程序在线

优点:注释和程序一目了然
在这里插入图片描述
梯形图程序在线

优点:逻辑功能清晰,功能块得输入和输出清清楚楚

在这里插入图片描述
3、第三方伺服其它功能
3.1扭矩读取
读取第三方伺服的扭矩,需要通过关联PDO Maping的输出来读取,有的厂家伺服在IO扫描出来PDO Mapping中就有Torque,有的伺服厂家扫描出来没有,PDO Maping中没有Torque的需要手动添加。以台达A2和汇川IS620N分别举例:

首先在PLC程序添加变量:

hmi_ActualTorque AT%I*: INT; // Axises’s Actual Torque
变量添加好以后,PLC程序工程重新编译。

汇川IS620N

在这里插入图片描述
3.2增量式伺服回零
第三方增量式伺服回零方式主要有两种

方式1:DS402协议内部PDO方式回零。

优点:伺服自己运行、定位精度高

缺点:程序逻辑复杂、不同厂家数据协议不一样

具体用法参见:

TwinCAT3中台达A2增量编码器伺服使用PDO方式回零_panjinliang066333的博客-CSDN博客

方式2:使用伺服功能块MC_Jog和MC_SetPosition

优点:不同的厂家都可以通用、程序逻辑简单

缺点:定位精度低

用法:回零指令起动,伺服以Jog运动方式缓慢向零运动,当零点传感器检测到伺服到达信号Jog运动停止,然后使用MC_SetPosition设置当前位置为0,即伺服回零完成。若伺服刚开始就在零点传感器上,则Jog不会运动,伺服位置直接设置为零。

具体用法参见:

(注意:因为伺服回零是往一个方向运动,因此不管用哪种方式回零,在第一次回零的时候务必确保零点传感器在Jog运动的方向范围之内)
————————————————
版权声明:本文为CSDN博主「Big_潘大师」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/panjinliang066333/article/details/123423911

  • 5
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 倍福twincat 3 运动控制教程.pdf是一本介绍倍福twincat 3运动控制的教程手册。Twincat 3是德国倍福公司开发的一款先进的PLC(可编程逻辑控制器)软件平台,可以用于实现各种工业自动化控制系统。 该教程手册主要介绍了Twincat 3运动控制的基本概念、功能和实现方法。首先,它详细介绍了运动控制的相关术语和基本原理,包括坐标系、轴、运动控制的类型等。然后,它进一步介绍了如何使用Twincat 3进行运动控制的编程,包括创建运动控制任务、配置运动控制参数、设置运动轨迹等。 该教程手册还提供了丰富的图文示例和实际应用案例,方便读者理解和掌握Twincat 3运动控制的应用。它详细说明了如何使用Twincat 3进行直线插补、圆弧插补、位置控制等运动控制操作,并提供了相应的代码示例和运行结果。此外,它还介绍了如何使用Twincat 3进行运动控制的调试和优化,以确保系统的稳定性和精确性。 总之,倍福twincat 3 运动控制教程.pdf是一本很有价值的学习资料,适合想要学习和应用倍福twincat 3运动控制技术的工程师和技术人员阅读。通过学习该教程,读者可以全面了解Twincat 3运动控制的基本原理和实现方法,并能够熟练应用Twincat 3实现各种复杂的运动控制任务。 ### 回答2: 《倍福twincat 3 运动控制教程.pdf》是一本关于倍福twincat 3运动控制技术的教程手册,旨在帮助读者了解和掌握该技术的使用方法和应用场景。 该教程首先会介绍twincat 3运动控制技术的基本概念和原理,包括运动控制的基本知识、运动控制器的结构和工作原理等内容。同时,教程还会详细介绍twincat 3运动控制技术的特点和优势,比如多轴动态插补、高速响应和高精度控制等。 在教程的后续部分,将会重点介绍twincat 3运动控制技术在实际工程中的应用,包括机械手臂控制、数控机床控制、印刷设备控制等。读者将通过学习实际案例和应用技巧,能够更好地理解和掌握twincat 3运动控制技术的使用方法和注意事项。 此外,在教程的最后部分,还会讲解twincat 3运动控制技术的进阶应用,比如与传感器和视觉系统的结合,实现更复杂的运动控制任务。读者将能够了解到twincat 3运动控制技术的拓展应用领域,增强其在实际项目中的实际效用。 总的来说,《倍福twincat 3 运动控制教程.pdf》为读者提供了一份全面系统的twincat 3运动控制技术学习资料,内容丰富详细,适合初学者和有一定基础的读者使用。阅读本教程后,读者将能够快速掌握twincat 3运动控制技术的使用和应用,有助于提升工程实践能力和竞争力。 ### 回答3: 倍福Twincat 3运动控制教程.pdf是一本关于倍福Twincat 3运动控制系统的教程手册。Twincat 3是倍福公司推出的一款先进的工业自动化控制软件,该教程将帮助读者了解如何使用Twincat 3进行运动控制,以及如何实现精确的运动控制应用。 在该教程中,读者将学习如何配置Twincat 3的运动控制模块,包括设置伺服驱动器、电机参数和编码器等。同时,读者还将学习如何编写Twincat 3运动控制程序,以实现不同的运动控制应用,如点位运动、直线运动和圆弧运动等。 除此之外,该教程还介绍了Twincat 3中的高级运动控制功能,如运动插补、对轴同步和电子齿轮等。读者可以学习如何使用这些功能来实现更复杂的运动控制任务。 此外,教程还包括一些实例应用和案例分析,以帮助读者更好地理解和应用Twincat 3的运动控制功能。通过实际的案例,读者可以学习到如何解决运动控制中的常见问题和挑战。 总之,倍福Twincat 3运动控制教程.pdf是一本全面介绍Twincat 3运动控制系统的教程手册,通过学习该教程,读者可以掌握Twincat 3的运动控制功能,为工业自动化控制提供了强大的工具和技术支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光怪陆离的节日

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值