# javasea-iot **Repository Path**: longxiaonan0505/javasea-iot ## Basic Information - **Project Name**: javasea-iot - **Description**: 本项目是iot项目总结。包括modbus、opc ua等协议的具体案例。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 17 - **Forks**: 7 - **Created**: 2022-04-14 - **Last Updated**: 2025-09-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 说明 该项目是针对不同通信协议实现的测试demo。 目前常用设备通信段协议有: * **modbus** 常用和PLC进行通信控制,PLC是电气自动控制的控制器。我们程序作为上位机,PLC作为下位机,通过modbus将数据发送到下位机,或者从下位机读取数据。 **特点**: 1. 程序侧指定plc的寄存器地址来读写数据。 2. 需要手动通过代码循环读的方式实现监听!当需要监听的点位比较多时,性能较差。 **推荐实现库**: modbus4j: 采用ethernet TCP方式 * **opcua** 常用和PLC进行通信控制,我们程序作为上位机,PLC作为下位机,程序和PLC中间部署OPC服务器,我们程序发送数据到opc服务器,opc服务器再发送数据到PLC。 **特点** 1. 程序侧通过指定opcua的item进行通信,无需关心plc寄存器地址。 2. 相比modbus,监听方式第三方库已经实现,直接使用即可。 **推荐实现库** milo: eclipse的项目,比较靠谱 * **mqtt** 轻量的消息传输协议,使用很广泛,目前还没使用到项目,后续再加demo * **tcp** 普通TCP/IP协议,需要手动实现tcp客户端或tcp服务端。 demo见java-sea-nio项目。 **特点** 1. TCP是基础协议,需要手动实现客户端或者服务端,实现连接管理、通信控制等等,比较麻烦。但是灵活性更强。 2. 基本上其他协议都是基于TCP协议实现的,优先使用其他的协议。 **推荐实现库** netty * **usb** 用于USB扫码枪扫码,扫码后的字符作为键盘输入事件进行处理。 **特点** 需要在扫码枪定义结尾符,一般是回车作为结尾符。 **推荐库** JNA * ... ## 项目结构 ### modbus #### *javasea-iot-modbus-4j-demo 通过modbus4j实现modbus调试。支持串口rtu方式和网口tcp方式 #### javasea-iot-modbus-base modbs通信的几种java实现方式demo。 #### javasea-iot-modbus-rtu modbus4j 的 rtu方式调试。所谓rtu就是通过服务器的串口(RS232, RS485)来进行通信。 ### mqtt #### javasea-iot-mqtt-rabbitmq 在rabbitmq添加插件,实现mqtt服务器 ### opcua #### javasea-iot-eclipseMilo 未调试完成! 通过证书来实现连接 #### javasea-iot-eclipseMilo2 已经调试完成!正常读写和订阅! 参考开源项目:https://github.com/IoT-Technology/IoT-Technical-Guide opc服务器采用KEP server v6. UA配置中安全性配置为无,否则需要通过证书来实现连接 milo 版本 0.4.1 还需参考: https://blog.csdn.net/q932104843/article/details/86664236?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163751190316780271924538%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163751190316780271924538&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~baidu_landing_v2~default-5-86664236.pc_v2_rank_blog_default&utm_term=milo&spm=1018.2226.3001.4450 #### *javasea-iot-eclipseMilo-importTool 通过milo + freemarker 实现的导入寄存器值到OPC Server的工具,有详细的测试和异常处理。推荐! #### javasea-iot-opc-utgard 操作plc的opc server,不需要直接操作plc,测试成功!不过这个utgard版本比较旧,不推荐。 opc 服务器采用 KEPServerEX 6 进行仿真,能成功读写 ### usb ​ 通过jna 获取 usb扫描枪信息,作为键盘输入字符。 ### *zr-iot-sdk-simple 集成上面的协议,提供统一的配置和管理方式。 前端:vite2 + vue3 + element-plus 后端:milo(opcua) + modbus4j(modbus) 功能: * 实现协议管理,设备管理,属性管理等等功能。 * 启动时自动监听监听项数据。 * 通过寄存器地址名称实现快速读写。 * 设备连接和状态管理,在页面中提供快速连接、断开、告警等功能。 ### 其他 #### hslcommunication 直接操作plc,不同厂家都有封装读写的方法,需要手动定时器去读plc点位。 有C#版本和java版本,框架作者推荐用C#版本。 特点: java版本要收费,比较贵。 之前还没milo之前,可以通过utgard的opc协议来规范读取plc,milo出世后,推荐用milo来处理opcua通信。