想问下CAN总线即时通讯时每帧数据前后是否需要添加帧头和校验位呢? 点击:2275 | 回复:7



Invalidate_nj

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 6回
  • 年度积分:0
  • 历史总积分:18
  • 注册:2007年1月19日
发表于:2008-01-08 22:20:00
楼主
如题,项目需要通过CAN总线发送数据包。我看232串口通讯程序好像需要加帧头和校验位;但不知道CAN通讯程序是否也需要加帧头(我想应该要加吧)和校验位呢?不确定要不要加校验位是因为好像CAN总线硬件本身有个冗余校验吧? 
我是新手,希望有经验的朋友能给讲讲,网上没有找到需要的,谢谢! 



ys.gong

  • 精华:3帖
  • 求助:0帖
  • 帖子:18帖 | 118回
  • 年度积分:0
  • 历史总积分:290
  • 注册:2007年7月09日
发表于:2008-01-09 21:28:00
1楼

   串行通信中,一帧数据由多个字节组成,CANBUS的帧结构有完整的定义,它包含帧头\数据\帧尾三部分,帧头含ID,帧尾含CRC校验,因此用户数据段无需考虑帧头和校验,若觉得CRC校验还不满足您的可靠性要求,可在ID中增加其它校验算法.

Invalidate_nj

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 6回
  • 年度积分:0
  • 历史总积分:18
  • 注册:2007年1月19日
发表于:2008-01-09 22:22:00
2楼
下面引用由ys.gong在 2008-1-9 21:28:00 发表的内容:
  <br>&nbsp;&nbsp;&nbsp;串行通信中,一帧数据由多个字节组成,CANBUS的帧结构有完整的定义,它包含帧头\数据\…
--------------------------------------------------------------------------------------------
谢谢楼上的朋友,,不过还有点不明白:
你的意思是我的上位机通过CAN总线发送数据时,发送程序只需要实时的往发送缓冲区丢8个字节的数据包就可以了?不用发送用户层自定义的校验位了(比如各个数据的异或操作)?也不用发送帧头?那如果不发送帧头的话,接收方怎么知道开始接收数据以及什么时候停止接收数据呢?总需要添加个数据帧尾之类的标识位用来提醒接收方接收到的是另一帧数据而不是同一帧数据吧?难道这些都不用在发送程序中定义吗?

Invalidate_nj

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 6回
  • 年度积分:0
  • 历史总积分:18
  • 注册:2007年1月19日
发表于:2008-01-09 22:32:00
3楼
串行通信中,一帧数据由多个字节组成,CANBUS的帧结构有完整的定义,它包含帧头\数据\帧尾三部分,帧头含ID,帧尾含CRC校验,因此用户数据段无需考虑帧头和校验,若觉得CRC校验还不满足您的可靠性要求,可在ID中增加其它校验算法.
-------
谢谢你的留言,不过我还有点不明白:
你的意思是我的上位机通过CAN总线发送数据时,发送程序只需要实时的往发送缓冲区丢8个字节的数据包就可以了?不用发送用户层自定义的校验位了(比如各个数据的异或操作,我在用422通讯时是这么定义的校验位)?也不用发送帧头(比如232,可以用个'#'字符标识帧头)?那如果不发送帧头的话,接收方怎么知道开始接收数据以及什么时候停止接收数据呢?总需要添加个数据帧尾之类的标识位(比如232时用‘&’字符作为帧尾结束符)用来提醒接收方接收到的是另一帧数据而不是同一帧数据吧?难道这些都不用在发送程序中定义吗?没有用过CAN通讯,不怎么清楚,不知道您能不能给讲讲呢,
再次感谢!

ys.gong

  • 精华:3帖
  • 求助:0帖
  • 帖子:18帖 | 118回
  • 年度积分:0
  • 历史总积分:290
  • 注册:2007年7月09日
发表于:2008-01-09 22:44:00
4楼

  RS232/RS422仅是一种物理接口,CANBUS是一种物理接口的同时,还包括半层数据链路协议(如帧头\帧尾\校验\标识位..),许多属于数据链路层要做的事在CANBUS中不必做了.CANBUS与RS232/RS485/RS422有很大的不同,建议找本关于CANBUS书看看很容易弄明白.

Invalidate_nj

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 6回
  • 年度积分:0
  • 历史总积分:18
  • 注册:2007年1月19日
发表于:2008-01-09 23:11:00
5楼
下面引用由ys.gong在 2008-1-9 22:44:00 发表的内容:
  <br>  RS232/RS422仅是一种物理接口,CANBUS是一种物理接口的同时,还包括半层数据链路协议(如帧头…
--------------------------------------------------------------------------------------------
我找了些关于CAN总线的书,但上面大都是基于电路设计、各种寄存器设置等等的,而我需要做的是上层的软件设计,应用层的,需要编写数据帧的相关协议,看了半天书,还是没有明白到底怎么设计8个待发送字节的形式。不知道ys.gong能否举个例子呢?比如说我要多次发送100和200这两个数据。
我如果这样:
我将100和200这两个int的值直接丢到8个字节的缓冲区里,
那接收方接收到的数据肯定就是
100 200  100 200  。。。 
了,那接收方怎么知道发送方发的每帧数据是什么呢?
接收方的程序怎么确定 100 200 就是一帧呢?怎么分开帧与帧之间的数据呢?
不知道我有没有说清楚,谢谢ys.gong了

ys.gong

  • 精华:3帖
  • 求助:0帖
  • 帖子:18帖 | 118回
  • 年度积分:0
  • 历史总积分:290
  • 注册:2007年7月09日
发表于:2008-01-09 23:27:00
6楼
 
  请参考<< 科威自控推出一种支持CANBUS总线的PLC>>主题,我在与台湾jps.rd先生讨论时,有您需要了解的内容.

CHENNET

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 105回
  • 年度积分:0
  • 历史总积分:269
  • 注册:2004年4月20日
发表于:2008-02-18 23:11:00
7楼
芯片自动搞定,不需要编程者操心。

热门招聘
相关主题

官方公众号

智造工程师