掌桥专利:专业的专利平台
掌桥专利
首页

一种双CANopen运动控制PLC的实现方法

文献发布时间:2023-06-19 19:23:34


一种双CANopen运动控制PLC的实现方法

技术领域

本发明涉及一种双CANopen运动控制PLC的实现方法。

背景技术

随着处理器性能的大幅提高,可编程逻辑控制器(Programmable LogicController,PLC)的性能也得到了大幅提高,运动控制功能已经在PLC中得到了普及。CANopen是国际标准的应用层协议,其底层采用CAN与伺服等从站进行通信。由于CANopen协议栈开源,并且CAN通信在硬件上不需要类似EtherCAT那样的专用接口芯片,因此CANopen是PLC运动控制最常见的一种通信协议。CAN是控制器局域网络(Controller AreaNetwork,CAN)的简称,是由以研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO 11898),是国际上应用最广泛的现场总线之一。

运动控制PLC一般只具备一路CANopen运动控制,受到CAN通信的速率和CAN报文一帧有效数据为8个字节的限制,在运动控制轴数较多的应用场合,CANopen通信数据量较大,CAN已经无法满足通信要求。

现有CANopen运动控制PLC产品在CPU模块上只有一路CANopen接口,因此无法带太多从站。

发明内容

发明目的:本发明所要解决的技术问题是针对现有技术的不足,提供一种双CANopen运动控制PLC的实现方法,包括:采用本体具备两路CAN接口的CPU模块,能够运行两路CANopen主站,支持两路CANopen主站运动控制;在CPU模块底层,建立1ms的时基线程、CANopen主站线程和运动控制线程,优先级时基线程最高、运动控制线程最低;两路CANopen主站的程序在CANopen主站线程中运行;将两路CANopen主站分别记为第一路CANopen主站和第二路CANopen主站;

在用户PLC端完成两路CANopen主站运动控制的设计。

所述在用户PLC端完成两路CANopen主站运动控制的设计,具体包括如下步骤:

步骤1,在PLC编程环境中建立运动控制任务mc_task和运动控制程序mc_pou;

步骤2,在PLC编程环境分配第一路CANopen主站的%MW映射区域起始地址及大小,输入区域与输出区域地址不能重叠;

步骤3,在PLC编程环境分配第二路CANopen主站的%MW映射区域起始地址及大小,输入区域与输出区域地址不能重叠,并且与第一路CANopen主站的映射区域也不重叠;

步骤4,在PLC编程环境中定义SDO_Tx、SDO_Rx结构体类型,并用SDO_Tx、SDO_Rx结构体类型定义全局变量,每个CANopen主站均有自己SDO_Tx、SDO_Rx结构体类型的变量,并将变量对应的软元件地址调整到与各自CANopen主站%MW映射区域中SDO接收相关、SDO发送相关区域的首地址相同,所述SDO接收相关、SDO发送相关区域的内容与SDO_Tx、SDO_Rx结构体类型相同;

步骤5,在PLC编程环境中定义与两路CANopen主站下实际用到的RxPDO和TxPDO内容相同的AXIS_RXPDO_POS_T、AXIS_TXPDO_POS_T结构体类型,并用AXIS_RXPDO_POS_T、AXIS_TXPDO_POS_T结构体类型定义与实际PDO数量相同的变量,并在编程边境中将变量对应的软元件地址调整到与两路CANopen主站%MW软元件区域中各伺服从站RxPDO、TxPDO区域的首地址相同;各伺服从站RxPDO、TxPDO区域的内容与AXIS_RXPDO_POS_T、AXIS_TXPDO_POS_T结构体类型相同;

步骤6,在PLC编程环境,定义MC_AXIS_T结构类型,并根据实际两路CANopen主站所带伺服从站数量N定义对应的轴结构变量数组MC_Axis[N],N对应实际组态配置的伺服轴个数,并且N<127;

步骤7,编写PLC的运动控制程序mc_pou的代码,将被控制伺服轴的MC_Axis[N]的序号作为运动控制功能块的INPUT引脚[AXIS]的输入;运动控制功能块在执行时会根据传入的轴序号来访问对应的变量MC_Axis[N];

步骤8,在运动控制任务mc_task中,首先读取两路CANopen主站%MW映射输入区的相关数据并写到对应轴的MC_Axis[N]变量中,然后调用运动控制程序mc_pou,运动控制程序mc_pou中各轴的运动控制功能块的运行结果会写入到对应轴的MC_Axis[N]变量中;mc_task任务执行最后,将MC_Axis[N]中各轴的运行结果写入到各CANopen主站%MW映射输出区中;

步骤9,将编译好的程序下载到PLC中运行。

本发明还包括:在CPU模块底层,时基线程中建立信号量1和信号量2,并在线程每周期执行时通过操作系统中的系统调用接口依次发送信号量1和2给CANopen主站线程和运动控制线程,确保线程执行的同步性。

本发明还包括:在CPU模块底层,CANopen主站线程运行时,首先通过系统调用接口阻塞等待信号量1,如果收到时基线程发送的信号量1,就开始进行两路CANopen主站的同步帧发送,保证同步帧周期发送的准确性,并使两路CANopen总线上的伺服能同步动作;发送完同步帧,CANopen主站线程进行两路CANopen主站RxPDO报文的发送,并进行SDO报文的处理,在线程的最后接收各伺服从站发来的TxPDO报文。

本发明还包括:在CPU模块底层,运动控制线程运行时,首先通过系统调用接口阻塞等待信号量2,如果收到时基线程发送的信号量2,就开始执行用户下载到PLC中的运动控制任务mc_task。

本发明中,用户编程调用运动控制功能块时,不需要输入采用哪一路CANopen接口,只需要传入运动控制功能块的轴号,并且此轴号是连续的;

在PLC中建立最高优先级的1ms时基任务;

统一时基的整数倍周期作为运动控制任务的执行周期;

统一时基的整数倍周期作为CANopen同步帧的发送周期,并在周期的开始首先进行CANopen同步帧的发送;

用户运动控制程序与CANopen主站的交互采用%MW软元件区;

每个CANopen主站独立分配一片%MW软元件,并对每个CANopen主站的%MW软元件区进行定义;

建立MC_Axis[N]伺服轴抽象结构类型作为运动控制任务与%MW软元件区交互的桥梁,并且数组MC_Axis[N]的连续序号作为输入参数传给运动控制功能块输入引脚[AXIS]。

本发明具有如下有益效果:

本发明提出一种双CANopen运动控制PLC的实现方法,在CPU模块本体上设计两路CANopen接口,两路接口可以同时带伺服从站进行运动控制,也可以带传感器、IO等从站,所带从站的数量达到了现有CANopen运动控制PLC产品的两倍。相比较现有CANopen运动控制PLC产品,带伺服轴数大大增加;

用户编写运动控制程序不需要针对哪一路CANopen,编程使用方式跟一路CANopen接口一样方便;

用户可以灵活自主进行伺服轴Mc_Axis[]接口与%MW共享区的映射,,无需关注伺服轴是挂在哪路CANopen接口上,所有的轴号是连续统一的,方便了用户编程。

附图说明

下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。

图1是1ms时基线程运行流程示意图。

图2是运动控制任务与CANopen主站交互机制示意图。

图3是CANopen主站线程运行流程示意图。

图4是运动控制线程与运动控制任务运行流程示意图。

图5是MC_Axis[]数据结构示意图。

图6是SDO及PDO数据结构示意图。

具体实施方式

本发明提供了一种双CANopen运动控制PLC的实现方法,本方案采用本体具备两路CAN接口CPU模块。CPU模块采用LinuxRT实时操作系统(不限于LinuxRT,如Vxworks,Xenomai、SyLixOS、INtime等实时操作系统皆可以),并且在底层采用高精度定时器建立周期为1ms的时基线程、运动控制线程和CANopen主站线程,CANopen主站线程优先级高于运动控制线程。时基线程优先级最高并作为运动控制线程和CANopen主站线程运行的共同时基,通过此方式可以保证运动控制线程与CANopen主站线程的同步,时基线程运行流程如图1所示。

操作系统任务间大量数据快速通信的方式一般通过共享内存,但是这种方式对于PLC的编程使用者来说是不可见的,也无法访问。本方法中采用PLC自身的%MW软元件区作为运动控制任务与CANopen主站任务间交互数据的桥梁,此软元件区可以根据实际通信需要设置对应大小。使用%MW软元件区的优点是用户能在编写PLC程序时直接访问,并能灵活的实现运动控制程序中各轴的运动控制功能块所需的输入信息以及功能块的计算输出数据和实际CANopen总线种各伺服从站的PDO数据对象的映射。每个CANopen主站均有各自的%MW输入、输出软元件区,%MW输入软元件区存放本CANopen总线上各伺服从站上传的数据,%MW输出软元件区则存放运动控制程序输出给本CANopen总线上各伺服从站的控制数据,%MW软元件区的存储内容进行格式定义如图2所示。

CANopen主站线程优先级仅低于时基线程。CANopen主站的同步帧发送周期与运动控制任务的周期相同,两路CANopen主站在此线程中得到运行。在每个周期的开始首先进行两路CANopen同步帧的发送,以保证两路CANopen运动控制的同步性。CANopen主站读取%MW软元件输出区中由运动控制任务写入的数据,并通过NMT、RxPDO或者SDO报文由CAN总线发送到各个伺服轴(即伺服从站),CANopen主站同时也读取各个伺服轴的反馈报文并将其中的数据并写入到%MW软元件输入区。CANopen主站线程的运行流程如图3所示。

在编程界面所建立的运动控制任务的运行周期为时基线程周期的整数倍。运动控制任务在运行周期的开始读取CANopen主站%MW软元件区的输入数据,然后执行用户编写的运动控制程序,并将执行结果写入%MW软元件区的输出区。在运动控制任务的程序下载到PLC中后,运动控制线程则周期性调用运动控制任务的程序。运动控制任务和运动控制此案城的运行流程如图4所示。

在运动控制程序中,MC_Axis[N]为对伺服轴的抽象数据结构,每一个挂在CANopen总线上的伺服轴,都需要对应一个对应于该轴的数据结构变量。用户的运动控制程序通过对应伺服轴的MC_Axis[N]变量与CANopen主站的%MW软元件区进行交互,其对应结构体类型数据结构内容如图5所示。

通过%MW中CANopen通信映射区域的设计对用户屏蔽了底层信息,通过MC_Axis[N]可以使得不同CANopen主站所带的伺服从站在用户编程时可以视同为同一个CANopen主站下的伺服从站,即采用连续统一的轴号进行编程(例如,轴0、1、2、…、N;Mc_Axis[N]数组的标号即为对应的轴号,其中轴0~5为第一路CANopen从站上的伺服轴,轴6之后为第二路CANopen从站上的伺服轴),方便了用户编程。

实施例

一、软件(用户PLC编程环境)

步骤1,在PLC编程环境中建立运动控制任务mc_task和运动控制程序mc_pou;

步骤2,在PLC编程环境分配第一路CANopen主站的%MW映射区域起始地址及大小,输入区域与输出区域地址不能重叠;

步骤3,在PLC编程环境分配第二路CANopen主站的%MW映射区域起始地址及大小,输入区域与输出区域地址不能重叠,并且与CANopen_1的映射区域也不重叠;

步骤4,在PLC编程环境中定义SDO_Tx、SDO_Rx结构体类型,如图6所示,并用SDO_Tx、SDO_Rx结构体类型定义全局变量,每个CANopen主站均有自己SDO_Tx、SDO_Rx类型的变量。并将变量对应的软元件地址调整到与各自CANopen主站%MW映射区域中“SDO接收相关”、“SDO发送相关”区域的首地址相同。“SDO接收相关”、“SDO发送相关”区域的内容与SDO_Tx、SDO_Rx结构体类型相同;

步骤5,在PLC编程环境中定义与两路CANopen主站总线中实际用到的RxPDO和TxPDO内容相同的AXIS_RXPDO_POS_T、AXIS_TXPDO_POS_T结构体类型,如图6所示。并用AXIS_RXPDO_POS_T、AXIS_TXPDO_POS_T结构体类型定义与实际PDO数量相同的变量,并在编程边境中将变量对应的软元件地址调整到与两路CANopen主站%MW软元件区域中各伺服从站RxPDO、TxPDO区域的首地址相同。各伺服从站RxPDO、TxPDO区域的内容与AXIS_RXPDO_POS_T、AXIS_TXPDO_POS_T结构体类型相同;

步骤6,在PLC编程环境,定义MC_AXIS_T结构类型,并根据实际两路CANopen主站上伺服从站数量N定义对应的轴结构变量数组MC_Axis[N],N对应实际组态配置的伺服轴个数,并且N<127;

步骤7,编写PLC的运动控制程序mc_pou的代码,采用梯形图或者ST均可以,将被控制伺服轴的MC_Axis[N]的序号作为运动控制功能块的INPUT引脚[AXIS]的输入,由此可以使用连续的轴序号来传给运动控制功能块而无需关注此轴序号位于哪路CANopen总线上。运动控制功能块在执行时会根据传入的轴序号来访问对应的变量MC_Axis[N];

步骤8,在运动控制任务mc_task中,首先读取各CANopen主站%MW映射输入区的相关数据并写到对应轴的MC_Axis[N]变量中,然后调用运动控制程序mc_pou,运动控制程序mc_pou中各轴的运动控制功能块的运行结果会写入到对应轴的MC_Axis[N]变量中。mc_task任务执行最后,将MC_Axis[N]中各轴的运行结果写入到各CANopen主站%MW映射输出区中;

步骤9,将编译好的程序下载到PLC中运行。

二、软件(CPU模块底层,以Linux RT操作系统为例)

建立1ms的时基线程、CANopen主站线程和运动控制线程,优先级时基线程最高、运动控制线程最低。其中两路CANopen主站的程序在CANopen主站线程中运行;

时基线程中建立信号量1和信号量2,并在线程每周期执行时通过linux中的系统调用接口sem_post(以Linux RT为例)依次发送信号量1和2给CANopen主站线程和运动控制线程,通过此方式来确保这两个线程执行的同步性;

CANopen主站线程运行流程如图3所示,首先通过系统调用接口阻塞等待信号量1,如果收到时基线程发送的信号量1,就开始进行两路CANopen主站的同步帧发送,这样做能保证同步帧周期发送的准确性,并使两路CANopen总线上的伺服能同步动作。发送完同步帧,CANopen主站线程进行两路CANopen主站RxPDO报文的发送,并进行SDO报文的处理,在线程的最后接收各伺服从站发来的TxPDO报文;

运动控制线程运行流程如图4所示,首先通过系统调用接口阻塞等待信号量2,如果收到时基线程发送的信号量2,就开始执行用户下载到PLC中的运动控制任务mc_task。

具体实现中,本申请提供计算机存储介质以及对应的数据处理单元,其中,该计算机存储介质能够存储计算机程序,所述计算机程序通过数据处理单元执行时可运行本发明提供的一种双CANopen运动控制PLC的实现方法的发明内容以及各实施例中的部分或全部步骤。所述的存储介质可为磁碟、光盘、只读存储记忆体(read-only memory,ROM)或随机存储记忆体(random access memory,RAM)等。

本领域的技术人员可以清楚地了解到本发明实施例中的技术方案可借助计算机程序以及其对应的通用硬件平台的方式来实现。基于这样的理解,本发明实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以计算机程序即软件产品的形式体现出来,该计算机程序软件产品可以存储在存储介质中,包括若干指令用以使得一台包含数据处理单元的设备(可以是个人计算机,服务器,单片机。MUU或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。

本发明提供了一种双CANopen运动控制PLC的实现方法,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。

相关技术
  • 一种集成CANopen协议的运动控制从站的实现方法、系统及介质
  • 一种集成CANopen协议的运动控制从站的实现方法、系统及介质
技术分类

06120115891381