找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
{{itemCategory}}
RT_increment_home_rtrig(clk := i_sCMD.boAxisIncreHoming);
CASE l_i16CaseCount OF
0:
l_i16CaseCount := 1;
1:
IF i_toAxis.control = Active AND
i_toAxis.actormonitoring.drivestate = Active AND
i_toAxis.actormonitoring.Power = Active THEN
l_i16CaseCount := 10;
END_IF;
10:
IF (RT_increment_home_rtrig.q) THEN
l_i16CaseCount := 11;
END_IF;
11:
_MccRetDINT := _homing(axis := i_toAxis,
homingMode := ACTIVE_HOMING,
homePositionType := DIRECT,
homePosition := i_sPara.r64IncZeroOffset,
velocityType := DIRECT,
velocity := i_sPara.r64IncHomingVelocity,
velocityProfile := TRAPEZOIDAL,
mergeMode := IMMEDIATELY,
nextCommand := WHEN_BUFFER_READY,
commandId := _getCommandId());
l_i16CaseCount := 12;
12:
IF i_toAxis.motionstatedata.stillstandvelocity = active THEN
l_i16CaseCount := 16;
END_IF;
16:
l_i16CaseCount := 17;
17:
l_i16CaseCount := 0;
END_CASE;
END_FUNCTION_BLOCK
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
FUNCTION_BLOCK FB_Incremental_Homing :定义一个功能块,类似STEP7中FB块
VAR_INPUT :定义输入变量
i_toAxis : PosAxis; :这里总共定义了三个输入变量,和STEP7
i_sCMD : StructAxisOpe; :中的FB块的INPUT是一个道理。
i_sPara : StructAxisPara;
END_VAR
VAR :定义临时变量,只能在本程序段中调用
l_i16CaseCount : INT := 0; :定义一个整数类型
_MccRetDINT : DINT; :定义一个双整数
RT_increment_home_rtrig : R_TRIG; :定义一个上升沿
END_VAR
RT_increment_home_rtrig(clk := i_sCMD.boAxisIncreHoming); 上升沿由 i_sCMD.boAxisIncreHoming触发, RT_increment_home_rtrig.q只会在一个扫描周期为1
CASE l_i16CaseCount OF :case语句,
0:
l_i16CaseCount := 1; :如果 l_i16CaseCount =0,执行
l_i16CaseCount =1
1: :如果l_i16CaseCount =1执行下面的语句
IF i_toAxis.control = Active AND :IF判断语句
i_toAxis.actormonitoring.drivestate = Active AND
i_toAxis.actormonitoring.Power = Active THEN
l_i16CaseCount := 10; :满足上面三个条件时 l_i16CaseCount := 10
END_IF;
10: :如果l_i16CaseCount =10执行下面的语句
IF (RT_increment_home_rtrig.q) THEN :前面定义了这个上升沿的动作
l_i16CaseCount := 11; 执行 l_i16CaseCount := 11
END_IF;
11: 等于11时开始执行回原点,这是一个系统的功能块,直接调用
_MccRetDINT := _homing(axis := i_toAxis,
homingMode := ACTIVE_HOMING,
homePositionType := DIRECT,
homePosition := i_sPara.r64IncZeroOffset,
velocityType := DIRECT,
velocity := i_sPara.r64IncHomingVelocity,
velocityProfile := TRAPEZOIDAL,
mergeMode := IMMEDIATELY,
nextCommand := WHEN_BUFFER_READY,
commandId := _getCommandId());
l_i16CaseCount := 12; 执行完,赋值 l_i16CaseCount := 12
12: 这是判断上面的动作是否完成
IF i_toAxis.motionstatedata.stillstandvelocity = active THEN
l_i16CaseCount := 16; 赋值16
END_IF;
16:
l_i16CaseCount := 17;
17:
l_i16CaseCount := 0; 全
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
找答案微信小程序
提问
搜索
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!