一种CANopen的数据同步方法转让专利

申请号 : CN201811303082.1

文献号 : CN109343453B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 文长明文可卢昌虎

申请人 : 合肥保得工业自动化有限公司文长明文可

摘要 :

本发明公开了一种CANopen的数据同步方法,其用于同步PLC主模块和多个PLC扩展模块之间的数据,所述数据同步方法包括:步骤一:定义各个PLC扩展模块的用户变量参数以及数据同步参数,并在所述PLC扩展模块中新建用户变量参数表、数据同步参数表。步骤二:将所有用户变量参数以及数据同步参数分别关联对象字典中相关的对象及映射表。步骤三:在所述PLC主模块和多个PLC扩展模块中新建处理数据对象表,开辟所述处理数据对象表的内存区域。步骤四:在所述PLC主模块和多个PLC扩展模块中新建通信对象表。步骤五:所述PLC主模块和多个PLC扩展模块之间进行数据轮询。本发明能够全面适应多个数量、多个类型的PLC扩展模块的数据同步,方便基于CANopen协议的主从站的数据同步。

权利要求 :

1.一种CANopen的数据同步方法,其用于同步PLC主模块和多个PLC扩展模块之间的数据,其特征在于:所述数据同步方法包括:步骤一:定义各个PLC扩展模块的用户变量参数以及数据同步参数,并在所述PLC扩展模块中新建用户变量参数表、数据同步参数表;所述用户变量参数表、所述数据同步参数表均包括分别设置多个字段的多个表项;定义所述PLC主模块的用户变量参数及数据同步参数,且所述PLC主模块的用户变量参数、数据同步参数分别对应各个PLC扩展模块的用户变量参数、数据同步参数;

步骤二:将所有用户变量参数以及数据同步参数分别关联对象字典中相关的对象及映射表;

步骤三:在所述PLC主模块和多个PLC扩展模块中新建处理数据对象表,开辟所述处理数据对象表的内存区域;所述处理数据对象表包括分别设置多个字段的多个表项;

步骤四:在所述PLC主模块和多个PLC扩展模块中新建通信对象表;所述通信对象表包括分别设置多个字段的多个表项,每个表项包括一个数据结构CAN MSG;所述处理数据对象表的每个表项对应所述通信对象表的一个表项;

步骤五:所述PLC主模块和多个PLC扩展模块之间进行数据轮询。

2.根据权利要求1所述的CANopen的数据同步方法,其特征在于:所述PLC扩展模块设置数字量输入端、数字量输出端、数字量输入输出端、模拟量输入端、模拟量输出端、模拟量输入输出端中的一种数据端口。

3.根据权利要求1所述的CANopen的数据同步方法,其特征在于:所述对象字典包括一级映射表,所述一级映射表包括分别设置多个字段的多个表项;所述一级映射表的每个表项中的一个字段对应一个二级映射表;所述二级映射表包括分别设置多个字段的多个表项,且每个二级映射表的每个表项中的一个字段对应一个字典变量或者字典结构。

4.根据权利要求1所述的CANopen的数据同步方法,其特征在于:所述PLC扩展模块的用户变量参数包括从站变量、回调处理函数、索引、子索引、有效性。

5.根据权利要求1所述的CANopen的数据同步方法,其特征在于:在所述步骤二中,将所述对象字典里相应的对象的指针指向所述用户变量参数,将所述数据同步参数设置所述对象字典里的同步控制结构和映射结构。

6.根据权利要求1所述的CANopen的数据同步方法,其特征在于:所述处理数据对象表设置多个处理参数;所述处理参数包括超时、被同步的数据类型、大小、数量、CAN标识号、状态、模式、当前时间、上一次接收时间。

7.根据权利要求1所述的CANopen的数据同步方法,其特征在于:所述处理数据对象表的每个表项包括至少一个映射参数,所述映射参数将一个数据处理与对应的对象字典中的若干数据进行映射,且所述处理数据对象表的每个表项至多包括8个映射参数。

8.根据权利要求1所述的CANopen的数据同步方法,其特征在于:所述通信对象表显示当前通讯对象的状态、回调以及一个指向对应的所述处理数据对象表的表项的指针。

9.根据权利要求1所述的CANopen的数据同步方法,其特征在于:所述数据结构CAN MSG包括多个字段,且所述数据结构CAN MSG用于设置CAN控制器的寄存器。

10.根据权利要求9所述的CANopen的数据同步方法,其特征在于:在所述步骤五中,在发送报文时,通过对应的所述数据结构CAN MSG设置硬件所述CAN控制器,在接收报文时,将报文填充对应的所述数据结构CAN MSG中的结构。

说明书 :

一种CANopen的数据同步方法

技术领域

[0001] 本发明涉及通讯技术领域的一种数据同步方法,具体为一种CANopen的数据同步方法。

背景技术

[0002] 基于CANopen协议进行通讯的PLC主站与PLC从站往往由于从模块的数量限制,需要进行扩展,并增设多个PLC扩展模块。由于主站和从站的特定硬件或应用千变万化,可扩展的模块在数量和类型上是随机的,PLC扩展模块可以进行数字量或模拟量的输入或者输出,而且单个扩展模块的输入或输出通道数也不是固定的,现有数据同步不能满足需求。因此,需要设计一种应用于PLC主模块和PLC扩展模块的屏蔽硬件差异的通用数据同步方法。

发明内容

[0003] (一)解决的技术问题
[0004] 针对现有技术的不足,本发明提供了一种CANopen的数据同步方法,具备全面、方便等优点,解决了现有数据同步不能满足PLC主模块和PLC扩展模块的数据同步需求的问题。
[0005] (二)技术方案
[0006] 为实现上述全面、方便的目的,本发明提供如下技术方案:一种CANopen的数据同步方法,其用于同步PLC主模块和多个PLC扩展模块之间的数据,所述数据同步方法包括:
[0007] 步骤一:定义各个PLC扩展模块的用户变量参数以及数据同步参数,并在所述PLC扩展模块中新建用户变量参数表、数据同步参数表;所述用户变量参数表、所述数据同步参数表均包括分别设置多个字段的多个表项;定义所述PLC主模块的用户变量参数及数据同步参数,且所述PLC主模块的用户变量参数、数据同步参数分别对应各个PLC扩展模块的用户变量参数、数据同步参数;
[0008] 步骤二:将所有用户变量参数以及数据同步参数分别关联对象字典中相关的对象及映射表;
[0009] 步骤三:在所述PLC主模块和多个PLC扩展模块中新建处理数据对象表,开辟所述处理数据对象表的内存区域;所述处理数据对象表包括分别设置多个字段的多个表项;
[0010] 步骤四:在所述PLC主模块和多个PLC扩展模块中新建通信对象表;所述通信对象表包括分别设置多个字段的多个表项,每个表项对应一个数据结构CAN MSG;所述处理数据对象表的每个表项对应所述通讯对象表的一个表项;
[0011] 步骤五:所述PLC主模块和多个PLC扩展模块之间进行数据轮询。
[0012] 作为上述方案的进一步改进,所述PLC扩展模块设置数字量输入端、数字量输出端、数字量输入输出端、模拟量输入端、模拟量输出端、模拟量输入输出端中的一种数据端口。
[0013] 作为上述方案的进一步改进,所述对象字典包括一级映射表,所述一级映射表包括分别设置多个字段的多个表项;所述一级映射表的每个表项中的一个字段对应一个二级映射表;所述二级映射表包括分别设置多个字段的多个表项,且每个二级映射表的每个表项中的一个字段对应一个字典变量或者字典结构。
[0014] 作为上述方案的进一步改进,所述PLC扩展模块的用户变量参数包括从站变量、回调处理函数、索引、子索引、有效性。
[0015] 作为上述方案的进一步改进,在所述步骤二中,将所述对象字典里相应的对象的指针指向所述用户变量参数,将所述数据同步参数设置所述对象字典里的同步控制结构和映射结构。
[0016] 作为上述方案的进一步改进,所述处理数据对象表设置多个处理参数;所述处理参数包括超时、被同步的数据类型、大小、数量、CAN标识号、状态、模式、当前时间、上一次接收时间。
[0017] 作为上述方案的进一步改进,所述处理数据对象表的每个表项包括至少一个映射参数,所述映射参数将一个数据处理与对应的对象字典中的若干数据进行映射,且所述处理数据对象表的每个表项至多包括8个映射参数。
[0018] 作为上述方案的进一步改进,所述通信对象表显示当前通讯对象的状态、回调以及一个指向对应的所述处理数据对象表的表项的指针。
[0019] 作为上述方案的进一步改进,所述数据结构CAN MSG包括多个字段,且所述数据结构CAN MSG用于设置CAN控制器的寄存器。
[0020] 进一步地,在所述步骤五中,在发送报文时,通过对应的所述数据结构CAN MSG设置硬件所述CAN控制器,在接收报文时,将报文填充对应的所述数据结构CAN MSG中的结构。
[0021] (三)有益效果
[0022] 与现有技术相比,本发明提供了一种CANopen的数据同步方法,具备以下有益效果:
[0023] 本发明的CANopen的数据同步方法,通过定义PLC主模块和PLC扩展模块的用户变量参数、数据同步参数,将用户变量参数以及数据同步参数分别关联对象字典中相关的对象及映射表,新建用户变量参数表、数据同步参数表、处理数据对象表以及通信对象表并进行内部的相互对应,实现PLC主模块和PLC扩展模块的数据轮询,并且能够全面适应多个数量、多个类型的PLC扩展模块的数据同步,方便基于CANopen协议的主从站的数据同步。并且,本发明只需要修改用户定义的参数即可以实现主站和从站的数据同步,简化了CANopen的数据同步流程,提高数据同步效率。

附图说明

[0024] 图1为本发明实施例1的CANopen的数据同步方法中PLC主模块和多个PLC扩展模块之间的拓扑示意图;
[0025] 图2为本发明实施例1的CANopen的对象字典的结构示意图;
[0026] 图3为本发明实施例1的CANopen的数据同步方法的用户变量参数表、数据同步参数表的结构示意图;
[0027] 图4为本发明实施例1的CANopen的数据同步方法的PDO表的结构示意图;
[0028] 图5为本发明实施例1的CANopen的数据同步方法的COB表的结构示意图;
[0029] 图6为本发明实施例1的CANopen的数据同步方法的主从站之间的总体框架图。

具体实施方式

[0030] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0031] 实施例1
[0032] 请参阅图1,本实施例的CANopen的数据同步方法用于同步PLC主模块和多个PLC扩展模块之间的数据。其中,PLC扩展模块设置数字量输入端、数字量输出端、数字量输入输出端、模拟量输入端、模拟量输出端、模拟量输入输出端中的一种数据端口。PLC扩展1仅输入数字量,PLC扩展2仅输出数字量。PLC扩展3既输入数字量,也输出数字量。PLC扩展4仅输入模拟量,PLC扩展5仅输出模拟量。PLC扩展5既输入模拟量,也输出模拟量。PLC主模块(主站)获取PLC扩展模块1、3、4、6(从站)的输入状态,同时将PLC主模块的输出信号经过CAN总线传递给PLC扩展模块2、3、5、6再各自输出。
[0033] 请参阅图2,对象字典是一系列数据对象的集合,被分配在内存里,对象字典被设计成由一级映射数据结构(表)、二级映射数据结构和具体的数据对象组成的数据集合。对象字典包括一级映射表,一级映射表包括分别设置多个字段的多个表项。一级映射表的每个表项中的一个字段对应一个二级映射表。二级映射表包括分别设置多个字段的多个表项,且每个二级映射表的每个表项中的一个字段对应一个字典变量或者字典结构。对象字典的这种数据组织形式,能够方便设置和查询任一个数据,寻找一个数据对象需要经过一级映射表搜寻,找到一级映射表指向的二级映射表,再由二级映射表找到具体的数据对象。
[0034] 本实施例的CANopen的数据同步方法包括:
[0035] 步骤一:请参阅图3,定义各个PLC扩展模块的用户变量参数(用户变量参数包含了用户变量,还包含一些回调处理,索引,子索引,有效性等)以及数据同步参数,并在PLC扩展模块中新建用户变量参数表、数据同步参数表。这些用户变量参数指向的用户变量是与具体扩展模块的硬件输入输出相关的,并且称指向的变量为特定设备变量,然后要为这些特定设备变量定义对应的数据同步参数。用户变量参数表、数据同步参数表均包括分别设置多个字段的多个表项。定义PLC主模块的用户变量参数及数据同步参数,且PLC主模块的用户变量参数、数据同步参数分别对应各个PLC扩展模块的用户变量参数、数据同步参数。
[0036] 步骤二:将所有用户变量参数以及数据同步参数分别关联对象字典中相关的对象及映射表,这样以后操作对象字典实际上等于操作真实的设备变量了。在本实施例中,对象字典里的同步对象的数目可以经过宏添加预设的数量。
[0037] 用户变量参数的索引与子索引是找到对象字典里具体的对象的两个参数,用户变量参数里指向的用户变量是设备的输入输出相关的变量,将这类变量绑定对象字典里的结构或变量,准确的说是让对象字典里相应的对象的指针指向用户定义的变量,以后操作对象字典里的这些指针其实等于操作了用户定义的与输入输出相关的变量。
[0038] 将同步参数设置到对象字典里的同步配置和同步映射两部分,同步配置是同步控制的一些参数,比如超时之类的,同步映射则表示同步哪些对象,是一种映射关系(这里的映射与对象字典里的一级二级映射表是不同的,这里的映射是指与PDO表(PDO表第三步介绍)相关的,PDO表要找到的是需要同步的变量的一种映射),这些对象通过索引、子索引可以找到。
[0039] 步骤三:请参阅图4,在PLC主模块和多个PLC扩展模块中新建处理数据对象表(PDO表),开辟处理数据对象表的内存区域。由于用户变量参数设置了对象字典里相关的部分,对象字典里的同步配置和同步映射部分与PDO表直接相关的,在步骤二将用户数据同步参数设置对象字典的时候,就间接第一次设置了PDO表。处理数据对象表包括分别设置多个字段的多个表项。处理数据对象表设置多个处理参数。处理参数为超时、被同步的数据类型、大小、数量、CAN标识号、状态、模式、当前时间、上一次接收时间等参数。PDO表在进行数据同步的动态过程使用,包含需要同步的变量的映射关系(进行步骤二的时候)。
[0040] PDO表一般有多个表项(具体多少是对象字典与PDO相关的宏申明的数量决定),每个表项是一个PDO的结构,包含了软件实现控制和同步的信息,这些信息经过初始化、设置以及中间状态的修改等,在同步过程中起到关键作用。每个表项包含一个COB参数(见步骤四),COB参数是设置COB表相关的参数。
[0041] 一个PDO表的表项最多包含8个映射数据,也就是一个PDO报文可以最多一次性同步8个数据,当然在其他实施例中也可以只同步一个数据。
[0042] 步骤四:请参阅图5,在PLC主模块和多个PLC扩展模块中新建通信对象表(COB表);通信对象表包括分别设置多个字段的多个表项,每个表项对应一个数据结构CAN MSG。处理数据对象表的每个表项对应通讯对象表的一个表项。
[0043] COB表包含了当前通信对象的状态,回调,以及一个指向对应PDO表项的指针,还包含一个与底层CAN控制器通信密切相关的数据结构CAN MSG,可以用这个数据结构设置硬件携带的CAN控制器寄存器。
[0044] COB表起到承上启下作用,连接对应的PDO结构和具体的CAN报文。当发送报文的时候,将对应的COB表的表项对应的CAN MSG设置硬件CAN控制器,当接收到报文的时候,将报文填充对应的COB表的表项的CAN MSG结构中。
[0045] 步骤五:请参阅图6,PLC主模块和多个PLC扩展模块之间进行数据轮询。
[0046] 综上,相较于现有的CANopen的数据同步方法,本实施例的CANopen的数据同步方法具有以下优点:
[0047] 本实施例的CANopen的数据同步方法,通过定义PLC主模块和PLC扩展模块的用户变量参数、数据同步参数,将用户变量参数以及数据同步参数分别关联对象字典中相关的对象及映射表,新建用户变量参数表、数据同步参数表、处理数据对象表以及通信对象表并进行内部的相互对应,实现PLC主模块和PLC扩展模块的数据轮询,并且能够全面适应多个数量、多个类型的PLC扩展模块的数据同步,方便基于CANopen协议的主从站的数据同步。并且,本实施例只需要修改用户定义的参数即可以实现主站和从站的数据同步,简化了CANopen的数据同步流程,提高数据同步效率。
[0048] 实施例2
[0049] 本实施例的CANopen的数据同步方法在实施例1的基础上增加了数据轮询方式。
[0050] 数据轮询方式包括从站到主站(输入)的轮询方法、主站到从站(输入)的轮询方法。
[0051] 从站到主站的数据同步过程:
[0052] 从站进行轮询检查对象字典里的相关数据是否改变了,如果变化了则发送数据到CAN总线上,之后主站接收到CAN报文,修改与从站对应的设备变量,从而实现同步。
[0053] 在一次轮询中把PDO表的所有PDO表项轮询一次,挨个检查。首先,对该PDO表项的数据结构进行编码,编码概括的说就是将设备变量(与输入输出相关的变量)赋值到对应COB表项的CAN MSG的数据字段部分,具体是根据每个PDO表项找到PDO映射字段,映射字段被映射到对象字典里的相关对象,而这个对象是与用户设备变量挂钩的(由步骤二中已知对象字典里的相关对象与设备变量挂接),所以等于找到了具体的设备变量,然后将该设备变量设置到PDO表项对应的COB表项的CAN MSG的数据字段,这个过程是PDO编码。
[0054] 检查上述CAN MSG的数据字段(也就是经过编码获取的最新的设备变量)与PDO表项的一份拷贝是否相等(这份拷贝是该设备变量上一次值的副本,这个值在通信时候和初始化时候都被设置),不相等表示设备变量变化(对应输入有所更改),会设置新的PDO表项的状态为信号状态。这样所有的PDO表项都经过这样的检查,这个检查要么会引发该PDO表项状态的改变,要么保持。
[0055] 接下来会执行同步过程,同样重新挨个搜寻所有的PDO表项,并根据状态,如果是有效的且是发送信号状态(如果是信号状态则设置为发送状态,这个信号状态就是上述检查设置的),然后执行发送过程,如果这个PDO表项不满足以上条件,这个PDO数据包就会被忽略不发送。
[0056] 所以只有改变设备变量对应的PDO表项才会执行同步过程。
[0057] 满足条件的PDO表项首先会执行一次编码(和上面编码一样的过程),设置PDO表项里与通信相关的时间记录,由PDO表项直接找到对应的COB表项的结构体(PDO表项的COB参数字段里保存了对应的COB表项在COB表中的位置),该结构体包含了需要发送的CAN MSG结构,将CAN MSG结构的内容填充CAN硬件寄存器,发送报文到CAN总线上。
[0058] 主站CAN控制器接收到报文会将报文存储到消息区里。
[0059] 主站在轮询中处理接收到的消息,会挨个处理消息区里的所有消息(消息区可能接收到了多个消息报文),直到所有消息报文被处理。
[0060] 在处理消息报文的时候,每个消息报文都是遵循CANopen协议的。其中,有个字段是CAN ID(CAN报文的标识),根据CAN ID,搜索COB表里的所有COB表项的CAN MSG结构(CAN MSG里有个字段就是为了保存CAN ID的),找到与接收的消息报文里的CAN ID一致的CAN MSG,从而找到对应的COB表项。主站和从站一样,保持主站的设备变量参数和同步参数与所有从站的设备变量参数和同步参数一致,主站经历从站一样的过程设置PDO表和COB表,所以主站里必然有从站发来的对应的CAN ID的COB表的表项,如果没有主站没有找到对应CAN ID的COB表项就会忽略这个报文。
[0061] 找到对应的COB表项结构之后,把接收的消息报文里的数据字段复制到COB表项的CAN MSG的数据字段,然后处理接收到的该消息。处理过程是在初始化的时候就被设置的,在COB表被设置的时候设置了处理过程(步骤四的时候),因为COB表的上层不但有PDO模块,还有其他模块,比如NMT、SDO模块等(这些模块涉及其他的作用与数据同步无关),每个模块的处理过程是不一样的,PDO、NMT、SDO等数据表都会有对应的COB表。
[0062] 上述处理过程叫做回调处理,在PDO数据同步的部分就是进行PDO的回调处理过程。
[0063] PDO回调处理先由该COB表项找到对应的PDO表项(COB表项的某些字段在设置过程中设置了指向对应PDO表项的地址,也是步骤四的设置过程中设置的)。再根据该PDO表项设置的映射字段锁定到对象字典里被映射的对象(该对象就是用户设备变量关联的对象,已经在步骤二中设置),然后将COB表项的CAN MSG的数据赋给被映射的对象,从而实现了将接收数据赋值到用户设备参数。这样就实现了从站到主站的数据同步。
[0064] 主站到从站的同步过程与从站到主站的同步过程类似,只不过是主站检查对象字典的当前值与拷贝副本是否一致后再发送出去,而接收者变成了从站,从站接收到之后会根据对象字典里的对象的附带参数回调处理更新实际的硬件输出。
[0065] 需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。
[0066] 尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。