多路复用信号
通过多路复用,可以在 CAN 报文数据中的一个信号位置表示多个信号。一个多路复用报文可以有三种类型的信号:
标准信号 - 此类型的信号始终处于活动状态。您可以创建一个或多个标准信号。
多路选择器信号 - 也称为模式信号,它始终处于活动状态,其值确定哪些复用信号在报文数据中当前处于活动状态。对每条报文只能创建一个多路选择器信号。
复用信号 - 当此类型信号的多路复用值与多路选择器信号的值匹配时,此类型信号处于活动状态。您可以在一条报文中创建一个或多个复用信号。
多路复用仅适用于其报文定义已包含多路复用信号信息的 CAN 数据库。以下示例说明如何使用专门为多路复用构造的数据库访问不同的多路复用信号。该数据库有一条具有下列信号的报文:
SigA
- 一个多路复用值为0
的复用信号。SigB
- 一个多路复用值为1
的复用信号。MuxSig
- 一个多路选择器信号,其值确定上述两个复用信号中的哪一个在报文中处于活动状态。
例如,
创建一个 CAN 数据库。
d = canDatabase('Mux.dbc')
注意
这是为创建多路复用报文而构造的一个示例数据库。要使用此示例进行尝试,请使用您自己的数据库。
创建一条 CAN 报文。
m = canMessage(d,'Msg')
m = can.Message handle Package: can Properties: ID: 250 Extended: 0 Name: 'Msg' Database: [1x1 can.Database] Error: 0 Remote: 0 Timestamp: 0 Data: [0 0 0 0 0 0 0 0] Signals: [1x1 struct] Methods, Events, Superclasses
要显示信号,请键入:
m.Signals
ans = SigB: 0 SigA: 0 MuxSig: 0
MuxSig
是多路选择器信号,其值确定两个复用信号中的哪一个在报文中处于活动状态。SigA
和SigB
是复用信号,如果其多路复用值与MuxSig
匹配,则这些信号在报文中处于活动状态。在显示的示例中,SigA
处于活动状态,因为其当前多路复用值0
与MuxSig
的值 (0
) 匹配。如果要使
SigB
处于活动状态,请将MuxSig
的值更改为1
。m.Signals.MuxSig = 1
要显示信号,请键入:
m.Signals
ans = SigB: 0 SigA: 0 MuxSig: 1
SigB
现在处于活动状态,因为其多路复用值1
与MuxSig
的当前值 (1
) 匹配。将
MuxSig
的值更改为2
。m.Signals.MuxSig = 2
此处,两个复用信号均未处于活动状态,因为
MuxSig
的当前值与SigA
或SigB
的多路复用值都不匹配。m.Signals
ans = SigB: 0 SigA: 0 MuxSig: 2
在使用复用信号值之前,请务必先检查多路选择器信号的值。
if (m.Signals.MuxSig == 0) % Feel free to use the value of SigA however is required. end
这可确保您不会使用无效值,因为工具箱不会阻止或保护对非活动复用信号的读取或写入。
注意
无论多路选择器信号的值如何,您都可以访问处于活动状态和非活动状态的复用信号。
有关创建报文的更多信息,请参阅 canMessage
函数。