【 在 befriendly (天道酬勤) 的大作中提到: 】
: 我们要做一个车身CAN网络.
: 根据各节点的系统功能和信号的传送接收,以及信号的特征,我写了个协议草纲给老师。
: 我觉得应该按字节来定义才对,不管信号是模拟的或是数字的。要是数字的,这样一个字节便可以定义256个开关信号,而且也合理。我老师非说按位定义,然后再安字节来读取,我觉得想不通。
: ...................
用惯了按位定义,突然看到你的提问,一时语塞。思索了一下,现在轿车上一般按位定义的,原因可能如下:
按字节定义,一个字节可以表示256个状态,相当于128个I/O量;而按位定义,只有8个I/O量;按字节定义看来可以表示更多内容,但有一点非常重要,就是CAN的实时性,那128个I/O量不是一次发送就能搞定的,一次发送只能表示一个I/O状态,而CAN节点一般是定时发送,你要发128次,才能发完所有状态,这样时间滞后。
另一个原因是信号状态混乱,发送解算比较复杂。试想接受节点收到一个字节,它要挨个比较,确定收到字节的数属于哪一个I/0区段,然后再处理,效率比较低,而且容易出错。
而按位定义,只要测试该位状态即可。
虽然没有按字节定义的I/O,但有按2位、3位定义的,最多看过按4位定义的,但不论按几位定义,都只是表示一个变量,该变量有一个标准术语叫信号SIGNAL。比如按4位定义,可以表示该信号的16个状态。一个CAN帧也就是MESSAGE是由一个个信号组成的。
采用这种方式的另一个原因可能是简单,容易理解,便于交流(这很重要,因为控制器通常是由不同供应商设计的,误解会产生非常多的BUG)
另:J1939是在卡车上用的,轿车上是不会使用的,轿车有自己的一套。
--
FROM 61.190.108.*