首先我从S7-1200 Easy Plus 手册上搬来PLC数据类型UDT的介绍:
UDT类型是一种由多个不同数据类型元素组成的数据结构,元素可以是基本数据类型,也可以是STRUCT、数组等复杂数据类型以及其它UDT等。UDT类型嵌套UDT类型的深度限制为
8 级。
UDT类型可以在DB、OB/FC/FB接口区处使用。 从TIA 博途 V13SP1 开始,S7-1200
V4.0开始,PLC变量表中的I和Q也可以使用UDT类型。
UDT类型可在程序中统一更改和重复使用,一旦某UDT类型发生修改,执行软件全部编译可以自动更新所有使用该数据类型的变量。
理论上来说,UDT是Struct类型的升级替代,功能基本完全兼容Struct类型。
具体的PLC数据类型实例如下图所示:
下面我以S7-1200搭配CM CANopen模块控制埃斯顿伺服电机为例,详细说明PLC数据类型的用法,以下是整个系统的电气网络拓扑图:
通过查看埃斯顿伺服电机的CANopen手册得知,CANopen协议有许多参数,如最重要的Controlword(控制字)以及Statusword(状态字)等,位置模式包含target_position(目标位置)、profile_velocity(运行速度)、profile_acceleration(运行加速度)和profile_deceleration(运行减速度)等,其他如回零模式、速度模式和转矩模式的参数在此不再赘述。整个伺服控制的过程本质上就是读写这些参数,因此建立分别建立2种数据类型AxisRPDO和AxisTPDO。具体如下图所示:
埃斯顿伺服电机作为一个设备,其所需要的控制命令以及反馈参数即为它的接口,为此分别新建两个数据类型AxisWrite和AxisRead,如下图所示:
然后在DB块中新建这几种PLC数据类型的变量,电机的控制的实质就是这几个变量间的数据转移,如下图所示:
最终编写轴常用的功能块,如使能、复位、停止、位置模式运动、速度模式运动、回零模式运动和轴状态读写功能块等,以一个简单的“复位”功能块为实例,如下图所示:
最终将这些简单的功能块加以汇总,形成轴控制功能块AxisControl,如下图所示: