倍福TwinCAT(贝福Beckhoff)应用教程12.3 TwinCAT控制松下伺服 NC进阶
在前面一节,我们简单介绍了通过PLC+HMI实现完整控制松下伺服的上使能-运动,采集位置,速度等功能,这里我们会大量简化用到的贝福功能块(为了更加实用)。首先依然是对单个轴的封装,我们之前的做法,例如伺服上使能,使用了MC_Power模块,这个模块的输入和输出引脚都是自己定义的变量,比如是否上电成功我们是靠AxisPowerReady的信号来判断的,如果有两个甚至多个伺服的时候,这样做就很不方便管理了,所有的同类型变量都应该用数组统一管理。
改变之后的上使能,就变成了调用一个模块(我们把AxisPowerModule定义成一个数组,当TargetID是0的时候就表示给数组的第一个元素执行,与之对应的输出引脚,比如是否上电成功,是否ExtFeed成功,也全部是在一个数组里面)
这样我们可以在一个全局文件中对所有轴的输入输出参数统一管理(定义成0..10的这么长数组是为了以后方便扩展,虽然目前是控制两个模组,但是如果要控制多个电机,就无需再增减变量了,主程序可以保持结构完整)
讲到主程序,我们还需要区分针对单个轴和针对整个项目的变量区分。例如初始化,读写偏移值(后续会增加更多功能,比如PTP运动)都是针对整个项目,或者说整个机器的,不同的项目也 不一样。而针对单个轴的却都是有限的,无非是上使能,采集位置,速度,错误等等。所以J0和J1可以用一个Groupbox封起来,以后不管什么项目这些单关节的完整功能都是应该具备而且不变的(当整个项目的某个功能不能用了,我们可以马上切换到单个关节的页面,测试是否可以单关节运动)
在读写偏移值的方面,我个人认为写入文件的方式更加合理和方便。跟上一讲类似,调用贝福的模块需要当前周期为FALSE,下个周期为TRUE,模块才能执行成功(一共用到了FileClose,Open,Read,Write四个模块),本质上读取文件是OPEN-READ-CLOSE三步,写入文件是OPEN-WRITE-CLOSE三步(不能写完直接读,要有一个周期让这些模块都是FALSE)
当然读写偏移值有其他的实现方式,比如在每个轴的Enc参数里面人为地改写Position Bias,然后激活配置,这样也可以,但是比较繁琐,或者无法交给用户,你不可能告诉客户你要这样点开,然后写一个值,所以最好还是一个按钮搞定。(实现的功能就是标记零点,本质上使用了绝对值编码器的松下伺服位置是绝对的,我们标记零点只是标记一个偏移值,真正要让电机回到零点就要走到读取电机位置的数值是0点的位置,而实际上一般做不到或者很难做到,所以最简单的方法是用一个偏移值,我们项目上认为当前关节的位置=从电机读取的位置+偏移值,这样就可以在任意位置把当前位置作为零点了)
在运动控制方面,我们丢弃了之前的绝对运动,相对运动,匀速运动这些模块,而是只使用唯一的ExtFeed模块,不断给位置来控制电机运动(这样做最大的好处是当我们需要使用自定义算法,比如规划一个圆弧,不规则曲线的时候,我们算法必然只能得到每个周期的每个关节的位置,那么就可以直接把算法得到的位置灌入这个模块,非常方便,这是使用贝福的封闭的模块做不到的)。当然读取位置,速度,错误这些模块仍然要保留,目前没有别的好方法。不难想象,JOG+和JOG-本质就是匀速运动(当然启停的时候不是匀速的),MOVE的本质就是绝对运动(走到目标位置,只不过没有空间轨迹规划,只是简单的判断了当前位置和目标位置是否很小了,很小就停住了,这样做也会有问题)
还是说运动部分,为了降低难度,我们只测试了最简单的ExtFeed给位置的情况(每个时间周期的新位置=老的位置+速度*时间),这种方式实际上对电机的启停都是有损害的(位置曲线是一条折线,对位置求导速度曲线在启动和停止的时候是无穷大的,加速度也是)。比较重要的一个学习内容是监控轴的位置,速度,加速度曲线,这里我们简单演示了采集位置和速度,当然机器看起来没什么问题(如果机械方面有缓冲件也是可以降低冲击力的)
最后需要注意的一点是我们把电机位置,电机速度转换到了关节位置,关节速度(机械部分不一样,转换的比例也不一样,但是不管是模组只是加了一个联轴器,滚珠丝杠,还是加了减速机,减速比可能1:50,1:100,对程序来说都需要一个固定的转换,如果项目变了,直接改这个比例就行了)。我们不关心电机位置和速度,只关心输出的关节位置和速度(最直接的用途就是做软件的限位,比如J0这个关节在当前项目允许的位置是-1000度到2000度,速度允许的是300度每秒)当然逆向的转换也是必要的,算法生成的针对关节的位置,最后要传入电机还是需要转换成电机的位置(这里我们并没有把限位加上去,因为针对单个关节的点动,JOG+,JOG-是不应该受到项目的软限位约束的,单关节的点动就是点动,万一超限位了项目上的功能已经不能用了还是要用这组基本点动功能让他恢复正常状态,你可以理解针对单个关节的功能就是倍福自带的NC功能或者松下伺服软件自带的功能,这部分功能是独立于你的项目,才是合理的。我对CurrentJob里面针对单个关节的运动都定义成了-30,-24这种都是负的数值,后续项目上的功能状态都是正值,就很好区分了)
更多教学视频和资料下载,欢迎关注以下信息:
我的优酷空间:
http://i.youku.com/acetaohai123
我的在线论坛:
http://csrobot.gz01.bdysite.com/
问题交流:
QQ:910358960
倍福TwinCAT(贝福Beckhoff)应用教程12.3 TwinCAT控制松下伺服 NC进阶的更多相关文章
- 倍福TwinCAT(贝福Beckhoff)应用教程13.1 TwinCAT控制松下伺服 NC高级
本节主要演示了使用自定义函数实现电机的运动(梯形曲线和S曲线都有实现),这里的JOG+和JOG-,针对单个关节实现了PTP的运动(跟贝福的MoveAbsolute功能块实现效果一致),在此没有介绍运动 ...
- 倍福TwinCAT(贝福Beckhoff)应用教程12.2 TwinCAT控制松下伺服 NC初步
在前面我们已经学会了使用贝福自带的调试软件完成试运行,接下来是使用TWINCAT PLC实现这个功能,右击PLC添加一个PLC项目 在VISUs上右击添加一个HMI人机界面 目前PLC程序和人 ...
- 倍福TwinCAT(贝福Beckhoff)应用教程12.1 TwinCAT控制松下伺服 连接和试运行
首先是用松下伺服自带的软件可以测试运行(驱动器,电机都连接好,然后用USB线连接到松下伺服驱动器的X1口),打开调试软件会自动提示连接到伺服 一般需要对驱动器清除绝对值编码器数据(驱动器可能报错4 ...
- 倍福TwinCAT(贝福Beckhoff)应用教程13.3 TwinCAT控制松下伺服 NC配合完整上位
这是TwinCAT教程的最后一节,简单讲述了以C#为上位,通过ADS控制TwinCAT下位,实现完整控制两轴模组的功能.可以发现,在上位层已经没有了运动控制的代码,不管是要执行哪种运动,无非是把目标参 ...
- 倍福TwinCAT(贝福Beckhoff)应用教程13.2 TwinCAT控制松下伺服 NC自定义直线插补
对于MOVEJ的关节运动来说,我们只关心每个电机的角度(只需要考虑多个电机协同开始运动和结束运动,关键是对每个电机加速度均一化,从而一起跑一起停,这部分内容可以参考机器人学导论以获取更加详细的说明), ...
- 倍福TwinCAT(贝福Beckhoff)基础教程1.2 TwinCAT安装配置
由于TC2和TC3都有可能用到,个人推荐都安装,但是注意必须是先安装的TwinCAT2,然后安装TwinCAT3,如果反了可能两个都没法用(打开TcSwitchRuntime提示Both TwinCA ...
- 倍福TwinCAT(贝福Beckhoff)基础教程1.1 TwinCAT背景知识
本节附件中有很多PPT介绍贝福TwinCAT和EtherCAT的相关技术,在此只做简单说明. 简单总结:EtherCAT就是一种总线技术,具有速度快,稳定性高,布线简单等优点,详细可以参考下面这个PP ...
- 倍福TwinCAT(贝福Beckhoff)应用教程11.1 TwinCAT应用小程序1 如何读写数字量模拟量输入输出(DI,DO,AI,AO)
常见的模拟量模块(还有更高端和更低端的,使用方法都一样) EL3054和EL4024(4路模拟量输入和输出模块) 常见的数字量模块(还有更高端和更低端的,使用方法都一样) EL1809和EL280 ...
- 倍福TwinCAT(贝福Beckhoff)基础教程6.1 TwinCAT如何与高级语言通讯
因为使用TwinCAT的人用途不同,重视点就不同.如果用来代替传统PLC+HMI做项目的,很少会需要用到跟高级语言通讯,但是如果是用来做运动控制平台如做机器人运动控制器的,就肯定会用到.不管是否用得上 ...
随机推荐
- python的上下文管理(contextlib)(2)
contextlib是一个Python模块,作用是提供更易用的上下文管理器. 编写 __enter__ 和 __exit__ 仍然很繁琐,因此Python的标准库 contextlib 提供了更简单的 ...
- Zookeeper概念学习系列之zookeeper实现分布式共享锁
首先假设有两个线程, 两个线程要同时到mysql中更新一条数据, 对数据库中的数据进行累加更新.由于在分布式环境下, 这两个线程可能存在于不同的机器上的不同jvm进程中, 所以这两个线程的关系就是垮主 ...
- 静态页面表单中js验证
笔记: 1. onblur事件:onblur 事件会在对象失去焦点时发生.http://www.w3school.com.cn/jsref/event_onblur.asp onkeyup事件:onk ...
- bufferknife框架的正确使用方式 -终于他么知道了
1.由于ButterKnife从7.x到8.x后,运行时和编译器被分开来,你还需要配置 apt ‘com.jakewharton:butterknife-compiler:8.1.0’,在projec ...
- ZCMU训练赛-A(模拟)
A - Applications https://vjudge.net/contest/174208#overview Recently, the ACM/ICPC team of Marjar Un ...
- POJ1300Door Man(欧拉回路)
Door Man Time Limit: 1000MS Memory Limi ...
- POJ2349 Arctic Network(Prim)
Arctic Network Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 16968 Accepted: 5412 D ...
- [BZOJ5462][APIO2018]新家(线段树+堆)
其实这个题第一反应一定是线段树分治,但是这样反而更难考虑了(实际上是可做的但很难想到),可见即使看上去最贴切的算法也未必能有效果. 考虑这个DS题,没有什么模型的转化,可能用到的无非就是线段树.平衡树 ...
- [Codeforces 28D] Do not fear,DravDe is kind
Brief Intro: 对于四元组(v,c,l,r),求其子序列中v最大的和,并使其满足: 1.Ci+Li+Ri相同 2.L1=0,Rn=0 3.Li=Sigma(C1...Ci-1) Soluti ...
- mysql获取分类数量
1.sql <select id="getTypeNum" resultType="TypeNum" > select count(*) as al ...