Java 使用 HslCommunication 进行三菱 PLC 读写操作--完整篇

Java 使用 HslCommunication 进行三菱 PLC 读写操作


一、前言

在工业自动化领域,PLC(可编程逻辑控制器)广泛用于生产控制,而 Java 在工业软件开发中的应用也日益增多。为了让 Java 代码可以与 三菱 PLC 进行通信,我们可以使用 HslCommunication 这个优秀的 Java 库。

本文将详细介绍如何使用 HslCommunication 在 Java 中完成三菱 PLC 的数据读写,并提供完整的 Maven 配置、代码示例运行效果,适合对 PLC 通信 感兴趣的开发者参考。


二、项目环境

环境版本
Java11
Maven3.6+
HslCommunication3.4.0
SLF4J2.0.7
Logback1.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()连接 PLC
  • closeConnection()断开连接

七、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 通信,这个方案是不错的选择!

 如果觉得文章有帮助,欢迎点赞 、收藏 、加关注 !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值