由于TC2和TC3都有可能用到,个人推荐都安装,但是注意必须是先安装的TwinCAT2,然后安装TwinCAT3,如果反了可能两个都没法用(打开TcSwitchRuntime提示Both TwinCAT are activated,这样你一个也无法禁用),如果是这种情况请先把两个都卸载了,如果已经安装了TwinCAT2,则在安装TwinCAT3的时候,会自动检测是否存在TwinCAT2,如果有就自动禁用,可以发现桌面右下角图标变成灰色(此外需要注意,TC2有64位的版本,但是不能运行runtim…
本节附件中有很多PPT介绍贝福TwinCAT和EtherCAT的相关技术,在此只做简单说明. 简单总结:EtherCAT就是一种总线技术,具有速度快,稳定性高,布线简单等优点,详细可以参考下面这个PPT(不是说其他总线就不行,只是说这个很优秀)   简单总结:TwinCAT就是贝福推出的基于PC的软PLC软件,软PLC可以摆脱传统PLC的编程复杂(比如懂西门子的不懂三菱,台达甚至国产的PLC,而且软PLC支持多种语言混合使用,支持类似于高级语言一样的面向对象的开发方法,调试也会变得比较简单),价…
这一节我们介绍简单的NC运动(前面所讲的所有内容都是PLC编程和HMI的界面,算是基础知识),这里NC就是控制伺服电机的部分(当然还不是实际的NC轴,是虚拟轴,但是用到的函数都是一样,可以为后面的实际应用做准备),既然用到了贝福的NC功能,就要添加对应的库   首先添加一个让轴上使能的PRG(注意是FBD格式)   在第一个空行后面插入空运算块,然后在中间的???里面输入运算块的名称(NC的函数名,NC的函数就是控制轴运动的函数,无非是上使能,下使能,位置,速度等等运动,跟运动控制卡提供的函数类…
因为使用TwinCAT的人用途不同,重视点就不同.如果用来代替传统PLC+HMI做项目的,很少会需要用到跟高级语言通讯,但是如果是用来做运动控制平台如做机器人运动控制器的,就肯定会用到.不管是否用得上,读者都应该知道贝福能够实现跟大部分高级语言如C++,C#,JAVA等等的通讯,并且非常简单(具体介绍可以自己看PPT,本节演示TwinCAT与C#的几个典型范例)   本质上,ADS通讯就是一种TCP/IP通讯,是没有实时性的,不能作为运动控制的通讯方式从上位直接丢数据.   在官方范例程序的第三…
TwinCAT提供了一系列的执行Windows系统命令的方法 Name 描述 NT_Shutdown 关机操作系统 NT_AbortShutdown 取消关机操作系统命令 NT_Reboot 重启操作系统 NT_GetTime 获取本机系统时间 NT_SetLocalTime 设置本机系统时间 NT_StartProcess 启动一个Windows的应用程序 NT_SetTimeToRTCTime 同步本地系统时钟和PC实时时钟 FB_RegQueryValue 读系统注册表 FB_RegSet…
TwinCAT提供了FB_FileRead等一系列读写文件的方法,本小程序演示的是多个贝福自带的FBD功能块连起来用的方法,跟前面讲的一样,建议在初始化的时候把所有FBD都复位,准备使用   真正的读取文件流程是打开-读取-关闭,任何一个环节都有可能出错(比如打开文件找不到这个文件,读取文件读到的数据和要放入的变量不匹配,关闭的时候由于文件在使用出错),在写PLC程序的时候,一个状态(比如CurrentJob定义了一个状态1叫做Open-puts,就实现一个功能,把一个double或者strin…
本程序只是在官方范例程序上稍作修改,在官方原有的范例中,演示了多种模式的读写(可以认为CSV文件是比TXT文件需要更多数据量的时候使用,比如记录一个小型的数据库集合)   但是写的比较混乱,甚至没有HMI的界面,读者需要学会快速在程序中找到输入输出,例如TextModeWrite(以文本方式写CSV文件),至少需要定位到触发的BOOL变量,要写入的文件地址和文件夹,要写入的数据这几个变量(其中要写入的数据是字符串类型的数组,且用逗号隔开),你直接打开官方的程序,运行之后也可以在顶部的变量表里直接…
一般声明字符串都会加一个长度的限制,比如A:STRING(80);至于真实的字符串长度不要超过这个限制即可   在测试中,我演示了两个字符串的方法,CONCAT字符串拼接和REPLACE字符串替换.拼接不用说,替换比较特殊,第一个参数是输入的字符串(要被替换的字符串),第二个参数是要替换成的新字符串,第四个参数是输入字符串的起始替换下标,第三个是替换字符个数.比如'Hello '从第2个字符开始替换,替换1个字符,替换成X,因此变成了'HXllo ',World!从第1个字符开始替换,替换3个字…
TC2的程序是在TC3的基础上稍作调整,只说明不同点,请先看TC3的. TC2中的一个原本是AXIS_REF类型变量被拆成了两个(PLCTONC_AXLESTRUCT和NCTOPLC_AXLESTRUCT结构体类型),并且都需要分别跟NC配置中的轴的FromPlc和ToPlc绑定   TC2中插入一个FB功能块是先添加一个Box,然后在方框中输入FB的函数名   接着插入输出引脚是右击之后Assign   除此之外还有一些别的区别例如一个功能块,输入输出引脚都不完全一样(TC3可以认为在TC2的…
把编写简单计算器作为入门的第一个范例程序,主要是因为比较简单,而且综合了HMI,数据类型,数据转换,PRG和FBD等功能块的混合等知识,个人认为还是比较适合用来快速上手的.由于是第一个范例,所以视频教程和文档说明都会比较详细(学习能力较强的可以跳着看,后面范例的说明会逐渐减少)   添加一个PLC,随便取个名字   首先是把人机界面做好,最简单的计算器需要实现加减乘除的功能,右击VISUs添加一个人机界面,名字也随便   在人机界面上拖放需要的控件(这个跟高级语言一样,但是注意是控件都是Twin…
声明和实例化数组的方法如下,你可以声明各种基本类型的数组 i: INT; array1: ARRAY [0..500] OF INT;   FOR i := 0 TO 5000 DO     array1[i] := i; END_FOR   也可以声明下标不从0开始的数组,比如array2和array3就都不是下标从0开始的数组   事实上,声明多维数组可以使用数组向导,可以自定义1-3维和基本类型   此外,你也可以在初始化的时候为每个元素赋值(批量选中,然后为所选择的行申请值即可,最后出来…
定义pt为指向INT类型的指针,在程序中取得var_int1的地址(INT类型),然后将地址对应的数据还原给var_int2(pt^的写法)     更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/acetaohai123   我的在线论坛: http://csrobot.gz01.bdysite.com/   问题交流: QQ:910358960 邮箱:acetaohai123@163.com      …
在DUTs文件夹上右击添加结构体,结构体中可以放基本变量类型,也可以嵌套其他结构体   使用的时候,需要声明结构体的实例,然后按照类.属性的格式来读写变量,会有代码的自动提示   你也可以声明数组,类型就是自己定义好的结构体,访问的时候,数组指定元素.属性即可(如Struct2[0].Var1)     更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/acetaohai123   我的在线论坛: http://csrobot.gz01.bdysi…
在Duts的文件夹上右击,可以声明一个枚举类型,按照格式填写所有类型(注意枚举的元素前面都是逗号,最后一个不需要符号)   在正常使用的时候,枚举的单词可以当全局变量来用     更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/acetaohai123   我的在线论坛: http://csrobot.gz01.bdysite.com/   问题交流: QQ:910358960 邮箱:acetaohai123@163.com    …
右击POUs,添加一个FB功能块,相比于FUN,FB功能块有INPUT,OUTPUT,还有VAR,即FB可以有多个输出,但是整个FB没有返回值   实现相同的功能,FB要比FUN难看的多,FB要声明实例,此外注意前面是赋值符号(给FB的几个输入参数赋值,然后最后输出是=>符号,即把FB的某个输出参数灌给指定的主程序变量)   但是FB有一些别的好处,尤其是在写复杂算法的时候,FB可以整合很多算法到一个对象中,比如可以把角度转弧度,弧度转角度,开平方根,多次方等等基本函数放到统一的FB中管理,就可…
常见数据类型可以参考EXCEL表格的内容,在准备值中输入非法数据,然后回车会有错误提示(例如BYTE数据输入256)   右击可以切换二进制或十进制显示,wData5可以被挨个采集每个位上的数据,也可以使用类型转换把BOOL和STRING来回转换     更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/acetaohai123   我的在线论坛: http://csrobot.gz01.bdysite.com/   问题交流: QQ:910358…
F5:运行程序 CTRL+F5:停止运行当前程序 F12:登出 F11:登录 CTRL+F7:强制写入数值     更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/acetaohai123   我的在线论坛: http://csrobot.gz01.bdysite.com/   问题交流: QQ:910358960 邮箱:acetaohai123@163.com          …
读写注册表和读写文件一样,里面涉及的输入类型比较复杂,需要参考官方范例 sSubKey是指注册表的路径 sValName是指注册表要写入的名值对的名称 eValType是一个枚举类型(而且不是什么常规的枚举类型,你可以输入eValType.XXX来查看所有的类型,但是实际上只要照抄就行了) cbData就是要写入的数据(LEN(XXX)其中XXX就是字符串类型,我们必须按照一样的格式用LEN方法返回长度,为什么要+1就要问贝福了) pData是要写入数据的指针地址(要跟他一样ADR(XXX),X…
编码器通讯断线异常保护,一般就是通讯线松动或者受干扰(最难以排查的情况是,我接了六套驱动器和伺服,比如J0的线是随便做的,其他五套都是西门子的合格网线,我运行程序的时候,J0如果单关节运动没任何问题,接着加入J1,J2也没问题,但是当再加入多余三个电机之后,J0就会随时报错21.0,在贝福中扫描得到的结果是18000错误),为了确认是编码器线受干扰而不是程序的问题,你可以把J0和J1的所有线对调,这样一样调试如果J1报错而J0不报错这说明编码器线不一样确实受干扰了.     更多教学视频和资料下…
本节主要演示了使用自定义函数实现电机的运动(梯形曲线和S曲线都有实现),这里的JOG+和JOG-,针对单个关节实现了PTP的运动(跟贝福的MoveAbsolute功能块实现效果一致),在此没有介绍运动控制算法的具体原理,不理解的可以网上搜索梯形曲线和S曲线的文章,并不只是非标自动化需要用到控制电机的PTP运动,比如升降机,电梯,或者凡是需要匀滑启停的电机控制,都逃不过要用到这方面的知识,读者也可以自己测试5次或者7次等其他自定义加速曲线,每一种运动给出的位置,速度,加速度都会有不同的效果.  …
在前面我们已经学会了使用贝福自带的调试软件完成试运行,接下来是使用TWINCAT PLC实现这个功能,右击PLC添加一个PLC项目   在VISUs上右击添加一个HMI人机界面   目前PLC程序和人机界面都是空的,我们要通过这两个实现我们自定义的点动.首先右击Reference添加TC2_MC2的类库(这个类库是Motion Control的类库)   右击GLVs,添加两个全局变量,注意类型为AXIS_REF(比较特殊的类型,是跟NC轴交互的变量),在TWINCAT2中不太一样,一个AXIS…
在前面一节,我们简单介绍了通过PLC+HMI实现完整控制松下伺服的上使能-运动,采集位置,速度等功能,这里我们会大量简化用到的贝福功能块(为了更加实用).首先依然是对单个轴的封装,我们之前的做法,例如伺服上使能,使用了MC_Power模块,这个模块的输入和输出引脚都是自己定义的变量,比如是否上电成功我们是靠AxisPowerReady的信号来判断的,如果有两个甚至多个伺服的时候,这样做就很不方便管理了,所有的同类型变量都应该用数组统一管理.   改变之后的上使能,就变成了调用一个模块(我们把Ax…
首先是用松下伺服自带的软件可以测试运行(驱动器,电机都连接好,然后用USB线连接到松下伺服驱动器的X1口),打开调试软件会自动提示连接到伺服   一般需要对驱动器清除绝对值编码器数据(驱动器可能报错40错误),写入驱动器参数值等等,这里不再详细说明如何改参数之类的(可以参考我对松下伺服驱动器的文档),我把对应的参数文件放到了项目中,这里只演示了传入参数文件   然后就可以使用松下自带的软件测试运行,能够正常运行说明驱动器参数,接线都没有问题.相反如果用伺服自带的软件走不起来,就没有必要用TWIN…
常见的模拟量模块(还有更高端和更低端的,使用方法都一样) EL3054和EL4024(4路模拟量输入和输出模块)   常见的数字量模块(还有更高端和更低端的,使用方法都一样) EL1809和EL2809(16路数字输入和输出模块)   贝福模块的一个优点就是模块化结构(你可以选择要多少个数字输入输出,模拟量输入输出,也可以不要,所以扩展IO会非常方便,只需要多加一片就可以了,一片还可以分为2个,4个,8个,16个点的)   右击项目的IO-Devices,然后Scan(如果Scan不可用,请先把…
该参数是包含六个数字类似于IP地址的字符串形式,例如"1.1.1.2.7.1",如果为空字符串,则默认使用本机的AmsNetID 你可以右击贝福的图标,然后点击About查看当前本机的ID   TC3修改TwinCAT AMS NET地址: 右击任务栏中TwinCAT图标,Router,Change AMS NetId,然后重新输入   TC2修改TwinCAT AMS NET地址: 右键任务栏中TwinCAT图标,选择"Properties". 在控制器及电脑的&…
对于相对编码器类型轴(包括虚拟轴),可以使用贝福提供的找原点功能块MC_Home.   HomingMode是指机器在往前跑的时候(30单位/s的默认速度),当碰到阻挡,则会有一个布尔值从FALSE改成TRUE,此时认为超过了零点.然后该轴反向运动,一定能捕捉到TRUE改成FALSE,然后就停下,认为当前位置是原点(不一定是0位置,你Position是多少就将当前位置设置为多少)   在虚拟的轴测试中,可以做一个按钮,按下为TRUE,松开为FALSE.当点击HOME之后,该轴的位置马上变成很小的…
首先确认驱动器没有报错(如果驱动器报错,请先解决绝对值编码器的清除多圈数据问题) 报错一般上使能就会报错,没法测试运转,而且不管是用贝福自带的NC功能还是自己写的都会一样的效果   请删除在贝福的EtherCAT目录下的松下的XML文件(可能就是这个XML文件的问题)   然后按照"松下伺服如何与TwinCAT3连接使用1"的说明(只是不放XML文件,重新扫描一遍出来),虽然扫出来的Drive1是问号,但是是能用的.   对于已有的项目,可以删除所有的Devices的东西和Mappin…
使用命令FB_GetHostName来获取本机名称,返回的是一个字符串   使用命令FB_GetAdaptersInfo获取网卡信息(注意采集到的是一个非常复杂的类型,本身是一个数组,数组的每个元素又包含了网卡的物理地址,名称,IP地址等等)   为了显示方便,只显示了有效网卡数量和第一块网卡的名称(在HMI输入的时候,可以利用TwinCAT的自动提示,XXX变量名.就会自动提示所有的对象属性了)     更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.…
请确认在TWINCAT在线模式下,把Drive的Modes of operation改为8       更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/acetaohai123   我的在线论坛: http://csrobot.gz01.bdysite.com/   问题交流: QQ:910358960 邮箱:acetaohai123@163.com      …
个人认为这条命令做的参数比较混乱,PATHSTR是指可执行文件路径+最终文件名,DIRNAME是指可执行文件路径,最后COMNDLINE可有可无,是指带参数运行启动的文件   测试可以正常运行      …