第一步导入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);
}
}