From 150a2e9b867995ce118940655c8e0fafe2b4e1b9 Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期四, 10 四月 2025 18:28:16 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/model/protocol/StaProtocol.java    |  115 ++++++++++
 src/main/java/com/zy/core/model/DevpSlave.java               |   66 ++++++
 src/main/webapp/views/index.html                             |    1 
 src/main/java/com/zy/core/cache/MessageQueue.java            |   14 +
 src/main/java/com/zy/core/enums/SlaveType.java               |    1 
 src/main/java/com/zy/core/cache/OutputQueue.java             |    1 
 src/main/java/com/zy/core/thread/DevpThread.java             |   14 +
 src/main/java/com/zy/core/thread/impl/SiemensDevpThread.java |  399 ++++++++++++++++++++++++++++++++++++
 8 files changed, 611 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/zy/core/cache/MessageQueue.java b/src/main/java/com/zy/core/cache/MessageQueue.java
index a7a9efd..ea7bd12 100644
--- a/src/main/java/com/zy/core/cache/MessageQueue.java
+++ b/src/main/java/com/zy/core/cache/MessageQueue.java
@@ -16,6 +16,8 @@
 
     //鍥涘悜绌挎杞q浜ゆ崲鏈�
     private static final Map<Integer, ConcurrentLinkedQueue<Task>> SHUTTLE_EXCHANGE = new ConcurrentHashMap<>();
+    //杈撻�乵q浜ゆ崲鏈�
+    private static final Map<Integer, ConcurrentLinkedQueue<Task>> DEVP_EXCHANGE = new ConcurrentHashMap<>();
     //鎻愬崌鏈簃q浜ゆ崲鏈�
     private static final Map<Integer, ConcurrentLinkedQueue<Task>> LIFT_EXCHANGE = new ConcurrentHashMap<>();
     //璐у弶鎻愬崌鏈簃q浜ゆ崲鏈�
@@ -40,6 +42,9 @@
             case Lift:
                 LIFT_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>());
                 break;
+            case Devp:
+                DEVP_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>());
+                break;
             default:
                 break;
         }
@@ -59,6 +64,8 @@
                 return FORK_LIFT_MASTER_EXCHANGE.get(id).offer(task);
             case Lift:
                 return LIFT_EXCHANGE.get(id).offer(task);
+            case Devp:
+                return DEVP_EXCHANGE.get(id).offer(task);
             default:
                 return false;
         }
@@ -78,6 +85,8 @@
                 return FORK_LIFT_MASTER_EXCHANGE.get(id).poll();
             case Lift:
                 return LIFT_EXCHANGE.get(id).poll();
+            case Devp:
+                return DEVP_EXCHANGE.get(id).poll();
             default:
                 return null;
         }
@@ -96,6 +105,8 @@
                 return FORK_LIFT_MASTER_EXCHANGE.get(id).peek();
             case Lift:
                 return LIFT_EXCHANGE.get(id).peek();
+            case Devp:
+                return DEVP_EXCHANGE.get(id).peek();
             default:
                 return null;
         }
@@ -115,6 +126,9 @@
             case Lift:
                 LIFT_EXCHANGE.get(id).clear();
                 break;
+            case Devp:
+                DEVP_EXCHANGE.get(id).clear();
+                break;
             default:
                 break;
         }
diff --git a/src/main/java/com/zy/core/cache/OutputQueue.java b/src/main/java/com/zy/core/cache/OutputQueue.java
index edb1923..157e355 100644
--- a/src/main/java/com/zy/core/cache/OutputQueue.java
+++ b/src/main/java/com/zy/core/cache/OutputQueue.java
@@ -15,5 +15,6 @@
     public static ArrayBlockingQueue<String> LIFT = new ArrayBlockingQueue<>(32);
     //璐у弶鎻愬崌鏈鸿緭鍑烘棩蹇�
     public static ArrayBlockingQueue<String> FORKLIFT = new ArrayBlockingQueue<>(32);
+    public static ArrayBlockingQueue<String> DEVP = new ArrayBlockingQueue<>(32);
 
 }
diff --git a/src/main/java/com/zy/core/enums/SlaveType.java b/src/main/java/com/zy/core/enums/SlaveType.java
index 4b65625..24a2908 100644
--- a/src/main/java/com/zy/core/enums/SlaveType.java
+++ b/src/main/java/com/zy/core/enums/SlaveType.java
@@ -3,6 +3,7 @@
 public enum SlaveType {
 
     Shuttle,
+    Devp,
     Lift,
     ForkLift,
     ForkLiftMaster,
diff --git a/src/main/java/com/zy/core/model/DevpSlave.java b/src/main/java/com/zy/core/model/DevpSlave.java
new file mode 100644
index 0000000..24365d1
--- /dev/null
+++ b/src/main/java/com/zy/core/model/DevpSlave.java
@@ -0,0 +1,66 @@
+package com.zy.core.model;
+
+import com.zy.core.Slave;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 杈撻�佺嚎閰嶇疆
+ * Created by vincent on 2020/8/6
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class DevpSlave extends Slave {
+
+    private Integer rack;
+
+    private Integer slot;
+
+    private List<Sta> inSta = new ArrayList<>();
+
+    private List<Sta> emptyInSta = new ArrayList<>();
+
+    private List<Sta> outSta = new ArrayList<>();
+
+    private List<Sta> pickInSta = new ArrayList<>();
+
+    private List<Sta> pickInSta2 = new ArrayList<>();
+
+    private List<Sta> pickOutSta = new ArrayList<>();
+
+    private List<StaRack> rackInStn = new ArrayList<>();
+
+    private List<StaRack> rackOutStn = new ArrayList<>();
+
+    @Data
+    public static class Sta {
+
+        private Integer staNo;
+
+        private Integer barcode;
+
+        private Integer backSta;
+
+        private Integer led;
+
+        private Integer liftNo;
+
+    }
+
+    @Data
+    public static class StaRack {
+        private Integer devpPlcId;
+
+        private Integer staNo;
+
+        private Integer row;
+
+        private Integer bay;
+
+        private Integer lev;
+    }
+
+}
diff --git a/src/main/java/com/zy/core/model/protocol/StaProtocol.java b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
new file mode 100644
index 0000000..227242f
--- /dev/null
+++ b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -0,0 +1,115 @@
+package com.zy.core.model.protocol;
+
+import com.zy.asrs.entity.BasDevp;
+import lombok.Data;
+
+/**
+ * 杈撻�佺嚎plc鍗曚釜绔欑偣璇︾粏淇℃伅
+ */
+@Data
+public class StaProtocol implements Cloneable {
+
+    // 绔欑偣缂栧彿
+    private Integer siteId;
+
+    // ----------------------------------------------------------------
+    // 宸ヤ綔鍙�
+    private Short workNo = 0;
+
+    // ----------------------------------------------------------------
+    // 鐩爣绔�
+    private Short staNo;
+
+    // ----------------------------------------------------------------
+    // 鑷姩
+    private boolean autoing;
+
+    // 鏈夌墿
+    private boolean loading;
+
+    // 鍙叆
+    private boolean inEnable;
+
+    // 鍙嚭
+    private boolean outEnable;
+
+    // 绌烘澘淇″彿
+    private boolean emptyMk;
+
+    // 婊℃墭鐩�
+    private boolean fullPlt;
+
+    //鎻愬崌鏈哄埌浣嶄俊鍙�
+    private boolean liftArrival;
+
+    //鍥涘悜绌挎杞﹀彲鍙栦俊鍙�
+    private boolean shuttleTakeEnable;
+
+    // 楂�
+    private boolean high;
+
+    // 浣�
+    private boolean low;
+
+    // 閿佸畾鏍囪
+    private boolean pakMk = true;
+
+    // 澶栧舰妫�娴� ------------------------------------------------------------------------
+
+    // 鍓嶈秴闄�
+    private boolean frontErr;
+
+    // 鍚庤秴闄�
+    private boolean backErr;
+
+    // 楂樿秴闄�
+    private boolean highErr;
+
+    // 宸﹁秴闄�
+    private boolean leftErr;
+
+    // 鍙宠秴闄�
+    private boolean rightErr;
+
+    // 瓒呴噸
+    private boolean weightErr;
+
+    // 鎵爜澶辫触
+    private boolean barcodeErr;
+
+    //鍑哄叆搴撴ā寮�0銆佹湭鐭� 1銆佸叆搴擄紝2銆佸嚭搴�
+    private Short outInModel;
+
+    //楂樹綆淇″彿 0:鏃� 1:浣� 2:涓� 3:楂�
+    private Short locType1;
+
+    public BasDevp toSqlModel(){
+        BasDevp basDevp = new BasDevp();
+        basDevp.setDevNo(siteId);
+        basDevp.setWrkNo(workNo.intValue());
+        basDevp.setAutoing(autoing?"Y":"N");
+        basDevp.setLoading(loading?"Y":"N");
+        basDevp.setInEnable(inEnable?"Y":"N");
+        if (siteId == 105 || siteId == 205 || siteId == 346) {
+            basDevp.setOutEnable(outInModel == 2 ? "Y" : "N");
+        }else {
+            basDevp.setOutEnable(outEnable ? "Y" : "N");
+        }
+        basDevp.setLocType1((short) 0);  // 楂樹綆绫诲瀷{0:鏈煡,1:浣庡簱浣�,2:楂樺簱浣峿
+        basDevp.setLocType2((short) 0);  // 瀹界獎绫诲瀷{0:鏈煡,1:绐勫簱浣�,2:瀹藉簱浣峿
+        basDevp.setLocType3((short) 0);  // 杞婚噸绫诲瀷{0:鏈煡,1:杞诲簱浣�,2:閲嶅簱浣峿
+        basDevp.setLocType1(high != low && low ? (short) 1 : (short) 2);
+        return basDevp;
+    }
+
+    @Override
+    public StaProtocol clone() {
+        try {
+            return (StaProtocol) super.clone();
+        } catch (CloneNotSupportedException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+}
diff --git a/src/main/java/com/zy/core/thread/DevpThread.java b/src/main/java/com/zy/core/thread/DevpThread.java
new file mode 100644
index 0000000..46122e9
--- /dev/null
+++ b/src/main/java/com/zy/core/thread/DevpThread.java
@@ -0,0 +1,14 @@
+package com.zy.core.thread;
+
+import com.zy.core.ThreadHandler;
+import com.zy.core.model.protocol.StaProtocol;
+
+import java.util.Map;
+
+public interface DevpThread extends ThreadHandler {
+
+    Map<Integer, StaProtocol> getStation();
+
+    void setPakMk(Integer siteId, boolean pakMk);
+
+}
diff --git a/src/main/java/com/zy/core/thread/impl/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/impl/SiemensDevpThread.java
new file mode 100644
index 0000000..d8b7323
--- /dev/null
+++ b/src/main/java/com/zy/core/thread/impl/SiemensDevpThread.java
@@ -0,0 +1,399 @@
+//package com.zy.core.thread.impl;
+//
+//import HslCommunication.Core.Types.OperateResult;
+//import HslCommunication.Core.Types.OperateResultExOne;
+//import HslCommunication.Profinet.Siemens.SiemensPLCS;
+//import HslCommunication.Profinet.Siemens.SiemensS7Net;
+//import com.alibaba.fastjson.JSON;
+//import com.core.common.Cools;
+//import com.core.common.DateUtils;
+//import com.core.common.SpringUtils;
+//import com.zy.asrs.entity.BasDevp;
+//import com.zy.asrs.service.BasDevpService;
+//import com.zy.core.News;
+//import com.zy.core.cache.MessageQueue;
+//import com.zy.core.cache.OutputQueue;
+//import com.zy.core.cache.SlaveConnection;
+//import com.zy.core.enums.SlaveType;
+//import com.zy.core.model.DevpSlave;
+//import com.zy.core.model.Task;
+//import com.zy.core.model.protocol.StaProtocol;
+//import com.zy.core.thread.DevpThread;
+//import lombok.Data;
+//import lombok.extern.slf4j.Slf4j;
+//
+//import java.text.MessageFormat;
+//import java.util.ArrayList;
+//import java.util.Date;
+//import java.util.List;
+//import java.util.Map;
+//import java.util.concurrent.ConcurrentHashMap;
+//
+///**
+// * 杈撻�佺嚎绾跨▼
+// * Created by vincent on 2020/8/4
+// */
+//@Data
+//@Slf4j
+//public class SiemensDevpThread implements Runnable, DevpThread {
+//
+//    private DevpSlave slave;
+//    private SiemensS7Net siemensS7Net;
+//    private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>();
+//    private short heartBeatVal = 1;
+//    private int barcodeSize = 10;
+//    public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{
+//        add(1012);
+//        add(1014);
+//        add(1015);
+//        add(1022);
+//        add(1023);
+//        add(1025);
+//        add(1026);
+//        add(1031);
+//        add(1032);
+//    }};
+//
+//    public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{
+//        add(1011);
+//        add(1012);
+//        add(1013);
+//        add(1014);
+//        add(1015);
+//        add(1021);
+//        add(1022);
+//        add(1023);
+//        add(1024);
+//        add(1025);
+//        add(1026);
+//        add(1031);
+//        add(1032);
+//    }};
+//
+//    public SiemensDevpThread(DevpSlave slave) {
+//        this.slave = slave;
+//    }
+//
+//    @Override
+//    @SuppressWarnings("InfiniteLoopStatement")
+//    public void run() {
+//        connect();
+//        while (true) {
+//            try {
+//                int step = 1;
+//                Task task = MessageQueue.poll(SlaveType.Devp, slave.getId());
+//                if (task != null) {
+//                    step = task.getStep();
+//                }
+//                switch (step) {
+//                    // 璇绘暟鎹�
+//                    case 1:
+//                        read();
+//                        break;
+//                    // 鍐欐暟鎹� ID+鐩爣绔�
+//                    case 2:
+//                        write((StaProtocol) task.getData());
+//                        read();
+//                        break;
+//                    default:
+//                        break;
+//                }
+//                // 蹇冭烦
+////                heartbeat();
+//                Thread.sleep(400);
+//            } catch (Exception e) {
+//                e.printStackTrace();
+//            }
+//
+//        }
+//    }
+//
+//    @Override
+//    public boolean connect() {
+//        boolean result = false;
+//        siemensS7Net = new SiemensS7Net(SiemensPLCS.S1500, slave.getIp());
+//        siemensS7Net.setRack(slave.getRack().byteValue());
+//        siemensS7Net.setSlot(slave.getSlot().byteValue());
+//        OperateResult connect = siemensS7Net.ConnectServer();
+//        if (connect.IsSuccess) {
+//            result = true;
+//            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戣緭閫佺嚎plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
+//            News.info("杈撻�佺嚎plc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+//        } else {
+//            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戣緭閫佺嚎plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}]  [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
+//            News.error("杈撻�佺嚎plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+//        }
+//        // siemensS7Net.ConnectClose();
+//        return result;
+//    }
+//
+//    /**
+//     * 璇诲彇鐘舵�� ====> 鏁村潡plc
+//     */
+//    private void read() throws InterruptedException {
+//        ArrayList<BasConveyorSta> staNos = getStaNo();
+//        int staNoSize = staNos.size();
+//        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB82.14", (short) (staNoSize * 26));
+//        if (result.IsSuccess) {
+//            for (int i = 0; i < staNoSize; i++) {
+//                BasConveyorSta siteStation = staNos.get(i);
+//                int siteId = siteStation.getSiteNo();// 绔欑偣缂栧彿
+//                StaProtocol staProtocol = station.get(siteId);
+//                if (null == staProtocol) {
+//                    staProtocol = new StaProtocol();
+//                    staProtocol.setSiteId(siteId);
+//
+//                    if (siteId == 1015) {
+//                        staProtocol.setLocNo("1200301");
+//                    } else if (siteId == 1026) {
+//                        staProtocol.setLocNo("1200305");
+//                    }
+//
+//                    station.put(siteId, staProtocol);
+//                }
+//                Thread.sleep(300);
+//                boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, i * 26, 2);
+//                staProtocol.setAutoing(status[0]);  // 鑷姩
+//                staProtocol.setIdle(status[1]); //绌洪棽
+//                staProtocol.setLoading(status[2]);  // 鏈夌墿
+//
+//                staProtocol.setBackErr(status[5]);
+//                staProtocol.setLeftErr(status[6]);
+//                staProtocol.setRightErr(status[7]);
+//                staProtocol.setHighErr(status[8]);
+//                staProtocol.setWeightErr(status[9]);
+//                staProtocol.setLow(status[10]);
+//                staProtocol.setHigh(status[11]);
+//                staProtocol.setInEnable(status[13]); // 鍙叆
+//                staProtocol.setOutEnable(status[14]);// 鍙嚭
+//
+//
+//                staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 26 + 2));     // 宸ヤ綔鍙�
+//                staProtocol.setStaNo((short) siemensS7Net.getByteTransform().TransInt16(result.Content, i * 26 + 4));   // 鐩爣绔�
+//                staProtocol.setFinishWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i * 26 + 6)); //宸插畬鎴愬伐浣滃彿
+//                staProtocol.setBarcode(siemensS7Net.getByteTransform().TransString(result.Content, i * 26 + 10, 12, "UTF-8").trim()); //鏉$爜
+//                staProtocol.setWeight(siemensS7Net.getByteTransform().TransInt32(result.Content, i * 26 + 22)); //閲嶉噺
+//
+//
+////                staProtocol.setWorkMode((int) siemensS7Net.getByteTransform().TransInt16(result.Content, i * 40 + 8));// 宸ヤ綔妯″紡
+//                //staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt16(result.Content, i * 18 + 10));     // 宸ヤ綔鍙�
+//
+//                if (!staProtocol.isPakMk() && !staProtocol.isLoading()) {
+//                    staProtocol.setPakMk(true);
+//                }
+//            }
+//        }
+//
+//        OperateResultExOne<byte[]> resultBarcode = siemensS7Net.Read("DB100.166", (short) 9);
+//        if (resultBarcode.IsSuccess) {
+//            //鏉$爜鏁版嵁
+//            String barcode = siemensS7Net.getByteTransform().TransString(resultBarcode.Content, 0, 9, "UTF-8");// 鏉$爜
+//            BasConveyorStaService basConveyorStaService = SpringUtils.getBean(BasConveyorStaService.class);
+//            DeviceBarcodeService deviceBarcodeService = SpringUtils.getBean(DeviceBarcodeService.class);
+//            BasConveyorSta basConveyorSta = basConveyorStaService.getOne(new LambdaQueryWrapper<BasConveyorSta>().eq(BasConveyorSta::getSiteNo, 31002));
+//            if (basConveyorSta != null) {
+//                DeviceBarcode deviceBarcode = deviceBarcodeService.getById(basConveyorSta.getBarcodeId());
+//                if (deviceBarcode != null) {
+//                    BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, Integer.parseInt(deviceBarcode.getDeviceId()));
+//                    if (barcodeThread != null) {
+//                        barcodeThread.setBarcode(barcode);
+//                    }
+//                }
+//            }
+//        }
+//
+//        if (!Cools.isEmpty(result) && result.IsSuccess) {
+//
+//            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛", DateUtils.convert(new Date()), device.getId()));
+//
+//            // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
+//            try {
+//                List<BasConveyorSta> stations = new ArrayList<>();
+//                for (BasConveyorSta sta : getStaNo()) {
+//                    StaProtocol staProtocol = station.get(sta.getSiteNo());
+//                    BasConveyorSta sqlModel = staProtocol.toSqlModel(sta);
+//                    stations.add(sqlModel);
+//                }
+//
+//                if (!stations.isEmpty()) {
+//                    BasConveyorStaService basConveyorStaService = SpringUtils.getBean(BasConveyorStaService.class);
+//                    if (null != basConveyorStaService && !basConveyorStaService.updateBatchById(stations)) {
+//                        throw new Exception("鏇存柊鏁版嵁搴撴暟鎹け璐�");
+//                    }
+//                }
+//
+//            } catch (Exception e) {
+//                e.printStackTrace();
+//                OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戞洿鏂版暟鎹簱鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort(), device.getRack(), device.getSlot()));
+//                News.error("鏇存柊鏁版嵁搴撴暟鎹け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", device.getId(), device.getIp(), device.getPort(), device.getRack(), device.getSlot());
+//            }
+//
+//        } else {
+//            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戣鍙栬緭閫佺嚎plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort(), device.getRack(), device.getSlot()));
+////            log.error("璇诲彇杈撻�佺嚎plc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", device.getId(), device.getIp(), device.getPort(), device.getRack(), device.getSlot());
+//        }
+//    }
+//
+//    /**
+//     * 鍐欏叆 ID+鐩爣绔� =====> 鍗曠珯鐐瑰啓鍏�
+//     */
+//    private void write(StaProtocol staProtocol) throws InterruptedException {
+//        if (null == staProtocol) {
+//            return;
+//        }
+//        int index = staNos.indexOf(staProtocol.getSiteId());
+//        short[] array = new short[2];
+//        array[0] = staProtocol.getWorkNo();
+//        array[1] = staProtocol.getStaNo();
+////        OperateResult write = siemensS7Net.Write("DB100." + index*4, staProtocol.getWorkNo());    // 宸ヤ綔鍙�
+////        Thread.sleep(500);
+////        OperateResult write1 = siemensS7Net.Write("DB100." + (index*4+2), staProtocol.getStaNo());    // 鐩爣绔�
+//
+//        OperateResult writeResult;
+//        //浠诲姟涓嬪彂娆℃暟
+//        int writeCount = 0;
+//        //浠诲姟涓嬪彂鎴愬姛鏍囪瘑
+//        boolean writeFlag = false;
+//        while(writeCount < 1){
+//            writeResult = siemensS7Net.Write("DB1000." + index*4, array);    // 宸ヤ綔鍙枫�佺洰鏍囩珯
+//            if(writeResult.IsSuccess){
+//                Thread.sleep(500);
+//                OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB1000." + index*4, (short)4);
+//                if(readResult.IsSuccess){
+//                    short workNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0);
+//                    short staNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 2);
+//                    if(staProtocol.getWorkNo().equals(workNo) && staProtocol.getStaNo().equals(staNo)){
+//                        //浠诲姟鍛戒护鍐欏叆鎴愬姛
+//                        writeFlag = true;
+//                        log.info("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝骞朵笖鍥炶鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+//                        break;
+//                    } else {//杩斿洖缁撴灉鏄垚鍔熶簡锛屼絾鏄湡瀹炲�间笉鐩稿悓
+//                        writeCount++;
+//                        OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}",
+//                                slave.getId(), JSON.toJSON(staProtocol),writeCount));
+//                        log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={}锛寋}锛屽啓鍏ユ鏁�={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+//                    }
+//                } else {
+//                    writeCount++;
+//                    OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}",
+//                            slave.getId(), JSON.toJSON(staProtocol), writeCount));
+//                    log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+//                }
+//            } else {
+//                writeCount++;
+//                OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2},鍐欏叆娆℃暟={3}",
+//                        slave.getId(), JSON.toJSON(staProtocol),writeCount));
+//                log.error("鍐欏叆杈撻�佺嚎鍛戒护澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},鍐欏叆娆℃暟={}", slave.getId(), JSON.toJSON(staProtocol), writeCount);
+//            }
+//            Thread.sleep(200);
+//        }
+//
+//        //鍐欏懡浠ゅ皾璇曚簡5娆¤繕鏄け璐ヤ簡
+//        if(!writeFlag){
+//            staProtocol = station.get(staProtocol.getSiteId());
+//            if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) {
+//                staProtocol.setPakMk(true);
+//            }
+//            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎鍛戒护灏濊瘯5娆″け璐ャ�傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(staProtocol)));
+//            log.error("鍐欏叆杈撻�佺嚎鍛戒护灏濊瘯5娆″け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(staProtocol));
+//
+////            //閲嶆柊娣诲姞鏁版嵁鍒颁换鍔¢槦鍒�
+////            boolean result = MessageQueue.offer(SlaveType.Devp, slave.getId(), new Task(2, staProtocol));
+//            read();//璇诲彇1娆¤澶囩姸鎬�
+//            return;
+//        } else {
+//            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆� 杈撻�佺嚎鍛戒护涓嬪彂鎴愬姛 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol)));
+//            log.info("杈撻�佺嚎鍛戒护涓嬪彂 [id:{}] >>>>> 鍛戒护涓嬪彂鎴愬姛锛� {}",  slave.getId(), JSON.toJSON(staProtocol));
+//
+//            Integer siteId = staProtocol.getSiteId();
+//            staProtocol = station.get(siteId);
+//            if ((siteId == 101 || siteId == 201)&&(staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0)) {
+//                staProtocol.setPakMk(true);
+//            }
+//        }
+//    }
+//
+//    /**
+//     * 蹇冭烦
+//     */
+//    private void heartbeat(){
+//        if (heartBeatVal == 1) {
+//            heartBeatVal = 2;
+//        } else {
+//            heartBeatVal = 1;
+//        }
+//        OperateResult write = siemensS7Net.Write("DB100.50", heartBeatVal);
+//        if (!write.IsSuccess) {
+//            News.error("杈撻�佺嚎plc缂栧彿={} 蹇冭烦澶辫触", slave.getId());
+//        }
+//    }
+//
+//    /**
+//     * 璁剧疆鍏ュ簱鏍囪
+//     */
+//    @Override
+//    public void setPakMk(Integer siteId, boolean pakMk) {
+//        StaProtocol staProtocol = station.get(siteId);
+//        if (null != staProtocol) {
+//            staProtocol.setPakMk(pakMk);
+//        }
+//    }
+//
+//    public synchronized void setOutInModel(Short staNo, Short outInModel) {
+//        String dbAddress = "DB51.4";
+//        if (staNo == 105) {
+//            dbAddress = "DB51.4";
+//        }else if (staNo == 205) {
+//            dbAddress = "DB51.10";
+//        }else if (staNo == 346) {
+//            dbAddress = "DB51.12";
+//        }else {
+//            News.error("妯″紡鍒囨崲澶辫触锛屽湴鍧�閿欒={},model={}", staNo, outInModel);
+//            return;
+//        }
+//        OperateResult write = siemensS7Net.Write(dbAddress, outInModel);
+//        if (!write.IsSuccess) {
+//            News.error("妯″紡鍒囨崲澶辫触={},model={}", staNo, outInModel);
+//        }
+//    }
+//
+//    @Override
+//    public void close() {
+//        siemensS7Net.ConnectClose();
+//    }
+//
+//    public static void main(String[] args) {
+////        System.out.println(staNos.indexOf(129));
+//        System.out.println(staNos.size());
+//        for (int i = 0; i<staNos.size(); i++) {
+////            System.out.println(i*2);
+////            System.out.println(i*2 + 200);
+////            System.out.println(i);
+//        }
+////        int index = staNos.indexOf(128);
+////        System.out.println(index*2);
+////        System.out.println(index*2 + 200);
+//    }
+//
+////    public static void main(String[] args) throws Exception {
+////        DevpSlave slave = new DevpSlave();
+////        slave.setIp("192.168.2.125");
+////        SiemensDevpThread devpThread = new SiemensDevpThread(slave);
+////        devpThread.connect();
+////        devpThread.read();
+////        // 鍐�
+////        StaProtocol staProtocol = devpThread.getStation().get(1);
+////        staProtocol.setWorkNo((short) 232);
+////        staProtocol.setStaNo((short) 6);
+////        staProtocol.setAutoing(true);
+////        staProtocol.setEmptyMk(true);
+////        staProtocol.setInEnable(true);
+////        devpThread.write(staProtocol);
+////        System.out.println("----------------------------------------");
+////        // 璇�
+////        devpThread.read();
+////        System.out.println(JSON.toJSONString(devpThread.station));
+////
+////    }
+//
+//}
diff --git a/src/main/webapp/views/index.html b/src/main/webapp/views/index.html
index 67de5a0..3c8b4f5 100644
--- a/src/main/webapp/views/index.html
+++ b/src/main/webapp/views/index.html
@@ -19,6 +19,7 @@
     <div class="nav">
         <ul class="cl-effect-4">
             <li><a id="console" onclick="nav(this.id)" class="nav-select" href="#">涓绘帶鍥�</a></li>
+            <li><a id="pipline" onclick="nav(this.id)" class="nav-select" href="#">杈撻�佺嚎</a></li>
             <li><a id="lift" onclick="nav(this.id)" class="nav-unselect" href="#">鎻愬崌鏈�</a></li>
             <li><a id="shuttle" onclick="nav(this.id)" class="nav-unselect" href="#">鍥涘悜绌挎杞�</a></li>
             <li><a id="admin" onclick="nav(this.id)" class="nav-unselect" href="#">绠$悊鍚庡彴</a></li>

--
Gitblit v1.9.1