Main Content

多路复用信号

通过多路复用,可以在 CAN 报文数据中的一个信号位置表示多个信号。一个多路复用报文可以有三种类型的信号:

  • 标准信号 - 此类型的信号始终处于活动状态。您可以创建一个或多个标准信号。

  • 多路选择器信号 - 也称为模式信号,它始终处于活动状态,其值确定哪些复用信号在报文数据中当前处于活动状态。对每条报文只能创建一个多路选择器信号。

  • 复用信号 - 当此类型信号的多路复用值与多路选择器信号的值匹配时,此类型信号处于活动状态。您可以在一条报文中创建一个或多个复用信号。

多路复用仅适用于其报文定义已包含多路复用信号信息的 CAN 数据库。以下示例说明如何使用专门为多路复用构造的数据库访问不同的多路复用信号。该数据库有一条具有下列信号的报文:

  • SigA - 一个多路复用值为 0 的复用信号。

  • SigB - 一个多路复用值为 1 的复用信号。

  • MuxSig - 一个多路选择器信号,其值确定上述两个复用信号中的哪一个在报文中处于活动状态。

例如,

  1. 创建一个 CAN 数据库。

    d = canDatabase('Mux.dbc')

    注意

    这是为创建多路复用报文而构造的一个示例数据库。要使用此示例进行尝试,请使用您自己的数据库。

  2. 创建一条 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
  3. 要显示信号,请键入:

    m.Signals
    
    ans = 
    
          SigB: 0
          SigA: 0
        MuxSig: 0

    MuxSig 是多路选择器信号,其值确定两个复用信号中的哪一个在报文中处于活动状态。SigASigB 是复用信号,如果其多路复用值与 MuxSig 匹配,则这些信号在报文中处于活动状态。在显示的示例中,SigA 处于活动状态,因为其当前多路复用值 0MuxSig 的值 (0) 匹配。

  4. 如果要使 SigB 处于活动状态,请将 MuxSig 的值更改为 1

    m.Signals.MuxSig = 1

    要显示信号,请键入:

    m.Signals
    
    ans = 
    
          SigB: 0
          SigA: 0
        MuxSig: 1

    SigB 现在处于活动状态,因为其多路复用值 1MuxSig 的当前值 (1) 匹配。

  5. MuxSig 的值更改为 2

    m.Signals.MuxSig = 2

    此处,两个复用信号均未处于活动状态,因为 MuxSig 的当前值与 SigASigB 的多路复用值都不匹配。

      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 函数。

相关主题