分享一个 CAN总线发送一个字符串(超过8字节的) 的方法

2019-12-10 18:18发布

本帖最后由 零妖 于 2018-7-13 14:06 编辑

根据CAN通讯协议的约束,一帧CAN报文可以发送8个以内的数据。

如果你的应用场合,需要发送一个字符串咋办?

很少有谁的通讯协议正好是8个字节的。

经过零妖实践,写了一个CAN发送字符串的子函数。

Snipaste_2018-07-13_13-57-38.jpg (146.41 KB, 下载次数: 0) 下载附件 2018-7-13 14:03 上传
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
30条回答
零妖
1楼-- · 2019-12-12 10:33
simplorer 发表于 2018-7-13 15:10
可以在CAN ID上做文章,比如加入数据包的总长度,分包编号等,直接统一的ID发送不可取,丢了包也不知道,而 ...

嗯,高明的想法!多亏大家指点,否则自己永远不知道自己的想法有多么无知。
零妖
2楼-- · 2019-12-12 14:19
针对各路高手提出的问题,我非常感谢,否则自己会掉坑!
目前感觉非常高效的解决办法是,在帧ID上做文章,长数据分包发送,可以确保主机收到的数据可靠性,而且有没有丢包也能知道,这个我再找更多的资料,实践一下。再次感谢高手。

说一下目前想用CAN解决的问题。
1,设计了一个简单的通讯协议,挂在总线上的设备只有一个是“主机”。
2,这个“主机”需要哪个设备的数据,会发送一个字符串“Read”给对应的ID。这个是遇到的实际问题中通信协议约定的,其实可以发送远程帧来解决的,不过没有那么用。
3,当所谓的“从机”收到这个“Read”后,就会回复一下,长度不定,比如是“12345CDDSSF234”这些字符。

我的想法比较简单,所以写了一个那样的子函数,用来发送字符串。


shangdawei
3楼-- · 2019-12-12 19:09
 精彩回答 2  元偷偷看……
零妖
4楼-- · 2019-12-12 21:50
shangdawei 发表于 2018-7-13 19:21
可以参考 ISO15765-2 网络层实现

多谢兄弟提供的宝贵资料。非常感谢。
楼上很多兄弟已经指出来其中的不足了,也查阅了很多资料。
你这份资料参考价值巨大。
从我这个应用场合来说,丢帧是最可怕的,要参考周立功的学习资料解决一下。
yick
5楼-- · 2019-12-12 23:35
shangdawei 发表于 2018-7-13 19:21
可以参考 ISO15765-2 网络层实现



好详细的资料
StoneSun
6楼-- · 2019-12-13 03:07
TP是干啥的呢?多包传输,J1939都能干。

一周热门 更多>