|
@@ -2,24 +2,15 @@
|
|
|
|
|
|
package at.acdp.urweb.fhpp;
|
|
|
|
|
|
-import java.nio.charset.Charset;
|
|
|
import java.util.ArrayList;
|
|
|
-import java.util.Arrays;
|
|
|
import java.util.List;
|
|
|
-import java.util.concurrent.CompletableFuture;
|
|
|
-import java.util.concurrent.CopyOnWriteArrayList;
|
|
|
-import java.util.concurrent.Executors;
|
|
|
-import java.util.concurrent.ScheduledExecutorService;
|
|
|
-import java.util.concurrent.TimeUnit;
|
|
|
+import java.util.concurrent.*;
|
|
|
|
|
|
import com.digitalpetri.modbus.codec.Modbus;
|
|
|
import com.digitalpetri.modbus.master.ModbusTcpMaster;
|
|
|
import com.digitalpetri.modbus.master.ModbusTcpMasterConfig;
|
|
|
import com.digitalpetri.modbus.requests.*;
|
|
|
-import com.digitalpetri.modbus.responses.ModbusResponse;
|
|
|
import com.digitalpetri.modbus.responses.ReadHoldingRegistersResponse;
|
|
|
-import io.netty.buffer.ByteBuf;
|
|
|
-import io.netty.buffer.ByteBufUtil;
|
|
|
import io.netty.util.ReferenceCountUtil;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
@@ -27,6 +18,7 @@ import org.slf4j.LoggerFactory;
|
|
|
public class FHMaster {
|
|
|
public static int posfaktorNum=1;
|
|
|
public static int posfaktorDiv=1;
|
|
|
+ private ModbusTcpMaster master;
|
|
|
|
|
|
|
|
|
|
|
@@ -39,7 +31,6 @@ public class FHMaster {
|
|
|
}
|
|
|
private final Logger logger = LoggerFactory.getLogger(getClass());
|
|
|
private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
|
|
|
- private final List<ModbusTcpMaster> masters = new CopyOnWriteArrayList<>();
|
|
|
private volatile boolean started = false;
|
|
|
public FHMaster() {
|
|
|
}
|
|
@@ -49,16 +40,16 @@ public class FHMaster {
|
|
|
ModbusTcpMasterConfig config = new ModbusTcpMasterConfig.Builder("10.0.31.14")
|
|
|
.setPort(502)
|
|
|
.build();
|
|
|
- ModbusTcpMaster master = new ModbusTcpMaster(config);
|
|
|
- var f=master.connect()
|
|
|
- .whenComplete((result, ex) -> bereitschaft(master))
|
|
|
- .whenComplete((result, ex) -> direktAuftrag(master));
|
|
|
+ master = new ModbusTcpMaster(config);
|
|
|
+ // var f=master.connect()
|
|
|
+ // .whenComplete((result, ex) -> bereitschaft(master))
|
|
|
+ // .whenComplete((result, ex) -> direktAuftrag(master,100));
|
|
|
|
|
|
|
|
|
|
|
|
while(true) {
|
|
|
Thread.sleep(1000);
|
|
|
- readStatus(master);
|
|
|
+ readStatus();
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -76,7 +67,7 @@ public class FHMaster {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- void direktAuftrag(ModbusTcpMaster master) {
|
|
|
+ void direktAuftrag(ModbusTcpMaster master, int pos) {
|
|
|
byte ccon=0x0;
|
|
|
ccon|=(1<<0); //Enable drive
|
|
|
ccon|=(0<<1); //Stop
|
|
@@ -112,7 +103,6 @@ public class FHMaster {
|
|
|
cdir|=(1<<7); // 0 = normal; 1=kurvenscheibenfunktion
|
|
|
|
|
|
byte sbyte4=100; // Geschw, in % vom Basiswert (PNU540
|
|
|
- int pos=50; //position in positionseinheit;
|
|
|
byte sbyte5= (byte)(pos& 0xff);
|
|
|
byte sbyte6= (byte)(pos>>8 & 0xff);
|
|
|
byte sbyte7= (byte)(pos>>16 & 0xff);
|
|
@@ -130,19 +120,22 @@ public class FHMaster {
|
|
|
sbyte8}), 0);
|
|
|
}
|
|
|
|
|
|
- void readStatus(ModbusTcpMaster master) {
|
|
|
+ public CompletableFuture<Status> readStatus() {
|
|
|
+ if(master==null)
|
|
|
+ return null;
|
|
|
CompletableFuture<ReadHoldingRegistersResponse> f =master.sendRequest(new ReadHoldingRegistersRequest(0,4), 0);
|
|
|
- f.whenCompleteAsync((response, ex) -> {
|
|
|
+
|
|
|
+ CompletableFuture<Status> fc= f.thenApply((response) -> {
|
|
|
if (response != null) {
|
|
|
var bb=response.getRegisters();
|
|
|
try {
|
|
|
- byte[] res=bb.array();
|
|
|
- byte scon=res[0];
|
|
|
- byte spos=res[1];
|
|
|
- byte sdir=res[2];
|
|
|
- int istwert1= (res[3] & 0xFF);
|
|
|
- int istwert2= ( (res[4] << 24) & (res[5] <<16) & (res[6] <<8) & res[7]);
|
|
|
- System.out.println(ByteBufUtil.hexDump(bb));
|
|
|
+ byte[] bytes = new byte[bb.readableBytes()];
|
|
|
+ bb.readBytes(bytes);
|
|
|
+ Status s=new Status();
|
|
|
+ s.read(bytes);
|
|
|
+ return s;
|
|
|
+ // System.out.println(s.toString());
|
|
|
+ // System.out.println(ByteBufUtil.hexDump(bb));
|
|
|
}
|
|
|
catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
@@ -150,9 +143,11 @@ public class FHMaster {
|
|
|
ReferenceCountUtil.release(response);
|
|
|
}
|
|
|
else {
|
|
|
- logger.error("Completed exceptionally, message={}", ex.getMessage(), ex);
|
|
|
+ logger.error("Completed exceptionally, message={}", "null");
|
|
|
}
|
|
|
- }, Modbus.sharedExecutor());
|
|
|
+ return null;
|
|
|
+ });
|
|
|
+ return fc;
|
|
|
}
|
|
|
|
|
|
private void bereitschaft(ModbusTcpMaster master) {
|
|
@@ -165,8 +160,6 @@ public class FHMaster {
|
|
|
|
|
|
public void stop() {
|
|
|
started = false;
|
|
|
- masters.forEach(ModbusTcpMaster::disconnect);
|
|
|
- masters.clear();
|
|
|
}
|
|
|
|
|
|
}
|