TwinCAT Motion 记录行程距离
TwinCAT Motion record travel distance
我需要一些帮助来编写一个功能块,我可以用它来记录轴的移动距离。这应该记录每次轴移动有点像里程表,这个值将用于轴的预防性维护。即润滑滚珠丝杆和直线轴承。
该功能必须在轴不移动时忽略轴上的颤动,并适应多次覆盖位置的归位功能。
您可以通过积分轴设置速度的绝对值来实现。
VAR
lrCycleTime_s : LREAL;
lrVelocity_mmPerCycle : LREAL;
lrDistance_mm : LREAL;
END_VAR
======================================
lrCycleTime_s := UDINT_TO_LREAL(_TaskInfo[GETCURTASKINDEXEX()].CycleTime) / 10000000; //Get cycle time in seconds
lrVelocity_mmPerCycle := Axis.NcToPlc.SetVelo * lrCycleTime_s ; // Convert velocity per second > per cycle
lrDistance_mm := lrDistance_mm + ABS(lrVelocity_mmPerCycle);
请记住在循环时间等于您的运动循环时间(默认为 2 毫秒)的任务中执行此操作
我需要一些帮助来编写一个功能块,我可以用它来记录轴的移动距离。这应该记录每次轴移动有点像里程表,这个值将用于轴的预防性维护。即润滑滚珠丝杆和直线轴承。
该功能必须在轴不移动时忽略轴上的颤动,并适应多次覆盖位置的归位功能。
您可以通过积分轴设置速度的绝对值来实现。
VAR
lrCycleTime_s : LREAL;
lrVelocity_mmPerCycle : LREAL;
lrDistance_mm : LREAL;
END_VAR
======================================
lrCycleTime_s := UDINT_TO_LREAL(_TaskInfo[GETCURTASKINDEXEX()].CycleTime) / 10000000; //Get cycle time in seconds
lrVelocity_mmPerCycle := Axis.NcToPlc.SetVelo * lrCycleTime_s ; // Convert velocity per second > per cycle
lrDistance_mm := lrDistance_mm + ABS(lrVelocity_mmPerCycle);
请记住在循环时间等于您的运动循环时间(默认为 2 毫秒)的任务中执行此操作