Java 和 GraalVM 本机映像:增强制造应用程序中的数据库连接
当今制造业的应用格局被划分为严格的层次结构。从使用ERP系统的管理系统,到使用MES的计划系统,再到使用SCADA的监控系统,一直到最底层的PLC和现场系统实现的控制系统。
虽然大多数管理、规划和监督系统都是用高级面向对象编程语言实现的,但控制系统完全用低级语言实现,其中C是主导编程语言。
这种从高层到低层的突然变化会产生一些问题。需要完全不同的工具和生态系统。在实施上,必须引入完全不同、思维方式不同的开发人员来实施一项任务。必须在两个世界或系统之间定义接口。只是因为不可能继续使用控制级别上的监督级别已知的高级编程语言。现在这种情况已经改变了。例如,在PLC的控制层使用容器技术,我们就可以在这个层次上使用Java等编程语言,打破僵化的层次结构。
Java 是一种广泛使用的高级、面向对象的编程语言。它拥有一个充满活力的社区以及由库和框架组成的生态系统,可提供附加功能,使您能够利用现有工具和解决方案更快、更高效地构建应用程序。
我们将展示如何在 Phoenix Contact PLCnext 上使用 Java,以简化在 PLCnext 上运行的应用程序的开发,并直接与数据库通信以检索和存储应用程序相关信息并将其呈现在 Web 界面上。 Java 中最流行的框架之一是 Hibernate。它简化了将 Java 对象映射到关系数据库表的过程,减少了数据库操作所需的样板代码量。 Hibernate 提供了高级抽象,允许开发人员使用对象而不是直接使用 SQL 查询。这可以缩短开发周期并减少开发工作量。 Hibernate 抽象了不同数据库供应商之间的差异,使得在数据库之间切换变得更容易,而无需进行重大代码更改。本文介绍了 Hibernate 的集成,用于将 PLC 上运行的软件连接到数据库。
PLCnext 上的现代 Java 应用
为了开始实现现代 Java 应用程序,我们建议使用 Quarkus 或 Spring Boot 等应用程序框架。这些框架简化了项目的配置、依赖管理。
对于此示例,我们将使用 Quarkus 的《使用 Hibernate ORM 和 Jakarta 持久性指南》来启动我们的应用程序。源代码示例可以在 github 项目 hibernate-orm-quickstart 上找到。
我们将开始修改应用程序的源代码。我们可以更改Java类07 进入13 并添加一个新字段23 .
代码示例 31 :
我们可以配置数据库 URL 和修改文件 48 的凭据
src/main/resources/application.properties 示例
<前>14前>当应用程序启动时,将在数据库中创建一个表并根据需要进行初始化。启动后,我们可以通过运行在PLCnext 8080端口上的Web界面与数据库进行交互:
请记住,这一切都发生在我们层次结构的控制级别上,中间没有任何其他系统。
GraalVM 本机映像
许多开发人员仍然认为 Java 需要所谓的 Java 运行时环境来执行 Java 字节码,并且不能提供必要的性能。对于嵌入式应用程序来说,情况已不再如此。在本示例中,我们使用 GraalVM Native Image 技术将 Java 代码编译到本机应用程序中。GraalVM 的本机映像编译提供了一个引人注目的解决方案,用于解决 Java 应用程序中启动时间和内存消耗的挑战,特别是在嵌入式系统等资源受限的环境中。通过提前将 Java 应用程序编译为本机可执行文件,与传统的即时 (JIT) 编译相比,GraalVM 显着减少了启动时间和内存开销。
MicroDoc 的 GraalVM 具有为嵌入式设备生成二进制文件的独特功能。在撰写本教程时,GraalVM 支持 32 位和 64 位 ARM 和 x86 处理器。
为了提前编译针对 PLC 53 的 Java 应用程序 ,我们可以使用MicroDoc的GraalVM并在文件68中配置一些编译器选项 .
您可以在以下文章中找到有关交叉编译和调试过程的更多信息:构建和调试 MicroDoc GraalVM Embedded Java 原生映像
为了构建应用程序,您只需使用以下命令:
<前>36前>接下来,我们启动 PLCnext 模拟器。模拟器以 qemu 映像形式提供。模拟器将用下面的行来迎接我们:
<前>44前>
可以使用命令 70 将生成的二进制文件复制到 PLC 它打开 PLC 的安全 shell 并将二进制文件传输到目标系统。您可以使用以下命令启动应用程序:
使用PLCnext cockpit客户端我们还可以查看当前的内存和存储使用情况:
然而,与在 OpenJDK 等 Java 运行时环境中运行应用程序相比,我们还对单个应用程序的启动和内存消耗感兴趣。因此,我们测量了这两个值,如下表所示:
启动时间(越少越好)、内存使用(越少越好)
GraalVM 本机映像: 0.413 秒,87 MB
OpenJDK: 13 秒,128 MB
与 OpenJDK 相比,GraalVM Native Image 在启动时间和内存使用方面的性能显着提高,证明了其在优化资源消耗以实现高效应用部署方面的有效性。
摘要
在控制层(如 PLC)使用 Java 有多种好处。首先,监管层面和控制层面之间没有技术上的隔阂。同样的员工可以实施应用程序并从 Java 生态系统和可用工具中受益。其次,GraalVM 能够将 Java 代码编译为嵌入式设备(如 32 位和 64 位 ARM 和 x86 处理器)上的本机应用程序。因此,您的开发人员不需要关心底层架构,并且可以使用高级面向对象语言来实现您的应用程序。第三,借助菲尼克斯电气PLCnext的容器支持,我们可以在同一个硬件组件中直接访问PLC的接口,打破当前制造业应用中僵化的等级制度。
注意:
创客博客显示未经菲尼克斯电气测试或审核的社区成员的应用程序和用户故事。使用它们的风险由您自行承担。
工业技术