一种用于伺服驱动器中的 精简可编程逻辑脚本
文:施耐德电气(中国)有限公司2021年第四期
1 前言
伺服驱动器作为一个位置跟随控制设备,往往只有控制电机跟随运动指令的功能,因此常常与PLC或运动控制器一起构成一个运动控制系统,完成期望的运动。
某些伺服驱动器具有运动序列表(Motion Sequence)功能。用户可以通过配置运动序列表在伺服里定义一系列需要的运动动作,并通过一些条件来连接这些运动动作。但是通过运动序列表只能完成相对简单的系统定义过的逻辑功能,因此只能在一些很简单的逻辑运动场合下替代PLC或运动控制器。
在很多行业应用中,出于压缩成本的考虑,很多客户希望在伺服驱动器中实现部分PLC逻辑功能和运动控制功能,使得在系统方案设计中可以不需要PLC或者使用仅有简单逻辑控制的价格便宜的PLC来代替带有运动控制功能的价格高的PLC,
以此来降低系统设计复杂度和减低成本。因此,带有逻辑控制功能的伺服驱动器将大有用武之地。
2 系统方案设计
2.1设计方案选择
在伺服控制器中实现逻辑控制,主要有两种方法:
(1)将PLC设计到伺服控制器中,使用PLC软件来编写梯形图,下载到伺服控制器中运行。
(2)在伺服控制器中设计一个脚本解释器,来解释用户编写的脚本逻辑。
方法1需要在伺服控制器中增加相应PLC的硬件来执行PLC的固件系统,因此伺服控制器硬件成本会增加,不符合用户降
低成本的初衷。
方法2是一种纯软件的方案,可以在伺服控制器的处理器中实现脚本解释执行的功能,因此不需要增加成本,符合用户需求。
因此在本方案中选择方法2作为解决方案。用户可以在PC上编写脚本逻辑,并通过USB线缆下载到伺服控制器中。如图1所示。
图 1
2.2脚本的组成结构
脚本整体由两大部分组成:
• PC端的脚本逻辑编写及翻译
• 伺服驱动器端的脚本逻辑解释器
图 2
3 脚本的设计实现
3.1脚本语言的设计
脚本语言的设计需要完成:
• 指令集的设计
• 语法的设计
• 指令及语法的错误检查
3.1.1指令集的设计
根据设备需要完成的基本逻辑行为,设计相应的指令集。
对于伺服驱动器来说,基本逻辑行为主要有以下几点:
(1)逻辑运算相关指令
• 内存读写指令
• 加减乘除取模指令
• 与或非指令
• 比较指令
• 跳转指令
• 循环指令
(2)运动相关
• 速度值设置指令
• 加减速度值设置指令
• 位置值设置指令
• 速度运动指令
• 相对位置运动指令
• 绝对位置运动指令
• 点动指令
• 寻原点指令
• 速度/位置/电流读取指令
(3)外设
• 定时器时间设置指令
• 定时器计时完成读取指令
3.1.2语法的设计
所有语句以 “S::” 开头,以”;”结束。
整个程序结构由下面3种功能块组成:
• Param block
• Init block
• Motion block
Param Block用于用户参数配置。脚本为用户提供16个32位的可配置参数空间,用户可工艺所需的速度位置信息等。例如:
nit Block用于初始化脚本所需变量和配置系统参数。脚本为用户提供50个32位的内存空间(MD),用户可以用于存储脚本逻辑编程中的中间变量。比如读取到的速度位置值,或者计算的中间结果等。
Motion Block是用于脚本逻辑编写。其中每个Motion Block由1个或多个Event组成。每个event包括一个IF条件语句和一个THEN执行语句。例如:
一个motion block就是一个死循环(图3中红色箭头),跳转指令NextMotionID就是这个死循环的出口。而在motion block内,脚本语句按event号顺序执行。如图3所示。
图 3
3.2脚本编译器的设计
脚本编译器的设计需要完成:
• 编译方法的选择
• 脚本语法的解析
• 编译目标的结构设计
3.2.1编译方法的选择
程序文本的编译执行通常有两种方法:
• 把文本整体编译成CPU可执行的二进制文件,如PLC等;
• 由解释器直接来解释源代码执行,如EXCEL VBA等。
伺服驱动器是一个没有操作系统或微多任务操作系统的嵌入式系统,因此如果采取方式一,先编译器整体编译再执行的方式,伺服自身的代码与脚本编译的代码之间的链接难度较大,而且脚本源码的调试会面临很大的问题。
伺服驱动器是CPU和内存资源都比较少的嵌入式系统,因此如果采取方式二,边解释边执行的方式,直接对脚本文本代码的字符串处理会消耗大量的CPU资源,所以也并不适用。
结合以上分析,我们采取了折中的方式,在PC端先进行一次编译,将脚本文本代码逻辑编译成一种特定的数据结构,并将数据结构下载到伺服驱动器中。在伺服驱动器里的解释器再来解释执行数据结构里的内容。
根据脚本代码的特点,数据结构分为Motion和Event两种,并有各自的数据结构池,每个数据结构池里包含一个对应的数据结构数组,如图4所示。
图 4
Motion和Event 数据结构池的本质是结构体数组,也是整个脚本功能承上启下的核心。
3.2.2脚本语法的解析
在PC上的编译下载小工具中,通过字符串解析来处理出所需信息,步骤如下:
(1)读取脚本文件中一行信息,摘取”S::”到”;”之间的字符串
(2)判断该行是MotionID/EventID/IF/THEN行
(3)以 “AND”和”OR”关键字把拆分该行字符串拆解成n份
(4)将每一份信息填写到对应Motion和Event数据结构池的目标结构体中相应的IF/THEN位置
(5)将目标结构体通过USB线缆下载到伺服驱动器中。
3.2.3编译目标的结构设计
目标数据结构分为Motion和Event两种,并有各自的数据结构池,每个数据结构池里包含一个对应的数据结构数组。例如有一个脚本逻辑,用到了3个Motion。第一个Motion里包含5个Event,第二个里也包含5个Event,第三个里包含3个Event。则总共用到了13个Event。
MotionPool 与Event Pool之间的联系如图5所示。
图 5
Motion Pool由多个Motion结构组成,结构体大致如下:
Event Pool由多个Event结构组成,一个Event结构体由一个条件结构体和一个行为结构体两部分组成。
条件结构体
一个条件结构体就相当于脚本代码中一个IF语句拆分后的条件表格,比如:
行为结构体
一个行为结构体就相当于脚本代码中一个THEN语句拆分后的行为表格。
编译结束后,我们将得到MotionPool和EventPool两个记录有脚本逻辑信息的结构体数组。通过USB电缆,将这两个结构体数组下载到伺服驱动器中,由伺服驱动器中的脚本解释器来解释执行结构体中记录的脚本逻辑信息。
3.3脚本解释器的设计
脚本解释器的设计需要完成:
• 解释器的执行流程设计
• 对编译目标结构体中条件的判断
• 对编译目标结构体中行为的执行
3.3.1解释器的执行流程设计
解释器默认从Motion0开始执行,从 Motion0中Event0开始顺序执行每个Event,执行到motion0中的最后一个Event后回到Event0循环执行。如果执行到某个Event中的行为表(THEN)中的NextMotionID指令,则直接跳转到下一个Motion,并从Event0开始循环执行。流程图如图6所示。
图 6
3.3.2对编译目标结构体中条件的判断
在每个Motion循环周期的开始,都要先读取伺服驱动器的所有有关变量,包括当前位置,当前速度,当前电流值, 当前时钟状态,当前数字量输入值,和当前运动状态等信息。这些信息会在条件判断时使用。
在目前的LXM16产品中,为了简单起见,逻辑条件中只有“与”,而没有“或”和“非”两个条件。因此,对条件的判断得到了大大的简化。解释器只需要对Event结构体中的条件结构体中的每一个条件进行判断,只有所有条件都为“TRUE”,才算条件成立。
3.3.3对编译目标结构体中行为的执行
当Event结构体中相应的Event条件满足时,解释器开始执行该Event结构体中对应的行为结构体的内容。在行为结构体中,会记录每一个语句的执行顺序,解释器会按照执行顺序号,按顺序执行。执行时,解释器会先按照顺序号读取行为结构体中的相应数据,并调用伺服驱动器内部的命令函数来完成执行。
比如对于指令:
S:: THEN DO_0=HIGH ANDRelativeTarget Position=10000;
解释器会顺序执行:
• 调用伺服内部DO强制输出函数,并将1作为参数传给该函数,使DO_0输出高
• 调用伺服内部相对运动函数,并将10000作为参数传给该函数,使电机向正方向运行10000个脉冲。
3.4 脚本调试器的设计
3.4.1调试器界面
图 7
断点设置区:用来设置断点在脚本代码中的位置
当前状态区:用来显示当前脚本运行状态
变量选择区:用来选择需要写或监视的变量
变量监视区:用来实时显示监视变量的值
变量赋值区:用来给所选变量写入一个值
调试操作区:设置断点/全速/单步/暂停/退出
3.4.2断点列表
在LXM16D中,最多同时可以设置4个断点,另外还有一个为单步调试服务的临时断点,因此断点列表能记录5个断点位置。
用户设置的断点位置信息存放在断点列表中。断点列表中每个断点位置信息包含以下几点:
• Motion号
• Event号
• 断点位置(IF或THEN的前面)
• 该断点是否使能
例如:
图 8
其中有一个为单步执行服务的临时断点。当使用单步调试时,表中临时断点行记录的是当前断点位置的下一个位置。脚本解释器一边执行脚本逻辑一边检查当前位置是否在断点列表中,如果当前位置在列表中,则停止执行脚本逻辑。
断点列表的大小可根据系统内存情况裁剪。如果系统内存允许,可以设置更多的断点。
3.4.3调试器流程设计
与其他代码调试器一样,脚本调试器的设计也必须要满足以下两点:
• 在断点处停下后,整个脚本不再执行;
• 在断点处停下后,再执行全速或单步,脚本要从断点处开始执行。
脚本功能为一个独立的功能块,该功能块在伺服驱动器固件中的主循环中被调用,每个主循环周期调用一次。图9为调试器流程图,从“开始”到“结束”为脚本功能块执行 一次。
图9
4 小结
终端设备的智能化是一个发展趋势,它可以让系统终端设备处理局部数据,从而大大降低整个系统核心设计的复杂度,从而更好地控制系统成本。带有脚本功能的伺服驱动器LXM16D,在机床刀库、物流分拣、码垛机械臂等领域都得到了成功应用。
中传动网版权与免责声明:
凡本网注明[来源:中国传动网]的所有文字、图片、音视和视频文件,版权均为中国传动网(www.chuandong.com)独家所有。如需转载请与0755-82949061联系。任何媒体、网站或个人转载使用时须注明来源“中国传动网”,违反者本网将追究其法律责任。
本网转载并注明其他来源的稿件,均来自互联网或业内投稿人士,版权属于原版权人。转载请保留稿件来源及作者,禁止擅自篡改,违者自负版权法律责任。
如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

关注伺服与运动控制公众号获取更多资讯

关注直驱与传动公众号获取更多资讯

关注中国传动网公众号获取更多资讯
- 运动控制
- 伺服系统
- 机器视觉
- 机械传动
- 编码器
- 直驱系统
- 工业电源
- 电力电子
- 工业互联
- 高压变频器
- 中低压变频器
- 传感器
- 人机界面
- PLC
- 电气联接
- 工业机器人
- 低压电器
- 机柜