• AUTOSAR LIN: LDF(LIN Description File)文件解析


    LDF文件示例

    LIN_description_file "lin_example.ldf"
    { 
        LIN_protocol_version = "2.0";
        LIN_language_version = "2.0";
        
        nodes {
            master: MasterNode;
            slaves: SlaveNode1, SlaveNode2;
        };
    
        signals {
            Signal1:  MasterNode, SlaveNode1;
            Signal2:  MasterNode, SlaveNode2;
        };
        
        frames {
            frame Frame1: 64  MasterNode
            {
                Signal1, 8, Signal2, 8;
            };
        };
    
        schedule_table NormalTable
        {
            delay 5 ms;
            frame Frame1;
        };
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    详细解释

    LIN_description_file “lin_example.ldf”:定义了LDF文件的名称。
    LIN_protocol_version = “2.0” 和 LIN_language_version = “2.0”:定义了LIN协议和语言的版本。
    nodes:定义了网络中的主节点和从节点。在这个例子中,有一个主节点(MasterNode)和两个从节点(SlaveNode1和SlaveNode2)。
    signals:定义了网络中的信号。在这个例子中,有两个信号(Signal1和Signal2),并指定了每个信号的发送者和接收者。
    frames:定义了网络中的报文帧。在这个例子中,有一个报文帧(Frame1),由主节点发送,包含了两个信号(Signal1和Signal2),每个信号的长度都是8位。
    schedule_table:定义了一个调度表,规定了报文帧的发送时间。在这个例子中,每5毫秒发送一次Frame1。

    文件头(Header)

    文件头(Header)部分包含了一些关键字和信息,用于描述LIN网络的基本属性和配置。
    示例

    VERSION "1.0"
    DATE "2022-01-01"
    MANUFACTURER "ABC Corp"
    LIN_speed 9600
    LIN_protocol_version "2.1"
    LANGUAGE "English"
    BAUD_RATE 19200
    CHANNEL 1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    常用的关键字

    1. VERSION:指定LDF文件的版本号。 格式为VERSION “<版本号>”。 版本号可以是任意字符串,用于标识LDF文件的版本信息。 例如:VERSION “1.0”。
    2. DATE:指定LDF文件的创建或修改日期。 格式为DATE “<日期>”。 日期的格式可以是任意字符串,一般按照特定的日期格式(如"YYYY-MM-DD")进行指定。 例如:DATE “2022-01-01”。
    3. MANUFACTURER:指定LDF文件的制造商或创建者。 格式为MANUFACTURER “<制造商名称>”。 制造商名称可以是任意字符串,用于标识LDF文件的制造商或创建者。 例如:MANUFACTURER “ABC Corp”。
    4. LIN_speed:指定LIN网络的通信速率。 格式为LIN_speed <速率>。 速率可以是整数或浮点数,表示数据传输的速率,单位为kbps(千比特每秒)。 例如:LIN_speed 9600。
    5. LIN_protocol_version:指定LIN协议的版本号。 格式为LIN_protocol_version “<版本号>”。 版本号可以是任意字符串,用于标识LIN协议的版本信息。 例如:LIN_protocol_version
      “2.1”。
    6. LANGUAGE:指定LDF文件中使用的语言。 格式为LANGUAGE “<语言名称>”。 语言名称可以是任意字符串,用于标识LDF文件中使用的语言。 例如:LANGUAGE “English”。
    7. BAUD_RATE:指定LIN网络的波特率。 格式为BAUD_RATE <波特率>。 波特率可以是整数或浮点数,表示数据传输的速率,单位为bps(比特每秒)。 例如:BAUD_RATE 19200。
    8. CHANNEL:指定LIN网络的通道号。 格式为CHANNEL <通道号>。 通道号可以是整数,表示LIN网络所连接的物理通道。 例如:CHANNEL 1。

    节点(node)

    节点是指LIN网络中的一个参与通信的实体,可以是主节点(Master)或从节点(Slave)。

    Node
    {
        NAD = 1;
        Name = "Master";
        Protocol_Version = "2.2";
        Language = "C";
        LIN_Product_ID = "12345";
        Supplier = "ABC Company";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在上述例子中,节点的地址为1,名称为"Master",使用的LIN协议版本为2.2,使用的语言为C,产品ID为"12345",供应商为"ABC Company"。
    常用的关键字

    • NAD(Node Address):
      描述:节点地址,用于唯一标识节点。
      格式:NAD =
      ;
      示例:NAD = 1;
    • Name:
      描述:节点名称,用于标识节点的可读名称。
      格式: Name = "";
      示例:Name = “Master”;
    • Protocol_Version:
      描述:LIN协议版本,指示节点所使用的LIN协议版本。
      格式:Protocol_Version = "";
      示例:Protocol_Version = “2.2”;
    • Language:
      描述:节点所使用的语言,如C语言、C++等。
      格式: Language = "";
      示例:Language = “C”;
    • LIN_Product_ID:
      描述:节点的产品ID,用于标识节点的具体型号。
      格式:LIN_Product_ID = "";
      示例:LIN_Product_ID = “12345”;
    • Supplier:
      描述:节点的供应商信息。
      格式:Supplier = "";
      示例:Supplier = “ABC Company”;

    帧(frame)

    帧(Frame)用于描述在LIN网络中进行通信的消息,包括消息的ID、长度、发送节点和接收节点等信息,它是LIN网络进行通信的消息单元。

    Frame
    {
        Frame_ID = 1;
        Name = "Data_Frame";
        Length = 8;
        Publisher = 1;
        Subscribers = (2, 3);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在上述示例中,帧的ID为1,名称为"Data_Frame",长度为8字节,由节点1发送,被节点2和节点3接收。
    常用的关键字

    • Frame_ID:
      描述:帧的ID,用于唯一标识帧。
      格式:Frame_ID = ;
      示例:Frame_ID = 1;
    • Name:
      描述:帧的名称,用于标识帧的可读名称。
      格式:Name = "";
      示例:Name = “Data_Frame”;
    • Length:
      描述:帧的长度,指示帧中包含的数据字节数。
      格式:Length = ;
      示例:Length = 8;
    • Publisher:
      描述:帧的发送节点,指示发送该帧的节点。
      格式:Publisher = ;
      示例:Publisher = 1;
    • Subscribers:
      描述:帧的接收节点,指示接收该帧的节点列表。
      格式:Subscribers = (, , ...);
      示例:Subscribers = (2, 3);

    信号(signal)

    信号用于描述在帧中传输的数据信息,包括信号的名称、起始位、长度、数据类型、发送节点和接收节点等信息。
    每个信号都有一个唯一的名称,一个大小(以位为单位),以及一个或多个发送者或接收者。

    Signal
    {
        Name = "Temperature";
        Start_Bit = 16;
        Length = 8;
        Byte_Order = "Motorola";
        Value_Type = "Integer";
        Factor = 0.1;
        Offset = -40;
        Publisher = 1;
        Subscribers = (2, 3);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在上述示例中,信号的名称为"Temperature",起始位为16,长度为8位,字节顺序为Motorola,数据类型为整数,缩放因子为0.1,偏移量为-40,由节点1发送,被节点2和节点3接收。
    常用的关键字

    • Name:
      描述:信号的名称,用于标识信号的可读名称。
      格式:Name = "";
      示例:Name = “Temperature”;
    • Start_Bit:
      描述:信号的起始位,指示信号在帧中的起始位置。
      格式:Start_Bit = ;
      示例:Start_Bit = 16;
    • Length:
      描述:信号的长度,指示信号占用的位数。
      格式:Length = ;
      示例:Length = 8;
    • Byte_Order:
      描述:信号的字节顺序,指示信号在字节中的排列顺序。
      格式:Byte_Order = ;
      示例:Byte_Order = “Motorola”;
    • Value_Type:
      描述:信号的数据类型,指示信号的值的类型,如整数、浮点数等。
      格式:Value_Type = "";
      示例:Value_Type = “Integer”;
    • Factor:
      描述:信号的缩放因子,用于将原始值转换为物理值。
      格式:Factor = `;
      示例:Factor = 0.1;
    • Offset:
      描述:信号的偏移量,用于将原始值转换为物理值。
      格式:Offset = ;
      示例:Offset = -40;
    • Publisher:
      描述:信号的发送节点,指示发送该信号的节点。
      格式:Publisher = ;
      示例:Publisher = 1;
    • Subscribers:
      描述:信号的接收节点,指示接收该信号的节点列表。
      格式:Subscribers = (, , ...);
      示例:Subscribers = (2, 3);

    从节点属性定义

    从节点属性用于描述和配置LIN网络中从节点的属性和功能。
    从节点属性包括了从节点的标识、名称、支持的功能以及其他相关参数。它提供了从节点的详细信息,使得主节点和其他从节点可以正确地与之通信和交互。

    Node_attributes {
        IP {
            LIN_protocol = "2.1";
            configured_NAD = 0x68;
            product_id = 
                0x2,
                0x1,
                0x1;
            response_error = IPErrorSts;
            P2_min = 50 ms;
            ST_min = 0 ms;
            N_As_timeout = 500 ms;
            N_Cr_timeout = 1000 ms;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    常用的关键字

    • NAD:
      描述:NAD关键字用于指定从节点的当前地址(Node Address)。
      格式:NAD =
      ;
      示例:NAD = 0x6A;
    • RESPONSE_ERROR:
      描述:RESPONSE_ERROR关键字用于指定从节点的响应错误(Response Error)信号。
      格式:RESPONSE_ERROR = ;
      示例:RESPONSE_ERROR = IPErrorSts;
    • SUPPORT:
      描述:用于定义从节点支持的功能。supported_function是从节点支持的功能的标识,可以是一个整数或字符串。
      格式:SUPPORT =
      示例:
    • SLEEP:
      描述:用于定义从节点的睡眠时间(Sleep Time)。sleep_time是睡眠时间的数值,可以是整数或浮点数,单位可以是毫秒(ms)或微秒(us)。
      格式:SLEEP =
      使用方法:
    • configured_NAD
      描述:用于定义从节点的地址(Node Address)。node_address是从节点的地址,通常是一个整数。
      格式:configured_NAD = <地址>;
      示例:configured_NAD = 0x68;
    • product_id:该关键字用于指定从节点的产品ID。
      描述:指定从节点的产品ID,通常由供应商ID、功能ID和可变ID组成。
      格式:product_id = <供应商ID>, <功能ID>, <可变ID>;
      示例:product_id = 0x2, 0x1, 0x1;
    • response_error:该关键字用于指定从节点的响应错误(Response Error)信号。
      描述:指定从节点的响应错误信号。
      格式:response_error = <错误信号>;
      示例:response_error = IPErrorSts;
    • P2_min:该关键字用于指定从节点的P2最小时间(P2 Min Time)。
      描述:指定从节点的P2最小时间,即从节点等待主节点发送下一个帧的最小时间。
      格式:P2_min = <时间>;
      示例:P2_min = 50 ms;
    • ST_min:该关键字用于指定从节点的ST最小时间(ST Min Time)。
      描述:指定从节点的ST最小时间,即从节点等待主节点发送开始诊断帧的最小时间。
      格式:ST_min = <时间>;
      示例:ST_min = 0 ms;
    • N_As_timeout:该关键字用于指定从节点的N_As超时时间(N_As Timeout)。
      描述:指定从节点的N_As超时时间,即从节点等待主节点发送响应帧的超时时间。
      格式:N_As_timeout = <时间>;
      示例:N_As_timeout = 500 ms;
    • N_Cr_timeout:该关键字用于指定从节点的N_Cr超时时间(N_Cr Timeout)。
      描述:指定从节点的N_Cr超时时间,即从节点等待主节点发送下一个帧的超时时间。
      格式:N_Cr_timeout = <时间>;
      示例:N_Cr_timeout = 1000 ms;

    调度表 (schedule table)

    调度表用于定义和配置LIN网络中的消息发送和接收的时间表。每个调度表都有一个唯一的名称,以及一个或多个帧的序列。
    调度表是一个按照时间顺序排列的消息发送和接收的列表。它定义了每个节点在特定时间点发送或接收特定消息的规则和顺序。调度表中的每个条目都包含了消息的ID、周期性发送或接收的时间间隔、延迟时间以及其他相关参数。

    TABLE
    {
        ENTRY
        {
            CHANNEL = 1;
            TRANSMIT
            {
                ID = 0x01;
                CYCLE = 10ms;
                DELAY = 2ms;
            }
        }
        
        ENTRY
        {
            CHANNEL = 2;
            RECEIVE
            {
                ID = 0x02;
                CYCLE = 20ms;
                DELAY = 5ms;
            }
        }
        
        // 其他调度表条目...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    在这个示例中,调度表中有两个条目。第一个条目定义了在通道1上以10ms的周期性发送ID为0x01的消息,延迟2ms。第二个条目定义了在通道2上以20ms的周期性接收ID为0x02的消息,延迟5ms。
    常用的关键字

    • SCHEDULE_TABLE

      • 描述:用于定义LIN通信中的调度表。
      • 格式:SCHEDULE_TABLE { = ; }
      • 示例:SCHEDULE_TABLE MyScheduleTable { Event1 = 5ms; Event2 = 10ms; }
    • SCHEDULABLE_EVENT

      • 描述:用于定义调度表中的可调度事件。
      • 格式:SCHEDULABLE_EVENT { ; }
      • 示例:SCHEDULABLE_EVENT Event1 { Frame1; }
    • EVENT_TRIGGERED_FRAME

      • 描述:用于定义一个基于事件触发的帧。
      • 格式:EVENT_TRIGGERED_FRAME { ; }
      • 示例:EVENT_TRIGGERED_FRAME Frame1 { Pdu1; }
    • SPORADIC_FRAME

      • 描述:用于定义一个基于时间间隔的帧。
      • 格式:SPORADIC_FRAME { ; ; ; }
      • 示例:SPORADIC_FRAME Frame1 { Pdu1; 10ms; 100ms; }
    • DIAGNOSTIC_FRAME

      • 描述:用于定义一个诊断帧。
      • 格式:DIAGNOSTIC_FRAME { ; ; }
      • 示例:DIAGNOSTIC_FRAME Frame1 { RequestPdu1; ResponsePdu1; }
    • SCHEDULE_ENTRY

      • 描述:用于定义调度表中的一个条目。
      • 格式:SCHEDULE_ENTRY { ; ; }
      • 示例:SCHEDULE_ENTRY Entry1 { Frame1; 5ms; }
    • ENTRY:

    • 描述:定义一个调度表条目。

    • 格式:ENTRY { = ; { = ; CYCLE = ; DELAY = ; } }

    • 示例: ENTRY { CHANNEL = 1; TRANSMIT { ID = 0x01; CYCLE = 10ms; DELAY = 2ms; } }

    • CHANNEL:

      • 描述:定义调度表条目的通道号。
      • 格式:CHANNEL = ;
      • 示例:CHANNEL = 1;
    • TRANSMIT:

      • 描述:定义调度表条目的传输类型为发送。
      • 格式:TRANSMIT { = ; CYCLE = ; DELAY = ; }
      • 示例: TRANSMIT { ID = 0x01; CYCLE = 10ms; DELAY = 2ms; }
    • RECEIVE:

      • 描述:定义调度表条目的传输类型为接收。
      • 格式:RECEIVE { = ; CYCLE = ; DELAY = ; }
      • 示例: RECEIVE { ID = 0x02; CYCLE = 20ms; DELAY = 5ms; }

    信号编码定义

    主要描述了每个信号的名称、大小(位数)、偏移(在帧中的位置)、初始值、是否有错误检测以及物理值的转换方法等信息。
    示例

    Signal_encoding_types{
        KeyInSts_Encoding{//信号名称加上_Encoding
    	physical_value, 0, 254, 1.417, 	0, "VehicleSpeed";
    //类型,计算机最小值,计算机最大值,精度(factor),偏差(offset),单位(Unit),没有可以不加
            logical_value, 0, "Close";  //表示类型是coding:logical_value,序号0,对应的是矩阵十六进制数字,coding值=Close
            logical_value, 1, "Open";  //表示类型是coding:logical_value,序号1,对应的是矩阵十六进制数字,coding值=Open
    	} 
       HighBeamCmdSts_Encoding{
            physical_value, 0, 254, 0.5, -40,"AmbientTemperature";
    //类型,计算机最小值,计算机最大值,精度(factor),偏差(offset),单位(Unit):AmbientTemperature,没有可以不加
            logical_value, 0, "No"; 
            logical_value, 1, "Yes"; 
        }
       LeftTurnLampSts_Encoding{
    		physical_value, 0, 4, 1, 0, "DashboardBrightness";
            logical_value, 0, "Sensitivity 1"; 
            logical_value, 1, "Sensitivity 2";
            logical_value, 2, "Sensitivity 3"; 
            logical_value, 3, "Sensitivity 4";
            logical_value, 4, "Sensitivity 5"; 
            logical_value, 5, "Not Used";  
            logical_value, 6, "Not Used"; 
            logical_value, 7, "Not Used"; 
            #logical_value, 5, "0x5~0x7,Not Used";  
    	} 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    常用关键字

    • physical_value:
      • 描述:定义信号的物理值范围和转换参数。
      • 格式:physical_value, , , , , "";
      • 示例: physical_value, 0, 254, 1.417, 0, “VehicleSpeed”;
    • logical_value:
      • 描述:定义信号的逻辑值和对应的编码值。
      • 格式:logical_value, , "";
      • 示例: logical_value, 0, “Close”; logical_value, 1, “Open”;
    • KeyInSts_Encoding:
      • 描述:定义一个信号编码类型的信号。
      • 格式:KeyInSts_Encoding {; ; }
      • 示例: KeyInSts_Encoding {physical_value, 0, 254, 1.417, 0, “VehicleSpeed”; logical_value, 0,
        “Close”; logical_value, 1, “Open”; }
    • HighBeamCmdSts_Encoding:
      • 描述:定义一个信号编码类型的信号。
      • 格式:HighBeamCmdSts_Encoding { ; ; }
      • 示例: HighBeamCmdSts_Encoding { physical_value, 0,254, 0.5, -40, “AmbientTemperature”; logical_value, 0, “No”;logical_value, 1, “Yes”; }
    • LeftTurnLampSts_Encoding:
      • 描述:定义一个信号编码类型的信号。
      • 格式:LeftTurnLampSts_Encoding { ; ; }
      • 示例: LeftTurnLampSts_Encoding { physical_value, 0,
        4, 1, 0, “DashboardBrightness”; logical_value, 0, “Sensitivity 1”;
        logical_value, 1, “Sensitivity 2”; logical_value, 2, “Sensitivity 3”;
        logical_value, 3, “Sensitivity 4”; logical_value, 4, “Sensitivity 5”;
        logical_value, 5, “Not Used”; logical_value, 6, “Not Used”;
        logical_value, 7, “Not Used”; }

    信号coding和信号名称映射

    LIN_NODE MyNode {
        ...
        signal_encoding {
            coding, "Open";
            signal_name, "DoorStatus";
        }
        ...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    定义了一个名为"DoorStatus"的信号,并将其编码方式设置为"Open"。这意味着当这个信号被发送时,它的值将使用"Open"进行编码。
    常用关键字

    • signal_encoding:

      • 描述:定义信号的编码方式和对应的信号名称。
      • 格式:signal_encoding { ; ; }
      • 示例: signal_encoding { coding, “Open”; signal_name, “DoorStatus”; }
    • coding:

      • 描述:定义信号的编码方式。
      • 格式:coding, ;
      • 示例: coding, “Open”;
    • signal_name:

      • 描述:定义信号的名称。
      • 格式:signal_name, "";
      • 示例: signal_name, “DoorStatus”;
    • KeyInSts_Encoding:

      • 描述:定义一个信号编码类型的信号。
      • 格式:KeyInSts_Encoding { ; ; }
      • 示例: KeyInSts_Encoding { coding, “Open”; signal_name, “DoorStatus”; }
    • HighBeamCmdSts_Encoding:

      • 描述:定义一个信号编码类型的信号。
      • 格式:HighBeamCmdSts_Encoding { ; ; }
      • 示例: HighBeamCmdSts_Encoding { coding, “Yes”;signal_name, “HighBeamStatus”; }
    • LeftTurnLampSts_Encoding:

      • 描述:定义一个信号编码类型的信号。
      • 格式:LeftTurnLampSts_Encoding { ;; }
      • 示例: LeftTurnLampSts_Encoding { coding, “Sensitivity 1”; signal_name, “TurnLampStatus”; }
  • 相关阅读:
    2023华为杯研究生数学建模D题思路代码分析
    Django-(3)
    前端Vue自定义得分构成水平柱形图组件 可用于系统专业门类得分评估分析
    基于Echarts实现可视化数据大屏高速综合管控大数据
    浏览器截图扩展增加快捷键
    个人电影网站web网页设计制作—— 影视公司5页 DIV+CSS制作 浮动布局
    去年十八,初识Java 2
    C++初阶--C++入门(2)
    状态管理容器Pinia
    token、cookie、session的对比以及Java实现
  • 原文地址:https://blog.csdn.net/galene/article/details/132586616