Java连接Plc实现数据传输/读取(最新教程)

本文介绍了如何使用Java通过HslCommunication库连接MelsecPLC,实现数据的读取和写入,包括创建工具类、调用方法以及异常处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java连接Plc实现数据传输/读取



提示:以下是本篇文章正文内容,下面案例可供参考

一、引入HslCommunication依赖

   <!--PLC通讯-->
        <dependency>
            <groupId>com.github.dathlin</groupId>
            <artifactId>HslCommunication</artifactId>
            <version>3.4.0</version>
        </dependency>

注意:该依赖由胡工科技支持 点击跳转

二、创建Plc工具类

public class HslCommunicationWrite{

    // PLC IP 端口
    private static final String PLC_CLIENT_IP = "127.0.0.1";
    private static final String PLC_CLIENT_PORT = "6666";
    private MelsecMcNet melsec_net_shunt =createConnection(); // 打开连接

    // 读数据
    public synchronized int ReadPlcInt(String address){
        return clientReadInt(address);// PLC操作
    }

    // 写数据
    public boolean SendPlcMsg(String address,int i){
        return clientSendInt(address,i);// PLC操作
    }

    // 获取PLC连接对象,并设置长连接
    private MelsecMcNet createConnection() {
        lock.lock();
        // 根据你使用的PLC型号选择适当的PLC类型
        melsec_net_shunt = new MelsecMcNet(PLC_CLIENT_IP, Integer.parseInt(PLC_CLIENT_PORT));
        melsec_net_shunt.SetPersistentConnection();  // 设置为长连接模式
        return melsec_net_shunt;
    }

    // 关闭长连接
    private void closeConnection() {
        melsec_net_shunt.ConnectClose();
    }
    /**
     * 写入一个 int 类型的
     * @param melsec_net_shunt PLC 连接对象
     * @param address PLC 地址
     * @param i 写入值
     * @return 成功 true 失败 false
     */
    private boolean clientSendInt(String address,int i){
        try{
            try {
                TimeUnit.MILLISECONDS.sleep(TIME_SLEEP);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            // 写入一个整数值
            OperateResult writeResult = melsec_net_shunt.Write(address,i);
            if (writeResult.IsSuccess) { // 写入成功
                return true;
            } else {
                // 写入失败
                // 添加PLC连接失败日志
                log.error(writeResult.Message);

                OperateResult connect = melsec_net_shunt.ConnectServer( );
                if (!connect.IsSuccess)
                {//连接失败
                    closeConnection(); //关闭连接
                    createConnection();//打开连接
                }
                return false;
            }
        }catch (Exception e){
            throw new RuntimeException(e);
        }
    }


    /**
     * 读取PLC的某个地址
     * @param melsec_net_shunt PLC 连接对象
     * @param address PLC 地址
     * @return 成功 true 失败 false
     */
    private int clientReadInt(String address){
        try {
            try {
                TimeUnit.MILLISECONDS.sleep(TIME_SLEEP);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            // 读取某个地址的信息
            OperateResult readResult = melsec_net_shunt.ReadInt16(address);
            if (readResult.IsSuccess) { //是否成功
                return (int) melsec_net_shunt.ReadInt16(address).Content;
            } else {
                // 添加PLC连接失败日志
                log.error(readResult.Message);
                OperateResult connect = melsec_net_shunt.ConnectServer( );
                if (!connect.IsSuccess)
                {//连接失败
                    closeConnection(); //关闭连接
                    createConnection();//打开连接
                }
            }
        }catch (Exception e){
            throw new RuntimeException(e);
        }
        return 5;
    }
}

二、调用工具类读/写数据

//给PLC地址D3201写入1
hslCommunicationWrite.SendPlcMsg("D3201",1);
//给PLC地址D3201.5写入1
hslCommunicationWrite.SendPlcMsg("D3201",(1 << 5));
//读取Plc地址D3104返回的数据
hslCommunicationWrite.ReadPlcInt("D3104");

*原创不易,各位看官老爷点个赞在走 *

总结

提示:本次交流就到这里啦!本人亲测三菱PLC传输正常,无非就是给软原件地址写值/传值。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不喝过期茅台

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值