pom.xml
<dependency><groupId>com.github.s7connector</groupId><artifactId>s7connector</artifactId><version>2.1</version></dependency>
maven下载不了的,下载包,评论或者私自内免费给
DB212 类:
String类型的我的占用25个字节,要看实际情况
package com.alnan.entity;import com.github.s7connector.api.annotation.S7Variable;
import com.github.s7connector.impl.utils.S7Type;
import lombok.Data;import java.io.Serializable;@Data
public class DB212 implements Serializable {@S7Variable(type = S7Type.STRING,byteOffset = 32,bitOffset = 0, size = 25)public int PW_plateId;@S7Variable(type = S7Type.WORD,byteOffset = 88,bitOffset = 0)public int PW_plateLength;@S7Variable(type = S7Type.WORD,byteOffset = 92,bitOffset = 0)public int PW_plateWidth;@S7Variable(type = S7Type.WORD,byteOffset = 208,bitOffset = 0)public int PW_send;@S7Variable(type = S7Type.WORD,byteOffset = 212,bitOffset = 0)public int ACT_PW_1;@S7Variable(type = S7Type.WORD,byteOffset = 216,bitOffset = 0)public int ACT_PW_2;@S7Variable(type = S7Type.WORD,byteOffset = 260,bitOffset = 0)public int ACT_HY_UP_1;@S7Variable(type = S7Type.WORD,byteOffset = 264,bitOffset = 0)public int ACT_HY_DOWN_1;@S7Variable(type = S7Type.WORD,byteOffset = 276,bitOffset = 0)public int ACT_HY_UP_2;@S7Variable(type = S7Type.WORD,byteOffset = 280,bitOffset = 0)public int ACT_HY_DOWN_2;@S7Variable(type = S7Type.WORD,byteOffset = 292,bitOffset = 0)public int ACT_HY_UP_3;@S7Variable(type = S7Type.WORD,byteOffset = 296,bitOffset = 0)public int ACT_HY_DOWN_3;@S7Variable(type = S7Type.WORD,byteOffset = 308,bitOffset = 0)public int ACT_HY_UP_4;@S7Variable(type = S7Type.WORD,byteOffset = 312,bitOffset = 0)public int ACT_HY_DOWN_4;@S7Variable(type = S7Type.WORD,byteOffset = 324,bitOffset = 0)public int ACT_HY_UP_5;@S7Variable(type = S7Type.WORD,byteOffset = 328,bitOffset = 0)public int ACT_HY_DOWN_5;@S7Variable(type = S7Type.WORD,byteOffset = 340,bitOffset = 0)public int ACT_LC_UP_1;@S7Variable(type = S7Type.WORD,byteOffset = 344,bitOffset = 0)public int ACT_LC_DOWN_1;@S7Variable(type = S7Type.WORD,byteOffset = 356,bitOffset = 0)public int ACT_LC_UP_2;@S7Variable(type = S7Type.WORD,byteOffset = 360,bitOffset = 0)public int ACT_LC_DOWN_2;}
应用:
//一级发数据S7Connector s7Connector = S7ConnectorFactory.buildTCPConnector().withHost("192.168.100.10")//ip.withPort(102).withTimeout(1000) //连接超时时间.withRack(0).withSlot(1).build();s7Connector.write(DaveArea.DB, 212, 32, pzString(plateNo));//212是PLC地址,32是从第多少字节开始写入,s7Connector.write(DaveArea.DB,212,88, ByteBuffer.allocate(4).putInt(Integer.valueOf(length)).array());s7Connector.write(DaveArea.DB,212,92, ByteBuffer.allocate(4).putInt(Integer.valueOf(width)).array());s7Connector.write(DaveArea.DB,212,208, ByteBuffer.allocate(4).putInt(1).array());System.out.println(s7Serializer.dispense(DB212.class,212,0));s7Connector.close();public byte[] pzString(String out_string){// 写入字符串//第一个参数:DaveArea.DB 表示读取PLC的地址区域为DB//第二个参数:DB块地址,若plc中是DB1000,则填1000//第三个参数:偏移量//第四个参数:写入的数据 二进制数组byte[] ,总长度为10的话,有效数据只能是10-8,第一位代表总长,第二位,代表有效数据字节int writeStrLength = 25;//地址块大小byte[] writeBytes = new byte[writeStrLength];writeBytes[0] = (byte) writeStrLength;//写入本字符串块总宽度out_string = out_string.trim();//清除掉两边的空串int availableEffectCharLength = 0;//有效字符数控制if (out_string.length() > writeStrLength - 2) {//>writeStrLength-2 截断到最大有效数据位availableEffectCharLength = writeStrLength - 2;} else {//<=writeStrLength-2availableEffectCharLength = out_string.length();}writeBytes[1] = (byte) availableEffectCharLength;//写入有效字节数byte[] strBytes = out_string.getBytes(StandardCharsets.US_ASCII);for (int i = 0; i < availableEffectCharLength; i++) {writeBytes[i + 2] = strBytes[i];}return writeBytes;}
基本上能用起来了
具体细节:
https://blog.csdn.net/qq_51383028/article/details/140549849