如何基于CANoe实现HTTP通信
超文本传输协议(HTTP,Hypertext Transfer Protocol)是一种用于在客户端与服务器之间传输数据的应用层协议,起初主要服务于Web场景,如今被广泛引入汽车电子、工业4.0、医疗等领域。HTTP采用请求-响应模型,是一种无状态协议,每个请求都是独立的,并携带服务器完成处理所需的必要信息。客户端通过统一资源标识符(URI,Uniform Resource Identifier)来指示目标资源,并借助标准化的请求方法及头部字段来表达请求目的,服务器则返回包含状态码、响应头和消息体的响应结果。在互联应用的开发和测试过程中,引入高效的HTTP通信仿真方案,可以在系统早期阶段模拟通信信息,帮助快速发现和定位问题,从而提升系统可靠性与整体开发效率。
CANoe.Connectivity功能概述
CANoe 19新增的Option Connectivity专为互联应用的仿真和测试而设计,支持HTTP/REST、MQTT、Modbus等架构,并可集成无线终端设备(如BLE、NFC、UWB智能设备),实现对复杂互联系统的全面分析与验证。
在HTTP支持方面,具备以下优势:
可仿真HTTP客户端或服务器
支持常用HTTP方法:GET、POST、PUT、DELETE
多种实现方式,可灵活应用于快速建模或底层协议调试场景
内置多种数据序列化方式(如JSON、Google Protobuf、Plain Text)
可结合VN以太网接口卡,进行底层协议分析
支持使用CAPL、C#和Python进行测试和应用程序开发
支持通过面板和信号发生器,实现信号与状态曲线的交互式激励和可视化

图1:CANoe.Connectivity支持多种协议
HTTP通信在CANoe中的实现方式
在CANoe中,HTTP通信可通过两种方式实现:
基于分布式对象(Distributed Objects,DOs)建模,在vCDL中定义数据结构和接口并绑定HTTP属性,随后实例化为分布式对象,应用层可直接调用对象方法发送请求,无需关心底层实现(如HTTP请求的构建过程),适合URI固定且交互逻辑稳定的场景;
使用HTTP Client API,在应用层通过内置对象(_HTTP::Client)显式构建并发送请求,更适合灵活控制请求内容的场景。
无论是在vCDL中创建分布式对象,还是直接使用内置的HTTP对象,应用程序都可以使用CAPL、C#或Python脚本调用对象方法,实现HTTP请求的发送和响应的接收:
图2:HTTP对象
CANoe与SUT的HTTP连接方案
CANoe与被测系统(SUT)之间有两种连接方式:
电脑直连,使用操作系统的TCP/IP协议栈。这种方式适用于需要联网的测试场景,例如访问云服务、互联网API或远程服务器。
VN以太网接口卡连接,使用CANoe自带的TCP/IP协议栈。此时需要为HTTP对象配置两个关键属性:HTTPBinding::Network和HTTPBinding::Node,属性值需要与Simulation Setup中的网络名称和节点名称保持一致,适用于局域网测试或与CAN/LIN/Ethernet等总线联合仿真,通常还需要配合其他Option一起使用。

图3:CANoe与SUT的HTTP连接方案
HTTP客户端仿真示例(基于分布式对象建模)
本示例展示了如何利用CANoe的Connectivity功能,在一个可直接访问外部服务的网络环境中快速访问math.js web service,实现HTTP通信。
新建CANoe工程
使用Distributed Objects模板创建新的CANoe工程:
图4:新建CANoe工程
新建vCDL文件
在Communication Setup中创建HTTP Binding的数据源vCDL:

图5:创建vCDL
定义分布式对象DOs
通过vCDL描述HTTP接口,使用Consumed Method类型的分布式对象构建HTTP请求和响应结构。结构体类型的变量默认采用JSON序列化,结构体成员名称需与JSON键名一致。通过配置HTTP绑定属性,可指定服务器地址、基础路径和请求方法,从而实现标准化的HTTP通信建模。

图6:基于分布式对象建模的vCDL
实现HTTP通信
使用CAPL语言实现客户端的通信逻辑,包括发送请求、接收响应等。

图7:基于分布式对象建模的CAPL实现
数据分析和验证
通过Trace窗口对返回的数据进行解析与验证,确保通信逻辑与预期一致。

图8:数据分析
继续浏览有关 通信 的文章
