From 28a7821e43bd5763739fe67384cfea6693b3500b Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期二, 08 九月 2020 13:19:26 +0800
Subject: [PATCH] Merge branches 'gdwcs' and 'jswcs' of https://gitee.com/luxiaotao1123/zy-wcs into jswcs

---
 src/main/java/com/zy/asrs/controller/SiteController.java       |   61 
 src/main/java/com/zy/core/thread/LedThread.java                |  355 ++++++++
 src/main/webapp/views/console.html                             |  241 ++++-
 src/main/resources/lib/slf4j-api-1.7.30.jar                    |    0 
 pom.xml                                                        |   81 ++
 src/main/java/com/zy/core/model/command/LedCommand.java        |   28 
 src/main/java/com/zy/core/model/protocol/CrnProtocol.java      |  118 +-
 src/main/java/com/zy/core/model/protocol/CrnTemp1.java         |   47 +
 src/main/java/com/zy/core/model/protocol/StaProtocol.java      |    2 
 src/main/webapp/views/crn.html                                 |   65 +
 src/main/java/com/zy/asrs/utils/Utils.java                     |   22 
 src/main/resources/lib/slf4j-simple-1.7.30.jar                 |    0 
 src/main/java/com/zy/Boot.java                                 |   10 
 src/main/java/com/zy/core/MainProcess.java                     |    7 
 src/main/java/com/zy/core/thread/CrnThread.java                |  267 ++++--
 src/main/webapp/static/js/common.js                            |    2 
 src/main/java/com/zy/common/service/CommonService.java         |   95 +-
 src/main/java/com/zy/asrs/service/WrkDetlService.java          |    3 
 src/main/java/com/zy/core/model/CrnSlave.java                  |    2 
 src/main/java/com/zy/asrs/domain/enums/CrnStatusType.java      |    4 
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java    |  249 ++++-
 src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java |    6 
 src/main/java/com/zy/core/cache/MessageQueue.java              |    5 
 src/main/java/com/zy/core/model/LedSlave.java                  |   24 
 src/main/resources/mapper/WrkMastMapper.xml                    |   32 
 src/main/webapp/views/pipeline.html                            |    8 
 src/main/java/com/zy/asrs/controller/CrnController.java        |   68 +
 src/main/java/com/zy/core/thread/DevpThread.java               |  108 +-
 src/main/java/com/zy/asrs/domain/vo/CrnStateTableVo.java       |   39 
 src/main/java/com/zy/core/ServerBootstrap.java                 |   30 
 src/main/java/com/zy/common/model/MatDto.java                  |   11 
 src/main/java/com/zy/core/properties/SlaveProperties.java      |    3 
 src/main/java/com/zy/asrs/controller/ConsoleController.java    |   27 
 src/main/java/com/zy/core/enums/CrnStatusType.java             |    2 
 src/main/java/com/zy/core/model/protocol/CrnError1.java        |   63 
 src/main/java/com/zy/asrs/domain/vo/CrnMsgTableVo.java         |   61 +
 src/main/java/com/zy/asrs/mapper/WrkMastMapper.java            |   16 
 src/main/webapp/static/css/console.css                         |   70 -
 src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java           |   16 
 src/main/java/com/zy/common/utils/CollectionUtils.java         |   20 
 src/main/resources/application.yml                             |   99 +
 41 files changed, 1,756 insertions(+), 611 deletions(-)

diff --git a/pom.xml b/pom.xml
index a209627..3cb25c2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -103,10 +103,89 @@
             <artifactId>okhttp</artifactId>
             <version>3.10.0</version>
         </dependency>
+
+        <!-- led sdk -->
+        <dependency>
+            <groupId>com.wcs.led</groupId>
+            <artifactId>5m3</artifactId>
+            <scope>system</scope>
+            <version>0.5.0</version>
+            <systemPath>${project.basedir}/src/main/resources/lib/bx05-0.5.0-SNAPSHOT.jar</systemPath>
+        </dependency>
+        <dependency>
+            <groupId>com.wcs.led</groupId>
+            <artifactId>5m3message</artifactId>
+            <scope>system</scope>
+            <version>0.5.0</version>
+            <systemPath>${project.basedir}/src/main/resources/lib/bx05.message-0.5.0-SNAPSHOT.jar</systemPath>
+        </dependency>
+        <dependency>
+            <groupId>com.wcs.led</groupId>
+            <artifactId>5m3doc</artifactId>
+            <scope>system</scope>
+            <version>0.5.0</version>
+            <systemPath>${project.basedir}/src/main/resources/lib/bx05-0.5.0-SNAPSHOT-javadoc.jar</systemPath>
+        </dependency>
+        <dependency>
+            <groupId>com.wcs.led</groupId>
+            <artifactId>rxtx</artifactId>
+            <scope>system</scope>
+            <version>2.1.7</version>
+            <systemPath>${project.basedir}/src/main/resources/lib/rxtx-2.1.7.jar</systemPath>
+        </dependency>
+        <dependency>
+            <groupId>com.wcs.led</groupId>
+            <artifactId>simple-xml</artifactId>
+            <scope>system</scope>
+            <version>2.7.1</version>
+            <systemPath>${project.basedir}/src/main/resources/lib/simple-xml-2.7.1.jar</systemPath>
+        </dependency>
+        <dependency>
+            <groupId>com.wcs.led</groupId>
+            <artifactId>stax</artifactId>
+            <scope>system</scope>
+            <version>1.2.0</version>
+            <systemPath>${project.basedir}/src/main/resources/lib/stax-1.2.0.jar</systemPath>
+        </dependency>
+        <dependency>
+            <groupId>com.wcs.led</groupId>
+            <artifactId>stax-api</artifactId>
+            <scope>system</scope>
+            <version>1.0.1</version>
+            <systemPath>${project.basedir}/src/main/resources/lib/stax-api-1.0.1.jar</systemPath>
+        </dependency>
+        <dependency>
+            <groupId>com.wcs.led</groupId>
+            <artifactId>uia-comm</artifactId>
+            <scope>system</scope>
+            <version>0.5.1</version>
+            <systemPath>${project.basedir}/src/main/resources/lib/uia-comm-0.5.1.jar</systemPath>
+        </dependency>
+        <dependency>
+            <groupId>com.wcs.led</groupId>
+            <artifactId>uia-message</artifactId>
+            <scope>system</scope>
+            <version>0.6.0</version>
+            <systemPath>${project.basedir}/src/main/resources/lib/uia-message-0.6.0.jar</systemPath>
+        </dependency>
+        <dependency>
+            <groupId>com.wcs.led</groupId>
+            <artifactId>uia-utils</artifactId>
+            <scope>system</scope>
+            <version>0.2.0</version>
+            <systemPath>${project.basedir}/src/main/resources/lib/uia-utils-0.2.0.jar</systemPath>
+        </dependency>
+        <dependency>
+            <groupId>com.wcs.led</groupId>
+            <artifactId>xpp3</artifactId>
+            <scope>system</scope>
+            <version>1.1.3.3</version>
+            <systemPath>${project.basedir}/src/main/resources/lib/xpp3-1.1.3.3.jar</systemPath>
+        </dependency>
     </dependencies>
 
     <build>
-        <finalName>jswcs</finalName>
+        <finalName>gdwcs</finalName>
         <plugins>
             <plugin>
                 <groupId>org.springframework.boot</groupId>
diff --git a/src/main/java/com/zy/Boot.java b/src/main/java/com/zy/Boot.java
index d3929b2..f25a356 100644
--- a/src/main/java/com/zy/Boot.java
+++ b/src/main/java/com/zy/Boot.java
@@ -1,8 +1,6 @@
 package com.zy;
 
-import com.core.common.SpringUtils;
 import com.zy.common.utils.RandomValidateCodeUtil;
-import com.zy.core.ServerBootstrap;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@@ -15,10 +13,10 @@
     public static void main(String[] args) {
         RandomValidateCodeUtil.init();
         SpringApplication.run(Boot.class, args);
-        new Thread(()-> {
-            ServerBootstrap serverBootstrap = SpringUtils.getBean(ServerBootstrap.class);
-            serverBootstrap.init();
-        }).start();
+//        new Thread(()-> {
+//            ServerBootstrap serverBootstrap = SpringUtils.getBean(ServerBootstrap.class);
+//            serverBootstrap.init();
+//        }).start();
 
     }
 
diff --git a/src/main/java/com/zy/asrs/controller/ConsoleController.java b/src/main/java/com/zy/asrs/controller/ConsoleController.java
index ef9a2c0..5e79f59 100644
--- a/src/main/java/com/zy/asrs/controller/ConsoleController.java
+++ b/src/main/java/com/zy/asrs/controller/ConsoleController.java
@@ -73,7 +73,7 @@
                 return R.error("鍙d护閿欒");
             }
         }
-        Thread.sleep(2000L);
+        Thread.sleep(200L);
         SystemProperties.WCS_RUNNING_STATUS.set(param.getOperatorType()==1?Boolean.TRUE:Boolean.FALSE);
         return R.ok().add(Cools.add("status", SystemProperties.WCS_RUNNING_STATUS.get()));
     }
@@ -112,12 +112,10 @@
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
             CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
             if (crnThread == null) {
-                log.error("{}鍙峰爢鍨涙満杩炴帴澶辫触", crn.getId());
                 continue;
             }
             CrnProtocol crnProtocol = crnThread.getCrnProtocol();
             if (crnProtocol == null) {
-                log.error("{}鍙峰爢鍨涙満杩炴帴澶辫触", crn.getId());
                 continue;
             }
             CrnLatestDataVo vo = new CrnLatestDataVo();
@@ -126,17 +124,23 @@
 //            Short totalBay = locMastMapper.selectTotalBay();
 
             vo.setOffset((double) new Random().nextInt(560));     //  鍫嗗灈鏈哄亸绉婚噺
-            vo.setBay(crnProtocol.getBay());    //  褰撳墠鍒�
+            vo.setBay((short) (crnProtocol.getBay() - crn.getOffset()));    //  褰撳墠鍒�
             /**
              * 鍫嗗灈鏈虹姸鎬佸垽鏂�
              */
-            if (crnProtocol.getTaskNo()>0) {
-                WrkMast wrkMast = wrkMastService.selectById(crnProtocol.getTaskNo());
-                if (wrkMast != null) {
-                    vo.setCrnStatus(CrnStatusType.process(wrkMast.getIoType()));
-                }
+            if (crnProtocol.getAlarm() > 0) {
+                vo.setCrnStatus(CrnStatusType.MACHINE_ERROR);
             } else {
-                vo.setCrnStatus(crnProtocol.modeType.equals(CrnModeType.AUTO)? CrnStatusType.MACHINE_AUTO: CrnStatusType.MACHINE_UN_AUTO);
+                if (crnProtocol.getTaskNo()>0) {
+                    WrkMast wrkMast = wrkMastService.selectById(crnProtocol.getTaskNo());
+                    if (wrkMast != null) {
+                        vo.setCrnStatus(CrnStatusType.process(wrkMast.getIoType()));
+                    } else {
+                        vo.setCrnStatus(crnProtocol.modeType.equals(CrnModeType.AUTO)? CrnStatusType.MACHINE_AUTO: CrnStatusType.MACHINE_UN_AUTO);
+                    }
+                } else {
+                    vo.setCrnStatus(crnProtocol.modeType.equals(CrnModeType.AUTO)? CrnStatusType.MACHINE_AUTO: CrnStatusType.MACHINE_UN_AUTO);
+                }
             }
             vos.add(vo);
 
@@ -150,6 +154,9 @@
         List<BarcodeDataVo> list = new ArrayList<>();
         for (Slave barcode : slaveProperties.getBarcode()) {
             BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, barcode.getId());
+            if (null == barcodeThread) {
+                continue;
+            }
             BarcodeDataVo vo = new BarcodeDataVo();
             vo.setBarcodeId(barcode.getId());
             vo.setCodeValue(barcodeThread.getBarcode());
diff --git a/src/main/java/com/zy/asrs/controller/CrnController.java b/src/main/java/com/zy/asrs/controller/CrnController.java
index de0fd9b..7829f11 100644
--- a/src/main/java/com/zy/asrs/controller/CrnController.java
+++ b/src/main/java/com/zy/asrs/controller/CrnController.java
@@ -1,6 +1,7 @@
 package com.zy.asrs.controller;
 
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.annotations.ManagerAuth;
 import com.core.common.R;
 import com.core.exception.CoolException;
@@ -10,12 +11,15 @@
 import com.zy.asrs.domain.vo.CrnMsgTableVo;
 import com.zy.asrs.domain.vo.CrnStateTableVo;
 import com.zy.asrs.entity.BasCrnError;
+import com.zy.asrs.entity.BasCrnp;
 import com.zy.asrs.entity.WrkMast;
 import com.zy.asrs.mapper.BasCrnErrorMapper;
+import com.zy.asrs.service.BasCrnpService;
 import com.zy.asrs.service.WrkMastService;
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.OutputQueue;
 import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.CrnLiftPosType;
 import com.zy.core.enums.CrnModeType;
 import com.zy.core.enums.CrnTaskModeType;
 import com.zy.core.enums.SlaveType;
@@ -49,6 +53,8 @@
     private WrkMastService wrkMastService;
     @Autowired
     private BasCrnErrorMapper basCrnErrorMapper;
+    @Autowired
+    private BasCrnpService basCrnpService;
 
 
     @ManagerAuth(memo = "杩涜涓殑鍛戒护")
@@ -82,21 +88,21 @@
     @ManagerAuth(memo = "鍫嗗灈鏈轰俊鎭〃")
     public R crnStateTable(){
         List<CrnStateTableVo> list = new ArrayList<>();
-        for (CrnSlave crn : slaveProperties.getCrn()) {
+        List<BasCrnp> crnps = basCrnpService.selectList(new EntityWrapper<BasCrnp>().orderBy("crn_no"));
+        for (BasCrnp basCrnp : crnps) {
+            // 琛ㄦ牸琛�
+            CrnStateTableVo vo = new CrnStateTableVo();
+            vo.setCrnNo(basCrnp.getCrnNo());   //  鍫嗗灈鏈哄彿
+            list.add(vo);
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
-            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
+            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, basCrnp.getCrnNo());
             if (crnThread == null) {
-                log.error("{}鍙峰爢鍨涙満杩炴帴澶辫触", crn.getId());
                 continue;
             }
             CrnProtocol crnProtocol = crnThread.getCrnProtocol();
             if (crnProtocol == null) {
-                log.error("{}鍙峰爢鍨涙満杩炴帴澶辫触", crn.getId());
                 continue;
             }
-            // 琛ㄦ牸琛�
-            CrnStateTableVo vo = new CrnStateTableVo();
-            vo.setCrnNo(crn.getId());   //  鍫嗗灈鏈哄彿
             vo.setWorkNo(crnProtocol.getTaskNo());  //  浠诲姟鍙�
             if (crnProtocol.getTaskNo()>0) {
                 WrkMast wrkMast = wrkMastService.selectById(crnProtocol.getTaskNo());
@@ -107,14 +113,16 @@
                 vo.setStatusType(crnProtocol.modeType.equals(CrnModeType.AUTO)? CrnStatusType.MACHINE_AUTO.getDesc(): CrnStatusType.MACHINE_UN_AUTO.getDesc());   //  妯″紡鐘舵��
             }
             vo.setStatus(crnProtocol.getStatusType().desc);     //  鐘舵��
-            vo.setWarn(""); //  鎶ヨ todo
-            vo.setLoading(crnProtocol.getLoaded()==1?"Y":"N");  //  鏈夌墿
+            vo.setLoading(crnProtocol.getLoaded()==1?"鏈夌墿":"鏃犵墿");  //  鏈夌墿
             vo.setBay(crnProtocol.getBay());    //  鍒�
             vo.setLev(crnProtocol.getLevel());  //  灞�
-            vo.setForkOffset(crnProtocol.getForkPosType().desc);    //  璐у弶浣嶇疆
-            vo.setLiftPos(crnProtocol.getLiftPosType().desc);   //  杞借揣鍙颁綅缃�
-            vo.setWorkNo(crnProtocol.getAlarm1());  //  寮傚父鐮�
-            list.add(vo);
+            vo.setXOrigin(crnProtocol.getBay()==1?"鏄�":"鍚�");     //  璧拌鍘熺偣
+            vo.setYOrigin(crnProtocol.getLevel()==1?"鏄�":"鍚�");     // 鍗囬檷鍘熺偣
+            vo.setForkOffset(crnProtocol.getForkPosType().desc);    // 璐у弶浣嶇疆
+            vo.setXLocation(crnProtocol.getWalkPos() == 1?"鏄�":"鍚�");      // 璧拌瀹氫綅
+            vo.setYLocation(crnProtocol.getLiftPosType().equals(CrnLiftPosType.NONE)?"鍚�":"鏄�");      // 鍗囬檷瀹氫綅
+            vo.setStop(crnProtocol.getCrnTemp1().stop?"鏄�":"鍚�");       //  鎬ュ仠
+            vo.setWarnCode(String.valueOf(crnProtocol.getAlarm()));  //  寮傚父鐮�
         }
         return R.ok().add(list);
     }
@@ -123,9 +131,14 @@
     @ManagerAuth(memo = "鍫嗗灈鏈烘暟鎹〃")
     public R crnMsgTable(){
         List<CrnMsgTableVo> list = new ArrayList<>();
-        for (CrnSlave crn : slaveProperties.getCrn()) {
+        List<BasCrnp> crnps = basCrnpService.selectList(new EntityWrapper<BasCrnp>().orderBy("crn_no"));
+        for (BasCrnp basCrnp : crnps) {
+            // 琛ㄦ牸琛�
+            CrnMsgTableVo vo = new CrnMsgTableVo();
+            vo.setCrnNo(basCrnp.getCrnNo());   //  鍫嗗灈鏈哄彿
+            list.add(vo);
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
-            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
+            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, basCrnp.getCrnNo());
             if (crnThread == null) {
                 continue;
             }
@@ -133,13 +146,11 @@
             if (crnProtocol == null) {
                 continue;
             }
-            // 琛ㄦ牸琛�
-            CrnMsgTableVo vo = new CrnMsgTableVo();
-            vo.setCrnNo(crn.getId());   //  鍫嗗灈鏈哄彿
+
             vo.setWorkNo(crnProtocol.getTaskNo());  //  浠诲姟鍙�
-            BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm1());
+            BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm());
             if (null != crnError) {
-                vo.setError(crnError.getErrorCode() + crnError.getErrName());
+                vo.setError(crnError.getErrName());
             }
             if (crnProtocol.getTaskNo()>0) {
                 WrkMast wrkMast = wrkMastService.selectById(crnProtocol.getTaskNo());
@@ -153,8 +164,13 @@
             } else {
                 vo.setStatus(crnProtocol.modeType.equals(CrnModeType.AUTO)? CrnStatusType.MACHINE_AUTO.getDesc(): CrnStatusType.MACHINE_UN_AUTO.getDesc());   //  妯″紡鐘舵��
             }
-            list.add(vo);
-
+            vo.setXspeed(crnProtocol.getXSpeed());  //  璧拌閫熷害锛坢/min)
+            vo.setYspeed(crnProtocol.getYSpeed());  //  鍗囬檷閫熷害锛坢/min)
+            vo.setZspeed(crnProtocol.getZSpeed());  //  鍙夌墮閫熷害锛坢/min)
+            vo.setXdistance(crnProtocol.getXDistance());  //  璧拌璺濈(Km)
+            vo.setYdistance(crnProtocol.getYDistance());  //  鍗囬檷璺濈(Km)
+            vo.setXduration(crnProtocol.getXDuration());    //  璧拌鏃堕暱(H)
+            vo.setYduration(crnProtocol.getYDuration());    //  鍗囬檷鏃堕暱(H)
         }
         return R.ok().add(list);
     }
@@ -392,15 +408,15 @@
                     throw new CoolException("鍫嗗灈鏈轰笉鍦ㄧ嚎");
                 }
                 // 绌洪棽鍒ゆ柇
-                if (crnProtocol.getStatusType().equals(com.zy.core.enums.CrnStatusType.IDLE) && crnProtocol.getTaskNo() == 0) {
+//                if (crnProtocol.getStatusType().equals(com.zy.core.enums.CrnStatusType.IDLE) && crnProtocol.getTaskNo() == 0) {
                     if (MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(2, command))) {
                         return true;
                     } else {
                         throw new CoolException("鍛戒护涓嬪彂澶辫触");
                     }
-                } else {
-                    throw new CoolException("鍫嗗灈鏈轰笉鍦ㄧ┖闂茬姸鎬�");
-                }
+//                } else {
+//                    throw new CoolException("鍫嗗灈鏈轰笉鍦ㄧ┖闂茬姸鎬�");
+//                }
             }
         }
         return false;
diff --git a/src/main/java/com/zy/asrs/controller/SiteController.java b/src/main/java/com/zy/asrs/controller/SiteController.java
index 0a5d393..30500f8 100644
--- a/src/main/java/com/zy/asrs/controller/SiteController.java
+++ b/src/main/java/com/zy/asrs/controller/SiteController.java
@@ -1,9 +1,12 @@
 package com.zy.asrs.controller;
 
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.annotations.ManagerAuth;
 import com.core.common.R;
 import com.zy.asrs.domain.vo.PlcErrorTableVo;
 import com.zy.asrs.domain.vo.SiteTableVo;
+import com.zy.asrs.entity.BasDevp;
+import com.zy.asrs.service.BasDevpService;
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.OutputQueue;
 import com.zy.core.cache.SlaveConnection;
@@ -17,6 +20,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -30,31 +34,35 @@
 
     @Autowired
     private SlaveProperties slaveProperties;
+    @Autowired
+    private BasDevpService basDevpService;
 
     @PostMapping("/table/site")
     @ManagerAuth(memo = "绔欑偣淇℃伅琛�")
     public R siteTable(){
         List<SiteTableVo> list = new ArrayList<>();
-
+        // 鍐呭瓨鏁版嵁
+        Map<Integer, StaProtocol> station = new HashMap<>();
         for (DevpSlave devp : slaveProperties.getDevp()) {
             DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-            Map<Integer, StaProtocol> station = devpThread.getStation();
-            for (Map.Entry<Integer, StaProtocol> entry : station.entrySet()) {
-                StaProtocol staProtocol = entry.getValue();
-                SiteTableVo vo = new SiteTableVo();
-
-                vo.setDevNo(entry.getKey());    // 绔欑偣缂栧彿
-                vo.setWorkNo(staProtocol.getWorkNo());   //  宸ヤ綔鍙�
-                vo.setAutoing(staProtocol.isAutoing()?"Y":"N");     //  鑷姩
-                vo.setLoading(staProtocol.isLoading()?"Y":"N");     // 鏈夌墿
-                vo.setInEnable(staProtocol.isInEnable()?"Y":"N");   // 鍙叆
-                vo.setOutEnable(staProtocol.isOutEnable()?"Y":"N"); // 鍙嚭
-                vo.setInreq1(staProtocol.isInreq1()?"Y":"N");       // 闇�姹�1
-                vo.setEmptyMk(staProtocol.isEmptyMk()?"Y":"N");     // 绌烘澘淇″彿
-                vo.setStaNo(staProtocol.getStaNo());                // 鐩爣绔�
-
-                list.add(vo);
-            }
+            station.putAll(devpThread.getStation());
+        }
+        // 鎸佷箙鏁版嵁
+        List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<BasDevp>().orderBy("dev_no"));
+        for (BasDevp devp : basDevps) {
+            SiteTableVo vo = new SiteTableVo();
+            vo.setDevNo(devp.getDevNo());    // 绔欑偣缂栧彿
+            list.add(vo);
+            StaProtocol staProtocol = station.get(devp.getDevNo());
+            if (null == staProtocol) { continue; }
+            vo.setWorkNo(staProtocol.getWorkNo());   //  宸ヤ綔鍙�
+            vo.setAutoing(staProtocol.isAutoing()?"Y":"N");     //  鑷姩
+            vo.setLoading(staProtocol.isLoading()?"Y":"N");     // 鏈夌墿
+            vo.setInEnable(staProtocol.isInEnable()?"Y":"N");   // 鍙叆
+            vo.setOutEnable(staProtocol.isOutEnable()?"Y":"N"); // 鍙嚭
+            vo.setPakMk(staProtocol.isPakMk()?"Y":"N");       // 鍏ュ簱鏍囪
+            vo.setEmptyMk(staProtocol.isEmptyMk()?"Y":"N");     // 绌烘澘淇″彿
+            vo.setStaNo(staProtocol.getStaNo());                // 鐩爣绔�
         }
         return R.ok().add(list);
     }
@@ -68,12 +76,15 @@
             Map<Integer, StaProtocol> station = devpThread.getStation();
 
             for(Map.Entry<Integer, StaProtocol> entry : station.entrySet()) {
-                PlcErrorTableVo vo = new PlcErrorTableVo();
-                vo.setNo(entry.getKey());   //  搴忓彿
-
-                vo.setPlcDesc("");  //  todo:luxiaotao plc閿欒鎻忚堪
-                vo.setError("");    //  todo:luxiaotao 寮傚父淇℃伅
-                list.add(vo);
+                StaProtocol staProtocol = entry.getValue();
+//                if (staProtocol) {
+//                    PlcErrorTableVo vo = new PlcErrorTableVo();
+//                    vo.setNo(entry.getKey());   //  搴忓彿
+//
+//                    vo.setPlcDesc("");  //  todo:luxiaotao plc閿欒鎻忚堪
+//                    vo.setError("");    //  todo:luxiaotao 寮傚父淇℃伅
+//                    list.add(vo);
+//                }
             }
 
         }
@@ -123,7 +134,7 @@
                     vo.setLoading(staProtocol.isLoading()?"Y":"N");     // 鏈夌墿
                     vo.setInEnable(staProtocol.isInEnable()?"Y":"N");   // 鍙叆
                     vo.setOutEnable(staProtocol.isOutEnable()?"Y":"N"); // 鍙嚭
-                    vo.setInreq1(staProtocol.isInreq1()?"Y":"N");       // 闇�姹�1
+                    vo.setPakMk(staProtocol.isPakMk()?"Y":"N");       // 闇�姹�1
                     vo.setEmptyMk(staProtocol.isEmptyMk()?"Y":"N");     // 绌烘澘淇″彿
                     vo.setStaNo(staProtocol.getStaNo());                // 鐩爣绔�
                     return R.ok().add(vo);
diff --git a/src/main/java/com/zy/asrs/domain/enums/CrnStatusType.java b/src/main/java/com/zy/asrs/domain/enums/CrnStatusType.java
index 138f91b..99b6d01 100644
--- a/src/main/java/com/zy/asrs/domain/enums/CrnStatusType.java
+++ b/src/main/java/com/zy/asrs/domain/enums/CrnStatusType.java
@@ -38,9 +38,9 @@
 
     public static CrnStatusType process(Integer ioType){
         if (ioType>100) {
-            return MACHINE_PAKIN;
-        } else if (ioType < 100 && ioType!=3 && ioType!=6 && ioType!=11) {
             return MACHINE_PAKOUT;
+        } else if (ioType < 100 && ioType!=3 && ioType!=6 && ioType!=11) {
+            return MACHINE_PAKIN;
         } else if (ioType == 3) {
             return MACHINE_SITE_MOVE;
         } else if (ioType == 11) {
diff --git a/src/main/java/com/zy/asrs/domain/vo/CrnMsgTableVo.java b/src/main/java/com/zy/asrs/domain/vo/CrnMsgTableVo.java
index 25e5472..ef124a3 100644
--- a/src/main/java/com/zy/asrs/domain/vo/CrnMsgTableVo.java
+++ b/src/main/java/com/zy/asrs/domain/vo/CrnMsgTableVo.java
@@ -1,5 +1,6 @@
 package com.zy.asrs.domain.vo;
 
+import com.zy.asrs.utils.Utils;
 import lombok.Data;
 
 /**
@@ -12,22 +13,22 @@
     private Integer crnNo;
 
     // 宸ヤ綔鍙�
-    private Short workNo;
+    private Short workNo = 0;
 
     // 鐘舵��
-    private String status = "";
+    private String status = "-";
 
     // 婧愮珯
-    private String sourceStaNo = "";
+    private String sourceStaNo = "-";
 
     // 鐩爣绔�
-    private String staNo = "";
+    private String staNo = "-";
 
     // 婧愬簱浣�
-    private String sourceLocNo = "";
+    private String sourceLocNo = "-";
 
     // 鐩爣搴撲綅
-    private String locNo = "";
+    private String locNo = "-";
 
     // 寮傚父
     private String error = "";
@@ -38,4 +39,52 @@
     // 鍛戒护
     private String command = "";
 
+    // 璧拌閫熷害锛坢/min)
+    private Float xspeed = 0.0F;
+
+    // 鍗囬檷閫熷害锛坢/min)
+    private Float yspeed = 0.0F;
+
+    // 鍙夌墮閫熷害锛坢/min)
+    private Float zspeed = 0.0F;
+
+    // 璧拌璺濈(Km)
+    private Float xdistance = 0.0F;
+
+    // 鍗囬檷璺濈(Km)
+    private Float ydistance = 0.0F;
+
+    // 璧拌鏃堕暱(H)
+    private Float xduration = 0.0F;
+
+    // 鍗囬檷鏃堕暱(H)
+    private Float yduration = 0.0F;
+
+    public void setXspeed(Float xspeed) {
+        this.xspeed = Utils.scale(xspeed);
+    }
+
+    public void setYspeed(Float yspeed) {
+        this.yspeed = Utils.scale(yspeed);
+    }
+
+    public void setZspeed(Float zspeed) {
+        this.zspeed = Utils.scale(zspeed);
+    }
+
+    public void setXdistance(Float xdistance) {
+        this.xdistance = Utils.scale(xdistance);
+    }
+
+    public void setYdistance(Float ydistance) {
+        this.ydistance = Utils.scale(ydistance);
+    }
+
+    public void setXduration(Float xduration) {
+        this.xduration = Utils.scale(xduration);
+    }
+
+    public void setYduration(Float yduration) {
+        this.yduration = Utils.scale(yduration);
+    }
 }
diff --git a/src/main/java/com/zy/asrs/domain/vo/CrnStateTableVo.java b/src/main/java/com/zy/asrs/domain/vo/CrnStateTableVo.java
index e2cd14b..e1e514f 100644
--- a/src/main/java/com/zy/asrs/domain/vo/CrnStateTableVo.java
+++ b/src/main/java/com/zy/asrs/domain/vo/CrnStateTableVo.java
@@ -12,13 +12,10 @@
     private Integer crnNo;
 
     // 妯″紡
-    private String statusType;
-
-    // 鎶ヨ
-    private String warn;
+    private String statusType = "-";
 
     // 鏈夌墿
-    private String loading;
+    private String loading = "-";
 
     // 鍒�
     private Short bay;
@@ -26,29 +23,43 @@
     // 灞�
     private Short lev;
 
+    // 璧拌鍘熺偣
+    private String xOrigin = "-";
+
+    // 鍗囬檷鍘熺偣
+    private String yOrigin = "-";
+
+    // 璧拌瀹氫綅
+    private String xLocation = "-";
+
+    // 鍗囬檷瀹氫綅
+    private String yLocation = "-";
+
     // 璐у弶浣嶇疆
-    private String forkOffset;
+    private String forkOffset = "-";
 
     // 杞借揣鍙颁綅缃�
-    private String liftPos;
+    private String liftPos = "-";
+
+    // 鎬ュ仠
+    private String stop = "-";
 
     // 鍒楀潗鏍�
-    private String bayCoor;
+    private String bayCoor = "-";
 
     // 灞傚潗鏍�
-    private String levCoor;
+    private String levCoor = "-";
 
     // 瀹屾垚
-    private String complete;
+    private String complete = "-";
 
     // 浠诲姟鍙�
-    private Short workNo;
+    private Short workNo = 0;
 
     // 鐘舵��
-    private String status;
+    private String status = "-";
 
     // 寮傚父鐮�
-    private String warnCode;
-
+    private String warnCode = "-";
 
 }
diff --git a/src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java b/src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java
index 54cde54..aa3f0d3 100644
--- a/src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java
+++ b/src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java
@@ -12,27 +12,27 @@
     private Integer devNo;
 
     // 宸ヤ綔鍙�
-    private Short workNo;
+    private Short workNo = 0;
 
     // 鑷姩
-    private String autoing;
+    private String autoing = "-";
 
     // 鏈夌墿
-    private String loading;
+    private String loading = "-";
 
     // 鍙叆
-    private String inEnable;
+    private String inEnable = "-";
 
     // 鍙嚭
-    private String outEnable;
+    private String outEnable = "-";
 
     // 闇�姹�1
-    private String inreq1;
+    private String pakMk = "-";
 
     // 绌烘澘淇″彿
-    private String emptyMk;
+    private String emptyMk = "-";
 
     // 鐩爣绔�
-    private Short staNo;
+    private Short staNo = 0;
 
 }
diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
index 81bf173..8e26d07 100644
--- a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -18,31 +18,33 @@
 
     // wcs ---------------------------------------------
     // 鍏ュ簱绗竴姝ワ紝鎵爜浠幏鍙栨潯鐮佷俊鎭椂鏌ヨ
-    @Select("select top 1 * from asr_wrk_mast where source_sta_no=#{sourceStaNo} and wrk_sts=2 and barcode=#{barcode} and (io_type=1 or io_type=10) order by io_pri desc,io_time,wrk_no ASC")
+//    @Select("select top 1 * from asr_wrk_mast where source_sta_no=#{sourceStaNo} and wrk_sts=2 and barcode=#{barcode} and (io_type=1 or io_type=10) order by io_pri desc,io_time,wrk_no ASC")
     WrkMast selectPakInStep1(@Param("sourceStaNo")Integer sourceStaNo, @Param("barcode")String barcode);
 
+    WrkMast selectPakInStep11(@Param("sourceStaNo")Integer sourceStaNo);
+
     // 鍏ュ簱绗簩姝ワ紝褰撴墭鐩樼墿鏂欏湪鍫嗗灈鏈哄叆搴撶珯鏃舵椂鏌ヨ
-    @Select("select top 1 * from dbo.asr_wrk_mast where wrk_sts=2 and crn_no=#{crnNo} and wrk_no=#{workNo} and (io_type=1 or io_type=10 or io_type=53 or io_type=54 or io_type=57) order by io_pri desc,io_time,wrk_no ASC")
+//    @Select("select top 1 * from dbo.asr_wrk_mast where wrk_sts=2 and crn_no=#{crnNo} and wrk_no=#{workNo} and (io_type=1 or io_type=10 or io_type=53 or io_type=54 or io_type=57) order by io_pri desc,io_time,wrk_no ASC")
     WrkMast selectPakInStep2(@Param("crnNo")Integer crnNo, @Param("workNo")Integer workNo);
 
     // 鍏ュ簱绗笁姝ワ紝褰撳爢鍨涙満鎶婅揣鏀惧叆搴撲綅鏃�
-    @Select("select top 1 from dbo.asr_wrk_mast where wrk_no=#{workNo}")
+//    @Select("select top 1 from dbo.asr_wrk_mast where wrk_no=#{workNo}")
     WrkMast selectPakInStep3(@Param("workNo")Integer workNo);
 
     // 鎷f枡鍐嶅叆搴撴椂锛岀珯鐐规湁鐗╀笖闇�姹傛椂鏌ヨ
-    @Select("select top 1 * from asr_wrk_mast where wrk_no=#{workNo} and wrk_sts=14 and (io_type=103 or io_type=107 or io_type=104)")
+//    @Select("select top 1 * from asr_wrk_mast where wrk_no=#{workNo} and wrk_sts=14 and (io_type=103 or io_type=107 or io_type=104)")
     WrkMast selectPickStep(@Param("workNo")Integer workNo);
 
     // 鍑哄簱绗竴姝ワ紝浠庡簱浣嶅埌鍫嗗灈鏈哄嚭搴撶珯
-    @Select("select top 1 * from dbo.asr_wrk_mast where crn_no=#{crnNo} and wrk_sts=11 and io_type>100 order by io_pri desc,io_time,wrk_no asc")
+//    @Select("select top 1 * from dbo.asr_wrk_mast where crn_no=#{crnNo} and wrk_sts=11 and io_type>100 order by io_pri desc,io_time,wrk_no asc")
     WrkMast selectPakOutStep1(@Param("crnNo")Integer crnNO);
 
     // 鍑哄簱绗簩姝ワ紝浠庡爢鍨涙満鍑哄簱绔欏埌鐩爣鍑哄簱绔欙紝鍫嗗灈鏈哄嚭搴撶珯鏈夌墿鏃舵墽琛�
-    @Select("select top 1 * from dbo.asr_wrk_mast where source_sta_no=#{sourceStaNo} and wrk_sts=12 and io_type>100 order by io_pri desc,io_time desc,wrk_no ASC")
+//    @Select("select top 1 * from dbo.asr_wrk_mast where source_sta_no=#{sourceStaNo} and wrk_sts=12 and io_type>100 order by io_pri desc,io_time desc,wrk_no ASC")
     WrkMast selectPakOutStep2(@Param("sourceStaNo")Integer sourceStaNo);
 
     // 搴撲綅绉昏浆宸ヤ綔妗o紝鍦ㄨ繘琛屼竴娆″叆鍑哄簱浣滀笟鍚庣揣璺熷簱浣嶇Щ杞�
-    @Select("select top 1 * from dbo.asr_wrk_mast where wrk_sts=11 and (io_type=11 or io_type=110) and crn_no=#{crnNo} order by io_time,wrk_no")
+//    @Select("select top 1 * from dbo.asr_wrk_mast where wrk_sts=11 and (io_type=11 or io_type=110) and crn_no=#{crnNo} order by io_time,wrk_no")
     WrkMast selectLocMove(@Param("crnNo")Integer crnNo);
 
     // work log -------------------------------------------------------
diff --git a/src/main/java/com/zy/asrs/service/WrkDetlService.java b/src/main/java/com/zy/asrs/service/WrkDetlService.java
index 92b410d..7e93d07 100644
--- a/src/main/java/com/zy/asrs/service/WrkDetlService.java
+++ b/src/main/java/com/zy/asrs/service/WrkDetlService.java
@@ -8,7 +8,8 @@
 
 public interface WrkDetlService extends IService<WrkDetl> {
 
-
     void createWorkDetail(Integer workNo, List<WaitPakin> waitPakins, String barcode);
 
+    List<WrkDetl> findByWorkNo(Integer workNo);
+
 }
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 1b76bc0..dc5ff4a 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -9,20 +9,26 @@
 import com.zy.asrs.mapper.WaitPakinMapper;
 import com.zy.asrs.mapper.WrkMastMapper;
 import com.zy.asrs.service.*;
+import com.zy.common.model.MatDto;
 import com.zy.common.model.StartupDto;
+import com.zy.common.service.CommonService;
+import com.zy.common.utils.CollectionUtils;
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.SlaveConnection;
 import com.zy.core.enums.*;
 import com.zy.core.model.CrnSlave;
 import com.zy.core.model.DevpSlave;
+import com.zy.core.model.LedSlave;
 import com.zy.core.model.Task;
 import com.zy.core.model.command.CrnCommand;
+import com.zy.core.model.command.LedCommand;
 import com.zy.core.model.protocol.CrnProtocol;
 import com.zy.core.model.protocol.StaProtocol;
 import com.zy.core.properties.SlaveProperties;
 import com.zy.core.thread.BarcodeThread;
 import com.zy.core.thread.CrnThread;
 import com.zy.core.thread.DevpThread;
+import com.zy.core.thread.LedThread;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.jdbc.core.JdbcTemplate;
@@ -30,8 +36,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -79,9 +84,12 @@
                 // 鑾峰彇鍏ュ簱绔欎俊鎭�
                 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                 StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
+                if (staProtocol == null) {
+                    continue;
+                }
                 // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
                 if (staProtocol.isAutoing() && staProtocol.isLoading()
-                        && !staProtocol.isEmptyMk() && staProtocol.isInreq1() && staProtocol.getWorkNo()==0
+                        && !staProtocol.isEmptyMk() && staProtocol.getWorkNo() == 0
                         && staProtocol.isPakMk() && !Cools.isEmpty(barcode)) {
                     // 鍒ゆ柇閲嶅宸ヤ綔妗�
                     WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode);
@@ -147,7 +155,6 @@
                     staProtocol.setWorkNo((short) workNo);
                     staProtocol.setStaNo(startupDto.getStaNo().shortValue());
                     staProtocol.setPakMk(false);
-                    staProtocol.setInreq1(false);
                     boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                     if (!result) {
                         throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
@@ -161,6 +168,55 @@
 
     }
 
+    /**
+     * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 1 ==>> 2
+     */
+    @Async
+    public void generateStoreWrkFile2() {
+        // 鏍规嵁杈撻�佺嚎plc閬嶅巻
+        for (DevpSlave devp : slaveProperties.getDevp()) {
+            // 閬嶅巻鍏ュ簱鍙�
+            for (DevpSlave.Sta inSta : devp.getInSta()) {
+                // 鑾峰彇鍏ュ簱绔欎俊鎭�
+                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+                StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
+                if (staProtocol == null) { continue; }
+                // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
+                if (staProtocol.isAutoing() && staProtocol.isLoading()
+                        && !staProtocol.isEmptyMk() && staProtocol.getWorkNo() == 0
+                        && staProtocol.isPakMk()) {
+                    // 鍒ゆ柇閲嶅宸ヤ綔妗�
+                    WrkMast wrkMast = wrkMastMapper.selectPakInStep11(inSta.getStaNo());
+                    if (wrkMast == null) {
+                        continue;
+                    }
+
+                    // 鏇存柊宸ヤ綔涓绘。
+                    wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細2.璁惧涓婅蛋
+                    wrkMast.setModiTime(new Date());
+                    Integer update = wrkMastMapper.updateById(wrkMast);
+                    if (update == 0) {
+                        throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�");
+                    }
+
+                    // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+
+                    // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
+                    staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
+                    staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
+                    staProtocol.setPakMk(false);
+                    boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
+                    if (!result) {
+                        throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+                    }
+
+                }
+
+
+            }
+        }
+
+    }
 
     /**
      * 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱
@@ -173,8 +229,8 @@
                 // 鑾峰彇鎷f枡鍏ュ簱绔欎俊鎭�
                 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                 StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo());
-
-                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInreq1()
+                if (staProtocol == null) { continue; }
+                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()
                     && staProtocol.getWorkNo() > 0 && staProtocol.isPakMk()){
                     WrkMast wrkMast = wrkMastMapper.selectPickStep(staProtocol.getWorkNo().intValue());
                     if (wrkMast == null) {
@@ -227,7 +283,6 @@
                     staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
                     staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                     staProtocol.setPakMk(false);
-                    staProtocol.setInreq1(false);
                     boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                     if (!result) {
                         throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
@@ -245,12 +300,13 @@
      */
     @Async
     public void crnStnToOutStn() {
-        for (DevpSlave devp : slaveProperties.getDevp()) {
-            // 閬嶅巻鎷f枡鍏ュ簱鍙�
-            for (DevpSlave.Sta outSta : devp.getOutSta()) {
+        for (CrnSlave crnSlave : slaveProperties.getCrn()) {
+            // 閬嶅巻鍫嗗灈鏈哄嚭搴撶珯
+            for (CrnSlave.CrnStn crnStn : crnSlave.getCrnOutStn()) {
                 // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
-                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-                StaProtocol staProtocol = devpThread.getStation().get(outSta.getStaNo());
+                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
+                StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
+                if (staProtocol == null) { continue; }
                 if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
                     // 鏌ヨ宸ヤ綔妗�
                     WrkMast wrkMast = wrkMastMapper.selectPakOutStep2(staProtocol.getSiteId());
@@ -268,32 +324,32 @@
                         // 绉诲姩涓�
                         continue;
                     }
-                    // 鏇存柊宸ヤ綔妗g姸鎬佷负14澶辫触 todo:luxiaotao
+                    //  鍒ゆ柇鍫嗗灈鏈虹姸鎬佺瓑寰呯‘璁�
                     if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(wrkMast.getWrkNo().shortValue())
-                            && crnProtocol.statusType == CrnStatusType.IDLE
+                            && crnProtocol.statusType == CrnStatusType.WAITING
                             && crnProtocol.forkPosType == CrnForkPosType.HOME) {
+
+                        // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+
+                        // 1.澶嶄綅鍫嗗灈鏈�
+                        crnThread.setResetFlag(true);
+
+                        // 2.涓嬪彂绔欑偣淇℃伅
+                        staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
+                        staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
+                        if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) {
+                            throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
+                        }
+
+                        // 鏇存柊宸ヤ綔妗g姸鎬佷负14澶辫触
                         wrkMast.setWrkSts(14L);
                         wrkMast.setCrnEndTime(new Date());
                         if (wrkMastMapper.updateById(wrkMast) == 0) {
                             throw new CoolException("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛屽伐浣滃彿"+wrkMast.getWrkNo());
                         }
+
                     }
 
-                    // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
-
-                    // 1.澶嶄綅鍫嗗灈鏈� 鏇存柊鍫嗗灈鏈轰俊鎭� 涓� 涓嬪彂plc鍛戒护 todo:luxiaotao
-                    crnProtocol.setStatus(CrnStatusType.IDLE);
-                    crnProtocol.setTaskNo((short)0);
-                    if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(4, crnProtocol))) {
-                        throw new CoolException("鏇存柊鍫嗗灈鏈轰俊鎭け璐�");
-                    }
-
-                    // 2.涓嬪彂绔欑偣淇℃伅
-                    staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
-                    staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
-                    if (!MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol))) {
-                        throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
-                    }
                 }
             }
         }
@@ -308,6 +364,7 @@
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
             CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
             CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+            if (crnProtocol == null) { continue; }
             BasCrnp basCrnp = basCrnpService.selectById(crn.getId());
             if (basCrnp == null) {
                 log.error("{}鍙峰爢鍨涙満灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", crn.getId());
@@ -318,26 +375,26 @@
                 // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡
                 if (crnProtocol.getLastIo().equals("I")) {
                     if (basCrnp.getInEnable().equals("Y")) {
-                        this.crnStnToLoc(crn); //  鍏ュ簱
+                        this.crnStnToLoc(crn, crnProtocol); //  鍏ュ簱
                         crnProtocol.setLastIo("O");
                     } else if (basCrnp.getOutEnable().equals("Y")) {
-                        this.locToCrnStn(crn); //  鍑哄簱
+                        this.locToCrnStn(crn, crnProtocol); //  鍑哄簱
                         crnProtocol.setLastIo("I");
                     }
                 }
                 // 濡傛灉鏈�杩戜竴娆℃槸鍑哄簱妯″紡
                 else if (crnProtocol.getLastIo().equals("O")) {
                     if (basCrnp.getOutEnable().equals("Y")) {
-                        this.locToCrnStn(crn); //  鍑哄簱
+                        this.locToCrnStn(crn, crnProtocol); //  鍑哄簱
                         crnProtocol.setLastIo("I");
                     } else if (basCrnp.getInEnable().equals("Y")) {
-                        this.crnStnToLoc(crn); //  鍏ュ簱
+                        this.crnStnToLoc(crn, crnProtocol); //  鍏ュ簱
                         crnProtocol.setLastIo("O");
                     }
                 }
             }
             // 搴撲綅绉昏浆
-            this.locToLoc(crn);
+            this.locToLoc(crn, crnProtocol);
         }
     }
 
@@ -345,19 +402,21 @@
      * 鍏ュ簱  ===>>  鍫嗗灈鏈虹珯鍒板簱浣�
      */
     @Async
-    public void crnStnToLoc(CrnSlave slave){
+    public void crnStnToLoc(CrnSlave slave, CrnProtocol crnProtocol){
         for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) {
             boolean flag = false;
             // 鑾峰彇鍫嗗灈鏈哄叆搴撶珯淇℃伅
             DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
             StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
+            if (staProtocol == null) { continue; }
             // 鏌ヨ绔欑偣璇︾粏淇℃伅
             BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
             if (staDetl == null) {
                 log.error("鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鐐瑰湪鏁版嵁搴撲笉瀛樺湪, 绔欑偣缂栧彿={}", crnStn.getStaNo());
                 continue;
             }
-            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staDetl.getCanining().equals("Y")) {
+            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0
+                    && staDetl.getCanining()!=null && staDetl.getCanining().equals("Y")) {
                 flag = true;
             }
             if (!flag) {
@@ -377,6 +436,11 @@
             }
             if (!locMast.getLocSts().equals("S") && !locMast.getLocSts().equals("Q")) {
                 log.error("鍏ュ簱鎿嶄綔搴撲綅鐘舵�佷笉绗﹀悎--鐘舵��, 搴撲綅鍙�={}锛屽簱浣嶇姸鎬�={}", wrkMast.getLocNo(), locMast.getLocSts());
+                continue;
+            }
+
+            // 鍫嗗灈鏈烘帶鍒惰繃婊�
+            if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
                 continue;
             }
 
@@ -411,7 +475,7 @@
      * 鍑哄簱  ===>>  搴撲綅鍒板爢鍨涙満绔�
      */
     @Async
-    public void locToCrnStn(CrnSlave slave){
+    public void locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol){
         for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) {
             // 鑾峰彇宸ヤ綔鐘舵�佷负11锛堢敓鎴愬嚭搴揑D锛夌殑鍑哄簱宸ヤ綔妗�
             WrkMast wrkMast = wrkMastMapper.selectPakOutStep1(slave.getId());
@@ -432,6 +496,7 @@
             // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
             DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
             StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
+            if (staProtocol == null) { continue; }
             // 鏌ヨ绔欑偣璇︾粏淇℃伅
             BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
             if (staDetl == null) {
@@ -439,9 +504,14 @@
                 continue;
             }
             // 鍒ゆ柇鍫嗗灈鏈哄嚭搴撶珯鐘舵��
-            if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting().equals("Y")
+            if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() !=null && staDetl.getCanouting().equals("Y")
                     && staProtocol.getWorkNo() == 0) {
                 // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+
+                // 鍫嗗灈鏈烘帶鍒惰繃婊�
+                if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
+                    continue;
+                }
 
                 // 1.鍫嗗灈鏈哄紑濮嬬Щ鍔�
                 CrnCommand crnCommand = new CrnCommand();
@@ -475,7 +545,7 @@
      * 搴撲綅绉昏浆
      */
     @Async
-    public void locToLoc(CrnSlave slave){
+    public void locToLoc(CrnSlave slave, CrnProtocol crnProtocol){
         // 鑾峰彇宸ヤ綔妗d俊鎭�
         WrkMast wrkMast = wrkMastMapper.selectLocMove(slave.getId());
         if (null == wrkMast) {
@@ -502,6 +572,12 @@
         if (!basCrnp.getInEnable().equals("Y") && !basCrnp.getOutEnable().equals("Y")) {
             return;
         }
+
+        // 鍫嗗灈鏈烘帶鍒惰繃婊�
+        if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
+            return;
+        }
+
         // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
         CrnCommand crnCommand = new CrnCommand();
         crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
@@ -516,7 +592,17 @@
         crnCommand.setDestinationPosZ(sta.getLev1().shortValue());     // 鐩爣搴撲綅灞�
         if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
             log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
+        } else {
+            // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓�
+            Date now = new Date();
+            wrkMast.setWrkSts(12L);
+            wrkMast.setCrnStrTime(now);
+            wrkMast.setModiTime(now);
+            if (wrkMastMapper.updateById(wrkMast) == 0) {
+                log.error("銆愬簱浣嶇Щ杞�� 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+            }
         }
+
     }
 
     /**
@@ -528,6 +614,7 @@
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
             CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
             CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+            if (crnProtocol == null) { continue; }
             //  鐘舵�侊細绛夊緟纭 骞朵笖  浠诲姟瀹屾垚浣� = 1
             if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
                 // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
@@ -540,25 +627,25 @@
                 if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)){
                     wrkMast.setWrkSts(4L);
                 // 鍑哄簱 + 鎷f枡/鐩樼偣/骞舵澘鍑哄簱涓細12.鍚婅溅鍑哄簱涓� ==> 14.鍑哄簱瀹屾垚
-                } else if (wrkMast.getWrkSts() == 12) {
-                    wrkMast.setWrkSts(14L);
+                    // todo:luxiaotao
+//                } else if (wrkMast.getWrkSts() == 12) {
+//                    wrkMast.setWrkSts(14L);
+                } else  {
+                    continue;
                 }
                 Date now = new Date();
                 wrkMast.setCrnEndTime(now);
                 wrkMast.setModiTime(now);
                 // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
                 if (wrkMastMapper.updateById(wrkMast) > 0) {
-                    // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------
                     // 鍫嗗灈鏈哄浣�
-                    if (!MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(3, new CrnCommand()))) {
-                        log.error("鍫嗗灈鏈哄浣嶅懡浠や笅鍙戝け璐ワ紝宸ヤ綔鍙�={}", wrkMast.getWrkNo());
-                    }
+                    crnThread.setResetFlag(true);
                 }
 
                 // 瀹屾垚閫氱煡妗�
-                if (wrkMastMapper.updateWaitPakInStep2(wrkMast.getBarcode()) == 0) {
-                    log.error("鍏ュ簱閫氱煡妗d慨鏀圭粨鏉熺姸鎬佸け璐ワ紝workNo=[{}]", wrkMast.getWrkNo());
-                }
+//                if (wrkMastMapper.updateWaitPakInStep2(wrkMast.getBarcode()) == 0) {
+//                    log.error("鍏ュ簱閫氱煡妗d慨鏀圭粨鏉熺姸鎬佸け璐ワ紝workNo=[{}]", wrkMast.getWrkNo());
+//                }
 
             }
         }
@@ -585,13 +672,14 @@
                 // 鑾峰彇绌烘澘鍏ュ簱绔欎俊鎭�
                 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                 StaProtocol staProtocol = devpThread.getStation().get(emptyInSta.getStaNo());
+                if (staProtocol == null) { continue; }
                 // 绔欑偣鏉′欢鍒ゆ柇
-                if (staProtocol.isAutoing() && staProtocol.isLoading() && !staProtocol.isInreq1()
+                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()
                         && staProtocol.isEmptyMk() && staProtocol.getWorkNo() == 0 && staProtocol.isPakMk()) {
                     // 宸ヤ綔鍙�
                     int workNo = commonService.getWorkNo(0);
                     // 妫�绱㈠簱浣�
-                    StartupDto startupDto = commonService.getLocNo(1, 1, emptyInSta.getStaNo(), null);
+                    StartupDto startupDto = commonService.getLocNo(1, 10, emptyInSta.getStaNo(), null);
 
                     // 鎻掑叆宸ヤ綔涓绘。
                     WrkMast wrkMast = new WrkMast();
@@ -630,12 +718,12 @@
                     staProtocol.setWorkNo((short) workNo);
                     staProtocol.setStaNo(startupDto.getStaNo().shortValue());
                     staProtocol.setPakMk(false);
-                    staProtocol.setInreq1(false);
                     boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                     if (!result) {
                         throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
                     }
 
+
                 }
 
 
@@ -643,4 +731,63 @@
         }
     }
 
+    /**
+     * 鍑哄簱  ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣�
+     */
+    @Async
+    public void ledExecute() {
+        for (LedSlave led : slaveProperties.getLed()) {
+            // 鑾峰彇杈撻�佺嚎plc绾跨▼
+            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
+            // 鍛戒护闆嗗悎
+            List<LedCommand> commands = new ArrayList<>();
+            // 宸ヤ綔妗i泦鍚�
+            List<WrkMast> wrkMasts = new ArrayList<>();
+            for (Integer staNo : led.getStaArr()) {
+                // 鑾峰彇鍙夎溅绔欑偣
+                StaProtocol staProtocol = devpThread.getStation().get(staNo);
+                if (null == staProtocol || null == staProtocol.getWorkNo() || 0 == staProtocol.getWorkNo()) { continue; }
+                // 鑾峰彇宸ヤ綔妗f暟鎹�
+                WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
+                if (wrkMast.getWrkSts() == 14L || wrkMast.getWrkSts() == 15L) {
+                    wrkMasts.add(wrkMast);
+                    // 娣诲姞鍛戒护
+                    List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo());
+                    LedCommand ledCommand = new LedCommand();
+                    ledCommand.setWorkNo(wrkMast.getWrkNo());
+                    ledCommand.setSourceLocNo(wrkMast.getSourceLocNo());
+                    ledCommand.setStaNo(wrkMast.getStaNo());
+                    wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMatnr(), wrkDetl.getAnfme())));
+                    commands.add(ledCommand);
+                }
+            }
+            Set<Integer> workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet());
+            // 鑾峰彇LED绾跨▼
+            LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
+            // 鐩稿悓宸ヤ綔鍙烽泦鍚堝垯杩囨护
+            if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) {
+                continue;
+            }
+            // 鍛戒护涓嬪彂 -------------------------------------------------------------------------------
+            if (!commands.isEmpty()) {
+                if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) {
+                    continue;
+                }
+            }
+
+            // 淇敼涓绘。led鏍囪
+            for (WrkMast wrkMast : wrkMasts) {
+                wrkMast.setOveMk("Y");
+                wrkMast.setModiTime(new Date());
+                if (wrkMastMapper.updateById(wrkMast) == 0) {
+                    throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�");
+                }
+            }
+
+            // 鏇存柊绾跨▼褰撳墠宸ヤ綔鍙烽泦鍚�
+            ledThread.setWorkNos(workNos);
+
+        }
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
index 18af108..e9282ab 100644
--- a/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
@@ -1,5 +1,6 @@
 package com.zy.asrs.service.impl;
 
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
 import com.core.common.Cools;
 import com.core.exception.CoolException;
@@ -49,4 +50,9 @@
         }
     }
 
+    @Override
+    public List<WrkDetl> findByWorkNo(Integer workNo) {
+        return this.baseMapper.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", workNo));
+    }
+
 }
diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java
new file mode 100644
index 0000000..cc7426b
--- /dev/null
+++ b/src/main/java/com/zy/asrs/utils/Utils.java
@@ -0,0 +1,22 @@
+package com.zy.asrs.utils;
+
+import com.core.common.Arith;
+
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+
+/**
+ * Created by vincent on 2020/8/27
+ */
+public class Utils {
+
+    private static final DecimalFormat fmt = new DecimalFormat("##0.00");
+
+    public static float scale(Float f){
+        if (f == null || f == 0f || Float.isNaN(f)) {
+            return 0f;
+        }
+        return (float) Arith.multiplys(2, f, 1);
+    }
+
+}
diff --git a/src/main/java/com/zy/common/model/MatDto.java b/src/main/java/com/zy/common/model/MatDto.java
index e8e488b..e5b625b 100644
--- a/src/main/java/com/zy/common/model/MatDto.java
+++ b/src/main/java/com/zy/common/model/MatDto.java
@@ -11,7 +11,18 @@
     // 鐗╂枡缂栧彿
     private String matNo;
 
+    // 鐗╂枡鍚嶇О
+    private String maknx;
+
     // 鐗╂枡鏁伴噺
     private Double count;
 
+    public MatDto() {
+    }
+
+    public MatDto(String matNo, String maknx, Double count) {
+        this.matNo = matNo;
+        this.maknx = maknx;
+        this.count = count;
+    }
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
similarity index 71%
rename from src/main/java/com/zy/asrs/service/impl/CommonService.java
rename to src/main/java/com/zy/common/service/CommonService.java
index 48ab58c..431da27 100644
--- a/src/main/java/com/zy/asrs/service/impl/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -1,4 +1,4 @@
-package com.zy.asrs.service.impl;
+package com.zy.common.service;
 
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
@@ -89,12 +89,19 @@
      * @return locNo 妫�绱㈠埌鐨勫簱浣嶅彿
      */
     public StartupDto getLocNo(Integer whsType, Integer staDescId, Integer sourceStaNo, List<String> matNos) {
+        if (sourceStaNo == 3) {
+            whsType = 1;
+        } else if (sourceStaNo == 7) {
+            whsType = 2;
+        } else {
+            throw new CoolException("鏃犳晥鍏ュ簱绔�");
+        }
         StartupDto startupDto = new StartupDto();
         RowLastno rowLastno = rowLastnoService.selectById(whsType);
         if (Cools.isEmpty(rowLastno)) {
             throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�");
         }
-        if (rowLastno.getWhsType() == 1){
+        if (whsType == 1 || whsType == 2){
             int curRow = rowLastno.getCurrentRow();
             int sRow = rowLastno.getsRow();
             int eRow = rowLastno.geteRow();
@@ -106,48 +113,54 @@
             LocMast locMast = null;
 
             // 鍚屼竴澶╁悓瑙勬牸璐х墿闈犺繎鎽嗘硶瑙勫垯
-            if (!Cools.isEmpty(matNos)) {
-                List<String> locNos = locDetlService.getSameDetlToday(matNos.get(0));
-                for (String locNo : locNos) {
-                    // 鑾峰彇鎺�
-                    int row = Integer.parseInt(locNo.substring(0, 2));
-                    // 鍒ゆ柇鏄惁涓烘繁搴撲綅
-                    double remainder = Arith.remainder(row, rowCount / crn_qty);
-                    int targetRow;
-                    if (remainder == 1) {
-                        // 寰楀埌褰撳墠搴撲綅鐨勫鍥村簱浣�
-                        targetRow =  row + 1;
-                    } else if (remainder == 0) {
-                        // 寰楀埌褰撳墠搴撲綅鐨勫唴鍥村簱浣�
-                        targetRow =  row - 1;
-                    } else {
-                        continue;
-                    }
-                    String targetLocNo = zerofill(String.valueOf(targetRow), 2)+locNo.substring(2);
-                    // 妫�娴嬬洰鏍囧簱浣嶆槸鍚︿负绌哄簱浣�
-                    LocMast targetLocMast = locMastService.selectById(targetLocNo);
-                    if (targetLocMast != null && targetLocMast.getLocSts().equals("O")) {
-                        locMast = targetLocMast;
-                        crnNo = locMast.getCrnNo();
-                        break;
-                    }
-                }
-            }
+//            if (!Cools.isEmpty(matNos)) {
+//                List<String> locNos = locDetlService.getSameDetlToday(matNos.get(0));
+//                for (String locNo : locNos) {
+//                    // 鑾峰彇鎺�
+//                    int row = Integer.parseInt(locNo.substring(0, 2));
+//                    // 鍒ゆ柇鏄惁涓烘繁搴撲綅
+//                    double remainder = Arith.remainder(row, rowCount / crn_qty);
+//                    int targetRow;
+//                    if (remainder == 1) {
+//                        // 寰楀埌褰撳墠搴撲綅鐨勫鍥村簱浣�
+//                        targetRow =  row + 1;
+//                    } else if (remainder == 0) {
+//                        // 寰楀埌褰撳墠搴撲綅鐨勫唴鍥村簱浣�
+//                        targetRow =  row - 1;
+//                    } else {
+//                        continue;
+//                    }
+//                    String targetLocNo = zerofill(String.valueOf(targetRow), 2)+locNo.substring(2);
+//                    // 妫�娴嬬洰鏍囧簱浣嶆槸鍚︿负绌哄簱浣�
+//                    LocMast targetLocMast = locMastService.selectById(targetLocNo);
+//                    if (targetLocMast != null && targetLocMast.getLocSts().equals("O")) {
+//                        locMast = targetLocMast;
+//                        crnNo = locMast.getCrnNo();
+//                        break;
+//                    }
+//                }
+//            }
 
             // 濡傛灉娌℃湁鐩歌繎鐗╂枡锛屽垯鎸夎鍒欒疆璇㈣揣鏋�
             if (null == locMast) {
-                // 鑾峰彇鐩爣绔欐墍鍦ㄨ揣鏋舵帓鍙�
-                Shelves shelves = new Shelves(rowCount, crn_qty);
-                curRow = shelves.start(curRow);
-                if (curRow < 0) {
-                    throw new CoolException("妫�绱㈠簱浣嶅け璐ワ紝璇疯仈绯荤鐞嗗憳");
+                // 鑾峰彇鐩爣绔欐墍鍦ㄨ揣鏋舵帓鍙� todo:luxiaotao
+                if (curRow == sRow) {
+                    curRow = eRow;
+                } else {
+                    curRow = sRow;
                 }
-                for (List<Integer> node : shelves.nodes){
-                    if (node.contains(curRow)) {
-                        crnNo = shelves.nodes.indexOf(node) + 1;
-                        break;
-                    }
-                }
+                crnNo = whsType;
+//                Shelves shelves = new Shelves(rowCount, crn_qty);
+//                curRow = shelves.start(curRow);
+//                if (curRow < 0) {
+//                    throw new CoolException("妫�绱㈠簱浣嶅け璐ワ紝璇疯仈绯荤鐞嗗憳");
+//                }
+//                for (List<Integer> node : shelves.nodes){
+//                    if (node.contains(curRow)) {
+//                        crnNo = shelves.nodes.indexOf(node) + 1;
+//                        break;
+//                    }
+//                }
             }
 
             basCrnpService.checkSiteStatus(crnNo);
@@ -162,7 +175,7 @@
             }
             BasDevp staNo = basDevpService.selectById(staDesc.getCrnStn());
             int inQty = staNo.getInQty()==null?0:staNo.getInQty();
-            if (staNo.getInEnable().equals("Y") && staNo.getAutoing().equals("Y") && inQty<2) {
+            if (staNo.getAutoing().equals("Y") && inQty<2) {
                 // 鏌ユ壘搴撲綅
                 if (locMast == null) {
                     locMast = locMastService.queryFreeLocMast(curRow);
diff --git a/src/main/java/com/zy/common/utils/CollectionUtils.java b/src/main/java/com/zy/common/utils/CollectionUtils.java
new file mode 100644
index 0000000..4f0fe4c
--- /dev/null
+++ b/src/main/java/com/zy/common/utils/CollectionUtils.java
@@ -0,0 +1,20 @@
+package com.zy.common.utils;
+
+import java.util.Set;
+
+/**
+ * Created by vincent on 2020/9/3
+ */
+public class CollectionUtils {
+
+    public static boolean equals(Set<?> set1, Set<?> set2) {
+        if(set1 == null || set2 ==null){
+            return false;
+        }
+        if(set1.size()!=set2.size()){
+            return false;
+        }
+        return set1.containsAll(set2);
+    }
+
+}
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index 9a4fdff..ffc21dc 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -37,10 +37,11 @@
 
                     // 闂撮殧
                     Thread.sleep(1500);
-                    log.info("WCS 宸ヤ綔涓� .....................");
+//                    log.info("WCS 宸ヤ綔涓� .....................");
 
                     // 鍏ュ簱  ===>> 鍏ュ簱绔欏埌鍫嗗灈鏈虹珯锛屾牴鎹潯鐮佹壂鎻忕敓鎴愬叆搴撳伐浣滄。
-                    mainService.generateStoreWrkFile();
+//                    mainService.generateStoreWrkFile();
+                    mainService.generateStoreWrkFile2();
                     // 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱
                     mainService.stnToCrnStnPick();
                     // 鍑哄簱  ===>>  鍫嗗灈鏈哄嚭搴撶珯鍒板嚭搴撶珯
@@ -53,6 +54,8 @@
                     mainService.recCrnErr();
                     // 鍏ュ簱  ===>> 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐�
                     mainService.storeEmptyPlt();
+                    // 鍑哄簱  ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣�
+                    mainService.ledExecute();
 
                 } catch (Exception e) {
                     e.printStackTrace();
diff --git a/src/main/java/com/zy/core/ServerBootstrap.java b/src/main/java/com/zy/core/ServerBootstrap.java
index dd1f8dd..4023026 100644
--- a/src/main/java/com/zy/core/ServerBootstrap.java
+++ b/src/main/java/com/zy/core/ServerBootstrap.java
@@ -5,14 +5,17 @@
 import com.zy.core.enums.SlaveType;
 import com.zy.core.model.CrnSlave;
 import com.zy.core.model.DevpSlave;
+import com.zy.core.model.LedSlave;
 import com.zy.core.properties.SlaveProperties;
-import com.zy.core.thread.BarcodeThread;
 import com.zy.core.thread.CrnThread;
 import com.zy.core.thread.DevpThread;
+import com.zy.core.thread.LedThread;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 
+import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 
 /**
@@ -28,14 +31,17 @@
     private MainProcess mainProcess;
 
 
-//    @PostConstruct
+    @PostConstruct
+    @Async
     public void init(){
+        log.info("鏍稿績鎺у埗灞傚紑濮嬪垵濮嬪寲...............................................");
         // 鍒濆鍖栨秷鎭槦鍒�
         initMq();
         // 鍒濆鍖栦笅浣嶆満绾跨▼
         initThread();
         // 寮�濮嬩富娴佺▼杩涚▼
         mainProcess.start();
+        log.info("鏍稿績鎺у埗灞傚凡鍚姩...............................................");
     }
 
     private void initMq(){
@@ -63,6 +69,7 @@
 
     private void initThread(){
         // 鍒濆鍖栧爢鍨涙満绾跨▼
+        log.info("鍒濆鍖栧爢鍨涙満绾跨▼...................................................");
         for (CrnSlave crn : slaveProperties.getCrn()) {
             CrnThread crnThread = new CrnThread(crn);
             new Thread(crnThread).start();
@@ -70,18 +77,27 @@
         }
 
         // 鍒濆鍖栬緭閫佺嚎绾跨▼
+        log.info("鍒濆鍖栬緭閫佺嚎绾跨▼...................................................");
         for (DevpSlave devp : slaveProperties.getDevp()) {
             DevpThread devpThread = new DevpThread(devp);
             new Thread(devpThread).start();
             SlaveConnection.put(SlaveType.Devp, devp.getId(), devpThread);
         }
 
-        // 鍒濆鍖栨潯鐮佹壂鎻忎华绾跨▼
-        for (Slave barcode : slaveProperties.getBarcode()) {
-            BarcodeThread barcodeThread = new BarcodeThread(barcode);
-            new Thread(barcodeThread).start();
-            SlaveConnection.put(SlaveType.Barcode, barcode.getId(), barcodeThread);
+//        // 鍒濆鍖栨潯鐮佹壂鎻忎华绾跨▼
+//        for (Slave barcode : slaveProperties.getBarcode()) {
+//            BarcodeThread barcodeThread = new BarcodeThread(barcode);
+//            new Thread(barcodeThread).start();
+//            SlaveConnection.put(SlaveType.Barcode, barcode.getId(), barcodeThread);
+//        }
+        // 鍒濆鍖朙ED绾跨▼
+        log.info("鍒濆鍖朙ED绾跨▼...................................................");
+        for (LedSlave led : slaveProperties.getLed()) {
+            LedThread ledThread = new LedThread(led);
+            new Thread(ledThread).start();
+            SlaveConnection.put(SlaveType.Led, led.getId(), ledThread);
         }
+
     }
 
 
diff --git a/src/main/java/com/zy/core/cache/MessageQueue.java b/src/main/java/com/zy/core/cache/MessageQueue.java
index 11d207d..5f27eba 100644
--- a/src/main/java/com/zy/core/cache/MessageQueue.java
+++ b/src/main/java/com/zy/core/cache/MessageQueue.java
@@ -7,6 +7,7 @@
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.LinkedBlockingQueue;
 
 /**
  * 娑堟伅闃熷垪
@@ -21,7 +22,7 @@
     // 鏉$爜鎵弿浠猰q浜ゆ崲鏈�
     private static final Map<Integer, ConcurrentLinkedQueue<Task>> BARCODE_EXCHANGE = new ConcurrentHashMap<>();
     // Led鐏� mq浜ゆ崲鏈�
-    private static final Map<Integer, ConcurrentLinkedQueue<Task>> LED_EXCHANGE = new ConcurrentHashMap<>();
+    private static final Map<Integer, LinkedBlockingQueue<Task>> LED_EXCHANGE = new ConcurrentHashMap<>();
     // 纾呯Оmq浜ゆ崲鏈�
     private static final Map<Integer, ConcurrentLinkedQueue<Task>> SCALE_EXCHANGE = new ConcurrentHashMap<>();
 
@@ -40,7 +41,7 @@
                 BARCODE_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>());
                 break;
             case Led:
-                LED_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>());
+                LED_EXCHANGE.put(slave.getId(), new LinkedBlockingQueue<>(1));
                 break;
             case Scale:
                 SCALE_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>());
diff --git a/src/main/java/com/zy/core/enums/CrnStatusType.java b/src/main/java/com/zy/core/enums/CrnStatusType.java
index c236c79..28d89c7 100644
--- a/src/main/java/com/zy/core/enums/CrnStatusType.java
+++ b/src/main/java/com/zy/core/enums/CrnStatusType.java
@@ -11,7 +11,7 @@
     ORIGIN(6, "鍙嶅師鐐�"),
     LOC_MOVE(7, "搴撲綅绉讳綅"),
     WAITING(90, "浠诲姟瀹屾垚绛夊緟WCS纭"),
-//    SOS(99, "鎶ヨ"),
+    SOS(99, "鎶ヨ"),
     ;
 
     public Integer id;
diff --git a/src/main/java/com/zy/core/model/CrnSlave.java b/src/main/java/com/zy/core/model/CrnSlave.java
index 457fa29..42d2822 100644
--- a/src/main/java/com/zy/core/model/CrnSlave.java
+++ b/src/main/java/com/zy/core/model/CrnSlave.java
@@ -29,7 +29,7 @@
     @Data
     public static class CrnStn {
 
-        // 鍫嗗灈鏈簆lc缂栧彿
+        // 杈撻�佺嚎plc缂栧彿
         private Integer devpPlcId;
 
         // 鍫嗗灈鏈虹珯鐐圭紪鍙�
diff --git a/src/main/java/com/zy/core/model/LedSlave.java b/src/main/java/com/zy/core/model/LedSlave.java
new file mode 100644
index 0000000..af02dfc
--- /dev/null
+++ b/src/main/java/com/zy/core/model/LedSlave.java
@@ -0,0 +1,24 @@
+package com.zy.core.model;
+
+import com.zy.core.Slave;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * LED閰嶇疆
+ * Created by vincent on 2020/8/6
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class LedSlave extends Slave {
+
+    // 杈撻�佺嚎plc缂栧彿
+    private Integer devpPlcId;
+
+    // 鍙夎溅绔欑偣鏁扮粍
+    private List<Integer> staArr = new ArrayList<>();
+
+}
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..58f4c88
--- /dev/null
+++ b/src/main/java/com/zy/core/model/command/LedCommand.java
@@ -0,0 +1,28 @@
+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 Integer workNo;
+
+    private Integer staNo;
+
+    private Integer sourceStaNo;
+
+    private String locNo;
+
+    private String sourceLocNo;
+
+    private List<MatDto> matDtos = new ArrayList<>();
+
+}
diff --git a/src/main/java/com/zy/core/model/protocol/CrnError1.java b/src/main/java/com/zy/core/model/protocol/CrnError1.java
index 0ae2829..c1fe5be 100644
--- a/src/main/java/com/zy/core/model/protocol/CrnError1.java
+++ b/src/main/java/com/zy/core/model/protocol/CrnError1.java
@@ -8,53 +8,50 @@
 @Data
 public class CrnError1 {
 
-    // 閬ユ帶鍣ㄦ�ュ仠
-    public boolean remoteStop;
+    // 琛岃蛋瓒呴��
+    public boolean walkOverspeedErr;
 
-    // 涓绘帶鐩樻�ュ仠
-    public boolean mainStop;
+    // 琛岃蛋閫熷害瓒呰寖鍥�
+    public boolean walkOverspeedRangeErr;
 
-    // 鎿嶄綔鐩樻�ュ仠
-    public boolean controlStop;
+    // 琛岃蛋閫熷害鏈夊亸宸�
+    public boolean walkSpeedOffsetErr;
 
-    // X琛岃蛋鍙橀鍣ㄦ晠闅�
-    public boolean xCoverErr;
+    // 琛岃蛋浣嶇疆鏈夊亸宸�
+    public boolean walkLocationOffsetErr;
 
-    // Y鍗囬檷鍙橀鍣ㄦ晠闅�
-    public boolean yCoverErr;
+    // 琛岃蛋娴嬭窛鍣ㄥ紓甯�
+    public boolean walkDiastimeterErr;
 
-    // Z璐у弶鍙橀鍣ㄦ晠闅�
-    public boolean zCoverErr;
+    // 琛岃蛋鐩爣浣嶇疆鍑虹晫
+    public boolean walkOutsideErr;
 
-    // 婵�鍏夋晠闅�
-    public boolean laserErr;
+    // 琛岃蛋闄愪綅寮�鍏宠Е鍙�
+    public boolean walkLimitSwitchErr;
 
-    // 鏉$爜闃呰鍣ㄦ晠闅�
-    public boolean barcodeErr;
+    // 琛岃蛋鍒跺姩搴忓垪寮傚父
+    public boolean walkBrakeErr;
 
-    // X鍓嶆瀬闄�
-    public boolean xFrontLimitErr;
+    // 琛岃蛋娴嬭窛鍣ㄦ晠闅�
+    public boolean walkDiastimeterFau;
 
-    // X鍚庢瀬闄�
-    public boolean xBackLimitErr;
+    // 鍗囬檷瓒呴��
+    public boolean liftOverSpeedErr;
 
-    // Y涓婃瀬闄�
-    public boolean yUpLimitErr;
+    // 鍗囬檷閫熷害瓒呰寖鍥�
+    public boolean liftOverspeedRangeErr;
 
-    // Y涓嬫瀬闄�
-    public boolean yDownLimitErr;
+    // 鍗囬檷閫熷害鏈夊亸宸�
+    public boolean liftSpeedOffsetErr;
 
-    // Z宸︽瀬闄�
-    public boolean zLeftLimitErr;
+    // 鍗囬檷浣嶇疆鏈夊亸宸�
+    public boolean liftLocationOffsetErr;
 
-    // Z鍙虫瀬闄�
-    public boolean zRightLimitErr;
+    // 鍗囬檷娴嬭窛鍣ㄥ紓甯�
+    public boolean liftDiastimeterErr;
 
-    // 宸﹁秴瀹�1
-    public boolean leftOverWidthErr1;
-
-    // 宸﹁秴瀹�2
-    public boolean leftOverWidthErr2;
+    // 鍗囬檷鐩爣浣嶇疆鍑虹晫
+    public boolean liftOutsideErr;
 
 
 }
diff --git a/src/main/java/com/zy/core/model/protocol/CrnProtocol.java b/src/main/java/com/zy/core/model/protocol/CrnProtocol.java
index f1f265a..c2f073a 100644
--- a/src/main/java/com/zy/core/model/protocol/CrnProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/CrnProtocol.java
@@ -108,6 +108,16 @@
      */
     private Short alarm1;
 
+    private boolean[] temp1;
+
+    private CrnTemp1 crnTemp1;
+
+    private Short temp2;
+
+    private Short temp3;
+
+    private Short temp4;
+
     /**
      * 寮傚父1
      */
@@ -228,83 +238,39 @@
     public void setError1(boolean[] error1){
         this.error1 = error1;
         this.crnError1 = new CrnError1();
-        this.crnError1.remoteStop = error1[0];
-        this.crnError1.mainStop = error1[1];
-        this.crnError1.controlStop = error1[2];
-        this.crnError1.xCoverErr = error1[3];
-        this.crnError1.yCoverErr = error1[4];
-        this.crnError1.zCoverErr = error1[5];
-        this.crnError1.laserErr = error1[6];
-        this.crnError1.barcodeErr = error1[7];
-        this.crnError1.xFrontLimitErr = error1[8];
-        this.crnError1.xBackLimitErr = error1[9];
-        this.crnError1.yUpLimitErr = error1[10];
-        this.crnError1.yDownLimitErr = error1[11];
-        this.crnError1.zLeftLimitErr = error1[12];
-        this.crnError1.zRightLimitErr = error1[13];
-        this.crnError1.leftOverWidthErr1 = error1[14];
-        this.crnError1.leftOverWidthErr2 = error1[15];
+        this.crnError1.walkOverspeedErr = error1[1];
+        this.crnError1.walkOverspeedRangeErr = error1[2];
+        this.crnError1.walkSpeedOffsetErr = error1[3];
+        this.crnError1.walkLocationOffsetErr = error1[4];
+        this.crnError1.walkDiastimeterErr = error1[5];
+        this.crnError1.walkOutsideErr = error1[6];
+        this.crnError1.walkLimitSwitchErr = error1[7];
+        this.crnError1.walkBrakeErr = error1[8];
+        this.crnError1.walkDiastimeterFau = error1[9];
+        this.crnError1.liftOverSpeedErr = error1[10];
+        this.crnError1.liftOverspeedRangeErr = error1[11];
+        this.crnError1.liftSpeedOffsetErr = error1[12];
+        this.crnError1.liftLocationOffsetErr = error1[13];
+        this.crnError1.liftDiastimeterErr = error1[14];
+        this.crnError1.liftOutsideErr = error1[15];
     }
 
-    public void setError2(boolean[] error2){
-        this.error2 = error2;
-        this.crnError2 = new CrnError2();
-        this.crnError2.leftOverLenErr1 = error2[0];
-        this.crnError2.leftOverLenErr2 = error2[1];
-        this.crnError2.leftOverHighErr = error2[2];
-        this.crnError2.rightOverWidthErr1 = error2[3];
-        this.crnError2.rightOverWidthErr2 = error2[4];
-        this.crnError2.rightOverLenErr1 = error2[5];
-        this.crnError2.rightOverLenErr2 = error2[6];
-        this.crnError2.rightOverHighErr = error2[7];
-        this.crnError2.leftLooseRopeErr = error2[8];
-        this.crnError2.rightLooseRopeErr = error2[9];
-        this.crnError2.frontDoorErr = error2[10];
-        this.crnError2.backDoorErr = error2[11];
-        this.crnError2.startupErr = error2[12];
-        this.crnError2.xFrontLocaUpErr = error2[13];
-        this.crnError2.xFrontLocaDownErr = error2[14];
-        this.crnError2.xBackLocaUpErr = error2[15];
-    }
 
-    public void setError3(boolean[] error3) {
-        this.error3 = error3;
-        this.crnError3 = new CrnError3();
-        this.crnError3.xBackLocaDownErr = error3[0];
-        this.crnError3.yUpLocaUpErr = error3[1];
-        this.crnError3.yUpLocaDownErr = error3[2];
-        this.crnError3.yDownLocaUpErr = error3[3];
-        this.crnError3.yDownLocaDownErr = error3[4];
-        this.crnError3.zLeftLocaUpErr = error3[5];
-        this.crnError3.zLeftLocaDownErr = error3[6];
-        this.crnError3.zRightLocaUpErr = error3[7];
-        this.crnError3.zRightLocaDownErr = error3[8];
-        this.crnError3.leftTakeNoneErr = error3[9];
-        this.crnError3.rightTakeNoneErr = error3[10];
-        this.crnError3.leftTakeThenLoadErr = error3[11];
-        this.crnError3.rightTakeThenLoadErr = error3[12];
-        this.crnError3.leftPutAndLoadErr = error3[13];
-        this.crnError3.rightPutAndLoadErr = error3[14];
-        this.crnError3.leftPutThenNoneErr = error3[15];
-    }
-
-    public void setError4(boolean[] error4) {
-        this.error4 = error4;
-        this.crnError4 = new CrnError4();
-        this.crnError4.rightPutThenNoneErr = error4[0];
-        this.crnError4.xLooseBrakeTimeout = error4[1];
-        this.crnError4.yLooseBrakeTimeout = error4[2];
-        this.crnError4.zLooseBrakeTimeout = error4[3];
-    }
-
-    public void setError5(boolean[] error5) {
-        this.error5 = error5;
-        this.crnError5 = new CrnError5();
-    }
-
-    public void setError6(boolean[] error6) {
-        this.error6 = error6;
-        this.crnError6 = new CrnError6();
+    public void setTemp1(boolean[] temp1) {
+        this.temp1 = temp1;
+        this.crnTemp1 = new CrnTemp1();
+        this.crnTemp1.liftLimitSwitchErr = temp1[0];
+        this.crnTemp1.liftBrakeErr = temp1[1];
+        this.crnTemp1.liftDiastimeterFau = temp1[2];
+        this.crnTemp1.stop = temp1[3];
+        this.crnTemp1.warn = temp1[4];
+        this.crnTemp1.overHighErr = temp1[5];
+        this.crnTemp1.leftOverWidthErr = temp1[6];
+        this.crnTemp1.rightOverWidthErr = temp1[7];
+        this.crnTemp1.leftOverLenErr = temp1[8];
+        this.crnTemp1.rightOverLenErr = temp1[9];
+        this.crnTemp1.pakinThenLoadedErr = temp1[10];
+        this.crnTemp1.pakOutThenNoneErr = temp1[11];
     }
 
     /**
@@ -316,7 +282,9 @@
 
 
     public BasCrnp toSqlModel(BasCrnp basCrnp){
-        basCrnp.setCrnErr(alarm1.longValue());
+        if (alarm!=null) {
+            basCrnp.setCrnErr(alarm.longValue());
+        }
         basCrnp.setWrkNo(taskNo.intValue());
         return basCrnp;
     }
diff --git a/src/main/java/com/zy/core/model/protocol/CrnTemp1.java b/src/main/java/com/zy/core/model/protocol/CrnTemp1.java
new file mode 100644
index 0000000..3ca39e4
--- /dev/null
+++ b/src/main/java/com/zy/core/model/protocol/CrnTemp1.java
@@ -0,0 +1,47 @@
+package com.zy.core.model.protocol;
+
+import lombok.Data;
+
+/**
+ * Created by vincent on 2020/8/17
+ */
+@Data
+public class CrnTemp1 {
+
+    // 鍗囬檷闄愪綅寮�鍏宠Е鍙�
+    public boolean liftLimitSwitchErr;
+
+    // 琛岃蛋鍒跺姩搴忓垪寮傚父
+    public boolean liftBrakeErr;
+
+    // 琛岃蛋娴嬭窛鍣ㄦ晠闅�
+    public boolean liftDiastimeterFau;
+
+    // 鎬ュ仠
+    public boolean stop;
+
+    // 鐩稿簭鎶ヨ
+    public boolean warn;
+
+    // 瓒呴珮
+    public boolean overHighErr;
+
+    // 宸﹁秴瀹�
+    public boolean leftOverWidthErr;
+
+    // 鍙宠秴瀹�
+    public boolean rightOverWidthErr;
+
+    // 宸﹁秴闀�
+    public boolean leftOverLenErr;
+
+    // 鍙宠秴闀�
+    public boolean rightOverLenErr;
+
+    // 鏈夌墿鍏�
+    public boolean pakinThenLoadedErr;
+
+    // 鏃犵墿鍑�
+    public boolean pakOutThenNoneErr;
+
+}
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 4c141f2..4cc0e75 100644
--- a/src/main/java/com/zy/core/model/protocol/StaProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -41,7 +41,7 @@
     private boolean inreq1;
 
     // 閿佸畾鏍囪
-    private boolean pakMk;
+    private boolean pakMk = true;
 
     public BasDevp toSqlModel(){
         BasDevp basDevp = new BasDevp();
diff --git a/src/main/java/com/zy/core/properties/SlaveProperties.java b/src/main/java/com/zy/core/properties/SlaveProperties.java
index 5f5e393..a6931f3 100644
--- a/src/main/java/com/zy/core/properties/SlaveProperties.java
+++ b/src/main/java/com/zy/core/properties/SlaveProperties.java
@@ -3,6 +3,7 @@
 import com.zy.core.Slave;
 import com.zy.core.model.CrnSlave;
 import com.zy.core.model.DevpSlave;
+import com.zy.core.model.LedSlave;
 import lombok.Data;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.context.annotation.Configuration;
@@ -24,7 +25,7 @@
 
     private List<Slave> barcode = new ArrayList<>();
 
-    private List<Slave> led = new ArrayList<>();
+    private List<LedSlave> led = new ArrayList<>();
 
     private List<Slave> scale = new ArrayList<>();
 
diff --git a/src/main/java/com/zy/core/thread/CrnThread.java b/src/main/java/com/zy/core/thread/CrnThread.java
index fcc56e1..9a4f4ea 100644
--- a/src/main/java/com/zy/core/thread/CrnThread.java
+++ b/src/main/java/com/zy/core/thread/CrnThread.java
@@ -2,11 +2,11 @@
 
 import HslCommunication.Core.Types.OperateResult;
 import HslCommunication.Core.Types.OperateResultExOne;
-import HslCommunication.Profinet.Siemens.SiemensPLCS;
-import HslCommunication.Profinet.Siemens.SiemensS7Net;
+import HslCommunication.Profinet.Melsec.MelsecMcNet;
 import com.alibaba.fastjson.JSON;
 import com.core.common.DateUtils;
 import com.core.common.SpringUtils;
+import com.core.exception.CoolException;
 import com.zy.asrs.entity.BasCrnp;
 import com.zy.asrs.service.BasCrnpService;
 import com.zy.core.ThreadHandler;
@@ -33,9 +33,10 @@
 @Slf4j
 public class CrnThread implements Runnable, ThreadHandler {
 
-    private SiemensS7Net siemensNet;
+    private MelsecMcNet melsecMcNet;
     private CrnSlave slave;
     private CrnProtocol crnProtocol;
+    private boolean resetFlag = false;
 
     public CrnThread(CrnSlave slave) {
         this.slave = slave;
@@ -48,7 +49,7 @@
         while (true) {
             try {
                 int step = 1;
-                Task task = MessageQueue.poll(SlaveType.Devp, slave.getId());
+                Task task = MessageQueue.poll(SlaveType.Crn, slave.getId());
                 if (task != null) {
                     step = task.getStep();
                 }
@@ -93,19 +94,17 @@
     @Override
     public boolean connect() {
         boolean result = false;
-        siemensNet = new SiemensS7Net(SiemensPLCS.S300, slave.getIp());
-        siemensNet.setRack(slave.getRack().byteValue());
-        siemensNet.setSlot(slave.getSlot().byteValue());
-        OperateResult connect = siemensNet.ConnectServer();
+        melsecMcNet = new MelsecMcNet(slave.getIp(), slave.getPort());
+        OperateResult connect = melsecMcNet.ConnectServer();
         if(connect.IsSuccess){
             result = true;
-            OutputQueue.CRN.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.info("鍫嗗灈鏈簆lc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
+            OutputQueue.CRN.offer(MessageFormat.format( "銆恵0}銆戝爢鍨涙満plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+            log.info("鍫嗗灈鏈簆lc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
         } else {
-            OutputQueue.CRN.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("鍫嗗灈鏈簆lc杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
+            OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆戝爢鍨涙満plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}] ", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+            log.error("鍫嗗灈鏈簆lc杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
         }
-        siemensNet.ConnectClose();
+        melsecMcNet.ConnectClose();
         return result;
     }
 
@@ -113,60 +112,91 @@
      * 璇诲彇鐘舵��
      */
     private void readStatus(){
-        OperateResultExOne<byte[]> result = siemensNet.Read("DB8.18", (short) 56);
-        if (result.IsSuccess) {
-            OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
-            if (null == crnProtocol) {
-                crnProtocol = new CrnProtocol();
-            }
-            crnProtocol.setMode(siemensNet.getByteTransform().TransInt16(result.Content, 0));
-            crnProtocol.setTaskNo(siemensNet.getByteTransform().TransInt16(result.Content, 2));
-            crnProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 4));
-            crnProtocol.setBay(siemensNet.getByteTransform().TransInt16(result.Content, 6));
-            crnProtocol.setLevel(siemensNet.getByteTransform().TransInt16(result.Content, 8));
-            crnProtocol.setForkPos(siemensNet.getByteTransform().TransInt16(result.Content, 10));
-            crnProtocol.setLiftPos(siemensNet.getByteTransform().TransInt16(result.Content, 12));
-            crnProtocol.setWalkPos(siemensNet.getByteTransform().TransInt16(result.Content, 14));
-//            crnProtocol.setTaskFinish(siemensNet.getByteTransform().TransInt16(result.Content, 16));
-            crnProtocol.setLoaded(siemensNet.getByteTransform().TransInt16(result.Content, 18));
-            crnProtocol.setAlarm1(siemensNet.getByteTransform().TransInt16(result.Content, 20));
-            // 寮傚父淇℃伅
-            crnProtocol.setError1(siemensNet.getByteTransform().TransBool(result.Content, 22, 2));
-            crnProtocol.setError2(siemensNet.getByteTransform().TransBool(result.Content, 24, 2));
-            crnProtocol.setError3(siemensNet.getByteTransform().TransBool(result.Content, 26, 2));
-            crnProtocol.setError4(siemensNet.getByteTransform().TransBool(result.Content, 28, 2));
-            crnProtocol.setError5(siemensNet.getByteTransform().TransBool(result.Content, 30, 2));
-            crnProtocol.setError6(siemensNet.getByteTransform().TransBool(result.Content, 32, 2));
-            crnProtocol.setXSpeed(siemensNet.getByteTransform().TransSingle(result.Content, 34));
-            crnProtocol.setYSpeed(siemensNet.getByteTransform().TransSingle(result.Content, 38));
-            crnProtocol.setZSpeed(siemensNet.getByteTransform().TransSingle(result.Content, 42));
-            crnProtocol.setXDistance(siemensNet.getByteTransform().TransSingle(result.Content, 46));
-            crnProtocol.setYDistance(siemensNet.getByteTransform().TransSingle(result.Content, 50));
-            crnProtocol.setXDuration(siemensNet.getByteTransform().TransSingle(result.Content, 54));
-            crnProtocol.setYDuration(siemensNet.getByteTransform().TransSingle(result.Content, 58));
+        try {
 
-            /**
-             *   褰撹鍒皊tatus == 90.浠诲姟瀹屾垚绛夊緟WCS纭 鏃�
-             *   涓嬪彂浠诲姟瀹屾垚鎸囦护
-             */
-            if (crnProtocol.getStatusType().equals(CrnStatusType.WAITING)) {
-                CrnCommand crnCommand = new CrnCommand();
-                crnCommand.setAckFinish((short)1);
-                write(crnCommand);
-            }
+            /* 鏂规硶1 */
+            OperateResultExOne<byte[]> result = melsecMcNet.Read("D2231", (short) 62);
+            if (result.IsSuccess) {
+                if (null == crnProtocol) {
+                    crnProtocol = new CrnProtocol();
+                }
+                crnProtocol.setMode(melsecMcNet.getByteTransform().TransInt16(result.Content, 0));
+                crnProtocol.setTaskNo(melsecMcNet.getByteTransform().TransInt16(result.Content, 4));
+                crnProtocol.setStatus(melsecMcNet.getByteTransform().TransInt16(result.Content, 6));
+                crnProtocol.setBay(melsecMcNet.getByteTransform().TransInt16(result.Content, 8));
+                crnProtocol.setLevel(melsecMcNet.getByteTransform().TransInt16(result.Content, 10));
+                crnProtocol.setForkPos(melsecMcNet.getByteTransform().TransInt16(result.Content, 12));
+                crnProtocol.setLiftPos(melsecMcNet.getByteTransform().TransInt16(result.Content, 14));
+                crnProtocol.setWalkPos(melsecMcNet.getByteTransform().TransInt16(result.Content, 16));
+//               crnProtocol.setTaskFinish(melsecMcNet.getByteTransform().TransInt16(result.Content, 18));
+                crnProtocol.setLoaded(melsecMcNet.getByteTransform().TransInt16(result.Content, 20));
+                crnProtocol.setAlarm(melsecMcNet.getByteTransform().TransInt16(result.Content, 22));
+                crnProtocol.setError1(melsecMcNet.getByteTransform().TransBool(result.Content, 24, 2));
+                crnProtocol.setTemp1(melsecMcNet.getByteTransform().TransBool(result.Content, 26, 2));
+                crnProtocol.setTemp2(melsecMcNet.getByteTransform().TransInt16(result.Content, 28));
+                crnProtocol.setTemp3(melsecMcNet.getByteTransform().TransInt16(result.Content, 30));
+                crnProtocol.setTemp4(melsecMcNet.getByteTransform().TransInt16(result.Content, 32));
+                crnProtocol.setXSpeed(melsecMcNet.getByteTransform().TransSingle(result.Content, 34));
+                crnProtocol.setYSpeed(melsecMcNet.getByteTransform().TransSingle(result.Content, 38));
+                crnProtocol.setZSpeed(melsecMcNet.getByteTransform().TransSingle(result.Content, 42));
+                crnProtocol.setXDistance(melsecMcNet.getByteTransform().TransSingle(result.Content, 46));
+                crnProtocol.setYDistance(melsecMcNet.getByteTransform().TransSingle(result.Content, 50));
+                crnProtocol.setXDuration(melsecMcNet.getByteTransform().TransSingle(result.Content, 54));
+                crnProtocol.setYDuration(melsecMcNet.getByteTransform().TransSingle(result.Content, 58));
 
-            // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
-            BasCrnpService basCrnpService = SpringUtils.getBean(BasCrnpService.class);
-            BasCrnp basCrnp = new BasCrnp();
-            basCrnp.setCrnNo(slave.getId());
-            if (basCrnpService.updateById(crnProtocol.toSqlModel(basCrnp))){
-                log.error("鍫嗗灈鏈簆lc鏁版嵁搴撴洿鏂板け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
-            }
+                OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
 
-        } else {
-            OutputQueue.CRN.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("璇诲彇鍫嗗灈鏈簆lc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
+                // 澶嶄綅淇″彿
+                if (crnProtocol.getStatusType().equals(CrnStatusType.WAITING)) {
+                    if (resetFlag) {
+                        if (melsecMcNet.Write("D2218", (short) 1).IsSuccess) {
+                            resetFlag = false;
+                        }
+                    }
+                }
+
+                // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
+                BasCrnpService basCrnpService = SpringUtils.getBean(BasCrnpService.class);
+                BasCrnp basCrnp = new BasCrnp();
+                basCrnp.setCrnNo(slave.getId());
+                if (!basCrnpService.updateById(crnProtocol.toSqlModel(basCrnp))){
+                    log.error("鍫嗗灈鏈簆lc鏁版嵁搴撴洿鏂板け璐� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+                }
+
+            } else {
+                OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆憑1}鍫嗗灈鏈簆lc鐘舵�佷俊鎭け璐�",DateUtils.convert(new Date()), slave.getId()));
+                throw new CoolException(MessageFormat.format( "鍫嗗灈鏈簆lc鐘舵�佷俊鎭け璐� ===>> [id:{0}] [ip:{1}] [port:{2}]", slave.getId(), slave.getIp(), slave.getPort()));
+            }
+            /* 鏂规硶2 */
+//            crnProtocol.setMode(melsecMcNet.ReadInt16("D2231").Content);
+//            crnProtocol.setTaskNo(melsecMcNet.ReadInt16("D2233").Content);
+//            crnProtocol.setStatus(melsecMcNet.ReadInt16("D2234").Content);
+//            crnProtocol.setBay(melsecMcNet.ReadInt16("D2231").Content);
+//            crnProtocol.setLevel(melsecMcNet.ReadInt16("D2231").Content);
+//            crnProtocol.setForkPos(melsecMcNet.ReadInt16("D2231").Content);
+//            crnProtocol.setLiftPos(melsecMcNet.ReadInt16("D2231").Content);
+//            crnProtocol.setWalkPos(melsecMcNet.ReadInt16("D2231").Content);
+////            crnProtocol.setTaskFinish(siemensNet.getByteTransform().TransInt16(result.Content, 16));
+//            crnProtocol.setLoaded(melsecMcNet.ReadInt16("D2231").Content);
+//            crnProtocol.setAlarm(melsecMcNet.ReadInt16("D2231").Content);
+//            crnProtocol.setError1(melsecMcNet.ReadBool("D2231", (short) 2).Content);
+//            crnProtocol.setTemp1(melsecMcNet.ReadInt16("D2231").Content);
+//            crnProtocol.setTemp2(melsecMcNet.ReadInt16("D2231").Content);
+//            crnProtocol.setTemp3(melsecMcNet.ReadInt16("D2231").Content);
+//            crnProtocol.setTemp4(melsecMcNet.ReadInt16("D2231").Content);
+//            crnProtocol.setXSpeed(melsecMcNet.ReadFloat("D2231").Content);
+//            crnProtocol.setYSpeed(melsecMcNet.ReadFloat("D2231").Content);
+//            crnProtocol.setZSpeed(melsecMcNet.ReadFloat("D2231").Content);
+//            crnProtocol.setXDistance(melsecMcNet.ReadFloat("D2231").Content);
+//            crnProtocol.setYDistance(melsecMcNet.ReadFloat("D2231").Content);
+//            crnProtocol.setXDuration(melsecMcNet.ReadFloat("D2231").Content);
+//            crnProtocol.setYDuration(melsecMcNet.ReadFloat("D2231").Content);
+        } catch (Exception e) {
+            e.printStackTrace();
+            OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆戣鍙栧爢鍨涙満plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+            log.error("璇诲彇鍫嗗灈鏈簆lc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
         }
+
     }
 
     /**
@@ -178,38 +208,65 @@
             return;
         }
         command.setCrnNo(slave.getId());
-        short[] array = new short[9];
-        array[0] = command.getAckFinish();
-        array[1] = command.getTaskNo();
-        array[2] = command.getTaskMode();
-        array[3] = command.getSourcePosX();
-        array[4] = command.getSourcePosY();
-        array[5] = command.getSourcePosZ();
-        array[6] = command.getDestinationPosX();
-        array[7] = command.getDestinationPosY();
-        array[8] = command.getDestinationPosZ();
-        OperateResult result = siemensNet.Write("DB8.0", array);
-        if (result.IsSuccess) {
-            System.out.println(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command)));
+        /* 鏂规硶 1 */
+        do {
+            if (command.getDestinationPosZ() != null) {
+                if (!melsecMcNet.Write("D2202", command.getDestinationPosZ()).IsSuccess) { break; }
+            }
+            if (command.getDestinationPosY() != null) {
+                if (!melsecMcNet.Write("D2204", command.getDestinationPosY()).IsSuccess) { break; }
+            }
+            if (command.getDestinationPosX() != null) {
+                if (!melsecMcNet.Write("D2208", command.getDestinationPosX()).IsSuccess) { break; }
+            }
+            if (command.getSourcePosZ() != null) {
+                if (!melsecMcNet.Write("D2210", command.getSourcePosZ()).IsSuccess) { break; }
+            }
+            if (command.getSourcePosY() != null) {
+                if (!melsecMcNet.Write("D2212", command.getSourcePosY()).IsSuccess) { break; }
+            }
+            if (command.getDestinationPosX() != null) {
+                if (!melsecMcNet.Write("D2214", command.getSourcePosX()).IsSuccess) { break; }
+            }
+            if (command.getTaskMode() != null) {
+                if (!melsecMcNet.Write("D2216", command.getTaskMode()).IsSuccess) { break; }
+            }
+            if (command.getTaskNo() != null) {
+                if (!melsecMcNet.Write("D2217", command.getTaskNo()).IsSuccess) { break; }
+            }
+            if (command.getAckFinish() != null) {
+                if (!melsecMcNet.Write("D2218", command.getAckFinish()).IsSuccess) { break; }
+            }
+
+            log.info("鍫嗗灈鏈哄懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command));
             OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command)));
-//            readStatus();
-        } else {
-            System.out.println(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()));
-            OutputQueue.CRN.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("鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
-        }
+
+            return;
+        } while (false);
+
+
+        System.out.println(MessageFormat.format("銆恵0}銆戝啓鍏ュ爢鍨涙満plc鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+        OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆戝啓鍏ュ爢鍨涙満plc鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+        log.error("鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+
+
+
+        /* 鏂规硶 2 */
+//        melsecMcNet.Write("D2218", command.getAckFinish());
+//        melsecMcNet.Write("D2217", command.getTaskNo());
+//        melsecMcNet.Write("D2216", command.getTaskMode());
+//        melsecMcNet.Write("D2214", command.getSourcePosX());
+//        melsecMcNet.Write("D2212", command.getSourcePosY());
+//        melsecMcNet.Write("D2210", command.getSourcePosZ());
+//        melsecMcNet.Write("D2208", command.getDestinationPosX());
+//        melsecMcNet.Write("D2204", command.getDestinationPosY());
+//        melsecMcNet.Write("D2202", command.getDestinationPosZ());
+
     }
 
     @Override
     public void close() {
-        siemensNet.ConnectClose();
-    }
-
-    public CrnProtocol getCrnProtocol(){
-        if (crnProtocol == null) {
-            readStatus();
-        }
-        return this.crnProtocol;
+        melsecMcNet.ConnectClose();
     }
 
 
@@ -219,14 +276,14 @@
     public static void main(String[] args) throws InterruptedException {
         CrnSlave slave = new CrnSlave();
         slave.setId(1);
-        slave.setIp("192.168.6.9");
+        slave.setIp("192.168.3.39");
+        slave.setPort(5015);
         slave.setRack(0);
         slave.setSlot(0);
         CrnThread crnThread = new CrnThread(slave);
         crnThread.connect();
         crnThread.readStatus();
         System.out.println(JSON.toJSONString(crnThread.crnProtocol));
-        Thread.sleep(3000L);
 
         // 1.鍏ュ簱 婧愬拰鐩爣閮藉彂
 //        CrnCommand command = new CrnCommand();
@@ -299,19 +356,19 @@
 //        command.setDestinationPosZ((short) 0);     // 鐩爣搴撲綅灞�
 //        crnThread.write(command);
 
-//        // 7.鍧愭爣绉昏   鐩爣鍙�   pass
-//        CrnCommand command = new CrnCommand();
-//        command.setCrnNo(1); // 鍫嗗灈鏈虹紪鍙�
-//        command.setTaskNo((short) 0); // 宸ヤ綔鍙�
-//        command.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
-//        command.setTaskMode(CrnTaskModeType.OFFSET_MOVE); // 浠诲姟妯″紡
-//        command.setSourcePosX((short) 0);     // 婧愬簱浣嶆帓
-//        command.setSourcePosY((short) 0);     // 婧愬簱浣嶅垪
-//        command.setSourcePosZ((short) 0);     // 婧愬簱浣嶅眰
-//        command.setDestinationPosX((short) 2);     // 鐩爣搴撲綅鎺�
-//        command.setDestinationPosY((short) 1);     // 鐩爣搴撲綅鍒�
-//        command.setDestinationPosZ((short) 1);     // 鐩爣搴撲綅灞�
-//        crnThread.write(command);
+        // 7.鍧愭爣绉昏   鐩爣鍙�   pass
+        CrnCommand command = new CrnCommand();
+        command.setCrnNo(1); // 鍫嗗灈鏈虹紪鍙�
+        command.setTaskNo((short) 0); // 宸ヤ綔鍙�
+        command.setAckFinish((short) 0);  // 浠诲姟瀹屾垚纭浣�
+        command.setTaskMode(CrnTaskModeType.OFFSET_MOVE); // 浠诲姟妯″紡
+        command.setSourcePosX((short) 0);     // 婧愬簱浣嶆帓
+        command.setSourcePosY((short) 0);     // 婧愬簱浣嶅垪
+        command.setSourcePosZ((short) 0);     // 婧愬簱浣嶅眰
+        command.setDestinationPosX((short) 1);     // 鐩爣搴撲綅鎺�
+        command.setDestinationPosY((short) 3);     // 鐩爣搴撲綅鍒�
+        command.setDestinationPosZ((short) 3);     // 鐩爣搴撲綅灞�
+        crnThread.write(command);
 
         // 鍙湁鍑虹幇鎸囧畾寮傚父鎵嶈繘琛屽浣�
 //        if (crnThread.crnProtocol.getCrnError2().leftTakeNoneErr
diff --git a/src/main/java/com/zy/core/thread/DevpThread.java b/src/main/java/com/zy/core/thread/DevpThread.java
index 7382103..ac4cc27 100644
--- a/src/main/java/com/zy/core/thread/DevpThread.java
+++ b/src/main/java/com/zy/core/thread/DevpThread.java
@@ -2,8 +2,7 @@
 
 import HslCommunication.Core.Types.OperateResult;
 import HslCommunication.Core.Types.OperateResultExOne;
-import HslCommunication.Profinet.Siemens.SiemensPLCS;
-import HslCommunication.Profinet.Siemens.SiemensS7Net;
+import HslCommunication.Profinet.Melsec.MelsecMcNet;
 import com.alibaba.fastjson.JSON;
 import com.core.common.DateUtils;
 import com.core.common.SpringUtils;
@@ -35,7 +34,7 @@
 public class DevpThread implements Runnable, ThreadHandler {
 
     private DevpSlave slave;
-    private SiemensS7Net siemensS7Net;
+    private MelsecMcNet melsecMcNet;
     private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>();
     private short heartBeatVal = 1;
 
@@ -76,7 +75,7 @@
                 }
 
                 // 蹇冭烦
-                heartbeat();
+//                heartbeat();
                 Thread.sleep(400);
             } catch (Exception e) {
                 e.printStackTrace();
@@ -88,27 +87,25 @@
     @Override
     public boolean connect() {
         boolean result = false;
-        siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, slave.getIp());
-        siemensS7Net.setRack(slave.getRack().byteValue());
-        siemensS7Net.setSlot(slave.getSlot().byteValue());
-        OperateResult connect = siemensS7Net.ConnectServer();
+        melsecMcNet = new MelsecMcNet(slave.getIp(), slave.getPort());
+        OperateResult connect = melsecMcNet.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()));
+            OutputQueue.DEVP.offer(MessageFormat.format( "銆恵0}銆戣緭閫佺嚎plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
             log.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()));
+            OutputQueue.DEVP.offer(MessageFormat.format( "銆恵0}銆戣緭閫佺嚎plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
             log.error("杈撻�佺嚎plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
         }
-        siemensS7Net.ConnectClose();
+        melsecMcNet.ConnectClose();
         return result;
     }
 
     /**
      * 璇诲彇鐘舵�� ====> 鏁村潡plc
      */
-    private void read(){
-        OperateResultExOne<byte[]> result = siemensS7Net.Read("DB100.0", (short) 40);
+    private void read() throws InterruptedException {
+        OperateResultExOne<byte[]> result = melsecMcNet.Read("D101", (short) 30);
         if (result.IsSuccess) {
             for (int i = 1; i <= 8; i++) {
                 StaProtocol staProtocol = station.get(i);
@@ -117,20 +114,24 @@
                     staProtocol.setSiteId(i);
                     station.put(i, staProtocol);
                 }
-                staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt16(result.Content, (i-1)*2));     // 宸ヤ綔鍙�
-                staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, (i-1)*2+20));   // 鐩爣绔�
+                staProtocol.setWorkNo(melsecMcNet.getByteTransform().TransInt16(result.Content, (i-1)*2));     // 宸ヤ綔鍙�
+                staProtocol.setStaNo(melsecMcNet.getByteTransform().TransInt16(result.Content, (i-1)*2+40));   // 鐩爣绔�
             }
         }
-        OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB100.40", (short) 8);
+        Thread.sleep(100);
+        OperateResultExOne<boolean[]> result1 = melsecMcNet.ReadBool("M800", (short) 64);
         if (result1.IsSuccess) {
             for (int i = 1; i <= 8; i++) {
-                boolean[] status = siemensS7Net.getByteTransform().TransBool(result1.Content, i-1, 1);
                 StaProtocol staProtocol = station.get(i);
-                staProtocol.setAutoing(status[0]);  // 鑷姩
-                staProtocol.setLoading(status[1]);  // 鏈夌墿
-                staProtocol.setInEnable(status[2]); // 鍙叆
-                staProtocol.setOutEnable(status[3]);// 鍙嚭
-                staProtocol.setEmptyMk(status[4]);  // 绌烘澘淇″彿
+                staProtocol.setAutoing(result1.Content[(i-1)*8]);  // 鑷姩
+                staProtocol.setLoading(result1.Content[(i-1)*8+1]);  // 鏈夌墿
+                staProtocol.setInEnable(result1.Content[(i-1)*8+2]); // 鍙叆
+                staProtocol.setOutEnable(result1.Content[(i-1)*8+3]);// 鍙嚭
+                staProtocol.setEmptyMk(result1.Content[(i-1)*8+4]);  // 绌烘澘淇″彿
+
+                if (!staProtocol.isPakMk() && !staProtocol.isLoading()) {
+                    staProtocol.setPakMk(true);
+                }
             }
         }
         if (result.IsSuccess && result1.IsSuccess) {
@@ -148,25 +149,26 @@
                     throw new Exception("鏇存柊鏁版嵁搴撴暟鎹け璐�");
                 }
             } catch (Exception e) {
-                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()));
-                log.error("鏇存柊鏁版嵁搴撴暟鎹け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
+                OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戞洿鏂版暟鎹簱鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+                log.error("鏇存柊鏁版嵁搴撴暟鎹け璐� ===>> [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()));
-            log.error("璇诲彇鍫嗗灈鏈簆lc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
+            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戣鍙栬緭閫佺嚎plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+            log.error("璇诲彇杈撻�佺嚎plc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}] ", slave.getId(), slave.getIp(), slave.getPort());
         }
     }
 
     /**
      * 鍐欏叆 ID+鐩爣绔� =====> 鍗曠珯鐐瑰啓鍏�
      */
-    private void write(StaProtocol staProtocol){
+    private void write(StaProtocol staProtocol) throws InterruptedException {
         if (null == staProtocol) {
             return;
         }
-        OperateResult write = siemensS7Net.Write("DB100." + (staProtocol.getSiteId() - 1) * 2, staProtocol.getWorkNo());    // 宸ヤ綔鍙�
-        OperateResult write1 = siemensS7Net.Write("DB100." + ((staProtocol.getSiteId() - 1) * 2 + 20), staProtocol.getStaNo());    // 鐩爣绔�
+        OperateResult write = melsecMcNet.Write("D10" + staProtocol.getSiteId(), staProtocol.getWorkNo());    // 宸ヤ綔鍙�
+        Thread.sleep(100);
+        OperateResult write1 = melsecMcNet.Write("D12" + staProtocol.getSiteId(), staProtocol.getStaNo());    // 鐩爣绔�
 //        boolean[] status = new boolean[8];
 //        status[0] = staProtocol.isAutoing();
 //        status[1] = staProtocol.isLoading();
@@ -175,10 +177,14 @@
 //        status[4] = staProtocol.isEmptyMk();
 //        OperateResult write2 = siemensS7Net.Write("DB100." + ((staProtocol.getSiteId() - 1) + 40), status);     //  鐘舵��
         if (!write.IsSuccess || !write1.IsSuccess) {
+            if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) {
+                staProtocol.setPakMk(true);
+            }
             OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(staProtocol)));
             log.error("鍐欏叆杈撻�佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(staProtocol));
         } else {
-            OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol)));
+            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));
         }
     }
 
@@ -189,7 +195,7 @@
         if (null == staProtocol) {
             return;
         }
-        OperateResult write = siemensS7Net.Write("DB100." + (staProtocol.getSiteId() - 1) * 2, staProtocol.getWorkNo());    // 宸ヤ綔鍙�
+        OperateResult write = melsecMcNet.Write("D10" + staProtocol.getSiteId(), staProtocol.getWorkNo());    // 宸ヤ綔鍙�
         if (!write.IsSuccess ) {
             OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(staProtocol)));
             log.error("鍐欏叆杈撻�佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(staProtocol));
@@ -205,7 +211,7 @@
         if (null == staProtocol) {
             return;
         }
-        OperateResult write = siemensS7Net.Write("DB100." + ((staProtocol.getSiteId() - 1) * 2 + 20), staProtocol.getStaNo());    // 鐩爣绔�
+        OperateResult write = melsecMcNet.Write("D12" + staProtocol.getSiteId(), staProtocol.getStaNo());    // 鐩爣绔�
         if (!write.IsSuccess ) {
             OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆戝啓鍏ヨ緭閫佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={1}锛岀珯鐐规暟鎹�={2}", slave.getId(), JSON.toJSON(staProtocol)));
             log.error("鍐欏叆杈撻�佺嚎绔欑偣鏁版嵁澶辫触銆傝緭閫佺嚎plc缂栧彿={}锛岀珯鐐规暟鎹�={}", slave.getId(), JSON.toJSON(staProtocol));
@@ -223,7 +229,7 @@
         } else {
             heartBeatVal = 1;
         }
-        OperateResult write = siemensS7Net.Write("DB100.50", heartBeatVal);
+        OperateResult write = melsecMcNet.Write("DB100.50", heartBeatVal);
         if (!write.IsSuccess) {
             log.error("杈撻�佺嚎plc缂栧彿={} 蹇冭烦澶辫触", slave.getId());
         }
@@ -231,26 +237,36 @@
 
     @Override
     public void close() {
-        siemensS7Net.ConnectClose();
+        melsecMcNet.ConnectClose();
     }
 
-    public static void main(String[] args) {
+    public static void main(String[] args) throws Exception {
         DevpSlave slave = new DevpSlave();
-        slave.setIp("192.168.2.125");
+        slave.setIp("192.168.3.65");
+        slave.setPort(6000);
         DevpThread devpThread = new DevpThread(slave);
         devpThread.connect();
-        devpThread.read();
+        OperateResult d1021 = devpThread.melsecMcNet.Write("D102", (short) 234);
+        if (d1021.IsSuccess) {
+            System.out.println("success");
+        }
+        OperateResultExOne<Short> d102 = devpThread.melsecMcNet.ReadInt16("D102");
+        System.out.println(d102.Content);
+//        devpThread.read();
+        System.out.println("绗竴娆¤");
         // 鍐�
-        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("----------------------------------------");
+//        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("----------------------------------------");
+        Thread.sleep(400);
         // 璇�
-        devpThread.read();
+//        devpThread.read();
+        System.out.println("绗簩娆¤");
         System.out.println(JSON.toJSONString(devpThread.station));
 
     }
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..0384e64
--- /dev/null
+++ b/src/main/java/com/zy/core/thread/LedThread.java
@@ -0,0 +1,355 @@
+package com.zy.core.thread;
+
+import com.zy.common.model.MatDto;
+import com.zy.core.Slave;
+import com.zy.core.ThreadHandler;
+import com.zy.core.cache.MessageQueue;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.model.Task;
+import com.zy.core.model.command.LedCommand;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import onbon.bx05.Bx5GEnv;
+import onbon.bx05.Bx5GException;
+import onbon.bx05.Bx5GScreen;
+import onbon.bx05.Bx5GScreenClient;
+import onbon.bx05.area.TextCaptionBxArea;
+import onbon.bx05.area.page.TextBxPage;
+import onbon.bx05.file.ProgramBxFile;
+import onbon.bx05.message.led.ReturnControllerStatus;
+import onbon.bx05.utils.DisplayStyleFactory;
+
+import java.awt.*;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Created by vincent on 2020/9/1
+ */
+@Data
+@Slf4j
+public class LedThread implements Runnable, ThreadHandler {
+
+    private Slave slave;
+    private Bx5GScreenClient screen;
+    ProgramBxFile pf;
+    TextCaptionBxArea area;
+    DisplayStyleFactory.DisplayStyle[] styles = DisplayStyleFactory.getStyles().toArray(new DisplayStyleFactory.DisplayStyle[0]);
+    private Set<Integer> workNos = new HashSet<>();
+
+    public LedThread(Slave slave) {
+        this.slave = slave;
+        try {
+            Bx5GEnv.initial(3000);
+            screen = new Bx5GScreenClient("my");
+            screen.turnOn();
+            pf = new ProgramBxFile( 0, screen.getProfile());
+            pf.setFrameShow(false);
+            // 鍒嗗埆杈撳叆X锛孻锛寃idth锛宧eight
+            area = new TextCaptionBxArea( 0,0,192,128,screen.getProfile());
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.info("led杩炴帴鏋勯�犲櫒閿欒 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+        }
+    }
+
+    @Override
+    @SuppressWarnings({"InfiniteLoopStatement", "unchecked"})
+    public void run() {
+        connect();
+        while (true) {
+            try {
+                Task task = MessageQueue.poll(SlaveType.Led, slave.getId());
+                if (task != null) {
+                    switch (task.getStep()) {
+                        // 鍐欐暟鎹�
+                        case 1:
+                            write((List<LedCommand>)task.getData());
+                            break;
+                        default:
+                            break;
+                    }
+                }
+
+                Thread.sleep(3000);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    @Override
+    public boolean connect() {
+        boolean connRes = false;
+        try {
+            connRes = screen.connect(slave.getIp(),slave.getPort());
+        } catch (Exception ignore) {
+        }
+        if (connRes) {
+            log.info("led杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+        } else {
+            log.error("led杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+        }
+        return connRes;
+    }
+
+    @Override
+    public void close() {
+        screen.disconnect();
+    }
+
+
+    private void write(List<LedCommand> list) throws Bx5GException {
+        // 鍒涘缓涓�涓暟鎹〉
+        TextBxPage page = new TextBxPage();
+        for (LedCommand command : list) {
+            page.newLine("鍑哄簱浠诲姟锛�"+command.getWorkNo()+")");
+            page.newLine("婧愬簱浣嶏細"+command.getSourceLocNo());
+            page.newLine("鐩爣绔欙細"+command.getStaNo());
+            for (MatDto matDto : command.getMatDtos()) {
+                page.newLine(matDto.getMaknx() + "銆愭暟閲�" + matDto.getCount() +"銆�");
+            }
+            page.newLine("\n");
+        }
+
+        // 璁剧疆瀛椾綋
+        page.setFont(new Font("瀹嬩綋",Font.PLAIN,12));
+        // 璁剧疆鏄剧ず鐗规妧涓哄揩閫熸墦鍑�
+        page.setDisplayStyle(styles[6]);
+        area.addPage(page);
+        pf.addArea(area);
+        // 鏇存柊鑺傜洰
+        screen.writeProgram(pf);
+    }
+
+
+
+
+    public static void main(String[] args) throws Exception {
+        Bx5GEnv.initial(3000);
+        Bx5GScreenClient screen = new Bx5GScreenClient("my");
+        DisplayStyleFactory.DisplayStyle[] styles = DisplayStyleFactory.getStyles().toArray(new DisplayStyleFactory.DisplayStyle[0]);
+        if (!screen.connect("192.168.10.61",5005)) {
+            System.err.println("杩炴帴澶辫触锛侊紒锛侊紒");
+            return;
+        }
+        screen.turnOn();
+        ProgramBxFile pf = new ProgramBxFile( 0, screen.getProfile());
+        pf.setFrameShow(false);
+        // 鍒嗗埆杈撳叆X锛孻锛寃idth锛宧eigth
+        TextCaptionBxArea area = new TextCaptionBxArea( 0,0,192,128,screen.getProfile());
+        // 鍒涘缓涓�涓暟鎹〉
+        // 绗竴琛屾暟鎹�
+        TextBxPage page = new TextBxPage("鍏ㄦ澘鍏ュ簱");
+        page.newLine("鐩爣搴撲綅锛�0100204");
+        // 绗簩琛屾暟鎹�
+        page.newLine("鎺ユ敹鍣� RX18 XH 6V 銆愭暟閲忥細2銆�");
+        page.newLine("涓帶 BM钃濈墮 鑻辨枃 6V 銆愭暟閲忥細1銆�");
+        page.newLine("绾挎潫 S2588-1-XX 鏃犲疄鐗┿�愭暟閲忥細5銆�");
+        page.newLine("鎺ユ敹鍣� RX18 XH 6V 銆愭暟閲忥細2銆�");
+        page.newLine("涓帶 BM钃濈墮 鑻辨枃 6V 銆愭暟閲忥細1銆�");
+        page.newLine("绾挎潫 S2588-1-XX 鏃犲疄鐗┿�愭暟閲忥細5銆�");
+        page.newLine("鎺ユ敹鍣� RX18 XH 6V 銆愭暟閲忥細2銆�");
+        page.newLine("涓帶 BM钃濈墮 鑻辨枃 6V 銆愭暟閲忥細1銆�");
+        page.newLine("绾挎潫 S2588-1-XX 鏃犲疄鐗┿�愭暟閲忥細5銆�");
+        // 璁剧疆瀛椾綋
+        page.setFont( new Font("瀹嬩綋",Font.PLAIN,12));
+        // 璁剧疆鏄剧ず鐗规妧涓哄揩閫熸墦鍑�
+        page.setDisplayStyle(styles[6]);
+        area.addPage(page);
+        pf.addArea( area );
+        // 鏇存柊鑺傜洰
+        screen.writeProgram(pf);
+        // 缁у紑涓庢帶鍒跺櫒涔嬮棿鐨勯摼鎺�
+        screen.disconnect();
+    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    public static void main1(String[] args) throws Exception {
+        Bx5GEnv.initial(3000);
+        // 鍒涘缓screen瀵硅薄锛岀敤浜庡鎺у埗鍣ㄨ繘琛岃闂紝瀹㈡埛绔ā寮�
+        Bx5GScreenClient screen = new Bx5GScreenClient("my");
+        // 鍒涘缓screen瀵硅薄锛岀敤浜庡鎺у埗鍣ㄨ繘琛岃闂紝涓插彛妯″紡
+        //        Bx5GScreenRS screen = new Bx5GScreenRS("MyScreen");
+
+        // 鍦ㄥ鎺у埗鍣ㄤ氦浜掍箣鍓嶏紝闇�瑕佸厛涓庢帶鍒跺櫒寤虹珛杩炴帴
+        boolean conn = screen.connect("192.168.10.61",5005);
+        System.out.println(conn);
+        // 涓庢帶鍒跺櫒浜や簰瀹屾垚鍚庯紝闇�鏂紑涓庢帶鍒跺櫒涔嬮棿鐨勮繛鎺�
+//        screen.disconnect();
+
+        // 浠ヤ笅涓轰竴浜涚畝鍗曟帶鍒跺懡浠ょ殑浣跨敤鏂规硶
+        // 寮�鍏虫満鍛戒护
+//        screen.turnOff();// 鍏虫満
+        screen.turnOn();// 寮�鏈�
+//        screen.syncTime();// 鏍℃椂
+//        screen.ping();// ping鍛戒护
+//        // 鏌ヨ鎺у埗鍣ㄧ姸鎬�
+//        screen.checkControllerStatus();
+//        // 鏌ヨ鎺у埗鍣ㄥ綋鍓嶅浐浠剁増鏈�
+//        screen.checkFirmware();
+//        // 鏌ヨ鎺у埗鍣ㄥ唴瀛�
+//        screen.checkMemVolumes();
+//        // 閿佸畾灞忓箷褰撳墠鐢婚潰
+//        screen.lock();
+//        // 瑙i櫎閿佸畾灞忓箷褰撳墠鐢婚潰
+//        screen.unlock();
+
+        Bx5GScreen.Result <ReturnControllerStatus> result1 =
+                screen.checkControllerStatus();
+        if (result1.isOK())
+        {
+            ReturnControllerStatus status = result1.reply;
+            System.out.println(status.getBrightness());
+            System.out.println(status.getRtcDay());
+            System.out.println(status.getScreenOnOff());
+            //
+            // status 杩樻湁寰堝鍏朵粬鎺ュ彛锛屽彲浠ユ牴鎹疄闄呴渶姹傚啀娆¤皟鐢ㄤ互鑾峰彇鐩稿簲鐘舵��
+        }
+
+//
+        // 浠ヤ笅鏄潤鎬佸尯閮ㄥ垎 Demo
+
+        // 鍒涘缓鑺傜洰鏂囦欢
+        ProgramBxFile pf = new ProgramBxFile( 0,screen.getProfile() );
+// 鏄惁鏄剧ず鑺傜洰杈规
+        pf.setFrameShow(true);
+// 鑺傜洰杈规鐨勭Щ鍔ㄩ�熷害
+        pf.setFrameSpeed(20);
+// 浣跨敤绗嚑涓唴缃竟妗�
+        pf.loadFrameImage(13);
+
+        DisplayStyleFactory.DisplayStyle[] styles = DisplayStyleFactory.getStyles().toArray(new DisplayStyleFactory.DisplayStyle[0]);
+// 鍒涘缓涓�涓枃鏈尯
+        // 鍒嗗埆杈撳叆X锛孻锛寃idth锛宧eigth
+        // 娉ㄦ剰鍖哄煙鍧愭爣鍜屽搴﹂珮搴︼紝涓嶈瓒婄晫
+        TextCaptionBxArea area = new TextCaptionBxArea( 0,0,160,64,screen.getProfile() );
+
+        // 鍒涘缓涓�涓暟鎹〉
+        // 绗竴琛屾暟鎹�
+        TextBxPage page = new TextBxPage("鍏ュ簱");
+        // 绗簩琛屾暟鎹�
+        page.newLine( "鐗╂枡锛�" );
+        page.newLine("鎺ユ敹鍣� RX18 XH 6V 锛堟暟閲忥細2锛�");
+        page.newLine("涓帶 BM钃濈墮 鑻辨枃 6V 锛堟暟閲忥細1锛�");
+        page.newLine("绾挎潫 S2588-1-XX 鏃犲疄鐗╋紙鏁伴噺锛�5锛�");
+        page.newLine("鐩爣搴撲綅锛�0100204");
+        // 璁剧疆瀛椾綋
+        page.setFont( new Font("瀹嬩綋",Font.PLAIN,12) );
+        // 璁剧疆鏄剧ず鐗规妧涓哄揩閫熸墦鍑�
+        page.setDisplayStyle( styles[2] );
+
+        // 鏁版嵁椤靛彲浠ユ槸鍥剧墖
+//        ImageFileBxPage iPage = new ImageFileBxPage( "E;a/001.bmp" );
+//
+//        // 鏁版嵁椤靛彲浠ユ槸txt鏂囦欢
+//        TextFileBxPage tPage  = new TextFileBxPage("E:a/001.txt");
+
+        // 灏嗗墠闈㈢殑page娣诲姞鍒癮rea涓� area涓彲浠ユ坊鍔犲涓猵age 鍏朵腑page鍙互鏄瓧绗︿覆锛屽彲浠ユ槸txt鏂囦欢锛屽彲浠ユ槸鍥剧墖锛屼笉鍙互鏄〃鏍硷紝濡傛灉闇�瑕丩ed灞忎笂鏄剧ず琛ㄦ牸锛岃鍏堝皢琛ㄦ牸缁樺埗鎴愬浘鐗�
+        area.addPage( page );
+//        area.addPage( iPage );
+//        area.addPage( tPage );
+        // 灏哸rea娣诲姞鍒拌妭鐩腑  鑺傜洰涓彲浠ユ坊鍔犲涓猘rea
+        pf.addArea( area );
+
+        // 鏇存柊鑺傜洰
+        screen.writeProgram( pf );
+
+
+
+
+
+
+
+
+
+
+        //
+        // 浠ヤ笅鏄姩鎬佸尯閮ㄥ垎 Demo
+        // 鍔ㄦ�佸尯鐨勭壒鐐�
+
+        // DynamicBxAreaRule(id, runMode, immediatePlay, timeout)
+        // runMode 杩愯妯″紡锛�
+        //   0锛氬惊鐜樉绀恒��
+        //   1锛氭樉绀哄畬鎴愬悗闈欐鏄剧ず鏈�鍚庝竴椤垫暟鎹��
+        //   2锛氬惊鐜樉绀猴紝瓒呰繃璁惧畾鏃堕棿鍚庢暟鎹粛鏈洿鏂版椂涓嶅啀鏄剧ず銆�
+        //   3锛氬惊鐜樉绀猴紝瓒呰繃璁惧畾鏃堕棿鍚庢暟鎹粛鏈洿鏂版椂鏄剧ず Logo 淇℃伅銆�
+        //   4锛氬惊鐜樉绀猴紝鏄剧ず瀹屾渶鍚庝竴椤靛悗灏变笉鍐嶆樉绀恒��
+        // immediatePlay 鏄惁绔嬪嵆鎾斁锛�
+        //   0锛氫笌寮傛鑺傜洰涓�璧锋挱鏀俱��
+        //   1锛氬紓姝ヨ妭鐩仠姝㈡挱鏀撅紝浠呮挱鏀惧姩鎬佸尯鍩熴��
+        //   2锛氬綋鎾斁瀹岃妭鐩紪鍙锋渶楂樼殑寮傛鑺傜洰鍚庢挱鏀捐鍔ㄦ�佸尯鍩熴��
+
+        //
+        // 瀹氫箟涓�涓姩鎬佸尯
+        // 鍙互閫氳繃ID鏉ユ洿鏂颁笉鍚岀殑鍔ㄦ�佸尯鍐呭, 姝ゅ ID 涓� 0
+//        DynamicBxAreaRule dynRule = new DynamicBxAreaRule(0, (byte) 0, (byte) 1, 0);
+        //dArea.addProgram("P000");
+        //dArea.addProgram("P001");
+
+//        int posX = 440;
+//        int posY = 4;
+//        TextCaptionBxArea dAreaContent = new TextCaptionBxArea(posX, posY, 64, 16, screen.getProfile());
+//        TextBxPage page = new TextBxPage("鍔ㄦ�佺涓�娆″皾璇�");
+//        page.setDisplayStyle(DisplayStyleFactory.getStyle(4));
+//        dAreaContent.addPage(page);
+//
+//        // 鍙戦�佸姩鎬佸尯涔嬪墠锛屽鏋滈渶瑕佸垹闄や箣鍓嶇殑鍔ㄦ�佸尯锛屽彲浠ヨ皟鐢ㄤ互涓嬫帴鍙�
+//        // 閫氬父濡傛灉鍔ㄦ�佸尯鐨勪綅缃垨澶у皬娌℃湁鍙戠敓鏀瑰彉锛屼笉鐢ㄥ垹闄�
+//        screen.deleteAllDynamic();
+//
+//        // 鏇存柊鍔ㄦ�佸尯
+//        screen.writeDynamic(dynRule, dAreaContent);
+//        Thread.sleep(15000);
+//
+//        //
+//        // 涓嬮潰妯℃嫙鍐嶆鏇存柊鍔ㄦ�佸尯
+//        page = new TextBxPage("鍐嶆灏濊瘯");
+//        TextBxPage page2 = new TextBxPage("鎴愬姛");
+//
+//        dAreaContent.clearPages();
+//        dAreaContent.addPage(page);
+//        dAreaContent.addPage(page2);
+//
+//        // 鏇存柊鍔ㄦ�佸尯
+//        screen.writeDynamic(dynRule, dAreaContent);
+
+        //
+        // 缁у紑涓庢帶鍒跺櫒涔嬮棿鐨勯摼鎺�
+        screen.disconnect();
+
+
+    }
+
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 682d88f..9746d36 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -1,15 +1,18 @@
 server:
   port: 9090
   servlet:
-    context-path: /@pom.build.finalName@
+    context-path: /gdwcs
 
 spring:
   application:
-    name: @pom.build.finalName@
+    name: gdwcs
   datasource:
     # sql-server
     driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
-    url: jdbc:sqlserver://127.0.0.1:1433;databasename=jsasrs
+    #url: jdbc:sqlserver://192.168.3.99:1433;databasename=gdasrs
+    #username: sa
+    #password: eisoft
+    url: jdbc:sqlserver://localhost:1433;databasename=gdasrs
     username: sa
     password: sa@123
   mvc:
@@ -22,11 +25,11 @@
 
 mybatis-plus:
   mapper-locations: classpath:mapper/*.xml
-  global-config:
-    field-strategy: 0
+#  global-config:
+#    field-strategy: 0
 
 logging:
-  path: /stock/out/logs
+  path: /stock/out/wcs/logs
 
 super:
   pwd: xltys1995
@@ -35,64 +38,106 @@
   enable: false
 
 # 涓嬩綅鏈洪厤缃�
-#wcs-slave:
-  # 鍫嗗灈鏈�
+wcs-slave:
+  # 鍫嗗灈鏈�1
   crn[0]:
     id: 1
-    ip: 192.168.6.9
-    port: 102
+    ip: 192.168.10.39
+    port: 5015
     rack: 0
     slot: 0
-    # 鍋忕Щ閲忥紝褰撳爢鍨涙満绔欑偣鍒楀彿=1鏃讹紝鍋忕Щ閲�=0
-    offset: 1
+    # 鍋忕Щ閲忥紝褰撳爢鍨涙満绔欑偣鍒楀彿=1鏃讹紝鍋忕Щ閲�=2
+    offset: 2
     # 鍫嗗灈鏈哄叆搴撶珯鐐�
     crnInStn[0]:
       devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 5
+      staNo: 4
       row: 2
       bay: 1
       lev: 1
     # 鍫嗗灈鏈哄嚭搴撶珯鐐�
     crnOutStn[0]:
       devpPlcId: ${wcs-slave.devp[0].id}
-      staNo: 6
+      staNo: 2
       row: 1
+      bay: 1
+      lev: 1
+    # 鍫嗗灈鏈�2
+  crn[1]:
+    id: 2
+    ip: 192.168.10.40
+    port: 5016
+    rack: 0
+    slot: 0
+    # 鍋忕Щ閲忥紝褰撳爢鍨涙満绔欑偣鍒楀彿=1鏃讹紝鍋忕Щ閲�=0
+    offset: 2
+    # 鍫嗗灈鏈哄叆搴撶珯鐐�
+    crnInStn[0]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 8
+      row: 4
+      bay: 1
+      lev: 1
+    # 鍫嗗灈鏈哄嚭搴撶珯鐐�
+    crnOutStn[0]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 6
+      row: 3
       bay: 1
       lev: 1
   # 杈撻�佺嚎
   devp[0]:
     id: 1
-    ip: 192.168.2.125
-    port: 102
+    ip: 192.168.10.65
+    port: 6000
     rack: 0
     slot: 1
-    # 鍏ュ簱鍙�
+    # 鍏ュ簱鍙�1
     inSta[0]:
-      staNo: 2
+      staNo: 3
       barcode: ${wcs-slave.barcode[0].id}
-    # 绌烘澘鍏ュ簱鍙�
+    # 鍏ュ簱鍙�2
+    inSta[1]:
+      staNo: 7
+      barcode: ${wcs-slave.barcode[0].id}
+    # 绌烘澘鍏ュ簱鍙�1
     emptyInSta[0]:
-      staNo: 2
-    # 鍑哄簱鍙�
+      staNo: 3
+    # 绌烘澘鍏ュ簱鍙�2
+    emptyInSta[1]:
+      staNo: 7
+    # 鍑哄簱鍙�1
     outSta[0]:
-      staNo: 6
+      staNo: 1
+    # 鍑哄簱鍙�2
+    outSta[1]:
+      staNo: 5
     # 鎷f枡鍏ュ簱鍙�
     pickSta[0]:
       staNo: 2
   # 鏉$爜鎵弿浠�
   barcode[0]:
     id: 1
-    ip: 192.168.2.150
+    ip: 192.168.10.150
     port: 51236
-  # LED
+  # LED1
   led[0]:
     id: 1
-    ip: 192.168.1.1
-    port: 8888
+    ip: 192.168.10.61
+    port: 5005
+    devpPlcId: ${wcs-slave.devp[0].id}
+    staArr: 1,2
+  # LED2
+  led[1]:
+    id: 2
+    ip: 192.168.10.62
+    port: 5005
+    devpPlcId: ${wcs-slave.devp[0].id}
+    staArr: 5,6
   # 纾呯О
   scale[0]:
     id: 1
-    ip: 192.168.1.1
+    ip: 192.168.10.152
     port: 8888
 
 
diff --git a/src/main/resources/lib/slf4j-api-1.7.30.jar b/src/main/resources/lib/slf4j-api-1.7.30.jar
new file mode 100644
index 0000000..29ac26f
--- /dev/null
+++ b/src/main/resources/lib/slf4j-api-1.7.30.jar
Binary files differ
diff --git a/src/main/resources/lib/slf4j-simple-1.7.30.jar b/src/main/resources/lib/slf4j-simple-1.7.30.jar
new file mode 100644
index 0000000..6debaa9
--- /dev/null
+++ b/src/main/resources/lib/slf4j-simple-1.7.30.jar
Binary files differ
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index ee48a59..271942d 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -75,4 +75,36 @@
         order by io_time,wrk_no asc
     </select>
 
+    <select id="selectPakInStep1" resultMap="BaseResultMap">
+        select top 1 * from asr_wrk_mast where source_sta_no=#{sourceStaNo} and wrk_sts=2 and barcode=#{barcode} and (io_type=1 or io_type=10) order by io_pri desc,io_time,wrk_no ASC
+    </select>
+
+    <select id="selectPakInStep11" resultMap="BaseResultMap">
+        select top 1 * from asr_wrk_mast where source_sta_no=#{sourceStaNo} and wrk_sts=1 and (io_type=1 or io_type=10) order by io_pri desc,io_time,wrk_no ASC
+    </select>
+
+    <select id="selectPakInStep2" resultMap="BaseResultMap">
+        select top 1 * from dbo.asr_wrk_mast where wrk_sts=2 and crn_no=#{crnNo} and wrk_no=#{workNo} and (io_type=1 or io_type=10 or io_type=53 or io_type=54 or io_type=57) order by io_pri desc,io_time,wrk_no ASC
+    </select>
+
+    <select id="selectPakInStep3" resultMap="BaseResultMap">
+        select top 1 * from dbo.asr_wrk_mast where wrk_no=#{workNo}
+    </select>
+
+    <select id="selectPickStep" resultMap="BaseResultMap">
+        select top 1 * from asr_wrk_mast where wrk_no=#{workNo} and wrk_sts=14 and (io_type=103 or io_type=107 or io_type=104)
+    </select>
+
+    <select id="selectPakOutStep1" resultMap="BaseResultMap">
+        select top 1 * from dbo.asr_wrk_mast where crn_no=#{crnNo} and wrk_sts=11 and io_type>100 order by io_pri desc,io_time,wrk_no asc
+    </select>
+
+    <select id="selectPakOutStep2" resultMap="BaseResultMap">
+        select top 1 * from dbo.asr_wrk_mast where source_sta_no=#{sourceStaNo} and wrk_sts=12 and io_type>100 order by io_pri desc,io_time desc,wrk_no ASC
+    </select>
+
+    <select id="selectLocMove" resultMap="BaseResultMap">
+        select top 1 * from dbo.asr_wrk_mast where wrk_sts=11 and io_type=11 and crn_no=#{crnNo} order by io_time,wrk_no
+    </select>
+
 </mapper>
diff --git a/src/main/webapp/static/css/console.css b/src/main/webapp/static/css/console.css
index fca1374..a14069d 100644
--- a/src/main/webapp/static/css/console.css
+++ b/src/main/webapp/static/css/console.css
@@ -118,7 +118,7 @@
 }
 /* 杈撻�佺嚎绗竴鍒� */
 .site-row-1 {
-    left: 200px;
+    left: 100px;
 }
 .site-row-1 .site {
     width: 100px;
@@ -162,40 +162,15 @@
     background-color: yellow;
 }
 
-/* ------------------ 鍙拌溅 ------------------ */
-/* 杞ㄩ亾 */
-.car-track {
-    position: absolute;
-    background: url(../image/bg.jpg);
-}
-#car-track-1 {
-    top: 122px;
-    left: 100px;
-    width: 100px;
-    height: 200px;
-}
-
-/* 杞� */
-.car {
-    position: absolute;
-}
-.site-8 {
-    top: 122px;
-    left: 100px;
-    width: 100px;
-    height: 40px;
-    line-height: 40px
-}
-
 
 /* ------------------ 璐ф灦鎬绘垚 ------------------ */
 .main-part {
     position: absolute;
     top: 100px;
-    left: 300px;
+    left: 200px;
 }
 .main-part .lane {
-    margin-bottom: 30px;
+    /*margin-bottom: 30px;*/
 }
 /* 鎺掑彿 */
 .row-no {
@@ -291,37 +266,37 @@
 
 
 /* 鍏ュ簱 */
-.machine-put {
+.machine-put-flag {
     background-color: #90d0f3;
 }
 /* 鍑哄簱 */
-.machine-take {
+.machine-take-flag {
     background-color: yellow;
 }
 /* 搴撳埌搴� */
-.machine-stock-move {
+.machine-stock-move-flag {
     background-color: #0c24fb;
     color: #fff;
 }
 /* 绔欏埌绔� */
-.machine-site-move {
+.machine-site-move-flag {
     background-color: #faa328;
 }
 /* PToP */
-.machine-p-move {
+.machine-p-move-flag {
     background-color: #128014;
     color: #fff;
 }
 /* 寮傚父 */
-.machine-error {
+.machine-error-flag {
     background-color: red;
 }
 /* 鑷姩 */
-.machine-auto {
+.machine-auto-flag {
     background-color: rgb(42,253,47);
 }
 /* 闈炶嚜鍔�/鏀跺埌 */
-.machine-unauto {
+.machine-unauto-flag {
     background-color: #aaaaaa;
 }
 
@@ -332,7 +307,7 @@
     position: absolute;
     background-color:#333!important;
     color: #333 !important;
-    width: 90%;
+    width: 95%;
     margin-top: 10px;
 }
 
@@ -343,9 +318,9 @@
 
 /* 鍏ュ簱鍙� */
 .cargo-put {
-    transform: rotateY(180deg);
-    top: 285px;
-    left: 313px;
+    /*transform: rotateY(180deg);*/
+    top: 160px;
+    left: 43px;
     position: absolute;
     width: 50px;
     height: 40px;
@@ -373,8 +348,8 @@
 }
 /* 鎵爜鍣�1 */
 #code-decoder-1 {
-    top: 320px;
-    left: 200px;
+    top: 144px;
+    left: 100px;
 }
 /* 鎵爜鍣ㄦ暟鎹�1 */
 #code-decoder-data-1 {
@@ -382,6 +357,17 @@
     margin-left: 35px;
 }
 
+/* 鎵爜鍣�1 */
+#code-decoder-2 {
+    top: 204px;
+    left: 100px;
+}
+/* 鎵爜鍣ㄦ暟鎹�1 */
+#code-decoder-data-2 {
+    font-size: xx-small;
+    margin-left: 35px;
+}
+
 /* 寮圭獥 */
 form .form-item {
     display: inline-block;
diff --git a/src/main/webapp/static/js/common.js b/src/main/webapp/static/js/common.js
index 2009a2e..2f45f5f 100644
--- a/src/main/webapp/static/js/common.js
+++ b/src/main/webapp/static/js/common.js
@@ -1,4 +1,4 @@
-var baseUrl = "/jswcs";
+var baseUrl = "/gdwcs";
 
 // 璧嬪��
 function setVal(el, val) {
diff --git a/src/main/webapp/views/console.html b/src/main/webapp/views/console.html
index 8197622..57c5e84 100644
--- a/src/main/webapp/views/console.html
+++ b/src/main/webapp/views/console.html
@@ -51,14 +51,14 @@
             <div class="tips-item">
                 <label>鍫嗗灈鏈虹姸鎬侀鑹�:&nbsp;</label>
                 <div class="item-group">
-                    <span class="machine-put">鍏ュ簱</span>
-                    <span class="machine-take">鍑哄簱</span>
-                    <span class="machine-stock-move">搴撳埌搴�</span>
-                    <span class="machine-site-move">绔欏埌绔�</span>
-                    <span class="machine-p-move">PToP</span>
-                    <span class="machine-error">寮傚父</span>
-                    <span class="machine-auto">鑷姩</span>
-                    <span class="machine-unauto">闈炶嚜鍔�/鎵嬪姩</span>
+                    <span class="machine-put-flag">鍏ュ簱</span>
+                    <span class="machine-take-flag">鍑哄簱</span>
+                    <span class="machine-stock-move-flag">搴撳埌搴�</span>
+                    <span class="machine-site-move-flag">绔欏埌绔�</span>
+                    <span class="machine-p-move-flag">PToP</span>
+                    <span class="machine-error-flag">寮傚父</span>
+                    <span class="machine-auto-flag">鑷姩</span>
+                    <span class="machine-unauto-flag">闈炶嚜鍔�/鎵嬪姩</span>
                 </div>
             </div>
             <div class="tips-item">
@@ -79,27 +79,26 @@
     <!----------- 宸ュ叿鏍� ---------->
     <!-- 鍏ュ簱鍙� -->
     <div class="cargo-put"></div>
-    <!-- 鎵爜鍣� -->
-    <div id="code-decoder-1" class="code-decoder">
-        <span id="code-decoder-data-1" class="code-decoder-data">0</span>
-    </div>
+
+<!--    &lt;!&ndash; 鎵爜鍣� 1&ndash;&gt;-->
+<!--    <div id="code-decoder-1" class="code-decoder">-->
+<!--        <span id="code-decoder-data-1" class="code-decoder-data">0</span>-->
+<!--    </div>-->
+
+<!--    &lt;!&ndash; 鎵爜鍣� 2&ndash;&gt;-->
+<!--    <div id="code-decoder-2" class="code-decoder">-->
+<!--        <span id="code-decoder-data-2" class="code-decoder-data">0</span>-->
+<!--    </div>-->
 
 
     <!----------- 宸﹁緭閫佺嚎 ---------->
 
-    <!-- 鍙拌溅杞ㄩ亾 -->
-    <div id="car-track-1" class="car-track"></div>
-
-    <!-- 鍙拌溅瀹炰緥 -->
-    <div id="site-8" class="site car">8</div>
-
     <!-- 绗竴鍒楋紙瀹藉害 100px锛� -->
     <div class="site-row site-row-1">
-        <div id="site-7" class="site" style="height: 40px;line-height: 40px">7</div>
-        <div id="site-4" class="site" style="height: 40px;line-height: 40px">4</div>
-        <div id="site-3" class="site" style="height: 40px;line-height: 40px;">3</div>
-        <div id="site-2" class="site" style="height: 40px;line-height: 40px">2</div>
-        <div id="site-1" class="site" style="height: 40px;line-height: 40px">1</div>
+        <div id="site-1" class="site" style="height: 20px;line-height: 20px;">1</div>
+        <div id="site-3" class="site" style="height: 20px;line-height: 20px; margin-top: 20px">3</div>
+        <div id="site-5" class="site" style="height: 20px;line-height: 20px; margin-top: 0px">5</div>
+        <div id="site-7" class="site" style="height: 20px;line-height: 20px; margin-top: 20px">7</div>
     </div>
 
     <!-- 璐ф灦 + 鍫嗗灈鏈� + 鍏ュ簱绔欑偣 + 鍑哄簱绔欑偣 -->
@@ -109,8 +108,7 @@
             <span class="row-no">1#</span>
             <!-- 璐ф灦 -->
             <div class="stock-group">
-                <div id="site-6" class="site" style="">6</div>
-                <button class="item">1</button>
+                <div id="site-2" class="site" style="">2</div>
                 <button class="item">2</button>
                 <button class="item">3</button>
                 <button class="item">4</button>
@@ -144,6 +142,23 @@
                 <button class="item">32</button>
                 <button class="item">33</button>
                 <button class="item">34</button>
+                <button class="item">35</button>
+                <button class="item">36</button>
+                <button class="item">37</button>
+                <button class="item">38</button>
+                <button class="item">39</button>
+                <button class="item">40</button>
+                <button class="item">41</button>
+                <button class="item">42</button>
+                <button class="item">43</button>
+                <button class="item">44</button>
+                <button class="item">45</button>
+                <button class="item">46</button>
+                <button class="item">47</button>
+                <button class="item">48</button>
+                <button class="item">49</button>
+                <button class="item">50</button>
+                <button class="item">51</button>
                 <div class="site site-none">&nbsp;&nbsp;&nbsp;&nbsp;</div>
             </div>
             <!-- 鍫嗗灈鏈� -->
@@ -153,8 +168,7 @@
             </div>
             <!-- 璐ф灦 -->
             <div class="stock-group">
-                <div id="site-5" class="site" style="">5</div>
-                <button class="item">1</button>
+                <div id="site-4" class="site" style="">4</div>
                 <button class="item">2</button>
                 <button class="item">3</button>
                 <button class="item">4</button>
@@ -188,9 +202,143 @@
                 <button class="item">32</button>
                 <button class="item">33</button>
                 <button class="item">34</button>
+                <button class="item">35</button>
+                <button class="item">36</button>
+                <button class="item">37</button>
+                <button class="item">38</button>
+                <button class="item">39</button>
+                <button class="item">40</button>
+                <button class="item">41</button>
+                <button class="item">42</button>
+                <button class="item">43</button>
+                <button class="item">44</button>
+                <button class="item">45</button>
+                <button class="item">46</button>
+                <button class="item">47</button>
+                <button class="item">48</button>
+                <button class="item">49</button>
+                <button class="item">50</button>
+                <button class="item">51</button>
                 <div class="site site-none">&nbsp;&nbsp;&nbsp;&nbsp;</div>
             </div>
-            <span class="row-no">2#</span>
+        </div>
+        <div class="lane">
+            <!-- 璐ф灦 -->
+            <div class="stock-group">
+                <div id="site-6" class="site" style="">6</div>
+                <button class="item">2</button>
+                <button class="item">3</button>
+                <button class="item">4</button>
+                <button class="item">5</button>
+                <button class="item">6</button>
+                <button class="item">7</button>
+                <button class="item">8</button>
+                <button class="item">9</button>
+                <button class="item">10</button>
+                <button class="item">11</button>
+                <button class="item">12</button>
+                <button class="item">13</button>
+                <button class="item">14</button>
+                <button class="item">15</button>
+                <button class="item">16</button>
+                <button class="item">17</button>
+                <button class="item">18</button>
+                <button class="item">19</button>
+                <button class="item">20</button>
+                <button class="item">21</button>
+                <button class="item">22</button>
+                <button class="item">23</button>
+                <button class="item">24</button>
+                <button class="item">25</button>
+                <button class="item">26</button>
+                <button class="item">27</button>
+                <button class="item">28</button>
+                <button class="item">29</button>
+                <button class="item">30</button>
+                <button class="item">31</button>
+                <button class="item">32</button>
+                <button class="item">33</button>
+                <button class="item">34</button>
+                <button class="item">35</button>
+                <button class="item">36</button>
+                <button class="item">37</button>
+                <button class="item">38</button>
+                <button class="item">39</button>
+                <button class="item">40</button>
+                <button class="item">41</button>
+                <button class="item">42</button>
+                <button class="item">43</button>
+                <button class="item">44</button>
+                <button class="item">45</button>
+                <button class="item">46</button>
+                <button class="item">47</button>
+                <button class="item">48</button>
+                <button class="item">49</button>
+                <button class="item">50</button>
+                <button class="item">51</button>
+                <div class="site site-none">&nbsp;&nbsp;&nbsp;&nbsp;</div>
+            </div>
+            <!-- 鍫嗗灈鏈� -->
+            <div class="crn">
+                <hr class="pathway">
+                <div id="crn-2" class="machine"></div>
+            </div>
+            <!-- 璐ф灦 -->
+            <div class="stock-group">
+                <div id="site-8" class="site" style="">8</div>
+                <button class="item">2</button>
+                <button class="item">3</button>
+                <button class="item">4</button>
+                <button class="item">5</button>
+                <button class="item">6</button>
+                <button class="item">7</button>
+                <button class="item">8</button>
+                <button class="item">9</button>
+                <button class="item">10</button>
+                <button class="item">11</button>
+                <button class="item">12</button>
+                <button class="item">13</button>
+                <button class="item">14</button>
+                <button class="item">15</button>
+                <button class="item">16</button>
+                <button class="item">17</button>
+                <button class="item">18</button>
+                <button class="item">19</button>
+                <button class="item">20</button>
+                <button class="item">21</button>
+                <button class="item">22</button>
+                <button class="item">23</button>
+                <button class="item">24</button>
+                <button class="item">25</button>
+                <button class="item">26</button>
+                <button class="item">27</button>
+                <button class="item">28</button>
+                <button class="item">29</button>
+                <button class="item">30</button>
+                <button class="item">31</button>
+                <button class="item">32</button>
+                <button class="item">33</button>
+                <button class="item">34</button>
+                <button class="item">35</button>
+                <button class="item">36</button>
+                <button class="item">37</button>
+                <button class="item">38</button>
+                <button class="item">39</button>
+                <button class="item">40</button>
+                <button class="item">41</button>
+                <button class="item">42</button>
+                <button class="item">43</button>
+                <button class="item">44</button>
+                <button class="item">45</button>
+                <button class="item">46</button>
+                <button class="item">47</button>
+                <button class="item">48</button>
+                <button class="item">49</button>
+                <button class="item">50</button>
+                <button class="item">51</button>
+                <div class="site site-none">&nbsp;&nbsp;&nbsp;&nbsp;</div>
+            </div>
+            <span class="row-no">4#</span>
         </div>
     </div>
 </main>
@@ -459,7 +607,7 @@
                 } else if (res.code === 403){
                     window.location.href = baseUrl+"/login";
                 }  else {
-                    alert(res.msg);
+                    console.log(res.msg);
                 }
             }
         });
@@ -486,7 +634,7 @@
                 } else if (res.code === 403){
                     window.location.href = baseUrl+"/login";
                 }  else {
-                    alert(res.msg);
+                    console.log(res.msg);
                 }
             }
         });
@@ -511,9 +659,9 @@
                         }
                     }
                 } else if (res.code === 403){
-                    window.location.href = baseUrl+"/login";
+                    parent.location.href = baseUrl+"/login";
                 }  else {
-                    alert(res.msg);
+                    console.log(res.msg);
                 }
             }
         });
@@ -532,12 +680,13 @@
                         var crnEl = $("#crn-"+crns[i].crnId);
                         crnEl.attr("class", "machine " + crns[i].crnStatus);
                         // crnAnimate(crns[i].crnId, crns[i].offset);
-                        crnEl.animate({left: (crns[i].bay * ($('.item').eq(0).width()+4)) +'px'}, 1000);
+                        var unit = $('.item').eq(0).width()+4;
+                        crnEl.animate({left: (crns[i].bay * unit + 20) +'px'}, 1000);
                     }
                 } else if (res.code === 403){
                     window.location.href = baseUrl+"/login";
                 }  else {
-                    alert(res.msg);
+                    console.log(res.msg);
                 }
             }
         });
@@ -558,7 +707,7 @@
                 } else if (res.code === 403){
                     window.location.href = baseUrl+"/login";
                 }  else {
-                    alert(res.msg);
+                    console.log(res.msg);
                 }
             }
         });
@@ -678,17 +827,17 @@
     }
 
 
-    // 鍙拌溅鐐瑰嚮浜嬩欢
-    $(document).on("click", ".car", function () {
-        var value = prompt('鐩爣绔欙細', "1");
-        if (value == null) {
-            alert('涓嶈兘涓虹┖锛�');
-        } else if (value === '') {
-            alert('涓嶈兘涓虹┖锛�');
-        } else {
-            carAnimate(8, Number(value));
-        }
-    })
+    // // 鍙拌溅鐐瑰嚮浜嬩欢
+    // $(document).on("click", ".item", function () {
+    //     var value = prompt('鐩爣绔欙細', "1");
+    //     if (value == null) {
+    //         alert('涓嶈兘涓虹┖锛�');
+    //     } else if (value === '') {
+    //         alert('涓嶈兘涓虹┖锛�');
+    //     } else {
+    //         carAnimate(8, Number(value));
+    //     }
+    // })
 
 </script>
 </html>
\ No newline at end of file
diff --git a/src/main/webapp/views/crn.html b/src/main/webapp/views/crn.html
index 7f74fb4..bc1fd92 100644
--- a/src/main/webapp/views/crn.html
+++ b/src/main/webapp/views/crn.html
@@ -27,11 +27,11 @@
             <span>&nbsp;</span>
             <input id="crn1" disabled="disabled">
         </div>
-<!--        <div class="crn-command-item">-->
-<!--            <label>2#</label>-->
-<!--            <span>&nbsp;</span>-->
-<!--            <input id="crn2" disabled="disabled">-->
-<!--        </div>-->
+        <div class="crn-command-item">
+            <label>2#</label>
+            <span>&nbsp;</span>
+            <input id="crn2" disabled="disabled">
+        </div>
     </div>
     <!-- 鍫嗗灈鏈虹姸鎬佷綅淇℃伅 -->
     <div class="crn-state">
@@ -39,15 +39,17 @@
             <thead>
                 <tr>
                     <th>鍫嗗灈鏈�</th>
-                    <th>浠诲姟鍙�</th>
                     <th>妯″紡</th>
                     <th>鐘舵��</th>
-                    <th>鎶ヨ</th>
                     <th>鏈夌墿</th>
                     <th>鍒�</th>
                     <th>灞�</th>
+                    <th>璧拌鍘熺偣</th>
+                    <th>鍗囬檷鍘熺偣</th>
                     <th>璐у弶浣嶇疆</th>
-                    <th>杞借揣鍙颁綅缃�</th>
+                    <th>璧拌瀹氫綅</th>
+                    <th>鍗囬檷瀹氫綅</th>
+                    <th>鎬ュ仠</th>
                     <th>寮傚父鐮�</th>
                 </tr>
             </thead>
@@ -69,6 +71,13 @@
                 <th>婧愬簱浣�</th>
                 <th>鐩爣搴撲綅</th>
                 <th>寮傚父</th>
+                <th>璧拌閫熷害锛坢/min)</th>
+                <th>鍗囬檷閫熷害锛坢/min)</th>
+                <th>鍙夌墮閫熷害锛坢/min)</th>
+                <th>璧拌璺濈(Km)</th>
+                <th>鍗囬檷璺濈(Km)</th>
+                <th>璧拌鏃堕暱(H)</th>
+                <th>鍗囬檷鏃堕暱(H)</th>
             </tr>
         </thead>
         <tbody>
@@ -92,7 +101,7 @@
             <span class="select-title">鍫嗗灈鏈哄彿</span>
             <div class="select-container">
                 <label><input type="radio" name="crnSelect" value="1" checked>&nbsp;1鍙峰爢鍨涙満</label>
-<!--                <label><input type="radio" name="crnSelect" value="2">&nbsp;2鍙峰爢鍨涙満</label>-->
+                <label><input type="radio" name="crnSelect" value="2">&nbsp;2鍙峰爢鍨涙満</label>
             </div>
         </div>
         <!-- 婧愮珯/婧愬簱浣� 閫夋嫨 -->
@@ -247,16 +256,18 @@
                     for (var i=1;i<=table.length;i++){
                         var tr = tableEl.find("tr").eq(i);
                         setVal(tr.children("td").eq(0), table[i-1].crnNo);
-                        setVal(tr.children("td").eq(1), table[i-1].workNo);
-                        setVal(tr.children("td").eq(2), table[i-1].statusType);
-                        setVal(tr.children("td").eq(3), table[i-1].status);
-                        setVal(tr.children("td").eq(4), table[i-1].warn);
-                        setVal(tr.children("td").eq(5), table[i-1].loading);
-                        setVal(tr.children("td").eq(6), table[i-1].bay);
-                        setVal(tr.children("td").eq(7), table[i-1].lev);
+                        setVal(tr.children("td").eq(1), table[i-1].statusType);
+                        setVal(tr.children("td").eq(2), table[i-1].status);
+                        setVal(tr.children("td").eq(3), table[i-1].loading);
+                        setVal(tr.children("td").eq(4), table[i-1].bay);
+                        setVal(tr.children("td").eq(5), table[i-1].lev);
+                        setVal(tr.children("td").eq(6), table[i-1].xorigin);
+                        setVal(tr.children("td").eq(7), table[i-1].yorigin);
                         setVal(tr.children("td").eq(8), table[i-1].forkOffset);
-                        setVal(tr.children("td").eq(9), table[i-1].liftPos);
-                        setVal(tr.children("td").eq(10), table[i-1].warnCode);
+                        setVal(tr.children("td").eq(9), table[i-1].xlocation);
+                        setVal(tr.children("td").eq(10), table[i-1].ylocation);
+                        setVal(tr.children("td").eq(11), table[i-1].stop);
+                        setVal(tr.children("td").eq(12), table[i-1].warnCode);
                     }
                 } else if (res.code === 403){
                     window.location.href = baseUrl+"/login";
@@ -290,7 +301,14 @@
                         setVal(tr.children("td").eq(4), table[i-1].staNo);
                         setVal(tr.children("td").eq(5), table[i-1].sourceLocNo);
                         setVal(tr.children("td").eq(6), table[i-1].locNo);
-                        setVal(tr.children("td").eq(6), table[i-1].error);
+                        setVal(tr.children("td").eq(7), table[i-1].error);
+                        setVal(tr.children("td").eq(8), table[i-1].xspeed);
+                        setVal(tr.children("td").eq(9), table[i-1].yspeed);
+                        setVal(tr.children("td").eq(10), table[i-1].zspeed);
+                        setVal(tr.children("td").eq(11), table[i-1].xdistance);
+                        setVal(tr.children("td").eq(12), table[i-1].ydistance);
+                        setVal(tr.children("td").eq(13), table[i-1].xduration);
+                        setVal(tr.children("td").eq(14), table[i-1].yduration);
                     }
                 } else if (res.code === 403){
                     window.location.href = baseUrl+"/login";
@@ -457,6 +475,8 @@
                 "       <td></td>\n" +
                 "       <td></td>\n" +
                 "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
                 "     </tr>\n";
         }
         $('#crn-state-table tbody').after(html);
@@ -486,6 +506,13 @@
                 "       <td></td>\n" +
                 "       <td></td>\n" +
                 "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
+                "       <td></td>\n" +
                 "     </tr>\n";
         }
         $('#crn-msg-table tbody').after(html);
diff --git a/src/main/webapp/views/pipeline.html b/src/main/webapp/views/pipeline.html
index 8bd1f02..8c19df6 100644
--- a/src/main/webapp/views/pipeline.html
+++ b/src/main/webapp/views/pipeline.html
@@ -62,7 +62,7 @@
                     <th>鏈夌墿</th>
                     <th>鍙叆</th>
                     <th>鍙嚭</th>
-                    <th>闇�姹�1</th>
+                    <th>鍏ュ簱鏍囪</th>
                     <th>绌烘澘淇″彿</th>
                     <th>鐩爣绔�</th>
                 </tr>
@@ -147,7 +147,7 @@
                 } else if (res.code === 403){
                     window.location.href = baseUrl+"/login";
                 }  else {
-                    alert(res.msg);
+                    console.log(res.msg);
                 }
             }
         });
@@ -175,14 +175,14 @@
                         setVal(tr.children("td").eq(3), table[i-1].loading);
                         setVal(tr.children("td").eq(4), table[i-1].inEnable);
                         setVal(tr.children("td").eq(5), table[i-1].outEnable);
-                        setVal(tr.children("td").eq(6), table[i-1].inreq1);
+                        setVal(tr.children("td").eq(6), table[i-1].pakMk);
                         setVal(tr.children("td").eq(7), table[i-1].emptyMk);
                         setVal(tr.children("td").eq(8), table[i-1].staNo);
                     }
                 } else if (res.code === 403){
                     window.location.href = baseUrl+"/login";
                 }  else {
-                    alert(res.msg);
+                    console.log(res.msg);
                 }
             }
         });

--
Gitblit v1.9.1