Java读取plc的DB块的两种方式

方式一: 通过github提供的一门技术

1.首先引入maven坐标

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

2.demo如下: (1)先获取S7Connector

private static final String PLC_IP = "172.26.101.41";

    private static final Integer PORT = 102;

    public S7Connector getPlc() {
//        //PLC地址
//        String ipAddress = "172.26.101.41";
//        //默认端口
//        int port = 102;
        S7Connector s7Connector = S7ConnectorFactory
                .buildTCPConnector()
                .withHost(PLC_IP)
                .withPort(PORT)
                .withTimeout(1000000) //连接超时时间
                .withRack(0) //架机号  可选
                .withSlot(0) //插槽号  可选
                .build();


        return s7Connector;

3.读取指定的DB块和偏移量,偏移量是实际值的位置

        //第一个参数:DaveArea.DB 表示读取PLC的地址区域为DB
        //第二个参数:DB地址,若plc中是DB1082,则填1082
        //第三个参数:数据长度
        //第四个参数:偏移量
        byte[] plcData = s7Connector.read(DaveArea.DB, 30, 50, 36);
        String str = new String(plcData);
        String str1 = "";
        System.out.println("读取到的数据=" + str);
        RealConverter realConverter = new RealConverter();
        StringConverter converter = new StringConverter();
        IntegerConverter converter1 = new IntegerConverter();
        Integer extract = converter1.extract(Integer.class, plcData, 0, 0);
        System.out.println("内置方法转换str=" + extract);

方式二: 国产出品(胡工科技,强烈推荐YYDS)

1.首先引入maven坐标

     <dependency>
            <groupId>com.github.dathlin</groupId>
            <artifactId>HslCommunication</artifactId>
            <version>3.1.1</version>
        </dependency>

2.demo如下: 这个比较简单粗暴,直接读取DB块和偏移量,记得按类型转换即可

(1)首选获取SiemensS7Net

  public static SiemensS7Net content() {
        SiemensS7Net siemensTcpNet = new SiemensS7Net(SiemensPLCS.S1500, "172.26.101.41");
        
        return siemensTcpNet;

    }

(2) 直接读取byte数组,同时还提供有没有链接成功等功能,重点是记得数据类型转换

下面以读取bool类型为例子的一段demo

 //DB3.DBX208.0 
//第一个参数是DB块加偏移量
//第二参数是读取长度
            OperateResultExOne<byte[]> read = siemensS7Net.Read("DB3.DBX208.0", (short) 105);
//判断是否读取到DB块的偏移量
            if (read.IsSuccess) {
//拿到读取的byte数据
                byte[] contests = read.Content;
//数据类型转换为真实值,这里很重要,要根据真实情况选择不同的Tarans**.
                boolean aBoolean = siemensS7Net.getByteTransform().TransBool(contests, 0);
                map.put("oneLengDongShuiLiuZhuangTai", aBoolean);
            }

猜你喜欢

转载自blog.csdn.net/seeblood/article/details/126342337