开发者中心 开发者中心
  • 简体中文
  • English
视频教程
敢为云网站
  • 6.0版本
  • 6.1 版本
视频教程
敢为云网站
  • 平台概述
  • 平台功能
  • 平台安装
  • 开发者指南
    • 协议插件开发
      • 原理解析
      • 开发第一个插件
      • 进阶
      • Java协议插件开发实践
        • Java开发协议插件数据流程解析
        • 开发步骤
          • 一、环境配置
          • 二、项目设置
          • 三、类结构规范
          • 四、 编译&打包
          • 五、打包镜像
        • IoTCenter 边缘网关部署
          • 一、必备插件安装
          • 二、添加边缘应用
          • 三、网关注册
          • 四、应用管理
          • 五、数据同步
        • 常见问题
      • Python协议插件开发实践
      • GWDataCenter常用接口API
    • 扩展插件开发
    • 报警插件开发
    • 应用插件开发
    • Web可视化开发
    • 3D可视化开发
    • 桌面可视化开发
    • 小程序开发
  • 项目实战
  • 附录

Java协议插件开发实践

为适应物联网设备多样性及工业协议复杂性,我们选用Java语言开发协议插件。凭借Java跨平台特性、成熟的协议生态及动态扩展能力,实现多设备高效适配,构建灵活稳健的物联网系统。首先我们先介绍Java开发的协议插件的数据流向。

# Java开发协议插件数据流程解析

详情
  1. 设备层: 各类物联网设备(如传感器、控制器)持续产生运行数据,包括设备状态、环境参数等业务关键信息。

  2. 接入层: 通过网络API获取原始数据,Java开发的协议插件负责解析不同设备的通信协议,将数据转换为统一格式。

  3. 边缘处理: 收集到的数据暂存在边缘节点(MiniDataCenter),进行初步清洗和标准化处理,确保数据质量。

  4. 安全传输: 边缘网关通过MQTT协议将处理后的数据实时推送至云平台,采用加密传输保障数据安全,支持断线重连机制。

  5. 平台展示: IoTCenter平台接收数据后,通过可视化界面实时展示设备状态、运行趋势等信息,支持历史数据查询。

# 开发步骤

# 一、环境配置

# JDK环境准备

1. 下载与安装

详情
  • 推荐使用 Microsoft Build of OpenJDK 21(适配Windows/Linux/macOS)

  • 官方下载地址:https://learn.microsoft.com/zh-cn/java/openjdk/download

  • 验证安装:

    java -version  # 应显示 "21.x.x" 版本信息
    

2. 环境变量配置(可选)

详情
  • 若需全局使用,将 JAVA_HOME 设为安装路径(如 C:\Program Files\Eclipse Adoptium\jdk-21.0.2+9)
  • 将 %JAVA_HOME%\bin 添加至 PATH 变量

# Maven配置优化

详情

1. 配置文件定位

  • 独立安装Maven:
    • 文件路径:<Maven安装目录>/conf/settings.xml
  • IntelliJ IDEA集成环境:
    • 文件路径:<IDEA安装目录>\plugins\maven\lib\maven3\conf\settings.xml

2. settings.xml配置内容添加内容如下


<!--在servers节点下-->
<server>
    <id>ganweisoft</id>
    <username>ganweimaven</username>
    <password>ganwei2025</password>
</server>


<!--在mirrors节点下-->
<mirror>
    <id>ganweisoft</id>
    <name>ganweisoft repository</name>
    <url>https://nuget.ganweicloud.com/maven/maven-public/</url>
    <mirrorOf>*</mirrorOf>
</mirror>

<!--在profiles节点下-->
<profile>
    <id>ganweisoft</id>
    <repositories>
        <repository>
            <id>ganweisoft</id>
            <url>https://nuget.ganweicloud.com/maven/maven-public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>public</id>
            <name>Public Repositories</name>
            <url>https://nuget.ganweicloud.com/maven/maven-public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>
</profile>

<!--在activeProfiles节点下-->
  <activeProfiles>
    <activeProfile>ganweisoft</activeProfile>
  </activeProfiles>

3. 权限与操作规范

  • ⚠️ 管理员权限要求: Windows系统需右键选择"以管理员身份运行"文本编辑器进行修改

  • 安全建议:修改前备份原文件

  • 配置:

    mvn help:effective-settings  # 查看生效配置
    

# 二、项目设置

详情
  1. 创建一个maven项目,项目设置使用已配置好的maven配置setting.xml

  1. 导入依赖。在项目的pom.xml文件增加如下节点
<!--在dependencies节点下-->
<dependencies>
    <dependency>
        <groupId>ganweisoft</groupId>
        <artifactId>gwminidatacenter</artifactId>
        <version>1.0</version>
    </dependency>
</dependencies>

<!--在repositories节点下-->
<repositories>
    <repository>
        <id>nexus</id>
        <url>https://nuget.ganweicloud.com/maven/maven-public/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

# 三、类结构规范

详情
  • 精确命名要求,类名必须严格匹配CEquip(区分大小写)
  • 建议使用IDE的"Rename"重构功能确保全项目引用一致性

4、随机数代码示例

详情
package ganweisoft;

import gwdatacenter.*;
import gwdatacenter.database.*;

import java.util.Random;


public class CEquip extends CEquipBase
{
    public CEquip() {
        // 初始化代码(如果有需要)
    }

    /**
     获取设备数据

     @return
     */
    private int iCounttemp = 0;
    @Override
    public CommunicationState GetData(CEquipBase pEquip)
    {
        Sleep(1000);
        if (super.getRunSetParmFlag())
        {
            return CommunicationState.setreturn;
        }

        CommunicationState commState = super.GetData(pEquip);
        if (!commState.equals(CommunicationState.ok))
        {
            return CommunicationState.ok;
        }

        if (!pEquip.GetEvent())
        {
            return CommunicationState.fail;
        }
        return CommunicationState.ok;
    }

    @Override
    public boolean GetYC(YcpTableRow r)
    {
        super.SetYCData(r, new Random().nextDouble());
        return true;
    }

    @Override
    public boolean GetYX(YxpTableRow r)
    {
        super.SetYXData(r, new Random().nextBoolean());
        return true;
    }

    //模拟一些数据
    @Override
    public boolean SetParm(String MainInstruct, String MinorInstruct, String Value)
    {
        try
        {
            if (MainInstruct.equalsIgnoreCase("SetYCYXValue")) //可以强制设置YCYX的值
            {
                if (MinorInstruct.length() > 2) //e.g. MinorInstruct=C_2 0r X_15
                {
                    if (sharpSystem.StringHelper.isNullOrEmpty(Value))
                    {
                        return false;
                    }
                    int ycyxno = Integer.parseInt(MinorInstruct.substring(2));
                    if (ycyxno > 0)
                    {
                        if (MinorInstruct.charAt(0) == 'C' || MinorInstruct.charAt(0) == 'c') //表示设置YC值
                        {
                            getYCResults().put(ycyxno, Double.parseDouble(Value));
                            return true;
                        }
                        if (MinorInstruct.charAt(0) == 'X' || MinorInstruct.charAt(0) == 'x') //表示设置YX值
                        {
                            getYXResults().put(ycyxno, Integer.parseInt(Value) > 0);
                            return true;
                        }
                    }
                }
            }

            return false;
        }
        catch (RuntimeException e)
        {
            DataCenter.WriteLogFile(e.toString());
            return false;
        }
    }
}

# 四、 编译&打包

详情

右击选择 运行Maven构建

可选:已安装Maven时运行下述命令行语句

mvn clean compile jar:jar

# 五、打包镜像

详情

将打包输出的jar文件替换到下列目录下的dll目录里面

1、目录层级

├─bin
│  │  gwminidatacenter.jar
│  │
│  ├─config
│  │      config.properties
│  │
│  └─lib
│          comm-1.0.0.jar
│          jackson-annotations-2.13.5.jar
│          jackson-core-2.13.5.jar
│          jackson-databind-2.13.5.jar
│          jackson-dataformat-xml-2.13.5.jar
│          jackson-datatype-jdk8-2.13.5.jar
│          jackson-datatype-jsr310-2.13.5.jar
│          org.eclipse.paho.client.mqttv3-1.2.5.jar
│          stax2-api-4.2.1.jar
│          woodstox-core-6.4.0.jar
│
├─dll
│      BCDataSimu.STD.jar
│
└─log
        XLog.txt


2、配置变量导入

可选:1、使用环境变量,此时可使用set(windows)或者export(Linux)先初始化后,再在cmd中调用运行命令(具体值以实际为准)

set InstanceId=20250304
set MqUsername=gateway
set MqPassword=********
set MqServer=127.0.0.1
set MqPort=1883

可选:2、使用配置文件。将配置文件放于bin/config文件夹下

  1. 下载文件

image-20250410105830571

  1. 本地执行(windows环境)在bin目录下执行命令

java -jar gwminidatacenter-1.0.jar

3、打包Docker镜像包

Dockerfile

# Example using MS Build of OpenJDK image directly
FROM mcr.microsoft.com/openjdk/jdk:21-ubuntu

# Continue with your application deployment
RUN mkdir /opt/ganwei
COPY IoTCenter.Java /opt/ganwei/IoTCenter.Java

WORKDIR /opt/ganwei/IoTCenter.Java/bin/

CMD ["java", "-jar", "gwminidatacenter.jar"]

最后输出的文件为一个tar包如下图

image-20250410110617975

# IoTCenter 边缘网关部署

# 一、必备插件安装

详情

1、边缘网关管理协议插件

2、边缘网关管理数据接收服务

3、边边缘网关管理

安装完成上述插件后重启平台。

image-20250409153811981

image-20250409154021703

# 二、添加边缘应用

详情

1、编辑平台信息,MQTT服务填写本地ip端口默认为1883

2、点击测试查看是否连接成功。

image-20250409154447068

image-20250409154606130

# 三、网关注册

详情

1、添加网关(网关名称请不要用中文字符)

2、点击安装

3、复制命令到linux环境并回车

4、下载中等待安装完成

5、安装成功后刷新页面。状态会改为已安装。

image-20250409162514106

image-20250409162531054

image-20250409162613392

image-20250409162757592

image-20250409162817759

image-20250409164304388

# 四、应用管理

详情

1、添加应用

image-20250409164401982

给应用添加版本,参数参考如下截图,当前版本只支持容器部署。

image-20250410103229306

image-20250409165609788

image-20250409165843629

image-20250409165909092

image-20250410103421808

完成上述步骤后该应用状态为运行中

# 五、数据同步

详情

1、 配置设备的通讯端口(下级实例标识)和设备属性(JAVA|BCDataSimu.STD),设备驱动库:GW.MqttGatewayServer.Subscribe.STD.dll 注:BCDataSimu.STD 为协议插件名

image-20250410111338249

image-20250410111528637

2、同步设备

image-20250410103522730

3、查看实时值

image-20250410105507872

# 常见问题

详情
  1. 问题及解决方法

解决方法:JDK版本不对

image-20250402155905612

  1. 图中报错

解决方法:MQTT服务端未连接成功

image-20250402160001413

  1. 数据为***

解决方法:检查下列必备插件插件是否均为最新版本或尝试重启镜像

  • 边缘网关平台子设备插件

  • 边缘网关平台扩展服务

  • 边缘网关

上次更新: 2025/4/23 11:22:37

← 进阶 Python协议插件开发实践→

目录
Java开发协议插件数据流程解析
开发步骤
一、环境配置
二、项目设置
三、类结构规范
四、 编译&打包
五、打包镜像
IoTCenter 边缘网关部署
一、必备插件安装
二、添加边缘应用
三、网关注册
四、应用管理
五、数据同步
常见问题
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式