Java 读写 PLC

第一步导入maven坐标

 <dependency>
            <groupId>com.github.s7connector</groupId>
            <artifactId>s7connector</artifactId>
            <version>2.1</version>
        </dependency>

第二步编写代码

package com.xr.s7plctest;

import com.github.s7connector.api.DaveArea;
import com.github.s7connector.api.S7Connector;
import com.github.s7connector.api.factory.S7ConnectorFactory;
import com.github.s7connector.impl.serializer.converter.RealConverter;
import com.github.s7connector.impl.serializer.converter.StringConverter;

import java.io.IOException;

/**
 * How to read string from PLC from DB560 with offset 0.0 and size 12 bytes. Garbage value is coming at the output.\
 * https://stackoverflow.com/questions/52590723/read-string-from-plc-using-moka7
 *
 * DB1.DBD112
 *
 * DB是PLC 内部的数据存储区。DBD指的是 4个字节数据 用来表示 浮点数。
 *
 * 室外温度这个数据  就放在 DB 编号 为 "1"的  地址为 112的位置
 *
 * 我们一个 float 是  4个 byte.
 */
public class S7PlcTest {


    /**
     * byte[] PlcData = connector.read(
     * DaveArea.DB, //选择区块
     * 1, // 区块编号
     * 50,  //长度
     * 4);   //开始位置
     * String str = new String(PlcData);
     * String str1 = "";
     * System.out.println("读取到的数据="+str);
     * StringConverter converter = new StringConverter();
     * String extract1 = converter.extract(String.getClass(), PlcData, 0, 0);
     * System.out.println("内置方法转换str="+extract1);
     *
     * @param args
     */

    public static void main(String[] args) {
        //PLC地址
        String ipAddress = "xxxxxxx";
        //默认端口
//        int port = xxxx;
        S7Connector s7Connector = S7ConnectorFactory
                .buildTCPConnector()
                .withHost(ipAddress)
//                .withPort(port)
                .withTimeout(10000) //连接超时时间
                .withRack(0) //架机号  可选
                .withSlot(0) //插槽号  可选
                .build();
        //第一个参数:DaveArea.DB 表示读取PLC的地址区域为DB
        //第二个参数:DB地址,若plc中是DB1082,则填1082
        //第三个参数:数据长度
        //第四个参数:偏移量
        byte[] plcData = s7Connector.read(DaveArea.DB, 1, 50, 112);
        String str = new String(plcData);
        String str1 = "";
        System.out.println("读取到的数据=" + str);
        RealConverter realConverter = new RealConverter();
        StringConverter converter = new StringConverter();
        Float extract1 = realConverter.extract(Float.class, plcData, 0, 0);
        System.out.println("内置方法转换str=" + extract1);

        try {
            s7Connector.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }


    public static void wirte() {
        //PLC地址
        String ipAddress = "xxxxxx";
        //默认端口
//        int port = xxxx;
        S7Connector s7Connector = S7ConnectorFactory
                .buildTCPConnector()
                .withHost(ipAddress)
//                .withPort(port)
                .withTimeout(10000) //连接超时时间
                .withRack(0)
                .withSlot(2)
                .build();
        String data = "qqqqqqqq111";
        byte[] bytes = data.getBytes();
        s7Connector.write(DaveArea.DB, 1, 112, bytes);
    }

}

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Java ModbusTCP 是一种用于与PLC进行通信的协议。它基于TCP/IP协议,通过以太网连接实现PLC与计算机之间的数据交互。 Java ModbusTCP 支持PLC读写操作。读操作允许从PLC中读取数据,例如传感器的测量值、开关的状态等。写操作允许向PLC中写入数据,例如设定PLC的输出值、设置PLC的参数等。 在使用Java ModbusTCP 读写PLC时,首先需要建立与PLC的连接。可以通过指定PLC的IP地址和端口号来实现连接。连接建立后,可以使用Java ModbusTCP提供的函数进行数据的读写操作。 对于读操作,可以使用Java ModbusTCP提供的函数发送读取指令给PLC,并获取PLC返回的数据。读取的数据可以是单个寄存器(16位)或多个寄存器的值,也可以是多个连续的位的状态。 对于写操作,可以使用Java ModbusTCP提供的函数发送写入指令给PLC,并将待写入的数据传输给PLC。写入的数据可以是单个寄存器的值,也可以是多个寄存器的值。 在进行读写操作之前,需要了解PLC的通信地址和数据类型。通信地址指示PLC中特定寄存器或位的位置,数据类型指示读取或写入的数据是整数、实数、位等。 在实现Java ModbusTCP 读写PLC时,需要注意通信参数的设置、数据的转换和异常处理等。同时,需要掌握PLC的通信协议和寄存器的布局,以确保读写操作的正确性和稳定性。 总结来说,Java ModbusTCP 是一种用于读写PLC的协议,通过与PLC建立TCP/IP连接,实现PLC与计算机之间的数据交互。通过合适的函数调用和正确的配置,可以实现与PLC的数据读取和写入操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值