倍福TwinCAT(贝福Beckhoff)应用教程13.3 TwinCAT控制松下伺服 NC配合完整上位
这是TwinCAT教程的最后一节,简单讲述了以C#为上位,通过ADS控制TwinCAT下位,实现完整控制两轴模组的功能。可以发现,在上位层已经没有了运动控制的代码,不管是要执行哪种运动,无非是把目标参数写入到绑定的对应变量,然后修改下位的任务号CurrentJob

在C#中一方面需要定时采集机器人的位置,速度还有状态等信息,另一方面需要显示这些信息(或者说利用这些信息)。采集需要足够快(比如判断一条命令是否执行完毕,应该是越快越好,可以立即执行下一条命令),而显示则可以慢一点(可想如果需要大幅更新主界面数据,如果也5ms,10ms更新一次会消耗大量资源,同时也没有什么实用价值)

为了实现单条命令的生成,我们需要得到一种格式,比如下面的两句,要求命令的执行函数名(MOVEJ/MOVEL),目标位置(关节位置数组/TCP位置数组),目标速度,加速度,加加速度。每一家标准工业机器人的语法不太一样,但是都是大同小异。其实可以完善的地方很多,比如用户movej的时候给目标TCP位置而不是关节位置如何处理,比如多加了逗号,引号如何判断等等
movej([-12.562,-16.032],a = 1200.00, v = 400.00, j = 3000.00);
movel(p[-143.939,78.180],a = 800.00, v = 200.00, j = 1200.00);

为了实现单条语句的执行,本质上就是生成语句的反过程(这也是单步执行和跳转到指定行执行的原理),解析成功或者失败都要有反馈(通过委托往外传递),一来可以提示用户要执行的语句语法错误,二来在连续执行的时候如果发现了重复指令需要自动跳过执行下一行。

这就牵扯到了连续运行的原理,我们首先把textbox的所有文本按行分割,一行就认为是一句。给定一个起始下标默认从第0行开始执行(字符串命令拆分到数组的第一个元素),连续运行的时候先手动执行第一行。如果完成则C#会通过信号的上升沿捕捉到,然后通过委托告知主界面,主界面把下标加1,接着执行下一句,如果超过了总的行数则下标复位(当然如果是空行或者重复行,或者语法错误行,都应该跳过或者用其他处理办法,比如加红加粗表示这行有问题)

以上简述的只是简单的连续执行原理,所有语法需要自己定义,而且无法掺杂更加高级的语法和判断(比如既然是一行作为一句,就无法嵌套if,switch语句这些判断情况。而且由于所有语句需要自己解析,对于数组,指针,结构体,对象,委托等等变量都很难处理)。简单点说这更像是一个G代码的处理模式,一行就是一行,实用价值也是有的,但无法真正作为编译器使用。
编译器和高级语言的嵌入也是比较复杂的。例如C++或者Linux可以考虑LUA,可以发现官方的演示中测试自定义方法,也可以定义变量,for循环,if语句等等(具体如何嵌入到高级语言还需要读者自己研究)
https://www.lua.org/cgi-bin/demo

如果是.NET平台可以使用微软自带的Roslyn编译器,已经是开源的,而且网上有很多可以参考的范例
http://www.cnblogs.com/TianFang/archive/2012/02/14/2351817.html

此外还有一些Web平台,可以使用类似于JavaScript的语言作为编译器(甚至不需要IDE可以在线编程)
官方网站:www.compilr.com

官方网站:www.jsfiddle.net

官方网站:www.botskool.com/online-compiler

更多教学视频和资料下载,欢迎关注以下信息:
我的优酷空间:
http://i.youku.com/acetaohai123

我的在线论坛:
http://csrobot.gz01.bdysite.com/

问题交流:
QQ:910358960
倍福TwinCAT(贝福Beckhoff)应用教程13.3 TwinCAT控制松下伺服 NC配合完整上位的更多相关文章
- 倍福TwinCAT(贝福Beckhoff)应用教程12.3 TwinCAT控制松下伺服 NC进阶
在前面一节,我们简单介绍了通过PLC+HMI实现完整控制松下伺服的上使能-运动,采集位置,速度等功能,这里我们会大量简化用到的贝福功能块(为了更加实用).首先依然是对单个轴的封装,我们之前的做法,例如 ...
- 倍福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)应用教程13.2 TwinCAT控制松下伺服 CS说明
虚拟仿真上,要注意仿真只是为了可视化,可以看到数据的变动是否和实际一致,所以Robot2D才是主要因素,虚拟仿真采集机器人的关节位置或者TCP位置来显示而已,为了测试一些别的算法,我们还可以在虚拟仿真 ...
- 倍福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)应用教程12.1 TwinCAT控制松下伺服 连接和试运行
首先是用松下伺服自带的软件可以测试运行(驱动器,电机都连接好,然后用USB线连接到松下伺服驱动器的X1口),打开调试软件会自动提示连接到伺服 一般需要对驱动器清除绝对值编码器数据(驱动器可能报错4 ...
- 倍福TwinCAT(贝福Beckhoff)应用教程11.1 TwinCAT应用小程序1 如何读写数字量模拟量输入输出(DI,DO,AI,AO)
常见的模拟量模块(还有更高端和更低端的,使用方法都一样) EL3054和EL4024(4路模拟量输入和输出模块) 常见的数字量模块(还有更高端和更低端的,使用方法都一样) EL1809和EL280 ...
随机推荐
- discuz自定义生成单页面
在pc端,若要生成一个单页面,有一个比较方便的方法是生成新的专题页,然后diy其中的内容. 不过这种做法有两个缺点 1 url太过冗赘 2 只有一个插入url代码功能,没有文本编辑功能 而且文本框小的 ...
- Java常见知识点(二)
21.常量池专门用于管理在编译时被确定并被保存在已编译的.class文件中的一些数据.它包括了关于类.方法.接口中的常量,还包括字符串常量. 22.String已经重写了Object的equals ...
- tcpdump学习(2):基本使用
安装好tcpdump之后,运行tcpdump: 1. tcpdump -D 获取网络适配器列表,以下是在Ubuntu上获取到的结果: root@holmesian-laptop:~# tcpdump ...
- OpenAcc社区版安装教程(Linux版)(更新版)
官方安装过程如下图所示 1.安装前 下载OpenAcc社区版 1,目前为止的最新版,平台是Linux,选择Linux x86-64. 我的服务器系统是CentOs 下载地址链接:https://www ...
- ACM-ICPC北京赛区(2017)网络赛1【模拟+枚举+数组操作】
题目1 : Visiting Peking University 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Ming is going to travel for n ...
- HDU 2503 (数论,最大公约数)
a/b + c/d Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- Python的异步编程[0] -> 协程[0] -> 协程和 async / await
协程 / Coroutine 目录 生产者消费者模型 从生成器到异步协程– async/await 协程是在一个线程执行过程中可以在一个子程序的预定或者随机位置中断,然后转而执行别的子程序,在适当的时 ...
- 福州三中集训day4
第6天写第4天的博客….可以说是很弱了…… 讲了一天的高级数据结构,可以说很迷,先是并查集,然后是树状数组,线段树,MAP函数,KMP算法. 很难……确实不是很清楚…但是很重要,回去以后这应该说是优先 ...
- Codeforces 1039A. Timetable
题目地址:http://codeforces.com/problemset/problem/1039/A 题目的关键在于理清楚思路,然后代码就比较容易写了 对于每一个位置的bus,即对于每一个i(i& ...
- hadoop 编译代码及运行
搞定了hadoop配置之后,可以写代码运行了,首先要配一下CLASS_PATH,修改/etc/profile export JAVA_HOME=/usr/lib/jvm/java--openjdk-i ...