【Java】java与plc 西门子 通讯,进行读写操作 采用TCP 直接连接

java与plc 西门子 通讯,进行读写操作 采用TCP 直接连接

0x0

  • ​ 阅读本文章你能会使用java与西门子plc 进行通信
  • ​ 所有环境都为仿真模拟环境,
  • ​ 本测试使用的是西门子plc(s7-1500)
  • ​ 软件为: 博图v16 plc仿真(s7-1500) idea

0x1

  • 开始工作,首先搭建plc环境 在这里不解释请转移到 模拟环境文章(在写了 会更新的)
  • IDEA 使用 Maven 你也可以吧集成到spring 或者boot, 做进一步操作

0x2

  1. 创建工程
  2. 导入maven 坐标

         <dependencies>

    <dependency>

    <groupId>com.github.s7connector</groupId>

    <artifactId>s7connector</artifactId>

    <version>2.1</version>

    </dependency>

    </dependencies>

  3. 使用的是 s7connector 官网有简单的案例 官网地址https://s7connector.github.io...

  4. github地址 https://github.com/s7connecto...

0x3

创建对象

S7Connector connector =

S7ConnectorFactory

.buildTCPConnector()

.withHost("ip") //

.withRack(0) //架机号 可选

.withSlot(0) //插槽号 可选

.build();

【Java】java与plc 西门子  通讯,进行读写操作 采用TCP 直接连接

【Java】java与plc 西门子  通讯,进行读写操作 采用TCP 直接连接

【Java】java与plc 西门子  通讯,进行读写操作 采用TCP 直接连接

对了还要关机 优化数据块的优化要不然看不到偏移地址

数据块 - 右键属性 -属性 - 优化块的访问

【Java】java与plc 西门子  通讯,进行读写操作 采用TCP 直接连接

0x4

首先开始读取 String 字符串读取

plc数据块

【Java】java与plc 西门子  通讯,进行读写操作 采用TCP 直接连接

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(str1.getClass(), PlcData, 0, 0);

System.out.println("内置方法转换str="+extract1);

【Java】java与plc 西门子  通讯,进行读写操作 采用TCP 直接连接

源码图

【Java】java与plc 西门子  通讯,进行读写操作 采用TCP 直接连接

【Java】java与plc 西门子  通讯,进行读写操作 采用TCP 直接连接

0x5

        String data = "qqqqqqqq111";

byte[] bytes = data.getBytes();

connector.write(DaveArea.DB,1,4,bytes);

写入操作就比较简单了

【Java】java与plc 西门子  通讯,进行读写操作 采用TCP 直接连接

【Java】java与plc 西门子  通讯,进行读写操作 采用TCP 直接连接

结束!

进阶

  • 使用opc ua 通讯方式 读写西门子 (如果现场设备比较多品牌不一样的情况下但是数据需要汇总收集分析,就可以用opcua ) 在写了.
  • 使用kepserver 进行opc 通讯 kep server 是一款很强大的软件可以跟设备通讯 也可以跟上位机通讯 在写了
  • 等待下次更新

【Java】java与plc 西门子  通讯,进行读写操作 采用TCP 直接连接

求求你关注公众在走吧

所有代码

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.StringConverter;

import com.github.s7connector.impl.utils.S7Type;

import com.sun.org.apache.xpath.internal.objects.XString;

/**

* @Author Alkin

* @Date 2020/12/30 10:08

* @Version 1.0

*/

public class Test {

public static void main(String[] args) {

//创建一个链接对象

S7Connector connector =

S7ConnectorFactory

.buildTCPConnector()

.withHost("192.168.0.1") //

.withRack(0) //架机号 可选

.withSlot(1) //插槽号 可选

.build();

String data = "qqqqqqqq111";

byte[] bytes = data.getBytes();

System.out.println("bytes = " + bytes.length);

connector.write(DaveArea.DB,1,4,bytes);

byte[] PlcData = connector.read(

DaveArea.DB, //选择区块

1, // 区块编号

255, //长度

4); //偏移地址

String str = new String(PlcData);

String str1 = "";

System.out.println("读取到的数据="+str);

StringConverter converter = new StringConverter();

String extract1 = converter.extract(str1.getClass(), PlcData, 0, 0);

System.out.println("内置方法转换str="+extract1);

}

}

以上是 【Java】java与plc 西门子 通讯,进行读写操作 采用TCP 直接连接 的全部内容, 来源链接: utcz.com/a/91499.html

回到顶部