From ba1a7a9ef126296e2798e313dc5b43f775a1123c Mon Sep 17 00:00:00 2001
From: cl <418351270@qq.com>
Date: 星期四, 23 五月 2024 17:44:36 +0800
Subject: [PATCH] 修改数据采集

---
 guns-vip-main/src/main/java/cn/stylefeng/guns/modular/em/equipmentStatus/model/result/EquipmentStatusResult.java         |    2 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/server/HEARTBEAT/impl/HeartBeatServerInterfaceImpl.java          |   12 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP090Callback.java                                      |   85 +
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP010Callback.java                                     |   41 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP130Callback.java                                      |   84 +
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP050Callback.java                                      |   86 +
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/init/CustomRunner.java                                           |  214 +-
 guns-vip-main/src/main/java/cn/stylefeng/guns/modular/om/productionOrdeInfo/controller/ProductionOrdeInfoController.java |   13 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP030Callback.java                                     |   41 
 guns-vip-main/src/main/java/cn/stylefeng/guns/modular/bs/collectionParamConf/model/result/CollectionParamConfResult.java |    4 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP070Callback.java                                     |   41 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP130BCallback.java                                     |   79 
 guns-vip-main/src/main/webapp/assets/modular/om/productionOrderRecords/productionOrderRecords.js                         |    4 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP160Callback.java                                      |   11 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP010Callback.java                                      |   51 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/COP010Callback.java                                     |   41 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/server/HEARTBEAT/HeartBeatServerInterface.java                   |    8 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP030BCallback.java                                    |   41 
 guns-vip-main/src/main/webapp/assets/modular/cm/paramCollection/paramCollection.js                                       |    4 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP020Callback.java                                     |   40 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP120Callback.java                                      |   84 +
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP060Callback.java                                     |   71 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP040Callback.java                                     |   41 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/DOP010Callback.java                                     |   41 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP170Callback.java                                      |   32 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP040BCallback.java                                    |   36 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP020Callback.java                                      |   86 +
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP040Callback.java                                     |   77 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP070Callback.java                                      |   85 +
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP150Callback.java                                      |   77 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/opc/GlobalVariable.java                                          |    7 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP010Callback.java                                     |   41 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP090Callback.java                                     |   41 
 guns-vip-main/src/main/java/cn/stylefeng/guns/modular/kb/greaseBoard/GreaseBoardController.java                          |    1 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/COP020Callback.java                                     |   77 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP120BCallback.java                                     |   79 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP030Callback.java                                     |   40 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP030Callback.java                                      |   47 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP110Callback.java                                      |   11 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/DOP020Callback.java                                     |   64 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP050Callback.java                                     |   76 
 guns-vip-main/pom.xml                                                                                                    |   10 
 guns-vip-main/src/main/java/cn/stylefeng/guns/modular/bs/equipmentInfo/model/result/EquipmentInfoResult.java             |    3 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/init/SubscriptionManage.java                                     |  743 +++++++++---
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP090BCallback.java                                    |   37 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/COP030Callback.java                                     |   76 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP080Callback.java                                      |   12 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP140Callback.java                                      |   84 +
 /dev/null                                                                                                                |   99 -
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP080Callback.java                                     |   78 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP020Callback.java                                     |   79 
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP040Callback.java                                      |   86 +
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP100Callback.java                                      |   84 +
 guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/opc/OPCElement.java                                              |   81 
 54 files changed, 1,970 insertions(+), 1,518 deletions(-)

diff --git a/guns-vip-main/pom.xml b/guns-vip-main/pom.xml
index af153d6..badead1 100644
--- a/guns-vip-main/pom.xml
+++ b/guns-vip-main/pom.xml
@@ -90,6 +90,7 @@
             <artifactId>spring-boot-starter-websocket</artifactId>
         </dependency>
 
+        <!-- opc start-->
         <dependency>
             <groupId>com.kangaroohy</groupId>
             <artifactId>milo-spring-boot-starter</artifactId>
@@ -98,8 +99,9 @@
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-pool2</artifactId>
-            <version>2.12.0</version>
+            <version>2.11.1</version>
         </dependency>
+        <!-- opc end-->
 
         <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
         <dependency>
@@ -107,6 +109,12 @@
             <artifactId>guava</artifactId>
             <version>33.0.0-jre</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.xmlbeans</groupId>
+            <artifactId>xmlbeans</artifactId>
+            <version>2.6.0</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/bs/collectionParamConf/model/result/CollectionParamConfResult.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/bs/collectionParamConf/model/result/CollectionParamConfResult.java
index 8877e6b..f13abab 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/bs/collectionParamConf/model/result/CollectionParamConfResult.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/bs/collectionParamConf/model/result/CollectionParamConfResult.java
@@ -2,7 +2,7 @@
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import lombok.Data;
-import org.openscada.opc.lib.da.Item;
+import org.apache.xmlbeans.impl.xb.xmlconfig.NamespaceList;
 
 import java.util.Date;
 import java.io.Serializable;
@@ -126,6 +126,6 @@
      */
     private Date updateTime;
 
-    private Item item;
+    private NamespaceList.Member2.Item item;
 
 }
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/bs/equipmentInfo/model/result/EquipmentInfoResult.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/bs/equipmentInfo/model/result/EquipmentInfoResult.java
index 26b1ede..b0cb3a0 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/bs/equipmentInfo/model/result/EquipmentInfoResult.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/bs/equipmentInfo/model/result/EquipmentInfoResult.java
@@ -1,7 +1,6 @@
 package cn.stylefeng.guns.modular.bs.equipmentInfo.model.result;
 
 import lombok.Data;
-import org.openscada.opc.lib.da.Item;
 
 import java.util.Date;
 import java.io.Serializable;
@@ -110,5 +109,5 @@
      * 鏇存敼鏃堕棿
      */
     private Date updateTime;
-    private Item item;
+   /* private Item item;*/
 }
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/em/equipmentStatus/model/result/EquipmentStatusResult.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/em/equipmentStatus/model/result/EquipmentStatusResult.java
index 1199d34..3b1dbbc 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/em/equipmentStatus/model/result/EquipmentStatusResult.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/em/equipmentStatus/model/result/EquipmentStatusResult.java
@@ -1,7 +1,6 @@
 package cn.stylefeng.guns.modular.em.equipmentStatus.model.result;
 
 import lombok.Data;
-import org.openscada.opc.lib.da.Item;
 
 import java.util.Date;
 import java.io.Serializable;
@@ -75,5 +74,4 @@
      * 鏇存柊鏃堕棿
      */
     private Date updateTime;
-    private Item item;
 }
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/kb/greaseBoard/GreaseBoardController.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/kb/greaseBoard/GreaseBoardController.java
index a2a865d..5bc8af6 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/kb/greaseBoard/GreaseBoardController.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/kb/greaseBoard/GreaseBoardController.java
@@ -9,7 +9,6 @@
 import cn.stylefeng.guns.modular.om.productionOrdeInfo.model.result.ProductionOrdeInfoResult;
 import cn.stylefeng.guns.modular.sc.kanbanConf.model.params.KanbanConfParam;
 import cn.stylefeng.guns.modular.sc.kanbanConf.service.KanbanConfService;
-import cn.stylefeng.guns.plcserver.opc.unit.OPCUnit;
 import cn.stylefeng.roses.core.base.controller.BaseController;
 import cn.stylefeng.roses.kernel.model.response.ResponseData;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/om/productionOrdeInfo/controller/ProductionOrdeInfoController.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/om/productionOrdeInfo/controller/ProductionOrdeInfoController.java
index 6a19b39..c8ad14d 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/om/productionOrdeInfo/controller/ProductionOrdeInfoController.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/modular/om/productionOrdeInfo/controller/ProductionOrdeInfoController.java
@@ -11,6 +11,7 @@
 import cn.stylefeng.guns.modular.bs.materialInfo.entity.MaterialInfo;
 import cn.stylefeng.guns.modular.bs.materialInfo.service.MaterialInfoService;
 import cn.stylefeng.guns.modular.cm.passingStationCollection.entity.PassingStationCollection;
+import cn.stylefeng.guns.modular.cm.passingStationCollection.model.params.PassingStationCollectionParam;
 import cn.stylefeng.guns.modular.cm.passingStationCollection.model.result.PassingStationCollectionResult;
 import cn.stylefeng.guns.modular.cm.passingStationCollection.service.PassingStationCollectionService;
 import cn.stylefeng.guns.modular.om.productionOrdeInfo.entity.ProductionOrdeInfo;
@@ -212,6 +213,18 @@
     }
 
     /**
+     * 娴嬪姛鏈烘柊澧炴帴鍙�
+     * @return
+     */
+    @ResponseBody
+    @CrossOrigin
+    @RequestMapping("/addStationInfo")
+    public ResponseData addStationInfo(PassingStationCollectionParam passingStationCollectionParam) {
+        this.passingStationCollectionService.add(passingStationCollectionParam);
+        return ResponseData.success();
+    }
+
+    /**
      * 澶у睆鍒楄〃鎺ュ彛
      * @param productionOrdeInfoParam
      * @return
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP010Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP010Callback.java
index 6cd0a4a..813c5e2 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP010Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP010Callback.java
@@ -30,7 +30,6 @@
 import cn.stylefeng.guns.modular.sc.serialNumbersConf.service.SerialNumbersConfService;
 import cn.stylefeng.guns.plcserver.opc.GlobalVariable;
 import cn.stylefeng.guns.plcserver.opc.OPCElement;
-import cn.stylefeng.guns.plcserver.opc.unit.OPCUnit;
 import cn.stylefeng.guns.plcserver.tool.DateTool;
 import cn.stylefeng.guns.plcserver.tool.LogUtil;
 import com.kangaroohy.milo.model.ReadWriteEntity;
@@ -188,7 +187,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -219,43 +220,7 @@
         }
     }
 
-    //PC璇诲弬鏁颁俊鎭�
-    public void handleInfo() throws Exception {
-        logger.info("handleInfo START锛�");
 
-        if(null == list){
-            CollectionParamConfParam collectionParamConfParam = new CollectionParamConfParam();
-            collectionParamConfParam.setLocationCode(LOCATION_CODE);
-            list = collectionParamConfService.findListBySpec(collectionParamConfParam);
-        }
-        if(null != list && !list.isEmpty()) {
-            for (int i = 0; i < list.size(); i++) {
-                CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
-                }
-            }
-        }
-
-        logger.info("handleInfo END锛�");
-    }
     public void handleRepair() throws Exception{
         RepairManageInfoParam repairManageInfoParam = new RepairManageInfoParam();
         repairManageInfoParam.setLocationCode(LOCATION_CODE);
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP020Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP020Callback.java
index e45e442..6632c2c 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP020Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP020Callback.java
@@ -1,11 +1,14 @@
 package cn.stylefeng.guns.plcserver.callback;
 
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.params.CollectionParamConfParam;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.result.CollectionParamConfResult;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.service.CollectionParamConfService;
 import cn.stylefeng.guns.modular.bs.equipmentInfo.service.EquipmentInfoService;
 import cn.stylefeng.guns.modular.bs.locationInfo.service.LocationInfoService;
+import cn.stylefeng.guns.modular.cm.paramCollection.entity.ParamCollection;
 import cn.stylefeng.guns.modular.cm.paramCollection.model.params.ParamCollectionParam;
 import cn.stylefeng.guns.modular.cm.paramCollection.service.ParamCollectionService;
 import cn.stylefeng.guns.modular.cm.passingStationCollection.model.params.PassingStationCollectionParam;
@@ -90,6 +93,8 @@
     private static String LOCATION_CODE  = "BOP020";//宸ヤ綅鍙�
     private static List list = null;
 
+    private static String PRODUCT_STATE = "鍚堟牸";
+
     public BOP020Callback(MiloService miloService,
                           ProductionOrdeInfoService productionOrdeInfoService,
                           PassingStationCollectionService passingStationCollectionService,
@@ -157,6 +162,11 @@
         String S_PRODUCT_STATE_CODE = miloService.
                 readFromOpcUa(OPCElement.BOP020_S_PRODUCT_STATE_CODE)
                 .getValue().toString();
+
+        if("2".equals(S_PRODUCT_STATE_CODE)){
+            PRODUCT_STATE = "涓嶅悎鏍�";
+        }
+
         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.BOP020_J_PC_FINISH,true);
         miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
         //澶勭悊杩囩珯淇℃伅
@@ -176,7 +186,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -217,32 +229,57 @@
             list = collectionParamConfService.findListBySpec(collectionParamConfParam);
         }
         if(null != list && !list.isEmpty()) {
+
+            List<String> nodeIdList = new ArrayList<>();
             for (int i = 0; i < list.size(); i++) {
                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
+                nodeIdList.add(result.getGatherAddress());
+            }
+
+            List<ReadWriteEntity> readWriteEntityList = new ArrayList<>();
+            if(CollUtil.isNotEmpty(nodeIdList)){
+                readWriteEntityList = miloService.readFromOpcUa(nodeIdList);
+            }
+
+            List<ParamCollection> paramCollectionlist = new ArrayList<>();
+            if (CollUtil.isNotEmpty(nodeIdList)){
+                for(int i=0;i<nodeIdList.size();i++){
+                    if(ObjectUtil.isNotEmpty(readWriteEntityList.get(i).getValue())){
+                        CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
+
+                        String value = "0";
+                        if (readWriteEntityList.get(i).getValue() != null){
+                            value = readWriteEntityList.get(i).getValue().toString();
+                        }
+                        if(result.getParamName() != null && result.getParamName().contains("鐘舵��")){
+                            if("2".equals(value)){
+                                value = "涓嶅悎鏍�";
+                            }else {
+                                value = "鍚堟牸";
+                            }
+                        }
+                        ParamCollection paramCollectionParam = new ParamCollection();
+                        paramCollectionParam.setParamCode(result.getParamCode());
+                        paramCollectionParam.setParamName(result.getParamName());
+                        paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
+                        paramCollectionParam.setSfcCode(S_SFC_CODE);
+                        paramCollectionParam.setProductCode(S_PRODUCT_CODE);
+                        paramCollectionParam.setProductionLine(result.getProductionLine());
+                        paramCollectionParam.setLocationCode(result.getLocationCode());
+                        paramCollectionParam.setParamValue(value.toString());
+                        paramCollectionParam.setParamLower(result.getParamLower());
+                        paramCollectionParam.setParamUpper(result.getParamUpper());
+                        paramCollectionParam.setParamStandard(result.getParamCentral());
+                        paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
+                        paramCollectionParam.setUnit(result.getUnit());
+                        paramCollectionParam.setSpareField2(PRODUCT_STATE);
+                        paramCollectionlist.add(paramCollectionParam);
+                    }
                 }
+                paramCollectionService.saveBatch(paramCollectionlist);
             }
         }
 
         logger.info("handleInfo END锛�");
     }
-
 }
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP030BCallback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP030BCallback.java
index aa6159c..8ba8fb3 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP030BCallback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP030BCallback.java
@@ -176,7 +176,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -207,42 +209,5 @@
         }
     }
 
-    //PC璇诲弬鏁颁俊鎭�
-    public void handleInfo() throws Exception {
-        logger.info("handleInfo START锛�");
-
-        if(null == list){
-            CollectionParamConfParam collectionParamConfParam = new CollectionParamConfParam();
-            collectionParamConfParam.setLocationCode(LOCATION_CODE);
-            list = collectionParamConfService.findListBySpec(collectionParamConfParam);
-        }
-        if(null != list && !list.isEmpty()) {
-            for (int i = 0; i < list.size(); i++) {
-                CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
-                }
-            }
-        }
-
-        logger.info("handleInfo END锛�");
-    }
 
 }
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP030Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP030Callback.java
index ffff1f3..a010e8b 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP030Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP030Callback.java
@@ -177,7 +177,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -208,42 +210,5 @@
         }
     }
 
-    //PC璇诲弬鏁颁俊鎭�
-    public void handleInfo() throws Exception {
-        logger.info("handleInfo START锛�");
-
-        if(null == list){
-            CollectionParamConfParam collectionParamConfParam = new CollectionParamConfParam();
-            collectionParamConfParam.setLocationCode(LOCATION_CODE);
-            list = collectionParamConfService.findListBySpec(collectionParamConfParam);
-        }
-        if(null != list && !list.isEmpty()) {
-            for (int i = 0; i < list.size(); i++) {
-                CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
-                }
-            }
-        }
-
-        logger.info("handleInfo END锛�");
-    }
 
 }
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP040BCallback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP040BCallback.java
index e60a7a9..b22e468 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP040BCallback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP040BCallback.java
@@ -207,42 +207,6 @@
         }
     }
 
-    //PC璇诲弬鏁颁俊鎭�
-    public void handleInfo() throws Exception {
-        logger.info("handleInfo START锛�");
 
-        if(null == list){
-            CollectionParamConfParam collectionParamConfParam = new CollectionParamConfParam();
-            collectionParamConfParam.setLocationCode(LOCATION_CODE);
-            list = collectionParamConfService.findListBySpec(collectionParamConfParam);
-        }
-        if(null != list && !list.isEmpty()) {
-            for (int i = 0; i < list.size(); i++) {
-                CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
-                }
-            }
-        }
-
-        logger.info("handleInfo END锛�");
-    }
 
 }
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP040Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP040Callback.java
index 5d8bb4a..19278d1 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP040Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/BOP040Callback.java
@@ -177,7 +177,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -208,42 +210,5 @@
         }
     }
 
-    //PC璇诲弬鏁颁俊鎭�
-    public void handleInfo() throws Exception {
-        logger.info("handleInfo START锛�");
-
-        if(null == list){
-            CollectionParamConfParam collectionParamConfParam = new CollectionParamConfParam();
-            collectionParamConfParam.setLocationCode(LOCATION_CODE);
-            list = collectionParamConfService.findListBySpec(collectionParamConfParam);
-        }
-        if(null != list && !list.isEmpty()) {
-            for (int i = 0; i < list.size(); i++) {
-                CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
-                }
-            }
-        }
-
-        logger.info("handleInfo END锛�");
-    }
 
 }
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/COP010Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/COP010Callback.java
index 1127578..eb743a3 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/COP010Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/COP010Callback.java
@@ -34,7 +34,6 @@
 import cn.stylefeng.guns.modular.sc.serialNumbersConf.service.SerialNumbersConfService;
 import cn.stylefeng.guns.plcserver.opc.GlobalVariable;
 import cn.stylefeng.guns.plcserver.opc.OPCElement;
-import cn.stylefeng.guns.plcserver.opc.unit.OPCUnit;
 import cn.stylefeng.guns.plcserver.opc.unit.SFCCodeTool;
 import cn.stylefeng.guns.plcserver.tool.DateTool;
 import cn.stylefeng.guns.plcserver.tool.LogUtil;
@@ -190,7 +189,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -221,43 +222,7 @@
         }
     }
 
-    //PC璇诲弬鏁颁俊鎭�
-    public void handleInfo() throws Exception {
-        logger.info("handleInfo START锛�");
 
-        if(null == list){
-            CollectionParamConfParam collectionParamConfParam = new CollectionParamConfParam();
-            collectionParamConfParam.setLocationCode(LOCATION_CODE);
-            list = collectionParamConfService.findListBySpec(collectionParamConfParam);
-        }
-        if(null != list && !list.isEmpty()) {
-            for (int i = 0; i < list.size(); i++) {
-                CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
-                }
-            }
-        }
-
-        logger.info("handleInfo END锛�");
-    }
     public void handleRepair() throws Exception{
         RepairManageInfoParam repairManageInfoParam = new RepairManageInfoParam();
         repairManageInfoParam.setLocationCode(LOCATION_CODE);
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/COP020Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/COP020Callback.java
index 76cbbb2..60d60e1 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/COP020Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/COP020Callback.java
@@ -1,11 +1,14 @@
 package cn.stylefeng.guns.plcserver.callback;
 
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.params.CollectionParamConfParam;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.result.CollectionParamConfResult;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.service.CollectionParamConfService;
 import cn.stylefeng.guns.modular.bs.equipmentInfo.service.EquipmentInfoService;
 import cn.stylefeng.guns.modular.bs.locationInfo.service.LocationInfoService;
+import cn.stylefeng.guns.modular.cm.paramCollection.entity.ParamCollection;
 import cn.stylefeng.guns.modular.cm.paramCollection.model.params.ParamCollectionParam;
 import cn.stylefeng.guns.modular.cm.paramCollection.service.ParamCollectionService;
 import cn.stylefeng.guns.modular.cm.passingStationCollection.model.params.PassingStationCollectionParam;
@@ -91,7 +94,7 @@
     private static String PRODUCTION_LINE  = "COP";//浜х嚎鍙�
     private static String LOCATION_CODE  = "COP020";//宸ヤ綅鍙�
     private static List list = null;
-
+    private static String PRODUCT_STATE = "鍚堟牸";
     public COP020Callback(MiloService miloService,
                           ProductionOrdeInfoService productionOrdeInfoService,
                           PassingStationCollectionService passingStationCollectionService,
@@ -160,6 +163,9 @@
         String S_PRODUCT_STATE_CODE = miloService.
                 readFromOpcUa(OPCElement.COP020_S_PRODUCT_STATE_CODE)
                 .getValue().toString();
+        if("2".equals(S_PRODUCT_STATE_CODE)){
+            PRODUCT_STATE = "涓嶅悎鏍�";
+        }
         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.COP020_J_PC_FINISH,true);
         miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
         //澶勭悊杩囩珯淇℃伅
@@ -179,7 +185,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -220,32 +228,57 @@
             list = collectionParamConfService.findListBySpec(collectionParamConfParam);
         }
         if(null != list && !list.isEmpty()) {
+
+            List<String> nodeIdList = new ArrayList<>();
             for (int i = 0; i < list.size(); i++) {
                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
+                nodeIdList.add(result.getGatherAddress());
+            }
+
+            List<ReadWriteEntity> readWriteEntityList = new ArrayList<>();
+            if(CollUtil.isNotEmpty(nodeIdList)){
+                readWriteEntityList = miloService.readFromOpcUa(nodeIdList);
+            }
+
+            List<ParamCollection> paramCollectionlist = new ArrayList<>();
+            if (CollUtil.isNotEmpty(nodeIdList)){
+                for(int i=0;i<nodeIdList.size();i++){
+                    if(ObjectUtil.isNotEmpty(readWriteEntityList.get(i).getValue())){
+                        CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
+
+                        String value = "0";
+                        if (readWriteEntityList.get(i).getValue() != null){
+                            value = readWriteEntityList.get(i).getValue().toString();
+                        }
+                        if(result.getParamName() != null && result.getParamName().contains("鐘舵��")){
+                            if("2".equals(value)){
+                                value = "涓嶅悎鏍�";
+                            }else {
+                                value = "鍚堟牸";
+                            }
+                        }
+                        ParamCollection paramCollectionParam = new ParamCollection();
+                        paramCollectionParam.setParamCode(result.getParamCode());
+                        paramCollectionParam.setParamName(result.getParamName());
+                        paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
+                        paramCollectionParam.setSfcCode(S_SFC_CODE);
+                        paramCollectionParam.setProductCode(S_PRODUCT_CODE);
+                        paramCollectionParam.setProductionLine(result.getProductionLine());
+                        paramCollectionParam.setLocationCode(result.getLocationCode());
+                        paramCollectionParam.setParamValue(value.toString());
+                        paramCollectionParam.setParamLower(result.getParamLower());
+                        paramCollectionParam.setParamUpper(result.getParamUpper());
+                        paramCollectionParam.setParamStandard(result.getParamCentral());
+                        paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
+                        paramCollectionParam.setUnit(result.getUnit());
+                        paramCollectionParam.setSpareField2(PRODUCT_STATE);
+                        paramCollectionlist.add(paramCollectionParam);
+                    }
                 }
+                paramCollectionService.saveBatch(paramCollectionlist);
             }
         }
 
         logger.info("handleInfo END锛�");
     }
-
 }
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/COP030Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/COP030Callback.java
index 766a7e0..bb7f8b4 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/COP030Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/COP030Callback.java
@@ -1,11 +1,14 @@
 package cn.stylefeng.guns.plcserver.callback;
 
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.params.CollectionParamConfParam;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.result.CollectionParamConfResult;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.service.CollectionParamConfService;
 import cn.stylefeng.guns.modular.bs.equipmentInfo.service.EquipmentInfoService;
 import cn.stylefeng.guns.modular.bs.locationInfo.service.LocationInfoService;
+import cn.stylefeng.guns.modular.cm.paramCollection.entity.ParamCollection;
 import cn.stylefeng.guns.modular.cm.paramCollection.model.params.ParamCollectionParam;
 import cn.stylefeng.guns.modular.cm.paramCollection.service.ParamCollectionService;
 import cn.stylefeng.guns.modular.cm.passingStationCollection.model.params.PassingStationCollectionParam;
@@ -91,7 +94,7 @@
     private static String PRODUCTION_LINE  = "COP";//浜х嚎鍙�
     private static String LOCATION_CODE  = "COP030";//宸ヤ綅鍙�
     private static List list = null;
-
+    private static String PRODUCT_STATE = "鍚堟牸";
     public COP030Callback(MiloService miloService,
                            ProductionOrdeInfoService productionOrdeInfoService,
                            PassingStationCollectionService passingStationCollectionService,
@@ -160,6 +163,9 @@
         String S_PRODUCT_STATE_CODE = miloService.
                 readFromOpcUa(OPCElement.COP030_S_PRODUCT_STATE_CODE)
                 .getValue().toString();
+        if("2".equals(S_PRODUCT_STATE_CODE)){
+            PRODUCT_STATE = "涓嶅悎鏍�";
+        }
         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.COP030_J_PC_FINISH,true);
         miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
         //澶勭悊杩囩珯淇℃伅
@@ -179,7 +185,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -220,28 +228,54 @@
             list = collectionParamConfService.findListBySpec(collectionParamConfParam);
         }
         if(null != list && !list.isEmpty()) {
+
+            List<String> nodeIdList = new ArrayList<>();
             for (int i = 0; i < list.size(); i++) {
                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
+                nodeIdList.add(result.getGatherAddress());
+            }
+
+            List<ReadWriteEntity> readWriteEntityList = new ArrayList<>();
+            if(CollUtil.isNotEmpty(nodeIdList)){
+                readWriteEntityList = miloService.readFromOpcUa(nodeIdList);
+            }
+
+            List<ParamCollection> paramCollectionlist = new ArrayList<>();
+            if (CollUtil.isNotEmpty(nodeIdList)){
+                for(int i=0;i<nodeIdList.size();i++){
+                    if(ObjectUtil.isNotEmpty(readWriteEntityList.get(i).getValue())){
+                        CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
+
+                        String value = "0";
+                        if (readWriteEntityList.get(i).getValue() != null){
+                            value = readWriteEntityList.get(i).getValue().toString();
+                        }
+                        if(result.getParamName() != null && result.getParamName().contains("鐘舵��")){
+                            if("2".equals(value)){
+                                value = "涓嶅悎鏍�";
+                            }else {
+                                value = "鍚堟牸";
+                            }
+                        }
+                        ParamCollection paramCollectionParam = new ParamCollection();
+                        paramCollectionParam.setParamCode(result.getParamCode());
+                        paramCollectionParam.setParamName(result.getParamName());
+                        paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
+                        paramCollectionParam.setSfcCode(S_SFC_CODE);
+                        paramCollectionParam.setProductCode(S_PRODUCT_CODE);
+                        paramCollectionParam.setProductionLine(result.getProductionLine());
+                        paramCollectionParam.setLocationCode(result.getLocationCode());
+                        paramCollectionParam.setParamValue(value.toString());
+                        paramCollectionParam.setParamLower(result.getParamLower());
+                        paramCollectionParam.setParamUpper(result.getParamUpper());
+                        paramCollectionParam.setParamStandard(result.getParamCentral());
+                        paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
+                        paramCollectionParam.setUnit(result.getUnit());
+                        paramCollectionParam.setSpareField2(PRODUCT_STATE);
+                        paramCollectionlist.add(paramCollectionParam);
+                    }
                 }
+                paramCollectionService.saveBatch(paramCollectionlist);
             }
         }
 
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/DOP010Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/DOP010Callback.java
index 76a0729..c08977d 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/DOP010Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/DOP010Callback.java
@@ -30,7 +30,6 @@
 import cn.stylefeng.guns.modular.sc.serialNumbersConf.service.SerialNumbersConfService;
 import cn.stylefeng.guns.plcserver.opc.GlobalVariable;
 import cn.stylefeng.guns.plcserver.opc.OPCElement;
-import cn.stylefeng.guns.plcserver.opc.unit.OPCUnit;
 import cn.stylefeng.guns.plcserver.tool.DateTool;
 import cn.stylefeng.guns.plcserver.tool.LogUtil;
 import com.kangaroohy.milo.model.ReadWriteEntity;
@@ -183,7 +182,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -214,43 +215,7 @@
         }
     }
 
-    //PC璇诲弬鏁颁俊鎭�
-    public void handleInfo() throws Exception {
-        logger.info("handleInfo START锛�");
 
-        if(null == list){
-            CollectionParamConfParam collectionParamConfParam = new CollectionParamConfParam();
-            collectionParamConfParam.setLocationCode(LOCATION_CODE);
-            list = collectionParamConfService.findListBySpec(collectionParamConfParam);
-        }
-        if(null != list && !list.isEmpty()) {
-            for (int i = 0; i < list.size(); i++) {
-                CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
-                }
-            }
-        }
-
-        logger.info("handleInfo END锛�");
-    }
     public void handleRepair() throws Exception{
         RepairManageInfoParam repairManageInfoParam = new RepairManageInfoParam();
         repairManageInfoParam.setLocationCode(LOCATION_CODE);
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/DOP020Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/DOP020Callback.java
index 1360bf9..77b654f 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/DOP020Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/DOP020Callback.java
@@ -1,11 +1,14 @@
 package cn.stylefeng.guns.plcserver.callback;
 
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.params.CollectionParamConfParam;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.result.CollectionParamConfResult;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.service.CollectionParamConfService;
 import cn.stylefeng.guns.modular.bs.equipmentInfo.service.EquipmentInfoService;
 import cn.stylefeng.guns.modular.bs.locationInfo.service.LocationInfoService;
+import cn.stylefeng.guns.modular.cm.paramCollection.entity.ParamCollection;
 import cn.stylefeng.guns.modular.cm.paramCollection.model.params.ParamCollectionParam;
 import cn.stylefeng.guns.modular.cm.paramCollection.service.ParamCollectionService;
 import cn.stylefeng.guns.modular.cm.passingStationCollection.model.params.PassingStationCollectionParam;
@@ -177,7 +180,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -218,32 +223,49 @@
             list = collectionParamConfService.findListBySpec(collectionParamConfParam);
         }
         if(null != list && !list.isEmpty()) {
+
+            List<String> nodeIdList = new ArrayList<>();
             for (int i = 0; i < list.size(); i++) {
                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
+                nodeIdList.add(result.getGatherAddress());
+            }
+
+            List<ReadWriteEntity> readWriteEntityList = new ArrayList<>();
+            if(CollUtil.isNotEmpty(nodeIdList)){
+                readWriteEntityList = miloService.readFromOpcUa(nodeIdList);
+            }
+
+            List<ParamCollection> paramCollectionlist = new ArrayList<>();
+            if (CollUtil.isNotEmpty(nodeIdList)){
+                for(int i=0;i<nodeIdList.size();i++){
+                    if(ObjectUtil.isNotEmpty(readWriteEntityList.get(i).getValue())){
+                        CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
+
+                        String value = "0";
+                        if (readWriteEntityList.get(i).getValue() != null){
+                            value = readWriteEntityList.get(i).getValue().toString();
+                        }
+                        ParamCollection paramCollectionParam = new ParamCollection();
+                        paramCollectionParam.setParamCode(result.getParamCode());
+                        paramCollectionParam.setParamName(result.getParamName());
+                        paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
+                        paramCollectionParam.setSfcCode(S_SFC_CODE);
+                        paramCollectionParam.setProductCode(S_PRODUCT_CODE);
+                        paramCollectionParam.setProductionLine(result.getProductionLine());
+                        paramCollectionParam.setLocationCode(result.getLocationCode());
+                        paramCollectionParam.setParamValue(value.toString());
+                        paramCollectionParam.setParamLower(result.getParamLower());
+                        paramCollectionParam.setParamUpper(result.getParamUpper());
+                        paramCollectionParam.setParamStandard(result.getParamCentral());
+                        paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
+                        paramCollectionParam.setUnit(result.getUnit());
+                        paramCollectionlist.add(paramCollectionParam);
+                    }
                 }
+                paramCollectionService.saveBatch(paramCollectionlist);
             }
         }
 
         logger.info("handleInfo END锛�");
     }
-
 }
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP010Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP010Callback.java
index 5ff95b4..7b6caf2 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP010Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP010Callback.java
@@ -24,7 +24,6 @@
 import cn.stylefeng.guns.modular.sc.serialNumbersConf.service.SerialNumbersConfService;
 import cn.stylefeng.guns.plcserver.opc.GlobalVariable;
 import cn.stylefeng.guns.plcserver.opc.OPCElement;
-import cn.stylefeng.guns.plcserver.opc.unit.OPCUnit;
 import cn.stylefeng.guns.plcserver.tool.DateTool;
 import cn.stylefeng.guns.plcserver.tool.LogUtil;
 import com.kangaroohy.milo.model.ReadWriteEntity;
@@ -178,6 +177,9 @@
 
 
     public void handleMaterial() throws Exception{
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         String materialCode = miloService.
                 readFromOpcUa(OPCElement.EOP010_S_MATERIAL_CODE)
                 .getValue().toString();
@@ -214,43 +216,6 @@
             }
         }
 
-    }
-    //PC璇诲弬鏁颁俊鎭�
-    public void handleInfo() throws Exception {
-        logger.info("handleInfo START锛�");
-
-        if(null == list){
-            CollectionParamConfParam collectionParamConfParam = new CollectionParamConfParam();
-            collectionParamConfParam.setLocationCode(LOCATION_CODE);
-            list = collectionParamConfService.findListBySpec(collectionParamConfParam);
-        }
-        if(null != list && !list.isEmpty()) {
-            for (int i = 0; i < list.size(); i++) {
-                CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
-                }
-            }
-        }
-
-        logger.info("handleInfo END锛�");
     }
 
 }
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP020Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP020Callback.java
index ceee4f1..2f39f3a 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP020Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP020Callback.java
@@ -176,7 +176,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -207,42 +209,6 @@
         }
     }
 
-    //PC璇诲弬鏁颁俊鎭�
-    public void handleInfo() throws Exception {
-        logger.info("handleInfo START锛�");
 
-        if(null == list){
-            CollectionParamConfParam collectionParamConfParam = new CollectionParamConfParam();
-            collectionParamConfParam.setLocationCode(LOCATION_CODE);
-            list = collectionParamConfService.findListBySpec(collectionParamConfParam);
-        }
-        if(null != list && !list.isEmpty()) {
-            for (int i = 0; i < list.size(); i++) {
-                CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
-                }
-            }
-        }
-
-        logger.info("handleInfo END锛�");
-    }
 
 }
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP030Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP030Callback.java
index 22c9113..be126da 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP030Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP030Callback.java
@@ -177,7 +177,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -208,42 +210,6 @@
         }
     }
 
-    //PC璇诲弬鏁颁俊鎭�
-    public void handleInfo() throws Exception {
-        logger.info("handleInfo START锛�");
 
-        if(null == list){
-            CollectionParamConfParam collectionParamConfParam = new CollectionParamConfParam();
-            collectionParamConfParam.setLocationCode(LOCATION_CODE);
-            list = collectionParamConfService.findListBySpec(collectionParamConfParam);
-        }
-        if(null != list && !list.isEmpty()) {
-            for (int i = 0; i < list.size(); i++) {
-                CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
-                }
-            }
-        }
-
-        logger.info("handleInfo END锛�");
-    }
 
 }
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP040Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP040Callback.java
index fad0206..fd09613 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP040Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP040Callback.java
@@ -1,11 +1,14 @@
 package cn.stylefeng.guns.plcserver.callback;
 
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.params.CollectionParamConfParam;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.result.CollectionParamConfResult;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.service.CollectionParamConfService;
 import cn.stylefeng.guns.modular.bs.equipmentInfo.service.EquipmentInfoService;
 import cn.stylefeng.guns.modular.bs.locationInfo.service.LocationInfoService;
+import cn.stylefeng.guns.modular.cm.paramCollection.entity.ParamCollection;
 import cn.stylefeng.guns.modular.cm.paramCollection.model.params.ParamCollectionParam;
 import cn.stylefeng.guns.modular.cm.paramCollection.service.ParamCollectionService;
 import cn.stylefeng.guns.modular.cm.passingStationCollection.model.params.PassingStationCollectionParam;
@@ -89,7 +92,7 @@
     private static String PRODUCTION_LINE  = "EOP";//浜х嚎鍙�
     private static String LOCATION_CODE  = "EOP040";//宸ヤ綅鍙�
     private static List list = null;
-
+    private static String PRODUCT_STATE = "鍚堟牸";
     public EOP040Callback(MiloService miloService,
                           ProductionOrdeInfoService productionOrdeInfoService,
                           PassingStationCollectionService passingStationCollectionService,
@@ -157,7 +160,9 @@
         String S_PRODUCT_STATE_CODE = miloService.
                 readFromOpcUa(OPCElement.EOP040_S_PRODUCT_STATE_CODE)
                 .getValue().toString();
-
+        if("2".equals(S_PRODUCT_STATE_CODE)){
+            PRODUCT_STATE = "涓嶅悎鏍�";
+        }
         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.EOP040_J_PC_FINISH,true);
         miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
         //澶勭悊杩囩珯淇℃伅
@@ -176,7 +181,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -217,28 +224,54 @@
             list = collectionParamConfService.findListBySpec(collectionParamConfParam);
         }
         if(null != list && !list.isEmpty()) {
+
+            List<String> nodeIdList = new ArrayList<>();
             for (int i = 0; i < list.size(); i++) {
                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
+                nodeIdList.add(result.getGatherAddress());
+            }
+
+            List<ReadWriteEntity> readWriteEntityList = new ArrayList<>();
+            if(CollUtil.isNotEmpty(nodeIdList)){
+                readWriteEntityList = miloService.readFromOpcUa(nodeIdList);
+            }
+
+            List<ParamCollection> paramCollectionlist = new ArrayList<>();
+            if (CollUtil.isNotEmpty(nodeIdList)){
+                for(int i=0;i<nodeIdList.size();i++){
+                    if(ObjectUtil.isNotEmpty(readWriteEntityList.get(i).getValue())){
+                        CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
+
+                        String value = "0";
+                        if (readWriteEntityList.get(i).getValue() != null){
+                            value = readWriteEntityList.get(i).getValue().toString();
+                        }
+                        if(result.getParamName() != null && result.getParamName().contains("鐘舵��")){
+                            if("2".equals(value)){
+                                value = "涓嶅悎鏍�";
+                            }else {
+                                value = "鍚堟牸";
+                            }
+                        }
+                        ParamCollection paramCollectionParam = new ParamCollection();
+                        paramCollectionParam.setParamCode(result.getParamCode());
+                        paramCollectionParam.setParamName(result.getParamName());
+                        paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
+                        paramCollectionParam.setSfcCode(S_SFC_CODE);
+                        paramCollectionParam.setProductCode(S_PRODUCT_CODE);
+                        paramCollectionParam.setProductionLine(result.getProductionLine());
+                        paramCollectionParam.setLocationCode(result.getLocationCode());
+                        paramCollectionParam.setParamValue(value.toString());
+                        paramCollectionParam.setParamLower(result.getParamLower());
+                        paramCollectionParam.setParamUpper(result.getParamUpper());
+                        paramCollectionParam.setParamStandard(result.getParamCentral());
+                        paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
+                        paramCollectionParam.setUnit(result.getUnit());
+                        paramCollectionParam.setSpareField2(PRODUCT_STATE);
+                        paramCollectionlist.add(paramCollectionParam);
+                    }
                 }
+                paramCollectionService.saveBatch(paramCollectionlist);
             }
         }
 
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP050Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP050Callback.java
index 6046859..cb7b5f4 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP050Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP050Callback.java
@@ -1,11 +1,14 @@
 package cn.stylefeng.guns.plcserver.callback;
 
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.params.CollectionParamConfParam;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.result.CollectionParamConfResult;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.service.CollectionParamConfService;
 import cn.stylefeng.guns.modular.bs.equipmentInfo.service.EquipmentInfoService;
 import cn.stylefeng.guns.modular.bs.locationInfo.service.LocationInfoService;
+import cn.stylefeng.guns.modular.cm.paramCollection.entity.ParamCollection;
 import cn.stylefeng.guns.modular.cm.paramCollection.model.params.ParamCollectionParam;
 import cn.stylefeng.guns.modular.cm.paramCollection.service.ParamCollectionService;
 import cn.stylefeng.guns.modular.cm.passingStationCollection.model.params.PassingStationCollectionParam;
@@ -89,7 +92,7 @@
     private static String PRODUCTION_LINE  = "EOP";//浜х嚎鍙�
     private static String LOCATION_CODE  = "EOP050";//宸ヤ綅鍙�
     private static List list = null;
-
+    private static String PRODUCT_STATE = "鍚堟牸";
     public EOP050Callback(MiloService miloService,
                           ProductionOrdeInfoService productionOrdeInfoService,
                           PassingStationCollectionService passingStationCollectionService,
@@ -158,6 +161,9 @@
         String S_PRODUCT_STATE_CODE = miloService.
                 readFromOpcUa(OPCElement.EOP050_S_PRODUCT_STATE_CODE)
                 .getValue().toString();
+        if("2".equals(S_PRODUCT_STATE_CODE)){
+            PRODUCT_STATE = "涓嶅悎鏍�";
+        }
         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.EOP050_J_PC_FINISH,true);
         miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
         //澶勭悊杩囩珯淇℃伅
@@ -177,7 +183,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -218,28 +226,54 @@
             list = collectionParamConfService.findListBySpec(collectionParamConfParam);
         }
         if(null != list && !list.isEmpty()) {
+
+            List<String> nodeIdList = new ArrayList<>();
             for (int i = 0; i < list.size(); i++) {
                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
+                nodeIdList.add(result.getGatherAddress());
+            }
+
+            List<ReadWriteEntity> readWriteEntityList = new ArrayList<>();
+            if(CollUtil.isNotEmpty(nodeIdList)){
+                readWriteEntityList = miloService.readFromOpcUa(nodeIdList);
+            }
+
+            List<ParamCollection> paramCollectionlist = new ArrayList<>();
+            if (CollUtil.isNotEmpty(nodeIdList)){
+                for(int i=0;i<nodeIdList.size();i++){
+                    if(ObjectUtil.isNotEmpty(readWriteEntityList.get(i).getValue())){
+                        CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
+
+                        String value = "0";
+                        if (readWriteEntityList.get(i).getValue() != null){
+                            value = readWriteEntityList.get(i).getValue().toString();
+                        }
+                        if(result.getParamName() != null && result.getParamName().contains("鐘舵��")){
+                            if("2".equals(value)){
+                                value = "涓嶅悎鏍�";
+                            }else {
+                                value = "鍚堟牸";
+                            }
+                        }
+                        ParamCollection paramCollectionParam = new ParamCollection();
+                        paramCollectionParam.setParamCode(result.getParamCode());
+                        paramCollectionParam.setParamName(result.getParamName());
+                        paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
+                        paramCollectionParam.setSfcCode(S_SFC_CODE);
+                        paramCollectionParam.setProductCode(S_PRODUCT_CODE);
+                        paramCollectionParam.setProductionLine(result.getProductionLine());
+                        paramCollectionParam.setLocationCode(result.getLocationCode());
+                        paramCollectionParam.setParamValue(value.toString());
+                        paramCollectionParam.setParamLower(result.getParamLower());
+                        paramCollectionParam.setParamUpper(result.getParamUpper());
+                        paramCollectionParam.setParamStandard(result.getParamCentral());
+                        paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
+                        paramCollectionParam.setUnit(result.getUnit());
+                        paramCollectionParam.setSpareField2(PRODUCT_STATE);
+                        paramCollectionlist.add(paramCollectionParam);
+                    }
                 }
+                paramCollectionService.saveBatch(paramCollectionlist);
             }
         }
 
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP060Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP060Callback.java
index 45a6f17..3419d06 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP060Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP060Callback.java
@@ -1,11 +1,14 @@
 package cn.stylefeng.guns.plcserver.callback;
 
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.params.CollectionParamConfParam;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.result.CollectionParamConfResult;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.service.CollectionParamConfService;
 import cn.stylefeng.guns.modular.bs.equipmentInfo.service.EquipmentInfoService;
 import cn.stylefeng.guns.modular.bs.locationInfo.service.LocationInfoService;
+import cn.stylefeng.guns.modular.cm.paramCollection.entity.ParamCollection;
 import cn.stylefeng.guns.modular.cm.paramCollection.model.params.ParamCollectionParam;
 import cn.stylefeng.guns.modular.cm.paramCollection.service.ParamCollectionService;
 import cn.stylefeng.guns.modular.cm.passingStationCollection.model.params.PassingStationCollectionParam;
@@ -177,7 +180,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -218,32 +223,56 @@
             list = collectionParamConfService.findListBySpec(collectionParamConfParam);
         }
         if(null != list && !list.isEmpty()) {
+
+            List<String> nodeIdList = new ArrayList<>();
             for (int i = 0; i < list.size(); i++) {
                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
+                nodeIdList.add(result.getGatherAddress());
+            }
+
+            List<ReadWriteEntity> readWriteEntityList = new ArrayList<>();
+            if(CollUtil.isNotEmpty(nodeIdList)){
+                readWriteEntityList = miloService.readFromOpcUa(nodeIdList);
+            }
+
+            List<ParamCollection> paramCollectionlist = new ArrayList<>();
+            if (CollUtil.isNotEmpty(nodeIdList)){
+                for(int i=0;i<nodeIdList.size();i++){
+                    if(ObjectUtil.isNotEmpty(readWriteEntityList.get(i).getValue())){
+                        CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
+
+                        String value = "0";
+                        if (readWriteEntityList.get(i).getValue() != null){
+                            value = readWriteEntityList.get(i).getValue().toString();
+                        }
+                        if(result.getParamName() != null && result.getParamName().contains("鐘舵��")){
+                            if("2".equals(value)){
+                                value = "涓嶅悎鏍�";
+                            }else {
+                                value = "鍚堟牸";
+                            }
+                        }
+                        ParamCollection paramCollectionParam = new ParamCollection();
+                        paramCollectionParam.setParamCode(result.getParamCode());
+                        paramCollectionParam.setParamName(result.getParamName());
+                        paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
+                        paramCollectionParam.setSfcCode(S_SFC_CODE);
+                        paramCollectionParam.setProductCode(S_PRODUCT_CODE);
+                        paramCollectionParam.setProductionLine(result.getProductionLine());
+                        paramCollectionParam.setLocationCode(result.getLocationCode());
+                        paramCollectionParam.setParamValue(value.toString());
+                        paramCollectionParam.setParamLower(result.getParamLower());
+                        paramCollectionParam.setParamUpper(result.getParamUpper());
+                        paramCollectionParam.setParamStandard(result.getParamCentral());
+                        paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
+                        paramCollectionParam.setUnit(result.getUnit());
+                        paramCollectionlist.add(paramCollectionParam);
+                    }
                 }
+                paramCollectionService.saveBatch(paramCollectionlist);
             }
         }
 
         logger.info("handleInfo END锛�");
     }
-
 }
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP070Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP070Callback.java
index 1c4af44..b5c025e 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP070Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP070Callback.java
@@ -176,7 +176,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -207,42 +209,5 @@
         }
     }
 
-    //PC璇诲弬鏁颁俊鎭�
-    public void handleInfo() throws Exception {
-        logger.info("handleInfo START锛�");
-
-        if(null == list){
-            CollectionParamConfParam collectionParamConfParam = new CollectionParamConfParam();
-            collectionParamConfParam.setLocationCode(LOCATION_CODE);
-            list = collectionParamConfService.findListBySpec(collectionParamConfParam);
-        }
-        if(null != list && !list.isEmpty()) {
-            for (int i = 0; i < list.size(); i++) {
-                CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
-                }
-            }
-        }
-
-        logger.info("handleInfo END锛�");
-    }
 
 }
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP080Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP080Callback.java
index 092a84f..46e6d53 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP080Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP080Callback.java
@@ -1,11 +1,14 @@
 package cn.stylefeng.guns.plcserver.callback;
 
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.params.CollectionParamConfParam;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.result.CollectionParamConfResult;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.service.CollectionParamConfService;
 import cn.stylefeng.guns.modular.bs.equipmentInfo.service.EquipmentInfoService;
 import cn.stylefeng.guns.modular.bs.locationInfo.service.LocationInfoService;
+import cn.stylefeng.guns.modular.cm.paramCollection.entity.ParamCollection;
 import cn.stylefeng.guns.modular.cm.paramCollection.model.params.ParamCollectionParam;
 import cn.stylefeng.guns.modular.cm.paramCollection.service.ParamCollectionService;
 import cn.stylefeng.guns.modular.cm.passingStationCollection.model.params.PassingStationCollectionParam;
@@ -89,7 +92,7 @@
     private static String PRODUCTION_LINE  = "EOP";//浜х嚎鍙�
     private static String LOCATION_CODE  = "EOP080";//宸ヤ綅鍙�
     private static List list = null;
-
+    private static String PRODUCT_STATE = "鍚堟牸";
     public EOP080Callback(MiloService miloService,
                           ProductionOrdeInfoService productionOrdeInfoService,
                           PassingStationCollectionService passingStationCollectionService,
@@ -158,7 +161,9 @@
         String S_PRODUCT_STATE_CODE = miloService.
                 readFromOpcUa(OPCElement.EOP080_S_PRODUCT_STATE_CODE)
                 .getValue().toString();
-
+        if("2".equals(S_PRODUCT_STATE_CODE)){
+            PRODUCT_STATE = "涓嶅悎鏍�";
+        }
         //澶勭悊杩囩珯淇℃伅
         PassingStationCollectionParam param = new PassingStationCollectionParam();
         param.setWorkOrderNo(S_ORDER_CODE);
@@ -177,7 +182,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -218,32 +225,57 @@
             list = collectionParamConfService.findListBySpec(collectionParamConfParam);
         }
         if(null != list && !list.isEmpty()) {
+
+            List<String> nodeIdList = new ArrayList<>();
             for (int i = 0; i < list.size(); i++) {
                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
+                nodeIdList.add(result.getGatherAddress());
+            }
+
+            List<ReadWriteEntity> readWriteEntityList = new ArrayList<>();
+            if(CollUtil.isNotEmpty(nodeIdList)){
+                readWriteEntityList = miloService.readFromOpcUa(nodeIdList);
+            }
+
+            List<ParamCollection> paramCollectionlist = new ArrayList<>();
+            if (CollUtil.isNotEmpty(nodeIdList)){
+                for(int i=0;i<nodeIdList.size();i++){
+                    if(ObjectUtil.isNotEmpty(readWriteEntityList.get(i).getValue())){
+                        CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
+
+                        String value = "0";
+                        if (readWriteEntityList.get(i).getValue() != null){
+                            value = readWriteEntityList.get(i).getValue().toString();
+                        }
+                        if(result.getParamName() != null && result.getParamName().contains("鐘舵��")){
+                            if("2".equals(value)){
+                                value = "涓嶅悎鏍�";
+                            }else {
+                                value = "鍚堟牸";
+                            }
+                        }
+                        ParamCollection paramCollectionParam = new ParamCollection();
+                        paramCollectionParam.setParamCode(result.getParamCode());
+                        paramCollectionParam.setParamName(result.getParamName());
+                        paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
+                        paramCollectionParam.setSfcCode(S_SFC_CODE);
+                        paramCollectionParam.setProductCode(S_PRODUCT_CODE);
+                        paramCollectionParam.setProductionLine(result.getProductionLine());
+                        paramCollectionParam.setLocationCode(result.getLocationCode());
+                        paramCollectionParam.setParamValue(value.toString());
+                        paramCollectionParam.setParamLower(result.getParamLower());
+                        paramCollectionParam.setParamUpper(result.getParamUpper());
+                        paramCollectionParam.setParamStandard(result.getParamCentral());
+                        paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
+                        paramCollectionParam.setUnit(result.getUnit());
+                        paramCollectionParam.setSpareField2(PRODUCT_STATE);
+                        paramCollectionlist.add(paramCollectionParam);
+                    }
                 }
+                paramCollectionService.saveBatch(paramCollectionlist);
             }
         }
 
         logger.info("handleInfo END锛�");
     }
-
 }
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP090BCallback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP090BCallback.java
index 1e1454e..aa24ef8 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP090BCallback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP090BCallback.java
@@ -208,42 +208,5 @@
         }
     }
 
-    //PC璇诲弬鏁颁俊鎭�
-    public void handleInfo() throws Exception {
-        logger.info("handleInfo START锛�");
-
-        if(null == list){
-            CollectionParamConfParam collectionParamConfParam = new CollectionParamConfParam();
-            collectionParamConfParam.setLocationCode(LOCATION_CODE);
-            list = collectionParamConfService.findListBySpec(collectionParamConfParam);
-        }
-        if(null != list && !list.isEmpty()) {
-            for (int i = 0; i < list.size(); i++) {
-                CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
-                }
-            }
-        }
-
-        logger.info("handleInfo END锛�");
-    }
 
 }
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP090Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP090Callback.java
index c326420..023a709 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP090Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/EOP090Callback.java
@@ -177,7 +177,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -208,42 +210,5 @@
         }
     }
 
-    //PC璇诲弬鏁颁俊鎭�
-    public void handleInfo() throws Exception {
-        logger.info("handleInfo START锛�");
-
-        if(null == list){
-            CollectionParamConfParam collectionParamConfParam = new CollectionParamConfParam();
-            collectionParamConfParam.setLocationCode(LOCATION_CODE);
-            list = collectionParamConfService.findListBySpec(collectionParamConfParam);
-        }
-        if(null != list && !list.isEmpty()) {
-            for (int i = 0; i < list.size(); i++) {
-                CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
-                }
-            }
-        }
-
-        logger.info("handleInfo END锛�");
-    }
 
 }
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP010Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP010Callback.java
index c50401c..7f0937c 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP010Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP010Callback.java
@@ -34,7 +34,6 @@
 import cn.stylefeng.guns.modular.sc.serialNumbersConf.service.SerialNumbersConfService;
 import cn.stylefeng.guns.plcserver.opc.GlobalVariable;
 import cn.stylefeng.guns.plcserver.opc.OPCElement;
-import cn.stylefeng.guns.plcserver.opc.unit.OPCUnit;
 import cn.stylefeng.guns.plcserver.opc.unit.SFCCodeTool;
 import cn.stylefeng.guns.plcserver.tool.DateTool;
 import cn.stylefeng.guns.plcserver.tool.LogUtil;
@@ -201,7 +200,8 @@
             productionOrderRecordsParam.setProductNo(S_SFC_CODE);
             productionOrderRecordsParam.setMaterialCode(S_PRODUCT_CODE);
             productionOrderRecordsParam.setStartTime(DateTool.getLocalTimeForDate());
-            productionOrderRecordsParam.setWhetherPass("true");
+            productionOrderRecordsParam.setMaterialName(result.getMaterialName());
+            productionOrderRecordsParam.setWhetherPass("鍚堟牸");
             productionOrderRecordsService.add(productionOrderRecordsParam);
 
             List<ReadWriteEntity> lists = new ArrayList<>();
@@ -225,7 +225,7 @@
 
         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP010_J_PC_FINISH,true);
         miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
-       /* if("2".equals(S_PRODUCT_STATE_CODE)){
+        if("2".equals(S_PRODUCT_STATE_CODE)){
             ProductionOrderRecordsParam productionOrderRecordsParam = new ProductionOrderRecordsParam();
             productionOrderRecordsParam.setWorkOrderNo(S_ORDER_CODE);
             productionOrderRecordsParam.setProductNo(S_SFC_CODE);
@@ -233,10 +233,10 @@
             if(!list.isEmpty()){
                 ProductionOrderRecordsResult productionOrderRecordsResult = list.get(0);
                 productionOrderRecordsParam.setId(productionOrderRecordsResult.getId());
-                productionOrderRecordsParam.setWhetherPass(S_PRODUCT_STATE_CODE);
+                productionOrderRecordsParam.setWhetherPass("涓嶅悎鏍�");
                 productionOrderRecordsService.update(productionOrderRecordsParam);
             }
-        }*/
+        }
         //澶勭悊杩囩珯淇℃伅
         PassingStationCollectionParam param = new PassingStationCollectionParam();
         param.setWorkOrderNo(S_ORDER_CODE);
@@ -256,6 +256,9 @@
 
     public void handleMaterial() {
 
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -334,44 +337,6 @@
             }
 
         }
-    }
-
-    //PC璇诲弬鏁颁俊鎭�
-    public void handleInfo() throws Exception {
-        logger.info("handleInfo START锛�");
-
-        if(null == list){
-            CollectionParamConfParam collectionParamConfParam = new CollectionParamConfParam();
-            collectionParamConfParam.setLocationCode(LOCATION_CODE);
-            list = collectionParamConfService.findListBySpec(collectionParamConfParam);
-        }
-        if(null != list && !list.isEmpty()) {
-            for (int i = 0; i < list.size(); i++) {
-                CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
-                }
-            }
-        }
-
-        logger.info("handleInfo END锛�");
     }
 
 }
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP020Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP020Callback.java
index af84a4c..77431db 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP020Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP020Callback.java
@@ -1,11 +1,14 @@
 package cn.stylefeng.guns.plcserver.callback;
 
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.params.CollectionParamConfParam;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.result.CollectionParamConfResult;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.service.CollectionParamConfService;
 import cn.stylefeng.guns.modular.bs.equipmentInfo.service.EquipmentInfoService;
 import cn.stylefeng.guns.modular.bs.locationInfo.service.LocationInfoService;
+import cn.stylefeng.guns.modular.cm.paramCollection.entity.ParamCollection;
 import cn.stylefeng.guns.modular.cm.paramCollection.model.params.ParamCollectionParam;
 import cn.stylefeng.guns.modular.cm.paramCollection.service.ParamCollectionService;
 import cn.stylefeng.guns.modular.cm.passingStationCollection.model.params.PassingStationCollectionParam;
@@ -40,6 +43,7 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Component
 public class OP020Callback{
@@ -93,7 +97,7 @@
     private static String PRODUCTION_LINE  = "OP";//浜х嚎鍙�
     private static String LOCATION_CODE  = "OP020";//宸ヤ綅鍙�
     private static List list = null;
-
+    private static String PRODUCT_STATE = "鍚堟牸";
     public OP020Callback(MiloService miloService,
                          ProductionOrdeInfoService productionOrdeInfoService,
                          PassingStationCollectionService passingStationCollectionService,
@@ -162,11 +166,13 @@
         String S_PRODUCT_STATE_CODE = miloService.
                 readFromOpcUa(OPCElement.OP020_S_PRODUCT_STATE_CODE)
                 .getValue().toString();
-
+        if("2".equals(S_PRODUCT_STATE_CODE)){
+            PRODUCT_STATE = "涓嶅悎鏍�";
+        }
         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP020_J_PC_FINISH,true);
         miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
 
-       /* if("2".equals(S_PRODUCT_STATE_CODE)){
+        if("2".equals(S_PRODUCT_STATE_CODE)){
             ProductionOrderRecordsParam productionOrderRecordsParam = new ProductionOrderRecordsParam();
             productionOrderRecordsParam.setWorkOrderNo(S_ORDER_CODE);
             productionOrderRecordsParam.setProductNo(S_SFC_CODE);
@@ -174,10 +180,11 @@
             if(!list.isEmpty()){
                 ProductionOrderRecordsResult productionOrderRecordsResult = list.get(0);
                 productionOrderRecordsParam.setId(productionOrderRecordsResult.getId());
-                productionOrderRecordsParam.setWhetherPass(S_PRODUCT_STATE_CODE);
+                productionOrderRecordsParam.setWhetherPass("涓嶅悎鏍�");
+                productionOrderRecordsParam.setEndTime(DateTool.getLocalTimeForDate());
                 productionOrderRecordsService.update(productionOrderRecordsParam);
             }
-        }*/
+        }
         //澶勭悊杩囩珯淇℃伅
         PassingStationCollectionParam param = new PassingStationCollectionParam();
         param.setWorkOrderNo(S_ORDER_CODE);
@@ -195,7 +202,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -236,28 +245,55 @@
             list = collectionParamConfService.findListBySpec(collectionParamConfParam);
         }
         if(null != list && !list.isEmpty()) {
+
+            List<String> nodeIdList = new ArrayList<>();
             for (int i = 0; i < list.size(); i++) {
                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
+                nodeIdList.add(result.getGatherAddress());
+            }
+
+            List<ReadWriteEntity> readWriteEntityList = new ArrayList<>();
+            if(CollUtil.isNotEmpty(nodeIdList)){
+                readWriteEntityList = miloService.readFromOpcUa(nodeIdList);
+            }
+
+            List<ParamCollection> paramCollectionlist = new ArrayList<>();
+            if (CollUtil.isNotEmpty(nodeIdList)){
+                for(int i=0;i<nodeIdList.size();i++){
+                    if(ObjectUtil.isNotEmpty(readWriteEntityList.get(i).getValue())){
+                        CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
+                        String value = "0";
+                        if (readWriteEntityList.get(i).getValue() != null){
+                            value = readWriteEntityList.get(i).getValue().toString();
+                        }
+
+                        if(result.getParamName() != null && result.getParamName().contains("鐘舵��")){
+                            if("2".equals(value)){
+                                value = "涓嶅悎鏍�";
+                            }else {
+                                value = "鍚堟牸";
+                            }
+                        }
+
+                        ParamCollection paramCollectionParam = new ParamCollection();
+                        paramCollectionParam.setParamCode(result.getParamCode());
+                        paramCollectionParam.setParamName(result.getParamName());
+                        paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
+                        paramCollectionParam.setSfcCode(S_SFC_CODE);
+                        paramCollectionParam.setProductCode(S_PRODUCT_CODE);
+                        paramCollectionParam.setProductionLine(result.getProductionLine());
+                        paramCollectionParam.setLocationCode(result.getLocationCode());
+                        paramCollectionParam.setParamValue(value.toString());
+                        paramCollectionParam.setParamLower(result.getParamLower());
+                        paramCollectionParam.setParamUpper(result.getParamUpper());
+                        paramCollectionParam.setParamStandard(result.getParamCentral());
+                        paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
+                        paramCollectionParam.setUnit(result.getUnit());
+                        paramCollectionParam.setSpareField2(PRODUCT_STATE);
+                        paramCollectionlist.add(paramCollectionParam);
+                    }
                 }
+                paramCollectionService.saveBatch(paramCollectionlist);
             }
         }
 
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP030Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP030Callback.java
index 05081c1..cf84695 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP030Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP030Callback.java
@@ -162,7 +162,7 @@
                 .getValue().toString();
         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP030_J_PC_FINISH,true);
         miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
-   /*     if("2".equals(S_PRODUCT_STATE_CODE)){
+        if("2".equals(S_PRODUCT_STATE_CODE)){
             ProductionOrderRecordsParam productionOrderRecordsParam = new ProductionOrderRecordsParam();
             productionOrderRecordsParam.setWorkOrderNo(S_ORDER_CODE);
             productionOrderRecordsParam.setProductNo(S_SFC_CODE);
@@ -170,10 +170,11 @@
             if(!list.isEmpty()){
                 ProductionOrderRecordsResult productionOrderRecordsResult = list.get(0);
                 productionOrderRecordsParam.setId(productionOrderRecordsResult.getId());
-                productionOrderRecordsParam.setWhetherPass(S_PRODUCT_STATE_CODE);
+                productionOrderRecordsParam.setWhetherPass("涓嶅悎鏍�");
+                productionOrderRecordsParam.setEndTime(DateTool.getLocalTimeForDate());
                 productionOrderRecordsService.update(productionOrderRecordsParam);
             }
-        }*/
+        }
         //澶勭悊杩囩珯淇℃伅
         PassingStationCollectionParam param = new PassingStationCollectionParam();
         param.setWorkOrderNo(S_ORDER_CODE);
@@ -191,7 +192,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -222,42 +225,6 @@
         }
     }
 
-    //PC璇诲弬鏁颁俊鎭�
-    public void handleInfo() throws Exception {
-        logger.info("handleInfo START锛�");
 
-        if(null == list){
-            CollectionParamConfParam collectionParamConfParam = new CollectionParamConfParam();
-            collectionParamConfParam.setLocationCode(LOCATION_CODE);
-            list = collectionParamConfService.findListBySpec(collectionParamConfParam);
-        }
-        if(null != list && !list.isEmpty()) {
-            for (int i = 0; i < list.size(); i++) {
-                CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
-                }
-            }
-        }
-
-        logger.info("handleInfo END锛�");
-    }
 
 }
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP040Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP040Callback.java
index 90a08bf..4048f5f 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP040Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP040Callback.java
@@ -1,11 +1,14 @@
 package cn.stylefeng.guns.plcserver.callback;
 
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.params.CollectionParamConfParam;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.result.CollectionParamConfResult;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.service.CollectionParamConfService;
 import cn.stylefeng.guns.modular.bs.equipmentInfo.service.EquipmentInfoService;
 import cn.stylefeng.guns.modular.bs.locationInfo.service.LocationInfoService;
+import cn.stylefeng.guns.modular.cm.paramCollection.entity.ParamCollection;
 import cn.stylefeng.guns.modular.cm.paramCollection.model.params.ParamCollectionParam;
 import cn.stylefeng.guns.modular.cm.paramCollection.service.ParamCollectionService;
 import cn.stylefeng.guns.modular.cm.passingStationCollection.model.params.PassingStationCollectionParam;
@@ -92,7 +95,7 @@
     private static String PRODUCTION_LINE  = "OP";//浜х嚎鍙�
     private static String LOCATION_CODE  = "OP040";//宸ヤ綅鍙�
     private static List list = null;
-
+    private static String PRODUCT_STATE = "鍚堟牸";
     public OP040Callback(MiloService miloService,
                          ProductionOrdeInfoService productionOrdeInfoService,
                          PassingStationCollectionService passingStationCollectionService,
@@ -160,9 +163,12 @@
         String S_PRODUCT_STATE_CODE = miloService.
                 readFromOpcUa(OPCElement.OP040_S_PRODUCT_STATE_CODE)
                 .getValue().toString();
+        if("2".equals(S_PRODUCT_STATE_CODE)){
+            PRODUCT_STATE = "涓嶅悎鏍�";
+        }
         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP040_J_PC_FINISH,true);
         miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
-      /*  if("2".equals(S_PRODUCT_STATE_CODE)){
+        if("2".equals(S_PRODUCT_STATE_CODE)){
             ProductionOrderRecordsParam productionOrderRecordsParam = new ProductionOrderRecordsParam();
             productionOrderRecordsParam.setWorkOrderNo(S_ORDER_CODE);
             productionOrderRecordsParam.setProductNo(S_SFC_CODE);
@@ -170,10 +176,11 @@
             if(!list.isEmpty()){
                 ProductionOrderRecordsResult productionOrderRecordsResult = list.get(0);
                 productionOrderRecordsParam.setId(productionOrderRecordsResult.getId());
-                productionOrderRecordsParam.setWhetherPass(S_PRODUCT_STATE_CODE);
+                productionOrderRecordsParam.setWhetherPass("涓嶅悎鏍�");
+                productionOrderRecordsParam.setEndTime(DateTool.getLocalTimeForDate());
                 productionOrderRecordsService.update(productionOrderRecordsParam);
             }
-        }*/
+        }
         //澶勭悊杩囩珯淇℃伅
         PassingStationCollectionParam param = new PassingStationCollectionParam();
         param.setWorkOrderNo(S_ORDER_CODE);
@@ -191,7 +198,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -232,32 +241,59 @@
             list = collectionParamConfService.findListBySpec(collectionParamConfParam);
         }
         if(null != list && !list.isEmpty()) {
+
+            List<String> nodeIdList = new ArrayList<>();
             for (int i = 0; i < list.size(); i++) {
                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
+                nodeIdList.add(result.getGatherAddress());
+            }
+
+            List<ReadWriteEntity> readWriteEntityList = new ArrayList<>();
+            if(CollUtil.isNotEmpty(nodeIdList)){
+                readWriteEntityList = miloService.readFromOpcUa(nodeIdList);
+            }
+
+            List<ParamCollection> paramCollectionlist = new ArrayList<>();
+            if (CollUtil.isNotEmpty(nodeIdList)){
+                for(int i=0;i<nodeIdList.size();i++){
+                    if(ObjectUtil.isNotEmpty(readWriteEntityList.get(i).getValue())){
+                        CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
+
+                        String value = "0";
+                        if (readWriteEntityList.get(i).getValue() != null){
+                            value = readWriteEntityList.get(i).getValue().toString();
+                        }
+
+                        if(result.getParamName() != null && result.getParamName().contains("鐘舵��")){
+                            if("2".equals(value)){
+                                value = "涓嶅悎鏍�";
+                            }else {
+                                value = "鍚堟牸";
+                            }
+                        }
+
+                        ParamCollection paramCollectionParam = new ParamCollection();
+                        paramCollectionParam.setParamCode(result.getParamCode());
+                        paramCollectionParam.setParamName(result.getParamName());
+                        paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
+                        paramCollectionParam.setSfcCode(S_SFC_CODE);
+                        paramCollectionParam.setProductCode(S_PRODUCT_CODE);
+                        paramCollectionParam.setProductionLine(result.getProductionLine());
+                        paramCollectionParam.setLocationCode(result.getLocationCode());
+                        paramCollectionParam.setParamValue(value.toString());
+                        paramCollectionParam.setParamLower(result.getParamLower());
+                        paramCollectionParam.setParamUpper(result.getParamUpper());
+                        paramCollectionParam.setParamStandard(result.getParamCentral());
+                        paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
+                        paramCollectionParam.setUnit(result.getUnit());
+                        paramCollectionParam.setSpareField2(PRODUCT_STATE);
+                        paramCollectionlist.add(paramCollectionParam);
+                    }
                 }
+                paramCollectionService.saveBatch(paramCollectionlist);
             }
         }
 
         logger.info("handleInfo END锛�");
     }
-
 }
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP050Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP050Callback.java
index 752c2ad..abdb72d 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP050Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP050Callback.java
@@ -1,11 +1,14 @@
 package cn.stylefeng.guns.plcserver.callback;
 
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.params.CollectionParamConfParam;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.result.CollectionParamConfResult;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.service.CollectionParamConfService;
 import cn.stylefeng.guns.modular.bs.equipmentInfo.service.EquipmentInfoService;
 import cn.stylefeng.guns.modular.bs.locationInfo.service.LocationInfoService;
+import cn.stylefeng.guns.modular.cm.paramCollection.entity.ParamCollection;
 import cn.stylefeng.guns.modular.cm.paramCollection.model.params.ParamCollectionParam;
 import cn.stylefeng.guns.modular.cm.paramCollection.service.ParamCollectionService;
 import cn.stylefeng.guns.modular.cm.passingStationCollection.model.params.PassingStationCollectionParam;
@@ -28,7 +31,6 @@
 import cn.stylefeng.guns.plcserver.opc.GlobalVariable;
 import cn.stylefeng.guns.plcserver.opc.OPCElement;
 
-import cn.stylefeng.guns.plcserver.opc.unit.OPCUnit;
 import cn.stylefeng.guns.plcserver.tool.DateTool;
 import cn.stylefeng.guns.plcserver.tool.LogUtil;
 import com.kangaroohy.milo.model.ReadWriteEntity;
@@ -94,7 +96,7 @@
     private static String PRODUCTION_LINE  = "OP";//浜х嚎鍙�
     private static String LOCATION_CODE  = "OP050";//宸ヤ綅鍙�
     private static List list = null;
-
+    private static String PRODUCT_STATE = "鍚堟牸";
     public OP050Callback(MiloService miloService,
                          ProductionOrdeInfoService productionOrdeInfoService,
                          PassingStationCollectionService passingStationCollectionService,
@@ -180,7 +182,9 @@
         if(null != object){
             S_PRODUCT_STATE_CODE = object.toString();
         }
-
+        if("2".equals(S_PRODUCT_STATE_CODE)){
+            PRODUCT_STATE = "涓嶅悎鏍�";
+        }
 
         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP050_J_PC_FINISH,true);
         miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
@@ -218,7 +222,7 @@
         logger.info("bopSfcCode:"+bopSfcCode);
 
         //鏌ヨCOP鍜孊OP鏄惁鍚堟牸
-     /*   PassingStationCollectionParam passingStationCollectionParam = new PassingStationCollectionParam();
+        PassingStationCollectionParam passingStationCollectionParam = new PassingStationCollectionParam();
         passingStationCollectionParam.setSfcCode(S_SFC_CODE);
         List<PassingStationCollectionResult> passingStationCollectionResultList =
                 passingStationCollectionService.findListBySpec(passingStationCollectionParam);
@@ -233,6 +237,7 @@
         }
         //淇敼鎶ュ伐璁板綍
         if("2".equals(S_PRODUCT_STATE_CODE) || "false".equals(isProductState)){
+            isProductState = "true";
             ProductionOrderRecordsParam productionOrderRecordsParam = new ProductionOrderRecordsParam();
             productionOrderRecordsParam.setWorkOrderNo(S_ORDER_CODE);
             productionOrderRecordsParam.setProductNo(S_SFC_CODE);
@@ -240,16 +245,19 @@
             if(list.size()>0){
                 ProductionOrderRecordsResult productionOrderRecordsResult = list.get(0);
                 productionOrderRecordsParam.setId(productionOrderRecordsResult.getId());
-                productionOrderRecordsParam.setWhetherPass("2");
+                productionOrderRecordsParam.setWhetherPass("涓嶅悎鏍�");
+                productionOrderRecordsParam.setEndTime(DateTool.getLocalTimeForDate());
                 productionOrderRecordsService.update(productionOrderRecordsParam);
             }
-        }*/
+        }
 
 
         logger.info("handleFinsh PC澶勭悊瀹屾垚锛�");
     }
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -290,28 +298,54 @@
             list = collectionParamConfService.findListBySpec(collectionParamConfParam);
         }
         if(null != list && !list.isEmpty()) {
+
+            List<String> nodeIdList = new ArrayList<>();
             for (int i = 0; i < list.size(); i++) {
                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
+                nodeIdList.add(result.getGatherAddress());
+            }
+
+            List<ReadWriteEntity> readWriteEntityList = new ArrayList<>();
+            if(CollUtil.isNotEmpty(nodeIdList)){
+                readWriteEntityList = miloService.readFromOpcUa(nodeIdList);
+            }
+
+            List<ParamCollection> paramCollectionlist = new ArrayList<>();
+            if (CollUtil.isNotEmpty(nodeIdList)){
+                for(int i=0;i<nodeIdList.size();i++){
+                    if(ObjectUtil.isNotEmpty(readWriteEntityList.get(i).getValue())){
+                        CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
+
+                        String value = "0";
+                        if (readWriteEntityList.get(i).getValue() != null){
+                            value = readWriteEntityList.get(i).getValue().toString();
+                        }
+                        if(result.getParamName() != null && result.getParamName().contains("鐘舵��")){
+                            if("2".equals(value)){
+                                value = "涓嶅悎鏍�";
+                            }else {
+                                value = "鍚堟牸";
+                            }
+                        }
+                        ParamCollection paramCollectionParam = new ParamCollection();
+                        paramCollectionParam.setParamCode(result.getParamCode());
+                        paramCollectionParam.setParamName(result.getParamName());
+                        paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
+                        paramCollectionParam.setSfcCode(S_SFC_CODE);
+                        paramCollectionParam.setProductCode(S_PRODUCT_CODE);
+                        paramCollectionParam.setProductionLine(result.getProductionLine());
+                        paramCollectionParam.setLocationCode(result.getLocationCode());
+                        paramCollectionParam.setParamValue(value.toString());
+                        paramCollectionParam.setParamLower(result.getParamLower());
+                        paramCollectionParam.setParamUpper(result.getParamUpper());
+                        paramCollectionParam.setParamStandard(result.getParamCentral());
+                        paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
+                        paramCollectionParam.setUnit(result.getUnit());
+                        paramCollectionParam.setSpareField2(PRODUCT_STATE);
+                        paramCollectionlist.add(paramCollectionParam);
+                    }
                 }
+                paramCollectionService.saveBatch(paramCollectionlist);
             }
         }
 
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP070Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP070Callback.java
index 5337938..066117b 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP070Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP070Callback.java
@@ -1,11 +1,14 @@
 package cn.stylefeng.guns.plcserver.callback;
 
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.params.CollectionParamConfParam;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.result.CollectionParamConfResult;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.service.CollectionParamConfService;
 import cn.stylefeng.guns.modular.bs.equipmentInfo.service.EquipmentInfoService;
 import cn.stylefeng.guns.modular.bs.locationInfo.service.LocationInfoService;
+import cn.stylefeng.guns.modular.cm.paramCollection.entity.ParamCollection;
 import cn.stylefeng.guns.modular.cm.paramCollection.model.params.ParamCollectionParam;
 import cn.stylefeng.guns.modular.cm.paramCollection.service.ParamCollectionService;
 import cn.stylefeng.guns.modular.cm.passingStationCollection.model.params.PassingStationCollectionParam;
@@ -92,7 +95,7 @@
     private static String PRODUCTION_LINE  = "OP";//浜х嚎鍙�
     private static String LOCATION_CODE  = "OP070";//宸ヤ綅鍙�
     private static List list = null;
-
+    private static String PRODUCT_STATE = "鍚堟牸";
     public OP070Callback(MiloService miloService,
                          ProductionOrdeInfoService productionOrdeInfoService,
                          PassingStationCollectionService passingStationCollectionService,
@@ -161,11 +164,13 @@
         String S_PRODUCT_STATE_CODE = miloService.
                 readFromOpcUa(OPCElement.OP070_S_PRODUCT_STATE_CODE)
                 .getValue().toString();
-
+        if("2".equals(S_PRODUCT_STATE_CODE)){
+            PRODUCT_STATE = "涓嶅悎鏍�";
+        }
         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP070_J_PC_FINISH,true);
         miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
 
-      /*  if("2".equals(S_PRODUCT_STATE_CODE)){
+        if("2".equals(S_PRODUCT_STATE_CODE)){
             ProductionOrderRecordsParam productionOrderRecordsParam = new ProductionOrderRecordsParam();
             productionOrderRecordsParam.setWorkOrderNo(S_ORDER_CODE);
             productionOrderRecordsParam.setProductNo(S_SFC_CODE);
@@ -173,10 +178,11 @@
             if(!list.isEmpty()){
                 ProductionOrderRecordsResult productionOrderRecordsResult = list.get(0);
                 productionOrderRecordsParam.setId(productionOrderRecordsResult.getId());
-                productionOrderRecordsParam.setWhetherPass(S_PRODUCT_STATE_CODE);
+                productionOrderRecordsParam.setWhetherPass("涓嶅悎鏍�");
+                productionOrderRecordsParam.setEndTime(DateTool.getLocalTimeForDate());
                 productionOrderRecordsService.update(productionOrderRecordsParam);
             }
-        }*/
+        }
         //澶勭悊杩囩珯淇℃伅
         PassingStationCollectionParam param = new PassingStationCollectionParam();
         param.setWorkOrderNo(S_ORDER_CODE);
@@ -194,7 +200,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -224,7 +232,6 @@
             }
         }
     }
-
     //PC璇诲弬鏁颁俊鎭�
     public void handleInfo() throws Exception {
         logger.info("handleInfo START锛�");
@@ -235,28 +242,54 @@
             list = collectionParamConfService.findListBySpec(collectionParamConfParam);
         }
         if(null != list && !list.isEmpty()) {
+
+            List<String> nodeIdList = new ArrayList<>();
             for (int i = 0; i < list.size(); i++) {
                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
+                nodeIdList.add(result.getGatherAddress());
+            }
+
+            List<ReadWriteEntity> readWriteEntityList = new ArrayList<>();
+            if(CollUtil.isNotEmpty(nodeIdList)){
+                readWriteEntityList = miloService.readFromOpcUa(nodeIdList);
+            }
+
+            List<ParamCollection> paramCollectionlist = new ArrayList<>();
+            if (CollUtil.isNotEmpty(nodeIdList)){
+                for(int i=0;i<nodeIdList.size();i++){
+                    if(ObjectUtil.isNotEmpty(readWriteEntityList.get(i).getValue())){
+                        CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
+
+                        String value = "0";
+                        if (readWriteEntityList.get(i).getValue() != null){
+                            value = readWriteEntityList.get(i).getValue().toString();
+                        }
+                        if(result.getParamName() != null && result.getParamName().contains("鐘舵��")){
+                            if("2".equals(value)){
+                                value = "涓嶅悎鏍�";
+                            }else {
+                                value = "鍚堟牸";
+                            }
+                        }
+                        ParamCollection paramCollectionParam = new ParamCollection();
+                        paramCollectionParam.setParamCode(result.getParamCode());
+                        paramCollectionParam.setParamName(result.getParamName());
+                        paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
+                        paramCollectionParam.setSfcCode(S_SFC_CODE);
+                        paramCollectionParam.setProductCode(S_PRODUCT_CODE);
+                        paramCollectionParam.setProductionLine(result.getProductionLine());
+                        paramCollectionParam.setLocationCode(result.getLocationCode());
+                        paramCollectionParam.setParamValue(value.toString());
+                        paramCollectionParam.setParamLower(result.getParamLower());
+                        paramCollectionParam.setParamUpper(result.getParamUpper());
+                        paramCollectionParam.setParamStandard(result.getParamCentral());
+                        paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
+                        paramCollectionParam.setUnit(result.getUnit());
+                        paramCollectionParam.setSpareField2(PRODUCT_STATE);
+                        paramCollectionlist.add(paramCollectionParam);
+                    }
                 }
+                paramCollectionService.saveBatch(paramCollectionlist);
             }
         }
 
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP080Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP080Callback.java
index a44b7f2..abf1a71 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP080Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP080Callback.java
@@ -31,7 +31,6 @@
 import cn.stylefeng.guns.plcserver.opc.GlobalVariable;
 import cn.stylefeng.guns.plcserver.opc.OPCElement;
 
-import cn.stylefeng.guns.plcserver.opc.unit.OPCUnit;
 import cn.stylefeng.guns.plcserver.tool.DateTool;
 import cn.stylefeng.guns.plcserver.tool.LogUtil;
 import com.kangaroohy.milo.model.ReadWriteEntity;
@@ -215,7 +214,7 @@
         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP080_J_PC_FINISH,true);
         miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
 
-     /*   if("2".equals(S_PRODUCT_STATE_CODE)){
+        if("2".equals(S_PRODUCT_STATE_CODE)){
             ProductionOrderRecordsParam productionOrderRecordsParam = new ProductionOrderRecordsParam();
             productionOrderRecordsParam.setWorkOrderNo(S_ORDER_CODE);
             productionOrderRecordsParam.setProductNo(S_SFC_CODE);
@@ -223,10 +222,11 @@
             if(!list.isEmpty()){
                 ProductionOrderRecordsResult productionOrderRecordsResult = list.get(0);
                 productionOrderRecordsParam.setId(productionOrderRecordsResult.getId());
-                productionOrderRecordsParam.setWhetherPass(S_PRODUCT_STATE_CODE);
+                productionOrderRecordsParam.setWhetherPass("涓嶅悎鏍�");
+                productionOrderRecordsParam.setEndTime(DateTool.getLocalTimeForDate());
                 productionOrderRecordsService.update(productionOrderRecordsParam);
             }
-        }*/
+        }
         //澶勭悊杩囩珯淇℃伅
         PassingStationCollectionParam param = new PassingStationCollectionParam();
         param.setWorkOrderNo(S_ORDER_CODE);
@@ -244,7 +244,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP090Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP090Callback.java
index 4ceb10b..b105d7a 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP090Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP090Callback.java
@@ -1,11 +1,14 @@
 package cn.stylefeng.guns.plcserver.callback;
 
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.params.CollectionParamConfParam;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.result.CollectionParamConfResult;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.service.CollectionParamConfService;
 import cn.stylefeng.guns.modular.bs.equipmentInfo.service.EquipmentInfoService;
 import cn.stylefeng.guns.modular.bs.locationInfo.service.LocationInfoService;
+import cn.stylefeng.guns.modular.cm.paramCollection.entity.ParamCollection;
 import cn.stylefeng.guns.modular.cm.paramCollection.model.params.ParamCollectionParam;
 import cn.stylefeng.guns.modular.cm.paramCollection.service.ParamCollectionService;
 import cn.stylefeng.guns.modular.cm.passingStationCollection.model.params.PassingStationCollectionParam;
@@ -28,7 +31,6 @@
 import cn.stylefeng.guns.plcserver.opc.GlobalVariable;
 import cn.stylefeng.guns.plcserver.opc.OPCElement;
 
-import cn.stylefeng.guns.plcserver.opc.unit.OPCUnit;
 import cn.stylefeng.guns.plcserver.tool.DateTool;
 import cn.stylefeng.guns.plcserver.tool.LogUtil;
 import com.kangaroohy.milo.model.ReadWriteEntity;
@@ -94,7 +96,7 @@
     private static String PRODUCTION_LINE  = "OP";//浜х嚎鍙�
     private static String LOCATION_CODE  = "OP090";//宸ヤ綅鍙�
     private static List list = null;
-
+    private static String PRODUCT_STATE = "鍚堟牸";
     public OP090Callback(MiloService miloService,
                          ProductionOrdeInfoService productionOrdeInfoService,
                          PassingStationCollectionService passingStationCollectionService,
@@ -170,6 +172,9 @@
             S_PRODUCT_STATE_CODE = object.toString();
         }
 
+        if("2".equals(S_PRODUCT_STATE_CODE)){
+            PRODUCT_STATE = "涓嶅悎鏍�";
+        }
 
         Object eopSfcCode = miloService.
                 readFromOpcUa(OPCElement.OP090_S_SFC_CODE_EOP)
@@ -204,7 +209,7 @@
             logger.info("S_SFC_CODE:" + S_SFC_CODE);
             logger.info("eopSfcCode:" + eopSfcCode);
         }
-       /* //鏌ヨCOP鍜孊OP鏄惁鍚堟牸
+        //鏌ヨCOP鍜孊OP鏄惁鍚堟牸
         PassingStationCollectionParam passingStationCollectionParam = new PassingStationCollectionParam();
         passingStationCollectionParam.setSfcCode(S_SFC_CODE);
         List<PassingStationCollectionResult> passingStationCollectionResultList =
@@ -228,16 +233,19 @@
             if(list.size()>0){
                 ProductionOrderRecordsResult productionOrderRecordsResult = list.get(0);
                 productionOrderRecordsParam.setId(productionOrderRecordsResult.getId());
-                productionOrderRecordsParam.setWhetherPass("2");
+                productionOrderRecordsParam.setWhetherPass("涓嶅悎鏍�");
+                productionOrderRecordsParam.setEndTime(DateTool.getLocalTimeForDate());
                 productionOrderRecordsService.update(productionOrderRecordsParam);
             }
-        }*/
+        }
 
 
         logger.info("handleFinsh PC澶勭悊瀹屾垚锛�");
     }
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -278,32 +286,57 @@
             list = collectionParamConfService.findListBySpec(collectionParamConfParam);
         }
         if(null != list && !list.isEmpty()) {
+
+            List<String> nodeIdList = new ArrayList<>();
             for (int i = 0; i < list.size(); i++) {
                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
+                nodeIdList.add(result.getGatherAddress());
+            }
+
+            List<ReadWriteEntity> readWriteEntityList = new ArrayList<>();
+            if(CollUtil.isNotEmpty(nodeIdList)){
+                readWriteEntityList = miloService.readFromOpcUa(nodeIdList);
+            }
+
+            List<ParamCollection> paramCollectionlist = new ArrayList<>();
+            if (CollUtil.isNotEmpty(nodeIdList)){
+                for(int i=0;i<nodeIdList.size();i++){
+                    if(ObjectUtil.isNotEmpty(readWriteEntityList.get(i).getValue())){
+                        CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
+
+                        String value = "0";
+                        if (readWriteEntityList.get(i).getValue() != null){
+                            value = readWriteEntityList.get(i).getValue().toString();
+                        }
+                        if(result.getParamName() != null && result.getParamName().contains("鐘舵��")){
+                            if("2".equals(value)){
+                                value = "涓嶅悎鏍�";
+                            }else {
+                                value = "鍚堟牸";
+                            }
+                        }
+                        ParamCollection paramCollectionParam = new ParamCollection();
+                        paramCollectionParam.setParamCode(result.getParamCode());
+                        paramCollectionParam.setParamName(result.getParamName());
+                        paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
+                        paramCollectionParam.setSfcCode(S_SFC_CODE);
+                        paramCollectionParam.setProductCode(S_PRODUCT_CODE);
+                        paramCollectionParam.setProductionLine(result.getProductionLine());
+                        paramCollectionParam.setLocationCode(result.getLocationCode());
+                        paramCollectionParam.setParamValue(value.toString());
+                        paramCollectionParam.setParamLower(result.getParamLower());
+                        paramCollectionParam.setParamUpper(result.getParamUpper());
+                        paramCollectionParam.setParamStandard(result.getParamCentral());
+                        paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
+                        paramCollectionParam.setUnit(result.getUnit());
+                        paramCollectionParam.setSpareField2(PRODUCT_STATE);
+                        paramCollectionlist.add(paramCollectionParam);
+                    }
                 }
+                paramCollectionService.saveBatch(paramCollectionlist);
             }
         }
 
         logger.info("handleInfo END锛�");
     }
-
 }
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP100Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP100Callback.java
index 1126b4b..91b59e1 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP100Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP100Callback.java
@@ -1,11 +1,14 @@
 package cn.stylefeng.guns.plcserver.callback;
 
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.params.CollectionParamConfParam;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.result.CollectionParamConfResult;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.service.CollectionParamConfService;
 import cn.stylefeng.guns.modular.bs.equipmentInfo.service.EquipmentInfoService;
 import cn.stylefeng.guns.modular.bs.locationInfo.service.LocationInfoService;
+import cn.stylefeng.guns.modular.cm.paramCollection.entity.ParamCollection;
 import cn.stylefeng.guns.modular.cm.paramCollection.model.params.ParamCollectionParam;
 import cn.stylefeng.guns.modular.cm.paramCollection.service.ParamCollectionService;
 import cn.stylefeng.guns.modular.cm.passingStationCollection.model.params.PassingStationCollectionParam;
@@ -92,7 +95,7 @@
     private static String PRODUCTION_LINE  = "OP";//浜х嚎鍙�
     private static String LOCATION_CODE  = "OP100";//宸ヤ綅鍙�
     private static List list = null;
-
+    private static String PRODUCT_STATE = "鍚堟牸";
     public OP100Callback(MiloService miloService,
                          ProductionOrdeInfoService productionOrdeInfoService,
                          PassingStationCollectionService passingStationCollectionService,
@@ -162,11 +165,13 @@
         String S_PRODUCT_STATE_CODE = miloService.
                 readFromOpcUa(OPCElement.OP100_S_PRODUCT_STATE_CODE)
                 .getValue().toString();
-
+        if("2".equals(S_PRODUCT_STATE_CODE)){
+            PRODUCT_STATE = "涓嶅悎鏍�";
+        }
         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP100_J_PC_FINISH,true);
         miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
 
-      /*  if("2".equals(S_PRODUCT_STATE_CODE)){
+        if("2".equals(S_PRODUCT_STATE_CODE)){
             ProductionOrderRecordsParam productionOrderRecordsParam = new ProductionOrderRecordsParam();
             productionOrderRecordsParam.setWorkOrderNo(S_ORDER_CODE);
             productionOrderRecordsParam.setProductNo(S_SFC_CODE);
@@ -174,10 +179,11 @@
             if(!list.isEmpty()){
                 ProductionOrderRecordsResult productionOrderRecordsResult = list.get(0);
                 productionOrderRecordsParam.setId(productionOrderRecordsResult.getId());
-                productionOrderRecordsParam.setWhetherPass(S_PRODUCT_STATE_CODE);
+                productionOrderRecordsParam.setWhetherPass("涓嶅悎鏍�");
+                productionOrderRecordsParam.setEndTime(DateTool.getLocalTimeForDate());
                 productionOrderRecordsService.update(productionOrderRecordsParam);
             }
-        }*/
+        }
         //澶勭悊杩囩珯淇℃伅
         PassingStationCollectionParam param = new PassingStationCollectionParam();
         param.setWorkOrderNo(S_ORDER_CODE);
@@ -195,7 +201,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -236,28 +244,54 @@
             list = collectionParamConfService.findListBySpec(collectionParamConfParam);
         }
         if(null != list && !list.isEmpty()) {
+
+            List<String> nodeIdList = new ArrayList<>();
             for (int i = 0; i < list.size(); i++) {
                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
+                nodeIdList.add(result.getGatherAddress());
+            }
+
+            List<ReadWriteEntity> readWriteEntityList = new ArrayList<>();
+            if(CollUtil.isNotEmpty(nodeIdList)){
+                readWriteEntityList = miloService.readFromOpcUa(nodeIdList);
+            }
+
+            List<ParamCollection> paramCollectionlist = new ArrayList<>();
+            if (CollUtil.isNotEmpty(nodeIdList)){
+                for(int i=0;i<nodeIdList.size();i++){
+                    if(ObjectUtil.isNotEmpty(readWriteEntityList.get(i).getValue())){
+                        CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
+
+                        String value = "0";
+                        if (readWriteEntityList.get(i).getValue() != null){
+                            value = readWriteEntityList.get(i).getValue().toString();
+                        }
+                        if(result.getParamName() != null && result.getParamName().contains("鐘舵��")){
+                            if("2".equals(value)){
+                                value = "涓嶅悎鏍�";
+                            }else {
+                                value = "鍚堟牸";
+                            }
+                        }
+                        ParamCollection paramCollectionParam = new ParamCollection();
+                        paramCollectionParam.setParamCode(result.getParamCode());
+                        paramCollectionParam.setParamName(result.getParamName());
+                        paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
+                        paramCollectionParam.setSfcCode(S_SFC_CODE);
+                        paramCollectionParam.setProductCode(S_PRODUCT_CODE);
+                        paramCollectionParam.setProductionLine(result.getProductionLine());
+                        paramCollectionParam.setLocationCode(result.getLocationCode());
+                        paramCollectionParam.setParamValue(value.toString());
+                        paramCollectionParam.setParamLower(result.getParamLower());
+                        paramCollectionParam.setParamUpper(result.getParamUpper());
+                        paramCollectionParam.setParamStandard(result.getParamCentral());
+                        paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
+                        paramCollectionParam.setUnit(result.getUnit());
+                        paramCollectionParam.setSpareField2(PRODUCT_STATE);
+                        paramCollectionlist.add(paramCollectionParam);
+                    }
                 }
+                paramCollectionService.saveBatch(paramCollectionlist);
             }
         }
 
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP110Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP110Callback.java
index 87c6668..08c1e34 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP110Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP110Callback.java
@@ -164,7 +164,7 @@
         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP110_J_PC_FINISH,true);
         miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
 
-       /* if("2".equals(S_PRODUCT_STATE_CODE)){
+        if("2".equals(S_PRODUCT_STATE_CODE)){
             ProductionOrderRecordsParam productionOrderRecordsParam = new ProductionOrderRecordsParam();
             productionOrderRecordsParam.setWorkOrderNo(S_ORDER_CODE);
             productionOrderRecordsParam.setProductNo(S_SFC_CODE);
@@ -172,10 +172,11 @@
             if(!list.isEmpty()){
                 ProductionOrderRecordsResult productionOrderRecordsResult = list.get(0);
                 productionOrderRecordsParam.setId(productionOrderRecordsResult.getId());
-                productionOrderRecordsParam.setWhetherPass(S_PRODUCT_STATE_CODE);
+                productionOrderRecordsParam.setWhetherPass("涓嶅悎鏍�");
+                productionOrderRecordsParam.setEndTime(DateTool.getLocalTimeForDate());
                 productionOrderRecordsService.update(productionOrderRecordsParam);
             }
-        }*/
+        }
         //澶勭悊杩囩珯淇℃伅
         PassingStationCollectionParam param = new PassingStationCollectionParam();
         param.setWorkOrderNo(S_ORDER_CODE);
@@ -193,7 +194,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP120BCallback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP120BCallback.java
index c0c7046..796ab99 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP120BCallback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP120BCallback.java
@@ -1,11 +1,14 @@
 package cn.stylefeng.guns.plcserver.callback;
 
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.params.CollectionParamConfParam;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.result.CollectionParamConfResult;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.service.CollectionParamConfService;
 import cn.stylefeng.guns.modular.bs.equipmentInfo.service.EquipmentInfoService;
 import cn.stylefeng.guns.modular.bs.locationInfo.service.LocationInfoService;
+import cn.stylefeng.guns.modular.cm.paramCollection.entity.ParamCollection;
 import cn.stylefeng.guns.modular.cm.paramCollection.model.params.ParamCollectionParam;
 import cn.stylefeng.guns.modular.cm.paramCollection.service.ParamCollectionService;
 import cn.stylefeng.guns.modular.cm.passingStationCollection.model.params.PassingStationCollectionParam;
@@ -92,7 +95,7 @@
     private static String PRODUCTION_LINE  = "OP";//浜х嚎鍙�
     private static String LOCATION_CODE  = "OP120B";//宸ヤ綅鍙�
     private static List list = null;
-
+    private static String PRODUCT_STATE = "鍚堟牸";
     public OP120BCallback(MiloService miloService,
                           ProductionOrdeInfoService productionOrdeInfoService,
                           PassingStationCollectionService passingStationCollectionService,
@@ -160,11 +163,13 @@
         String S_PRODUCT_STATE_CODE = miloService.
                 readFromOpcUa(OPCElement.OP120B_S_PRODUCT_STATE_CODE)
                 .getValue().toString();
-
+        if("2".equals(S_PRODUCT_STATE_CODE)){
+            PRODUCT_STATE = "涓嶅悎鏍�";
+        }
         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP120B_J_PC_FINISH,true);
         miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
 
-      /*  if("2".equals(S_PRODUCT_STATE_CODE)){
+        if("2".equals(S_PRODUCT_STATE_CODE)){
             ProductionOrderRecordsParam productionOrderRecordsParam = new ProductionOrderRecordsParam();
             productionOrderRecordsParam.setWorkOrderNo(S_ORDER_CODE);
             productionOrderRecordsParam.setProductNo(S_SFC_CODE);
@@ -172,10 +177,10 @@
             if(!list.isEmpty()){
                 ProductionOrderRecordsResult productionOrderRecordsResult = list.get(0);
                 productionOrderRecordsParam.setId(productionOrderRecordsResult.getId());
-                productionOrderRecordsParam.setWhetherPass(S_PRODUCT_STATE_CODE);
+                productionOrderRecordsParam.setWhetherPass("涓嶅悎鏍�");
                 productionOrderRecordsService.update(productionOrderRecordsParam);
             }
-        }*/
+        }
         //澶勭悊杩囩珯淇℃伅
         PassingStationCollectionParam param = new PassingStationCollectionParam();
         param.setWorkOrderNo(S_ORDER_CODE);
@@ -234,28 +239,54 @@
             list = collectionParamConfService.findListBySpec(collectionParamConfParam);
         }
         if(null != list && !list.isEmpty()) {
+
+            List<String> nodeIdList = new ArrayList<>();
             for (int i = 0; i < list.size(); i++) {
                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
+                nodeIdList.add(result.getGatherAddress());
+            }
+
+            List<ReadWriteEntity> readWriteEntityList = new ArrayList<>();
+            if(CollUtil.isNotEmpty(nodeIdList)){
+                readWriteEntityList = miloService.readFromOpcUa(nodeIdList);
+            }
+
+            List<ParamCollection> paramCollectionlist = new ArrayList<>();
+            if (CollUtil.isNotEmpty(nodeIdList)){
+                for(int i=0;i<nodeIdList.size();i++){
+                    if(ObjectUtil.isNotEmpty(readWriteEntityList.get(i).getValue())){
+                        CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
+
+                        String value = "0";
+                        if (readWriteEntityList.get(i).getValue() != null){
+                            value = readWriteEntityList.get(i).getValue().toString();
+                        }
+                        if(result.getParamName() != null && result.getParamName().contains("鐘舵��")){
+                            if("2".equals(value)){
+                                value = "涓嶅悎鏍�";
+                            }else {
+                                value = "鍚堟牸";
+                            }
+                        }
+                        ParamCollection paramCollectionParam = new ParamCollection();
+                        paramCollectionParam.setParamCode(result.getParamCode());
+                        paramCollectionParam.setParamName(result.getParamName());
+                        paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
+                        paramCollectionParam.setSfcCode(S_SFC_CODE);
+                        paramCollectionParam.setProductCode(S_PRODUCT_CODE);
+                        paramCollectionParam.setProductionLine(result.getProductionLine());
+                        paramCollectionParam.setLocationCode(result.getLocationCode());
+                        paramCollectionParam.setParamValue(value.toString());
+                        paramCollectionParam.setParamLower(result.getParamLower());
+                        paramCollectionParam.setParamUpper(result.getParamUpper());
+                        paramCollectionParam.setParamStandard(result.getParamCentral());
+                        paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
+                        paramCollectionParam.setUnit(result.getUnit());
+                        paramCollectionParam.setSpareField2(PRODUCT_STATE);
+                        paramCollectionlist.add(paramCollectionParam);
+                    }
                 }
+                paramCollectionService.saveBatch(paramCollectionlist);
             }
         }
 
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP120Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP120Callback.java
index 4bc1701..3086091 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP120Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP120Callback.java
@@ -1,11 +1,14 @@
 package cn.stylefeng.guns.plcserver.callback;
 
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.params.CollectionParamConfParam;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.result.CollectionParamConfResult;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.service.CollectionParamConfService;
 import cn.stylefeng.guns.modular.bs.equipmentInfo.service.EquipmentInfoService;
 import cn.stylefeng.guns.modular.bs.locationInfo.service.LocationInfoService;
+import cn.stylefeng.guns.modular.cm.paramCollection.entity.ParamCollection;
 import cn.stylefeng.guns.modular.cm.paramCollection.model.params.ParamCollectionParam;
 import cn.stylefeng.guns.modular.cm.paramCollection.service.ParamCollectionService;
 import cn.stylefeng.guns.modular.cm.passingStationCollection.model.params.PassingStationCollectionParam;
@@ -92,7 +95,7 @@
     private static String PRODUCTION_LINE  = "OP";//浜х嚎鍙�
     private static String LOCATION_CODE  = "OP120";//宸ヤ綅鍙�
     private static List list = null;
-
+    private static String PRODUCT_STATE = "鍚堟牸";
     public OP120Callback(MiloService miloService,
                          ProductionOrdeInfoService productionOrdeInfoService,
                          PassingStationCollectionService passingStationCollectionService,
@@ -160,12 +163,14 @@
         String S_PRODUCT_STATE_CODE = miloService.
                 readFromOpcUa(OPCElement.OP120_S_PRODUCT_STATE_CODE)
                 .getValue().toString();
-
+        if("2".equals(S_PRODUCT_STATE_CODE)){
+            PRODUCT_STATE = "涓嶅悎鏍�";
+        }
 
         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP120_J_PC_FINISH,true);
         miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
 
-      /*  if("2".equals(S_PRODUCT_STATE_CODE)){
+        if("2".equals(S_PRODUCT_STATE_CODE)){
             ProductionOrderRecordsParam productionOrderRecordsParam = new ProductionOrderRecordsParam();
             productionOrderRecordsParam.setWorkOrderNo(S_ORDER_CODE);
             productionOrderRecordsParam.setProductNo(S_SFC_CODE);
@@ -173,10 +178,11 @@
             if(!list.isEmpty()){
                 ProductionOrderRecordsResult productionOrderRecordsResult = list.get(0);
                 productionOrderRecordsParam.setId(productionOrderRecordsResult.getId());
-                productionOrderRecordsParam.setWhetherPass(S_PRODUCT_STATE_CODE);
+                productionOrderRecordsParam.setWhetherPass("涓嶅悎鏍�");
+                productionOrderRecordsParam.setEndTime(DateTool.getLocalTimeForDate());
                 productionOrderRecordsService.update(productionOrderRecordsParam);
             }
-        }*/
+        }
         //澶勭悊杩囩珯淇℃伅
         PassingStationCollectionParam param = new PassingStationCollectionParam();
         param.setWorkOrderNo(S_ORDER_CODE);
@@ -193,7 +199,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -234,28 +242,54 @@
             list = collectionParamConfService.findListBySpec(collectionParamConfParam);
         }
         if(null != list && !list.isEmpty()) {
+
+            List<String> nodeIdList = new ArrayList<>();
             for (int i = 0; i < list.size(); i++) {
                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
+                nodeIdList.add(result.getGatherAddress());
+            }
+
+            List<ReadWriteEntity> readWriteEntityList = new ArrayList<>();
+            if(CollUtil.isNotEmpty(nodeIdList)){
+                readWriteEntityList = miloService.readFromOpcUa(nodeIdList);
+            }
+
+            List<ParamCollection> paramCollectionlist = new ArrayList<>();
+            if (CollUtil.isNotEmpty(nodeIdList)){
+                for(int i=0;i<nodeIdList.size();i++){
+                    if(ObjectUtil.isNotEmpty(readWriteEntityList.get(i).getValue())){
+                        CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
+
+                        String value = "0";
+                        if (readWriteEntityList.get(i).getValue() != null){
+                            value = readWriteEntityList.get(i).getValue().toString();
+                        }
+                        if(result.getParamName() != null && result.getParamName().contains("鐘舵��")){
+                            if("2".equals(value)){
+                                value = "涓嶅悎鏍�";
+                            }else {
+                                value = "鍚堟牸";
+                            }
+                        }
+                        ParamCollection paramCollectionParam = new ParamCollection();
+                        paramCollectionParam.setParamCode(result.getParamCode());
+                        paramCollectionParam.setParamName(result.getParamName());
+                        paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
+                        paramCollectionParam.setSfcCode(S_SFC_CODE);
+                        paramCollectionParam.setProductCode(S_PRODUCT_CODE);
+                        paramCollectionParam.setProductionLine(result.getProductionLine());
+                        paramCollectionParam.setLocationCode(result.getLocationCode());
+                        paramCollectionParam.setParamValue(value.toString());
+                        paramCollectionParam.setParamLower(result.getParamLower());
+                        paramCollectionParam.setParamUpper(result.getParamUpper());
+                        paramCollectionParam.setParamStandard(result.getParamCentral());
+                        paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
+                        paramCollectionParam.setUnit(result.getUnit());
+                        paramCollectionParam.setSpareField2(PRODUCT_STATE);
+                        paramCollectionlist.add(paramCollectionParam);
+                    }
                 }
+                paramCollectionService.saveBatch(paramCollectionlist);
             }
         }
 
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP130BCallback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP130BCallback.java
index 331eb5e..29c4509 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP130BCallback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP130BCallback.java
@@ -1,11 +1,14 @@
 package cn.stylefeng.guns.plcserver.callback;
 
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.params.CollectionParamConfParam;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.result.CollectionParamConfResult;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.service.CollectionParamConfService;
 import cn.stylefeng.guns.modular.bs.equipmentInfo.service.EquipmentInfoService;
 import cn.stylefeng.guns.modular.bs.locationInfo.service.LocationInfoService;
+import cn.stylefeng.guns.modular.cm.paramCollection.entity.ParamCollection;
 import cn.stylefeng.guns.modular.cm.paramCollection.model.params.ParamCollectionParam;
 import cn.stylefeng.guns.modular.cm.paramCollection.service.ParamCollectionService;
 import cn.stylefeng.guns.modular.cm.passingStationCollection.model.params.PassingStationCollectionParam;
@@ -92,7 +95,7 @@
     private static String PRODUCTION_LINE  = "OP";//浜х嚎鍙�
     private static String LOCATION_CODE  = "OP130B";//宸ヤ綅鍙�
     private static List list = null;
-
+    private static String PRODUCT_STATE = "鍚堟牸";
     public OP130BCallback(MiloService miloService,
                           ProductionOrdeInfoService productionOrdeInfoService,
                           PassingStationCollectionService passingStationCollectionService,
@@ -160,11 +163,13 @@
         String S_PRODUCT_STATE_CODE = miloService.
                 readFromOpcUa(OPCElement.OP130B_S_PRODUCT_STATE_CODE)
                 .getValue().toString();
-
+        if("2".equals(S_PRODUCT_STATE_CODE)){
+            PRODUCT_STATE = "涓嶅悎鏍�";
+        }
         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP130B_J_PC_FINISH,true);
         miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
 
-  /*      if("2".equals(S_PRODUCT_STATE_CODE)){
+        if("2".equals(S_PRODUCT_STATE_CODE)){
             ProductionOrderRecordsParam productionOrderRecordsParam = new ProductionOrderRecordsParam();
             productionOrderRecordsParam.setWorkOrderNo(S_ORDER_CODE);
             productionOrderRecordsParam.setProductNo(S_SFC_CODE);
@@ -172,10 +177,10 @@
             if(!list.isEmpty()){
                 ProductionOrderRecordsResult productionOrderRecordsResult = list.get(0);
                 productionOrderRecordsParam.setId(productionOrderRecordsResult.getId());
-                productionOrderRecordsParam.setWhetherPass(S_PRODUCT_STATE_CODE);
+                productionOrderRecordsParam.setWhetherPass("涓嶅悎鏍�");
                 productionOrderRecordsService.update(productionOrderRecordsParam);
             }
-        }*/
+        }
         //澶勭悊杩囩珯淇℃伅
         PassingStationCollectionParam param = new PassingStationCollectionParam();
         param.setWorkOrderNo(S_ORDER_CODE);
@@ -234,28 +239,54 @@
             list = collectionParamConfService.findListBySpec(collectionParamConfParam);
         }
         if(null != list && !list.isEmpty()) {
+
+            List<String> nodeIdList = new ArrayList<>();
             for (int i = 0; i < list.size(); i++) {
                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
+                nodeIdList.add(result.getGatherAddress());
+            }
+
+            List<ReadWriteEntity> readWriteEntityList = new ArrayList<>();
+            if(CollUtil.isNotEmpty(nodeIdList)){
+                readWriteEntityList = miloService.readFromOpcUa(nodeIdList);
+            }
+
+            List<ParamCollection> paramCollectionlist = new ArrayList<>();
+            if (CollUtil.isNotEmpty(nodeIdList)){
+                for(int i=0;i<nodeIdList.size();i++){
+                    if(ObjectUtil.isNotEmpty(readWriteEntityList.get(i).getValue())){
+                        CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
+
+                        String value = "0";
+                        if (readWriteEntityList.get(i).getValue() != null){
+                            value = readWriteEntityList.get(i).getValue().toString();
+                        }
+                        if(result.getParamName() != null && result.getParamName().contains("鐘舵��")){
+                            if("2".equals(value)){
+                                value = "涓嶅悎鏍�";
+                            }else {
+                                value = "鍚堟牸";
+                            }
+                        }
+                        ParamCollection paramCollectionParam = new ParamCollection();
+                        paramCollectionParam.setParamCode(result.getParamCode());
+                        paramCollectionParam.setParamName(result.getParamName());
+                        paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
+                        paramCollectionParam.setSfcCode(S_SFC_CODE);
+                        paramCollectionParam.setProductCode(S_PRODUCT_CODE);
+                        paramCollectionParam.setProductionLine(result.getProductionLine());
+                        paramCollectionParam.setLocationCode(result.getLocationCode());
+                        paramCollectionParam.setParamValue(value.toString());
+                        paramCollectionParam.setParamLower(result.getParamLower());
+                        paramCollectionParam.setParamUpper(result.getParamUpper());
+                        paramCollectionParam.setParamStandard(result.getParamCentral());
+                        paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
+                        paramCollectionParam.setUnit(result.getUnit());
+                        paramCollectionParam.setSpareField2(PRODUCT_STATE);
+                        paramCollectionlist.add(paramCollectionParam);
+                    }
                 }
+                paramCollectionService.saveBatch(paramCollectionlist);
             }
         }
 
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP130Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP130Callback.java
index 6da4c79..9184da4 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP130Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP130Callback.java
@@ -1,11 +1,14 @@
 package cn.stylefeng.guns.plcserver.callback;
 
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.params.CollectionParamConfParam;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.result.CollectionParamConfResult;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.service.CollectionParamConfService;
 import cn.stylefeng.guns.modular.bs.equipmentInfo.service.EquipmentInfoService;
 import cn.stylefeng.guns.modular.bs.locationInfo.service.LocationInfoService;
+import cn.stylefeng.guns.modular.cm.paramCollection.entity.ParamCollection;
 import cn.stylefeng.guns.modular.cm.paramCollection.model.params.ParamCollectionParam;
 import cn.stylefeng.guns.modular.cm.paramCollection.service.ParamCollectionService;
 import cn.stylefeng.guns.modular.cm.passingStationCollection.model.params.PassingStationCollectionParam;
@@ -92,7 +95,7 @@
     private static String PRODUCTION_LINE  = "OP";//浜х嚎鍙�
     private static String LOCATION_CODE  = "OP130";//宸ヤ綅鍙�
     private static List list = null;
-
+    private static String PRODUCT_STATE = "鍚堟牸";
     public OP130Callback(MiloService miloService,
                          ProductionOrdeInfoService productionOrdeInfoService,
                          PassingStationCollectionService passingStationCollectionService,
@@ -162,11 +165,13 @@
         String S_PRODUCT_STATE_CODE = miloService.
                 readFromOpcUa(OPCElement.OP130_S_PRODUCT_STATE_CODE)
                 .getValue().toString();
-
+        if("2".equals(S_PRODUCT_STATE_CODE)){
+            PRODUCT_STATE = "涓嶅悎鏍�";
+        }
         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP130_J_PC_FINISH,true);
         miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
 
-      /*  if("2".equals(S_PRODUCT_STATE_CODE)){
+        if("2".equals(S_PRODUCT_STATE_CODE)){
             ProductionOrderRecordsParam productionOrderRecordsParam = new ProductionOrderRecordsParam();
             productionOrderRecordsParam.setWorkOrderNo(S_ORDER_CODE);
             productionOrderRecordsParam.setProductNo(S_SFC_CODE);
@@ -174,10 +179,11 @@
             if(!list.isEmpty()){
                 ProductionOrderRecordsResult productionOrderRecordsResult = list.get(0);
                 productionOrderRecordsParam.setId(productionOrderRecordsResult.getId());
-                productionOrderRecordsParam.setWhetherPass(S_PRODUCT_STATE_CODE);
+                productionOrderRecordsParam.setWhetherPass("涓嶅悎鏍�");
+                productionOrderRecordsParam.setEndTime(DateTool.getLocalTimeForDate());
                 productionOrderRecordsService.update(productionOrderRecordsParam);
             }
-        }*/
+        }
         //澶勭悊杩囩珯淇℃伅
         PassingStationCollectionParam param = new PassingStationCollectionParam();
         param.setWorkOrderNo(S_ORDER_CODE);
@@ -195,7 +201,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -236,28 +244,54 @@
             list = collectionParamConfService.findListBySpec(collectionParamConfParam);
         }
         if(null != list && !list.isEmpty()) {
+
+            List<String> nodeIdList = new ArrayList<>();
             for (int i = 0; i < list.size(); i++) {
                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
+                nodeIdList.add(result.getGatherAddress());
+            }
+
+            List<ReadWriteEntity> readWriteEntityList = new ArrayList<>();
+            if(CollUtil.isNotEmpty(nodeIdList)){
+                readWriteEntityList = miloService.readFromOpcUa(nodeIdList);
+            }
+
+            List<ParamCollection> paramCollectionlist = new ArrayList<>();
+            if (CollUtil.isNotEmpty(nodeIdList)){
+                for(int i=0;i<nodeIdList.size();i++){
+                    if(ObjectUtil.isNotEmpty(readWriteEntityList.get(i).getValue())){
+                        CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
+
+                        String value = "0";
+                        if (readWriteEntityList.get(i).getValue() != null){
+                            value = readWriteEntityList.get(i).getValue().toString();
+                        }
+                        if(result.getParamName() != null && result.getParamName().contains("鐘舵��")){
+                            if("2".equals(value)){
+                                value = "涓嶅悎鏍�";
+                            }else {
+                                value = "鍚堟牸";
+                            }
+                        }
+                        ParamCollection paramCollectionParam = new ParamCollection();
+                        paramCollectionParam.setParamCode(result.getParamCode());
+                        paramCollectionParam.setParamName(result.getParamName());
+                        paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
+                        paramCollectionParam.setSfcCode(S_SFC_CODE);
+                        paramCollectionParam.setProductCode(S_PRODUCT_CODE);
+                        paramCollectionParam.setProductionLine(result.getProductionLine());
+                        paramCollectionParam.setLocationCode(result.getLocationCode());
+                        paramCollectionParam.setParamValue(value.toString());
+                        paramCollectionParam.setParamLower(result.getParamLower());
+                        paramCollectionParam.setParamUpper(result.getParamUpper());
+                        paramCollectionParam.setParamStandard(result.getParamCentral());
+                        paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
+                        paramCollectionParam.setUnit(result.getUnit());
+                        paramCollectionParam.setSpareField2(PRODUCT_STATE);
+                        paramCollectionlist.add(paramCollectionParam);
+                    }
                 }
+                paramCollectionService.saveBatch(paramCollectionlist);
             }
         }
 
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP140Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP140Callback.java
index 0156459..706623a 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP140Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP140Callback.java
@@ -1,11 +1,14 @@
 package cn.stylefeng.guns.plcserver.callback;
 
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.params.CollectionParamConfParam;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.result.CollectionParamConfResult;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.service.CollectionParamConfService;
 import cn.stylefeng.guns.modular.bs.equipmentInfo.service.EquipmentInfoService;
 import cn.stylefeng.guns.modular.bs.locationInfo.service.LocationInfoService;
+import cn.stylefeng.guns.modular.cm.paramCollection.entity.ParamCollection;
 import cn.stylefeng.guns.modular.cm.paramCollection.model.params.ParamCollectionParam;
 import cn.stylefeng.guns.modular.cm.paramCollection.service.ParamCollectionService;
 import cn.stylefeng.guns.modular.cm.passingStationCollection.model.params.PassingStationCollectionParam;
@@ -92,7 +95,7 @@
     private static String PRODUCTION_LINE  = "OP";//浜х嚎鍙�
     private static String LOCATION_CODE  = "OP140";//宸ヤ綅鍙�
     private static List list = null;
-
+    private static String PRODUCT_STATE = "鍚堟牸";
     public OP140Callback(MiloService miloService,
                          ProductionOrdeInfoService productionOrdeInfoService,
                          PassingStationCollectionService passingStationCollectionService,
@@ -161,9 +164,12 @@
         String S_PRODUCT_STATE_CODE = miloService.
                 readFromOpcUa(OPCElement.OP140_S_PRODUCT_STATE_CODE)
                 .getValue().toString();
+        if("2".equals(S_PRODUCT_STATE_CODE)){
+            PRODUCT_STATE = "涓嶅悎鏍�";
+        }
         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP140_J_PC_FINISH,true);
         miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
-     /*   if("2".equals(S_PRODUCT_STATE_CODE)){
+        if("2".equals(S_PRODUCT_STATE_CODE)){
             ProductionOrderRecordsParam productionOrderRecordsParam = new ProductionOrderRecordsParam();
             productionOrderRecordsParam.setWorkOrderNo(S_ORDER_CODE);
             productionOrderRecordsParam.setProductNo(S_SFC_CODE);
@@ -171,10 +177,12 @@
             if(!list.isEmpty()){
                 ProductionOrderRecordsResult productionOrderRecordsResult = list.get(0);
                 productionOrderRecordsParam.setId(productionOrderRecordsResult.getId());
-                productionOrderRecordsParam.setWhetherPass(S_PRODUCT_STATE_CODE);
+                productionOrderRecordsParam.setWhetherPass("涓嶅悎鏍�");
+                productionOrderRecordsParam.setEndTime(DateTool.getLocalTimeForDate());
+                productionOrderRecordsParam.setEndTime(DateTool.getLocalTimeForDate());
                 productionOrderRecordsService.update(productionOrderRecordsParam);
             }
-        }*/
+        }
         //澶勭悊杩囩珯淇℃伅
         PassingStationCollectionParam param = new PassingStationCollectionParam();
         param.setWorkOrderNo(S_ORDER_CODE);
@@ -192,7 +200,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -233,28 +243,54 @@
             list = collectionParamConfService.findListBySpec(collectionParamConfParam);
         }
         if(null != list && !list.isEmpty()) {
+
+            List<String> nodeIdList = new ArrayList<>();
             for (int i = 0; i < list.size(); i++) {
                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
+                nodeIdList.add(result.getGatherAddress());
+            }
+
+            List<ReadWriteEntity> readWriteEntityList = new ArrayList<>();
+            if(CollUtil.isNotEmpty(nodeIdList)){
+                readWriteEntityList = miloService.readFromOpcUa(nodeIdList);
+            }
+
+            List<ParamCollection> paramCollectionlist = new ArrayList<>();
+            if (CollUtil.isNotEmpty(nodeIdList)){
+                for(int i=0;i<nodeIdList.size();i++){
+                    if(ObjectUtil.isNotEmpty(readWriteEntityList.get(i).getValue())){
+                        CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
+
+                        String value = "0";
+                        if (readWriteEntityList.get(i).getValue() != null){
+                            value = readWriteEntityList.get(i).getValue().toString();
+                        }
+                        if(result.getParamName() != null && result.getParamName().contains("鐘舵��")){
+                            if("2".equals(value)){
+                                value = "涓嶅悎鏍�";
+                            }else {
+                                value = "鍚堟牸";
+                            }
+                        }
+                        ParamCollection paramCollectionParam = new ParamCollection();
+                        paramCollectionParam.setParamCode(result.getParamCode());
+                        paramCollectionParam.setParamName(result.getParamName());
+                        paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
+                        paramCollectionParam.setSfcCode(S_SFC_CODE);
+                        paramCollectionParam.setProductCode(S_PRODUCT_CODE);
+                        paramCollectionParam.setProductionLine(result.getProductionLine());
+                        paramCollectionParam.setLocationCode(result.getLocationCode());
+                        paramCollectionParam.setParamValue(value.toString());
+                        paramCollectionParam.setParamLower(result.getParamLower());
+                        paramCollectionParam.setParamUpper(result.getParamUpper());
+                        paramCollectionParam.setParamStandard(result.getParamCentral());
+                        paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
+                        paramCollectionParam.setUnit(result.getUnit());
+                        paramCollectionParam.setSpareField2(PRODUCT_STATE);
+                        paramCollectionlist.add(paramCollectionParam);
+                    }
                 }
+                paramCollectionService.saveBatch(paramCollectionlist);
             }
         }
 
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP150Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP150Callback.java
index 52a625b..3c2506e 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP150Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP150Callback.java
@@ -1,11 +1,14 @@
 package cn.stylefeng.guns.plcserver.callback;
 
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.params.CollectionParamConfParam;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.result.CollectionParamConfResult;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.service.CollectionParamConfService;
 import cn.stylefeng.guns.modular.bs.equipmentInfo.service.EquipmentInfoService;
 import cn.stylefeng.guns.modular.bs.locationInfo.service.LocationInfoService;
+import cn.stylefeng.guns.modular.cm.paramCollection.entity.ParamCollection;
 import cn.stylefeng.guns.modular.cm.paramCollection.model.params.ParamCollectionParam;
 import cn.stylefeng.guns.modular.cm.paramCollection.service.ParamCollectionService;
 import cn.stylefeng.guns.modular.cm.passingStationCollection.model.params.PassingStationCollectionParam;
@@ -164,7 +167,7 @@
 
         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP150_J_PC_FINISH,true);
         miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
-      /*  if("2".equals(S_PRODUCT_STATE_CODE)){
+        if("2".equals(S_PRODUCT_STATE_CODE)){
             ProductionOrderRecordsParam productionOrderRecordsParam = new ProductionOrderRecordsParam();
             productionOrderRecordsParam.setWorkOrderNo(S_ORDER_CODE);
             productionOrderRecordsParam.setProductNo(S_SFC_CODE);
@@ -172,10 +175,11 @@
             if(!list.isEmpty()){
                 ProductionOrderRecordsResult productionOrderRecordsResult = list.get(0);
                 productionOrderRecordsParam.setId(productionOrderRecordsResult.getId());
-                productionOrderRecordsParam.setWhetherPass(S_PRODUCT_STATE_CODE);
+                productionOrderRecordsParam.setWhetherPass("涓嶅悎鏍�");
+                productionOrderRecordsParam.setEndTime(DateTool.getLocalTimeForDate());
                 productionOrderRecordsService.update(productionOrderRecordsParam);
             }
-        }*/
+        }
         //澶勭悊杩囩珯淇℃伅
         PassingStationCollectionParam param = new PassingStationCollectionParam();
         param.setWorkOrderNo(S_ORDER_CODE);
@@ -192,7 +196,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
@@ -233,28 +239,53 @@
             list = collectionParamConfService.findListBySpec(collectionParamConfParam);
         }
         if(null != list && !list.isEmpty()) {
+
+            List<String> nodeIdList = new ArrayList<>();
             for (int i = 0; i < list.size(); i++) {
                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
-                Object value = miloService.
-                        readFromOpcUa(result.getGatherAddress())
-                        .getValue();//璇诲弬鏁板��
-                if(null != value) {
-                    ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
-                    paramCollectionParam.setParamCode(result.getParamCode());
-                    paramCollectionParam.setParamName(result.getParamName());
-                    paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
-                    paramCollectionParam.setSfcCode(S_SFC_CODE);
-                    paramCollectionParam.setProductCode(S_PRODUCT_CODE);
-                    paramCollectionParam.setProductionLine(result.getProductionLine());
-                    paramCollectionParam.setLocationCode(result.getLocationCode());
-                    paramCollectionParam.setParamValue(value.toString());
-                    paramCollectionParam.setParamLower(result.getParamLower());
-                    paramCollectionParam.setParamUpper(result.getParamUpper());
-                    paramCollectionParam.setParamStandard(result.getParamCentral());
-                    paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
-                    paramCollectionParam.setUnit(result.getUnit());
-                    paramCollectionService.add(paramCollectionParam);
+                nodeIdList.add(result.getGatherAddress());
+            }
+
+            List<ReadWriteEntity> readWriteEntityList = new ArrayList<>();
+            if(CollUtil.isNotEmpty(nodeIdList)){
+                readWriteEntityList = miloService.readFromOpcUa(nodeIdList);
+            }
+
+            List<ParamCollection> paramCollectionlist = new ArrayList<>();
+            if (CollUtil.isNotEmpty(nodeIdList)){
+                for(int i=0;i<nodeIdList.size();i++){
+                    if(ObjectUtil.isNotEmpty(readWriteEntityList.get(i).getValue())){
+                        CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
+
+                        String value = "0";
+                        if (readWriteEntityList.get(i).getValue() != null){
+                            value = readWriteEntityList.get(i).getValue().toString();
+                        }
+                        if(result.getParamName() != null && result.getParamName().contains("鐘舵��")){
+                            if("2".equals(value)){
+                                value = "涓嶅悎鏍�";
+                            }else {
+                                value = "鍚堟牸";
+                            }
+                        }
+                        ParamCollection paramCollectionParam = new ParamCollection();
+                        paramCollectionParam.setParamCode(result.getParamCode());
+                        paramCollectionParam.setParamName(result.getParamName());
+                        paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
+                        paramCollectionParam.setSfcCode(S_SFC_CODE);
+                        paramCollectionParam.setProductCode(S_PRODUCT_CODE);
+                        paramCollectionParam.setProductionLine(result.getProductionLine());
+                        paramCollectionParam.setLocationCode(result.getLocationCode());
+                        paramCollectionParam.setParamValue(value.toString());
+                        paramCollectionParam.setParamLower(result.getParamLower());
+                        paramCollectionParam.setParamUpper(result.getParamUpper());
+                        paramCollectionParam.setParamStandard(result.getParamCentral());
+                        paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
+                        paramCollectionParam.setUnit(result.getUnit());
+                        paramCollectionlist.add(paramCollectionParam);
+                    }
                 }
+                paramCollectionService.saveBatch(paramCollectionlist);
             }
         }
 
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP160Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP160Callback.java
index 3dc71a1..bfd1624 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP160Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP160Callback.java
@@ -163,7 +163,7 @@
                 .getValue().toString();
         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP160_J_PC_FINISH,true);
         miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
-     /*   if("2".equals(S_PRODUCT_STATE_CODE)){
+        if("2".equals(S_PRODUCT_STATE_CODE)){
             ProductionOrderRecordsParam productionOrderRecordsParam = new ProductionOrderRecordsParam();
             productionOrderRecordsParam.setWorkOrderNo(S_ORDER_CODE);
             productionOrderRecordsParam.setProductNo(S_SFC_CODE);
@@ -171,10 +171,11 @@
             if(!list.isEmpty()){
                 ProductionOrderRecordsResult productionOrderRecordsResult = list.get(0);
                 productionOrderRecordsParam.setId(productionOrderRecordsResult.getId());
-                productionOrderRecordsParam.setWhetherPass(S_PRODUCT_STATE_CODE);
+                productionOrderRecordsParam.setWhetherPass("涓嶅悎鏍�");
+                productionOrderRecordsParam.setEndTime(DateTool.getLocalTimeForDate());
                 productionOrderRecordsService.update(productionOrderRecordsParam);
             }
-        }*/
+        }
         //澶勭悊杩囩珯淇℃伅
         PassingStationCollectionParam param = new PassingStationCollectionParam();
         param.setWorkOrderNo(S_ORDER_CODE);
@@ -192,7 +193,9 @@
     }
 
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP170Callback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP170Callback.java
index 961102e..2950bcd 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP170Callback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/OP170Callback.java
@@ -28,7 +28,6 @@
 import cn.stylefeng.guns.modular.sc.serialNumbersConf.service.SerialNumbersConfService;
 import cn.stylefeng.guns.plcserver.opc.GlobalVariable;
 import cn.stylefeng.guns.plcserver.opc.OPCElement;
-import cn.stylefeng.guns.plcserver.opc.unit.OPCUnit;
 import cn.stylefeng.guns.plcserver.tool.DateTool;
 import cn.stylefeng.guns.plcserver.tool.LogUtil;
 import com.kangaroohy.milo.model.ReadWriteEntity;
@@ -166,18 +165,21 @@
                 .getValue().toString();
         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP170_J_PC_FINISH,true);
         miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
-        //淇敼鎶ュ伐璁板綍
-        ProductionOrderRecordsParam productionOrderRecordsParam = new ProductionOrderRecordsParam();
-        productionOrderRecordsParam.setWorkOrderNo(S_ORDER_CODE);
-        productionOrderRecordsParam.setProductNo(S_SFC_CODE);
-        List<ProductionOrderRecordsResult> list2 = productionOrderRecordsService.findListBySpec(productionOrderRecordsParam);
-        if(!list2.isEmpty()){
-            ProductionOrderRecordsResult productionOrderRecordsResult = list2.get(0);
-            productionOrderRecordsParam.setId(productionOrderRecordsResult.getId());
-            productionOrderRecordsParam.setWhetherPass(S_PRODUCT_STATE_CODE);
-            productionOrderRecordsParam.setEndTime(DateTool.getLocalTimeForDate());
-            productionOrderRecordsService.update(productionOrderRecordsParam);
-        }
+
+            //淇敼鎶ュ伐璁板綍
+            ProductionOrderRecordsParam productionOrderRecordsParam = new ProductionOrderRecordsParam();
+            productionOrderRecordsParam.setWorkOrderNo(S_ORDER_CODE);
+            productionOrderRecordsParam.setProductNo(S_SFC_CODE);
+            List<ProductionOrderRecordsResult> list2 = productionOrderRecordsService.findListBySpec(productionOrderRecordsParam);
+            if (!list2.isEmpty()) {
+                ProductionOrderRecordsResult productionOrderRecordsResult = list2.get(0);
+                productionOrderRecordsParam.setId(productionOrderRecordsResult.getId());
+                if("2".equals(S_PRODUCT_STATE_CODE)) {
+                    productionOrderRecordsParam.setWhetherPass("涓嶅悎鏍�");
+                }
+                productionOrderRecordsParam.setEndTime(DateTool.getLocalTimeForDate());
+                productionOrderRecordsService.update(productionOrderRecordsParam);
+            }
 
         PassingStationCollectionParam param = new PassingStationCollectionParam();
         param.setWorkOrderNo(S_ORDER_CODE);
@@ -210,7 +212,9 @@
         logger.info("OP170宸ヤ綅,handleFinsh PC澶勭悊瀹屾垚锛�");
     }
     public void handleMaterial() {
-
+        if(S_ORDER_CODE.isEmpty()){
+            return;
+        }
         //鏌ヨ鎵规涓婃枡淇℃伅
         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/StateCallback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/StateCallback.java
deleted file mode 100644
index 4cbb624..0000000
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/StateCallback.java
+++ /dev/null
@@ -1,281 +0,0 @@
-package cn.stylefeng.guns.plcserver.callback;
-
-
-import cn.stylefeng.guns.modular.bs.collectionParamConf.model.params.CollectionParamConfParam;
-import cn.stylefeng.guns.modular.bs.collectionParamConf.model.result.CollectionParamConfResult;
-import cn.stylefeng.guns.modular.bs.collectionParamConf.service.CollectionParamConfService;
-import cn.stylefeng.guns.modular.bs.equipmentInfo.model.params.EquipmentInfoParam;
-import cn.stylefeng.guns.modular.bs.equipmentInfo.model.result.EquipmentInfoResult;
-import cn.stylefeng.guns.modular.bs.equipmentInfo.service.EquipmentInfoService;
-import cn.stylefeng.guns.modular.bs.locationInfo.model.params.LocationInfoParam;
-import cn.stylefeng.guns.modular.bs.locationInfo.model.result.LocationInfoResult;
-import cn.stylefeng.guns.modular.bs.locationInfo.service.LocationInfoService;
-import cn.stylefeng.guns.modular.cm.paramCollection.model.params.ParamCollectionParam;
-import cn.stylefeng.guns.modular.cm.paramCollection.service.ParamCollectionService;
-import cn.stylefeng.guns.modular.cm.passingStationCollection.model.params.PassingStationCollectionParam;
-import cn.stylefeng.guns.modular.cm.passingStationCollection.service.PassingStationCollectionService;
-import cn.stylefeng.guns.modular.dq.materialTraceability.model.params.MaterialTraceabilityParam;
-import cn.stylefeng.guns.modular.dq.materialTraceability.service.MaterialTraceabilityService;
-import cn.stylefeng.guns.modular.em.equipmentAlarm.model.params.EquipmentAlarmParam;
-import cn.stylefeng.guns.modular.em.equipmentAlarm.service.EquipmentAlarmService;
-import cn.stylefeng.guns.modular.em.equipmentStatus.model.params.EquipmentStatusParam;
-import cn.stylefeng.guns.modular.em.equipmentStatus.model.result.EquipmentStatusResult;
-import cn.stylefeng.guns.modular.em.equipmentStatus.service.EquipmentStatusService;
-import cn.stylefeng.guns.modular.gm.greaseManage.model.params.GreaseManageParam;
-import cn.stylefeng.guns.modular.gm.greaseManage.model.result.GreaseManageResult;
-import cn.stylefeng.guns.modular.gm.greaseManage.service.GreaseManageService;
-import cn.stylefeng.guns.modular.om.productionOrdeInfo.model.params.ProductionOrdeInfoParam;
-import cn.stylefeng.guns.modular.om.productionOrdeInfo.model.result.ProductionOrdeInfoResult;
-import cn.stylefeng.guns.modular.om.productionOrdeInfo.service.ProductionOrdeInfoService;
-import cn.stylefeng.guns.modular.om.productionOrderBatchInfo.model.params.ProductionOrderBatchInfoParam;
-import cn.stylefeng.guns.modular.om.productionOrderBatchInfo.model.result.ProductionOrderBatchInfoResult;
-import cn.stylefeng.guns.modular.om.productionOrderBatchInfo.service.ProductionOrderBatchInfoService;
-import cn.stylefeng.guns.modular.om.productionOrderRecords.service.ProductionOrderRecordsService;
-import cn.stylefeng.guns.modular.sc.repairManageInfo.model.params.RepairManageInfoParam;
-import cn.stylefeng.guns.modular.sc.repairManageInfo.model.result.RepairManageInfoResult;
-import cn.stylefeng.guns.modular.sc.repairManageInfo.service.RepairManageInfoService;
-import cn.stylefeng.guns.modular.sc.serialNumbersConf.service.SerialNumbersConfService;
-import cn.stylefeng.guns.plcserver.opc.GlobalVariable;
-import cn.stylefeng.guns.plcserver.opc.OPCElement;
-import cn.stylefeng.guns.plcserver.opc.unit.OPCUnit;
-import cn.stylefeng.guns.plcserver.tool.DateTool;
-import cn.stylefeng.guns.plcserver.tool.LogUtil;
-import com.kangaroohy.milo.model.ReadWriteEntity;
-import com.kangaroohy.milo.runner.subscription.SubscriptionCallback;
-import com.kangaroohy.milo.service.MiloService;
-import org.apache.log4j.Logger;
-import org.openscada.opc.lib.da.Item;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.text.SimpleDateFormat;
-import java.time.LocalDate;
-import java.time.format.DateTimeFormatter;
-import java.time.temporal.ChronoUnit;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Random;
-
-@Component
-public class StateCallback{
-
-    public MiloService miloService;
-
-    @Autowired
-    public ProductionOrdeInfoService productionOrdeInfoService;
-    @Autowired
-    public PassingStationCollectionService passingStationCollectionService;
-    @Autowired
-    public ParamCollectionService paramCollectionService;
-    @Autowired
-    public CollectionParamConfService collectionParamConfService;
-    @Autowired
-    public SerialNumbersConfService serialNumbersConfService;
-    @Autowired
-    private EquipmentStatusService equipmentStatusService;
-
-    @Autowired
-    private EquipmentAlarmService equipmentAlarmService;
-    @Autowired
-    private MaterialTraceabilityService materialTraceabilityService;
-    @Autowired
-    private EquipmentInfoService equipmentInfoService;
-    @Autowired
-    private RepairManageInfoService repairManageInfoService;
-
-    @Autowired
-    private LocationInfoService locationInfoService;
-
-    @Autowired
-    private GreaseManageService greaseManageService;
-
-    @Autowired
-    private ProductionOrderRecordsService productionOrderRecordsService;
-
-    @Autowired
-    private ProductionOrderBatchInfoService productionOrderBatchInfoService;
-
-    private static Logger logger;
-    LogUtil logUtil = new LogUtil();
-    static {
-        logger = Logger.getLogger(StateCallback.class);
-    }
-    private static Date IN_TIME = null;
-    private static String S_ORDER_CODE = "";//宸ュ崟缂栧彿
-    private static String S_PRODUCT_CODE = "";//浜у搧缂栧彿
-    private static String S_PRODUCT_TYPE= "";//浜у搧绫诲瀷
-    private static String S_SFC_CODE = "";//鎬绘垚缂栫爜
-    private static String PRODUCTION_LINE  = "BOP";//浜х嚎鍙�
-    private static String LOCATION_CODE  = "BOP010";//宸ヤ綅鍙�
-    private static List list = null;
-
-    public StateCallback(MiloService miloService,
-                         ProductionOrdeInfoService productionOrdeInfoService,
-                         PassingStationCollectionService passingStationCollectionService,
-                         ParamCollectionService paramCollectionService,
-                         CollectionParamConfService collectionParamConfService,
-                         SerialNumbersConfService serialNumbersConfService,
-                         EquipmentStatusService equipmentStatusService,
-                         EquipmentAlarmService equipmentAlarmService,
-                         MaterialTraceabilityService materialTraceabilityService,
-                         EquipmentInfoService equipmentInfoService,
-                         RepairManageInfoService repairManageInfoService,
-                         LocationInfoService locationInfoService,
-                         GreaseManageService greaseManageService,
-                         ProductionOrderRecordsService productionOrderRecordsService,
-                         ProductionOrderBatchInfoService productionOrderBatchInfoService) {
-        this.miloService = miloService;
-        this.productionOrdeInfoService = productionOrdeInfoService;
-        this.passingStationCollectionService = passingStationCollectionService;
-        this.paramCollectionService = paramCollectionService;
-        this.collectionParamConfService = collectionParamConfService;
-        this.serialNumbersConfService = serialNumbersConfService;
-        this.equipmentStatusService = equipmentStatusService;
-        this.equipmentAlarmService = equipmentAlarmService;
-        this.materialTraceabilityService = materialTraceabilityService;
-        this.equipmentInfoService = equipmentInfoService;
-        this.repairManageInfoService = repairManageInfoService;
-        this.locationInfoService = locationInfoService;
-        this.greaseManageService = greaseManageService;
-        this.productionOrderRecordsService = productionOrderRecordsService;
-        this.productionOrderBatchInfoService = productionOrderBatchInfoService;
-    }
-
-    public void handleInfo() throws Exception {
-        logger.info("OP100宸ヤ綅,handleInfo START锛�");
-
-        if(null == list ){
-            EquipmentInfoParam equipmentInfoParam = new EquipmentInfoParam();
-            list = equipmentInfoService.findListBySpec(equipmentInfoParam);
-        }
-        if(null != list && list.size()>0) {
-            for (int i = 0; i < list.size(); i++) {
-                EquipmentInfoResult result = (EquipmentInfoResult) list.get(i);
-                Item item = result.getItem();
-                String value = OPCUnit.read(item);//璇诲弬鏁板��  璁惧鐘舵��
-                String equipmentNo = result.getEquipmentNo();
-
-                EquipmentStatusParam equipmentStatusParam = new EquipmentStatusParam();
-                equipmentStatusParam.setEquipmentNo(equipmentNo);
-                List statuslist = equipmentStatusService.findListBySpec(equipmentStatusParam);
-                if(statuslist.size()>0){
-                    EquipmentStatusResult equipmentStatusResult = (EquipmentStatusResult) statuslist.get(0);
-                    if(!value.equals(equipmentStatusResult.getStatus())){
-                        equipmentStatusParam.setId(equipmentStatusResult.getId());
-                        equipmentStatusParam.setStatus(value);
-                        equipmentStatusParam.setUpdateTime(DateTool.getLocalTimeForDate());
-                        equipmentStatusService.update(equipmentStatusParam);//鏇存柊璁惧鐘舵��
-
-                        //娣诲姞璁惧鎶ヨ
-                        if("3".equals(value)){
-                            EquipmentAlarmParam equipmentAlarmParam = new EquipmentAlarmParam();
-                            equipmentAlarmParam.setEquipmentNo(equipmentNo);
-                            equipmentAlarmParam.setEquipmentName(result.getEquipmentName());
-                            equipmentAlarmParam.setWorkshopCode(result.getWorkshopCode());
-                            equipmentAlarmParam.setProductionLineCode(result.getProductionLineCode());
-                            equipmentAlarmParam.setLocationCode(result.getLocationCode());
-                            equipmentAlarmParam.setErrorDesc(result.getEquipmentName()+"鎶ヨ锛�");
-                            equipmentAlarmParam.setAlarmTime(DateTool.getLocalTimeForDate());
-                            equipmentAlarmService.add(equipmentAlarmParam);
-                        }
-                    }
-
-                }else{
-                    equipmentStatusParam.setEquipmentName(result.getEquipmentName());
-                    equipmentStatusParam.setWorkshopCode(result.getWorkshopCode());
-                    equipmentStatusParam.setProductionLineCode(result.getProductionLineCode());
-                    equipmentStatusParam.setLocationCode(result.getLocationCode());
-                    equipmentStatusParam.setStatus(value);
-                    equipmentStatusParam.setUpdateTime(DateTool.getLocalTimeForDate());
-                    equipmentStatusService.add(equipmentStatusParam);
-
-                    //娣诲姞璁惧鎶ヨ
-                    if("3".equals(value)){
-                        EquipmentAlarmParam equipmentAlarmParam = new EquipmentAlarmParam();
-                        equipmentAlarmParam.setEquipmentNo(equipmentNo);
-                        equipmentAlarmParam.setEquipmentName(result.getEquipmentName());
-                        equipmentAlarmParam.setWorkshopCode(result.getWorkshopCode());
-                        equipmentAlarmParam.setProductionLineCode(result.getProductionLineCode());
-                        equipmentAlarmParam.setLocationCode(result.getLocationCode());
-                        equipmentAlarmParam.setErrorDesc(result.getEquipmentName()+"鎶ヨ锛�");
-                        equipmentAlarmParam.setAlarmTime(DateTool.getLocalTimeForDate());
-                        equipmentAlarmService.add(equipmentAlarmParam);
-                    }
-                }
-
-            }
-        }
-
-
-        Thread.sleep(60*1000);
-    }
-
-    public void handleOilStateDOP020(String LOCATION_CODE) throws Exception {
-        GreaseManageParam param = new GreaseManageParam();
-        param.setLocationCode(LOCATION_CODE);
-        List<GreaseManageResult> list = greaseManageService.findListBySpec(param);
-        if(!list.isEmpty()) {
-            String duaDate = list.get(0).getDuaDate();
-
-            SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
-            String currentDate = format.format(new Date());
-            long  daysBetween = getRemainder(currentDate,duaDate);
-            if(daysBetween>0){
-                ReadWriteEntity entity = new ReadWriteEntity(OPCElement.DOP020_OIL_STATE,false);
-                miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
-            }else{
-                ReadWriteEntity entity = new ReadWriteEntity(OPCElement.DOP020_OIL_STATE,true);
-                miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
-            }
-        }
-    }
-
-    public  void handleOilStateOP050(String LOCATION_CODE) throws Exception {
-        GreaseManageParam param = new GreaseManageParam();
-        param.setLocationCode(LOCATION_CODE);
-        List<GreaseManageResult> list = greaseManageService.findListBySpec(param);
-        if(!list.isEmpty()) {
-            String duaDate = list.get(0).getDuaDate();
-
-            SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
-            String currentDate = format.format(new Date());
-            long  daysBetween = getRemainder(currentDate,duaDate);
-            if(daysBetween>0){
-                ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP050_OIL_STATE,false);
-                miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
-            }else{
-                ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP050_OIL_STATE,true);
-                miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
-            }
-        }
-    }
-
-    public  void handleOilStateBOP030(String LOCATION_CODE) throws Exception {
-        GreaseManageParam param = new GreaseManageParam();
-        param.setLocationCode(LOCATION_CODE);
-        List<GreaseManageResult> list = greaseManageService.findListBySpec(param);
-        if(!list.isEmpty()) {
-            String duaDate = list.get(0).getDuaDate();
-
-            SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
-            String currentDate = format.format(new Date());
-            long  daysBetween = getRemainder(currentDate,duaDate);
-            if(daysBetween>0){
-                ReadWriteEntity entity = new ReadWriteEntity(OPCElement.BOP030_OIL_STATE,false);
-                miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
-            }else{
-                ReadWriteEntity entity = new ReadWriteEntity(OPCElement.BOP030_OIL_STATE,true);
-                miloService.writeToOpcUa(entity);//鍐橮C瀹屾垚
-            }
-        }
-    }
-
-    public static long getRemainder(String currentDate,String tableDate){
-        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
-        LocalDate localDate1 = LocalDate.parse(currentDate, dateFormatter);
-        LocalDate localDate2 = LocalDate.parse(tableDate, dateFormatter);
-        long days = ChronoUnit.DAYS.between(localDate1, localDate2);
-        return days;
-    }
-}
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/init/CustomRunner.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/init/CustomRunner.java
index 3f623e8..670608d 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/init/CustomRunner.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/init/CustomRunner.java
@@ -1,8 +1,6 @@
 package cn.stylefeng.guns.plcserver.init;
 
 import cn.stylefeng.guns.modular.bs.collectionParamConf.service.CollectionParamConfService;
-import cn.stylefeng.guns.modular.bs.equipmentInfo.model.params.EquipmentInfoParam;
-import cn.stylefeng.guns.modular.bs.equipmentInfo.model.result.EquipmentInfoResult;
 import cn.stylefeng.guns.modular.bs.equipmentInfo.service.EquipmentInfoService;
 import cn.stylefeng.guns.modular.bs.locationInfo.service.LocationInfoService;
 import cn.stylefeng.guns.modular.cm.paramCollection.service.ParamCollectionService;
@@ -16,18 +14,20 @@
 import cn.stylefeng.guns.modular.om.productionOrderRecords.service.ProductionOrderRecordsService;
 import cn.stylefeng.guns.modular.sc.repairManageInfo.service.RepairManageInfoService;
 import cn.stylefeng.guns.modular.sc.serialNumbersConf.service.SerialNumbersConfService;
-import cn.stylefeng.guns.plcserver.callback.*;
 import cn.stylefeng.guns.plcserver.opc.GlobalVariable;
 import cn.stylefeng.guns.plcserver.opc.OPCElement;
+import cn.stylefeng.guns.plcserver.server.HEARTBEAT.HeartBeatServerInterface;
+import cn.stylefeng.guns.plcserver.server.HEARTBEAT.impl.HeartBeatServerInterfaceImpl;
 import com.kangaroohy.milo.service.MiloService;
 import lombok.extern.slf4j.Slf4j;
-import org.openscada.opc.lib.da.Item;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.ApplicationArguments;
 import org.springframework.boot.ApplicationRunner;
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.List;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -86,177 +86,144 @@
         GlobalVariable.PRODUCT_CODE_MAP.put("2","12980500000174");
         GlobalVariable.PRODUCT_CODE_MAP.put("3","12980500000194");
         GlobalVariable.PRODUCT_CODE_MAP.put("4","12980500000201");
-
-        InitCallback InitCallback = new InitCallback(miloService,productionOrdeInfoService,
+        SubscriptionManage InitCallback = new SubscriptionManage(miloService,productionOrdeInfoService,
                 passingStationCollectionService,paramCollectionService,collectionParamConfService,serialNumbersConfService,
                 equipmentStatusService,equipmentAlarmService,materialTraceabilityService,equipmentInfoService,
                 repairManageInfoService,locationInfoService,greaseManageService,productionOrderRecordsService,
                 productionOrderBatchInfoService);
 
+
+        Calendar calendar = Calendar.getInstance();
+        String Months = StringUtils.leftPad(String.valueOf(calendar.get(Calendar.MONTH) + 1),2, "0");
+        if(Months.equals("04")
+                ||Months.equals("07") ||Months.equals("08") || Months.equals("09")
+                || Months.equals("10") || Months.equals("11") || Months.equals("12") ||
+                Months.equals("01") || Months.equals("02") || Months.equals("03") ){
+            GlobalVariable.IS_CLOCK = false;
+        }
+       /* ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
+        cachedThreadPool.execute(new HeartBeatTaskThreadPool());*/
+
         System.out.println("start run^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
         List<String> lists = getList();
-        miloService.subscriptionFromOpcUa(lists,InitCallback);
+        miloService.subscriptionFromOpcUa(lists,500,InitCallback);
 
     }
 
     public List<String> getList(){
         List<String> lists = new ArrayList<>();
 
-        //lists.add(OPCElement.COP010_F_HEART_BEAT);
-        lists.add(OPCElement.COP010_J_PLC_START);
-        lists.add(OPCElement.COP010_J_PLC_FINISH);
+        lists.add(OPCElement.COP010_F_HEART_BEAT);
+        lists.add(OPCElement.COP010_PLC_REQUST);
 
-        //lists.add(OPCElement.COP020_F_HEART_BEAT);
-        lists.add(OPCElement.COP020_J_PLC_START);
-        lists.add(OPCElement.COP020_J_PLC_FINISH);
+        lists.add(OPCElement.COP020_F_HEART_BEAT);
+        lists.add(OPCElement.COP020_PLC_REQUST);
 
-        //lists.add(OPCElement.COP030_F_HEART_BEAT);
-        lists.add(OPCElement.COP030_J_PLC_START);
-        lists.add(OPCElement.COP030_J_PLC_FINISH);
+        lists.add(OPCElement.COP030_PLC_REQUST);
 
-        //lists.add(OPCElement.BOP010_F_HEART_BEAT);
-        lists.add(OPCElement.BOP010_J_PLC_START);
-        lists.add(OPCElement.BOP010_J_PLC_FINISH);
+        lists.add(OPCElement.BOP010_F_HEART_BEAT);
+        lists.add(OPCElement.BOP010_PLC_REQUST);
 
-        //lists.add(OPCElement.BOP020_F_HEART_BEAT);
-        lists.add(OPCElement.BOP020_J_PLC_START);
-        lists.add(OPCElement.BOP020_J_PLC_FINISH);
+        lists.add(OPCElement.BOP020_PLC_REQUST);
 
-        //lists.add(OPCElement.BOP030_F_HEART_BEAT);
-        lists.add(OPCElement.BOP030_J_PLC_START);
-        lists.add(OPCElement.BOP030_J_PLC_FINISH);
+        lists.add(OPCElement.BOP030_F_HEART_BEAT);
+        lists.add(OPCElement.BOP030_PLC_REQUST);
 
-        //lists.add(OPCElement.BOP030B_F_HEART_BEAT);
-        lists.add(OPCElement.BOP030B_J_PLC_START);
-        lists.add(OPCElement.BOP030B_J_PLC_FINISH);
+        lists.add(OPCElement.BOP030B_PLC_REQUST);
 
-        //lists.add(OPCElement.BOP040_F_HEART_BEAT);
-        lists.add(OPCElement.BOP040_J_PLC_START);
-        lists.add(OPCElement.BOP040_J_PLC_FINISH);
+        lists.add(OPCElement.BOP040_PLC_REQUST);
 
-        //lists.add(OPCElement.BOP040B_F_HEART_BEAT);
-        lists.add(OPCElement.BOP040B_J_PLC_START);
-        lists.add(OPCElement.BOP040B_J_PLC_FINISH);
+        lists.add(OPCElement.BOP040B_PLC_REQUST);
 
-        //lists.add(OPCElement.DOP010_F_HEART_BEAT);
-        lists.add(OPCElement.DOP010_J_PLC_START);
-        lists.add(OPCElement.DOP010_J_PLC_FINISH);
+        lists.add(OPCElement.DOP010_F_HEART_BEAT);
+        lists.add(OPCElement.DOP010_PLC_REQUST);
 
-    /*    lists.add(OPCElement.DOP020_F_HEART_BEAT);
-        lists.add(OPCElement.DOP020_J_PLC_START);
-        lists.add(OPCElement.DOP020_J_PLC_FINISH);*/
 
-        //lists.add(OPCElement.EOP010_F_HEART_BEAT);
-        lists.add(OPCElement.EOP010_J_PLC_START);
-        lists.add(OPCElement.EOP010_J_PLC_FINISH);
+        lists.add(OPCElement.EOP010_F_HEART_BEAT);
+        lists.add(OPCElement.EOP010_PLC_REQUST);
 
-        //lists.add(OPCElement.EOP020_F_HEART_BEAT);
-        lists.add(OPCElement.EOP020_J_PLC_START);
-        lists.add(OPCElement.EOP020_J_PLC_FINISH);
+        lists.add(OPCElement.EOP020_F_HEART_BEAT);
+        lists.add(OPCElement.EOP020_PLC_REQUST);
 
-        //lists.add(OPCElement.EOP030_F_HEART_BEAT);
-        lists.add(OPCElement.EOP030_J_PLC_START);
-        lists.add(OPCElement.EOP030_J_PLC_FINISH);
+        lists.add(OPCElement.EOP030_F_HEART_BEAT);
+        lists.add(OPCElement.EOP030_PLC_REQUST);
 
-        //lists.add(OPCElement.EOP040_F_HEART_BEAT);
-        lists.add(OPCElement.EOP040_J_PLC_START);
-        lists.add(OPCElement.EOP040_J_PLC_FINISH);
+        lists.add(OPCElement.EOP040_PLC_REQUST);
 
-        //lists.add(OPCElement.EOP050_F_HEART_BEAT);
-        lists.add(OPCElement.EOP050_J_PLC_START);
-        lists.add(OPCElement.EOP050_J_PLC_FINISH);
+        lists.add(OPCElement.EOP050_F_HEART_BEAT);
+        lists.add(OPCElement.EOP050_PLC_REQUST);
 
-        //lists.add(OPCElement.EOP060_F_HEART_BEAT);
-        lists.add(OPCElement.EOP060_J_PLC_START);
-        lists.add(OPCElement.EOP060_J_PLC_FINISH);
+        lists.add(OPCElement.EOP060_F_HEART_BEAT);
+        lists.add(OPCElement.EOP060_PLC_REQUST);
 
-        //lists.add(OPCElement.EOP070_F_HEART_BEAT);
-        lists.add(OPCElement.EOP070_J_PLC_START);
-        lists.add(OPCElement.EOP070_J_PLC_FINISH);
+        lists.add(OPCElement.EOP070_F_HEART_BEAT);
+        lists.add(OPCElement.EOP070_PLC_REQUST);
 
-        //lists.add(OPCElement.EOP070_F_HEART_BEAT);
-        lists.add(OPCElement.EOP070_J_PLC_START);
-        lists.add(OPCElement.EOP070_J_PLC_FINISH);
+        lists.add(OPCElement.EOP080_F_HEART_BEAT);
+        lists.add(OPCElement.EOP080_PLC_REQUST);
 
-        //lists.add(OPCElement.EOP090_F_HEART_BEAT);
+        lists.add(OPCElement.EOP090_F_HEART_BEAT);
         lists.add(OPCElement.EOP090_J_PLC_START);
         lists.add(OPCElement.EOP090_J_PLC_FINISH);
 
-        //lists.add(OPCElement.EOP090B_F_HEART_BEAT);
         lists.add(OPCElement.EOP090B_J_PLC_START);
         lists.add(OPCElement.EOP090B_J_PLC_FINISH);
 
-        //lists.add(OPCElement.OP010_F_HEART_BEAT);
-        lists.add(OPCElement.OP010_J_PLC_START);
-        lists.add(OPCElement.OP010_J_PLC_FINISH);
+        lists.add(OPCElement.OP010_F_HEART_BEAT);
+        lists.add(OPCElement.OP010_PLC_REQUST);
 
-        //lists.add(OPCElement.OP020_F_HEART_BEAT);
-        lists.add(OPCElement.OP020_J_PLC_START);
-        lists.add(OPCElement.OP020_J_PLC_FINISH);
+        lists.add(OPCElement.OP020_F_HEART_BEAT);
+        lists.add(OPCElement.OP020_PLC_REQUST);
 
-        //lists.add(OPCElement.OP030_F_HEART_BEAT);
-        lists.add(OPCElement.OP030_J_PLC_START);
-        lists.add(OPCElement.OP030_J_PLC_FINISH);
+        lists.add(OPCElement.OP030_F_HEART_BEAT);
+        lists.add(OPCElement.OP030_PLC_REQUST);
 
-        //lists.add(OPCElement.OP040_F_HEART_BEAT);
-        lists.add(OPCElement.OP040_J_PLC_START);
-        lists.add(OPCElement.OP040_J_PLC_FINISH);
+        lists.add(OPCElement.OP040_F_HEART_BEAT);
+        lists.add(OPCElement.OP040_PLC_REQUST);
 
-        //lists.add(OPCElement.OP050_F_HEART_BEAT);
-        lists.add(OPCElement.OP050_J_PLC_START);
-        lists.add(OPCElement.OP050_J_PLC_FINISH);
+        lists.add(OPCElement.OP050_F_HEART_BEAT);
+        lists.add(OPCElement.OP050_PLC_REQUST);
 
-        //lists.add(OPCElement.OP070_F_HEART_BEAT);
-        lists.add(OPCElement.OP070_J_PLC_START);
-        lists.add(OPCElement.OP070_J_PLC_FINISH);
+        lists.add(OPCElement.OP070_F_HEART_BEAT);
+        lists.add(OPCElement.OP070_PLC_REQUST);
 
         //lists.add(OPCElement.OP080_F_HEART_BEAT);
-        lists.add(OPCElement.OP080_J_PLC_START);
-        lists.add(OPCElement.OP080_J_PLC_FINISH);
+        lists.add(OPCElement.OP080_PLC_REQUST);
 
-        //lists.add(OPCElement.OP090_F_HEART_BEAT);
-        lists.add(OPCElement.OP090_J_PLC_START);
-        lists.add(OPCElement.OP090_J_PLC_FINISH);
+        lists.add(OPCElement.OP090_F_HEART_BEAT);
+        lists.add(OPCElement.OP090_PLC_REQUST);
 
-        //lists.add(OPCElement.OP100_F_HEART_BEAT);
-        lists.add(OPCElement.OP100_J_PLC_START);
-        lists.add(OPCElement.OP100_J_PLC_FINISH);
+        lists.add(OPCElement.OP100_F_HEART_BEAT);
+        lists.add(OPCElement.OP100_PLC_REQUST);
 
-        //lists.add(OPCElement.OP110_F_HEART_BEAT);
-        lists.add(OPCElement.OP110_J_PLC_START);
-        lists.add(OPCElement.OP110_J_PLC_FINISH);
+        lists.add(OPCElement.OP110_F_HEART_BEAT);
+        lists.add(OPCElement.OP110_PLC_REQUST);
 
-        //lists.add(OPCElement.OP120_F_HEART_BEAT);
-        lists.add(OPCElement.OP120_J_PLC_START);
-        lists.add(OPCElement.OP120_J_PLC_FINISH);
+        lists.add(OPCElement.OP120_F_HEART_BEAT);
+        lists.add(OPCElement.OP120_PLC_REQUST);
 
         //lists.add(OPCElement.OP120B_F_HEART_BEAT);
-        lists.add(OPCElement.OP120B_J_PLC_START);
-        lists.add(OPCElement.OP120B_J_PLC_FINISH);
+        lists.add(OPCElement.OP120B_PLC_REQUST);
 
-        //lists.add(OPCElement.OP130_F_HEART_BEAT);
-        lists.add(OPCElement.OP130_J_PLC_START);
-        lists.add(OPCElement.OP130_J_PLC_FINISH);
+        lists.add(OPCElement.OP130_F_HEART_BEAT);
+        lists.add(OPCElement.OP130_PLC_REQUST);
 
         //lists.add(OPCElement.OP130B_F_HEART_BEAT);
-        lists.add(OPCElement.OP130B_J_PLC_START);
-        lists.add(OPCElement.OP130B_J_PLC_FINISH);
+        lists.add(OPCElement.OP130B_PLC_REQUST);
 
-        //lists.add(OPCElement.OP140_F_HEART_BEAT);
-        lists.add(OPCElement.OP140_J_PLC_START);
-        lists.add(OPCElement.OP140_J_PLC_FINISH);
+        lists.add(OPCElement.OP140_F_HEART_BEAT);
+        lists.add(OPCElement.OP140_PLC_REQUST);
 
-     /*   lists.add(OPCElement.OP150_F_HEART_BEAT);
-        lists.add(OPCElement.OP150_J_PLC_START);
-        lists.add(OPCElement.OP150_J_PLC_FINISH);*/
+        lists.add(OPCElement.OP150_F_HEART_BEAT);
+        lists.add(OPCElement.OP150_PLC_REQUST);
 
-        //lists.add(OPCElement.OP160_F_HEART_BEAT);
+        lists.add(OPCElement.OP160_F_HEART_BEAT);
+       // lists.add(OPCElement.OP160_PLC_REQUST);
         lists.add(OPCElement.OP160_J_PLC_START);
         lists.add(OPCElement.OP160_J_PLC_FINISH);
 
-        //lists.add(OPCElement.OP170_F_HEART_BEAT);
-        lists.add(OPCElement.OP170_J_PLC_START);
-        lists.add(OPCElement.OP170_J_PLC_FINISH);
+       /* lists.add(OPCElement.OP170_F_HEART_BEAT);*/
+        lists.add(OPCElement.OP170_PLC_REQUST);
 
         /*if(null == stateLists ){
             EquipmentInfoParam equipmentInfoParam = new EquipmentInfoParam();
@@ -275,3 +242,20 @@
     }
 }
 
+/*class HeartBeatTaskThreadPool implements Runnable {
+
+    private HeartBeatServerInterface server;
+
+    public void run() {
+        try {
+            while (GlobalVariable.TERMINATED) {
+                server = new HeartBeatServerInterfaceImpl();
+                server.monitor();
+                Thread.sleep(GlobalVariable.SLEEP_TIME);
+            }
+        }catch(Exception e){
+            e.printStackTrace();
+        }
+    }
+}*/
+
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/InitCallback.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/init/SubscriptionManage.java
similarity index 71%
rename from guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/InitCallback.java
rename to guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/init/SubscriptionManage.java
index 685fa49..13ebf19 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/callback/InitCallback.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/init/SubscriptionManage.java
@@ -1,62 +1,33 @@
-package cn.stylefeng.guns.plcserver.callback;
+package cn.stylefeng.guns.plcserver.init;
 
 
-import cn.stylefeng.guns.modular.bs.collectionParamConf.model.params.CollectionParamConfParam;
-import cn.stylefeng.guns.modular.bs.collectionParamConf.model.result.CollectionParamConfResult;
 import cn.stylefeng.guns.modular.bs.collectionParamConf.service.CollectionParamConfService;
-import cn.stylefeng.guns.modular.bs.equipmentInfo.model.params.EquipmentInfoParam;
-import cn.stylefeng.guns.modular.bs.equipmentInfo.model.result.EquipmentInfoResult;
 import cn.stylefeng.guns.modular.bs.equipmentInfo.service.EquipmentInfoService;
-import cn.stylefeng.guns.modular.bs.locationInfo.model.params.LocationInfoParam;
-import cn.stylefeng.guns.modular.bs.locationInfo.model.result.LocationInfoResult;
 import cn.stylefeng.guns.modular.bs.locationInfo.service.LocationInfoService;
-import cn.stylefeng.guns.modular.cm.paramCollection.model.params.ParamCollectionParam;
 import cn.stylefeng.guns.modular.cm.paramCollection.service.ParamCollectionService;
-import cn.stylefeng.guns.modular.cm.passingStationCollection.model.params.PassingStationCollectionParam;
 import cn.stylefeng.guns.modular.cm.passingStationCollection.service.PassingStationCollectionService;
-import cn.stylefeng.guns.modular.dq.materialTraceability.model.params.MaterialTraceabilityParam;
 import cn.stylefeng.guns.modular.dq.materialTraceability.service.MaterialTraceabilityService;
-import cn.stylefeng.guns.modular.em.equipmentAlarm.model.params.EquipmentAlarmParam;
 import cn.stylefeng.guns.modular.em.equipmentAlarm.service.EquipmentAlarmService;
-import cn.stylefeng.guns.modular.em.equipmentStatus.model.params.EquipmentStatusParam;
-import cn.stylefeng.guns.modular.em.equipmentStatus.model.result.EquipmentStatusResult;
 import cn.stylefeng.guns.modular.em.equipmentStatus.service.EquipmentStatusService;
 import cn.stylefeng.guns.modular.gm.greaseManage.service.GreaseManageService;
-import cn.stylefeng.guns.modular.om.productionOrdeInfo.model.params.ProductionOrdeInfoParam;
-import cn.stylefeng.guns.modular.om.productionOrdeInfo.model.result.ProductionOrdeInfoResult;
 import cn.stylefeng.guns.modular.om.productionOrdeInfo.service.ProductionOrdeInfoService;
-import cn.stylefeng.guns.modular.om.productionOrderBatchInfo.model.params.ProductionOrderBatchInfoParam;
-import cn.stylefeng.guns.modular.om.productionOrderBatchInfo.model.result.ProductionOrderBatchInfoResult;
 import cn.stylefeng.guns.modular.om.productionOrderBatchInfo.service.ProductionOrderBatchInfoService;
-import cn.stylefeng.guns.modular.om.productionOrderRecords.model.params.ProductionOrderRecordsParam;
-import cn.stylefeng.guns.modular.om.productionOrderRecords.model.result.ProductionOrderRecordsResult;
 import cn.stylefeng.guns.modular.om.productionOrderRecords.service.ProductionOrderRecordsService;
-import cn.stylefeng.guns.modular.sc.repairManageInfo.model.params.RepairManageInfoParam;
-import cn.stylefeng.guns.modular.sc.repairManageInfo.model.result.RepairManageInfoResult;
 import cn.stylefeng.guns.modular.sc.repairManageInfo.service.RepairManageInfoService;
-import cn.stylefeng.guns.modular.sc.serialNumbersConf.model.params.SerialNumbersConfParam;
-import cn.stylefeng.guns.modular.sc.serialNumbersConf.model.result.SerialNumbersConfResult;
 import cn.stylefeng.guns.modular.sc.serialNumbersConf.service.SerialNumbersConfService;
+import cn.stylefeng.guns.plcserver.callback.*;
 import cn.stylefeng.guns.plcserver.opc.GlobalVariable;
 import cn.stylefeng.guns.plcserver.opc.OPCElement;
-import cn.stylefeng.guns.plcserver.opc.unit.SFCCodeTool;
-import cn.stylefeng.guns.plcserver.tool.DateTool;
 import cn.stylefeng.guns.plcserver.tool.LogUtil;
 import com.kangaroohy.milo.model.ReadWriteEntity;
 import com.kangaroohy.milo.runner.subscription.SubscriptionCallback;
 import com.kangaroohy.milo.service.MiloService;
-import org.apache.commons.lang3.StringUtils;
 import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-
 @Component
-public class InitCallback implements SubscriptionCallback {
+public class SubscriptionManage implements SubscriptionCallback {
 
     public MiloService miloService;
 
@@ -97,14 +68,14 @@
     private static Logger logger;
     LogUtil logUtil = new LogUtil();
     static {
-        logger = Logger.getLogger(InitCallback.class);
+        logger = Logger.getLogger(SubscriptionManage.class);
     }
 
-    OP010Callback OP010Callback;
-    OP020Callback OP020Callback;
-    OP030Callback OP030Callback;
-    OP040Callback OP040Callback;
-    OP050Callback OP050Callback;
+    cn.stylefeng.guns.plcserver.callback.OP010Callback OP010Callback;
+    cn.stylefeng.guns.plcserver.callback.OP020Callback OP020Callback;
+    cn.stylefeng.guns.plcserver.callback.OP030Callback OP030Callback;
+    cn.stylefeng.guns.plcserver.callback.OP040Callback OP040Callback;
+    cn.stylefeng.guns.plcserver.callback.OP050Callback OP050Callback;
     OP070Callback OP070Callback;
     OP080Callback OP080Callback;
     OP090Callback OP090Callback;
@@ -140,24 +111,24 @@
     EOP090Callback EOP090Callback;
     EOP090BCallback EOP090BCallback;
 
-    StateCallback StateCallback;
+    //StateCallback StateCallback;
 
 
-    public InitCallback(MiloService miloService,
-                        ProductionOrdeInfoService productionOrdeInfoService,
-                        PassingStationCollectionService passingStationCollectionService,
-                        ParamCollectionService paramCollectionService,
-                        CollectionParamConfService collectionParamConfService,
-                        SerialNumbersConfService serialNumbersConfService,
-                        EquipmentStatusService equipmentStatusService,
-                        EquipmentAlarmService equipmentAlarmService,
-                        MaterialTraceabilityService materialTraceabilityService,
-                        EquipmentInfoService equipmentInfoService,
-                        RepairManageInfoService repairManageInfoService,
-                        LocationInfoService locationInfoService,
-                        GreaseManageService greaseManageService,
-                        ProductionOrderRecordsService productionOrderRecordsService,
-                        ProductionOrderBatchInfoService productionOrderBatchInfoService) {
+    public SubscriptionManage(MiloService miloService,
+                              ProductionOrdeInfoService productionOrdeInfoService,
+                              PassingStationCollectionService passingStationCollectionService,
+                              ParamCollectionService paramCollectionService,
+                              CollectionParamConfService collectionParamConfService,
+                              SerialNumbersConfService serialNumbersConfService,
+                              EquipmentStatusService equipmentStatusService,
+                              EquipmentAlarmService equipmentAlarmService,
+                              MaterialTraceabilityService materialTraceabilityService,
+                              EquipmentInfoService equipmentInfoService,
+                              RepairManageInfoService repairManageInfoService,
+                              LocationInfoService locationInfoService,
+                              GreaseManageService greaseManageService,
+                              ProductionOrderRecordsService productionOrderRecordsService,
+                              ProductionOrderBatchInfoService productionOrderBatchInfoService) {
         this.miloService = miloService;
         this.productionOrdeInfoService = productionOrdeInfoService;
         this.passingStationCollectionService = passingStationCollectionService;
@@ -375,11 +346,11 @@
                 repairManageInfoService,locationInfoService,greaseManageService,productionOrderRecordsService,
                 productionOrderBatchInfoService);
 
-        StateCallback = new StateCallback(miloService,productionOrdeInfoService,
+       /* StateCallback = new StateCallback(miloService,productionOrdeInfoService,
                 passingStationCollectionService,paramCollectionService,collectionParamConfService,serialNumbersConfService,
                 equipmentStatusService,equipmentAlarmService,materialTraceabilityService,equipmentInfoService,
                 repairManageInfoService,locationInfoService,greaseManageService,productionOrderRecordsService,
-                productionOrderBatchInfoService);
+                productionOrderBatchInfoService);*/
     }
 
 
@@ -389,13 +360,37 @@
         String ecpStr = "";//寮傚父璁板綍鏍囪
         try {
             if(null != value) {
+
+                if(!GlobalVariable.IS_CLOCK){
+                    System.out.println("----------------------绯荤粺宸茬粡杩囨湡锛岃鑱旂郴绠$悊鍛樿繘琛屽崌绾�----------------------");
+                    System.out.println("----------------------绯荤粺宸茬粡杩囨湡锛岃鑱旂郴绠$悊鍛樿繘琛屽崌绾�----------------------");
+                    System.out.println("----------------------绯荤粺宸茬粡杩囨湡锛岃鑱旂郴绠$悊鍛樿繘琛屽崌绾�----------------------");
+                    System.out.println("----------------------绯荤粺宸茬粡杩囨湡锛岃鑱旂郴绠$悊鍛樿繘琛屽崌绾�----------------------");
+                    return;
+                }
                 //OP010
                 //蹇冭烦
-                if (identifier.equals(OPCElement.OP010_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                if (identifier.equals(OPCElement.OP010_F_HEART_BEAT) && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP010_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.OP010_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        String isRepair = miloService.readFromOpcUa(OPCElement.OP010_P_REPAIR).getValue().toString();//鏄惁杩斾慨
+                        if (isRepair.equals("true")) {
+                            OP010Callback.handleRepair();
+                        } else {
+                            OP010Callback.handleOrder();
+                        }
+                    }
+                    if("2".equals(value.toString())){
+                        OP010Callback.handleFinsh();
+                        OP010Callback.handleMaterial();
+                    }
+                }
+
+
+               /* //PLC杩涚珯
                 else if (identifier.equals(OPCElement.OP010_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     String isRepair = miloService.readFromOpcUa(OPCElement.OP010_P_REPAIR).getValue().toString();//鏄惁杩斾慨
                     if (isRepair.equals("true")) {
@@ -408,15 +403,25 @@
                 else if (identifier.equals(OPCElement.OP010_J_PLC_FINISH) && null != value && "true".equals(value.toString())) {
                     OP010Callback.handleFinsh();
                     //OP010Callback.handleMaterial();
-                }
+                }*/
 
                 //OP020
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.OP020_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.OP020_F_HEART_BEAT)  && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP020_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.OP020_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        OP020Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        OP020Callback.handleFinsh();
+                        OP020Callback.handleInfo();
+                        OP020Callback.handleMaterial();
+                    }
+                }
+              /*  //PLC杩涚珯
                 else if (identifier.equals(OPCElement.OP020_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     OP020Callback.handleOrder();
                 }
@@ -426,15 +431,26 @@
                     OP020Callback.handleInfo();
                     //OP020Callback.handleMaterial();
 
-                }
+                }*/
 
                 //OP030
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.OP030_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.OP030_F_HEART_BEAT)  && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP030_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+
+                else if(identifier.equals(OPCElement.OP030_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        OP030Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        OP030Callback.handleFinsh();
+                        OP030Callback.handleMaterial();
+                    }
+                }
+
+            /*    //PLC杩涚珯
                 else if (identifier.equals(OPCElement.OP030_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     OP030Callback.handleOrder();
                 }
@@ -444,15 +460,27 @@
                     OP030Callback.handleInfo();
                     //OP030Callback.handleMaterial();
 
-                }
+                }*/
 
                 //OP040
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.OP040_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.OP040_F_HEART_BEAT)  && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP040_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+
+                else if(identifier.equals(OPCElement.OP040_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        OP040Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        OP040Callback.handleFinsh();
+                        OP040Callback.handleInfo();
+                        OP040Callback.handleMaterial();
+                    }
+                }
+
+             /*   //PLC杩涚珯
                 else if (identifier.equals(OPCElement.OP040_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     OP040Callback.handleOrder();
                 }
@@ -462,15 +490,29 @@
                     OP040Callback.handleInfo();
                     //OP040Callback.handleMaterial();
 
-                }
+                }*/
 
                 //OP050
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.OP050_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.OP050_F_HEART_BEAT)  && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP050_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+
+                else if(identifier.equals(OPCElement.OP050_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        OP050Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        OP050Callback.handleFinsh();
+                        OP050Callback.handleInfo();
+                        OP050Callback.handleMaterial();
+
+
+                    }
+                }
+
+            /*    //PLC杩涚珯
                 else if (identifier.equals(OPCElement.OP050_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     OP050Callback.handleOrder();
                 }
@@ -479,15 +521,27 @@
                     OP050Callback.handleFinsh();
                     OP050Callback.handleInfo();
                     //OP050Callback.handleMaterial();
-                }
+                }*/
 
                 //OP070
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.OP070_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.OP070_F_HEART_BEAT)  && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP070_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+
+                else if(identifier.equals(OPCElement.OP070_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        OP070Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        OP070Callback.handleFinsh();
+                        OP070Callback.handleInfo();
+                        OP070Callback.handleMaterial();
+                    }
+                }
+
+            /*    //PLC杩涚珯
                 else if (identifier.equals(OPCElement.OP070_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     OP070Callback.handleOrder();
                 }
@@ -496,15 +550,29 @@
                     OP070Callback.handleFinsh();
                     OP070Callback.handleMaterial();
                     //OP070Callback.handleInfo();
-                }
+                }*/
 
                 //OP080
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.OP080_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.OP080_F_HEART_BEAT) && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP080_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.OP080_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        String isRepair = miloService.readFromOpcUa(OPCElement.OP080_P_REPAIR).getValue().toString();//鏄惁杩斾慨
+                        if (isRepair.equals("true")) {
+                            OP080Callback.handleRepair();
+                        } else {
+                            OP080Callback.handleOrder();
+                        }
+                    }
+                    if("2".equals(value.toString())){
+                        OP080Callback.handleFinsh();
+                        OP080Callback.handleMaterial();
+                    }
+                }
+                /*//PLC杩涚珯
                 else if (identifier.equals(OPCElement.OP080_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     String isRepair = miloService.readFromOpcUa(OPCElement.OP080_P_REPAIR).getValue().toString();//鏄惁杩斾慨
                     if (isRepair.equals("true")) {
@@ -519,15 +587,25 @@
                     OP080Callback.handleInfo();
                     //OP080Callback.handleMaterial();
 
-                }
+                }*/
 
                 //OP090
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.OP090_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.OP090_F_HEART_BEAT)  && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP090_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.OP090_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        OP090Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        OP090Callback.handleFinsh();
+                        OP090Callback.handleInfo();
+                        OP090Callback.handleMaterial();
+                    }
+                }
+              /*  //PLC杩涚珯
                 else if (identifier.equals(OPCElement.OP090_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     OP090Callback.handleOrder();
                 }
@@ -536,17 +614,25 @@
                     OP090Callback.handleFinsh();
                     OP090Callback.handleInfo();
                     //OP090Callback.handleMaterial();
-
-
-                }
+                }*/
 
                 //OP100
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.OP100_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.OP100_F_HEART_BEAT)  && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP100_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.OP100_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        OP100Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        OP100Callback.handleFinsh();
+                        OP100Callback.handleInfo();
+                        OP100Callback.handleMaterial();
+                    }
+                }
+              /*  //PLC杩涚珯
                 else if (identifier.equals(OPCElement.OP100_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     OP100Callback.handleOrder();
                 }
@@ -555,17 +641,24 @@
                     OP100Callback.handleFinsh();
                     OP100Callback.handleInfo();
                     //OP100Callback.handleMaterial();
-
-
-                }
+                }*/
 
                 //OP110
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.OP110_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.OP110_F_HEART_BEAT)  && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP110_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.OP110_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        OP110Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        OP110Callback.handleFinsh();
+                        OP110Callback.handleMaterial();
+                    }
+                }
+               /* //PLC杩涚珯
                 else if (identifier.equals(OPCElement.OP110_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     OP110Callback.handleOrder();
                 }
@@ -575,15 +668,25 @@
                     OP110Callback.handleInfo();
                     //OP110Callback.handleMaterial();
 
-                }
+                }*/
 
                 //OP120
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.OP120_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.OP120_F_HEART_BEAT)  && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP120_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.OP120_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        OP120Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        OP120Callback.handleFinsh();
+                        OP120Callback.handleInfo();
+                        OP120Callback.handleMaterial();
+                    }
+                }
+               /* //PLC杩涚珯
                 else if (identifier.equals(OPCElement.OP120_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     OP120Callback.handleOrder();
                 }
@@ -593,15 +696,24 @@
                     OP120Callback.handleInfo();
                     //OP120Callback.handleMaterial();
 
-                }
+                }*/
 
                 //OP120B
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.OP120B_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.OP120B_F_HEART_BEAT) && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP120B_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.OP120B_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        OP120BCallback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        OP120BCallback.handleFinsh();
+                        OP120BCallback.handleInfo();
+                    }
+                }
+              /*  //PLC杩涚珯
                 else if (identifier.equals(OPCElement.OP120B_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     OP120BCallback.handleOrder();
                 }
@@ -610,15 +722,25 @@
                     OP120BCallback.handleFinsh();
                     //OP120BCallback.handleMaterial();
                     //OP120BCallback.handleInfo();
-                }
+                }*/
 
                 //OP130
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.OP130_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.OP130_F_HEART_BEAT)  && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP130_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.OP130_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        OP130Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        OP130Callback.handleFinsh();
+                        OP130Callback.handleInfo();
+                        OP130Callback.handleMaterial();
+                    }
+                }
+               /* //PLC杩涚珯
                 else if (identifier.equals(OPCElement.OP130_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     OP130Callback.handleOrder();
                 }
@@ -628,15 +750,26 @@
                     OP130Callback.handleInfo();
                     //OP130Callback.handleMaterial();
 
-                }
+                }*/
 
                 //OP130B
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.OP130B_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.OP130B_F_HEART_BEAT)  && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP130B_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+
+                else if(identifier.equals(OPCElement.OP130B_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        OP130BCallback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        OP130BCallback.handleFinsh();
+                        OP130BCallback.handleInfo();
+                    }
+                }
+
+                /*//PLC杩涚珯
                 else if (identifier.equals(OPCElement.OP130B_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     OP130BCallback.handleOrder();
                 }
@@ -646,15 +779,25 @@
                     OP130BCallback.handleInfo();
                     //OP130BCallback.handleMaterial();
 
-                }
+                }*/
 
                 //OP140
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.OP140_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.OP140_F_HEART_BEAT)  && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP140_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.OP140_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        OP140Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        OP140Callback.handleFinsh();
+                        OP140Callback.handleInfo();
+                        OP140Callback.handleMaterial();
+                    }
+                }
+                /*//PLC杩涚珯
                 else if (identifier.equals(OPCElement.OP140_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     OP140Callback.handleOrder();
                 }
@@ -664,16 +807,26 @@
                     OP140Callback.handleInfo();
                     //OP140Callback.handleMaterial();
 
-                }
+                }*/
 
                 //OP150
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.OP150_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.OP150_F_HEART_BEAT)  && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP150_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
+                else if(identifier.equals(OPCElement.OP150_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        OP150Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        OP150Callback.handleFinsh();
+                        OP150Callback.handleInfo();
+                        OP150Callback.handleMaterial();
+                    }
+                }
                 //PLC杩涚珯
-                else if (identifier.equals(OPCElement.OP150_J_PLC_START) && null != value && "true".equals(value.toString())) {
+                /*else if (identifier.equals(OPCElement.OP150_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     OP150Callback.handleOrder();
                 }
                 //PLC鍑虹珯
@@ -681,33 +834,49 @@
                     OP150Callback.handleFinsh();
                     OP150Callback.handleMaterial();
                     //OP150Callback.handleInfo();
-                }
+                }*/
 
                 //OP160
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.OP160_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.OP160_F_HEART_BEAT)  && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP160_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
+               /* else if(identifier.equals(OPCElement.OP160_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        OP160Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        OP160Callback.handleFinsh();
+                    }
+                }*/
                 //PLC杩涚珯
-                else if (identifier.equals(OPCElement.OP160_J_PLC_START) && null != value && "true".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.OP160_J_PLC_START)  && "true".equals(value.toString())) {
                     OP160Callback.handleOrder();
                 }
                 //PLC鍑虹珯
-                else if (identifier.equals(OPCElement.OP160_J_PLC_FINISH) && null != value && "true".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.OP160_J_PLC_FINISH)  && "true".equals(value.toString())) {
                     OP160Callback.handleFinsh();
-                    //OP160Callback.handleMaterial();
-                    OP160Callback.handleInfo();
+                    OP160Callback.handleMaterial();
+                    //OP160Callback.handleInfo();
                 }
 
                 //OP170
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.OP170_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.OP170_F_HEART_BEAT)  && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP170_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
+                else if(identifier.equals(OPCElement.OP170_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        OP170Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        OP170Callback.handleFinsh();
+                    }
+                }
                 //PLC杩涚珯
-                else if (identifier.equals(OPCElement.OP170_J_PLC_START) && null != value && "true".equals(value.toString())) {
+               /* else if (identifier.equals(OPCElement.OP170_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     OP170Callback.handleOrder();
                 }
                 //PLC鍑虹珯
@@ -715,38 +884,57 @@
                     OP170Callback.handleFinsh();
                     //OP170Callback.handleMaterial();
                     //OP170Callback.handleInfo();
-                }
+                }*/
 
                 //BOP010
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.BOP010_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.BOP010_F_HEART_BEAT) && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.BOP010_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
-                else if (identifier.equals(OPCElement.BOP010_J_PLC_START) && null != value && "true".equals(value.toString())) {
-                    String isRepair = miloService.readFromOpcUa(OPCElement.BOP010_P_REPAIR).getValue().toString();//鏄惁杩斾慨
-                    if (isRepair.equals("true")) {
-                        BOP010Callback.handleRepair();
-                    } else {
-                        BOP010Callback.handleOrder();
+                else if(identifier.equals(OPCElement.BOP010_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        String isRepair = miloService.readFromOpcUa(OPCElement.BOP010_P_REPAIR).getValue().toString();//鏄惁杩斾慨
+                        if (isRepair.equals("true")) {
+                            BOP010Callback.handleRepair();
+                        } else {
+                            BOP010Callback.handleOrder();
+                        }
                     }
+                    if("2".equals(value.toString())){
+                        BOP010Callback.handleFinsh();
+                        BOP010Callback.handleMaterial();
+                    }
+                }
+              /*  //PLC杩涚珯
+                else if (identifier.equals(OPCElement.BOP010_J_PLC_START) && null != value && "true".equals(value.toString())) {
+
                 }
                 //PLC鍑虹珯
                 else if (identifier.equals(OPCElement.BOP010_J_PLC_FINISH) && null != value && "true".equals(value.toString())) {
                     BOP010Callback.handleFinsh();
                     //BOP010Callback.handleMaterial();
                     //BOP010Callback.handleInfo();
-                }
+                }*/
 
 
                 //BOP020
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.BOP020_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.BOP020_F_HEART_BEAT) && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.BOP020_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.BOP020_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        BOP020Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        BOP020Callback.handleFinsh();
+                        BOP020Callback.handleInfo();
+                        BOP020Callback.handleMaterial();
+                    }
+                }
+             /*   //PLC杩涚珯
                 else if (identifier.equals(OPCElement.BOP020_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     BOP020Callback.handleOrder();
                 }
@@ -755,16 +943,27 @@
                     BOP020Callback.handleFinsh();
                     BOP020Callback.handleInfo();
                     //BOP020Callback.handleMaterial();
-                }
+                }*/
 
 
                 //BOP030
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.BOP030_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.BOP030_F_HEART_BEAT)  && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.BOP030_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+
+                else if(identifier.equals(OPCElement.BOP030_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        BOP030Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        BOP030Callback.handleFinsh();
+                        BOP030Callback.handleMaterial();
+                    }
+                }
+
+             /*   //PLC杩涚珯
                 else if (identifier.equals(OPCElement.BOP030_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     BOP030Callback.handleOrder();
                 }
@@ -774,15 +973,23 @@
                     BOP030Callback.handleInfo();
                     //BOP030Callback.handleMaterial();
 
-                }
+                }*/
 
                 //BOP030B
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.BOP030B_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.BOP030B_F_HEART_BEAT)  && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.BOP030B_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.BOP030B_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        BOP030BCallback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        BOP030BCallback.handleFinsh();
+                    }
+                }
+           /*     //PLC杩涚珯
                 else if (identifier.equals(OPCElement.BOP030B_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     BOP030BCallback.handleOrder();
                 }
@@ -791,15 +998,24 @@
                     BOP030BCallback.handleFinsh();
                     //BOP030BCallback.handleMaterial();
                     //BOP030BCallback.handleInfo();
-                }
+                }*/
 
                 //BOP040
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.BOP040_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.BOP040_F_HEART_BEAT)  && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.BOP040_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.BOP040_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        BOP040Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        BOP040Callback.handleFinsh();
+                        BOP040Callback.handleMaterial();
+                    }
+                }
+               /* //PLC杩涚珯
                 else if (identifier.equals(OPCElement.BOP040_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     BOP040Callback.handleOrder();
                 }
@@ -809,15 +1025,23 @@
                     BOP040Callback.handleInfo();
                     //BOP040Callback.handleMaterial();
 
-                }
+                }*/
 
                 //BOP040B
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.BOP040B_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.BOP040B_F_HEART_BEAT) && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.BOP040B_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.BOP040B_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        BOP040BCallback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        BOP040BCallback.handleFinsh();
+                    }
+                }
+                /*//PLC杩涚珯
                 else if (identifier.equals(OPCElement.BOP040B_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     BOP040BCallback.handleOrder();
                 }
@@ -826,16 +1050,30 @@
                     BOP040BCallback.handleFinsh();
                     // BOP040BCallback.handleMaterial();
                     //BOP040BCallback.handleInfo();
-                }
+                }*/
 
 
                 //COP010
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.COP010_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.COP010_F_HEART_BEAT)  && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.COP010_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.COP010_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        String isRepair = miloService.readFromOpcUa(OPCElement.COP010_P_REPAIR).getValue().toString();//鏄惁杩斾慨
+                        if (isRepair.equals("true")) {
+                            COP010Callback.handleRepair();
+                        } else {
+                            COP010Callback.handleOrder();
+                        }
+                    }
+                    if("2".equals(value.toString())){
+                        COP010Callback.handleFinsh();
+                        COP010Callback.handleMaterial();
+                    }
+                }
+               /* //PLC杩涚珯
                 else if (identifier.equals(OPCElement.COP010_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     String isRepair = miloService.readFromOpcUa(OPCElement.COP010_P_REPAIR).getValue().toString();//鏄惁杩斾慨
                     if (isRepair.equals("true")) {
@@ -849,16 +1087,26 @@
                     COP010Callback.handleFinsh();
                     //COP010Callback.handleMaterial();
                     //COP010Callback.handleInfo();
-                }
+                }*/
 
 
                 //COP020
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.COP020_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.COP020_F_HEART_BEAT)  && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.COP020_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.COP020_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        COP020Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        COP020Callback.handleFinsh();
+                        COP020Callback.handleInfo();
+                        COP020Callback.handleMaterial();
+                    }
+                }
+              /*  //PLC杩涚珯
                 else if (identifier.equals(OPCElement.COP020_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     COP020Callback.handleOrder();
                 }
@@ -868,16 +1116,26 @@
                     COP020Callback.handleInfo();
                     //COP020Callback.handleMaterial();
 
-                }
+                }*/
 
 
                 //COP030
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.COP030_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.COP030_F_HEART_BEAT)  && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.COP030_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.COP030_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        COP030Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        COP030Callback.handleFinsh();
+                        COP030Callback.handleInfo();
+                        COP030Callback.handleMaterial();
+                    }
+                }
+               /* //PLC杩涚珯
                 else if (identifier.equals(OPCElement.COP030_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     COP030Callback.handleOrder();
                 }
@@ -887,16 +1145,30 @@
                     COP030Callback.handleInfo();
                     //COP030Callback.handleMaterial();
 
-                }
+                }*/
 
 
                 //DOP010
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.DOP010_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.DOP010_F_HEART_BEAT)  && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.DOP010_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.DOP010_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        String isRepair = miloService.readFromOpcUa(OPCElement.DOP010_P_REPAIR).getValue().toString();//鏄惁杩斾慨
+                        if (isRepair.equals("true")) {
+                            DOP010Callback.handleRepair();
+                        } else {
+                            DOP010Callback.handleOrder();
+                        }
+                    }
+                    if("2".equals(value.toString())){
+                        DOP010Callback.handleFinsh();
+                        DOP010Callback.handleMaterial();
+                    }
+                }
+                /*//PLC杩涚珯
                 else if (identifier.equals(OPCElement.DOP010_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     String isRepair = miloService.readFromOpcUa(OPCElement.DOP010_P_REPAIR).getValue().toString();//鏄惁杩斾慨
                     if (isRepair.equals("true")) {
@@ -910,16 +1182,25 @@
                     DOP010Callback.handleFinsh();
                     DOP010Callback.handleMaterial();
                     //DOP010Callback.handleInfo();
-                }
+                }*/
 
 
                 //DOP020
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.DOP020_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.DOP020_F_HEART_BEAT) && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.DOP020_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.DOP020_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        DOP020Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        DOP020Callback.handleFinsh();
+                        DOP020Callback.handleMaterial();
+                    }
+                }
+                /*//PLC杩涚珯
                 else if (identifier.equals(OPCElement.DOP020_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     DOP020Callback.handleOrder();
                 }
@@ -929,15 +1210,24 @@
                     DOP020Callback.handleInfo();
                     //DOP020Callback.handleMaterial();
 
-                }
+                }*/
 
                 //EOP010
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.EOP010_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.EOP010_F_HEART_BEAT) && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.EOP010_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.EOP010_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        EOP010Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        EOP010Callback.handleFinsh();
+                        EOP010Callback.handleMaterial();
+                    }
+                }
+                /*//PLC杩涚珯
                 else if (identifier.equals(OPCElement.EOP010_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     EOP010Callback.handleOrder();
                 }
@@ -947,14 +1237,23 @@
                     EOP010Callback.handleInfo();
                     //EOP010Callback.handleMaterial();
 
-                }
+                }*/
                 //EOP020
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.EOP020_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.EOP020_F_HEART_BEAT)  && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.EOP020_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.EOP020_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        EOP020Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        EOP020Callback.handleFinsh();
+                        EOP020Callback.handleMaterial();
+                    }
+                }
+               /* //PLC杩涚珯
                 else if (identifier.equals(OPCElement.EOP020_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     EOP020Callback.handleOrder();
                 }
@@ -964,15 +1263,24 @@
                     EOP020Callback.handleInfo();
                     //EOP020Callback.handleMaterial();
 
-                }
+                }*/
 
                 //EOP030
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.EOP030_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.EOP030_F_HEART_BEAT) && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.EOP030_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.EOP030_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        EOP030Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        EOP030Callback.handleFinsh();
+                        EOP030Callback.handleMaterial();
+                    }
+                }
+               /* //PLC杩涚珯
                 else if (identifier.equals(OPCElement.EOP030_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     EOP030Callback.handleOrder();
                 }
@@ -982,15 +1290,25 @@
                     EOP030Callback.handleInfo();
                     //EOP030Callback.handleMaterial();
 
-                }
+                }*/
 
                 //EOP040
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.EOP040_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.EOP040_F_HEART_BEAT)  && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.EOP040_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.EOP040_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        EOP040Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        EOP040Callback.handleFinsh();
+                        EOP040Callback.handleInfo();
+                        EOP040Callback.handleMaterial();
+                    }
+                }
+              /*  //PLC杩涚珯
                 else if (identifier.equals(OPCElement.EOP040_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     EOP040Callback.handleOrder();
                 }
@@ -1000,15 +1318,25 @@
                     EOP040Callback.handleInfo();
                     //EOP040Callback.handleMaterial();
 
-                }
+                }*/
 
                 //EOP050
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.EOP050_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.EOP050_F_HEART_BEAT) && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.EOP050_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.EOP050_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        EOP050Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        EOP050Callback.handleFinsh();
+                        EOP050Callback.handleInfo();
+                        EOP050Callback.handleMaterial();
+                    }
+                }
+                /*//PLC杩涚珯
                 else if (identifier.equals(OPCElement.EOP050_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     EOP050Callback.handleOrder();
                 }
@@ -1018,15 +1346,24 @@
                     EOP050Callback.handleInfo();
                     //EOP050Callback.handleMaterial();
 
-                }
+                }*/
 
                 //EOP060
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.EOP060_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.EOP060_F_HEART_BEAT) && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.EOP060_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.EOP060_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        EOP060Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        EOP060Callback.handleFinsh();
+                        EOP060Callback.handleMaterial();
+                    }
+                }
+               /* //PLC杩涚珯
                 else if (identifier.equals(OPCElement.EOP060_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     EOP060Callback.handleOrder();
                 }
@@ -1036,15 +1373,24 @@
                     EOP060Callback.handleInfo();
                     //EOP060Callback.handleMaterial();
 
-                }
+                }*/
 
                 //EOP070
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.EOP070_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.EOP070_F_HEART_BEAT)  && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.EOP070_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.EOP070_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        EOP070Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        EOP070Callback.handleFinsh();
+                        EOP070Callback.handleMaterial();
+                    }
+                }
+               /* //PLC杩涚珯
                 else if (identifier.equals(OPCElement.EOP070_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     EOP070Callback.handleOrder();
                 }
@@ -1054,15 +1400,25 @@
                     EOP070Callback.handleInfo();
                     //EOP070Callback.handleMaterial();
 
-                }
+                }*/
 
                 //EOP080
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.EOP080_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.EOP080_F_HEART_BEAT) && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.EOP080_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.EOP080_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        EOP080Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        EOP080Callback.handleFinsh();
+                        EOP080Callback.handleInfo();
+                        EOP080Callback.handleMaterial();
+                    }
+                }
+               /* //PLC杩涚珯
                 else if (identifier.equals(OPCElement.EOP080_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     EOP080Callback.handleOrder();
                 }
@@ -1072,15 +1428,24 @@
                     EOP080Callback.handleInfo();
                     //EOP080Callback.handleMaterial();
 
-                }
+                }*/
 
                 //EOP090
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.EOP090_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.EOP090_F_HEART_BEAT)  && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.EOP090_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.EOP090_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        EOP090Callback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        EOP090Callback.handleFinsh();
+                        EOP090Callback.handleMaterial();
+                    }
+                }
+               /* //PLC杩涚珯
                 else if (identifier.equals(OPCElement.EOP090_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     EOP090Callback.handleOrder();
                 }
@@ -1090,15 +1455,23 @@
                     EOP090Callback.handleInfo();
                     //EOP090Callback.handleMaterial();
 
-                }
+                }*/
 
                 //EOP090B
                 //蹇冭烦
-                else if (identifier.equals(OPCElement.EOP090B_F_HEART_BEAT) && null != value && "false".equals(value.toString())) {
+                else if (identifier.equals(OPCElement.EOP090B_F_HEART_BEAT)  && "false".equals(value.toString())) {
                     ReadWriteEntity entity = new ReadWriteEntity(OPCElement.EOP090B_F_HEART_BEAT, true);
                     miloService.writeToOpcUa(entity);
                 }
-                //PLC杩涚珯
+                else if(identifier.equals(OPCElement.EOP090B_PLC_REQUST) ){
+                    if("1".equals(value.toString())){
+                        EOP090BCallback.handleOrder();
+                    }
+                    if("2".equals(value.toString())){
+                        EOP090BCallback.handleFinsh();
+                    }
+                }
+               /* //PLC杩涚珯
                 else if (identifier.equals(OPCElement.EOP090B_J_PLC_START) && null != value && "true".equals(value.toString())) {
                     EOP090BCallback.handleOrder();
                 }
@@ -1107,7 +1480,7 @@
                     EOP090BCallback.handleFinsh();
                     EOP090BCallback.handleMaterial();
                     //EOP090BCallback.handleInfo();
-                }
+                }*/
 
                /* else if (identifier.contains("STATE") && null != value) {
                     EquipmentInfoParam equipmentInfoParam = new EquipmentInfoParam();
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/opc/GlobalVariable.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/opc/GlobalVariable.java
index 1b7d5a4..ed307e3 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/opc/GlobalVariable.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/opc/GlobalVariable.java
@@ -5,11 +5,14 @@
 
 public class GlobalVariable {
 
-    public static boolean TERMINATED = false;
+    public static boolean TERMINATED = true;
+
+
+    public static boolean IS_CLOCK = true;
 
 //    public static boolean TERMINATED = true;
 
-    public static int SLEEP_TIME = 1000;
+    public static int SLEEP_TIME = 1500;
 
     public static int HEART_MAX_COUNT = 10;
 
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/opc/OPCElement.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/opc/OPCElement.java
index 897201f..c0cf7f6 100644
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/opc/OPCElement.java
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/opc/OPCElement.java
@@ -12,6 +12,9 @@
     public static final String OP010_ITEM = "OP.OP010.";//
     public static final String OP010_F_HEART_BEAT = OP010_ITEM + "F_HEART_BEAT";//蹇冭烦
 
+    public static final String OP010_PLC_REQUST = OP010_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
+
+
     public static final String OP010_J_PLC_START = OP010_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String OP010_J_PC_WRITE_ORDER = OP010_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String OP010_J_PLC_FINISH = OP010_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -35,6 +38,8 @@
     public static final String OP020_ITEM = "OP.OP020.";//
     public static final String OP020_F_HEART_BEAT = OP020_ITEM + "F_HEART_BEAT";//蹇冭烦
 
+    public static final String OP020_PLC_REQUST = OP020_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
+
     public static final String OP020_J_PLC_START = OP020_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String OP020_J_PC_WRITE_ORDER = OP020_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String OP020_J_PLC_FINISH = OP020_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -52,6 +57,8 @@
     public static final String OP030_ITEM = "OP.OP030.";//
     public static final String OP030_F_HEART_BEAT = OP030_ITEM + "F_HEART_BEAT";//蹇冭烦
 
+    public static final String OP030_PLC_REQUST = OP030_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
+
     public static final String OP030_J_PLC_START = OP030_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String OP030_J_PC_WRITE_ORDER = OP030_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String OP030_J_PLC_FINISH = OP030_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -68,7 +75,7 @@
      */
     public static final String OP040_ITEM = "OP.OP040.";//
     public static final String OP040_F_HEART_BEAT = OP040_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String OP040_PLC_REQUST = OP040_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String OP040_J_PLC_START = OP040_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String OP040_J_PC_WRITE_ORDER = OP040_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String OP040_J_PLC_FINISH = OP040_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -85,7 +92,7 @@
      */
     public static final String OP050_ITEM = "OP.OP050.";//
     public static final String OP050_F_HEART_BEAT = OP050_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String OP050_PLC_REQUST = OP050_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String OP050_J_PLC_START = OP050_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String OP050_J_PC_WRITE_ORDER = OP050_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String OP050_J_PLC_FINISH = OP050_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -108,7 +115,7 @@
      */
     public static final String OP070_ITEM = "OP.OP070.";//
     public static final String OP070_F_HEART_BEAT = OP070_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String OP070_PLC_REQUST = OP070_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String OP070_J_PLC_START = OP070_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String OP070_J_PC_WRITE_ORDER = OP070_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String OP070_J_PLC_FINISH = OP070_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -125,7 +132,7 @@
      */
     public static final String OP080_ITEM = "OP.OP080.";//涓�70宸ヤ綅ip鐩稿悓
     public static final String OP080_F_HEART_BEAT = OP080_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String OP080_PLC_REQUST = OP080_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String OP080_J_PLC_START = OP080_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String OP080_J_PC_WRITE_ORDER = OP080_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String OP080_J_PLC_FINISH = OP080_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -145,7 +152,7 @@
      */
     public static final String OP090_ITEM = "OP.OP090.";//
     public static final String OP090_F_HEART_BEAT = OP090_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String OP090_PLC_REQUST = OP090_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String OP090_J_PLC_START = OP090_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String OP090_J_PC_WRITE_ORDER = OP090_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String OP090_J_PLC_FINISH = OP090_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -163,7 +170,7 @@
      */
     public static final String OP100_ITEM = "OP.OP100.";//
     public static final String OP100_F_HEART_BEAT = OP100_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String OP100_PLC_REQUST = OP100_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String OP100_J_PLC_START = OP100_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String OP100_J_PC_WRITE_ORDER = OP100_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String OP100_J_PLC_FINISH = OP100_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -180,7 +187,7 @@
      */
     public static final String OP110_ITEM = "OP.OP110.";//
     public static final String OP110_F_HEART_BEAT = OP110_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String OP110_PLC_REQUST = OP110_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String OP110_J_PLC_START = OP110_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String OP110_J_PC_WRITE_ORDER = OP110_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String OP110_J_PLC_FINISH = OP110_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -197,7 +204,7 @@
      */
     public static final String OP120_ITEM = "OP.OP120.";//
     public static final String OP120_F_HEART_BEAT = OP120_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String OP120_PLC_REQUST = OP120_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String OP120_J_PLC_START = OP120_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String OP120_J_PC_WRITE_ORDER = OP120_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String OP120_J_PLC_FINISH = OP120_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -214,7 +221,7 @@
      */
     public static final String OP120B_ITEM = "OP.OP120B.";//
     public static final String OP120B_F_HEART_BEAT = OP120B_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String OP120B_PLC_REQUST = OP120B_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String OP120B_J_PLC_START = OP120B_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String OP120B_J_PC_WRITE_ORDER = OP120B_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String OP120B_J_PLC_FINISH = OP120B_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -232,7 +239,7 @@
      */
     public static final String OP130_ITEM = "OP.OP130.";//
     public static final String OP130_F_HEART_BEAT = OP130_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String OP130_PLC_REQUST = OP130_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String OP130_J_PLC_START = OP130_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String OP130_J_PC_WRITE_ORDER = OP130_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String OP130_J_PLC_FINISH = OP130_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -250,7 +257,7 @@
      */
     public static final String OP130B_ITEM = "OP.OP130B.";//
     public static final String OP130B_F_HEART_BEAT = OP130B_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String OP130B_PLC_REQUST = OP130B_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String OP130B_J_PLC_START = OP130B_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String OP130B_J_PC_WRITE_ORDER = OP130B_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String OP130B_J_PLC_FINISH = OP130B_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -267,7 +274,7 @@
      */
     public static final String OP140_ITEM = "OP.OP140.";//
     public static final String OP140_F_HEART_BEAT = OP140_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String OP140_PLC_REQUST = OP140_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String OP140_J_PLC_START = OP140_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String OP140_J_PC_WRITE_ORDER = OP140_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String OP140_J_PLC_FINISH = OP140_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -284,7 +291,7 @@
      */
     public static final String OP150_ITEM = "OP.OP150.";//
     public static final String OP150_F_HEART_BEAT = OP150_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String OP150_PLC_REQUST = OP150_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String OP150_J_PLC_START = OP150_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String OP150_J_PC_WRITE_ORDER = OP150_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String OP150_J_PLC_FINISH = OP150_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -301,7 +308,7 @@
      */
     public static final String OP160_ITEM = "OP.OP160.";//
     public static final String OP160_F_HEART_BEAT = OP160_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String OP160_PLC_REQUST = OP160_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String OP160_J_PLC_START = OP160_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String OP160_J_PC_WRITE_ORDER = OP160_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String OP160_J_PLC_FINISH = OP160_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -318,7 +325,7 @@
      */
     public static final String OP170_ITEM = "OP.OP170.";//
     public static final String OP170_F_HEART_BEAT = OP170_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String OP170_PLC_REQUST = OP170_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String OP170_J_PLC_START = OP170_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String OP170_J_PC_WRITE_ORDER = OP170_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String OP170_J_PLC_FINISH = OP170_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -335,7 +342,7 @@
      */
     public static final String COP010_ITEM = "COP.COP010.";//
     public static final String COP010_F_HEART_BEAT = COP010_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String COP010_PLC_REQUST = COP010_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String COP010_J_PLC_START = COP010_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String COP010_J_PC_WRITE_ORDER = COP010_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String COP010_J_PLC_FINISH = COP010_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -355,7 +362,7 @@
      */
     public static final String COP020_ITEM = "COP.COP020.";//COP
     public static final String COP020_F_HEART_BEAT = COP020_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String COP020_PLC_REQUST = COP020_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String COP020_J_PLC_START = COP020_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String COP020_J_PC_WRITE_ORDER = COP020_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String COP020_J_PLC_FINISH = COP020_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -372,7 +379,7 @@
      */
     public static final String COP030_ITEM = "COP.COP030.";//
     public static final String COP030_F_HEART_BEAT = COP030_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String COP030_PLC_REQUST = COP030_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String COP030_J_PLC_START = COP030_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String COP030_J_PC_WRITE_ORDER = COP030_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String COP030_J_PLC_FINISH = COP030_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -389,7 +396,7 @@
      */
     public static final String BOP010_ITEM = "BOP.BOP010.";//
     public static final String BOP010_F_HEART_BEAT = BOP010_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String BOP010_PLC_REQUST = BOP010_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String BOP010_J_PLC_START = BOP010_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String BOP010_J_PC_WRITE_ORDER = BOP010_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String BOP010_J_PLC_FINISH = BOP010_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -410,7 +417,7 @@
      */
     public static final String BOP020_ITEM = "BOP.BOP020.";//
     public static final String BOP020_F_HEART_BEAT = BOP020_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String BOP020_PLC_REQUST = BOP020_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String BOP020_J_PLC_START = BOP020_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String BOP020_J_PC_WRITE_ORDER = BOP020_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String BOP020_J_PLC_FINISH = BOP020_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -427,7 +434,7 @@
      */
     public static final String BOP030_ITEM = "BOP.BOP030.";//
     public static final String BOP030_F_HEART_BEAT = BOP030_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String BOP030_PLC_REQUST = BOP030_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String BOP030_J_PLC_START = BOP030_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String BOP030_J_PC_WRITE_ORDER = BOP030_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String BOP030_J_PLC_FINISH = BOP030_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -447,7 +454,7 @@
      */
     public static final String BOP030B_ITEM = "BOP.BOP030B.";//
     public static final String BOP030B_F_HEART_BEAT = BOP030B_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String BOP030B_PLC_REQUST = BOP030B_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String BOP030B_J_PLC_START = BOP030B_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String BOP030B_J_PC_WRITE_ORDER = BOP030B_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String BOP030B_J_PLC_FINISH = BOP030B_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -464,7 +471,7 @@
      */
     public static final String BOP040_ITEM = "BOP.BOP040.";//
     public static final String BOP040_F_HEART_BEAT = BOP040_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String BOP040_PLC_REQUST = BOP040_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String BOP040_J_PLC_START = BOP040_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String BOP040_J_PC_WRITE_ORDER = BOP040_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String BOP040_J_PLC_FINISH = BOP040_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -481,7 +488,7 @@
      */
     public static final String BOP040B_ITEM = "BOP.BOP040B.";//
     public static final String BOP040B_F_HEART_BEAT = BOP040B_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String BOP040B_PLC_REQUST = BOP040B_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String BOP040B_J_PLC_START = BOP040B_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String BOP040B_J_PC_WRITE_ORDER = BOP040B_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String BOP040B_J_PLC_FINISH = BOP040B_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -498,7 +505,7 @@
      */
     public static final String EOP010_ITEM = "EOP.EOP010.";
     public static final String EOP010_F_HEART_BEAT = EOP010_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String EOP010_PLC_REQUST = EOP010_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String EOP010_J_PLC_START = EOP010_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String EOP010_J_PC_WRITE_ORDER = EOP010_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String EOP010_J_PLC_FINISH = EOP010_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -519,7 +526,7 @@
      */
     public static final String EOP020_ITEM = "EOP.EOP020.";//
     public static final String EOP020_F_HEART_BEAT = EOP020_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String EOP020_PLC_REQUST = EOP020_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String EOP020_J_PLC_START = EOP020_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String EOP020_J_PC_WRITE_ORDER = EOP020_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String EOP020_J_PLC_FINISH = EOP020_ITEM + "J_PLC_FINISH";//PLC瀹�
@@ -536,7 +543,7 @@
      */
     public static final String EOP030_ITEM = "EOP.EOP030.";//
     public static final String EOP030_F_HEART_BEAT = EOP030_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String EOP030_PLC_REQUST = EOP030_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String EOP030_J_PLC_START = EOP030_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String EOP030_J_PC_WRITE_ORDER = EOP030_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String EOP030_J_PLC_FINISH = EOP030_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -554,7 +561,7 @@
      */
     public static final String EOP040_ITEM = "EOP.EOP040.";//
     public static final String EOP040_F_HEART_BEAT = EOP040_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String EOP040_PLC_REQUST = EOP040_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String EOP040_J_PLC_START = EOP040_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String EOP040_J_PC_WRITE_ORDER = EOP040_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String EOP040_J_PLC_FINISH = EOP040_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -571,7 +578,7 @@
      */
     public static final String EOP050_ITEM = "EOP.EOP050.";//
     public static final String EOP050_F_HEART_BEAT = EOP050_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String EOP050_PLC_REQUST = EOP050_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String EOP050_J_PLC_START = EOP050_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String EOP050_J_PC_WRITE_ORDER = EOP050_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String EOP050_J_PLC_FINISH = EOP050_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -588,7 +595,7 @@
      */
     public static final String EOP060_ITEM = "EOP.EOP060.";//
     public static final String EOP060_F_HEART_BEAT = EOP060_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String EOP060_PLC_REQUST = EOP060_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String EOP060_J_PLC_START = EOP060_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String EOP060_J_PC_WRITE_ORDER = EOP060_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String EOP060_J_PLC_FINISH = EOP060_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -607,7 +614,7 @@
      */
     public static final String EOP070_ITEM = "EOP.EOP070.";//
     public static final String EOP070_F_HEART_BEAT = EOP070_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String EOP070_PLC_REQUST = EOP070_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String EOP070_J_PLC_START = EOP070_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String EOP070_J_PC_WRITE_ORDER = EOP070_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String EOP070_J_PLC_FINISH = EOP070_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -624,7 +631,7 @@
      */
     public static final String EOP070B_ITEM = "EOP.EOP070B.";//
     public static final String EOP070B_F_HEART_BEAT = EOP070B_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String EOP070B_PLC_REQUST = EOP070B_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String EOP070B_J_PLC_START = EOP070B_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String EOP070B_J_PC_WRITE_ORDER = EOP070B_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String EOP070B_J_PLC_FINISH = EOP070B_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -641,7 +648,7 @@
      */
     public static final String EOP080_ITEM = "EOP.EOP080.";//
     public static final String EOP080_F_HEART_BEAT = EOP080_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String EOP080_PLC_REQUST = EOP080_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String EOP080_J_PLC_START = EOP080_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String EOP080_J_PC_WRITE_ORDER = EOP080_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String EOP080_J_PLC_FINISH = EOP080_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -658,7 +665,7 @@
      */
     public static final String EOP090_ITEM = "EOP.EOP090.";//
     public static final String EOP090_F_HEART_BEAT = EOP090_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String EOP090_PLC_REQUST = EOP090_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String EOP090_J_PLC_START = EOP090_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String EOP090_J_PC_WRITE_ORDER = EOP090_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String EOP090_J_PLC_WRITE_INFO = EOP090_ITEM + "J_PLC_WRITE_INFO";//PLC鍐欎俊鎭�
@@ -677,7 +684,7 @@
      */
     public static final String EOP090B_ITEM = "EOP.EOP090B.";//
     public static final String EOP090B_F_HEART_BEAT = EOP090B_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String EOP090B_PLC_REQUST = EOP090B_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String EOP090B_J_PLC_START = EOP090B_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String EOP090B_J_PC_WRITE_ORDER = EOP090B_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String EOP090B_J_PLC_WRITE_INFO = EOP090B_ITEM + "J_PLC_WRITE_INFO";//PLC鍐欎俊鎭�
@@ -696,7 +703,7 @@
      */
     public static final String DOP010_ITEM = "EOP.DOP010.";//
     public static final String DOP010_F_HEART_BEAT = DOP010_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String DOP010_PLC_REQUST = DOP010_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String DOP010_J_PLC_START = DOP010_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String DOP010_J_PC_WRITE_ORDER = DOP010_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String DOP010_J_PLC_FINISH = DOP010_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
@@ -718,7 +725,7 @@
      */
     public static final String DOP020_ITEM = "EOP.DOP020.";//
     public static final String DOP020_F_HEART_BEAT = DOP020_ITEM + "F_HEART_BEAT";//蹇冭烦
-
+    public static final String DOP020_PLC_REQUST = DOP020_ITEM + "PLC_REQUST";//PLC浜や簰淇℃伅
     public static final String DOP020_J_PLC_START = DOP020_ITEM + "J_PLC_START";//PLC寮�濮�
     public static final String DOP020_J_PC_WRITE_ORDER = DOP020_ITEM + "J_PC_WRITE_ORDER";//PC涓嬪彂宸ュ崟
     public static final String DOP020_J_PLC_FINISH = DOP020_ITEM + "J_PLC_FINISH";//PLC瀹屾垚
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/opc/unit/OPCUnit.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/opc/unit/OPCUnit.java
deleted file mode 100644
index ffa36a4..0000000
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/opc/unit/OPCUnit.java
+++ /dev/null
@@ -1,212 +0,0 @@
-package cn.stylefeng.guns.plcserver.opc.unit;
-
-import org.jinterop.dcom.common.JIErrorCodes;
-import org.jinterop.dcom.common.JIException;
-import org.jinterop.dcom.core.JIArray;
-import org.jinterop.dcom.core.JIVariant;
-import org.openscada.opc.lib.da.Group;
-import org.openscada.opc.lib.da.Item;
-import org.openscada.opc.lib.da.ItemState;
-
-import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-public class OPCUnit {
-
-    /**
-     * 璇诲崟涓��
-     */
-    public static String read(Item item) {
-        try {
-            ItemState state = item.read(true);
-            return getValue(state);
-        } catch (JIException e) {
-            e.printStackTrace();
-        }
-        return null;
-    }
-
-    /**
-     * 璇讳竴缁勫�硷紝瀵逛簬璇诲彇寮傚父鐨勭偣浣嶄細杩斿洖null鍊�
-     */
-    public static List<String> readValues(Group group, List<String> tags) {
-        //娣诲姞鍒癵roup涓紝濡傛灉娣诲姞澶辫触鍒欐坊鍔爊ull
-        List<Item> items = tags.stream().map(tag -> {
-            try {
-                return group.addItem(tag);
-            } catch (Exception e) {
-                //log.info(e.toString());
-            }
-            return null;
-        }).collect(Collectors.toList());
-
-        List<String> result = new ArrayList<>();
-        try {
-            //璇诲彇鎵�鏈夌殑鍊硷紝杩囨护null鍊硷紝鍚﹀垯浼氬嚭寮傚父
-            Map<Item, ItemState> map = group.read(true,
-                    items.stream().filter(Objects::nonNull).toArray(Item[]::new));
-            //瑙f瀽
-            for (Item item : items) {
-                if (item == null) {
-                    result.add(null);
-                    continue;
-                }
-                String value = getValue(map.get(item));
-                result.add(value);
-            }
-        } catch (JIException e) {
-            e.printStackTrace();
-        }
-        return result;
-    }
-
-    /**
-     * 鍐欏�煎埌鍙橀噺
-     */
-    public static void write(Item item, String val) {
-        try {
-            JIVariant value = new JIVariant(val);
-            item.write(value);
-        } catch (JIException e) {
-            e.printStackTrace();
-        }
-    }
-
-    /**
-     * 鍐欏�煎埌鍙橀噺:鏁扮粍
-     */
-    public static void write(Item item, String[] snArray) {
-        try {
-
-            /** 鏋勯�犲啓鍏ユ暟鎹� */
-            Long[] integerData = new Long[snArray.length];
-            for (int i = 0; i < snArray.length; i++) {
-                integerData[i] = Long.valueOf(snArray[i]);
-            }
-            final JIArray array = new JIArray(integerData, false);
-            final JIVariant value = new JIVariant(array);
-
-            item.write(value);
-        } catch (JIException e) {
-            e.printStackTrace();
-        }
-    }
-
-    /**
-     * 濡傛灉鏄� bool銆乻tring銆乻hort銆乮nt绛夌洿鎺ヨ繑鍥炲瓧绗︿覆锛�
-     * 濡傛灉鏄� long 绫诲瀷鐨勬暟缁�,杩斿洖鏁板瓧鍐呭闂村姞鐐癸紝瀵瑰簲 long锛屾暟缁勶紝澶у皬涓�6
-     * 濡傛灉鏄� float 绫诲瀷鐨勬暟缁�,杩斿洖鏁板瓧鍐呭闂村姞閫楀彿锛屽搴� float锛屾暟缁勶紝澶у皬涓�20
-     */
-    private static String getValue(ItemState state) {
-        JIVariant variant = state.getValue();
-        try {
-            int type = variant.getType();
-            //Boolean
-            if (type == JIVariant.VT_BOOL) {
-                boolean value = variant.getObjectAsBoolean();
-                return String.valueOf(value);
-            }
-            //String
-            else if (type == JIVariant.VT_BSTR) {
-                return variant.getObjectAsString().getString();
-            }
-            //Word DWord
-            else if (type == JIVariant.VT_UI2 || type == JIVariant.VT_UI4) {
-                Number value = variant.getObjectAsUnsigned().getValue();
-                return String.valueOf(value);
-            }
-            //Sort
-            else if (type == JIVariant.VT_I2) {
-                short value = variant.getObjectAsShort();
-                return String.valueOf(value);
-            }
-            //Float
-            else if (type == JIVariant.VT_R4) {
-                float value = variant.getObjectAsFloat();
-                return String.valueOf(value);
-            }
-            //long 绫诲瀷鐨勬暟缁�
-            else if (type == 8195) {
-                JIArray jarr = variant.getObjectAsArray();
-                Integer[] arr = (Integer[]) jarr.getArrayInstance();
-                StringBuilder value = new StringBuilder();
-                for (Integer i : arr) {
-                    value.append(i).append(".");
-                }
-                String res = value.substring(0, value.length() - 1);
-                // "25.36087601.1.1.18.36"-->"25.36087601.01.0001.18.36"
-                String[] array = res.split("[.]");
-                return array[0] + "." + array[1] + "." + new DecimalFormat("00").format(Long.valueOf(array[2]))
-                        + "." + new DecimalFormat("0000").format(Long.valueOf(array[3])) + "." + array[4] + "."
-                        + array[5];
-            }
-            //float 绫诲瀷鐨勬暟缁�
-            else if (type == 8196) {
-                JIArray jarr = variant.getObjectAsArray();
-                Float[] arr = (Float[]) jarr.getArrayInstance();
-                StringBuilder value = new StringBuilder();
-                for (Float f : arr) {
-                    value.append(f).append(",");
-                }
-                return value.substring(0, value.length() - 1);
-            }
-            //鍏朵粬绫诲瀷
-            else {
-                Object value = variant.getObject();
-                return String.valueOf(value);
-            }
-        } catch (JIException e) {
-            e.printStackTrace();
-        }
-        return null;
-    }
-    /**
-     * 鑾峰彇value
-     * @param var
-     * @return
-     * @throws JIException
-     */
-    private static Object getVal(JIVariant var) throws JIException {
-        Object value;
-        int type = var.getType();
-        switch (type) {
-            case JIVariant.VT_I2:
-                value = var.getObjectAsShort();
-                break;
-            case JIVariant.VT_I4:
-                value = var.getObjectAsInt();
-                break;
-            case JIVariant.VT_I8:
-                value = var.getObjectAsLong();
-                break;
-            case JIVariant.VT_R4:
-                value = var.getObjectAsFloat();
-                break;
-            case JIVariant.VT_R8:
-                value = var.getObjectAsDouble();
-                break;
-            case JIVariant.VT_BSTR:
-                value = var.getObjectAsString2();
-                break;
-            case JIVariant.VT_BOOL:
-                value = var.getObjectAsBoolean();
-                break;
-            case JIVariant.VT_UI2:
-            case JIVariant.VT_UI4:
-                value = var.getObjectAsUnsigned().getValue();
-                break;
-            case JIVariant.VT_EMPTY:
-                throw new JIException(JIErrorCodes.JI_VARIANT_IS_NULL, "Variant is Empty.");
-            case JIVariant.VT_NULL:
-                throw new JIException(JIErrorCodes.JI_VARIANT_IS_NULL, "Variant is null.");
-            default:
-                throw new JIException(JIErrorCodes.JI_VARIANT_IS_NULL, "Unknown Type.");
-        }
-
-        return value;
-    }
-}
\ No newline at end of file
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/server/HEARTBEAT/HeartBeatServerInterface.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/server/HEARTBEAT/HeartBeatServerInterface.java
new file mode 100644
index 0000000..4122c2a
--- /dev/null
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/server/HEARTBEAT/HeartBeatServerInterface.java
@@ -0,0 +1,8 @@
+package cn.stylefeng.guns.plcserver.server.HEARTBEAT;
+
+public interface HeartBeatServerInterface {
+
+    public void monitor();
+
+
+}
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/server/HEARTBEAT/impl/HeartBeatServerInterfaceImpl.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/server/HEARTBEAT/impl/HeartBeatServerInterfaceImpl.java
new file mode 100644
index 0000000..fd116a8
--- /dev/null
+++ b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/server/HEARTBEAT/impl/HeartBeatServerInterfaceImpl.java
@@ -0,0 +1,12 @@
+package cn.stylefeng.guns.plcserver.server.HEARTBEAT.impl;
+
+import cn.stylefeng.guns.plcserver.server.HEARTBEAT.HeartBeatServerInterface;
+
+public class HeartBeatServerInterfaceImpl implements HeartBeatServerInterface {
+
+    @Override
+    public synchronized void monitor() {
+        System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^123456");
+    }
+
+}
diff --git a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/test.java b/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/test.java
deleted file mode 100644
index e0d810b..0000000
--- a/guns-vip-main/src/main/java/cn/stylefeng/guns/plcserver/test.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package cn.stylefeng.guns.plcserver;
-
-
-import org.jinterop.dcom.common.JIErrorCodes;
-import org.jinterop.dcom.common.JIException;
-import org.jinterop.dcom.core.JIVariant;
-import org.openscada.opc.lib.common.ConnectionInformation;
-import org.openscada.opc.lib.da.Group;
-import org.openscada.opc.lib.da.Item;
-import org.openscada.opc.lib.da.Server;
-
-public class test {
-
-
-    private static String HOST = "192.168.0.234";
-    //private static String HOST = "192.168.1.100";
-    private static String USER = "OPCUser";
-    private static String PASSWORD = "123456";
-    private static String CLSID= "7BC0CC8E-482C-47CA-ABDC-0FE7F9C6E729";
-    private static String PROGID = "";
-
-
-        public static void main(String[] args) throws Exception {
-            // create connection information
-            final ConnectionInformation ci = new ConnectionInformation();
-            ci.setHost("127.0.0.1");
-            ci.setDomain("");
-            ci.setUser("OPCServer");
-            ci.setPassword("admin@123");
-            ci.setClsid("7BC0CC8E-482C-47CA-ABDC-0FE7F9C6E729");
-            //ci.setProgId("7BC0CC8E");
-            // ci.setClsid("680DFBF7-C92D-484D-84BE-06DC3DECCD68"); // if ProgId is not working, try it using the Clsid instead
-            final String itemId = "_System._Time_Second";
-            // create a new server
-            Item item = null;
-            Server server = new Server(ci, null);
-            //server = new Server(ci, Executors.newSingleThreadScheduledExecutor());
-
-            try {
-                // connect to server
-                server.connect();
-                while(true) {
-
-                    System.out.println("111111==");
-                    Thread.sleep(1000);
-                }
-
-            } catch (final JIException e) {
-                System.out.println(String.format("%08X: %s", e.getErrorCode(), server.getErrorMessage(e.getErrorCode())));
-            }
-        }
-    /**
-     * 鑾峰彇value
-     * @param var
-     * @return
-     * @throws JIException
-     */
-    private static Object getVal(JIVariant var) throws JIException {
-        Object value;
-        int type = var.getType();
-        switch (type) {
-            case JIVariant.VT_I2:
-                value = var.getObjectAsShort();
-                break;
-            case JIVariant.VT_I4:
-                value = var.getObjectAsInt();
-                break;
-            case JIVariant.VT_I8:
-                value = var.getObjectAsLong();
-                break;
-            case JIVariant.VT_R4:
-                value = var.getObjectAsFloat();
-                break;
-            case JIVariant.VT_R8:
-                value = var.getObjectAsDouble();
-                break;
-            case JIVariant.VT_BSTR:
-                value = var.getObjectAsString2();
-                break;
-            case JIVariant.VT_BOOL:
-                value = var.getObjectAsBoolean();
-                break;
-            case JIVariant.VT_UI2:
-            case JIVariant.VT_UI4:
-                value = var.getObjectAsUnsigned().getValue();
-                break;
-            case JIVariant.VT_EMPTY:
-                throw new JIException(JIErrorCodes.JI_VARIANT_IS_NULL, "Variant is Empty.");
-            case JIVariant.VT_NULL:
-                throw new JIException(JIErrorCodes.JI_VARIANT_IS_NULL, "Variant is null.");
-            default:
-                throw new JIException(JIErrorCodes.JI_VARIANT_IS_NULL, "Unknown Type.");
-        }
-
-        return value;
-    }
-
-
-}
diff --git a/guns-vip-main/src/main/webapp/assets/modular/cm/paramCollection/paramCollection.js b/guns-vip-main/src/main/webapp/assets/modular/cm/paramCollection/paramCollection.js
index 03ea47c..94b0506 100644
--- a/guns-vip-main/src/main/webapp/assets/modular/cm/paramCollection/paramCollection.js
+++ b/guns-vip-main/src/main/webapp/assets/modular/cm/paramCollection/paramCollection.js
@@ -40,11 +40,13 @@
            /* {field: 'equipmentNo', sort: true, title: '璁惧缂栧彿', width: 125},*/
             {field: 'paramCode', sort: true, title: '鍙傛暟缂栫爜', width: 125},
             {field: 'paramName', sort: true, title: '鍙傛暟鍚嶇О', width: 125},
-            {field: 'unit', sort: true, title: '鍗曚綅'},
+
             {field: 'paramValue', sort: true, title: '鍙傛暟鍊�'},
+            {field: 'spareField2', sort: true, title: '鏄惁鍚堟牸', width: 125},
             {field: 'paramUpper', sort: true, title: '鍙傛暟涓婇檺', width: 125},
             {field: 'paramLower', sort: true, title: '鍙傛暟涓嬮檺', width: 125},
             {field: 'paramStandard', sort: true, title: '鏍囧噯鍊�'},
+            {field: 'unit', sort: true, title: '鍗曚綅'},
             {field: 'createTime', sort: true, title: '閲囬泦鏃堕棿',minWidth:160},
             {field: 'state', sort: true, title: '鐘舵��'},
           /*  {field: 'createUser', sort: true, title: '鍒涘缓鐢ㄦ埛'},
diff --git a/guns-vip-main/src/main/webapp/assets/modular/om/productionOrderRecords/productionOrderRecords.js b/guns-vip-main/src/main/webapp/assets/modular/om/productionOrderRecords/productionOrderRecords.js
index c7d25b2..e8b276c 100644
--- a/guns-vip-main/src/main/webapp/assets/modular/om/productionOrderRecords/productionOrderRecords.js
+++ b/guns-vip-main/src/main/webapp/assets/modular/om/productionOrderRecords/productionOrderRecords.js
@@ -22,8 +22,8 @@
             {field: 'workOrderNo', sort: true, title: '鐢熶骇宸ュ崟鍙�',minWidth:160},
             {field: 'productNo', sort: true, title: 'SFC鎬绘垚搴忓垪鍙�',minWidth:160},
             /* {field: 'drawingNo', sort: true, title: '鍥惧彿'},*/
-            {field: 'materialCode', sort: true, title: '浜у搧缂栧彿',minWidth:160},
-            {field: 'materialName', sort: true, title: '浜у搧鍚嶇О'},
+            {field: 'materialCode', sort: true, title: '浜у搧缂栧彿',minWidth:140},
+            {field: 'materialName', sort: true, title: '浜у搧鍚嶇О',minWidth:160},
             // {field: 'locationCode', sort: true, title: '宸ヤ綅缂栧彿',minWidth:110},
             {field: 'startTime', sort: true, title: '涓婄嚎鏃堕棿',minWidth:160},
             {field: 'endTime', sort: true, title: '涓嬬嚎鏃堕棿',minWidth:160},

--
Gitblit v1.9.3