目录
4.1 给【CtApMySWC】分配Receive Port
4.4 给【CtSaInteriorLight】发配Receive Port
前言
这里我们讲一下如何去创建一个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,我们已经讲解完毕了,真是累死我了。。。。
下一章,我们继续讲解,如何生成代码,以及解析生成的代码。