DDD领域驱动设计批评文集>>
《软件方法》强化自测题集>>
《软件方法》各章合集>>
本文只提供字幕文件!
步骤1:
在SparxSystems官网下载教学视频和案例模型
https://sparxsystems.com/resources/webinar/release/ea152/simulation/matlab/introduction/matlab-digital.mp4
https://sparxsystems.com/resources/webinar/release/ea152/simulation/matlab/introduction/matlab-digital.feap
https://sparxsystems.com/resources/webinar/release/ea152/simulation/matlab/introduction/index.html
步骤2:
在UMLChina下载字幕文件
http://www.umlchina.com/tools/matlab-digital.srt
字幕文件内容由UMLChina记录并翻译
步骤3:
把字幕文件matlab-digital.srt和视频文件matlab-digital.mp4放在同一文件夹下
步骤4:
用支持字幕的播放器播放视频,例如VLC Player,不要用Windows自带的播放器。
0
00:00:00,010 --> 00:00:00,462
Hello
大家好
1
00:00:00,462 --> 00:00:02,951
this is Dermot O’Bryan from SparxSystems
我是SparxSystems的Dermot O’Bryan
2
00:00:02,951 --> 00:00:04,308
in this demonstration
在这个演示中【本中英字幕由UMLChina整理翻译】
3
00:00:04,308 --> 00:00:10,870
we will run over using the latest SysML options for simulating a digital electronic example in Simulink.
我们演示使用最新的SysML选项来仿真一个Simulink中的数字电路的例子。
4
00:00:11,210 --> 00:00:18,612
We’ll use the new SysPhS modeling to reference components that are defined in Simulink.
我们将使用新的SysPhS建模来引用Simulink中已定义的组件。
5
00:00:18,612 --> 00:00:23,136
For a quick overview of this topic, we’ll firstly have a broad look at setting up a digital model for Simulink,
为了快速了解本主题的概要,我们首先大致看看如何为Simulink设置一个数字模型,
6
00:00:23,136 --> 00:00:28,894
then we’ll look at using SysPhS patterns for creating predefined Simulink blocks.
然后使用SysPhS模式来创建预定义的Simulink块。
7
00:00:28,894 --> 00:00:31,567
In this exercise, we will use some predefined Simulink components,
在这个练习中,我们将使用一些预定义的Simulink组件,
8
00:00:31,567 --> 00:00:37,325
so we’ll look at how to model complex Simulink components in Enterprise Architect using SysPhS,
因此,我们会看看如何在Enterprise Architect使用SysPhS建模复杂的Simulink组件。
9
00:00:37,325 --> 00:00:41,437
then we will generate our Simulink model and run a simulation from this,
然后,我们生成Simulink模型,运行它的仿真,
10
00:00:41,437 --> 00:00:42,054
and finally
最后
11
00:00:42,054 --> 00:00:46,990
we’re looking to options for debugging any issue in the generated Simulink script
我们来看看调试所生成的Simulink脚本中问题的选项。
12
00:00:47,420 --> 00:00:48,295
for this example
本例中
13
00:00:48,295 --> 00:00:52,014
we are modeling a simple binary counter using flip flops
我们建模一个使用触发器的简单的二进制计数器
14
00:00:52,014 --> 00:00:56,828
but we will use it to provide a number of divisions of a clock frequency
但我们用它来提供时钟分频
15
00:00:56,828 --> 00:00:59,891
this type of frequency division was common inside
通俗一点说,这种类型的分频
16
00:00:59,891 --> 00:01:06,236
an early microprocessor where we had options for setting fast and slow clock speeds for the processor
在早期的微处理器很常见,可以用于设置处理器的时钟速度快慢
17
00:01:06,236 --> 00:01:16,300
so all we use is a digital square wave clock as an input and see how in our simulation in Simulink.
因此,我们使用一个数字方波时钟作为输入,看看Simulink中的仿真。
18
00:01:16,300 --> 00:01:18,270
the frequency output from each of the flip flops in the series hieressing the initial clock frequency
序列中每个触发器频率输出继承初始的时钟频率
19
00:01:18,810 --> 00:01:21,810
before we start creating diagrams and elements
在开始创建图形和元素之前
20
00:01:21,810 --> 00:01:22,810
we first of all
我们首先
21
00:01:22,810 --> 00:01:24,610
set our perspective to SysML
设置SysML的perspective
22
00:01:25,020 --> 00:01:32,950
this opens the model wizard. from this we can access some SysPhS foundation packages that we need to reference in the model
这里打开建模指南。从这里,我们可以访问一些需要在模型中引用的SysPhS基础包
23
00:01:33,970 --> 00:01:36,820
it is best to create a package to hold both
最好创建一个包来容纳它们
24
00:01:37,120 --> 00:01:41,114
Then select SysPhS and load the two libraries into the package in the browser
然后选择SysPhS,加载两个库到项目浏览器中的包
25
00:01:41,114 --> 00:01:41,780
26
00:01:42,900 --> 00:01:45,480
now let’s create a block definition diagram
现在,创建一个块定义图
27
00:01:49,320 --> 00:01:54,223
for the simulation we need to set up a reference to the SysPhS library
为了仿真,需要设置到SysPhS库的引用
28
00:01:54,223 --> 00:01:57,410
so we drag this library package onto the diagram
因此,把这个库的包拖到图上【本中英字幕由UMLChina整理翻译】
29
00:01:57,770 --> 00:02:02,630
we first set the package boundary on the block definition diagram to selectable
我们首先设置块定义图的包边界为selectable
30
00:02:05,380 --> 00:02:07,610
then from the package toolbox
然后,从包的工具箱
31
00:02:08,720 --> 00:02:13,260
we can create an import connector to reference the SysPhS packages
我们可以创建一个import连接器来引用该SysPhS包
32
00:02:18,450 --> 00:02:20,684
in terms of blocks for our model
针对模型中的块
33
00:02:20,684 --> 00:02:22,696
let’s start with a simplest
我们先从最简单的开始
34
00:02:22,696 --> 00:02:28,730
there is a SysPhS block for a Simulink constant that we use for setting a logical true state
这是一个SysPhS块,表达一个用于设置逻辑真状态的Simulink常数
35
00:02:29,010 --> 00:02:31,670
this can be accessed from the SysPhS patterns
这可以从SysPhS模式访问
36
00:02:37,860 --> 00:02:41,070
And the Sources and sinks, and the Constant
选Sources and sinks和Constant
37
00:02:46,500 --> 00:02:51,050
now all we want is a logical clock to get a digital pulse signal
现在我们需要一个逻辑时钟,以获得一个数字脉冲信号
38
00:02:51,560 --> 00:02:55,860
we select the SysPhS toolbox and drag on a Simulink Block
我们选择SysPhS工具箱,拖上来一个Simulink Block
39
00:02:57,230 --> 00:03:00,090
then we need to create another block for our flip flop
然后,需要为触发器创建另一个块
40
00:03:05,360 --> 00:03:08,740
All we want is a reference to a Simulink digital clock
需要引用到Simulink的数字时钟
41
00:03:09,020 --> 00:03:12,770
so let’s get the correct Simulink path for a digital clock
因此,先要取得正确的Simulink数字时钟路径
42
00:03:13,130 --> 00:03:15,470
this being a Simulink component
既然这是一个Simulink组件
43
00:03:15,470 --> 00:03:18,280
we find it in the Simulink Library Browser
可以在Simulink Library Browser里找
44
00:03:18,590 --> 00:03:22,224
you can see this under the Simulink Extras/Flip Flops
在Simulink Extras/Flip Flops下面
45
00:03:22,224 --> 00:03:22,830
46
00:03:23,570 --> 00:03:27,371
we open the parameters dialogue and work out the path
打开参数对话框,找到其路径
47
00:03:27,371 --> 00:03:30,630
this can be accessed using CTRL+L
可以用CTRL+L来访问
48
00:03:36,550 --> 00:03:37,515
in this case
本例中
49
00:03:37,515 --> 00:03:42,344
it is simulink_extras/Flip Flops/Clock
就是simulink_extras/Flip Flops/Clock
50
00:03:42,344 --> 00:03:43,310
51
00:03:44,020 --> 00:03:47,450
then we input that in the block in the SimulinkBlock name
然后我们把它输入到SimulinkBlock的名称中
52
00:03:59,320 --> 00:04:04,302
the earlier clock component that we need to use is also predefined in Simulink
之前需要使用的时钟组件也是在Simulink中预定义
53
00:04:04,302 --> 00:04:05,797
that is a flip flop
是一个触发器
54
00:04:05,797 --> 00:04:06,296
55
00:04:06,296 --> 00:04:08,040
Again, we get the path from Simulink
一样,我们从Simulink获得路径
56
00:04:08,450 --> 00:04:14,330
replaces in the name field on the flip flop block under the hitting SimulinkBlock
替换当前所点击的SimulinkBlock的名称栏
57
00:04:20,820 --> 00:04:28,435
the Simulink digital clock has one key parameter that we need to define as a PhS constant on the block
Simulink数字时钟有一个关键参数,我们需要定义为块上的PhS常数
58
00:04:28,435 --> 00:04:30,720
this is period and it’s of type time
该参数是时间周期,类型是时间
59
00:04:30,720 --> 00:04:32,750
which is in seconds
以秒为单位
60
00:04:32,750 --> 00:04:34,781
for this, we drag from the SysPhS toolbox a Simulink Parameter
因此,我们从SysPhS工具箱拖上来一个Simulink Parameter
61
00:04:34,781 --> 00:04:36,558
62
00:04:36,558 --> 00:04:37,320
we name it Period
命名为Period
63
00:04:41,360 --> 00:04:42,994
for the Period’s type which is time
因为Period的类型为时间
64
00:04:42,994 --> 00:04:49,260
use CTRL+L to set the classifier to Time in the SysPhS library
使用CTRL+L设置类元为SysPhS库中的Time
65
00:04:55,320 --> 00:04:58,860
for the time we can set this as a constant to 2
时间可以设置为一个常数2
66
00:04:58,860 --> 00:04:59,618
67
00:04:59,618 --> 00:05:00,630
for example half a HZ
例如,半HZ
68
00:05:00,630 --> 00:05:02,400
a period of 2 seconds
2秒的周期
69
00:05:02,400 --> 00:05:05,940
the first second is true the next second false or 0
第1秒为真,下一秒为假或0
70
00:05:06,220 --> 00:05:08,178
it also needs an output port
也需要一个输出端口
71
00:05:08,178 --> 00:05:12,340
this will need to be a port of type BooleanOutSignalElement
端口类型为BooleanOutSignalElement
72
00:05:12,620 --> 00:05:16,030
so we drag this from our package reference under the block
因此,我们从引用的包中把这个拖到块的下方
73
00:05:21,690 --> 00:05:23,760
then we name it as y
命名为y
74
00:05:26,990 --> 00:05:36,568
for the flip flop in Simulink, it has ports J K Q and CLK, so we need to set them up.
Simulink中的触发器有端口J、K、Q和CLK,因此我们需要设置它们
75
00:05:36,568 --> 00:05:42,617
note that these are Simulink components. these differ to the Modelica code world in that these ports are not identified by a name
注意,这是Simulink组件,和Modelica的代码有所不同,这些端口不是通过名称来标识
76
00:05:42,617 --> 00:05:45,390
rather a simply referenced by an array
而是通过array简单引用
77
00:05:45,670 --> 00:05:56,632
hence the ordering of the creation of these is critical.
the ordering in the Simulink array is from top to bottom for the inputs and top to bottom to the outputs
因此,创建的次序至关重要。Simulink array的次序,对输入是自顶而下,输出也是自顶而下
78
00:05:56,632 --> 00:05:58,915
so for your inputs to the J K flip flop
因此对于到J、K的输入
79
00:05:58,915 --> 00:06:01,199
it’s critical that we start with J
要从J开始
80
00:06:01,199 --> 00:06:01,884
Then do CLK
然后是CLK
81
00:06:01,884 --> 00:06:02,570
then do K
然后是K
82
00:06:02,950 --> 00:06:08,679
these are nonetheless shown in alphabetical order on the block.
尽管在块上是以字母顺序显示。
83
00:06:08,679 --> 00:06:14,000
we drag on the input ports. This is a BooleanInSignal and then name them to match these ports on the Simulink component
我们拖上来BooleanInSignal输入端口,让它的命名匹配Simulink组件的端口
84
00:06:48,180 --> 00:06:52,650
then we do the same for output ports using BooleanOutSignal
同样,用BooleanOutSignal对输出端口做同样的事情
85
00:06:52,930 --> 00:06:53,561
86
00:06:53,561 --> 00:06:55,456
Again, this is ordered by q
同样,顺序是q
87
00:06:55,456 --> 00:06:56,720
then qn
然后 qn
88
00:07:19,760 --> 00:07:21,085
in this section
在这一节
89
00:07:21,085 --> 00:07:25,060
we will create the main block that will contain the IBD diagram
我们将创建包含IBD图的块
90
00:07:25,340 --> 00:07:30,830
this new diagram is where we connect these ports as parts to form our flip flop counter
在这个新图中,我们把这些端口当成部件连接起来,形成触发器计数器
91
00:07:31,420 --> 00:07:34,260
now let’s create a block for the binary counter
现在来创建二进制计数器的块
92
00:07:34,940 --> 00:07:38,920
then we created a child diagram on this block called Counter
然后在这个块上面创建一张子图,称为Counter
93
00:07:45,340 --> 00:07:49,230
on which we then drag on our blocks as components
然后把我们的块作为组件拖上去
94
00:07:49,640 --> 00:07:50,176
95
00:07:50,176 --> 00:07:54,470
for this, it’s recommended to use the all option in the Paste dialogue
为此,推荐在Paste对话框中使用all选项
96
00:08:00,340 --> 00:08:02,570
to display these in the compartments
为了以分栏方式显示
97
00:08:02,850 --> 00:08:04,588
we delete the properties
我们删除属性
98
00:08:04,588 --> 00:08:07,320
the first is the clock period property
首先是时钟周期属性
99
00:08:08,080 --> 00:08:09,870
to keep the diagram clear
为了保持图形清爽
100
00:08:09,870 --> 00:08:15,914
we order the diagram properties to not show the port classifiers and the property types
我们设置图形的属性为不显示端口的类元和属性的类型
101
00:08:15,914 --> 00:08:18,600
this gives a simpler view of just the port name
只保留端口名称,看起来更简洁
102
00:08:25,150 --> 00:08:26,717
for our Constant part
对于Constant部件
103
00:08:26,717 --> 00:08:31,420
this needs to pass a logical 1 or true state to our j and k port
需要传送一个逻辑1或真给j和k端口
104
00:08:31,940 --> 00:08:34,490
we will set an appropriate name for this
给这个起一个恰当的名字
105
00:08:34,890 --> 00:08:34,891
106
00:08:34,891 --> 00:08:37,600
we also give the clock a more meaningful name
也给时钟一个更有意义的名字
107
00:08:42,370 --> 00:08:45,400
Then we create four parts of time flip flop
然后,创建4个时间触发器部件
108
00:09:00,790 --> 00:09:04,500
let’s name these as Flip Flop 1 to 4
命名为Flip Flop 1到4
109
00:09:14,510 --> 00:09:16,320
now we reorganize the ports
现在,重新组织端口
110
00:09:16,320 --> 00:09:18,810
placing the outgoing ports on the right
把输出端口放在右侧
111
00:09:25,130 --> 00:09:30,687
then we need to set our connectors between the relevant ports to fit our proposed model
然后我们需要设置相关端口之间的连接器,以匹配我们的模型
112
00:09:30,687 --> 00:09:35,390
the first is from the Clck output to the clock port on the first flip flop
第一个,从Clck输出到第一个触发器的时钟端口
113
00:09:35,670 --> 00:09:41,510
the subsequent flip flops are connected from the q to the proceeding clock import
随后的触发器从q连接到后续的时钟输入
114
00:09:44,640 --> 00:09:51,330
then we set the j and k ports to true by connecting this to the BoolTrue part
然后,通过把这个连接到BoolTrue部件,我们设置j和k端口为真
115
00:10:00,730 --> 00:10:01,072
OK
116
00:10:01,072 --> 00:10:03,810
that completes our IBD setup
这样就完成了IBD的设置
117
00:10:04,480 --> 00:10:06,810
let’s now configure our simulation
现在来配置仿真
118
00:10:07,090 --> 00:10:09,903
we go back to the block definition diagram
回到块定义图
119
00:10:09,903 --> 00:10:13,890
we see that we have a Counter block populated with the new parts
我们看到,Counter块添加了新的部件
120
00:10:14,260 --> 00:10:15,428
121
00:10:15,428 --> 00:10:19,870
for the simulation, we start by creating an artifact of type SysMLSim Configuration
首先,创建一个artifact,类型为SysMLSim Configuration
122
00:10:20,390 --> 00:10:24,440
double clicking on this opens up the simulation configuration
双击这个,打开仿真配置
123
00:10:25,200 --> 00:10:26,280
on opening this
打开这个
124
00:10:26,280 --> 00:10:29,250
we firstly select the package to simulate
首先选择要仿真的包
125
00:10:31,770 --> 00:10:34,600
ensure the Simulink library is referenced
确保Simulink库已被引用【本中英字幕由UMLChina整理翻译】
126
00:10:35,600 --> 00:10:41,650
set the parent block for the SysML model that we’re simulating, in this case is the counter block
设置正在仿真的SysML模型(本例为Counter块)的父块
127
00:10:41,930 --> 00:10:44,800
we set this a SysMLSimModel
把这个设为SysMLSimModel
128
00:10:45,460 --> 00:10:51,570
now we see the list of properties available to plot, so we can select which of these we want to use
现在可以看到可用于绘图的属性列表,我们可以选择要用到的
129
00:10:59,110 --> 00:11:01,240
now we can run the simulation
现在运行仿真
130
00:11:01,560 --> 00:11:03,810
the plot in Simulink is complex
Simulink的图很复杂
131
00:11:04,710 --> 00:11:06,950
so let’s simplify this
我们来简化一下
132
00:11:07,230 --> 00:11:10,657
in order to open the generated model in Simulink
为了在Simulink中打开所生成模型
133
00:11:10,657 --> 00:11:11,800
134
00:11:11,800 --> 00:11:12,485
135
00:11:12,485 --> 00:11:13,400
we access the EA generator and select file
我们访问EA生成器,选择文件
136
00:11:19,200 --> 00:11:22,862
here we can see the component that we created in the SysML model
这里我们可以看到在SysML模型中创建的组件
137
00:11:22,862 --> 00:11:23,293
138
00:11:23,293 --> 00:11:23,508
139
00:11:23,508 --> 00:11:23,939
140
00:11:23,939 --> 00:11:28,463
is shown in the Simulink format along with the connectivity that we set up in our SysML model
以及我们在SysML模型中设置的连接,以Simulink格式展示
141
00:11:28,463 --> 00:11:28,894
142
00:11:28,894 --> 00:11:29,110
143
00:11:29,590 --> 00:11:33,340
we can run this and view the plot and change all we want to view
我们可以运行这个,查看图表,改变想看的内容
144
00:11:39,950 --> 00:11:42,750
we start with the output of Flip Flop 1
从Flip Flop 1的输出开始
145
00:11:43,030 --> 00:11:45,001
then select the last output
然后选择最后一个输出
146
00:11:45,001 --> 00:11:46,410
which is q 4
即q 4
147
00:11:47,170 --> 00:11:48,638
with each q enabled
对于每个有效的q
148
00:11:48,638 --> 00:11:54,270
we see the simulation of the clock frequency being heard for each flip flop that is passed through
我们看到仿真,时钟频率被每个所通过的触发器接收到
149
00:12:00,960 --> 00:12:03,041
when doing a complex SysML model
当做一个复杂的SysML模型时
150
00:12:03,041 --> 00:12:06,070
there are bound to be issues with generation of the plot
图表的生成多半会出现问题
151
00:12:06,400 --> 00:12:07,259
so on that note
因此,这个地方
152
00:12:07,259 --> 00:12:12,415
let’s have a look at the debugging an issue resolution when generating the Simulink
我们来看看如何调试并解决生成Simulink时出现的问题
153
00:12:12,415 --> 00:12:12,630
154
00:12:12,980 --> 00:12:13,460
firstly
首先
155
00:12:13,460 --> 00:12:14,902
we set up an error
我们设置一个错误
156
00:12:14,902 --> 00:12:19,710
we do this by sending our wrong connectors to the block not to the port
我们把连接器连向块,而不是端口
157
00:12:28,630 --> 00:12:28,863
now
现在
158
00:12:28,863 --> 00:12:30,500
when we run the simulation
我们运行仿真时
159
00:12:30,500 --> 00:12:34,240
we can see that there is an error created in the code build, this is viewed in the System Output.
可以看到,构建代码时有一个错误,可以在System Output那里查看
160
00:12:35,060 --> 00:12:38,919
if we go to the SysML Simulation in the System Output
如果我们去往System Output中的SysML Simulation
161
00:12:38,919 --> 00:12:39,600
162
00:12:39,600 --> 00:12:39,827
163
00:12:39,827 --> 00:12:40,962
164
00:12:40,962 --> 00:12:43,460
we see the error that it is generated
可以看到生成的错误
165
00:12:43,820 --> 00:12:45,447
we double click on this
双击这个
166
00:12:45,447 --> 00:12:49,110
it opens a configuration at the port where the issue occurred
打开一个发生问题的端口的配置
167
00:12:49,440 --> 00:12:50,225
in this case
本例中
168
00:12:50,225 --> 00:12:54,150
we see that the clock is the part where the issue is
Clock是出问题的部件
169
00:12:55,010 --> 00:13:00,370
an alternative issue checking method is to open the generator script file directly in Simulink
另一个检查问题的方法是,直接在Simulink中打开生成器脚本文件
170
00:13:03,960 --> 00:13:06,770
then view the diagram and check the connection
然后观察图形,检查连接
171
00:13:07,160 --> 00:13:13,540
then you can run the simulation and view the error and see there is a connector issue
然后,运行仿真,观察错误,可以看到是连接器问题
172
00:13:20,970 --> 00:13:22,267
given this feedback
得到了这个反馈
173
00:13:22,267 --> 00:13:25,080
we can now do a simple correction of the model
就可以对模型做简单的修正
174
00:13:36,660 --> 00:13:36,906
OK
175
00:13:36,906 --> 00:13:38,137
176
00:13:38,137 --> 00:13:41,830
so in conclusion, let’s run over what we have covered in this demonstration
最后,归纳一下本演示的内容
177
00:13:42,110 --> 00:13:50,520
this includes setting up a digital logical model of Simulink by using SysPhS patterns for creating predefined Simulink blocks
包括:通过使用创建预定义Simulink块的SysPhS模式,来设置Simulink数字逻辑模型
178
00:13:51,360 --> 00:13:55,180
modeling other complex Simulink components using SysPhS
使用SysPhS建模其他复杂Simulink组件
179
00:13:55,500 --> 00:14:05,550
generating a Simulink model then simulating and viewing this in Simulink.
running over how to debug an issue and viewing the generated model in Simulink.
生成Simulink模型,仿真,在Simulink中查看,调试问题,
在Simulink中查看所生成模型
180
00:14:06,270 --> 00:14:09,817
although we have focused on using MATLAB Simulink
虽然我们聚焦于MATLAB Simulink
181
00:14:09,817 --> 00:14:15,020
please note that a Simulink scenario can be replicated using SysPhS for Modelica
但是,使用SysPhS for Modelica,Simulink的场景也可以照搬到Modelica
182
00:14:15,920 --> 00:14:23,350
hopefully this gives you a good starting point for getting familiar with the integration and simulation with MATLAB Simulink
希望这个演示能作为你熟悉与MATLAB Simulink集成和仿真的一个好起点
183
00:14:23,630 --> 00:14:26,942
this is all being part of the new SysML SysPhS features available in the Enterprise Architect 15.2
这都是Enterprise Architect 15.2新的SysML SysPhS特性的一部分
184
00:14:26,942 --> 00:14:27,218
185
00:14:27,218 --> 00:14:28,047
186
00:14:28,047 --> 00:14:28,875
187
00:14:28,875 --> 00:14:39,090
for more information on this, see sparxsystems.com/ea152
更多信息,参见sparxsystems.com/ea152【本中英字幕由UMLChina整理翻译】