配置AUTOSAR客户端-服务器通信
在仿真万博1manbetx软件®,您可以为AUTOSAR客户端-服务器通信建模,以进行模拟和代码生成。有关所使用的Simulink块和高级工作流的信息,请万博1manbetx参见客户机-服务器接口.
要对AUTOSAR服务器和客户端建模,您可以执行以下其中一项或两项操作:
将AUTOSAR服务器和客户端从ARXML代码导入到模型中。
从Simulink块中配置AUTOSAR服务器和客户端。万博1manbetx
本主题提供了从Simulink块开始的AUTOSAR服务器和客户端配置示例。万博1manbetx
配置AUTOSAR服务器
此示例显示如何配置万博1manbetx仿真软件的功能块作为AUTOSAR服务器。本例使用文件夹中的这些文件
(matlabroot
/帮助/工具箱/ autosar的例子cd
到文件夹):
如果将文件复制到工作文件夹,请配置MATLAB®文件与模型文件。
打开要在其中创建和配置AUTOSAR服务器的模型,或打开示例模型
mControllerWithInterface_server.slx
.添加一个万博1manbetx仿真软件的功能块到模型。示例模型提供了两个万博1manbetx仿真软件的功能块,
doOverride
而且readData
.配置万博1manbetx仿真软件的功能块来实现一个服务器功能。配置功能原型,实现服务器功能算法。
类的内容在示例模型中万博1manbetx仿真软件的功能块命名
readData
实现一个名为readData
.内容包括:
触发块
readData
,表示服务器功能的触发端口。在触发块的属性,触发类型设置为函数调用
.还有,选项作为Simulin万博1manbetxk函数处理被选中。参数尺寸。块
人事处
而且参数输出港块数据
,犯错
,NegCode
,对应函数原型(数据、犯错、NegCode) = readData(凤凰社)
.请注意
配置服务器函数参数时,必须指定信号数据类型、端口尺寸和信号类型信号的属性输入和输出端口块的TAB。如果服务器函数参数中没有信号属性,则AUTOSAR配置验证失败。
块实现
readData
函数算法。在本例中,提供了几个简单的块数据
,犯错
,NegCode
用最少的操作输出值。一个常数块表示为服务器函数定义的应用程序错误的值。的价值人事处
调用者传递的消息将被忽略。在实际应用程序中,算法可以执行更复杂的操作,例如,根据传递的值选择执行路径人事处
,产生应用程序所需的输出数据,并检查错误条件。
当服务器功能在Simulink中工作时,设置万博1manbetx万博1manbetx仿真软件的功能块中为AUTOSAR配置的模型。例如,为AUTOSAR配置当前模型或将块复制到AUTOSAR模型中。
示例模型是一个AUTOSAR模型,其中万博1manbetx仿真软件的功能块
readData
已经被复制了。代替有意义的人事处
的输入值。readData
功能,Simulin万博1manbetxk数据传输线路CurVal
提供函数算法中使用的输入值。配置AUTOSAR服务器所需的元素,按照它们创建的一般顺序,是:
AUTOSAR客户机-服务器(C-S)接口
C-S接口处理客户端请求的一个或多个AUTOSAR操作
接收客户端服务器操作请求的AUTOSAR服务器端口
对于每个服务器操作,一个可运行的AUTOSAR服务器执行客户端请求
打开AUTOSAR字典。若要查看模型中的AUTOSAR C-S接口,请转到c接口视图。示例模型已经包含客户机-服务器接口。
如果您的模型中还没有C-S接口,请创建一个。
2 .在C-S接口视图中,单击添加按钮.此操作将打开“添加接口”对话框。
在对话框中,命名新的C-S接口,并指定要与该接口关联的操作数。其他参数保持默认值。点击添加.新的接口将出现在C-S接口视图中。
下c接口,创建一个或多个AUTOSAR服务器操作,用于C-S接口处理客户端请求。每个操作都对应于模型中的一个Simulink服务器函数。万博1manbetx
扩大c接口并展开要向其添加服务器操作的单个C-S接口。(在示例模型中,展开
CsIf1
)。如需查看该界面的操作,请选择操作.示例模型已经包含了命名为AUTOSAR的服务器操作doOverride
而且readData
.如果您的模型中还不存在服务器操作,请创建一个。(如果您的C-S接口包含一个名为
Operation1
,你可以安全地删除它。)在操作视图中,单击添加按钮.此操作将打开“添加操作”对话框。
在对话框中输入操作名称.指定相应的Simulink服务器函数的名称。万博1manbetx
如果对应的Simulink服务器函数有参数万博1manbetx,则在万博1manbetx仿真软件的功能列表。此操作导致基于Simulink服务器函数参数自动创建AUTOSAR操作参数。万博1manbetx点击好吧.操作及其参数出现在操作视图中。
检查为AUTOSAR服务器操作列出的参数。扩大操作,展开单个操作(例如,
readData
),并选择参数.列出的参数对应于Simulink服务器函数原型。万博1manbetx要查看模型中的AUTOSAR服务器端口,请转到服务器端口视图。扩大AtomicComponents,展开正在配置的各个组件,然后选择ServerPorts.示例模型已经包含一个名为
体育运动
.如果您的模型中还没有服务器端口,请创建一个。
在服务器端口视图中,单击添加按钮.此操作将打开“添加端口”对话框。
在对话框中,为新服务器端口命名,并选择已配置服务器操作的C-S接口。点击添加.新的端口出现在服务器端口视图中。
对于每个AUTOSAR服务器操作,配置一个可运行的AUTOSAR服务器来执行客户端请求。要查看模型中的AUTOSAR可运行程序,请选择可运行的.示例模型已经包含可运行的服务器
readData
,名叫Runnable_readData
.如果您的模型中还没有合适的服务器可运行文件,请创建一个。
在runnables视图中,单击添加按钮.此操作为新的可运行对象添加表项。
选择新的可运行文件并配置其名称和符号。的象征为可运行对象指定的名称必须与Simulink服务器函数名称匹配。万博1manbetx(在示例模型中,象征的名字
Runnable_readData
是函数名readData
)。创建操作调用的事件以触发服务器可运行。(示例模型定义事件
event_readData
对于服务器可运行Runnable_readData
)。下事件,点击添加事件.选择新事件。
为事件类型中,选择
OperationInvokedEvent
.进入事件名称.
下事件属性,选择触发对应于之前为服务器功能创建的服务器端口和C-S操作的值。(在示例模型中,触发为选定的值
Runnable_readData
是sPort.readData
,组合服务器端口体育运动
与操作readData
)。点击应用.
此步骤将在配置的AUTOSAR Dictionary视图中完成AUTOSAR服务器的配置。
切换到配置的Code Mappings编辑器视图,并将Simulink服务器函数映射到可运行的AUTOSAR服务器。万博1manbetx
打开代码映射编辑器。选择功能选项卡。
选择Simulink服万博1manbetx务器函数。要将函数映射到一个AUTOSAR可运行对象,请单击可运行的字段,并从可用服务器可运行程序列表中选择相应的可运行程序。在示例模型中,Simulink函数万博1manbetx
readData
映射到AUTOSAR runnableRunnable_readData
.
要验证AUTOSAR组件配置,请单击验证按钮.如果报告错误,请修复错误,然后重试验证。重复操作,直到验证成功。
为模型生成C和ARXML代码。
配置AUTOSAR服务器后,配置相应的AUTOSAR客户端调用,如中所述配置AUTOSAR客户端.
配置AUTOSAR客户端
在配置AUTOSAR服务器后,请参见配置AUTOSAR服务器,配置相应的AUTOSAR客户端调用。此示例显示如何配置函数调用者块作为AUTOSAR客户端调用。本例使用该文件
.matlabroot
/ /帮助/工具箱/ autosar /例子mControllerWithInterface_client.slx
打开要在其中创建和配置AUTOSAR客户机的模型,或者打开示例模型
mControllerWithInterface_client.slx
.添加一个函数调用者块到模型。示例模型提供了一个名为Simulink Function的万博1manbetx模块
readData
,位于室内Runnable3_Subsystem
.配置函数调用者块调用对应的万博1manbetx仿真软件的功能块。双击该块以打开它,并编辑块参数以指定服务器函数原型。
在示例模型中,
readData
函数调用者类的函数原型readData
AUTOSAR服务器示例中使用的服务器函数,配置AUTOSAR服务器.这是readData
来自服务器示例的函数。的函数调用者参数包括函数原型和参数规范字段。原型中的函数名必须与操作名称为相应的服务器操作指定。请参见操作创建步骤配置AUTOSAR服务器.参数类型和维也必须与服务器函数参数匹配。
请注意
如果希望在此时模拟函数调用,则必须将函数调用者块中常用的模型或测试线束与之对应万博1manbetx仿真软件的功能块。本例不需要模拟。
在Simulink中完全形成函数调用后,设置万博1manbetx函数调用者块中为AUTOSAR配置的模型。例如,为AUTOSAR配置当前模型或将块复制到AUTOSAR模型中。
提示
如果您创建(或复制)一个函数调用者在映射和配置AUTOSAR组件之前,您可以选择让软件为您填充AUTOSAR操作参数,而不是手动创建参数。要为您创建参数,以及完全配置的AUTOSAR客户端端口和完全映射的Simulink函数调用方,请使用AUTOSAR组件快速入门来创建默认组件。万博1manbetx有关更多信息,请参见在Simulink中创建AUTOSAR软件组件万博1manbetx.
示例模型是一个AUTOSAR模型,其中函数调用者块
readData
已经被复制了。该块连接到与函数参数数据类型和尺寸匹配的输入、输出和信号线。请注意
当你添加或改变一个函数调用者块中的AUTOSAR模型,更新AUTOSAR配置中的函数调用者。打开代码映射编辑器。在对话框中,单击更新按钮.此操作加载或更新模型中的Simulink数据传输、函数调用万博1manbetx者和数值类型。更新后,所添加的函数调用程序将出现在函数调用者代码映射编辑器的选项卡。
配置AUTOSAR客户端所需的元素,按照它们应该创建的一般顺序,是:
AUTOSAR客户机-服务器(C-S)接口
与您在AUTOSAR服务器模型中定义的Simulink服务器函数匹配的一个或多个AUTO万博1manbetxSAR操作
AUTOSAR客户端端口,用于接收客户端对C-S接口提供的服务器操作的请求
打开AUTOSAR字典。若要查看模型中的AUTOSAR C-S接口,请转到c接口视图。示例模型已经包含一个名为
csInterface
.如果AUTOSAR配置中没有C-S接口,请创建一个。
2 .在C-S接口视图中,单击添加按钮.此操作将打开“添加接口”对话框。
在对话框中,命名新的C-S接口,并指定要与该接口关联的操作数。其他参数保持默认值。点击添加.新的接口将出现在C-S接口视图中。
下c接口,创建一个或多个与您在AUTOSAR服务器模型中定义的Simulink服务器函数匹配的AUTOSAR操作。万博1manbetx
扩大c接口并展开要向其添加AUTOSAR操作的单个C-S接口。(在示例模型中,展开
CsInterface
)。如需查看该界面的操作,请选择操作.示例模型已经包含一个名为readData
.如果您的模型中还不存在AUTOSAR操作,请创建一个。(如果您的C-S接口包含一个名为
Operation1
,你可以安全地删除它。)在操作视图中,单击添加按钮.此操作将打开“添加操作”对话框。
在对话框中输入操作名称.指定相应的Simulink服务器函数的名称。万博1manbetx离开万博1manbetx仿真软件的功能设置为
没有一个
,因为客户端模型中不包含Simulink服务器功能块。万博1manbetx点击好吧.新操作出现在操作视图中。
添加AUTOSAR操作参数。
扩大操作,展开单个操作(例如,
readData
),并选择参数.在参数视图中,单击添加按钮每个函数参数一次。例如,对于
readData
,按添加按钮四次,用于参数人事处
,数据
,犯错
,NegCode
.每次单击创建一个新的参数条目。选择每个参数项并设置参数的名字而且方向来匹配函数原型。
要查看模型中的AUTOSAR客户端端口,请转到客户端端口视图。扩大AtomicComponents,展开正在配置的各个组件,然后选择ClientPorts.示例模型已经包含一个名为
cPort
.如果您的模型中还不存在客户端端口,请创建一个。
在客户端端口视图中,单击添加按钮.此操作将打开“添加端口”对话框。
在对话框中,为新客户端端口命名,并选择C-S接口。点击添加.新端口出现在客户端端口视图中。
此步骤将在配置的AUTOSAR Dictionary视图中完成AUTOSAR客户端的配置。
切换到配置的Code Mappings编辑器视图,并将Simulink函数调用者映射到AUTOSAR客户端端口和C-S操作。万博1manbetx
打开代码映射编辑器。选择函数调用者选项卡。
选择Simulink函万博1manbetx数调用方。点击ClientPort字段,并从可用的AUTOSAR客户端端口列表中选择一个端口。点击操作字段,并从可用的AUTOSAR C-S操作列表中选择一个操作。在示例模型中,Simulink函数调用者万博1manbetx
readData
映射到AUTOSAR客户端端口cPort
和C-S运算readData
.
要验证AUTOSAR组件配置,请单击验证按钮.如果报告错误,请修复错误,然后重试验证。重复操作,直到验证成功。
为模型生成C和ARXML代码。
配置AUTOSAR客户端-服务器错误处理
AUTOSAR定义了用于客户端-服务器错误处理的应用程序错误状态机制。AUTOSAR服务器返回错误状态,其值与预定义的可能错误匹配。AUTOSAR客户端接收并响应错误状态。遵循客户端-服务器错误处理准则的AUTOSAR软件组件可能会向AUTOSAR基本软件(如诊断事件管理器(DEM))提供错误状态。
在Si万博1manbetxmulink中,您可以:
导入实现客户端-服务器错误处理的ARXML代码。
为客户端-服务器接口配置错误处理。
生成用于客户端-服务器错误处理的C和ARXML代码。
如果您导入实现客户端-服务器错误处理的ARXML代码,导入器将在相应的服务器调用点(函数调用者块)的位置。
在Simulink中实现AUTOSAR客户端-服务器错误处理:万博1manbetx
定义AUTOSAR服务器在Simulink数据类型中返回的可能的错误状态值。万博1manbetx在0-63范围内定义一个或多个错误代码。数据类型的底层存储必须是无符号8位整数。数据范围必须为
出口
.例如,定义一个枚举类型appErrType
:classdef(Enumeration) appErrType < uint8 Enumeration SUCCESS(0) ERROR(1) COMM_MODE_LIMITATION(2) OVERFLOW(3) UNDERFLOW(4) VALUE_MOD3(5) end methods (Static = true) function descr = getDescription() descr = '应用程序错误类型的定义。';hdrFile = getHeaderFile() hdrFile = ";结束函数retVal = addClassNameToEnumNames() retVal = false;end function dataScope = getDataScope() dataScope = ' exports ';结束结束
请注意
您为表示万博1manbetx模型中可能的错误而定义的Simulink数据类型不会直接影响在ARXML代码中导入和导出的AUTOSAR可能错误。要修改导出的C-S接口或C-S操作的可能错误,请使用AUTOSAR属性函数。介绍示例。
属性的错误状态输出参数万博1manbetx仿真软件的功能块,它模拟AUTOSAR服务器。将error status参数配置为唯一的函数输出或将其添加到其他输出。例如,这是一个万博1manbetx仿真软件的功能块,在输出中返回错误状态值
犯错
.的万博1manbetx仿真软件的功能Block实现了一个返回错误状态的算法。
在模型中引用可能的错误值类型。在参数输出港为错误输出端口阻塞参数,指定错误状态数据类型,在本例中,
appErrType
.集港维到1和信号类型来真正的
.在客户机-服务器接口中配置错误参数的AUTOSAR属性。打开AUTOSAR字典,展开c接口,并导航到参数AUTOSAR操作视图。要添加参数,请单击添加按钮.配置参数name和set方向来
错误
.在每个端口中创建一个错误端口函数调用者为AUTOSAR客户端调用建模的块。例如,这是一个函数调用者的调用建模的块
fcnWErr
.在函数调用者块参数,指定相同的错误状态数据类型。
配置error参数的AUTOSAR属性以匹配AUTOSAR字典中的信息,参数视图,如图4所示。
为函数生成的C代码反映了已配置的函数签名和在模型中定义的用于处理可能错误的逻辑。
appErrType fcnWErr(real_T x1, real_T x2) {appErrType rty_err_0;If(…)== 0.0){rty_err_0 =…;} else {rty_err_0 =…}返回rty_err_0;}
此外,对于本例中使用的枚举类型类定义,构建生成头文件appErrType.h
,包含可能的错误类型定义。
导出的ARXML代码包含可能的错误定义以及对它们的引用。
> < short-name > . <可能- errors > < application-error成功 short-name > < error-code >0 error-code > application-error > < application-error错误 short-name > < error-code >1 error-code > application-error >…< application-error…> < short-name >下溢 short-name > < error-code >4 error-code > application-error > < application-error…> < short-name >VALUE_MOD3 short-name > < error-code >5 error-code > application-error > possible-errors >
可以使用AUTOSAR属性函数以编程方式修改在ARXML代码中导出的可能错误,并设置方向属性的C-S操作参数错误
.
下面的示例将UNDERFLOW和VALUE_MOD3添加到C-S接口名为fcnWErr
.
> > arProps = autosar.api.getAUTOSARProperties (bdroot) > >得到(arProps, fcnWErr, PossibleError) ans = ' fcnWErr /成功' ' fcnWErr /错误”“fcnWErr / COMM_MODE…”“fcnWErr /溢出”> >得到(arProps, fcnWErr /溢出,“错误代码”)ans = 3 > >添加(arProps,‘fcnWErr’,‘PossibleError’,‘下溢’)> >设置(arProps‘fcnWErr /下溢’,‘errorCode’,4)> >添加(arProps,‘fcnWErr’,‘PossibleError’,‘VALUE_MOD3’)> >设置(arProps‘fcnWErr / VALUE_MOD3’,‘errorCode’,5)> >得到(arProps, fcnWErr, PossibleError) ans ='fcnWErr/SUCCESS' 'fcnWErr/ERROR' 'fcnWErr/COMM_MODE…' 'fcnWErr/OVERFLOW' 'fcnWErr/UNDERFLOW' 'fcnWErr/VALUE_MOD3' '
您还可以访问C-S操作上可能的错误。下面的示例列出了操作可能出现的错误fcnWErr
在C-S接口上fcnWErr
.
>> arProps = autosar.api.getAUTOSARProperties(broot) >> get(arProps,'fcnWErr/fcnWErr','PossibleError') ans = 'fcnWErr/SUCCESS' 'fcnWErr/ERROR' 'fcnWErr/COMM_MODE…' 'fcnWErr/OVERFLOW'
下面的示例设置C-S操作参数的方向犯错
来错误
.
>> arProps = autosar.api.getAUTOSARProperties(bdroot) >> set(arProps,'fcnWErr/fcnWErr/err','Direction','Error') >> get(arProps,'fcnWErr/fcnWErr/err','Direction') ans =错误
AUTOSAR服务器可运行程序的并发约束
下面的块和建模模式与AUTOSAR服务器可运行的并发执行不兼容。
Simulink函数中的块:万博1manbetx
具有状态的块,例如单位延迟.
具有零交叉逻辑的块,例如触发子系统而且启用子系统.
Stateflow®图表。
其他万博1manbetx仿真软件的功能块。
Noninlined子系统。
带有副作用的遗留C函数调用。
在Simulink函数中建模模式:万博1manbetx
写入数据存储内存(例如,每个实例内存)。
写入全局块信号(例如,静态内存)。
若要强制AUTOSAR服务器可运行对象的并发性约束,请使用runnable属性canBeInvokedConcurrently
.该物业位于可运行的在AUTOSAR字典中查看。
当canBeInvokedConcurrently
设置为真正的
对于服务器可运行对象,AUTOSAR验证检查与服务器可运行对象并发执行不兼容的块和建模模式。如果Sim万博1manbetxulink函数包含不兼容的块或建模模式,验证将报告错误。如果canBeInvokedConcurrently
设置为假
,验证不会检查与服务器可运行的并发执行不兼容的块和建模模式。
你可以设置canBeInvokedConcurrently
来真正的
仅适用于AUTOSAR服务器可运行对象-即带有OperationInvokedEvent
.房地产canBeInvokedConcurrently
不支持带有其他万博1manbetx事件触发器(如定时事件)的可运行程序。如果canBeInvokedConcurrently
设置为真正的
对于非服务器可运行对象,AUTOSAR验证失败。
以编程方式设置可运行属性canBeInvokedConcurrently
,使用AUTOSAR属性函数集
.下面的示例设置runnable属性canBeInvokedConcurrently
来真正的
为可运行的AUTOSAR服务器命名Runnable_readData
.
目录(fullfile (matlabroot,' /帮助/工具箱/ autosar /例子));open_system (“mControllerWithInterface_server”arProps = autosar.api.getAUTOSARProperties(“mControllerWithInterface_server”);SRPath = find(arProps,[],可运行的,“名字”,“Runnable_readData”)
SRPath = 1×1单元格阵列{'SWC_Controller/ControllerWithInterface_ar/Runnable_readData'}
inconc = get(arProps,“SWC_Controller / ControllerWithInterface_ar / Runnable_readData”,...“canBeInvokedConcurrently”)
inconc = logical 0
集(arProps,“SWC_Controller / ControllerWithInterface_ar / Runnable_readData”,...“canBeInvokedConcurrently”,true) invConc = get(arProps,“SWC_Controller / ControllerWithInterface_ar / Runnable_readData”,...“canBeInvokedConcurrently”)
invConc = logical 1
以编程方式配置和映射AUTOSAR服务器和客户端
若要以编程方式配置AUTOSAR客户机-服务器接口的AUTOSAR属性,请使用AUTOSAR属性函数,例如集
而且得到
.
若要以编程方式为AUTOSAR客户端和服务器配置Simuli万博1manbetxnk到AUTOSAR映射信息,请使用以下函数:
有关使用AUTOSAR属性和映射函数的示例脚本,请参见配置AUTOSAR客户-服务器接口.
另请参阅
万博1manbetx仿真软件的功能|函数调用者|触发|参数尺寸。|参数输出港