Java 使用 HslCommunication 进行三菱 PLC 读写操作
一、前言
在工业自动化领域,PLC(可编程逻辑控制器)广泛用于生产控制,而 Java 在工业软件开发中的应用也日益增多。为了让 Java 代码可以与 三菱 PLC 进行通信,我们可以使用 HslCommunication 这个优秀的 Java 库。
本文将详细介绍如何使用 HslCommunication 在 Java 中完成三菱 PLC 的数据读写,并提供完整的 Maven 配置、代码示例 及 运行效果,适合对 PLC 通信 感兴趣的开发者参考。
二、项目环境
环境 | 版本 |
---|---|
Java | 11 |
Maven | 3.6+ |
HslCommunication | 3.4.0 |
SLF4J | 2.0.7 |
Logback | 1.4.14 |
三、项目结构
在使用 Java 进行 PLC 通信前,我们需要先搭建 Maven 工程,项目结构如下:
PLCCommunicationDemo
├── src
│ ├── main
│ │ ├── java
│ │ │ ├── org.example
│ │ │ │ ├── HslCommunicationWrite.java
│ │ │ │ ├── PlcCommunicationInterface.java
│ │ │ │ ├── Main.java
│ ├── resources
│ │ ├── logback.xml
├── pom.xml
其中:
HslCommunicationWrite.java
:PLC 通信实现类PlcCommunicationInterface.java
:定义 PLC 读写接口Main.java
:测试代码logback.xml
:日志配置文件
四、Maven 依赖配置
在 pom.xml
中添加以下依赖,以支持 PLC 通信及日志输出:
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<slf4j.version>2.0.7</slf4j.version>
<logback.version>1.4.14</logback.version>
<hslcommunication.version>3.4.0</hslcommunication.version>
</properties>
<dependencies>
<!-- PLC 通信库 -->
<dependency>
<groupId>com.github.dathlin</groupId>
<artifactId>HslCommunication</artifactId>
<version>${hslcommunication.version}</version>
</dependency>
<!-- SLF4J API -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- Logback 实现 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
</dependencies>
📌 说明:
HslCommunication
:用于 PLC 读写 操作SLF4J + Logback
:用于 日志管理
五、定义 PLC 读写接口
首先,创建 PlcCommunicationInterface
,统一 PLC 读写操作的方法:
public interface PlcCommunicationInterface {
int readPlcInt(String address);
boolean sendPlcMsg(String address, int value);
void closeConnection();
}
📌 方法解析:
readPlcInt(String address)
:读取 PLC 中的整数值sendPlcMsg(String address, int value)
:向 PLC 写入整数值closeConnection()
:关闭 PLC 连接
六、PLC 读写实现
使用 HslCommunication
实现 HslCommunicationWrite
读写逻辑:
package org.example;
import HslCommunication.Profinet.Melsec.MelsecMcNet;
import HslCommunication.Core.Types.OperateResult;
import HslCommunication.Core.Types.OperateResultExOne;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HslCommunicationWrite implements PlcCommunicationInterface {
private static final Logger log = LoggerFactory.getLogger(HslCommunicationWrite.class);
private static final String PLC_IP = "127.0.0.1";
private static final int PLC_PORT = 6000;
private MelsecMcNet melsecNet;
public HslCommunicationWrite() {
createConnection();
}
@Override
public int readPlcInt(String address) {
return clientReadInt(address);
}
@Override
public boolean sendPlcMsg(String address, int value) {
return clientSendInt(address, value);
}
@Override
public void closeConnection() {
if (melsecNet != null) {
melsecNet.ConnectClose();
log.info("PLC 连接已关闭");
}
}
private void createConnection() {
try {
melsecNet = new MelsecMcNet(PLC_IP, PLC_PORT);
OperateResult connect = melsecNet.ConnectServer();
if (connect.IsSuccess) {
log.info("PLC 连接成功: IP={}, Port={}", PLC_IP, PLC_PORT);
} else {
log.error("PLC 连接失败: {}", connect.Message);
}
} catch (Exception e) {
log.error("PLC 连接异常", e);
throw new RuntimeException(e);
}
}
}
📌 功能解析:
createConnection()
:连接 PLCcloseConnection()
:断开连接
七、PLC 读写数据
(1)读取整数
private int clientReadInt(String address) {
OperateResultExOne<Short> readResult = melsecNet.ReadInt16(address);
if (readResult.IsSuccess) {
log.info("读取成功: 地址={}, 值={}", address, readResult.Content);
return readResult.Content;
} else {
log.error("读取失败: {}", readResult.Message);
return -1;
}
}
(2)写入整数
private boolean clientSendInt(String address, int value) {
OperateResult writeResult = melsecNet.Write(address, value);
if (writeResult.IsSuccess) {
log.info("写入成功: 地址={}, 值={}", address, value);
return true;
} else {
log.error("写入失败: {}", writeResult.Message);
return false;
}
}
八、测试代码
public class Main {
public static void main(String[] args) {
HslCommunicationWrite plc = new HslCommunicationWrite();
plc.sendPlcMsg("D100", 123);
int value = plc.readPlcInt("D100");
System.out.println("读取到的值: " + value);
plc.closeConnection();
}
}
九、运行效果
执行 Main.java
,输出如下:
PLC 连接成功: IP=127.0.0.1, Port=6000
写入成功: 地址=D100, 值=123
读取成功: 地址=D100, 值=123
读取到的值: 123
PLC 连接已关闭
十、总结
本文介绍了如何使用 HslCommunication
在 Java 中进行 三菱 PLC 读写,包括 Maven 配置、代码实现及测试。如果你的项目涉及 Java + PLC 通信,这个方案是不错的选择!
如果觉得文章有帮助,欢迎点赞 、收藏 、加关注 !