工程建模

更新时间:
2024-04-23
下载文档

工程建模

本节内容介绍如何进行工程建模操作。

资源类型

VSOA-Port 资源类型

表 1 VSOA-Port 主要类型

接口接口名称
CALL调用-返回接口
PUB发布-订阅接口
DGRAM数据报接口

表 2 VSOA-Port 类型细分

类型选项说明
GET创建 Type 为 CALL,Method 为 GET 的 VSOA-Port 资源
SETType 为 CALL,Method 为 SET 的 VSOA-Port 资源
PUBType 为 PUB,Quick 为 false 的 VSOA-Port 资源
QPUBType 为 PUB,Quick 为 true 的 VSOA-Port 资源
DGRAMType 为 DGRAM,Quick 为 false 的 VSOA-Port 资源
QDGRAMType 为 DGRAM,Quick 为 true 的 VSOA-Port 资源

表 3 VSOA-Port 资源属性

属性名称说明
URL为资源路径,格式为路径格式字符串
Type接口类型
Quick快速发布属性
Send_jstructJSTRUCT 类型的请求,可以选择空白行或者 Port-JStruct 中的资源,默认为空
Recv_jstructJSTRUCT 类型的回复,可以选择空白行或者 Port-JStruct 中的资源,默认为空
NotesVSOA-Port 说明,可以为任意字符

Port-JStruct 数据类型

在 Port-JStruct 资源窗口中,如下图所示。

  • 1: Port-JStruct 的名称,点击蓝色部分可以修改此 Port-JStruct 的名称。
  • 2:子结构数组,每个子结构都是一个对象。在结构数据嵌套场景中,需要定义此字段。

Type 设置

点击 Type 后,可以选择显示的数据类型,如下图所示。

成员可以被分为五个类型:布尔型、整数型、浮点数型、字符型和结构体。

  1. 布尔型有 bool 一个成员。选择布尔型中成员点击,添加成员,如下图所示。

    • 1:成员的数据类型。
    • 2:成员的名称,蓝色的文本,表示可以修改此属性的名称。
    • 3:default 属性,表示该成员在生成代码初始化的默认值,点击蓝色文本修改此属性。
    • 4:req 表示解析 JSON 时是否必须存在该 struct 成员。如果为 false,则意味着如果 JSON 中不存在该成员,则在解析时将忽略该成员。如果是 true,如果该成员在 JSON 中不存在,解析函数将返回错误。req 默认为 false,点击选框后 req 值变为 true。
    • 5:点击删除按钮删除此成员。
  2. 整数型有 intint8_tint16_tint32_tuint8_tuint16_tuint32_tlong 八个成员,选择整数型中成员点击,添加成员,如下图所示。

    在整数型的成员中,有 min、max、near 三个特殊配置,其余与 bool 相同。

    • min:数值类型的成员 min,代表此数值成员允许的最小值,点击选择框后,代表配置最小值,选择框被选择后可以点击蓝色文本可编辑此成员。
    • max:数值类型的成员 max,代表此数值成员允许的最大值,点击选择框后,代表配置最大值,选择框被选择后可以点击蓝色文本可编辑此成员。
    • near:该字段表示解析 JSON 时该成员超过限制时的处理方法。当该成员为 false 时,表示超过限制时解析失败,当该成员为 true 时,表示超过使用限制值的限制。默认值为 false,选择后为 true。
  3. 浮点数型有 floatdouble 两个成员,选择浮点数型中的成员点击,添加成员,如下图所示。

    在浮点数型的成员中,与整数型成员属性配置相同,但浮点数型相关配置变化为了浮点数。

  4. 字符型有 char * 一个成员,选择字符型中的成员点击,添加成员,如下图所示。

    在字符型的成员中的操作与 bool 相同。

  5. 结构体有 struct 一个成员,struct 与 substruct 相关联,首先在 substruct 中创建结构体。添加子结构体,点击 substruct 右侧的添加按钮,即可以添加一条子结构体,如下图所示。

    子结构体的添加成员操作与 JStruct 相同。 在 Port-JStruct 添加 struct 成员,点击 struct 按钮可以选择自己创建的子结构体,如下图所示。

Array 设置

点击 Array 后,可以添加数组类型的成员,如下图所示。

在数组类型的成员中,有两个特殊配置:

  • 1:表示该数组成员的大小,点击可以修改。
  • 2:该字段表示 JSON 解析时对应数组成员的最小成员数。如果数组的长度小于此字段,则解析失败并返回错误。选择框被选择后可以修改。

Custom-Struct 数据类型

Custom-Struct 资源成员与 Port-JStruct 资源成员相同,资源成员属性不同。如下图所示。

  • 1:成员的数据类型。

  • 2:成员的名称,蓝色的文本,表示可以修改此属性的名称。

  • 3:default 属性,表示该成员在生成测试代码时的默认值,点击蓝色文本修改此属性。

数组成员属性,如下图所示。

  • 1:数组长度。

资源管理

资源管理视图在大纲视图 Outline 中,点击 Resource 进入资源管理界面。

说明:

资源管理视图主要包含三大类:VSOA-Port、Port-JStruct、Custom-Struct。

VSOA-Port 资源管理

添加 VSOA-Port 资源

  1. 点击 VSOA-Port 右方添加按钮后显示六个选项,分别是 GET、SET、PUB、QPUB、DGRAM 和 QDGRAM。

  2. 如选择 GET 选项,VSOA-Port 的修改窗口如下图所示。

    说明:

    其余选项窗口界面可参考 GET 选项。

  3. 点击 Finish 按钮保存 VSOA-Port 资源。

修改 VSOA-Port 资源

  1. 在资源管理视图中双击 VSOA-Port 资源,打开 VSOA-Port 的修改窗口,如下图所示。

  2. 在 Editor 界面选择接口后,右键选择 Open Port 菜单,打开 VSOA-Port 的修改窗口,如下图所示。

删除 VSOA-Port 资源

  1. 点击 VSOA-Port 资源的删除按钮,会弹出确认删除的提示窗口,如下图所示。

  2. 点击 Yes 即可删除该 VSOA-Port 资源并删除 Editor 界面上的 VSOA-Port 接口,

VSOA-Port 资源分组

VSOA-Port 资源会根据被挂载情况自动进行分组,未被挂载的资源在 Unused 中,已经挂载的资源会被自动分到被挂载 Service 中,分组名称为 Service 名称,如下图所示。

Port-JStruct 资源管理

添加 Port-JStruct 资源

  1. 点击资源管理视图中 Port-JStruct 的添加按钮,如下图所示。

  2. 在文本框中输入 Port-JStruct 资源的名称,如下图所示。

  3. 输入名称后,敲击回车,会打开 Port-JStruct 资源配置窗口。在 Port-JStruct 资源配置窗口中点击 Finish 保存新创建的 Port-JStruct 资源并关闭窗口。

修改 Port-JStruct 资源

  1. 双击资源管理视图中的 Port-JStruct 打开 Port-JStruct 修改窗口,如下图所示。

  2. 修改完成后,点击 Finish 按钮进行保存,如下图所示。

删除 Port-JStruct 资源

  1. 点击右侧删除按钮删除此资源,如下图所示。

  2. 点击 Yes 即可删除。

Custom-Struct 资源管理

添加 Custom-Struct 资源

  1. 点击 Struct 右侧添加按钮。

  2. 在文本框中输入 Struct 资源的名称。

  3. 输入名称后,敲击回车,会打开 Custom-Struct 资源配置窗口。

  4. 点击 Finish 保存新创建的 Custom-Struct 资源并关闭窗口。

修改 Custom-Struct 资源

  1. 打开 Struct 修改窗口,如下图所示。

  2. 在资源管理视图中双击想要修改的 Struct 资源,即可打开 Struct 修改窗口。

  3. 修改完成后,点击 Finish 按钮进行保存并退出修改窗口。

删除 Custom-Struct 资源。

  1. 点击对应 Port 资源的删除按钮,即可删除该 Port 资源并删除 Editor 界面上的 Port 接口,如下图所示。

  2. 点击 Yes 即可成功删除。

资源导入

  1. 在资源管理视图中,点击导入按钮,可以打开资源导入窗口。如下图所示。

  2. 打开资源导入窗口,点击 template.xlsx ,选择资源存放路径,下载资源导入模板,如下图所示。

  3. 打开资源导入模板,如下图显示。

    说明:

    在 Excel 文件中一共存在三个工作表,分别为 VSOA PortJStructCustom Struct,对应资源管理中的 VSOA-PortPort-JStructCustom-Struct。 如在 VSOA-Port 工作表中,一行数据表示一个 VSOA-Port 资源,每列代表 VSOA-Port 资源中的属性。Port-JStruct 与 Custom-Struct 同理。

  4. 在 Excel 文件中配置完成后,点击资源导入窗口中的 Browse 按钮,选择 Excel 文件。

  5. 导入后,资源会展示在资源导入窗口中,分为三个工作表展示

注意:

如果工程中已经存在的资源和 Excel 表中资源重复,则会显示冲突,如直接点击 Import 按钮,会将工程中已存在的资源覆盖。 存在冲突的情况下,可以点击 Remove duplicate 按钮处理完当前页面的冲突后,点击 Import 按钮导入资源。

服务建模

服务进程 Server

  1. 点击模型编辑器左侧工具栏按钮 Constructor > Server。在编辑区域划一片区域创建一个 Server 模型。

  2. 选中 Server 模型,在属性视图中编辑 Server 模型属性。

    表 4 模型属性

    属性说明
    NameServer 模型名,新建 Server 模型名为 server+i,i 自动叠加,点击对应 Value,可以更改名称
    IPServer 模型 IP
    BoundsServer 模型位置信息,点击 Value 栏中内容,可以修改模型位置信息

服务 Service

  1. 点击 Constructor > Service 按钮。在 Server 模型上划一块区域创建 Service 模型。

  2. 选中 Service 模型,在属性视图中编辑 Service 属性。

    表 5 模型属性

    属性说明
    NameService 名,新建 Service,模型名为 serc+i,i 自动叠加,点击对应 Value,可以更改名称
    PasswordService 密码
    Bindifvsoa_server_bind_if 特性
    PortService 端口。与其所属 Server 的 IP 组成唯一位置,范围 3101~5000,新建 Service 的端口值 从 3101 自动叠加
    PositionService 位置。当 Service 的 IP+Port 与 Position 同时设置时,IP+Port 优先级更高
    Workers设置服务线程池,取值范围 0 - 8,当设置为 0 时表示该 Service 为单线程
    BoundsServer 模型位置信息,点击 Value 栏中内容,可以修改模型位置信息

端口 CallPort

  1. 点击 Constructor > CallPort 按钮。

  2. 点击 Service 模型,为 Service 添加一个 Call 类型的资源。

  3. 点击 Service 模型,打开资源选择弹框。选择目标资源,点击 Finish 按钮。

  4. 选中 Call 资源在属性视图编辑其属性。

    表 6 CallPort 模型属性

    属性说明
    ID自动生成,不可编辑,格式为:[Service Name]-[URL]/[Name]
    Description资源描述
    URL资源URL 不可编辑
    Name创建资源时确定,不可编辑
    Enable WorkerCALL 是否启用工作线程,默认值为 false
    ParallelCALL 是否启用并发,默认值为 false
    Max Queued设置最大队列,取值范围:0~不限
  5. 创建一个 Server 模型并为其添加两个 Service。

  6. 点击链接按钮 Connector > Service,再点击源 Service,最后点击目标 Service 的 Call 资源。

  7. 连接源 Service 的 Output 与目标 Service 的 Input 。

端口 PubPort

  1. 点击工具栏按钮 Constructor > PubPort。点击 Service 模型为 Service 模型添加 Pub 类型 Port 资源。

  2. 弹出 Pub 类型 Port 资源选择弹框。选择一个资源点击 Finish 按钮。

  3. 为 Service 模型添加一个 Pub 类型的 Output,并显示 Pub 资源的 URL。

  4. 选中 Pub 类型的 Output,在属性视图编辑其属性。

  5. 点击 Connector > Service 按钮。点击源 Service 的 Pub 资源。选择目标 Service。

  6. 将源 Service 的 Pub 类型的 Output 与目标 Service 的 Pub 类型的 Input 连接。

端口 DgramPort

  1. 点击 Constructor > DgramPort 按钮。点击 Service 模型。

  2. 打开资源选择弹框。选择目标资源,点击 Finish 按钮。

  3. 选中 Datagram 资源,在属性视图编辑其属性。

  4. 点击 Connector > Service 按钮。选择源 Service。点击目标 Service 的 Datagram 资源。

  5. 连接源 Service 的 Datagram 类型的 Input 与目标 Service 的 Datagram 类型的 Output 。

说明:

Call 类型的资源、Pub 类型的资源和 Datagram 类型的资源都属于 Port 资源。Port 资源全局唯一。当一个 Port 资源被 Service 使用后,直到该资源被释放前,别的 Service 都不能再使用该资源。当资源所在的模型被销毁时,与资源相关的连接被删除,资源将会被释放。 存在以下情况,资源所在的模型会被销毁:

  • Call 类型的 Input 模型被删除、Pub 类型的 Output 被删除、Datagram 类型的 Input 模型被删除。
  • Service 模型被删除时,Service 模型被销毁,其下所有 Input/Output 模型被销毁。
  • Server 模型被删除时,Server 模型被销毁,其下所有 Service 被销毁。

组件建模

  1. 打开组件模型编辑器。

  2. 选中 Service 模型。点击编辑器工具栏 Open Service Editor 按钮。

  3. 为该 Service 添加多个 Call 类型的 Output

说明:

Service 内部由组件构成,组件由事件 Event 构成。 组件一共有六种:Component(基本组件)、PipeCom(单通道管道组件)、MPipeCom(多通道管道组件)、AsyncCallMCom(异步调用组件)、ConnSyncMCom(连接同步组件)、SubRegulMCom(变速器组件)。

基础组件 Component

  1. 点击模型工具栏按钮 Constructor > Component

  2. 在 Service 黑框内按住鼠标左键划动选择一片区域。

  3. 新增 Component 组件并选中,在属性视图编辑其属性。

    表 7 Component 组件模型属性

    属性说明
    ID所有类型组件之间 ID 不能重复,新建组件 ID 格式:com[i],i 自动叠加
    Description组件描述
    Type组件类型,不可编辑
    BoundsService 模型位置信息,点击 Value 栏中内容,可以修改模型位置信息
  4. 选中 Event,在属性视图编辑其属性,如下图所示。

    表 8 Event 事件模型属性

    属性说明
    ID在同一个组件内 Event ID 不能重复,新建 Event ID 格式:event[i],i 自动叠加
    Description事件描述
  5. 点击模型工具栏按钮 Event & Port > Event。选择目标组件。

  6. 点击模型工具栏连接按钮 Connector > Component。选择 Service-Input。点击目标 Event。

  7. 在属性视图编辑 Input 属性。

    表 9 Event-Input 属性

    属性说明
    Input-TypeEvent Input 类型,不可编辑
    Input-FromService-Input ID,不可编辑
    Input-Reply当前端口是否执行 reply 操作
  8. 连接 Event 和 Service-Output。

    说明:

    连接成功后自动为 Event 设置 VSOA 类型的 Output。

  9. 参考上述步骤创建新的 component,设置 Event-Output。并进行连接,如下图所示。

  10. 在属性视图编辑 Input 属性

    表 10 Event-Output(Com)属性
    属性说明
    Output-TypeEvent Output 类型,值为 COM
    Output-DataType & TypeValueCOM 类型的 Event Output 可以设置向目标 Event Input 传递数据的数据类型
    Connect level调整连接的优先级。在模型上连接时无序的,但是在生成代码时需要连接有序,来确定生成代码的逻辑
  11. 点击 DataType 属性或者 TypeValue属性的 Value ,再点击单元格内的按钮,打开数据类型选择弹框,如下图所示。

    说明:

    DataType 属性为所选数据类型的类型,选择基础数据类型时,值为 BASE;选择在 Custom-Struct 资源中定义的 Struct 时,值为 STRUCT;选择 Default 时,值为 defalut。TypeValue 属性为所选数据类型的名;选择 Default 时,值为空。

  12. 在 Connect level 中,点击连接优先级的 value 值,点击单元格按钮,打开连接优先级调整弹框,调整连接顺序,如下图所示。

  13. 点击模型工具栏按钮 Event & Port > TimerPort 按钮。选择 Input 为空的 Event。

  14. 选中目标 Event ,编辑 TimerPort 属性。

    表 11 TimerPort 属性

    属性说明
    Input-TypeEvent-Input 类型,值为 TIMER,表示定时器触发
    Input-Name定时器名,格式:timer[i],i 自动叠加
    Input-Start定时器触发时间 单位毫秒(ms)
    Input-Perio定时器周期
  15. 点击模型工具栏按钮 Event & Port > ComStartPort。选择 Input 为空的 Event。

  16. 编辑 ComStartPort 属性。

    表 12 ComStartPort 属性

    属性说明
    Input-Name系统初始化 Input 名,格式:comimit[i],i 自动叠加
    Input-TypeEvent Input 类型,值为 SYS_COMINIT,表示系统初始化触发事件
  17. 点击模型工具栏按钮 Event & Port > ConnPort。选择 Input 为空的 Event。

  18. 编辑 ConnPort 属性。

    表 13 ConnPort 属性

    属性说明
    Input-TypeEvent Input 类型,值为 SYS_CONN,表示服务重连触发
    Input-Service受监听的目标服务

单通道管道组件 PipeCom

  1. 点击模型工具栏按钮 Event & Port > PipeCom。在 Service 内部按住鼠标左键划动选择一片区域。

    说明:

    PipeCom 组件只允许具有一个输入端口和一个输出端口的管道组件。在 PipeCom 组件中的 Event-Input 可以来自于 Service-Input,也可以来自于其他 Event 的 Output;Event-Output 只能连接通道组件中事件的 Input 或者 Service-Output。PipeCom 组件中只允许拥有一个事件,该组件不允许新增或者删除事件。

  2. 选中 PipeCom 组件在属性视图编辑其属性,如下图所示。

    表 14 PipeCom 组件模型属性

    属性说明
    ID新建组件 ID 格式:com[i],i 自动叠加
    Description组件描述
    Type组件类型,单通道管道组件类型为 PIPE

多通道管道组件 MPipeCOM

  1. 点击模型工具栏按钮 Constructor > MPipeCom。在 Service 内部按住鼠标左键划动选择一片区域。

    说明:

    MPipeCOM 组件,存在第一个事件的输入端口和用于每个事件的输出端口。MPipeCom 组件中的 Event 输入可以来自于 Service-Input,也可以来自于其他 Event 的 Output;所有 Event 的输出只能连接通道组件中事件的 Input 或者 Service-Input。

  2. 选中 MPipeCom 组件在属性视图编辑其属性。

    表 15 MPipeCom 组件模型属性

    属性说明
    ID新建组件 ID 格式:com[i],i 自动叠加
    Description组件描述
    Type组件类型,多通道管道组件类型为 MPIPE
  3. 在 MPipeCom 组件中添加 Event。选中 MPipeCom 组件在属性视图编辑其属性,如下图所示。

    说明:

    MPipeCom 组件中添加 的 Event 的 Input 类型为 COM_BIND,不可被连接。 MPipeCom 组件的事件,第一个 Event 事件不允许被删除和排序,其余自己添加的 Event 事件允许被删除和排序。

异步调用组件 AsyncCallMCom

  1. 点击模型工具栏按钮 Constructor > AsyncCallMCom。在 Service 内部按住鼠标左键划动选择一片区域。

    说明:

    AsyncCallMCom 组件是一种特殊的多通道管道组件,只允许有一个输入,可以有多个输出。AsyncCallMCom 组件输入可以连接 Service-Input,或连接其他 Event 的 Output;所有 Event 的输出只能连接 Call 类型的 Service-Output。新创建的 AsyncCallMCom 组件,存在一个只能连接 Call 类型 Service-Output 的事件和一个 Finish 类型的事件。

  2. 选中 AsyncCallMCom 组件在属性视图查看和编辑其属性,如下图所示。

    表 16 AsyncCallMCom 组件模型属性

    属性说明
    ID新建组件 ID 格式:com[i],i 自动叠加
    Description组件描述
    Type组件类型, 异步调用组件类型为 MPIPE_ACALL
  3. 选中 AsyncCallMCom 组件的 finish 事件在属性视图编辑其属性,如下图所示。

    表 17 AsyncCallMCom 组件中 finish 事件属性

    属性说明
    Input-Typefinish 事件类型 COM_FIN
  4. 在 AsyncCallMCom 组件中添加 Event。

    说明:

    新增 Event 的 Input 类型为 COM_BIND,不可被连接;Event 的 Output 只允许连接 Call 类型的 Service-Output。AsyncCallMCom 组件中 Finish 之前所有事件完成(接收到回复),最后调用 Finish 事件。用户可以将回复数据缓存起来,在 Finish 事件中处理。

连接同步组件 ConnSyncMCom

  1. 点击模型工具栏按钮 Constructor > ConnSyncMCom。在 Service 内部按住鼠标左键划动选择一片区域。

    说明:

    ConnSyncMCom 组件是一种特殊的多通道管道组件,存在一个 ConnPort 类型的输入端口,每个事件都存在一个输出。新建 ConnSyncMCom 组件自带一个 Event,且 Event 的输入为 SYS_CONN。

  2. 选中 ConnSyncMCom 组件,在属性视图编辑其属性,如下图所示。

    表 18 ConnSyncMCom 组件模型属性

    属性说明
    ID新建组件 ID 格式:com[i],i 自动叠加
    Description组件描述
    Type组件类型,连接同步组件类型为 MPIPE_SCONN
  3. 在 ConnSyncMCom 组件中添加 Event。

    说明:

    所有新添加的 Event 输入为 COM_BIND,不能被连接。 ConnSyncMCom 组件的所有 Event 的 Output 必须连接到同一个Service中 Call 类型的 Service-Output。ConnSyncMCom 组件的所有 Event 的 Output 都有 autoSync 属性,默认值为 true。表示启用 vsoa_client_auto_consistent 自动同步数据。

变速器组件 SubRegulMCom

  1. 点击模型工具栏按钮 Constructor > SubRegulMCom。在 Service 内部按住鼠标左键划动选择一片区域。

    说明:

    SubRegulMCom 组件是一种特殊的多通道管道组件,只允许有一个输入,可以有多个输出。SubRegulMCom 组件中的只有第一个 Event 可以输入来自于 PUB 类型的 Service-Input;所有 Event 的输出只能连接通道组件中事件的 Input 或者 Service-Input。

  2. 选中 SubRegulMCom 组件,在属性视图编辑其属性,如下图所示。

    表 19 SubRegulMCom 组件模型属性

    属性说明
    ID新建组件 ID 格式:com[i],i 自动叠加
    Description组件描述
    Type组件类型,变速器组件类型为 MPIPE_REGUL
  3. 在 SubRegulMCom 组件中添加 Event。并设置属性。

    表 20 SubRegulMCom 组件中 Event 事件属性

    ID新建事件 ID 格式:event[i],i 自动叠加
    Description事件描述
    period变速周期,单位 毫秒(ms),不能小于1ms
    bufSize缓存大小,单位 Byte

    说明:

    所有新添加的 Event 输入为 COM_BIND,不能被连接;所有 Event 的输出只能连接通道组件中事件的 Input 或者 Service-Input。

测试模型建模

如果一个服务内没有组件,则创建一个测试组件。

操作步骤

点击图中所示按钮生成测试组件的工具。

注意:

生成测试模型会为 Service.Input 和 Service.Output 分别创建一个组件 com1com2 ,在 Service.Input 相对应的组件中为每个 Service.Input 添加事件,缺省 event.Output 不做配置;在 Service.Output 相对应的组件中为每个 Service.Output 添加事件,缺省 event.Input 配置为 TIMER。 当成功生成测试组件时,会有弹窗提示 Add successfully!。如果服务内存在组件,则会生成失败,提示内容为 No blank service found!

文档内容是否对您有所帮助?
有帮助
没帮助