Browse Source

status call

Martin Kunz 4 years ago
parent
commit
4f74ca28b6

+ 9 - 9
src/main/java/at/acdp/urweb/Main.java

@@ -9,24 +9,24 @@ import org.slf4j.LoggerFactory;
 
 public class Main {
     private final static org.slf4j.Logger logger = LoggerFactory.getLogger(Main.class);
+    public static FHMaster fhm=new FHMaster();
     public static void main(String[] args) {
         Params app = null;
         try {
             app = picocli.CommandLine.populateCommand(new Params(), args);
-            var a=new FHMaster();
-            a.start();
-        } catch (Exception e) {
-            logger.error("failed.", e);
-            picocli.CommandLine.usage(new Params(), System.out);
-            System.exit(1);
-        }
-        try {
-            //new WebServer(app).start();
             NanoServer server = new NanoServer(app.port);
             server.add(XR.server(XRServer.class));
             server.start();
         } catch (Exception e) {
             logger.error("Server exited", e);
         }
+        try {
+            fhm.start();
+        } catch (Exception e) {
+            logger.error("failed.", e);
+            picocli.CommandLine.usage(new Params(), System.out);
+            System.exit(1);
+        }
+
     }
 }

+ 24 - 31
src/main/java/at/acdp/urweb/fhpp/FHMaster.java

@@ -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();
     }
 
 }

+ 18 - 0
src/main/java/at/acdp/urweb/web/XRServer.java

@@ -1,7 +1,10 @@
 package at.acdp.urweb.web;
 
+import at.acdp.urweb.Main;
 import com.nmote.xr.XRMethod;
 
+import java.util.concurrent.ExecutionException;
+
 public class XRServer {
 
     @XRMethod(value = "example.helloWorld", help = "Returns 'Helo ' + argument")
@@ -9,6 +12,21 @@ public class XRServer {
         return "Hello '" + s + "'";
     }
 
+    @XRMethod(value = "ref", help = "ref")
+    public static String ref(String a, String b) {
+        return "ref";
+    }
+
+    @XRMethod(value = "status", help = "Returns status")
+    public static String status() {
+        var x=Main.fhm.readStatus();
+        try {
+            return x==null?"<null>":x.get().toString();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return e.toString();
+        }
+    }
 
     @XRMethod(value = "set_title", help = "Returns 'Helo ' + argument")
     public static String set_title(Object s) {