From 697af1096e89e54d473874179a704719fb184df2 Mon Sep 17 00:00:00 2001
From: zhangc <zc@123>
Date: 星期四, 10 四月 2025 22:02:32 +0800
Subject: [PATCH] 1

---
 src/main/java/com/zy/core/thread/LedThread.java             |   23 +
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  288 ++++++++++++
 src/main/java/com/zy/core/thread/impl/NormalLedThread.java  |   88 ++++
 src/main/java/com/zy/core/cache/MessageQueue.java           |   16 
 src/main/java/com/zy/core/model/command/LedCommand.java     |   36 +
 src/main/java/com/zy/core/thread/impl/FyDevpThread.java     |  319 ++++++++++++++
 src/main/java/com/zy/core/ServerBootstrap.java              |   37 +
 src/main/java/com/zy/core/properties/SlaveProperties.java   |    4 
 src/main/java/com/zy/core/model/protocol/StaProtocol.java   |   16 
 /dev/null                                                   |  399 ------------------
 src/main/java/com/zy/core/enums/SlaveType.java              |    1 
 src/main/java/com/zy/core/MainProcess.java                  |    6 
 src/main/resources/application.yml                          |   30 
 13 files changed, 834 insertions(+), 429 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index 35e110a..162bc07 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1,24 +1,33 @@
 package com.zy.asrs.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Cools;
 import com.zy.asrs.domain.enums.NotifyMsgType;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.service.*;
 import com.zy.asrs.utils.NotifyUtils;
 import com.zy.asrs.utils.Utils;
-import com.zy.common.model.*;
+import com.zy.common.model.MapNode;
+import com.zy.common.model.NavigateNode;
+import com.zy.common.model.SearchLocParam;
+import com.zy.common.model.StartupDto;
 import com.zy.common.model.enums.NavigationMapType;
 import com.zy.common.service.CommonService;
 import com.zy.common.utils.*;
 import com.zy.core.News;
 import com.zy.core.action.LiftAction;
 import com.zy.core.action.ShuttleAction;
+import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.SlaveConnection;
 import com.zy.core.dispatcher.ShuttleDispatchUtils;
 import com.zy.core.enums.*;
 import com.zy.core.model.*;
-import com.zy.core.model.command.*;
+import com.zy.core.model.command.LiftAssignCommand;
+import com.zy.core.model.command.LiftCommand;
+import com.zy.core.model.command.ShuttleAssignCommand;
+import com.zy.core.model.command.ShuttleCommand;
 import com.zy.core.model.protocol.*;
 import com.zy.core.properties.SlaveProperties;
 import com.zy.core.thread.*;
@@ -28,7 +37,10 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
 
 /**
  * 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔�
@@ -78,6 +90,250 @@
     private BasLiftOptService basLiftOptService;
     @Autowired
     private LiftAction liftAction;
+
+    //鍏ュ簱绔欑偣
+    public static final ArrayList<Integer> inSta = new ArrayList<Integer>() {{
+        add(1012);
+        add(1014);
+        add(1022);
+        add(1025);
+        add(1032);
+    }};
+
+    //鍑哄簱绔欑偣
+    public static final ArrayList<Integer> outSta = new ArrayList<Integer>() {{
+        add(1012);
+        add(1014);
+        add(1022);
+        add(1025);
+        add(1032);
+    }};
+
+
+    private boolean isInEnable(DevpThread devpThread, Integer staNo) {
+        if (staNo == null) {
+            return false;
+        }
+        // 鑾峰彇鍏ュ簱绔欎俊鎭�
+        switch (staNo) {
+            case 1011:
+            case 1012:
+                devpThread.getStation().get(1012).isInEnable();
+                break;
+            case 1021:
+            case 1022:
+            case 1023:
+                devpThread.getStation().get(1022).isInEnable();
+                break;
+            case 1031:
+            case 1032:
+                devpThread.getStation().get(1032).isInEnable();
+                break;
+            case 1025:
+            case 1026:
+                devpThread.getStation().get(1025).isInEnable();
+                break;
+            case 1013:
+            case 1014:
+            case 1015:
+                devpThread.getStation().get(1014).isInEnable();
+                break;
+        }
+        return false;
+    }
+
+    private boolean isOutEnable(DevpThread devpThread, Integer staNo) {
+        if (staNo == null) {
+            return false;
+        }
+        // 鑾峰彇鍏ュ簱绔欎俊鎭�
+        switch (staNo) {
+            case 1011:
+            case 1012:
+                devpThread.getStation().get(1012).isOutEnable();
+                break;
+            case 1021:
+            case 1022:
+            case 1023:
+                devpThread.getStation().get(1022).isOutEnable();
+                break;
+            case 1031:
+            case 1032:
+                devpThread.getStation().get(1032).isOutEnable();
+                break;
+            case 1025:
+            case 1026:
+                devpThread.getStation().get(1025).isOutEnable();
+                break;
+            case 1013:
+            case 1014:
+            case 1015:
+                devpThread.getStation().get(1014).isOutEnable();
+                break;
+        }
+        return false;
+    }
+
+    /**
+     * 缁勬墭
+     * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2
+     */
+    public synchronized void generateInboundWrk() {
+        try {
+            DevpSlave devpSlave = slaveProperties.getDevpSlave().get(0);
+            // 閬嶅巻鍏ュ簱鍙�
+            for (DevpSlave.Sta inSta : devpSlave.getInSta()) {
+                // 鑾峰彇鍏ュ簱绔欎俊鎭�
+                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devpSlave.getId());
+                StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
+                if (staProtocol == null) {
+                    continue;
+                } else {
+                    staProtocol = staProtocol.clone();
+                }
+                Short workNo = staProtocol.getWorkNo();
+                // 灏哄妫�娴嬪紓甯�
+                boolean back = false;
+                String errMsg = "寮傚父锛�";
+                if (staProtocol.isFrontErr()) {
+                    errMsg = errMsg + "鍓嶈秴闄愶紱";
+                    back = true;
+                }
+                if (staProtocol.isBackErr()) {
+                    errMsg = errMsg + "鍚庤秴闄�";
+                    back = true;
+                }
+                if (staProtocol.isHighErr()) {
+                    errMsg = errMsg + "楂樿秴闄�";
+                    back = true;
+                }
+                if (staProtocol.isLeftErr()) {
+                    errMsg = errMsg + "宸﹁秴闄�";
+                    back = true;
+                }
+                if (staProtocol.isRightErr()) {
+                    errMsg = errMsg + "鍙宠秴闄�";
+                    back = true;
+                }
+                if (staProtocol.isWeightErr()) {
+                    errMsg = errMsg + "瓒呴噸";
+                    back = true;
+                }
+                if (staProtocol.isBarcodeErr()) {
+                    errMsg = errMsg + "鎵爜澶辫触";
+                    back = true;
+                }
+                // 閫�鍥�
+                if (back) {
+                    // led 寮傚父鏄剧ず
+                    LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
+                    if (ledThread != null) {
+                        ledThread.error(errMsg);
+                    }
+                    continue;
+                }
+
+                // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+                if (staProtocol.isAutoing() && staProtocol.isLoading()
+                        && isInEnable(devpThread, inSta.getStaNo())
+                        && !staProtocol.isEmptyMk() && (workNo == 0 || (workNo >= 9990 && workNo <= 9999))
+                        && staProtocol.isPakMk()
+                ) {
+                    String barcode = staProtocol.getBarcode();
+                    if (!Cools.isEmpty(barcode)) {
+                        News.info("鏉$爜鎵弿鍣ㄦ娴嬫潯鐮佷俊鎭細{}", barcode);
+                    }
+
+                    // 鍒ゆ柇閲嶅宸ヤ綔妗�
+                    WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
+                            .eq("source_sta_no", inSta.getStaNo())
+                            .eq("wrk_sts", WrkStsType.NEW_INBOUND)
+                            .eq("barcode", barcode));
+                    if (wrkMast != null) {
+                        News.error("宸ヤ綔妗e凡瀛樺湪,宸ヤ綔鍙�={}", wrkMast.getWrkNo());
+                        if (staProtocol.getWorkNo().intValue() != wrkMast.getWrkNo()) {
+                            MessageQueue.offer(SlaveType.Devp, devpSlave.getId(), new Task(2, staProtocol));
+                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+                            News.info("杈撻�佺嚎鍏ュ簱鍛戒护涓嬪彂锛屼换鍔℃暟鎹�={}", JSON.toJSON(wrkMast));
+                        }
+                        continue;
+                    }
+
+                    try {
+                        String wmsUrl = "127.0.0.1:8080/fyxcwms";
+                        SearchLocParam param = new SearchLocParam();
+                        param.setBarcode(barcode);
+                        param.setIoType(1);
+                        param.setSourceStaNo(inSta.getStaNo());
+                        param.setLocType1(staProtocol.getLocType1().shortValue());
+                        String response = new HttpHandler.Builder()
+                                .setUri(wmsUrl)
+                                .setPath("/rpc/pakin/loc/v1")
+                                .setJson(JSON.toJSONString(param))
+                                .build()
+                                .doPost();
+                        JSONObject jsonObject = JSON.parseObject(response);
+                        Integer code = jsonObject.getInteger("code");
+                        if (code.equals(200)) {
+                            MessageQueue.offer(SlaveType.Devp, devpSlave.getId(), new Task(2, staProtocol));
+                            devpThread.setPakMk(staProtocol.getSiteId(), false);
+                            News.info("杈撻�佺嚎鍏ュ簱鍛戒护涓嬪彂锛屼换鍔℃暟鎹�={}", JSON.toJSON(wrkMast));
+
+                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
+
+//                                String wmsLocNo = dto.getLocNo();
+//                                int row = Integer.parseInt(wmsLocNo.substring(0, 2));
+//                                int bay = Integer.parseInt(wmsLocNo.substring(2, 5));
+//                                int lev = Integer.parseInt(wmsLocNo.substring(5, 7));
+//                                String wcsLocNo = Utils.getLocNo(row, bay, lev);
+//
+//                                CreateInTaskParam createInTaskParam = new CreateInTaskParam();
+//                                createInTaskParam.setTaskNo(String.valueOf(dto.getWorkNo()));
+//                                createInTaskParam.setDestLoc(wcsLocNo);
+//                                createInTaskParam.setOriginSite(dto.getSourceStaNo().toString());
+//                                createInTaskParam.setDestSite(dto.getStaNo().toString());
+//                                createInTaskParam.setPriority(11);
+//                                createInTaskParam.setBarcode(barcode);
+//
+//                                R result = openUtils.createInTask(createInTaskParam);
+//                                News.info("鍒涘缓鍏ュ簱浠诲姟锛屼换鍔℃暟鎹�={}锛學MS鍝嶅簲={}锛岃姹傚搷搴�={}", JSON.toJSON(param), JSON.toJSON(jsonObject), JSON.toJSON(result));
+//                                try{
+//                                    String msg = "";
+//                                    HashMap<String, String> hashMap = new HashMap<>();
+//                                    hashMap.put("msg", msg);
+//                                    hashMap.put("sta", inSta.getStaNo().toString());
+//                                    new HttpHandler.Builder()
+//                                            .setUri(wmsUrl)
+//                                            .setPath("/rpc/led/getError")
+//                                            .setJson(JSON.toJSONString(hashMap))
+//                                            .build()
+//                                            .doPost();
+//                                }catch (Exception e){
+//
+//                                }
+                        } else {
+                            String msg = jsonObject.getString("msg");
+                            HashMap<String, String> hashMap = new HashMap<>();
+                            hashMap.put("msg", msg);
+                            hashMap.put("sta", inSta.getStaNo().toString());
+                            new HttpHandler.Builder()
+                                    .setUri(wmsUrl)
+                                    .setPath("/rpc/led/getError")
+                                    .setJson(JSON.toJSONString(hashMap))
+                                    .build()
+                                    .doPost();
+                            News.error("鍏ュ簱鐢宠澶辫触锛屼换鍔℃暟鎹�={}锛岃姹傚搷搴�={}", JSON.toJSON(param), JSON.toJSON(jsonObject));
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
 
     /**
      * 鍒濆鍖栧疄鏃跺湴鍥�
@@ -494,7 +750,7 @@
                         }
                     } else {
                         Object object = redisUtil.get(RedisKeyType.SHUTTLE_WORK_FLAG.key + shuttleProtocol.getTaskNo());
-                        if(object != null){
+                        if (object != null) {
                             ShuttleAssignCommand assignCommand = JSON.parseObject(object.toString(), ShuttleAssignCommand.class);
                             if (!assignCommand.getAuto()) {
                                 //鎵嬪姩妯″紡
@@ -1191,7 +1447,7 @@
                         }
                         int errorCode = Integer.parseInt(shuttleProtocol.getErrorCode());
                         BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(errorCode);
-                        String errName = basShuttleErr==null? "鏈煡寮傚父":basShuttleErr.getErrName();
+                        String errName = basShuttleErr == null ? "鏈煡寮傚父" : basShuttleErr.getErrName();
                         BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog(
                                 null,    // 缂栧彿
                                 wrkMast.getWrkNo(),    // 宸ヤ綔鍙�
@@ -1263,7 +1519,7 @@
                         }
 
                         BasLiftErr basLiftErr = basLiftErrService.queryByCode(Integer.parseInt(liftProtocol.getErrorCode()));
-                        String errName = basLiftErr==null? "鏈煡寮傚父":basLiftErr.getErrName();
+                        String errName = basLiftErr == null ? "鏈煡寮傚父" : basLiftErr.getErrName();
 
                         BasLiftErrLog basLiftErrLog = new BasLiftErrLog(
                                 null,    // 缂栧彿
@@ -1367,7 +1623,7 @@
                             ArrayList<String> locs = new ArrayList<>();
                             locs.add(charge.getLocNo());
                             Integer checkHasShuttle = Utils.checkGroupLocHasShuttle(locs);
-                            if(checkHasShuttle != null) {
+                            if (checkHasShuttle != null) {
                                 //褰撳墠鍏呯數妗╂湁绌挎杞︼紝涓嶅垎閰嶈鍏呯數妗�
                                 continue;
                             }
@@ -1417,7 +1673,7 @@
             //鏌ヨ灏忚溅鍏呯數浠诲姟
             for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
                 WrkMast wrkMast = wrkMastService.selectChargeWorking(shuttle.getId());
-                if(wrkMast == null) {
+                if (wrkMast == null) {
                     continue;
                 }
 
@@ -1503,7 +1759,7 @@
 
             //鍒ゆ柇鏄惁瀛樺湪鏈畬鎴愮殑绉诲姩浠诲姟
             WrkMast moveWrk = wrkMastService.selectShuttleHasMoveWorking(wrkMast.getShuttleNo());
-            if(moveWrk != null) {
+            if (moveWrk != null) {
                 return false;
             }
 
@@ -1604,7 +1860,7 @@
             }
 
             BasShuttleCharge basShuttleCharge = basShuttleChargeService.selectOne(new EntityWrapper<BasShuttleCharge>().eq("charge_id", wrkMast.getMk()));
-            if(basShuttleCharge == null) {
+            if (basShuttleCharge == null) {
                 return false;
             }
 
@@ -1636,7 +1892,7 @@
                     this.shuttleMoveExecuteTransportLift(wrkMast);
                 } else if ("TRANSPORT_DEVP".equals(wrkMast.getMk())) {
 
-                }else {
+                } else {
                     this.shuttleMoveExecuteMove(wrkMast);
                 }
             }
@@ -1682,7 +1938,7 @@
         if (Utils.getRow(liftLocNo) == Utils.getRow(wrkMast.getSourceLocNo()) && Utils.getBay(liftLocNo) == Utils.getBay(wrkMast.getSourceLocNo())) {
             //鍙栬揣浣嶇疆鏄彁鍗囨満
             this.shuttleMoveExecuteTransportLiftTake(wrkMast);
-        }else {
+        } else {
             //鏀捐揣浣嶇疆鏄彁鍗囨満
             this.shuttleMoveExecuteTransportLiftPut(wrkMast);
         }
@@ -1907,7 +2163,7 @@
                 wrkMast.setSystemMsg("");//娓呯┖娑堟伅
                 wrkMastService.updateById(wrkMast);
                 return false;
-            }else {
+            } else {
                 liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo());
                 if (liftThread == null) {
                     News.info("{}鍙锋彁鍗囨満涓嶅瓨鍦�", wrkMast.getLiftNo());
@@ -2371,7 +2627,7 @@
                 wrkMast.setSystemMsg("");//娓呯┖娑堟伅
                 wrkMastService.updateById(wrkMast);
                 return false;
-            }else {
+            } else {
                 liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo());
                 if (liftThread == null) {
                     News.info("{}鍙锋彁鍗囨満涓嶅瓨鍦�", wrkMast.getLiftNo());
@@ -2934,7 +3190,7 @@
                     return false;//璺緞瑙i攣澶辫触
                 }
                 commands.addAll(moveCommands);
-            }else {
+            } else {
                 //灏忚溅鍦ㄥ緟鏈轰綅锛岀洿鎺ョЩ鍔ㄥ畬鎴�
                 wrkMast.setWrkSts(WrkStsType.MOVE_SITE_COMPLETE.sts);//  302.灏忚溅绉诲姩鑷崇珯鐐� ==> 303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴�
                 wrkMast.setModiTime(now);
@@ -3134,7 +3390,7 @@
                 wrkMast.setSystemMsg("");//娓呯┖娑堟伅
                 wrkMastService.updateById(wrkMast);
                 return false;
-            }else {
+            } else {
                 liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo());
                 if (liftThread == null) {
                     News.info("{}鍙锋彁鍗囨満涓嶅瓨鍦�", wrkMast.getLiftNo());
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index c500a2c..2fb54ae 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -40,6 +40,12 @@
                     if (!SystemProperties.WCS_RUNNING_STATUS.get()) {
                         continue;
                     }
+                    //zhangc
+                    //杈撻�佺嚎
+                    // 鍏ュ簱  ===>> 鍏ュ簱绔欏埌鍫嗗灈鏈虹珯锛屾牴鎹潯鐮佹壂鎻忕敓鎴愬叆搴撳伐浣滄。
+                    mainService.generateInboundWrk(); // 缁勬墭
+
+
 
                     //鍒濆鍖栧疄鏃跺湴鍥�
                     mainService.initRealtimeBasMap();
diff --git a/src/main/java/com/zy/core/ServerBootstrap.java b/src/main/java/com/zy/core/ServerBootstrap.java
index 44b5464..e93b49b 100644
--- a/src/main/java/com/zy/core/ServerBootstrap.java
+++ b/src/main/java/com/zy/core/ServerBootstrap.java
@@ -5,9 +5,11 @@
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.SlaveConnection;
 import com.zy.core.enums.SlaveType;
-import com.zy.core.model.*;
+import com.zy.core.model.DevpSlave;
+import com.zy.core.model.ForkLiftSlave;
+import com.zy.core.model.LiftSlave;
+import com.zy.core.model.ShuttleSlave;
 import com.zy.core.properties.SlaveProperties;
-import com.zy.core.thread.*;
 import com.zy.core.thread.impl.*;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -46,7 +48,7 @@
         News.info("鏍稿績鎺у埗灞傚凡鍚姩...............................................");
     }
 
-    private void initMq(){
+    private void initMq() {
         // 鍒濆鍖栬揣鍙夋彁鍗囨満mq
         for (Slave forkLift : slaveProperties.getForkLift()) {
             MessageQueue.init(SlaveType.ForkLift, forkLift);
@@ -61,7 +63,7 @@
         }
     }
 
-    private void initThread(){
+    private void initThread() {
         // 鍒濆鍖栬揣鍙夋彁鍗囨満
         for (ForkLiftSlave forkLiftSlave : slaveProperties.getForkLift()) {
             News.info("鍒濆鍖栬揣鍙夋彁鍗囨満........................................................");
@@ -119,6 +121,33 @@
             new Thread(thread).start();
             SlaveConnection.put(SlaveType.Shuttle, shuttleSlave.getId(), thread);
         }
+        // 鍒濆鍖栬緭閫佺嚎
+        for (DevpSlave devpSlave : slaveProperties.getDevpSlave()) {
+            News.info("鍒濆鍖栬緭閫佺嚎......................................................");
+            ThreadHandler thread = null;
+            if (devpSlave.getThreadImpl().equals("FyDevpThread")) {
+                thread = new FyDevpThread(devpSlave);
+            } else {
+                throw new CoolException("鏈煡鐨勭嚎绋嬪疄鐜�");
+            }
+
+            new Thread(thread).start();
+            SlaveConnection.put(SlaveType.Shuttle, devpSlave.getId(), thread);
+        }
+
+        // 鍒濆鍖栫數瑙嗘満
+        for (DevpSlave devpSlave : slaveProperties.getL()) {
+            News.info("鍒濆鍖栫數瑙嗘満......................................................");
+            ThreadHandler thread = null;
+            if (devpSlave.getThreadImpl().equals("FyDevpThread")) {
+                thread = new FyDevpThread(devpSlave);
+            } else {
+                throw new CoolException("鏈煡鐨勭嚎绋嬪疄鐜�");
+            }
+
+            new Thread(thread).start();
+            SlaveConnection.put(SlaveType.Shuttle, devpSlave.getId(), thread);
+        }
     }
 
 
diff --git a/src/main/java/com/zy/core/cache/MessageQueue.java b/src/main/java/com/zy/core/cache/MessageQueue.java
index ea7bd12..2659aa4 100644
--- a/src/main/java/com/zy/core/cache/MessageQueue.java
+++ b/src/main/java/com/zy/core/cache/MessageQueue.java
@@ -24,6 +24,8 @@
     private static final Map<Integer, ConcurrentLinkedQueue<Task>> FORK_LIFT_EXCHANGE = new ConcurrentHashMap<>();
     //璐у弶鎻愬崌鏈篗aster mq浜ゆ崲鏈�
     private static final Map<Integer, ConcurrentLinkedQueue<Task>> FORK_LIFT_MASTER_EXCHANGE = new ConcurrentHashMap<>();
+    //鏄剧ず灞弇q浜ゆ崲鏈�
+    private static final Map<Integer, ConcurrentLinkedQueue<Task>> LED_EXCHANGE = new ConcurrentHashMap<>();
 
     /**
      * mq 浜ゆ崲鏈哄垵濮嬪寲
@@ -44,6 +46,9 @@
                 break;
             case Devp:
                 DEVP_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>());
+                break;
+            case Led:
+                LED_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>());
                 break;
             default:
                 break;
@@ -66,6 +71,8 @@
                 return LIFT_EXCHANGE.get(id).offer(task);
             case Devp:
                 return DEVP_EXCHANGE.get(id).offer(task);
+            case Led:
+                return LED_EXCHANGE.get(id).offer(task);
             default:
                 return false;
         }
@@ -87,6 +94,8 @@
                 return LIFT_EXCHANGE.get(id).poll();
             case Devp:
                 return DEVP_EXCHANGE.get(id).poll();
+            case Led:
+                return LED_EXCHANGE.get(id).poll();
             default:
                 return null;
         }
@@ -107,12 +116,14 @@
                 return LIFT_EXCHANGE.get(id).peek();
             case Devp:
                 return DEVP_EXCHANGE.get(id).peek();
+            case Led:
+                return LED_EXCHANGE.get(id).peek();
             default:
                 return null;
         }
     }
 
-    public static void clear(SlaveType type, Integer id){
+    public static void clear(SlaveType type, Integer id) {
         switch (type) {
             case Shuttle:
                 SHUTTLE_EXCHANGE.get(id).clear();
@@ -129,6 +140,9 @@
             case Devp:
                 DEVP_EXCHANGE.get(id).clear();
                 break;
+            case Led:
+                LED_EXCHANGE.get(id).clear();
+                break;
             default:
                 break;
         }
diff --git a/src/main/java/com/zy/core/enums/SlaveType.java b/src/main/java/com/zy/core/enums/SlaveType.java
index 24a2908..9ad99d3 100644
--- a/src/main/java/com/zy/core/enums/SlaveType.java
+++ b/src/main/java/com/zy/core/enums/SlaveType.java
@@ -7,6 +7,7 @@
     Lift,
     ForkLift,
     ForkLiftMaster,
+    Led
     ;
 
     public static SlaveType findInstance(String s){
diff --git a/src/main/java/com/zy/core/model/command/LedCommand.java b/src/main/java/com/zy/core/model/command/LedCommand.java
new file mode 100644
index 0000000..17da8b5
--- /dev/null
+++ b/src/main/java/com/zy/core/model/command/LedCommand.java
@@ -0,0 +1,36 @@
+package com.zy.core.model.command;
+
+import com.zy.common.model.MatDto;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * led鍛戒护鎶ユ枃
+ * Created by vincent on 2020/8/11
+ */
+@Data
+public class LedCommand extends Object {
+
+    private String title;
+
+    private String workNo;
+
+    private Integer staNo;
+
+    private Integer sourceStaNo;
+
+    private String locNo;
+
+    private String sourceLocNo;
+
+    private List<MatDto> matDtos = new ArrayList<>();
+
+    private boolean emptyMk = false;
+
+    private Integer ioType;
+
+    private String barcode;
+
+}
diff --git a/src/main/java/com/zy/core/model/protocol/StaProtocol.java b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
index 227242f..d79b39c 100644
--- a/src/main/java/com/zy/core/model/protocol/StaProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -20,13 +20,29 @@
     // 鐩爣绔�
     private Short staNo;
 
+    // 瀹岀粨宸ヤ綔鍙�
+    private Short  finishWorkNo;
+
     // ----------------------------------------------------------------
     // 鑷姩
     private boolean autoing;
 
+    //绌洪棽
+    private boolean idle;
+
+    // 鏉$爜
+    private String    barcode;
+
+
+    //閲嶉噺
+    private Integer weight;
+
     // 鏈夌墿
     private boolean loading;
 
+    // 搴撲綅鍙�
+    private String locNo;
+
     // 鍙叆
     private boolean inEnable;
 
diff --git a/src/main/java/com/zy/core/properties/SlaveProperties.java b/src/main/java/com/zy/core/properties/SlaveProperties.java
index 8e03698..ff4f254 100644
--- a/src/main/java/com/zy/core/properties/SlaveProperties.java
+++ b/src/main/java/com/zy/core/properties/SlaveProperties.java
@@ -23,6 +23,10 @@
 
     private int groupCount;
 
+    private List<LedS> Led = new ArrayList<>();
+
+    private List<DevpSlave> devpSlave = new ArrayList<>();
+
     private List<ShuttleSlave> shuttle = new ArrayList<>();
 
     private List<LiftSlave> lift = new ArrayList<>();
diff --git a/src/main/java/com/zy/core/thread/LedThread.java b/src/main/java/com/zy/core/thread/LedThread.java
new file mode 100644
index 0000000..ffb06ab
--- /dev/null
+++ b/src/main/java/com/zy/core/thread/LedThread.java
@@ -0,0 +1,23 @@
+package com.zy.core.thread;
+
+
+import com.zy.core.ThreadHandler;
+import com.zy.core.model.command.LedCommand;
+
+import java.util.List;
+
+public interface LedThread extends ThreadHandler {
+
+    void write(List<LedCommand> commands);
+
+    void reset();
+
+    void error(String error);
+
+    void errorReset();
+
+    void setLedMk(boolean mk);
+
+    boolean isLedMk();
+
+}
diff --git a/src/main/java/com/zy/core/thread/impl/FyDevpThread.java b/src/main/java/com/zy/core/thread/impl/FyDevpThread.java
new file mode 100644
index 0000000..36cb2a9
--- /dev/null
+++ b/src/main/java/com/zy/core/thread/impl/FyDevpThread.java
@@ -0,0 +1,319 @@
+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.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 FyDevpThread 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 FyDevpThread(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 {
+        int staNoSize = staNos2.size();
+        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB82.14", (short) (staNoSize * 26));
+        if (result.IsSuccess) {
+            for (int i = 0; i < staNoSize; i++) {
+                Integer siteId = staNos2.get(i);
+                StaProtocol staProtocol = station.get(staNos2.get(i));
+                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)); //閲嶉噺
+
+                if (!staProtocol.isPakMk() && !staProtocol.isLoading()) {
+                    staProtocol.setPakMk(true);
+                }
+            }
+        }
+
+
+        if (!Cools.isEmpty(result) && result.IsSuccess) {
+            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛", DateUtils.convert(new Date()), slave.getId()));
+            // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
+            try {
+                List<BasDevp> stations = new ArrayList<>();
+                for (Integer sta : staNos2) {
+                    StaProtocol staProtocol = station.get(sta);
+                    BasDevp sqlModel = staProtocol.toSqlModel();
+                    stations.add(sqlModel);
+                }
+                if (!stations.isEmpty()) {
+                    BasDevpService basConveyorStaService = SpringUtils.getBean(BasDevpService.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()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
+                News.error("鏇存柊鏁版嵁搴撴暟鎹け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
+            }
+
+        } 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()));
+//            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 = staNos1.indexOf(staProtocol.getSiteId());
+        index += 1;
+
+        short[] array = new short[2];
+        array[0] = staProtocol.getWorkNo();
+        array[1] = staProtocol.getStaNo();
+
+        String staNoAddress = "DB83." + (index * 8 + 4);
+        String workNoAddress = "DB83." + (index * 8 + 6);
+        OperateResult write1 = null;    // 宸ヤ綔鍙�
+        OperateResult write2 = null;     // 鐩爣绔�
+
+        //浠诲姟涓嬪彂娆℃暟
+        int writeCount = 0;
+        do {
+            write1 = siemensS7Net.Write(workNoAddress, array[0]);    // 宸ヤ綔鍙�
+            write2 = siemensS7Net.Write(staNoAddress, array[1]);
+            if ((write1.IsSuccess && write2.IsSuccess)) {
+                log.info("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝骞朵笖鍥炶鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛寋},{}锛屽啓鍏ユ鏁�={}", staProtocol.getSiteId(), JSON.toJSON(staProtocol.getWorkNo()), JSON.toJSON(staProtocol.getStaNo()), writeCount);
+//                OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB82.14", (short) (staNos2.indexOf(siteId) * 26));
+//                //OperateResultExOne<byte[]> readResult = siemensS7Net.Read(staNoAddress, (short) 8);
+//                if (readResult.IsSuccess) {
+//                    int workNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 2);     // 宸ヤ綔鍙�
+//                    int staNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 4);   // 鐩爣绔�
+//                    // int staNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0);
+//                    //int workNo2 = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0);
+//                    if (workNo == workNo2 && staNo == staNo2) {
+//                        //浠诲姟鍛戒护鍐欏叆鎴愬姛
+//                        log.info("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝骞朵笖鍥炶鎴愬姛銆傝緭閫佺嚎plc缂栧彿={}锛寋},{}锛屽啓鍏ユ鏁�={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount);
+//                        return true;
+//                    } else {//杩斿洖缁撴灉鏄垚鍔熶簡锛屼絾鏄湡瀹炲�间笉鐩稿悓
+//                        writeCount++;
+//                        log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤繑鍥炴垚鍔燂紝浣嗘槸璇诲彇浠诲姟鍊间笉涓�鑷淬�傝緭閫佺嚎plc缂栧彿={}锛寋},{}锛屽啓鍏ユ鏁�={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount);
+//                    }
+//                } else {
+//                    writeCount++;
+//                    log.error("鍐欏叆杈撻�佺嚎鍛戒护鍚庤鍙栧け璐ャ�傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={},{},鍐欏叆娆℃暟={}", siteId, JSON.toJSON(workNo), JSON.toJSON(staNo), writeCount);
+//                }
+            } else {
+                writeCount++;
+            }
+        } while (writeCount < 5);
+//        StaProtocol staProtocol = station.get(siteId);
+//        if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) {
+//            staProtocol.setPakMk(true);
+//        }
+        OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(array)));
+        log.error("鍐欏叆杈撻�佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(array));
+    }
+
+    /**
+     * 蹇冭烦
+     */
+    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();
+    }
+
+
+}
diff --git a/src/main/java/com/zy/core/thread/impl/NormalLedThread.java b/src/main/java/com/zy/core/thread/impl/NormalLedThread.java
new file mode 100644
index 0000000..50c4cd6
--- /dev/null
+++ b/src/main/java/com/zy/core/thread/impl/NormalLedThread.java
@@ -0,0 +1,88 @@
+package com.zy.core.thread.impl;
+
+import com.zy.common.model.MatDto;
+import com.zy.core.model.command.LedCommand;
+import com.zy.core.thread.LedThread;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+@Slf4j
+@SuppressWarnings("all")
+public class NormalLedThread implements LedThread, Runnable {
+
+    private Set<Integer> workNos = new HashSet<>();
+    private boolean ledMk = false;
+    private boolean resetStatus = false;    // 澶嶄綅鐘舵��
+
+    // 鏄剧ず鍣�
+    private StringBuffer stringBuffer = new StringBuffer();
+    private List<LedCommand> commandList;
+
+    private StringBuffer errorMsg = new StringBuffer();
+
+
+    @Override
+    public void run() {
+    }
+
+    public void write(List<LedCommand> list) {
+        commandList = list;
+
+        StringBuilder sb = new StringBuilder();
+        for (LedCommand command : list) {
+            sb.append(command.getTitle()).append("锛�").append(command.getWorkNo()).append(")").append("\n");
+            sb.append("婧愬簱浣嶏細").append(command.getSourceLocNo()).append("\n");
+            sb.append("鐩爣绔欙細").append(command.getStaNo()).append("\n");
+            if (!command.isEmptyMk()) {
+                for (MatDto matDto : command.getMatDtos()) {
+                    sb.append("鐗╂枡缂栫爜锛�").append(matDto.getMatNo()).append("\n");
+                    sb.append("鍚嶇О锛�").append(matDto.getMaknx()).append("\n");
+                    sb.append("鏁伴噺锛�").append(matDto.getCount()).append("\n");
+                    sb.append("瑙勬牸锛�").append(matDto.getSpecs()).append("\n");
+                }
+            }
+            sb.append("\n");
+        }
+        stringBuffer.delete(0, stringBuffer.length());
+        stringBuffer.append(sb.toString());
+
+        errorReset();
+    }
+
+    public void reset() {
+        commandList = null;
+        stringBuffer.delete(0, stringBuffer.length());
+        errorMsg.delete(0, errorMsg.length());
+    }
+
+    public void error(String msg) {
+        errorMsg.delete(0, errorMsg.length());
+        errorMsg.append(msg);
+    }
+
+    public void errorReset() {
+        this.errorMsg.delete(0, errorMsg.length());
+    }
+
+    @Override
+    public boolean connect() {
+        return true;
+    }
+
+    @Override
+    public void close() {
+    }
+
+    @Override
+    public void setLedMk(boolean mk) {
+        this.ledMk = mk;
+    }
+
+    @Override
+    public boolean isLedMk() {
+        return this.ledMk;
+    }
+}
diff --git a/src/main/java/com/zy/core/thread/impl/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/impl/SiemensDevpThread.java
deleted file mode 100644
index d8b7323..0000000
--- a/src/main/java/com/zy/core/thread/impl/SiemensDevpThread.java
+++ /dev/null
@@ -1,399 +0,0 @@
-//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/resources/application.yml b/src/main/resources/application.yml
index bf4da6a..3130db1 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -13,7 +13,7 @@
     driver-class-name: com.mysql.jdbc.Driver
     url: jdbc:mysql://127.0.0.1:3306/fyxc_shuttle?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
     username: root
-    password: root
+    password: zhangchao
   mvc:
     static-path-pattern: /**
   redis:
@@ -44,14 +44,14 @@
 
 # 涓嬩綅鏈洪厤缃�
 wcs-slave:
-#  # 鍥涘悜绌挎杞�1
-#  shuttle[0]:
-#    id: 1
-#    ip: 192.168.10.81
-#    port: 8888
-#    rack: 0
-#    slot: 0
-#    threadImpl: NyShuttleThread
+  #  # 鍥涘悜绌挎杞�1
+  #  shuttle[0]:
+  #    id: 1
+  #    ip: 192.168.10.81
+  #    port: 8888
+  #    rack: 0
+  #    slot: 0
+  #    threadImpl: NyShuttleThread
   # 鍥涘悜绌挎杞�2
   shuttle[0]:
     id: 2
@@ -72,3 +72,15 @@
     standByBay: 1
     staRow: 2
     staBay: 1
+  devpSlave[0]:
+    id:
+    inSta[0]:
+      staNo:
+      backSta:
+    inSta[1]:
+      staNo:
+      backSta:
+
+
+
+

--
Gitblit v1.9.1