CAN总线的标识符如何生成?? 点击:5582 | 回复:10



maxmaxmax

    
  • 精华:1帖
  • 求助:0帖
  • 帖子:1帖 | 0回
  • 年度积分:0
  • 历史总积分:8
  • 注册:2004年2月16日
发表于:2004-04-06 22:58:00
楼主
小弟现在正忙于作毕业设计,是关于CAN的,书上说CAN通信不用寻址,那么每个节点的ID怎么制定??标识符用来决定接收信息的节点,那么这些标识符怎么生成的\? ,他们又是如何确定哪个节点是所需要去的 目标?? <BR>敬请各位高手给予解答,谢谢!!![em24]



清风笑

  • 精华:1帖
  • 求助:0帖
  • 帖子:4帖 | 99回
  • 年度积分:0
  • 历史总积分:1294
  • 注册:2001年11月08日
发表于:2004-04-09 16:48:00
1楼
CAN只规定了底层的数据链路层,还需要自己规定应用层协议,即通讯协议。做得大一些,可以考虑DeviceNET 或 CANopen 协议。

清风笑

  • 精华:1帖
  • 求助:0帖
  • 帖子:4帖 | 99回
  • 年度积分:0
  • 历史总积分:1294
  • 注册:2001年11月08日
发表于:2004-04-09 16:48:00
2楼
CAN只规定了底层的数据链路层,还需要自己规定应用层协议,即通讯协议。做得大一些,可以考虑DeviceNET 或 CANopen 协议。

划一

  • 精华:1帖
  • 求助:0帖
  • 帖子:4帖 | 16回
  • 年度积分:0
  • 历史总积分:33
  • 注册:2004年2月12日
发表于:2004-04-10 21:37:00
3楼
我也正做毕业设计,也考虑过这个问题 我的CAN网络有20个节点(其中一个为工控机,其余19个节点是相似的,均接到整流装置),每个节点有4种数据要处理,一为模数转换后发送到工控机的直流电流值;二为整流变压器的档位信号,也是要发送到工控机;三为接收工控机发过来的整流触发角的给定值,并通过RS-422总线发送到整流控制器;四是接收工控机发过来的变压器档位切换信号,并转发到档位切换模块。我想我可以自己定义标识符,比如32位表识符里前11位用来区分优先级,中间十位的前五位作接收方的标识符,后五位作发送方的标识符,其余11位用来区分上述的四种数据。当一个节点接收到工控机发来的数据后,通过识别标识符的后11位,看数据应该转发到哪里。当工控机接收到整流节点的数据时,通过识别后16位来区分是哪个节点发过来的(16位里的前5位),是什么数据,是档位信号还是直流电流值信号。 这仅是小弟我的一些想法,也不知对不对,希望各位高手给个意见。

一叶漂

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 4回
  • 年度积分:0
  • 历史总积分:60
  • 注册:2002年12月24日
发表于:2004-04-10 23:20:00
4楼
CAN的协议规定,标准帧的标识符是11位,每个数据都有自己的标识符,优先级当然是数值小的优先级高,数据该到哪里,应该是根据接收节点的验收码和屏蔽码确定的

一叶漂

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 4回
  • 年度积分:0
  • 历史总积分:60
  • 注册:2002年12月24日
发表于:2004-04-10 23:20:00
5楼
CAN的协议规定,标准帧的标识符是11位,每个数据都有自己的标识符,优先级当然是数值小的优先级高,数据该到哪里,应该是根据接收节点的验收码和屏蔽码确定的

划一

  • 精华:1帖
  • 求助:0帖
  • 帖子:4帖 | 16回
  • 年度积分:0
  • 历史总积分:33
  • 注册:2004年2月12日
发表于:2004-04-11 10:25:00
6楼
这个知道,我的数据流是这样的:只许工控机和各个整流节点之间的数据传输,而不需要19个整流节点之间的数据传输,所以我打算把工控机的CAN节点的屏蔽码设为全1,也就是每个标识符设为验收无关,这样工控机可以接受总线上的任何数据(因为总线上的数据要么是工控机发出的,要么是发给工控机),等工控机收到数据之后,通过判别标识符来识别是哪个节点发来的,是什么样的数据(这也是在编程时自己规定的)

划一

  • 精华:1帖
  • 求助:0帖
  • 帖子:4帖 | 16回
  • 年度积分:0
  • 历史总积分:33
  • 注册:2004年2月12日
发表于:2004-04-11 10:25:00
7楼
这个知道,我的数据流是这样的:只许工控机和各个整流节点之间的数据传输,而不需要19个整流节点之间的数据传输,所以我打算把工控机的CAN节点的屏蔽码设为全1,也就是每个标识符设为验收无关,这样工控机可以接受总线上的任何数据(因为总线上的数据要么是工控机发出的,要么是发给工控机),等工控机收到数据之后,通过判别标识符来识别是哪个节点发来的,是什么样的数据(这也是在编程时自己规定的)

wkingw

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 13回
  • 年度积分:0
  • 历史总积分:52
  • 注册:2004年4月12日
发表于:2004-04-13 19:08:00
8楼
高明!can协议里没有表示自己地址的地方,重来没想到这样表示自己的地址。huayi0796,你试验过没?没问题吧?

wkingw

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 13回
  • 年度积分:0
  • 历史总积分:52
  • 注册:2004年4月12日
发表于:2004-04-16 13:05:00
9楼
TO HUAYI0796 不过优先级和对方地址不是你想自己定义就自己定义的。你弄懂报文滤波没?要是另19个节点要互相通信的话,你的设想就有点麻烦了。

迂府

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 7回
  • 年度积分:0
  • 历史总积分:10
  • 注册:2004年4月29日
发表于:2004-04-29 15:24:00
10楼
关于huayi0796 我也想实现一台站台设备与多台区间台设备之间的CAN总线通信,这就须要车站设备能接收来自每个区间设备的信号,每个区间设备之间必须通过ID码的优先测级进行总线竞争,区间设备最多不大于40台,只须要用到11位ID里面的6位,车站设备将其屏蔽,是否就能实现区间设备优先级最高的首先发送,而车站设备能接收任一台发送的区间设备信号?我用的F040,你现在项目进行如何? 关于WKINGW: 是否有关于报文滤波方面的资料,最好是关于F040的,谢谢!

热门招聘
相关主题

官方公众号

智造工程师