一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

CAN总线分配ID的方法及CAN总线系统与流程

2022-02-20 05:43:50 来源:中国专利 TAG:

can总线分配id的方法及can总线系统
技术领域
1.本发明涉及can总线技术领域,尤其涉及can总线分配id的方法及can总线系统。


背景技术:

2.如今的工业控制领域正朝着信息化、智能化、网络化不断发展,影响着通信效率的工业总线技术越来越受到行业的重视。传统的工业通信总线大多采用rs485总线,但是rs485总线有总线利用率低、传输速率低、通信距离短等缺点,并且缺乏完备的错误检测机制,导致其安全性较差,不适合应用在安全相关的工业领域。安全相关的工业领域包括核电、水利、交通、矿山等关系着重大公共安全的行业,一般有着严格的安全性要求。控制器局域网can(controller area network)总线是一种能有效支持分布式实时控制的串行通信网络。近年来,由于can总线具有高可靠性、高传输速率、良好的勘误检错能力和低廉的成本优势,逐渐成为应用最广泛的现场总线之一。
3.由于can的高性能和高可靠性,现已经广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面,被誉为自动化领域的计算机局域网。它的出现为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持。而对于同类型的通讯节点同时挂在总线上时,要实现一对一的通讯时,需要给每个节点分配一个id。因此就涉及到了can总线id分配的问题。
4.目前在工控领域can通讯id分配主要是两个方式,一个就是随机自动分配,这种方式使得同一个节点的id在每次分配过程中都可能不一样;另外一个就是通过硬件识别的方式预设id,给每个通讯节点固定好一个id,但是实际运用中容易造成id冲突的问题。
5.通常在实际使用过程中,我们并不希望每次上电开机后,节点的id都发生变化,因为节点的通讯id还会用到其他通讯协议里面,如485modus通讯,还会有总线节点的插入退出的情况存在。所以很多情况下can总线插入节点时,如果和总线上其他节点的id不冲突的话,还是需要保持插入节点原有的通讯id不变。


技术实现要素:

6.本发明提供了一种can总线分配id的方法及can总线系统,旨在解决现有的can总线中节点插入退出总线时存在通讯id冲突的问题。
7.第一方面,本发明提供了一种can总线分配id的方法,应用于一主机,所述方法包括:通过竞争总线参与主机竞争且在优胜下将本节点作为主机;将本节点的序列号和id上传至所述can总线,并从所述can总线接收与存储其他节点的序列号和id,其中,所述序列号与id一一对应;设置变量分配标志以记录id是否已分配;接收所述can总线上待分配节点的id分配请求命令,根据所述变量分配标志判断所述待分配节点的序列号和id与已存储的其他节点的序列号和id是否冲突;若不冲突,存储所述待分配节点的原序列号和原id以及更新变量分配标志,并通过id分配命令发送至所述can总线;若冲突,对所述待分配节点分配原序列号和新id以及更新变量分配标志,并通过id分配命令发送至所述can总线。
8.第二方面,本发明提供了一种can总线分配id的方法,应用于一从机,所述方法包括:通过竞争总线参与主机竞争且在非优胜下将本节点作为从机;将本节点的序列号和id上传至所述can总线,并从所述can总线接收与存储其他节点的序列号和id,其中,所述序列号与id一一对应;向所述can总线发送id分配请求命令以请求主机分配id;接收所述can总线上所述主机通过id分配命令发送的分配给本节点的序列号和id,以及变量分配标志,并判断本节点的序列号与所述主机发送的序列号是否一致,其中,所述变量分配标志用于记录id是否已分配;若一致,将所述主机分配的id作为本节点的id,并存储所述变量分配标志;若不一致,存储所述主机发送的序列号和id以及所述变量分配标志。
9.第三方面,本发明提供了一种can总线系统,其包括can总线、竞争总线和若干节点,所述can总线包括高电平线和低电平线,所述节点与所述高电平线、所述低电平线以及所述竞争总线连接,所述节点根据如第一方面和第二方面所述的can总线分配id的方法进行id分配。
10.与现有技术相比,本发明的有益效果是:can总线上的所有节点通过竞争总线参与主机竞争,优胜的节点作为主机,非优胜的节点作为从机。所有的节点将其序列号和id上传至can总线中,总线上的所有节点均对应接收与存储所上传的各节点的序列号和id。主机通过设置变量分配标志来记录各个节点的id是否已分配,待分配节点通过id分配请求命令向主机请求分配id,主机判断待分配节点的id和序列号与已存储的其他节点的序列号和id是否有冲突,若不冲突则主机分配原序列号和原id并相应地更新变量分配标志;若冲突则主机分配原序列号和新id并相应地更新变量分配标志;通过id分配命令将所分配的信息经由can总线分配给待分配节点。由此,由于变量分配标志记录了所有节点的id分配数据,can总线上所有的节点均能共享到该变量分配标志,也即是说can总线上的其他节点都拥有相同的变量分配标志,当有新的节点申请id分配时,新的主机也可以根据变量分配标志所记录的id数据接管id分配的工作,保证新分配的id与之前已经存在的id不冲突,实现了自动分配id,以及避免id重新分配。
附图说明
11.为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
12.图1展示了本发明实施例的can总线系统的示意图;
13.图2展示了本发明实施例的can总线分配id的方法的主从机竞争的步骤流程图;
14.图3展示了本发明实施例的can总线分配id的方法的主从机的流程示意图;
15.图4展示了本发明实施例的can总线分配id的方法的主机的流程示意图;
16.图5展示了本发明实施例的can总线分配id的方法的数据帧的示意图;
17.图6展示了本发明实施例的can总线分配id的方法设置变量分配标志的示意图;
18.图7展示了本发明实施例的can总线分配id的方法分配新id的示意图;
19.图8展示了本发明另一实施例的can总线分配id的方法的主机的流程示意图;
20.图9展示了本发明另一实施例的can总线分配id的方法的主从机的流程示意图;
21.图10展示了本发明实施例的can总线分配id的方法的从机的流程示意图。
具体实施方式
22.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
23.应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
24.还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
25.还应当进一步理解,在本发明说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
26.本发明实施例提供了一种can总线系统,该系统包括can总线、竞争总线和若干节点,所述can总线包括高电平线和低电平线,所述节点与所述高电平线、所述低电平线以及所述竞争总线连接,所述节点根据一种can总线分配id的方法进行id分配。
27.参照图1所示,can总线输出差分信号,can总线包括高电平线can-h和低电平线can-l。can总线上的所有节点包括第一端、第二端和第三端,节点的第一端与高电平线连接,第二端与低电平线连接,第三端与竞争总线连接。节点在第一端与第三端之间施加高电平可以将竞争总线拉高至高电平,节点在第二端和第三端之间施加低电平可以将竞争总线拉低至低电平。所有节点实时检测竞争总线的电平状态,通过竞争总线的电平状态来判断是否参与竞争主机。
28.其中,竞争总线在实际应用中是一条硬件总线,竞争总线来表示主机在线的状态,高电平为主机不在线,低电平为主机在线。总线任意节点都可以控制的硬件总线拉低,但是拉高总线需要所有节点同时拉高。所有节点默认的状态都是拉高总线。
29.参照图2,本实施例的can总线分配id的方法首先利用竞争总线来确定好主从机。本实施例中所有节点基于竞争机制通过竞争总线来竞争主从机,具体过程包括步骤:s1-s7。
30.s1:上电开始后,所有节点检测竞争总线是否为高电平。
31.s2:若是,则主机竞争开始,所有节点开始计时。
32.s3:各节点判断计时的时间是否达到预设时间值,例如,预设时间值为5秒。
33.s4:达到5秒后节点检测竞争总线是否被拉低。
34.s5:若否,本节点拉低竞争总线至低电平。
35.s6:判断是否为本节点将竞争总线拉低。
36.s7:若是则计时结束本节点为主机;若不是则计时结束本节点为从机。
37.简单来说,当竞争总线为高电平时,所有节点开始计时,计时达到5秒后马上拉低竞争总线,最先拉低竞争总线的节点即为主机,其他节点即为从机。
38.当主机运行一段时间后,由于其他工作需求需要退出can总线不再担任主机,则根据以下步骤执行。
39.s8:判断本节点是否要退出主机。
40.s9:若是,则拉高竞争总线至高电平,本节点转变为从机。
41.s10:判断拉高竞争总线至高电平的实际是否达到预设时间值,例如,预设时间值为1秒。若是,则返回步骤s1,所有节点重新竞争主机。
42.也即当主机要退出时,只需要将竞争总线的电平拉高即可,由此,主机退出can总线,不再担任主机,其他节点则可以重新竞争主机。
43.参照图3和图4,在确定好主从机的情况下进行id分配,本实施例将以主机作为执行主体描述id分配的过程,本实施例的can总线分配id的方法具体包括步骤s110-s160。
44.s110、通过竞争总线参与主机竞争且在优胜下将本节点作为主机。
45.具体地,上述实施例中已详细描述了主从机竞争的过程,本实施例在此不再赘述。
46.s120、将本节点的序列号和id上传至所述can总线,并从所述can总线接收与存储其他节点的序列号和id,其中,所述序列号与id一一对应。
47.在一实施例中,序列号指的是节点的硬件设备号,可以为纯数字的生产信息,或者是节点主控芯片内部的序列号,大小控制在9位数以内,当然还可以是其他的位数。id指的是节点的通讯id,can总线利用节点的通讯id实现与各节点的通讯。每个节点的序列号与id为映射关系,两者之间一一对应。例如,节点a的序列号为efg3846,id为08,那么该节点a的序列号efg3846与id08构成映射,即efg3846-08。主机节点首先将其序列号和id上传到can总线中,其他节点同样也将其序列号和id也上次到can总线中。由此,主机节点可以接收到其他节点的序列号和id,并将其他节点的序列号和id存储下来。当然,其他节点也可以接收到主机的序列号和id以及除本节点外其他节点的序列号和id,同样也一一存储下来。这样,can总线上的所有节点都接收到了每个节点的序列号和id。
48.需要说明的是,节点发送和接收的序列号和id是通过一数据帧来传输,如图5所示,数据帧中包括序列号和id,其中,bit0-bit31表示序列号,bit32-bit37表示id。
49.s130、设置变量分配标志以记录id是否已分配。
50.在一实施例中,如图6所示,变量分配标志由一个16位的变量p来记录,p的一个bit位置1来记录一个节点被成功分配。例如:id为3的节点标记为id成功分配,那变量p的bit3置1。初始时只记录自身id信息。具体地,首先根据本节点的id确定变量分配标志的位置,譬如上述例子的id为3,那么其对应的位置即是变量p中的第三个位置bit3。在确定好变量分配标志的位置后,如果id已分配,则标记该位置,也即将该位置置1,譬如上述例子的第三个位置bit3的值为1。需要说明的是,本实施例的变量分配标志同样也是通过数据帧来传输,如图5所示,其中,bit47-bit63表示变量p。
51.s140、接收所述can总线上待分配节点的id分配请求命令,根据所述变量分配标志判断所述待分配节点的序列号和id与已存储的其他节点的序列号和id是否冲突。
52.在一实施例中,can总线上还没有分配id的待分配节点向主机发送id分配请求命令,请求主机分配id。主机接收到id分配请求命令后,根据变量分配标志来进行判断是否存在id冲突。具体地,检查待分配节点的id在变量p中是否标记了变量分配标志,也即该id在变量p中对应的bit位是0还是1,如果是0则表明待分配节点的id还未分配,判定不冲突;如果是1,则表明待分配节点的id已分配,判定冲突。
53.s150、若不冲突,存储所述待分配节点的原序列号和原id以及更新变量分配标志,
并通过id分配命令发送至所述can总线。
54.在一实施例中,在执行步骤s150时具体执行:根据待分配节点的原id确定变量分配标志的位置;将对应待分配节点的变量分配标志的位置进行标记。
55.示例性地,待分配节点的原序列号为efg3846,id为08,主节点存储的变量p的第八位bit8没有标记变量分配标志,也即bit8为0。表示待分配节点的序列号和id与主机中存储的其他节点的序列号和id没有冲突。那么则保持原来的序列号和id,也即主机保存待分配节点的序列号和id还是efg3846和08。此外,主机节点还需要对应地更新变量分配标志,因为主机节点完成了对待分配节点的id分配,那么则需要记录该待分配节点的id已成功分配。具体地,因为待分配节点的id为08,对应变量p中的位置是第八位bit8,标记该bit8,将bit8置1。主机节点完成对待分配节点的id分配后,通过id分配命令发送到can总线,待分配节点根据主节点分配的序列号和id实现id分配。
56.s160、若冲突,对所述待分配节点分配原序列号和新id以及更新变量分配标志,并通过id分配命令发送至所述can总线。
57.在一实施例中,在执行步骤s160时具体执行:将待分配节点的原id置零;确定变量分配标志中首位为零的位置;将所述首位为零的位置所对应的序号确定为待分配节点的新id;将所述首位为零的位置进行标记。
58.示例性地,待分配节点的原序列号为efg3846,id为08,主节点存储的变量p的第八位bit8标记了变量分配标志,也即bit8为1。表示待分配节点的序列号和id与主机中存储的其他节点的序列号和id存在冲突。那么主机需要分配给待分配节点新的id。具体地,如图7所示,由于存在冲突的情况,首先将待分配节点的id置零,也即将id为08修改成id为0,然后从变量p中找到第一个为零的位置,例如,变量p中第一个为零的位置是bit5,该位置是变量p的第五位,那么则给该待分配节点分配的新id即为5,从而实现了新id的分配。再将分配的新id与待分配节点的原序列号efg3846一一对应。主机节点存储分配给该待分配节点的新id和序列号。此外,主机节点还需要对应地更新变量分配标志,因为主机节点完成了对待分配节点的id分配,那么则需要记录该待分配节点的id已成功分配。具体地,如图7所示,因为待分配节点的新id为05,对应变量p中的位置是第五位bit5,标记该bit5,将bit5置1。主机节点完成对待分配节点的id分配后,通过id分配命令发送到can总线,待分配节点根据主节点分配的序列号和id实现id分配。
59.在具体实施例中,主机保存完节点信息后,会对该节点下发id分配命令。根据s140保存的信息,如果该节点的序列号对应的id不为0,那么先用变量p对应的bit位记录该id,表明该id已经被分配,然后将该节点的序列号和id以及变量p,通过id分配命令一起下发到总线。同样的根据s140保存的信息,如果该节点的序列号对应的id为0,表明该节点的id未分配,那么主机会从变量p的bit1到bit15寻找第一个为0的bit位,把该bit置1,并将该bit位的位置作为该节点的id和之前的序列号对应保存,然后主机发送id分配命令把该节点的序列号和分配的id以及变量p下发到总线。
60.通过实施本实施例,利用变量分配标志记录每个节点id的分配情况,并将变量分配标志下发到can总线中,can总线上的所有节点都能够共享到该变量分配标志,也即所有节点拥有相同的id分配记录,由此,当有新的节点申请id分配时,新的主机也可以根据变量分配标志所记录的数据接管id分配的工作,实现了自动分配id,且一方面可以避免id分配
冲突,另一方面可以避免重新分配id,相当于新加入的节点预先设置好了id。采用本实施例的方法进行id分配,可以保证总线节点在一次自动分配id后,只要在退出总线后没有新的节点接入,该节点重新进入总线的id可以保持不变。
61.在一实施例中,当有新节点接入后,该新节点会按照步骤s120-s160的步骤申请通讯id。具体地,新节点将其序列号和id上次到总线,向主机发送id分配请求命令请求主机分配id,主机分配好id后通过id分配命令返回给新节点,且附有变量分配标志,新节点保存主机分配的id和变量分配标志。
62.在一实施例中,如图8和图9所示,所述can总线分配id的方法还包括步骤:s170-s180。
63.s170、若所述can总线上的一节点超过预设时间阈值未响应通讯,则判定该节点为掉线节点。
64.s180、将所述掉线节点的id置零以及清除所述掉线节点的变量分配标志,并通过id分配命令发送至所述can总线以同步给其他节点。
65.在一实施例中,如果后续通信过程中,从机节点超过一段时间没有通讯,表明从节点退出can总线。那么主机节点会把该节点id信息改为0,同时会把变量p里面对应的bit位清除,并下发id分配命令。can总线其他节点接收到主机下发的id分配命令后会清除该序列号对应的id信息,并更新变量p。
66.具体地,当该节点标记自己id被分配之后,就开始进行正常的通讯。一旦主机检测总线有节点超过一段时间未有通讯应答,则认为该节点已经掉线。那么主机节点会把该节点id信息改为0,同时会把变量p里面对应的bit位清除,并下发id分配命令去把主机信息同步到系统中其他节点。由此,主节点将更新的变量分配标志同步给其他节点,其他节点也能够拥有相同的变量分配标志。
67.若该节点再次接入总线,则因为其本身的id信息和主机已经存储的其他节点序列号和id并不冲突,所以主机分配的是原序列号和原id并相应地更新变量分配标志。也就是说,该重新接入的节点的id还是原id,不需要主机重新分配id。由此,可以避免同一节点在总线多次断线再连接的过程中出现地址多次变更的问题。
68.在另一实施中,当主机节点退出时,主机节点会把硬件总线释放,总线变为高电平。那么总线其他节点可以根据硬件总线的电平状态竞争主机。因为总线其他节点都拥有相同的变量p的信息,当有新的节点申请id分配时,新的主机也可以根据p变量的数据接管id分配的工作。保证新分配的id不与之前已经存在的id不冲突。
69.参照图3和图10,在确定好主从机的情况下进行id分配,本实施例将以从机作为执行主体描述id分配的过程,本实施例can总线分配id的方法具体包括步骤s210-s260。
70.s210、通过竞争总线参与主机竞争且在非优胜下将本节点作为从机。
71.具体地,上述实施例中已详细描述了主从机竞争的过程,本实施例在此不再赘述。
72.s220、将本节点的序列号和id上传至所述can总线,并从所述can总线接收与存储其他节点的序列号和id,其中,所述序列号与id一一对应。
73.s230、向所述can总线发送id分配请求命令以请求主机分配id。
74.s240、接收所述can总线上所述主机通过id分配命令发送的分配给本节点的序列号和id,以及变量分配标志,并判断本节点的序列号与所述主机发送的序列号是否一致,其
中,所述变量分配标志用于记录id是否已分配。
75.s250、若一致,将所述主机分配的id作为本节点的id,并存储所述变量分配标志;
76.s260、若不一致,存储所述主机发送的序列号和id以及所述变量分配标志。
77.在一实施例中,本实施例由从机作为执行主体执行的can总线分配id的方法在上述主机的实施例中已详细描述,本实施例将着重描述主机的实施例中未描述的部分,即步骤s250和步骤s260,已描述的部分在此不再赘述。
78.在本实施例中,从机作为待分配节点向主机发送id分配请求命令,请求主机给从机分配id。主机节点分配好id后通过id分配命令发送到can总线上,待分配节点接收到id分配命令后,根据主机所分配的id进行更新存储,同时保存主机发送的变量分配标志。
79.具体地,主机分配好从机的id后,将分配好的id和与之对应的序列号一同上传到can总线中。从机接收由主机分配的id和序列号,将主机分配的id和序列号与从机自身的序列号进行对比,判断主机分配的id和序列号是否是分配给本从机节点的,如果序列号相同,则说明主机分配的id和序列号是分配给本从机节点的,那么则将本从机节点的原id改为主机分配的id,并与序列号一一对应存储;如果序列号不相同,则说明主机分配的id和序列号不是分配给本从机节点的,那么本从机节点只需要保存主机发送的id和序列号即可。此外,还需要保存主机发送的变量分配标志,该变量分配标志记录了本从机节点的id已成功分配,或者是该变量分配标志记录了其他从机节点的id已成功分配。籍此,本从机节点有了该变量分配标志后,若本从机节点由从机变为了主机,也可利用该变量分配标志接管id分配的工作,避免id冲突,避免id重新分配。
80.示例性地,主机分配的序列号和id为efg3846,id为08,本从机节点的序列号为id为efg3846,id为15,主机发送的序列号与本机的序列相同,均为efg3846,也即是说主机是分配给本从机节点的。那么从机则对应将原id为15修改为主机分配的id为08,再将id为08与序列号efg3846一一对应保存即可。同时还需保存主机发送的变量分配标志。
81.示例性地,主机分配的序列号和id为efg3850,id为08,本从机节点的序列号为id为efg3846,id为15,主机发送的序列号与本机的序列不同,也即是说主机不是分配给本从机节点的。那么从机则对应保存该id为efg3850,id为08即可。同时还需保存主机发送的变量分配标志。
82.在一实施例中,参照图9,主从机在正常通讯后,如果can总线上的一些从机超过预设时间阈值没有响应于主机的通讯,那么说明该从机退出了can总线,这部分从机即为掉线节点。对于掉线节点,主机将掉线节点的id置零并清除变量分配标志,以表明该掉线节点已从can总线退出,清除该掉线节点的id分配记录,然后再将该掉线节点掉线的信息同步给can总线上的其他从机节点,其他从机节点也同样作出相同的动作,清除该掉线节点的id分配记录,保证can总线上的每个节点都拥有相同的变量分配标志。
83.以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献