还在为SOME/IP仿真头秃?这个SolarONE技巧让你秒变高手

部署运行你感兴趣的模型镜像

去年怿星发布了首款车载网络仿真测试工具链(SolarONE仿真测试软件+ETS5系列接口卡),该产品一面世,就受到了热烈反响,不断有小伙伴在后台咨询这套工具该怎么用。今天小怿就带大家实操如何基于SolarONE软件实现SOME/IP仿真,快快跟紧小怿的步伐!

一、SOMEIP_SIM示例工程

首先,我们来看一下最终生成的示例工程目录结构:

接下来我们开始尝试一步一步搭建仿真工程。

01 从零开始搭建SOME/IP仿真工程

Step 1: 添加Ethernet通道

Step 2: 添加SOME/IP数据库

Step 3: 添加数据库节点

Step 4: 勾选需要仿真的服务

Step 5: 编写仿真节点脚本

Step 6: 运行工程

到这里工程就搭建完成了,是不是非常简单、高效。为了方便大家理解,我们来看一下其实现逻辑是怎样的。

02 示例工程功能及实现逻辑说明

1)Method

Arxml中定义了设置充电起始时间的方法,该方法call和return对应的参数均为“SetTimeInfoStruct”的结构体

call

retune

基于ARXML中方法的定义,实现了一个用户操作的面板,该面板的实现效果如下图:

服务提供方的python代码如下:

from solar_engine import *
#获取当前工程中Ethernet第一个通道的名称
network_name = get_network_name("Ethernet",0)
#获取指定network_name中仿真的第一个SOME/IP Server(Provided Service Instance) 
servers = someip_get_servers(network_name)
server = servers[0]
#当server接收到method请求之后此监听器将被调用
@server.on_method_request()
def on_method_request(method: SOMEIPMethod):
    print("on_method_request:",method)
    #将method request中的信号值赋值给response
    method.return_signal.SetStart_YEAR.value = method.call_signal.SetStart_YEAR.value
    method.return_signal.SetStart_Month.value = method.call_signal.SetStart_Month.value
    method.return_signal.SetStart_Day.value = method.call_signal.SetStart_Day.value
    method.return_signal.SetStart_Hour.value = method.call_signal.SetStart_Hour.value
    method.return_signal.SetStart_Minute.value = method.call_signal.SetStart_Minute.value
    method.return_signal.SetEnd_YEAR.value = method.call_signal.SetEnd_YEAR.value
    method.return_signal.SetEnd_Month.value = method.call_signal.SetEnd_Month.value
    method.return_signal.SetEnd_Day.value = method.call_signal.SetEnd_Day.value
    method.return_signal.SetEnd_Hour.value = method.call_signal.SetEnd_Hour.value
    method.return_signal.SetEnd_Minute.value = method.call_signal.SetEnd_Minute.value 

    #设置return_signal完毕,控制SolarONE响应method request
    #True代表method return;False代表method no return
    method.reply(True)

服务消费方的python代码如下:

from solar_engine import *
#获取当前工程中Ethernet第一个通道的名称
network_name = get_network_name("Ethernet",0)
#获取Ethernet通道上所有的SOME/IP Client (Consumed Service Instance)
clients = someip_get_clients(network_name)
client = clients[0]
#获取指定client中仿真的第一个SOME/IP method 
methods = client.get_methods()
method = methods[0]
#当系统变量的值发生更改时,此监听器将会被调用
#"Method_Config::method_call"与“Call”按钮绑定
@on_sysvar("Method_Config::method_call")
def on_sysvar_method_call_change(sysvar):
    #判断系统变量"Method_Config::method_call"是否等于1
    if sysvar == 1 :
        #设置method call signal参数与系统变量值一一对应
        method.call_signal.SetStart_YEAR.value = sysvar_get_u16("Method_SetTimeInfo::SetStart_Year")
        method.call_signal.SetStart_Month.value = sysvar_get_u8("Method_SetTimeInfo::SetStart_Month")
        method.call_signal.SetStart_Day.value = sysvar_get_u8("Method_SetTimeInfo::SetStart_Day")
        method.call_signal.SetStart_Hour.value = sysvar_get_u8("Method_SetTimeInfo::SetStart_Hour")
        method.call_signal.SetStart_Minute.value = sysvar_get_u8("Method_SetTimeInfo::SetStart_Minute")
        method.call_signal.SetEnd_YEAR.value = sysvar_get_u16("Method_SetTimeInfo::SetEnd_YEAR")
        method.call_signal.SetEnd_Month.value = sysvar_get_u8("Method_SetTimeInfo::SetEnd_Month")
        method.call_signal.SetEnd_Day.value = sysvar_get_u8("Method_SetTimeInfo::SetEnd_Day")
        method.call_signal.SetEnd_Hour.value = sysvar_get_u8("Method_SetTimeInfo::SetEnd_Hour")
        method.call_signal.SetEnd_Minute.value = sysvar_get_u8("Method_SetTimeInfo::SetEnd_Minute")

        #发送method请求
        client.call_method(method.method_id)
#当接收到method response之后该函数将会被调用
@client.on_method_response()
def on_server_response(method:SOMEIPMethod):
    print("IAM_SIM",method)

2)Event

Arxml中定义了充电信息的事件,该事件的参数为“ChargingInfoStruct”结构体

基于ARXML中方法的事件,实现了一个用户操作的面板,该面板的实现效果如下:

服务提供方的python代码如下:

from solar_engine import *
#获取当前工程中Ethernet第一个通道的名称
network_name = get_network_name("Ethernet",0)
#获取指定network_name中仿真的第一个SOME/IP Server(Provided Service Instance) 
servers = someip_get_servers(network_name)
server = servers[0]
#当系统变量“Event_ChargingInformation::Event_ChargingInformation_Trigger”发生更改的时候,此监听器将会被调用
@on_sysvar("Event_ChargingInformation::Event_ChargingInformation_Trigger")
def on_sysvar_ChargingInformation_Trigger_change(sysvar):
    if sysvar_get_u8("Event_ChargingInformation::Event_ChargingInformation_Trigger") == 1:
        #将用户设置的充电状态和充电时间与event信号一一对应
        event.signal.ChargingStatus.value = sysvar_get_u8("Event_ChargingInformation::ChargingStatus")
        event.signal.ChargingTime.value = sysvar_get_u16("Event_ChargingInformation::ChargingTime")
        #PSI发布指定event_id的事件
        server.publish_event(event.event_id)
        #计数:将发布的次数累加
        sysvar_set_u16("Event_ChargingInformation::Trigger_Count",
                        sysvar_get_u16("Event_ChargingInformation::Trigger_Count")+1)

服务消费方的python代码如下:


from solar_engine import *
#获取当前工程中Ethernet第一个通道的名称
network_name = get_network_name("Ethernet",0)
#获取Ethernet通道上所有的SOME/IP Client (Consumed Service Instance)
clients = someip_get_clients(network_name)
client = clients[0]
#当client接收到event之后,此监听器将会被调用
@client.on_event()
def on_server_notification(event:SOMEIPEvent):
    print("IAM_SIM:",event)
    if event.event_id == 53251:
        #计数:将接收到Event的次数进行累加
        sysvar_set_u16("Event_ChargingInformation::IAM_Count",sysvar_get_u16("Event_ChargingInformation::IAM_Count")+1)

以上就是本次展示的内容,我们简单来做个总结吧!

在上面展示的示例工程中,我们基于SolarONE实现的method request和response的仿真、event的仿真,切换到我们实际开发或者测试的场景中,不管是验证PSI还是CSI,SolarONE都可以准确应对。

大家如果还想看SolarONE的其他功能,欢迎在评论区留言互动,我们下期继续分享!

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值