一种PLCopen单轴运动控制功能块的调度执行方法与流程

文档序号:32512729发布日期:2022-12-10 08:01阅读:737来源:国知局
一种PLCopen单轴运动控制功能块的调度执行方法与流程
一种plcopen单轴运动控制功能块的调度执行方法
技术领域
1.本发明属于plc(可编程逻辑控制器)领域,尤其涉及一种plcopen单轴运动控制功能块的调度执行方法。


背景技术:

2.随着可编程逻辑控制器(programmable logic controller,plc)的大量普及及推广,市场上品牌众多,给用户提供了很大的选择机会。随着处理器性能的大幅提高,plc的性能也得到了大幅提高,运动控制功能已经在plc中得到了普及。iec61131-3标准规定了plc编程语言的国际标准,包括ld、il、st、fbd、sfc、cfc五种编程语言。但是在运动控制领域,各plc厂家所提供的指令功能大都不兼容,造成用户更换plc需要花大量精力去移植程序。
3.在运动控制领域,为了推进编程语言的兼容性,plcopen协会从功能、接口及轴运行状态机等方面定义了运动控制的标准功能块。但是plcopen标准只是定义了功能块的功能,并未给出功能块的内部实现机制与算法。
4.目前,对于最常用的单轴运动控制功能块,其功能块的内部实现一般包括功能块初始化、配置参数及输入参数获取、轨迹速度规划、状态机切换、插补运算、运行中对限位、报警、打断等的处理,运算输出、状态输出等,这样的方式造成一个功能块内部实现太复杂,代码量复用性差、代码量很大,并且对开发者的要求很高。同时,这种方式对于plcopen中常见运动控制功能块的相互打断功能的实现也比较困难。


技术实现要素:

5.发明目的:本发明所要解决的技术问题是针对现有技术的不足,提供一种plcopen单轴运动控制功能块的调度执行方法,简化了功能块的内部代码,同时将单轴速度规划、插补运动及状态机管理从运动控制功能块中独立出来,极大缩小了运动控制功能块的代码复杂度及代码量,方便用户快速开发运动控制功能块,并能容易实现运动控制功能块间的打断功能和多运动控制功能块间的速度过渡功能。
6.本发明的技术方案为:
7.建立当前运动指令执行寄存器数据结构,获得执行权限的运动控制功能块被放入到所述数据结构中,并且所述数据结构保存有插补执行的中间信息和控制标志;所述运动控制功能块首次触发后会转化为运动指令;
8.建立运动指令执行器,运动指令执行器周期执行,负责轴状态机切换,并根据当前所处的合适状态判断当前运动指令执行寄存器是否有待运行的指令,并执行其中的运动指令;
9.然后执行如下步骤:
10.步骤1:在可编程逻辑控制器plc编程软件中新建plc工程,建立运动控制任务,并使用运动控制功能块编写运动控制程序;
11.步骤2:将plc工程下载到可编程逻辑控制器plc中执行;
12.步骤3:运动控制功能块执行初始化部分进行初始执行状态判断,并将运动控制功能块抽象成运动指令数据结构对象;每一个运动控制功能块实例均对应一个运动指令数据结构对象,并且每个运动控制功能块的实例均被分配系统唯一的index;
13.步骤4:运动控制功能块的执行部分跟随运动指令被周期执行;周期执行部分每周期都会判断当前指令执行寄存器数据结构中的interendflag标志,如果interendflag为1,表明当前运动指令执行完成,置位运动控制功能块完成输出脚,并退出运动控制功能块的执行;
14.步骤5:运动控制任务最后执行运动指令执行器程序。
15.步骤2中,运动控制任务在可编程逻辑控制器plc内部为高优先级线程,运动控制任务为周期运行,首先读取外部输入,外部输入的信息作为运动控制程序的执行输入,然后再调用运动控制程序,运动控制功能块在运动控制程序中被上升沿触发后进入到初始化部分执行,初始化只执行一次,在初始化成功后进入到运动控制功能块的周期执行部分;运动控制任务随后调用运动指令执行器程序,运动指令执行器对plcopen轴状态机进行管理,读取当前指令执行寄存器中的运动指令,进行插补运算及插补结果输出;运动指令执行器执行结束,运控制任务会进行输出处理,将插补结果转换成伺服的指令脉冲通过plc的脉冲或者总线发送给伺服驱动器执行;当运动指令执行结束,运动指令执行器会将当前指令执行寄存器数据结构中的interendflag标志置为1。
16.步骤3中,运动控制功能块初始化执行部分对执行模式进行判别:
17.如果是缓冲模式,运动控制功能块会按照触发的先后顺序转成运动指令数据结构放入运动指令等待队列,运动指令等待队列中指令不再区分优先级,按照先进先出的策略由运动指令执行器依次取出执行,如果运动控制指令的输入参数选择了过渡,则先进行指令间运动速度的过渡处理,再依次执行各运动指令;
18.如果是中断模式,则对优先级进行仲裁,通过指令类型和index识别出同一指令类型的不同实例,如果符合打断条件则对指令进行速度规划后抢占当前指令执行寄存器。
19.步骤3还包括如下步骤:
20.步骤3.1:运动控制功能块触发;
21.步骤3.2:判断执行条件是否满足;是则进入下一步,否则进入步骤3.12;
22.步骤3.3:将运动控制功能块抽象成运动指令数据结构,并初始化,运动控制功能块的实例被分配系统唯一的index;
23.步骤3.4:根据运动指令数据结构中mode输入变量的值来判断指令是否是打断执行,是则进行下一步,否则进行步骤3.10;
24.步骤3.5:根据当前运动指令执行寄存器中的interendflag标志判断是否有指令正在执行,是则进入下一步,否则进入步骤3.7;
25.步骤3.6:根据运动指令数据结构中fbpriority对象的值,与当前运动指令执行寄存器正在执行指令的优先级进行比较,并判断能否进行抢占,是则进入下一步,否则进入步骤3.12;
26.步骤3.7:根据运动曲线类型对运动指令进行预处理;
27.步骤3.9:将预处理后的运动指令更新到当前运动指令执行寄存器,然后进入步骤3.11;
28.步骤3.10:压入指令队列;
29.步骤3.11:进入运动控制功能块周期执行部分;
30.步骤3.12:运动控制功能块执行结束。
31.步骤4包括:
32.步骤4.1:判断是否发生了打断,是则置位功能打断输出脚,然后进入步骤4.4;否则进入下一步;在步骤3.10中,将新的指令更新到当前运动指令执行寄存器中,旧的指令就被刷掉了,在步骤4.1中,运动控制功能块执行部分每周期都会对比当前运动指令执行寄存器中指令的index与自己的是否相同,如果不同,则判定发生了打断;
33.步骤4.2:判断是否发生了报警,是则置位运动控制功能块报警输出脚,然后进入步骤4.4;否则进入下一步;
34.步骤4.3:判断是否执行完成,如果是,则置位运动控制功能块完成输出脚,然后进入步骤4.4;否则返回步骤4.1;
35.步骤4.4:运动控制功能块周期执行部分结束。
36.步骤5包括:运动指令执行器对plcopen轴状态机进行管理,读取当前指令执行寄存器中的运动指令,进行插补运算及插补结果输出,运动指令执行器执行结束,运控制任务会进行输出处理,将插补结果转换成伺服的指令脉冲通过plc的脉冲或者总线发送给伺服驱动器执行;如果运动指令执行结束,运动指令执行器会将当前指令执行寄存器数据结构中的interendflag标志置为1。
37.本发明具备以下有益效果:
38.本发明将轴状态机管理、插补运算及插补输出等从运动控制功能块中剥离,简化了运动控制功能块内部代码量及复杂度,即提高了程序的可靠性,也方便了功能块的模块化开发;本发明将操作系统任务调度抢占机制引入到功能块的执行方法中,建立类似机制,即可以方便实现单轴运动指令的速度过渡,也能灵活的实现运动指令的打断。
附图说明
39.下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
40.图1是本发明的运动指令执行架构。
41.图2是本发明中运动控制功能块触发进入到初始化部分执行流程图。
42.图3是本发明运动控制功能块周期执行部分流程图。
43.图4是本发明运动控制任务的执行流程图。
具体实施方式
44.本发明的工作原理如图1所示:
45.借鉴操作系统的任务调度和抢占机制,将每个运动指令看成一个待执行的任务,对其进行抽象描述建立类似操作系统任务块的运动指令数据结构。为每个运动控制功能块的实例分配系统唯一index及优先级,高优先级运动指令可以抢占低优先级指令。与操作系统同优先级任务只能根据时间片来执行不同,根据运动控制的特性,本方法也支持同优先级运动指令间的抢占。
46.类似操作系统的任务队列,结合单轴运动控制系统的特点,建立缓存运动指令个数为n的“运动指令等待队列”,其采用先进先出的fifo机制。
47.建立“当前运动指令执行寄存器”数据结构,获得执行权限的运动控制功能块(指令)被放入到此结构中,并且此结构保存有插补执行的中间信息和控制标志。
[0048]“运动指令执行器”负责轴状态机切换,并执行“当前运动指令执行寄存器”中的运动指令。
[0049]
借鉴操作系统任务抢占机制,当高优先级运动指令发生抢占时,将越过指令等待队列,直接抢占获得“当前指令执行寄存器”,并优先得到“运动指令执行器”的执行。
[0050]
具体工作过程为:
[0051]
步骤1:在可编程逻辑控制器plc编程软件中新建plc工程,建立运动控制任务,并使用运动控制功能块编写运动控制程序;
[0052]
步骤2:将plc工程下载到可编程逻辑控制器plc中执行;
[0053]
下述中,运动控制任务在可编程逻辑控制器plc内部为高优先级线程,其执行流程如图4所示;运动控制任务为周期运行,其首先读取外部输入,如io、运动反馈的速度、位置等进行保存,这些信息作为运动控制程序的执行输入。然后再调用运动控制程序。如图2所示,运动控制功能块在运动控制程序中被上升沿触发后进入到初始化部分执行,初始化只执行一次,在初始化成功后进入到运动控制功能块的周期执行部分;运动控制任务随后调用“运动指令执行器”程序。“运动指令执行器”对plcopen轴状态机进行管理,读取“当前指令执行寄存器”中的运动指令,进行插补运算及插补结果输出。“运动指令执行器”执行结束,运控制任务会进行输出处理,将插补结果转换成伺服的指令脉冲通过plc的脉冲或者总线发送给伺服驱动器执行。当运动指令执行结束,“运动指令执行器”会将“当前指令执行寄存器”数据结构中的interendflag标志置为“1”。
[0054]
运动控制功能块类似一个编程上的数据结构定义,就像c语言中的struct结构体一样,使用的时候需要用此数据结构定义一个有具体内存空间分配的实例才能被执行。对于每一个被分配了内存空间的运动控制功能块实例,都分配一个index作为唯一标识;
[0055]
步骤3:运动控制功能块执行初始化部分进行初始执行状态判断,并将运动控制功能块抽象成运动指令数据结构对象;每一个运动控制功能块实例均对应一个运动指令数据结构对象,并且每个运动控制功能块的实例均被分配系统唯一的index;
[0056]
运动控制功能块初始化执行部分对执行模式进行判别,如果是“缓冲模式”,运动控制功能块会按照触发的先后顺序转成运动指令数据结构放入“运动指令等待队列”,运动指令等待队列中指令不再区分优先级,按照先进先出的策略由“运动指令执行器”依次取出执行,如果运动控制指令的输入参数选择了过渡,则先进行指令间运动速度的过渡处理,再依次执行各运动指令。如果是“中断模式”,则对优先级进行仲裁,通过指令类型和index识别出同一指令类型的不同实例,如果符合打断条件则对指令进行速度规划后抢占“当前指令执行寄存器”。
[0057]
具体来说:
[0058]
步骤3.1:运动控制功能块触发;
[0059]
步骤3.2:判断执行条件是否满足;是则进入下一步,否则进入步骤3.12;
[0060]
步骤3.3:将运动控制功能块抽象成运动指令数据结构,并初始化,运动控制功能
块的实例被分配系统唯一的index;
[0061]
步骤3.4:判断指令是否打断执行(根据运动指令数据结构中mode输入变量的值来判断指令是否是打断执行),是则进行下一步,否则进行步骤3.10;
[0062]
步骤3.5:判断当前是否有在执行的指令(根据“当前运动指令执行寄存器”中的interendflag标志判断是否有指令正在执行),是则进入下一步,否则进入步骤3.7;
[0063]
步骤3.6:判断优先级是否能抢占(根据运动指令数据结构中fbpriority对象的值,与“当前运动指令执行寄存器”正在执行指令的优先级进行比较,并判断能否进行抢占),是则进入下一步,否则进入步骤3.12;
[0064]
步骤3.7:根据运动曲线类型对运动指令进行预处理;
[0065]
步骤3.9:将预处理后的运动指令更新到当前运动指令执行寄存器,然后进入步骤3.11;
[0066]
步骤3.10:压入指令队列;
[0067]
步骤3.11:进入运动控制功能块周期执行部分;
[0068]
步骤3.12:运动控制功能块执行结束;
[0069]
步骤4:如图3所示,运动控制功能块的执行部分跟随运动指令被周期执行;周期执行部分每周期都会判断“当前指令执行寄存器”数据结构中的interendflag标志,如果interendflag为“1”,表明当前运动指令执行完成,可以置位运动控制功能块完成输出脚,并退出运动控制功能块的执行。
[0070]
步骤4.1:判断是否发生了打断,是则置位功能打断输出脚,然后进入步骤4.4;否则进入下一步;在步骤3.10中,将新的指令更新到“当前运动指令执行寄存器”中,旧的指令就被刷掉了。在步骤4.1中,运动控制功能块执行部分每周期都会对比“当前运动指令执行寄存器”中指令的index与自己的是否相同,如果不同,则判定发生了打断。
[0071]
步骤4.2:判断是否发生了报警,是则置位运动控制功能块报警输出脚,然后进入步骤4.4;否则进入下一步;
[0072]
步骤4.3:判断是否执行完成,如果是,则置位运动控制功能块完成输出脚,然后进入步骤4.4;否则返回步骤4.1;
[0073]
步骤4.4:运动控制功能块周期执行部分结束;
[0074]
步骤5:运动控制任务最后执行“运动指令执行器”程序。“运动指令执行器”对plcopen轴状态机进行管理,读取“当前指令执行寄存器”中的运动指令,进行插补运算及插补结果输出,“运动指令执行器”执行结束,运控制任务会进行输出处理,将插补结果转换成伺服的指令脉冲通过plc的脉冲或者总线发送给伺服驱动器执行。如果运动指令执行结束,“运动指令执行器”会将“当前指令执行寄存器”数据结构中的interendflag标志置为“1”。
[0075]
具体实现中,本技术提供计算机存储介质以及对应的数据处理单元,其中,该计算机存储介质能够存储计算机程序,所述计算机程序通过数据处理单元执行时可运行本发明提供的一种plcopen单轴运动控制功能块的调度执行方法的发明内容以及各实施例中的部分或全部步骤。所述的存储介质可为磁碟、光盘、只读存储记忆体(read-only memory,rom)或随机存储记忆体(random access memory,ram)等。
[0076]
本领域的技术人员可以清楚地了解到本发明实施例中的技术方案可借助计算机程序以及其对应的通用硬件平台的方式来实现。基于这样的理解,本发明实施例中的技术
方案本质上或者说对现有技术做出贡献的部分可以以计算机程序即软件产品的形式体现出来,该计算机程序软件产品可以存储在存储介质中,包括若干指令用以使得一台包含数据处理单元的设备(可以是个人计算机,服务器,单片机。muu或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
[0077]
本发明提供了一种plcopen单轴运动控制功能块的调度执行方法,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1