在工作中实践总结
在朋友圈分享讨论
做最接地气的公众号
客户需求
现有机型是CX2030经EtherCAT总线带8个伺服控制器,派生机型需要9个或10个从站。有没有什么方法可以激活或取消EtherCAT从站,而不需要修改硬件配置。我项目的程序以后可以写成一个版本(不需要分8、9、10不同从站)。
另外我想在HMI操作,直接切换配置,这样用户如果配置有所改变,只需要进行HMI设置即可实现,不用我们到现场在进行现在程序。
TwinCAT 3.1.4024及以上版本支持VariantManagement(变体管理)功能,可以在开发电脑上用同一套项目文件(.tszip)生成不同硬件、软件选项的Runtime配置和运行程序,下载到n个派生机型。
说明:这里重点是同一套TwinCAT项目文件,适用不同的机型。如果这个系列的机型都要程序升级换代,那么就只要在这一套项目文件里修改就可以了。与n个项目文件对应n个机型相比,程序升级不仅要做n次,还要确保它们的一致性。
以下是该文档的缩略版(截图不齐),全文4279字,阅读约需要5分钟。完整的PDF版请参考倍福虚拟学院-开学第一课——陈老师课程专区:https://tr.beckhoff.com.cn/mod/folder/view.php?id=1878
1 第1个变体管理的实例
1.1 项目需求
基本机型“Base”,含8个基本轴Axis[1]到Axis[8]派生机型“Ex_1”,含8个基本轴和扩展轴Axis_Ex1,硬件是EL7201带伺服电机派生机型“Ex_2”,含8个基本轴和扩展轴Axis_Ex2,硬件是EL7047带步进电机派生机型“Ex_12”,含8个基本轴和扩展轴Axis_Ex1及Axis_Ex11.2 在TwinCAT项目启用变体管理
1.2.1 准备工作
-开发电脑上安装TwinCAT 3.1.4024.10
-运行TwinCAT XAE并显示Variant Management工具条
如下图1处在菜单栏区域右键菜单中选中“TwinCAT XAE Project Variants”,然后就会显示Variant Management工具条,如图中2处。 1.2.2 打开或者新建项目
因为几个派生机型的轴数不同,按VariantManagement的功能是可以在PLC里实现声明不同的轴数,以及某个变体下才执行某些代码的。
-打开项目变体管理器

新建4个Variants,再建两个Group分别是Minimum和Maximum,Maximum表示轴最多的时候10个Axis,包含的变体是Base,Minimum表示轴最少的时候,包含的变体是Base。注意,Ex_1是指Axis9启用,Ex_2指Axis10启用,所以包括这两个变体的Maximum就是Axis9和Axis10都启用。
补充:实际上因为PLC程序只在内存里运行,所以变量或者轴数声明多了,代码多了,并不影响大局。这里为了演示变体管理功能在PLC变量声明和程序里的应用,采用了实际多少物理轴就声明多少PLC轴和NC轴的做法,具体见1.3节。
1.3 PLC程序中的变体设置
1.3.1 PLC项目的Define属性启用变体管理
将PLC项目的属性中Project Variants下的Define设置为True:此时 PLC项目图标右上角出现蓝色,代表启用项目Variant Management功能,并且Defines的条件可以直接使用前面变体管理器中声明过的变体Variants,换言之变体可以直接作为Define的编译条件。1.3.2 变量声明中的条件编译
要在不同变体下,某些轴变量存在,而某些不存在,就采用VAR_GLOBAL中的方式;要在不同变体下,直接修改数组变量的个数,就采用VAR_GLOBALCONSTANT的方式; 1.3.3 PLC代码中的条件编译
此代码仅供演示,具体到应用项目,也可以选择在不同变体下所有变量都无条件声明,所有代码都无条件编译,只是部份变量不链接到NC轴或者硬件即可。 1.3.4 设置PLC程序的Define
写完程序之后,链接PLC变量到NC或者IO通道之前,要编译PLC程序。对于启用于变体管理的PLC项目,在编译之前要选择编译条件——基于哪个变体来编译,具体的做法是在PLC项目的Project页面的CompilerDefine中进行设置:
默认的选项是勾选Implicit,而Manual为空。此时,变体管理工具栏中显示的当前变体就会自动出现在Implicit栏,如果该变体还被包含于某个Group,则这个Group也会出现在这里。如果不勾选Implicit,则把要编译的变体写在Manual栏,有多个就以逗号隔开。在本例中如果同Manual中填Ex_1,Ex_2,编译的结果就等效于Ex_12。提示:虽然Manual和Implicit可以同时使用,但是建议一种机型对应一种变体,对于第一次使用变体管理功能,一一对应的方式比较简单,不容易在多种变体组合与多种机型对应的时候产生混乱。例如,Manual处填写Base和Ex_1,编译结果就是:
1.4 NC轴的变体设置
1.4.1 在TwinCAT NC中配置10个轴
其中Axis 9作为将链接到Ex_1轴,Axis10将链接到Ex_2轴。1.4.2 设置Axis9和Axis10属性中的Project Variants下Disable项为True
Project Variants中的Disable项为True表示轴的Disable属性启用了变体管理——当前的Disable属性仅对现在这个变体适用。1.4.3 设置Axis9和Axis10在4个变体下的Disable属性

上图表示TwinCAT项目用于Base变体的机型时,Axis9是禁用的。杂项下的Disabled是指属性是否禁用,在这里选择Disabled等效于从轴的右键菜单Disable。 同样的办法设置Axis9和Axis10在4个变体下的Disabled属性
| Axis 9 | Axis 10 |
Base | Disable | Disable |
Ex_1 | Enable | Disable |
Ex_2 | Disable | Enable |
Ex_12 | Enable | Enable |
1.5 IO Device的变体设置
在本例中,基本的8个轴都设置为虚轴,仅仅把Axis9和Axis10用作物理轴,计划分别链接到EL7201(伺服驱动模块)和EL7047(步进驱动模块)。1.5.1 先扫描 IO硬件或者打开现有的TwinCAT项目定位到IO Device
1.5.2 设置可选硬件的Project Variants的Disable项为True
1.5.3 设置硬件的Disabled属性
杂项下的Disabled是指属性是否禁用,在这里选择Disabled等效于从轴的右键菜单Disable。 同样的办法设置EL7201和EL7047在4个变体下的Disabled属性
| EL7201 | EL7047 |
Base | Disable | Disable |
Ex_1 | Enable | Disable |
Ex_2 | Disable | Enable |
Ex_12 | Enable | Enable |
1.6 变量链接
1.6.1 NC与伺服链接
无论当前选择什么变体,所有NC轴和IO模块、伺服从站都会出现,虽然有的可能打上了禁用标记,但是仍然可以参与变量映射。 1.6.2 PLC变量与NC及IO的映射
由于PLC变量按不同的变体进行条件编译,生成的TMC文件中的IO变量可能不同,所以PLC变量与NC及IO的映射,必须在PLC条件编译完成以后来进行。1.7 System的变体设置
1.7.1 设置Real-time的属性启用变体管理
如果一套TwinCAT程序用到几个机型上,并且分别使用单核、双核、四核控制器,那就需要用变体管理把Realtime设置也管起来。具体做法是, (1) Project Variants的Parameter设置为True
在Real-time的属性页面把Project Variants的Parameter设置为True,如图:
这样Settimg页面的所有设置都只对于当前的变体有效。 (2) 选择不同的变体,编辑Setting页面的各项
如果这套TwinCAT程序只使用了1个CPU内核,那么也不是必须启用Real Time变体管理。总的来说,推荐的做法是通过变体管理,把运行在高性能CPU上的TwinCAT任务周期缩短,在低性能的CPU上时则任务周期加长。如果使用这套程序的机型,有的是单核CPU,有的是多核CPU,为了充分发挥TC3的性能,在多核CPU上就有必要分配部分任务到非第一核。这时就一定要用到变体管理了。
1.7.2 设置System属性启用变体管理
(1) System的Project Variants属性的Target Address项设置为True
TwinCAT项目可以保存当前的目标控制器,如果调试的时候几个机型的控制器都在线上,可以使用变体功能来选择控制器。个人感觉这个功能应该很少使用,因为通常都是一次调一台机,而且一台机型也可能不只一台机,用变体选择目标控制器意义不大。 (2) 切换变体,选择目标控制器
例如变体Base用于Local,Ex_1用于CX-3BD290
1.8 激活配置,创建引导程序
1.8.1 步骤
(1) 拆装硬件(EL7201或者EL7047)
(2) 选择与硬件匹配的变体(Base、Ex_1、Ex_2或者Ex_12)
(3) 编译PLC程序,并链接好NC或者IO变量
(4) 链接NC与IO变量
(5) 激活配置
(6) PLC程序下载运行
(7) 调试完成,创建引导程序
1.8.2 结果
4种机型可以使用同一套TwinCAT程序,维护方便。
2 关于变体管理的补充说明
2.1 通用说明
(1) 变体管理功能是TwinCAT 3开发环境的功能,对控制器没有要求。
经测试,在TwinCAT 3.1.4024.10的环境下,使用变体管理功能的TwinCAT测试程序下载到CX5130+TC3.1.4022.30,也可以运行起来。既然与控制器TwinCAT 版本无关,也就无须授权。当然这仅仅是测试,首推的做法还是使用与控制器匹配的TwinCAT XAE或者RM。又测试在TwinCAT 3.1.4024.10的环境下,装载4022.27的RM,此时开发环境中变体管理的工具栏不可用了: (2) 切换变体即更换硬件、软件的选项,只能在TwinCAT 3开发环境中完成,
切换变体后,必须激活生效,激活后必然会覆盖当前的TwinCAT配置。所以不能直接在HMI实现。
(3) 变体管理可以实现以下几方面的选项:
在PLC代码和变量声明;
系统配置,包括目标控制器地址(TargetAddress)和Realtime选项(TwinCAT Task与CPU核的分配,隔离核设置等)2.2 变体选项:Parameter
(1) NC轴参数的变体管理
大部分用户希望用变体管理实现硬件“有”或者“没有”的切换,实现上变体管理还可以实现参数的切换。比如一个机型某个NC轴的丝杠导程是10mm,另一个机型的导程是5mm,那个NC轴的脉冲当量就可以用变体管理来设置。先把轴的属性中Project Variants下面的Parameter设置Selected–see PV column
这里选择None是说没有变体管理,这个轴在所有变体下的参数都是一样的;最常用的是Selected –see PV column,表示只有在PV列勾选中的参数才随变体切换而改变。选中该项后,NC的参数就多了一列PV:
(2) EL模块参数的变体管理
先把轴的属性中Project Variants下面的Parameter设置为True:
然后就可以设备EL模块分别在不同变体下的StartupList了,比如在变体Base下,EL7201的速度环增益设置为134,而在变体Ex_1下,速度环增益设置为150:在变体Ex_1下,EL7201的速度环增益设置为150。在变体Base下,EL7201的速度环增益设置为134。
2.3 变体选项:Mapping
变体管理可以管理的内容还包括Mapping关系。启用该功能需要设置属性Project Variants中的Mapping为True,然后分别设置不同变体下轴的与PLC或者伺服的映射关系:
(1) 场景A:NC轴映射到不同型号的伺服
NC轴与PLC变量的对应关系一般不变。但是不同机型选择的伺服驱动器的型号、功率甚至品牌不一样都是有可能的,这时候用变体管理来切换一个NC轴对应的驱动器就很方便。 (2) 场景B:办公司调试时NC轴不映射到硬件
用变体管理切换Mapping另一个应用是用实现虚轴与实轴的切换。比如工程师在车间调试的时候要带实轴,在办公室调试的时候要用虚轴。如果新建一个变体Virtual,在该变体下,所有NC轴都不链接硬件,并且EtherCAT网络禁用,目标控制器是Local,那么工程师在办公室调试时只要打开原项目切换到Virual变体就可以工作了。
3 最终用户在HMI上实现变体切换
做法:在出厂前用同一套TwinCAT项目,选择不同的变体,生成多套Boot,例如BootA、BootB、BootC,在HMI上做按钮令PLC调用不同的.bat文件,实现从BootA、BootB或BootC复制内容到\TwinCAT\Boot\文件夹),此后HMI令PLC调用TwinCAT重启命令或者操作工人重启控制器,都可以令硬件配置和程序换成变体对应的组合。优势:与不用变体管理,直接用3套TwinCAT项目生成3套boot文件夹相比,节约的是开发工程师的时间,以及程序版本升级、后期维护的效率,降低出错机会。局限性:此法必须固定各机型的Boot文件夹名称,并且仅适用于标准Windows,因为CE系统不能直接执行.bat文件。 变通的方法:不用.bat而用高级语言写一个.exe文件,可以在标准Windows和CE上运行,实现类似功能。如果工程师会高级语言,这种方式实际上更加灵活,可以在HMI实现文件夹名称的列表、选择、确认,让exe去复制特定的文件夹,而不必在.bat文件中绑死各机型的Boot文件夹名称。
**以上仅仅是提供一个思路,有兴趣的用户可以自行实现。
效果
遗留问题
用IE浏览器可访问本文的PDF完整版:
http://www.baclizzy.com.cn
按日期查找即可;

喜欢本文?识别二维码,可关注公众号