关于J1939的多帧传输,根据协议要求,在CM.RTS和CM.CTS的数据域会填上3Byte的PGN。
但是在CM.DT的数据传输过程中,只有第一字节表示多包的传输序列号,后面7个字节都是实际含义的数据。
现在项目中有2条报文(报文A和报文B)都超过8个Byte,需要用到多帧传输。且发送周期都是1000ms。
这种场合是不是只有1条报文(报文A)全部发送完成后,收到对方节点发送过来的CM.EndofMsgAck之后才能继续发送另一条报文(报文B)?
(※因为在发送报文A的过程中如果同时发送报文B,由于在TP.DT传送过程中ID都是一样,PGN号也没有,所以无法区分是哪条报文的数据)
有经验的朋友能帮忙解答一下么?谢谢!
感谢回答,也就是说如果是我自己的节点(节点1)与对方节点(节点2)存在2条多帧报文(报文A和报文B)需要周期发送时,必须等一条报文(报文A)收发处理完才能收发另外一条报文(报文B),对吧。
另外想问一个问题,如果我自己的节点(节点1)与对方节点2有1条多帧报文(报文X),以及另一个对方节点3有1条多帧报文(报文Y)需要周期发送,由于两个节点的地址不一样,所以多帧处理时,RTS/CTS的ID地址是不一样的,这种场合,报文X和报文Y还需要1条报文发送完成后才能处理另一条么?还是可以交错进行处理?
这个问题我们没遇到过,如一个CPS要连接多个BMS的话,我们是用多个进程解决的,所以不会出现你描述的情况
石玉兄,你好。感谢你之前的解答。
我这里还有一个困惑,之前看协议这里有一块一直不是太明白,PF<240,PS代表目标地址;PF>=240,PS代表GE扩展。那么PF>=240的时候,还有没有目标地址这个概念?例如0x1810F456,这里10是PF,F4是目标地址,56是源地址。如果PF在240~255范围内,则PS=GE扩展。那么问题来了,对于PF在240~255范围内的Message,这样的Message是否还有目标地址?是否只能全局发送?例如在多帧传输时不能使用RTS/CTS进行多帧数据传送,必须使用BAM进行发送?
附图是网上找到的一个多帧收发的参考,从图里看,多帧传输的PGN是00FEEB,但是发送的CAN ID里面是有目标地址的0xF1。
能否帮忙解惑一下,万分感谢!