Autosar-以太网是怎么运行的?(SoAd代码实现)

写在前面:
入行一段时间了,基于个人理解整理一些东西,如有错误,欢迎各位大佬评论区指正!!!


1.SoAd模块作用

基于以太网的通信已经成为终端与终端之间通信的主流,汽车作为新时代的智能终端,也逐渐将以太网引入车载通信中,成为车载通信重要一环。

众所周知,动态配置以及路由是以太网核心优势,即实时通过端与端之间建立链接,就可以进行通信。

Classical AUTOSAR使用C代码实现,因为C代码的静态特性,因此基于AUTOSAR架构一定遵循静态关系概念,比如Can通信,基于AUTOSAR的can通信需要在编译前做好所有的静态配置,确定ECU与ECU之间的通信关系,在运行时严格执行。传输的数据被认为与它需要往返的源和接收一样是预先确定的。

如何将以太网通信引入AUTOSAR架构中呢?这就需要SOAD模块发挥适配器作用了

Socket Adaptor模块旨在为TCPIP的动态配置通信概念与基于AUTOSAR的静态通信关系建立沟通的桥梁。

2.Socket Adaptor如何发挥适配器作用?

Soad的作用就是将AUTOSAR中基于回调的(Call-back Based)软件架构体系与TCP/IP世界中的基于套接字通信解耦处理。

3.SoAd与其他模块关系

  1. PDUR :PDUR给SOAD模块提供PDU路由功能。主要是针对需要大量自定义PDU的信号需求,比如Someip,需要PDUR将someip报文从LDCOM/COM模块与SOAD之间进行路由。
  2. UdpNm: UdpNm主要执行基于UDP报文的网络管理功能,因为UdpNm通过Soad模块的接口进行报文收发。
  3. Sd:Sd通过Soad模块接口进行服务发现报文的收发。Sd在进行服务发现处理之后,会对Soad中的Socket Connection以及Routing Group进行控制。
  4. Doip: Doip主要完成的是基于IP的诊断协议栈的诊断报文的处理。Doip会通过Soad的接口收发以太网诊断报文。

4.SoAd功能

Socket Adaptor从功能层面可以分为PDU接收,SocketConnection&Route管理,以及PDU发送三大功能。

4.1PDU Header处理

在Someip报文中,PDU头由8个字节组成,包括四个字节的SerivceID,Methodid,以及四个字节的实际PDU长度。该PDU Header由SoAd进行填充

如果PDU传输启用PDU Header选项(SoAdPduHeaderEnable 为真),在上层模块通过PDUR将PDU传送至SOAD后,SOAD模块需要在PDU数据之前插入配置的PDU头。

在协议栈实现中,需要在TcpIp_UdpTransmit()或TcpIp_TcpTransmit()真正将PDU传送至TCPIP模块前,在PDU前增加PDU头长度。

4.2SocketConnection

对于TCP/IP通信的抽象,SoAd定义了套接字连接。SoAd套接字连接指定本地套接字(即本地地址标识符和本地端口)和远程套接字(即远程IP地址和端口)之间的连接,以及连接参数,如传输协议、SoAd PDU报头的使用、缓冲区要求、连接设置、传输协议相关参数等。每个套接字连接都可以通过一个唯一的标识符(SoConId)进行标识。为同时支持多个通信合作伙伴,每个本地套接字,套接字具有相同连接参数的连接可以分组到套接字连接组。

  1. Socket操作有打开,关闭等操作。SoAd模块提供了SoAd_OpenSoCon,SoAd_CloseSoCon两个函数来进行操作。
  2. Open与Close是异步操作,在上层模块调用之后,需要保存Open或者Close操作,后面_MainFunction中通过SoAd_OpenSocket()函数真正打开或者关闭套接字。
  3. Open Socket是为了从TCPIP找到可用的套接字用于报文的发送与接收。
  4. Socket Open分为自动与手动两种方式。当Socket Connction所在的Group配置 SoAdSocketAutomaticSoConSetup 为TRUE 时为自动模式,否则是手动默模式。自动模式,在上电后Soad主动调用SoAd_SoCon_OpenSocketTCP() 函数为该 Socket Connction找到对应的套接字;手动模式,需要上层模块主动调用SoAd_OpenSoCon执行 Open操作。调
  5. 对于UDP SocketConnction 与TCP SocketConnection,Open操作会有所区别。
4.2.1Open Socket
  • TCP Open:对于 TCP 连接来说, open 之后还执行TcpIp_TcpConnect 或SoAd_Tcp
    Accepted。 
    前者是作为 client 时发起与服务器的 TCP 连接,后者是作为server接受来自于 client 的连接。
    ① TcpIp_TcpConnect 用于发起与服务器的 TCP 连接。调用该接口后,如果连接成功了, TcpIp 模块会调用 SoAd 的 SoAd_TcpConnected 回调函数通知 SoAd 该 TCP 连接建立成功了,此时 SoAd 需要将 socket 连接状态转换到 ONLINE 。(SoAd_SoCon_OpenSocketTcpClientGetAndConnect)


    ② 当 TcpIp 模块接收到一个连接请求后,就会调用 SoAd_TcpAccepted 回调函数通知到 SoAd 模块。此时 SoAd 需要从监听的 TcpIp socketId 对应 socke 连接组中选取一个 socket 连接来保存该连接(如果 SoAdSocketMsgAcceptanceFilterEnabled 为 TRUE 还需要调用 best match algorithm 选择 socket 连接),并且根据发起该连接请求的节点地址信息设置该 socket 连接的 remote address ,最后将状态转换到 ONLINE 。(SoAd_SoCon_OpenSocketTcpServerGetAndListen)

  • UDP Open:在执行完SoAd_OpenSocket()后,会TCPIP中找到对应的套接字,并把Socket Connection状态转换至ONLINE。

4.2.2Close Socket

close操作主要是关闭TcpIp的socket,并将状态转换到OFFLINE。关闭TcpIp流程如下:

TCP socket :

① 调用SoAd_SoCon_closeSocketTCP()关闭socket,并且关闭由SoAd_SoCon_CloseSocket()发起时, abort参数设置为调用SoAd_SoCon_CloseSocket()时传递的值,否则abort置为FALSE

② 如果TCP socket连接组所有的socket连接被关闭了,需要调用SoAd_SoCon_CloseSocketTcpListen 关闭Listen-Socket,并且关闭由SoAd_CloseSoCon()发起时,abort参数设置为调 用SoAd_CloseSoCon()时传递的值,否则abort置为FALSE 。

UDP socket:

① 如果socket连接不是socket连接组的成员(比如socket connection group Conifgurator container 只有一个 socket 连接) ,调用SoAd_SoCon_CloseSocketUdp()关闭 socket,并且关闭由SoAd_SoCon_CloseSocket()发起时,abort参数设置为调用SoAd_SoCon_CloseSocket()时传递的值,否则abort置为FALSE.

4.3Socket状态切换

socket 连接有三个状态: ONLINE 、 OFFLINE 、 RECONNECT ,其状态转换如下图所示。

4.4PDU发送

4.4.1TCP发送

  1. 上层通过PDUR路由PDU后,调用Soad_IfTransmit函数,将PDU交给Soad处理之后,再通过配置的传输层协议(UDP或者TCP)使用不同的TCPIP的接口。
  2. 在CP以太网架构中,每一条报文中的Payload部分以PDU 的形式传递至Soad中,每个PDU 与一个PduRoute绑定。每个PduRoute中可以建立多个PduRouteDest ,PduRouteDest将链接ScoketConnection或者SocketConnectionGroup。SocketConnection中将定义发送报文需要的远端ip地址与port。
  3. 当上层模块调用ScoketConnection发送PDU至Soad中,该PDU所属的PduRoue将遍历每一个PduRoute Dest,将IF-PDU通过每个PduRouteDest相关的socket连接进行发送。当一个PduRoute配置多个PduRouteDest或者一个PduRouteDest索引SocketConnectionGroup且该SocketConnectionGroup 中包含多个SocketConnection时,会开启 PDUfan-out功能。 即报文将向遍历的所有的SocketConnection中的对端ip发送。
4.4.2UDP发送

4.5PDU接收

函数调用:

### 回答1: AUTOSAR(Automotive Open System Architecture)是一种用于汽车电子系统开发的开放式软件架构标准,旨在提高汽车电子系统的可靠性、可重用性和可扩展性。 AUTOSAR SOAD(Service-Oriented Architecture Development)规范是AUTOSAR标准的一个组成部分,用于定义和管理汽车电子系统中的服务和通信。该规范基于面向服务的架构(SOA),通过将功能模块分解为独立的服务,实现了更高的灵活性和可重用性。 AUTOSAR SOAD规范主要包括以下几个方面的内容: 1. 服务定义:规范定义了汽车电子系统中各个服务的接口和功能。每个服务都有明确定义的输入和输出,并提供了规范的通信接口。 2. 服务发现与注册:规范提供了服务发现和注册的机制,以便不同的功能模块可以找到并使用已经注册的服务。这种机制有助于提高系统的灵活性和可扩展性。 3. 通信机制:规范定义了汽车电子系统中不同服务之间的通信机制,包括消息传递、远程过程调用等。这些通信机制保证了服务之间的可靠性和实时性。 4. 安全性与隐私保护:规范关注汽车电子系统中的安全性和隐私保护问题。通过定义安全策略和安全机制,规范确保了车载系统的安全性。 AUTOSAR SOAD规范通过提供标准化的服务和通信机制,使不同的汽车电子系统之间可以实现互操作性。它提供了一个统一的开发环境,使汽车制造商和供应商可以更加高效地开发和集成汽车电子系统。同时,该规范也促进了汽车电子系统的可重用性,减少了开发成本和时间。 ### 回答2: AUTOSAR是Automotive Open System Architecture的缩写,意为汽车开放式系统架构。AUTOSAR致力于建立汽车电子系统的开放标准,以实现软件和硬件的可重用性和互操作性。SOAD(System and Software Architecture Description)是AUTOSAR的一个重要规范,用于描述汽车电子系统的系统和软件架构。 SOAD规范定义了AUTOSAR架构的各个层次和部分组成,包括应用软件组件的描述、基本软件和硬件的描述以及系统和软件的构建和交付过程。SOAD规范遵循模块化和层次化的设计原则,使得系统和软件的开发可以在不同的层次上进行,并且具有良好的可重用性。 SOAD规范中的关键概念包括应用软件组件(SWC)、软件组件连接(SWC Connectors)、虚拟功能集(Virtual Function Cluster),以及模块描述和接口描述等。通过这些概念,可以将整个汽车电子系统划分为多个可重用的软件组件,并通过定义它们之间的接口和连接方式来实现系统的灵活配置和功能扩展。 SOAD规范还定义了AUTOSAR中的基本软件和硬件模块的描述和规范,在系统架构设计中起到了关键的作用。这些基本软件和硬件模块包括通信模块、诊断模块、操作系统等,它们提供了系统级的功能和服务,并与应用软件组件紧密集成,实现了整个汽车电子系统的协调和安全运行。 总之,AUTOSAR SOAD规范是一套用于描述汽车电子系统的系统和软件架构的规范。它通过提供模块化的设计原则和可重用的软件组件,实现汽车电子系统的互操作性和可扩展性,为汽车行业的软件开发和集成提供了重要的指导和标准。 ### 回答3: AUTOSAR汽车开放系统架构)是一种标准化的软件架构,用于汽车电子系统的开发。AUTOSAR SOAD(基础软件基于服务的架构定义)是AUTOSAR的一部分,它定义了基础软件框架的服务、接口和协议。 AUTOSAR SOAD提供了一种模块化的方式,可以将汽车电子系统划分为不同的软件组件,并通过定义服务进行通信和交互。这些软件组件可以在不同的硬件平台上运行,并通过标准化的接口与其他组件进行连接。 该规范还定义了一组常见的服务接口,例如通信、存储和诊断接口,以及一些通用的操作和功能,例如错误管理和事件触发。这些服务和功能可以帮助开发者更容易地设计、构建和管理复杂的汽车电子系统。 使用AUTOSAR SOAD可以增加系统的可扩展性和灵活性,因为开发者可以通过组合和重用现有的软件组件,快速构建新的系统。此外,AUTOSAR SOAD还提供了一套严格的规则和标准,用于软件开发和集成,以确保系统的健壮性、安全性和可靠性。 总之,AUTOSAR SOAD是一种重要的规范,它为汽车电子系统的开发提供了一种标准化的方法和框架。它可以帮助开发者更高效和可靠地构建先进的汽车电子系统,并在不同的硬件平台上实现互操作性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值