Autosar(Davinci) --- 创建一个S/R类型的port(上)

目录

前言

一、创建一个SWC

二、创建DateType

三、创建一个S/R类型的port

四、将S/R Port分配给SWC

4.1 给【CtApMySWC】分配Receive Port

4.2 给【CtApMySWC】分配Sender Port

4.3 给【CtSaDoor】分配Sender Port

4.4 给【CtSaInteriorLight】发配Receive Port

五、SWC实例化

六、为SWC分配Reference Mapping

七、将【CtCoApplication】实例化

八、Check与保存

九、结束语


前言

        这里我们讲一下如何去创建一个S/R类型的port。通过实验获取车门的状态,然后发送一个亮灯的请求,来点亮一个LED灯,来帮助大家更好的理解。

一、创建一个SWC

        所有的port都是基于在SWC上进行应用的,所以我们第一步就是至少要创建2个SWC才能够进行数据的发送与接收。

1.1 首先创建一个Composition类型的App Component Type

Name:CtCoApplication(Ct代表Component Type; Co就是Composition)

Type:Composition(作为一个功能的合集,包含多个Atomic类型的SWC)

创建好之后,在【Composition Component Types】就会出现一个【CtCoApplication】

1.2 创建一个CtApMySWC,用来【接收Door】的状态,以及【发送开灯】的命令

Name:CtApMySWC(Ap:Application)

Implementation Code Type:一般都选择生成Source code

1.3 创建一个SWC:CtSaDoor,用来【发送door】的状态

Name:CtsaDoor

Type:SensorActuator

Supports multiple instantiation: on ; 这个勾选上主要是为了后面我们创建door的时候,有LeftDoor和RightDoor这2种,但是他们属性是一样的,所以就可以用这个SWC来进行复制。

Implementation Code Type:Source code

1.4 创建一个SWC:CtSaInteriorLight,用来【发送点灯】的命令

Name:CtSaInteriorLight

Type:SensorActuator

Supports multiple instantiation: on

Implementation Code Type:Source code

这样SWC相关的,我们就创建好了

二、创建DateType

        这个我们在:Autosar(Davinci) --- Data Types-CSDN博客 这个章节就已经创建好了。没有创建的,可以去参考这边去创建一下。

        2.1 创建ADT

        

        2.2 创建IDT

        

        2.3 ADT和IDT进行mapping           

三、创建一个S/R类型的port

3.1 创建一个【DoorState】的S/R port

鼠标右键【Application Port Interfaces】选择【New S/R Port Interface...】

在弹出的对话框里起一个名字【PiDoorState】,Pi:port interface


        然后在【Data Element Prototypes】中创建一个Element,名为【DeDoorState】

然后通过【4】来选择一个DataType,就是我们上面创建好的【AdtDoorState】

3.2 创建一个【LightState】的S/R port

方法与上面保持一致。

这两个S/R类型的Port interface就创建好了。

四、将S/R Port分配给SWC

4.1 给【CtApMySWC】分配Receive Port

双击【CtApMySWC】

在弹出的对话框【1】中,我们选择左边的【2】Port Prototypes list,然后通过【3:New】,选择一个之前已经创建好的Port Interface

这里我们先选择一个【PiDoorState】

如下图:

这里我们要将这个port interface实例化,就需要改个名字

将PiDoorState -> PpDoorStateFrontLeft

Driection:选择Receiver,因为对于我们SWC【CtApMySWC】来说,我们是需要接收【Door】的状态。

4.1.1 给Door Port分配一个初始值

【Init Value】选择【Reference】

然后点击右边的【1】, 在弹出的框中,通过【2】,选择一个门的初始状态为【CDoorClosed】

同样的方法,我们再实例化出来一个右门状态的Port interface,初始状态为【CDoorClosed】

到此,门的两个Port Interface就实例化到我们的SWC上了。

4.2 给【CtApMySWC】分配Sender Port

方法同上面一样,只不过这里选择【PiLightState】,因为我们要发送的是开灯的命令

注意:这里要选择Sender

同样的修改初始值

至此,【CtApMySWC】的Port Interface实例化就完成了。

你可以通过点击下面的图标,可以看到:我们【CtApMySWC】的图像框,多出了三个Port Interface,2个接收,一个发送。

4.3 给【CtSaDoor】分配Sender Port

方法跟上面保持一致,只是选择了不同的SWC。因为【CtApMySWC】那边要接收【DoorState】,那必定有一个SWC去发送【DoorState】

这里就不详细讲解了,不懂的继续去看看上面怎么创建的

Name: PiDoorState -> PpDoorState

Port Interface:PiDoorState

Direction:Sender

Init Value:CDoorClosed

这里会多出来一个发送的门状态的Port

4.4 给【CtSaInteriorLight】发配Receive Port

方法跟上面保持一致,这里也不多讲解了。初始值选择【CLightOff】

创建好之后,这边多出来一个接收灯状态的Port

五、SWC实例化

我们要将创建的3个SWC,实例化到我们的【CtCoApplication】中。

双击【CtCoApplication】打开,

点击【CtApMySWC】,键盘【Ctrl+C】进行复制

然后在【Software Design】中进行【Ctrl +V】进行粘贴。

同样的方法,我们将其他两个SWC也实例化到这里,如下图所示:

因为门有Left和Right,所以这里我们要粘贴2遍。

修改名字:可以通过鼠标右键,选择属性,来修改这个SWC的名字,达到一个实例化。

我们将这四个SWC名字中的Ct全部修改为Cp,另外把门的名字也改成左门跟右门。如下图所示:

然后我们可以通过移动,来改变以下布局。

然后我们可以通过选择这个线,来进行一个Port的连接。

点这两个头子,线就自动连接好了。

如下图所示。

然后在空白处,点击鼠标右键,选择【Selection Mode】,可以将鼠标变为选择模式。

六、为SWC分配Reference Mapping

        前面我们选择DataType的时候,选择的都是ADT,所以这会我们还要将ADT和IDT Mapping的关系,分配给每一个SWC。 这样的话,每一个SWC中的ADC就可以跟IDT进行绑定了。

选择其中一个SWC,鼠标右键,选择属性。

然后选择我们之前创建好的【DemoTypeMapping】

这样就添加好了,然后点击【确定】

然后我们用同样的方法,给SWC【CtSaDoor】和【CtSaInteriorLight】都分配上【DemoTypeMapping】。

七、将【CtCoApplication】实例化

将【CtCoApplication】实例化到【ECU_Composition】

千万要记住这一步,这样的话,我们在Davinci CFG中才能生成代码。

八、Check与保存

如果最下面没有报错,那这部分工作就算完成了。警告的话,暂时可以忽略不计。

九、结束语

        到此为止,如何创建S/R Port,我们已经讲解完毕了,真是累死我了。。。。

        下一章,我们继续讲解,如何生成代码,以及解析生成的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

常学常思

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值