ASCET操作简易说明

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ASCET 操作简易说明
ETAS 陈炯
1.界面介绍
安装完软件,打开ASCET,一般是空的database。

选择file->new database. 在弹出的窗口中填入名称,例如exercise。

在database中就会出现exercise。

如图示有3个区域,在database中列出所有建立的元素,在comment中可以添加对该元素的说明,在contents中列出该元素中建立内容。

选中database中exercise点击右键,如图示建立文件夹exercise。

建立文件夹可以将不同的元素分类放置便于管理。

右键点击exercise文件夹,可以建立需要的元素。

Project: 包含其它元素,是对一个系统的定义,可以进行操作系统的配置,进行仿真计算。

Module:定义一定功能,可以是方框图也可以是C代码的,一般不设置参数和返回值。

Class:对一定功能进行封装,可是设置参数和返回值,可重复调用。

Continuous Time Block:针对物理模型进行建模的模块,根据数学传递函数进行模型建立。

State Machine:状态机是对离散系统的描述,在有限个状态间根据条件进行跳转。

Enumeration:枚举类型,在建模时可以使用。

Record:将不同类型封装在一起,类似于软件编程中的结构体。

以上是建立控制逻辑的基本元素。

Icon:用于模块的图标,用户可以创建自己的模块后,自定义图标以显示在模型中。

Signal:在进行测试时,可以自定义输入信号对控制模型进行测试。

Container:类似于文件夹的功能,可以将相关的元素放入container,在进行版本控制时起作用。

Hardware Configuration: 在进行快速原型设置时,对硬件进行设置的模块。

Hardware Description file: 对硬件进行说明。

提示:具体说明可以通过在线帮助进行查询。

选择菜单中help->contents, 或按F1,可以弹出帮助窗口,进行查询。

2.操作练习
先建立小的功能模块,进行仿真验证,然后将所需元素组建成project,进行操作系统的设置以及代码生成的工作。

Exercise 1:
右键选择exercise文件夹,insert->module->block diagram. 命名为ex1。

双击ex1,打开方框图模块编辑界面。

主要有3个区域,最左边显示模型中元素,中间是编辑的区域,右边是建模所需的元素。

元素的简易说明:
红色的元素是全局变量,在程序中不需要人为调整,测试过程中作为测量变量。

L为逻辑变量,S为有符号变量,U为无符号变量,C为连续变量,E为枚举变量。

它们彼此也可以通过属性菜
单进行转换。

蓝色的元素也是全局变量,是标定变量,测试过程中可以进行修改。

用于不同变量间进行强制类型转换。

提供时间任务的间隔时间,用于控制逻辑中的计算。

避免不同任务对同一资源的读写,可以设定资源保护。

message是操作系统特有的全局变量,有接收和发送,以及同时可读写的三种类型。

完成不同任务间的数据交互。

如果不同任务对同一变量操作,系统将会自动对message进行备
份,使得当前线程中的数据完整确定。

数组和矩阵
与查表功能结合使用,计算当前数据所在的数据轴位置。

二维表和三维表查表功能。

数学计算和逻辑判断的运算符。

进行绝对值,最大最小值,中间值,正负值的运算。

条件判断的相关运算,如switch-case,if-else,while等等。

常量。

将模型封装成一个子模块。

添加注释
引用自身模块,自调用。

提示:这些元素的具体用法可以参看在线帮助。

开始建立模型:
点击接收message,建立receive message。

弹出属性编辑窗口。

在name中输入x1。

OK后将x1放入中间的编辑区域。

点击运算符,放置在编辑区域内。

点击全局变量,在弹出的窗口中name输入data1,点击OK,将data1放置在编辑区域中。

点击运算符,放置在编辑区域中。

点击发送message,在属性窗口中name输入y1,OK后,放置在编辑区域中。

点击参数,在属性窗口中name输入p1,OK后,放置在编辑区域中。

点击常数,放置在编辑区域中。

最后如图示,将各个元素摆置在编辑区域。

在编辑区域点击右键,或者点击菜单左上角的连线按钮,鼠标变成十字,将各个元素的首尾相连,如图所示。

连线完毕后,在编辑区域点一下右键,恢复到编辑状态,鼠标回到箭头。

连线后有两段线是绿色。

这是需要定义的计算模型属于哪个process线程,以及各个计算部分的执行次序。

左键点击main下的process,更名为cal1。

双击data1输入线左上角的/0/,ASCET会自动将cal1指定个这个计算,在双击y1左上角上的/0/,如图所示。

指定后,当前的计算执行顺序为:
Data1 = x1 * p1;
Y1 = data1 + 1;
也可以右键点击顺序号,选择edit,在弹出的编辑窗口中进行所属线程以及次序的修改。

比如将10 改成1,那么在执行计算的时候,顺序就会调整如下:
Y1 = data1 + 1;
Data1 = x1 * p1;
完成了建模工作,可以进行仿真测试。

点击菜单中的试验按钮,如图示。

试验环境被打开,如下图示。

在试验环境中可以对控制模型进行监控,给定输入,验证输出是否为期望值。

注意在试验环境下,不能对模型进行编辑。

点击菜单中,可以退出试验环境,返回编辑状态,从而对模型进行修改。

在进行仿真验证前需要对一些基本信息进行设置。

点击菜单中event generator按钮,弹出对话框。

双击cal1,弹出对话框。

保持默认设置即可。

Mode是任务在执行模式,timeSynchron是周期性的任务,dT就是任务周期。

Prio是指优先级,决定了不同任务的执行顺序。

数值越大,优先级越高。

点击OK确认。

再双击generateData,这是ASCET产生输入值的任务,不属于控制模型本身。

保持默认设置,点击OK确认。

关闭对话框。

点击菜单中按钮,弹出对话框。

在data Elements空白区域点击右键,选择create。

在弹出对话框中选择x1,点击OK。

在弹出的对话框中,可以对x1进行设定。

Mode是选择类型,可以是常数或者正弦信号等等,这里就选择constant,value设置为5。

点击OK确认。

关闭data generator窗口。

如图示点击下拉菜单,选择新建一个示波器。

然后选中y1,按住左键,将y1拖进new oscilloscope。

松开鼠标后,就会建立出一个示波器。

双击y1,可以对显示参数进行设置,将纵坐标的范围从0到100,改成0到50。

点击OK确认。

将p1拖入到new calibration editor,会产生一个标定窗口。

将p1值设置为2。

在仿真过程中也可以对标定值进行修改。

可以设定开始,停止以及暂停仿真。

点击,开始仿真。

修改p1值,可以在示波器中看到y1变化
也可以选择view->monitor all。

就可以对模型中所有的变量进行监控,看到仿真运行过程中数值的变化。

由于示波器和标定窗口都是浮动在试验环境中,会被模型显示界面遮挡住,不容易找到。

在进
行仿真运算时,可以隐藏掉模型的显示界面,只显示标定测量的窗口。

点击菜单中,可以隐藏或展开模型显示界面。

验证完成后,点击菜单中,退出试验环境。

ASCET会问是否保持试验环境的设置,点击yes,返回编辑界面。

在ASCET中针对同一个模型可以设置不同的试验环境,以便测试。

完成了第一个练习,关闭module的编辑界面。

Exercise 2:
备份ex1。

在database中右键点击ex1,选择copy,然后在空白处右击选择paste,更名为ex2。

双击ex2,打开编辑界面。

右键点击加法运算符,选择add input。

点击连续变量,命名为data2,放置在编辑区域中,与加法符新添的输入管脚连接。

接下来要加一段逻辑,在计算初始化的时候,根据逻辑值的不同设置,data2有不同的初始值。

点击逻辑变量,命名为l1。

选择放置在编辑区域中。

选择常数,放置在编辑区域中,双击常数元素,修改数值为2。

在放置一个常数,修改数值为3。

在从左边的浏览区域,将data2拖进编辑区域两次。

这里要进行逻辑判断的连线,与常规连线略有不同。

右键点击data2左上角的/0/,选择connector。

确定后data2会多出输入口,这个接口就是用来连接逻辑判断的接口。

点击右键,进入连线模式,将各个元素连接。

如图所示。

由于这部分计算是在初始化时进行,将建立一个独立的线程来进行判断。

右键点击main,选择add process。

命名为init。

右键点击左上角的/0/,选择edit。

将这一计算设定为init的线程。

点击OK确定。

可以在建模的时候设定变量的初始值。

右键点击p1,选择data,在弹出窗口中设置数值为2。

点击OK确定。

模型建立完成,点击试验按钮,进入试验环境。

点击菜单中event generator按钮,双击init,将mode设置为single shot,这种模式在仿真运算过程中只在开始时运一次。

在左侧浏览窗口中,右键点击l1,选择calibrate,会新增一个逻辑量的标定窗口。

如果想把同类型的标定两放在一起,现在下拉菜单中选中想要添加的窗口,然后按照前面描述的方法,将变量拖入到窗口中。

开始仿真运算,监控各个变量数值变化。

停止仿真,改变l1为true,在运行仿真,可以看到data2的数值变化,y1也随之变化。

点击,打开event tracer的窗口,从中可以看到各个任务执行的情况。

在此窗口中点击运行
后,在开始运行仿真,就可以采集到任务执行信息。

可以看到在仿真第一步,执行顺序为:generateData cal1 init,初始化的线程应该第一个执行。

将init的prio改为11,重新运行仿真并采集,执行顺序就调整了。

完成验证后,退出试验环境,关闭ex2。

Exercise 3:
在database中加入class。

右键点击文件夹,如图示选择。

命名为ex3。

双击ex3进入编辑界面,准备建立一个限值的功能。

Class的编辑界面与module的类似,只是在main下不是process而是method,可以设置输入参数以及返回值。

由于是封装的功能,所以在class中不能用message与外部交互,可以通过全局变量进行数值交互。

在左侧的浏览区域,双击main下的calc,弹出method的编辑界面。

Argument就是输入参数,点击添加按钮,新建一个输入参数,命名为input。

需要返回值,点击return,勾选return value。

点击OK确认。

在calc下多了两个变量,展开calc,将input和return拖入到编辑区域。

选择mux元素,拖入到编辑区域,并右键点击mux元素,选择add input。

Mux是用于条件判断,给予不同的输出,如图示
元素上方为条件输入有1和2两个,左侧为待输出,有1,2,3个情况。

条件1成立,输出1,否则判断条件2是否成立,是的话输出2,如果都不成立,则输出3。

选择,建立两个标定量命名为UP和DOWN。

并右键点击标定变量设置数值分别为5和0。

如图所示进行连线。

指定return左上角的执行顺序,双击即可。

模型建立完成,保存后,进入试验环境。

在event generator中使能两个任务。

在data generator中选择input进行设置,设定为正弦波,如图下所示。

在测量类型中选择new oscilloscope,右键点return选measure,用示波器进行观测。

运行仿真,在示波器中看到return值限定在0和5之间。

退出试验环境,关闭ex3。

Exercise 4:
在前一个练习中建立了class,它的优势就是对功能进行封装,可以设定不同的应用情况,可以重复调用。

在这个练习中,就是简单的在module中对class进行调用。

新建一个module,仍是block diagram的类型,命名为ex4。

双击ex4,打开编辑界面。

将main下的process更名为cal1。

在左侧浏览区域,选择database,右键点击ex3,选择create instance variable,弹出的属性编辑界面保持默认,点击OK确认。

点击outline,返回当前module的浏览界面。

选中ex3,拖入到编辑区域。

新建receive message,命名为y1,新建send message,命名为y2。

并设定好线程顺序。

保存模型,进入试验环境。

在event generator中使能任务。

在data generator中选y1,设定为sine类型的信号。

用示波器观测y2的变化,运行仿真,可以看到y2被限定在0和5之间。

完成验证后,退出试验环境,关闭ex4。

Exercise 5:
Class也可以用C来编写。

在database中,新建C类型的class。

命名为ex5。

双击ex5,进入编辑界面,可以看到中间的编辑区域可以写C代码。

双击main下的calc,按照在ex3中的方法,添加两个argument,一个返回值。

名称用默认值即可。

在点击添加一个全局变量data。

在编辑区域写如下C代码。

保存模型,进入试验环境。

在event generator中使能任务,在data generator中将两个输入参数设定为constant,数值分别为2和3。

将data和return放在一个numeric display中,观测数值。

完成验证后,退出试验环境,关闭ex5。

Exercise 6:
同样用C编辑的class也可以在module中调用。

新建一个block diagram类型的module,命名为ex6。

双击ex6,打开编辑界面。

在左侧浏览区域,选择database,右键点击ex5,选择create instance variable,弹出的属性编辑界面保持默认,点击OK确认。

点击outline,返回当前module的浏览界面。

选中ex5,拖入到编辑区域。

新建continuous data,命名为data3。

新建receive message,命名为x1,新建send message,命名为y3。

并设定y3左上角的执行顺序。

如图所示。

保存模型,进入试验环境。

在event generator中使能任务,在data generator中设定x1和data3的信号类型。

运行仿真,观测y3的数值变化。

完成验证后,退出试验环境,关闭ex6。

Exercise 7:
对于已有的C代码,也可以方便的集成到ASCET中。

在database中建立C类型的module。

命名为ex7。

双击ex7,打开编辑界面。

在中间的编辑区域中可以直接写C代码。

现在已有C代码,simple_sample.c文件。

定义了如下函数。

double addfunction(double in1,double in2)
{
double out;
out = in1+in2;
return(out);
}
simple_sample.h文件如下:
extern double addfunction(double,double);
在菜单中选择外部源码编辑按钮。

在弹出的对话窗口中可以选择源文件和头文件。

在code界面中的空白区域,点击右键,选择load from file,选择所需的源文件,相应的内容就加载到这里。

切换到header,同样用右键点击选择相应的头文件。

关闭窗口,保存设置。

在编辑界面中新建3个continuous的变量,命名为data4,data5和data6。

在编辑区域内写如下代码。

在编辑区域的header中也可以写声明和宏定义等。

保存模型,进入试验环境。

在event generator中使能任务。

将data4和data5设定为标定量,观测data6的变化。

完成验证后,退出试验环境,关闭ex7。

Exercise 8:
这个练习通过简单的灯开关的模型,来学习用状态机建立控制逻辑。

在database中新建state machine,命名为ex8。

双击ex8,打开编辑界面。

状态机也是一种class,将功能进行封装。

与其它模块的数据交互是通过其输入输出端口进行的。

状态机的变化是通过触发的方式进行的,触发条件成立,则进行状态的转移。

可以看到在main 下不再是process而是trigger。

状态机的元素有其特有的部分,说明如下:
输入量,从状态机模块外部获取数据。

输出量,向状态机模块外部传递数据。

一个状态,控制逻辑可以在这里停留。

一个节点,控制逻辑不能在节点停留,只是便于创建分支判断逻辑。

在模型中添加注释。

灯的模型,是通过判断外部输入开关的状态,改变灯亮暗的状态,并将灯的状态输出。

点击,在弹出的属性编辑窗口中,命名为switch_in,将数据类型改为逻辑的。

点击,命名为status,数据类型改成logic的。

点击,将state放置在编辑区域。

双击state,弹出编辑窗口,更名为off,并start state选项勾选。

Start state选项选中后,表明这是初始进入的状态,控制逻辑从这个状态开始执行。

点击,再放一个state在编辑区域,双击state,编辑名称为on。

在空白处点击右键,鼠标变成十字,进入连线模式。

左键点击off的边缘一下,即可拖出一条线,点一下左键,就可以确定一个经过的点(这与在module中进行连线的操作是一样的),最后在on的边缘点一下,连线会自动变成弧线。

这条连线表示经过触发后,可以从off状态跳到on的状态。

同样,在从on到off连一条线。

下面进行触发条件的设定,以及触发的操作。

判断输入量switch_in的数值,如果为真就从off 切换到on,将输出量status赋值为true,否则从on切换到off,将输出量status赋值为false。

在main下点击右键,选择add diagram->actions/conditions BDE。

通过方框图的方式来定义条件
和进行的一系列操作。

在左侧浏览区域,main下会出现ActionCondition_BDE,双击ActionCondition_BDE,弹出condition 和action的编辑界面。

这个界面与main的编辑界面一样,从窗口上方的标识可以看到是在哪个编辑界面中。

右键点击ActionCondition_BDE,选择add condition。

命名为switch_on。

同样方法,再添加一个condition,命名为switch_off。

右键点击ActionCondition_BDE,选择add action。

命名为lamp_on。

再添加一个action,命名为switch_off。

完成后,在ActionCondition_BDE下有两个condition和两个action。

switch_in拖入到编辑区域,如图所示连接,并设定好执行顺序。

将变量status拖入到编辑区域两次,分别用常量true和false赋值。

True的赋值操作设定在switch_on的action中。

false的赋值设定在switch_off的action中。

保存设置,关闭ActionCondition_BDE编辑界面,回到main的编辑界面。

双击状态off,打开编辑窗口,entry的下拉菜单中,选择lamp_off。

说明:这里可以指定三种操作。

entry是指进入这个状态时完成的操作。

Static是指停留在这个
状态时所进行的操作。

Exit是指退出这个状态时所进行的操作。

根据功能需要,在这三种情况进行action的选择。

双击状态on,entry操作选择lamp_on。

双击从off到on的trigger,弹出编辑窗口,condition中选择switch_on。

双击从on到off的trigger,condition选择switch_off。

完成模型建立,进入试验环境进行仿真。

在event generator中使能任务。

将switch_in设定为calibrate量,右键点击状态off,选择animate state。

运行放置,改变switch_in的值。

可以看到off和on在不断的切换。

完成验证后,退出试验环境,关闭ex7。

状态机的模块也可以在module中调用。

新建一个block diagram类型的module,命名为ex9。

双击ex9,打开编辑界面。

在左侧浏览区域,选择database,右键点击ex8,选择create instance variable,弹出的属性编辑界面保持默认,点击OK确认。

点击outline,返回当前module的浏览界面。

选中ex8,拖入到编辑区域。

新建logic variable,命名为lamp。

新建logic parameter,命名为control,并设定好执行顺序,如图所示。

保存模型,进入试验环境。

在event generator中使能任务。

将control设定为calibrate,lamp进行测量。

改变control的值,看到lamp值跟随变化。

完成验证后,退出试验环境,关闭ex9。

利用建立好模块,完成project的建立,进行操作系统的设置,并进行嵌入式代码生成。

在database中新建一个project,命名为ex10。

双击ex10,打开编辑界面。

在project中主要是讲各个模块组合起来,并不是用来设计具体的功能,所以右侧可用的元素有限,只是可以建立一些全局变量,包括测量量,标定量,表格等。

在左侧浏览区域,选择database,右键点击ex2,选择create instance variable,弹出的属性编辑界面保持默认,点击OK确认。

同样选择ex4。

点击outline,返回当前module的浏览界面。

在project中,可以将模块拖入到图形显示区域,为了方便理解整个系统结构。

也不将模块拖入,它们之间的数据交互,根据其message的设定进行。

点击中间区域的上面一排的按钮中comm,可以看到接收和发送的关系。

这里可以看到y1由ex2发送,由ex4接收。

通过同一名称的message,两个模块进行数据交互。

另外x1在ex2需要外部输入,目前的模块中并没定义。

在开发系统时,会出现这样的情况,所需的变量在其它地方定义,而又需要对当前的部分系统进行测试,这时可以选择菜单中extras->resolve globals。

在左侧浏览窗口中,ASCET会建立一个x1。

这样就可以进行测试工作。

在project中一个主要工作就是对操作系统的设置,点击中间区域的OS,在tasks空白区域右键点击,选择add,新建一个任务。

新建的任务命名为task_10ms。

类型选择alarm,这是周期变化的任务,在period中输入周期时间,以秒为单位。

展开process中的ex2和ex4。

在process中,选中ex2下的cal1,在tasks中选中task_10ms,点
击>>,将其cal1添加到task_10ms中。

同样将ex4下的cal1添加到task_10ms中。

在tasks区域的空白处点击右键,选add,新建一个任务为init。

将type修改为init。

在process中选择ex2下的init,添加到init任务下。

这种任务在程序初始化的时候运行一次。

设置完成,点击,进入试验环境。

与module的测试一样,在event generator中使能任务。

将x1设定为calibrate,y1和y2进行测量。

改变x1的值,看到y1和y2的值跟随变化。

点击编辑界面左上角的项目属性按钮,弹出属性编辑窗口,设置如下。

Target选择freescale MPC55xx,Operating system选择GENERIC-OSEK。

说明:在这个练习中只进行代码生成。

如果需要编译生成可执行文件,还要设置compiler。

点击OK确认。

在菜单中选择tools->options,弹出编辑窗口。

选择external tools->operating system->GENERIC-OSEK。

确定路径正确。

在compiler中可以设置安装好的编译器的路径,从而进行编译连接生成可执行文件。

点击OK确认。

由于更换了target,这时需要再次设定操作系统,可以看到这时OS界面中task是空的。

如果跟PC仿真的设置一样,可以从菜单中选择operation system->copy from target,选择PC->GENERIC。

选择菜单中build->generate code。

在安装路径下有CGen文件夹,生成的文件在此文件夹内。

打开ex2.c文件,可以看到模型对应的逻辑生成了函数。

void EX2_IMPL_cal1 (void)
{
/* cal1: sequence call #5 */
/* assignment to data1: min=-oo, max=+oo, hex=phys, limit=n.a., zero incl.=true */
_data1 = x1__cal1_EX2_IMPL * _p1;
/* cal1: sequence call #10 */
/* assignment to y1: min=-oo, max=+oo, hex=phys, limit=n.a., zero incl.=true */
y1__cal1_EX2_IMPL = _data1 + _data2 + 1.0;
}
嵌入式代码需要考虑代码效率,这就需要对变量进行定标工作。

下面将项目中的变量从浮点数转化为定点数。

在左侧浏览区域,右键点击ex10,选择implementation。

弹出编辑界面。

双击ex2,打开ex2的设置界面。

双击一个变量,可以对其单独设置。

也可以按住ctrl键,选择几个变量,点击右键,选择edit,一起进行修改。

对data1,data2和p1一起进行修改,打开编辑界面。

将变量设置为有符号的16位数。

在点击global,将y1设置成sint16。

同样的方法,双击ex4,再双击ex3,把其中的变量也设置成sint16。

点击OK确认。

返回到ex4的编辑界面,点击global,将y2设置为sint16。

点击OK确认。

返回到ex10编辑界面后,点击global,双击x1,同样设定为sint16。

点击OK确认。

说明:看编辑窗口最上边的标注,就可以看到当前是对应哪个模块的编辑窗口。

在菜单中选择build->clean code generation directory。

将文件夹清空。

在点击build->generate code。

重新生成代码。

打开ex2.h,可以看到变量的类型与设定的一致。

struct EX2_IMPL_IRAM_SUBSTRUCT {
sint16 data1; /* min=-32768.0, max=32767.0, ident, limit=yes */
sint16 data2; /* min=-32768.0, max=32767.0, ident, limit=yes */
uint8 l1; /* min=0, max=1, Identity, limit=yes */
};
Exercise 11:
模型的导入导出。

整个database或者单个模块都可以导出,在进行导入。

对于包含多个module 的模块,其相关的部分都会被导出。

这个练习将ex10导出,再重新导入。

右键点击ex10,选择export,弹出窗口。

点击options,展开设置。

确定inlude referenced items勾选上,确保相关的模块都被导出。

点击OK确认。

导出的文件在默认路径下\ETASData\ASCET6.1\Export。

新建一个database,命名为ex11。

在菜单中选择file->import,选择刚导出的文件ex10.exp。

点击OK确定。

Ex10相关的模块都导入到新的database中,可以进行修改已经仿真运算。

说明:在安装路径下C:\ETAS\ASCET6.1\export有ASCET自带一些库,如ETAS_System_Library.exp,ASCET库提供了一些基本功能模块,如计时,延时等等,可以导入到database中进行使用。

更多说明可以参考C:\ETAS\ETASManuals\ASCET V6.1路径下的文档。

相关文档
最新文档