【AutoSar CP】SoAd模块
文章目录
- 【AutoSar CP】SoAd模块
- 1. SoAd总体说明
- 1.1. SoAd在AutoSar CP中的层级关系
- 1.2. SoAd的作用
- 2. 主要配置参数
- 3. Sock连接
- 4. PDU传输
- 5. PDU接收
- 6. 配置参数详表
- SoAdBswModules
- SoAdGeneral
- SoAdConfig
- SoAdSocketConnectionGroup
- SoAdSocketConnection
- SoAdSocketProtocol
1. SoAd总体说明
1.1. SoAd在AutoSar CP中的层级关系
1.2. SoAd的作用
- 对于TCP/IP协议栈,数据的传输依赖基于ip和端口的Sockt,而对于PDU的传输则依赖PduId,SoAd模块将AUTOSAR中定义的PDU通信转换成基于socket的通信。实现Socket和PDU数据之间的切换
- 对于PDU的路由,可以控制哪些PDU路由使能、哪些PDU路由禁止
- AUTOSAR遵循静态通信关系,而TCP/IP概念中存在动态配置和路由,SoAd模块旨在弥合这两个概念之间的差距。通过建立一个包含AUTOSAR所需信息的预先确定的配置,并保留一些项,以便在运行时进行更新
比如对于特定的PDU,其PduId在程序编译时就确定了,但是在代码运行中,该PduId可能需要发送到不同的远端ip,这时就需要用SoAd来设置连接远端地址信息
2. 主要配置参数
- SoAdSocketConnectionGroup(连接参数)
- 指定套接字ConnectionGroup的配置,主要包含本地ip、本地端口、远端ip,远端端口,连接协议(TCP/UDP)
- 每一个ConnectionGroup内需要指定有几个Connection(远端),可以理解为一个服务端指定最多有几个客户端连它
- 可以设置每个Connection(远端)的ip和端口。如果ip设置为ANY,端口设置为0 ,可以理解为连接本服务器的这个客户端可以是任何ip,任何端口
- 注意:在一个ConnectionGroup内,只有本地ip必须唯一,本地端口、远端ip,远端端口都可以设置为任意值(ip:ANY,端口:0)
- 对于接收组播,本地ip需要设置为组播地址
- 对于UDP来说,一个ConnectionGroup下的Connection共享同一个Socket
- 对于TCP来说,一个ConnectionGroup下的每一个Connection都单独对应一个Socket(TCP需要accept)
- SoAdPduRoute(发送数据)
- PDU发送路径:PduR --> SoAd --> TCP/IP
- 需要指定PduR SoAd上层接口类型,IF/TP
- 需要指定接收的数据走的是哪一个ConnectionGroup或Connection
- 需要指定接收的数据与哪一个PduId对应,PduId由PduR中配置
- 需要指定SoAdRoutingGroup(开关),来控制该种PduId数据是否从SoAd向下传输
- SoAdSocketRoute(接收数据)
- PDU接收路径:PduR <-- SoAd <-- TCP/IP
- 需要指定SoAd PduR上层接口类型,IF/TP
- 需要指定接收的数据走的是哪一个ConnectionGroup或Connection
- 需要指定接收的数据与哪一个PduId对应,PduId由PduR中配置
- 需要指定SoAdRoutingGroup(开关),来控制该种PduId数据是否从SoAd向上传输
- SoAdRoutingGroup(开关)
- 一个可以启用或禁用的特定路由组的合集。
- SoAdRoutingGroupIsEnabledAtInit:如果设置为 true,此路由组将在初始化 SoAd 模块后启用(即在SoAd_Init 函数中启用)
- SoAdRoutingGroupTxTriggerable: 指定与此路由组相关的PduRouteDest容器所引用的If-TxPDUs是否可以通过SoAd_IfRoutingGroupTransmit函数触发传输。当该参数设置为TRUE时,表示可以通过SoAd_IfRoutingGroupTransmit触发传输;当该参数设置为FALSE时,表示不可以通过SoAd_IfRoutingGroupTransmit触发传输
3. Sock连接
- 对于SoAd模块,建立链接是调用接口
SoAd_OpenSoCon(SoConId)
, 入参 SoConId 对应配置参数SoAdSocketConnectionGroup中的索引值 - 调用
SoAd_OpenSoCon(SoConId)
的实际作用是设置该SoConId
需要建立链接的flag - 在周期调度函数
SoAd_MainFunction()
中,对于需要建立链接的SoConId
,依次调用如下接口建立链接//TCP/UDP TcpIp_SoAdGetSocket(Std_ReturnType, TcpIp_DomainType, TcpIp_ProtocolType, TcpIp_SocketIdType**); //TCP/UDP TcpIp_Bind(Std_ReturnType, TcpIp_SocketIdType, TcpIp_LocalAddrIdType, uint16**); /