第四步:成为进阶开发者
经过前面三个步骤的演练,你已经具备了基本的开发能力,能独立的创建一个平台的 APP 并上传到应用仓库,体验到平台应用的制作流程。作为和利时工业软件的基础设施,HOLLiMOS 平台提供了多种基础功能与核心服务供应用调用。以下将从应用配置入手,概述如何使用平台的核心服务、工具与组件,帮助开发者更好地理解平台的功能和特性。有关详细信息,请参考相应的 API 手册。
1. 应用配置
1.1 应用的依赖配置
当应用依赖其他服务时,需要在应用包的描述配置文件中进行设置,以便平台能够识别并连接到依赖的服务。应用包规范中,依赖的服务配置项为:
# ......
[[appDependency]]
appIdVersion = "hsm-auth-back-end-*"
dependencyType = "strong"
[[appDependency]]
appIdVersion = "redis-6.2.11-*"
dependencyType = "weak"
# ......
-
appIdVersion:依赖的应用编号及版本,需与平台中已注册的应用信息一致。
-
dependencyType:依赖的服务类型,目前支持的类型有:
- strong:强依赖,应用启动时必须连接上依赖的服务,否则应用无法正常运行。
- weak:弱依赖,应用启动时可以不连接上依赖的服务,但若依赖的服务出现故障,应用也会受到影响。
1.2 应用环境变量配置
应用使用的数据库,支持在线统一修改。当修改后各应用需配置数据库相关信息环境变量进行适配,安装部署升级时,按基础数据库服务统一修改的信息进行动态替换并生成配置文件,如以下配置:
......
[execute.env]
#访问postgresql数据库用户名
postgresql_username= "${def:DB_UID}"
#访问postgresql数据库密码
postgresql_password= "${def:DB_PWD}"
#influxdb数据库-数据存储时间
influxdb_timeout= "${def:DB_TIMEOUT}"
#redis数据库-库号
redis_library= "${def:DB_LIBRARY _NUMBER}"
......
1.3 应用启动进程配置
应用可配置进程控制程序,以完成指定程序的启停控制。默认支持脚本类型为 bash 脚本,其详细配置项如下。
- -p:prog1;prog2;…,进程名
启动指定的可执行程序。
- –arg:arg1;arg2;…
接收开发人员提供的特定启动参数。
- –env:env1=val1;env2=val2;…
接收安装配置时传入的环境变量。
输出程序PID到指定文件:
- 指定PID文件:PID文件和程序为同级目录下,即在bin目录下。形如program1-0.1.1.pid。
- 应用提供启动脚本时,要求启动脚本向指定PID文件输出PID信息。
- 启动脚本文件中,启动每个程序时,需将PID信息分别输出到和程序相对应的PID文件。
例如:下面的启动脚本文件中,启动每个程序时,分别将PID信息输出到指定PID文件 “program1-0.1.1.jar.pid” 和 “program2-0.1.1.jar.pid”。
#!/bin/bash
echo “Start to run the program”
nohup /usr/local/hsm-os/vendors/jdk1.8.0_261/bin/java -jar /usr/local/hsm-os/apps/demo1/bin/program1-0.1.1.jar >/dev/null 2>&1 &
echo $! > program1-0.1.1.jar.pid
nohup /usr/local/hsm-os/vendors/jdk1.8.0_261/bin/java -jar /usr/local/hsm-os/apps/demo1/bin/program2-0.1.1.jar >/dev/null 2>&1 &
echo $! > program2-0.1.1.jar.pid
更多关于应用配置的详细信息,请参考 应用包及描述配置文件规范。
2. 服务接口调用
2.1 工业数据服务
服务说明
工业数据服务包括实时库及实时服务、历史库及历史服务、报警及事件服务、审计日志服务。
实时数据服务
实时数据服务主要是接收IO采集的数据,并对采集的数据进行一些预处理(如:处理小数保留位数等),对外提供实例的当前值查询;将需要保存的数据发送给历史库服务;产生的报警/事件发送给报警/事件服务。
接口文档请参考 实时服务接口。
历史数据服务
历史数据服务主要提供时序数据的长期存储、聚合查询、统计,并将数据进行归档等服务,支持数据压缩,满足一定的压缩比例。
面向 SCADA 的模型服务提供 GQL、Restful、OPC UA、Websocket 等多种接口形式,既支持通过中间件访问,也可通过 DBserver 直接对外提供服务。
接口文档请参考 历史服务接口。
报警事件服务
根据产生的报警/事件,将其按照指定格式存入到数据库中。
审计日志服务
审计日志服务提供日志信息收集、存储、查询、导出等功能,能够支持日志数据的应用,接收外部应用和内部操作的日志信息。
接口文档请参考 审计日志服务接口。
2.2 权限服务
服务说明
平台通过认证和授权服务来进行安全鉴权。接入平台的应用,需要经过用户认证和授权,才能访问系统中特定部分的功能和服务。认证授权服务为平台的开发、工程、运行、运维环境,以及平台上的所有应用提供一套统一的用户认证及权限管理服务。在输入凭证登录电脑或登录应用程序或软件后,设备或应用程序会进行身份验证,以确定授权级别。授权包括可以使用哪些账户,可以访问哪些资源,以及允许执行哪些功能。
接入认证分内部应用接入和外部应用接入。
- 内部应用接入: 基于平台开出的应用,其接入使用 SSO 身份验证机制,用户登录应用产品门户进行身份验证后,无需再在其他应用中进行身份验证就可以访问这些系统。应用接入单点登录需要依赖权限认证服务进行应用接入配置,启动Auth服务使用应用管理模块添加应用信息;
- 外部应用接入:外部应用是完全跟平台没有关系的应用,该类型应用使用OAuth 2.0 协议进行登录授权。SSO 服务提供 OAuth2.0 标准授权步骤,采用授权码(Authorization Code)模式,由 Server 端向 Client 端下放 Code 码,Client 端再用 Code 码换取授权 Token。
接口文档请参考 权限服务接口
2.3 网关及代理服务
服务说明
网关提供了统一的服务访问入口,屏蔽了其他应用之间,包括与认证鉴权服务的频繁交互,支持基于 HTTP 协议的GraphQL、RESTful 和 Websocket 三种数据交互规范。
对不同语言开发的使用交互时,代理提供基于接口协议的交互适配。中间件的技术架构实现语言(nodejs)和其他应用采用的技术语言存在差异时,中间件提供标准协议接口规则,适配不同语言实现的互通,保证了应用之间的正常交互。
接口文档请参考 网关及代理服务接口
2.4 消息服务
服务说明
消息服务支持点对点模式推送、发布订阅模式推送、站内信、站内信审批类消息推送、数据变动,权限变动类审批推送及企业微信、短信、钉钉、邮件等第三方消息推送。
接口文档请参考 消息服务接口
2.5 关系数据库服务
服务说明
平台 1.0 版提供两种类型的关系数据库:
-
开源关系数据库 支持 PostgreSQL 关系数据库,应用通过配置环境变量的方式可以获取建立数据库链接所需的信息。按照高可用的要求,可提供主从方式的数据库冗余能力。
-
国产关系数据库 支持达梦(Dameng)关系数据库,按照高可用的要求,可提供主从方式的数据库冗余能力。
应用如有其它关系数据库的要求,可通过应用包的方式安装,平台 1.0 版的应用仓库中已经包含了 MySQL 关系库,支持单机安装及双主冗余的方式安装。
接口文档
PostgreSQL 关系库支持绝大部分的开发语言栈,可参考对应客户端的接口文档,如下表所示:
名字 | 语言 | 注释 | 网站 |
---|---|---|---|
DBD::Pg | Perl | Perl DBI 驱动 | https://metacpan.org/release/DBD-Pg |
JDBC | Java | Type 4 JDBC 驱动 | https://jdbc.postgresql.org/ |
libpqxx | C++ | C++ 接口 | http://pqxx.org/ |
node-postgres | JavaScript | Node.js 驱动器 | https://node-postgres.com/ |
Npgsql | .NET | .NET 数据提供器 | http://www.npgsql.org/ |
pgtcl | Tcl | https://github.com/flightaware/Pgtcl | |
pgtclng | Tcl | https://sourceforge.net/projects/pgtclng/ | |
pq | Go | Go的数据库/sql的Pure Go驱动程序 | https://github.com/lib/pq |
psqlODBC | ODBC | ODBC 驱动 | https://odbc.postgresql.org/ |
psycopg | Python | DB API 2.0兼容 | http://initd.org/psycopg/ |
3. 统一框架集成
3.1 统一门户
框架说明
统一门户包括资源管理、权限管理、组织机构、列配置等功能,其中资源管理、权限管理复用了认证授权服务的能力,而组织机构、列配置使用了信息模型服务,通过组态配置的方式生成统一的接入门户。
规范文档参考 统一门户接入规范
3.2 统一工程环境
工程环境说明
工程环境的核心价值是提高用户体验及工作效率,通过统一的工程配置环境,用户可以快速地完成应用的配置,从而提升工作效率。平台集中的工程配置环境为用户提供了一个集成的平台,可以在同一个环境中访问多个应用程序,使用户更快地完成任务和工作,从而避免了不必要的切换和登录过程,提高了用户体验及工作效率。
规范文档参考 统一工程环境
4. 可视化组态工具
4.1 设备模型组态工具
工具说明
设备模型组态工具主要面向工程人员,通过图形化组态为设备模型、设备实例提供算法组态功能,以定义计算任务,扩展模型的数据处理理能力。且通过基础模型可以组态为复杂的现场实际设备模型,典型的设备模型可作为模型库管理或取用,为后续同类的项目提供积累和参考。
4.2 信息模型组态工具
工具说明
信息模型及业务逻辑为行业开发人员提供了基础的数据模型,如工厂、人员、岗位等。该工具支持图形化建模过程,使得用户能够便捷地进行模型的管理,包括导入、导出操作,以及模型的调试。此外,通过发布功能,模型能够轻松在不同环境之间迁移。在此基础上,通过业务逻辑功能进一步增强了实用性,允许开发人员在业务模型设计的基础上进行应用业务逻辑的整合与模块功能的交互。业务逻辑编排的结果不仅为页面设计提供了新的逻辑接口服务,还实现了业务个性化逻辑的可视化编排,从而使得整个工具能够提供更加灵活和定制化的服务。
4.3 HMI 工具
工具说明
图形组态服务是基于Web标准的可视化应用组态工具,以Canvas作为底层渲染引擎,提供了完全基于HTML5的矢量图纸编辑器和丰富的图符库及多种多样的图表和控件,允许用户通过直观的图形界面轻松构建和配置流程图看板及交互逻辑,具备完善的事件定义和脚本扩展便于以低代码/无代码方式灵活定制业务场景功能,可无缝在多终端中适配且支持跨平台运行,达到对工业设备的仿真和工艺过程的动画模拟与控制,实现生产制造中数据的可视化监视与管理。
4.4 报表工具
工具说明
- 自行开发设计的报表设计管理工具,旨在满足平台的各种报表数据分析需求。报表具有高度的定制化能力,能够无缝集成到portal中;
- 设计服务提供报表管理相关功能,例如:报表管理、报表生成、行业模版库等等;
- 数据组织服务提供报表所需的数据结果,支持集成各种数据源并转换为统一格式提供给报表及各种工具使用;
- 预览服务在报表运行态下为报表提供数据查询及参数处理。
4.5 页面设计工具
工具说明
页面设计工具是以业务模型、业务逻辑为基础,通过图形化组态实现页面功能的工具,是集成在应用开发环境中的重要工具之一。页面设计工具采用 UI 与页面逻辑解耦的开发方式,UI 设计部分采用“模板化+灵活配置+组件”的思路进行设计,页面逻辑通过图形化编排的方式实现,页面设计工具支持开发的应用页面复杂程度将随着模板库、组件库及逻辑节点库的不断积累而不断提升。
4.6 应用工具
工具说明
平台提供一组开箱即用、具备组态能力的通用工具包,供项目实施人员和系统配置管理人员使用,以满足项目快速交付和系统便捷配置的需要。当前包含以下工具集:
- 提供数据字典来管理基本的分类配置信息;
- 提供编码规则的定义及生成功能,来进行设备、器具、单据编号的定义和管理;
- 提供标签设计工具来满足企业中对条码样式、生成、打印等需求;
- 提供报告设计工具来满足企业中对单据样式、生成、打印等需求;
- 用工广模型管理的功能来完成企业物理信息的配置;
- 通过班组排班管理,对企业的排班进行管理;
- 针对不同企业的不同工艺流程,提供工艺流程编排工具将工艺信息构建到信息系统中;
- 企业中具有树状关系的资源,如人、机、料、法、环等,应提供统一工厂资源关系管理工具进行维护;
- 提供看板设计工具和报表设计工具,满足企业生产看板和统计报表的可视化设计要求;
- 具有系统审计追溯的能力和工具,满足企业对审计追溯要求。