概述
本文主要介绍研华运动控制卡如何实现多轴回原点并将XYZ三轴走到对应待机位的动作流程,为了更好掌握回原点运动控制流程,这里详细介绍了XYZ三个轴先后回原点,回原点完成后清零及运动到待机位等程序流程开发。本文程序的开发以C#为例,其他的开发语言只是编写语言的区别,对于整体的开发流程无区别。
回原点流程
创建线程
由于回原点整体的动作属于运动流程,因此我们还是用Switch Case的架构来实现,关于线程的建立及相应各个功能,请查看研华运动控制卡程序开发——单轴往返运动一文中的创建线程章节,线程函数规划如下图。
动作流程编写
本文需要达到的就是所有的回原点动作流程均在Case:SysHomeState里面执行,为此我们只需要在对应的AdvHome()函数里实现回原点运动流程即可。
那AdvHome()函数里,我们又将每一步动作划分到每个Case来执行,如下图。
每执行完一个Case就跳出到外面大的While循环(上图线程函数中的While),然后再进入Case:SysHomeState,再进到AdvHome()函数里执行下一个Case。因此,在AdvHome()函数里不允许在Case里面增加Sleep来作为延时计算,这样会导致整个线程处在Sleep里面,没法响应其他异常。
代码实现
AdvHome()函数对应的动作流程
AdvAxSetHomeVelPar()函数代码
AdvAxMoveHome()函数代码
AdvMotionDone()函数代码
WaitTime()函数代码
AdvEctAxSetPos()函数代码
EtherCAT总线型驱动器,不支持SetActualPosition指令,调用SetCmdPosition指令后,会对驱动器执行CiA402中的Home mode35模式,将当前的位置设置为输入值。因为该方式是通过SDO方式进行读写设置,所以有一定几率发生调用失败的现象。因此,建议调用完该指令,需判断返回值是否成功以及轴状态是否Ready,若是返回值为失败或轴状态为ErrorStop则需再次重新调用该指令。可通过下图流程图及参考代码进行设置轴位置设置。
对于脉冲型驱动器模块从站(针对AMAX-3245/85上所控制的轴或者脉冲板卡),因为该模块不是CiA402模块,理论位置和反馈位置不需要同步,因此该模块支持SetCmdPosition和SetActualPosition,且可以分开设定,可通过如下程序代码实现。
AdvMoveAbs ()函数代码界面Home按钮的响应函数代码
最终简单实现界面
最后
以上就是无聊导师为你收集整理的请画出与上述代码对应的程序流程图;_研华运动控制卡程序开发——多轴回原点...的全部内容,希望文章能够帮你解决请画出与上述代码对应的程序流程图;_研华运动控制卡程序开发——多轴回原点...所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复