方式一: 通过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);
}