FUNCTION_BLOCK FB_HOMING
VAR_INPUT
myaxis : posaxis;
starthoming : BOOL;
offset : LREAL;
END_VAR
VAR
myRetDINT : DINT;
mystarthomingrtrig : r_trig;
mystarthoming : BOOL;
myaxishomedrtrig : r_trig;
END_VAR
VAR_OUTPUT
my_axishomed : BOOL;
END_VAR
mystarthomingrtrig(clk := starthoming);
myaxishomedrtrig(clk := my_axishomed);
IF mystarthomingrtrig.q THEN
mystarthoming := TRUE;
ELSIF myaxishomedrtrig.q THEN
mystarthoming := FALSE;
END_IF;
myaxis.setconfigdata.typeofaxis.numberofencoders.
encoder_1.inchomingencoder.proceedshiftpos := offset;
IF mystarthomingrtrig.q AND myaxis.control=ACTIVE THEN
myRetDINT :=
_homing(
axis := myaxis,
homingmode := ACTIVE_HOMING,
homepositiontype :=DIRECT,
homeposition := 0.0,
velocityprofile := TRAPEZOIDAL,
mergemode := IMMEDIATELY,
nextcommand := WHEN_BUFFER_READY,
commandid := _getcommandid()
);
END_IF;
IF myaxis.positioningstate.homed = yes THEN
my_axishomed := TRUE;
ELSE
my_axishomed := FALSE;
END_IF;
END_FUNCTION_BLOCK
问题补充:
这段程序,前几段关于变量的定义基本看的懂,后面就不怎么懂了,myaxis.setconfigdata.typeofaxis.numberofencoders.
encoder_1.inchomingencoder.proceedshiftpos := offset,又是上面意思呢,myRetDINT,是什么意思? 那位帮忙解释下?
一句一句的解释啊?
最佳答案
这是一段主动回零的程序。
可以参考一下资料
1、程序首先定义了两个上升沿,当starthoming和axishomed来临时触发两个上升沿。
2、当上升沿mystarthomingrtrig触发后,赋值变量mystarthoming
表示开始回零,当上升沿myaxishomedrtrig触发,变量复位,回零结束(这个上升沿后面将触发)
3、myaxis.setconfigdata.typeofaxis.numberofencoders.
encoder_1.inchomingencoder.proceedshiftpos := offset;
是设定一个偏移量,类型为LREAL,具体变量解释可以点击相应的轴看symbol browse,找到这个变量,看它的属性。
4、前面那个上升沿触发,并且轴使能后开始回零指令。myRetDINT只是在执行回零指令_homing()所要求定义的返回值,在VAR里面也定义了,可以随便定义名称的,是一个DINT型,有时可以根据这个返回值确定程序执行的状态。
5、当回零完成后,用轴的回零变量置位my_axishomed, 变量my_axishomed同时又触发上面的上升沿程序。
参考资料:http://www2.ad.siemens.com.cn/download/Upload/MC/application/A0452.pdf
提问者对于答案的评价:
大哥,你太强了,拜你为师了!
留个联系方式可以吗?我的QQ:120801321 ,:)
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc159506.html