一.开发需求
1.创建一个管脚名(pin)叫做joint.0.home-start,通过这个来触发回原点操作,但是后来发现通过指令halcmd show | grep home
发现其中有一个pin和我想创建的这个管脚作用很相似(这个管脚halui.joint.0.home
),于是我试了一下将这个设置为1对应的轴就可以触发回原点操作,以上回原点正常的情况下都是在修改源码的时候,但是我用修改的源码触发回原点操作会卡死。
2.我的思路是在回原点触发的时候就不执行我修改的那部分代码
3.但是遇到一个问题未经过改造的Linuxcnc源码,会有个问题回过一次原点,就不能回第二次了,回第二次就会出现报错如下图:
修改代码解决(注释掉这个报错)
4.根据回原点的示波器波形可得到:
当回原点过程中管脚(pin),joint.0.home-state
是不为0的我们就可以利用这一点来判断如果这个不为0那么就是在回原地过程中那么我们就不执行我们新增的那三行代码(free-cmd,vel,motion-enable),则执行原有代码中的三行代码,当这个joint.0.home-state
为0的时候再执行我们新增加的三行代码。
5.自定义两个管脚来控制快速回原点和慢速回原点的速度大小(慢速joint->home_latch_vel
),(快速joint->home_search_vel
)别问我怎么知道的(茄子)。
先创建两个管脚joint.0.home-latch-vel
和joint.0.home-search-vel
,这里模仿joint.%d.free-pos-cmd
这个的创建就好了。然后再将hal管脚数据拷贝到joint struct结构体中就好了。