创建仪表板(Engee应用程序)
我们正在研究开发一个指示器面板的过程,该面板从实时模型接收数据,并作为一个单独的应用程序实现。
示例的描述
Engee平台提供了许多工具,允许您创建用于控制模型的各种自动化工具:指标,遥控器......其中:
*[代码单元格掩码](https://engee.com/helpcenter/stable/ru/guide/masks-main.html )来管理模型
*虚拟仪器(图形画布块)
*[承载自定义应用程序的能力](https://engee.com/helpcenter/stable/ru/feature/genie-engee.html (有一个[关于这个主题的课程](https://engee.com/community/catalogs/academy/sozdanie-polzovatelskikh-prilozhenii-v-engee ))
*[软件模拟管理](https://engee.com/helpcenter/stable/ru/modeling/programmatic-modeling.html )
在本例中,我们将介绍为虚拟仪表板创建图形指示器的过程。 [关于这个主题的另一个例子](https://engee.com/community/ru/catalogs/projects/panel-upravleniia-v-vide-engee-prilozheniia )说明如何使用软件控制命令控制模型的执行(如何实现启动模型执行的按钮)。
虚拟仪表板将作为单独的服务器在Engee平台上运行,启动需要时间(几十秒)。
模型描述
在本例中,指标接受0到100范围内的数据。 超出此范围的值是有限的。 由于Engee中的默认数字格式是Float64,因此值发送块中的代码面向发送8字节数据包(64位)。 该模型启用了"即时指示"(模型设置中的调试面板)来检查指标的正确操作,以及"模拟速度控制"模式,该模式允许您将模型时间减慢为"实时"执行。
模型和设备之间的通信通过模块进行 Engee Function,其接受输入数据并给出关于发送成功的信号。 根据仪表板的要求(清除发送信号),位于模型上的块发送新的数据进行显示。
 
配置UDP连接
模型和仪表板之间的数据传输通过UDP协议进行。
为了避免冲突,每个设备都需要创建两个UDP连接。 在第一个连接(从参数到端口 port)正在发送8个字节的数据。 第二个连接的工作方向相反:块 Engee Function 在端口上打开连接 cts_port (from Clear To Send)并等待Clear To Send(CTS)消息被接收,指示指示面板准备好接收数据。
在模型方面,这些设置在每个块的参数和指示器图标中表示。 你可以看到他们,如果你看看下面的块的面具。
 
创建指示器面板
仪表板上有两个独立的指示器。
更新信息的逻辑、应用程序图形部分的模型以及用于接收数据的端口在应用程序代码中指定。 app.jl.
左侧指示器等待端口5050上的数据并向端口5051发送CTS信号*,
在向端口5053发送CTS消息后,右指示器接收端口5052*上的数据。
至于指标的图形模型,每个指标组件的描述都具有与反应变量相关联的属性。 一旦响应式字符串变量收到更新的值,关联的组件就会自动更新。 例如,下面是指定左侧指示器上箭头属性的行:
路径(d="m21.287 24.405-6.1832 13.013 4.5464-13.716z",style="fill:#f00;stop-color:#000000;transition:transform.2s线性",变换! ="circular_gauge_string")
注意物业
transform! = …. 与应用程序的语法!允许您在Julia中创建响应式属性,将其更新链接到数据模型中某个变量的更新。
由于设备由SVG矢量图形元素表示,因此可以通过调整值来更改它们的大小
width和height它们所在的容器。
 
启动应用程序
该应用程序在Engee平台上的单独服务器上运行,并在特定地址可用 app.url. 具有此地址的页面可以直接在当前单元格的输出中或在单独的窗口中打开。
app = engee.genie.start("$(@__DIR__)/app.jl", log_file="$(@__DIR__)/log.txt");
# display("text/html", """<iframe src="$(string(app.url))" width="600" height="450" style="border: none;"></iframe>""";)
专责小组 display 从上一个单元格中,如果您取消注释,它允许您打开脚本内的仪表板。
服务器完成与应用程序的工作后,在这个地方只会有一个标志"服务器可用",因此,最好使用静态屏幕截图将界面放置在报告中。
获取链接 app.url 并在单独的页面中打开它,执行以下单元格。 此链接也将只工作,只要与应用程序的服务器正在运行。
display("text/html", """<a href="$(string(app.url))" target="_blank" rel="noopener noreferrer">Открыть в отдельном окне</a>""")
若要停止此服务器以进行调试或重新启动,请取消注释并执行以下代码:
# engee.genie.stop("$(@__DIR__)/app.jl");
仪表板操作图示
我们附上这个仪表板的操作的一个小插图。:
 
结论
我们回顾了一个项目,该项目很好地说明了开发自定义仪表板的过程,该仪表板实时接收来自Engee模型的数据。