From a05a58973d6dc855bfb203ee16189d48238fea62 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期四, 07 十二月 2023 16:33:58 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/entity/BasRgv.java                     |  236 +++++++
 src/main/java/com/zy/core/enums/RgvModeType.java                 |   45 +
 src/main/resources/mapper/BasRgvOptMapper.xml                    |   27 
 src/main/java/com/zy/asrs/service/BasRgvService.java             |    8 
 src/main/java/com/zy/core/thread/ZyRgvThread.java                |  402 ++++++++++++
 src/main/java/com/zy/asrs/utils/Utils.java                       |   58 +
 src/main/java/com/zy/core/model/RgvSlave.java                    |   33 +
 src/main/java/com/zy/core/enums/SlaveType.java                   |    1 
 src/main/java/com/zy/core/MainProcess.java                       |    7 
 src/main/java/com/zy/core/model/command/RgvCommand.java          |   95 ++
 src/main/java/com/zy/asrs/service/BasRgvOptService.java          |    8 
 src/main/java/com/zy/core/enums/RgvStatusType.java               |   52 +
 src/main/java/com/zy/core/enums/RgvWalkPosType.java              |   44 +
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java      |  274 +++++++
 src/main/java/com/zy/asrs/mapper/BasRgvMapper.java               |   12 
 src/main/resources/mapper/WrkMastMapper.xml                      |    4 
 src/main/java/com/zy/asrs/service/impl/BasRgvServiceImpl.java    |   12 
 src/main/java/com/zy/common/CodeBuilder.java                     |   11 
 src/main/java/com/zy/core/ServerBootstrap.java                   |   11 
 src/main/java/com/zy/core/properties/SlaveProperties.java        |    3 
 src/main/resources/mapper/BasRgvMapper.xml                       |   32 
 src/main/java/com/zy/asrs/mapper/BasRgvOptMapper.java            |   12 
 src/main/java/com/zy/asrs/mapper/WrkMastMapper.java              |    3 
 src/main/java/com/zy/core/RgvThread.java                         |    9 
 src/main/java/com/zy/asrs/entity/BasRgvOpt.java                  |  207 ++++++
 src/main/java/com/zy/core/model/protocol/RgvProtocol.java        |  134 ++++
 src/main/resources/application.yml                               |  143 ++++
 src/main/java/com/zy/asrs/service/impl/BasRgvOptServiceImpl.java |   12 
 src/main/java/com/zy/core/enums/RgvTaskModeType.java             |   42 +
 29 files changed, 1,915 insertions(+), 22 deletions(-)

diff --git a/src/main/java/com/zy/asrs/entity/BasRgv.java b/src/main/java/com/zy/asrs/entity/BasRgv.java
new file mode 100644
index 0000000..bdd5169
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/BasRgv.java
@@ -0,0 +1,236 @@
+package com.zy.asrs.entity;
+
+import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.enums.IdType;
+import com.baomidou.mybatisplus.annotations.TableField;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableName;
+import java.io.Serializable;
+
+@Data
+@TableName("asr_bas_rgv")
+public class BasRgv implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * RGV缂栧彿
+     */
+    @ApiModelProperty(value= "RGV缂栧彿")
+    @TableId(value = "rgv_no", type = IdType.INPUT)
+    @TableField("rgv_no")
+    private Integer rgvNo;
+
+    /**
+     * 妯″紡
+     */
+    @ApiModelProperty(value= "妯″紡")
+    private Integer mode;
+
+    /**
+     * 鐘舵��
+     */
+    @ApiModelProperty(value= "鐘舵��")
+    private Integer status;
+
+    /**
+     * 宸ヤ綅1宸ヤ綔鍙�
+     */
+    @ApiModelProperty(value= "宸ヤ綅1宸ヤ綔鍙�")
+    @TableField("task_no1")
+    private Integer taskNo1;
+
+    /**
+     * 宸ヤ綅1鏈夌墿淇″彿
+     */
+    @ApiModelProperty(value= "宸ヤ綅1鏈夌墿淇″彿")
+    private Integer loaded1;
+
+    /**
+     * RGV褰撳墠浣嶇疆
+     */
+    @ApiModelProperty(value= "RGV褰撳墠浣嶇疆")
+    @TableField("rgv_pos")
+    private Integer rgvPos;
+
+    /**
+     * 璧拌鍦ㄥ畾浣�
+     */
+    @ApiModelProperty(value= "璧拌鍦ㄥ畾浣�")
+    @TableField("walk_pos")
+    private Integer walkPos;
+
+    /**
+     * 宸ヤ綅2宸ヤ綔鍙�
+     */
+    @ApiModelProperty(value= "宸ヤ綅2宸ヤ綔鍙�")
+    @TableField("task_no2")
+    private Integer taskNo2;
+
+    /**
+     * 宸ヤ綅2鏈夌墿淇″彿
+     */
+    @ApiModelProperty(value= "宸ヤ綅2鏈夌墿淇″彿")
+    private Integer loaded2;
+
+    /**
+     * 宸ヤ綅1浠诲姟瀹屾垚淇″彿
+     */
+    @ApiModelProperty(value= "宸ヤ綅1浠诲姟瀹屾垚淇″彿")
+    @TableField("task_finish1")
+    private Integer taskFinish1;
+
+    /**
+     * 宸ヤ綅2浠诲姟瀹屾垚淇″彿
+     */
+    @ApiModelProperty(value= "宸ヤ綅2浠诲姟瀹屾垚淇″彿")
+    @TableField("task_finish2")
+    private Integer taskFinish2;
+
+    /**
+     * 寮傚父鐮�
+     */
+    @ApiModelProperty(value= "寮傚父鐮�")
+    private Integer alarm;
+
+    /**
+     * 蹇冭烦
+     */
+    @ApiModelProperty(value= "蹇冭烦")
+    private Integer heart;
+
+    /**
+     * 澶囩敤1
+     */
+    @ApiModelProperty(value= "澶囩敤1")
+    private Integer temp1;
+
+    /**
+     * 澶囩敤2
+     */
+    @ApiModelProperty(value= "澶囩敤2")
+    private Integer temp2;
+
+    /**
+     * 澶囩敤3
+     */
+    @ApiModelProperty(value= "澶囩敤3")
+    private Integer temp3;
+
+    /**
+     * 澶囩敤4
+     */
+    @ApiModelProperty(value= "澶囩敤4")
+    private Integer temp4;
+
+    /**
+     * 澶囩敤5
+     */
+    @ApiModelProperty(value= "澶囩敤5")
+    private Integer temp5;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @ApiModelProperty(value= "鍒涘缓鏃堕棿")
+    @TableField("create_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 鍒涘缓浜哄憳
+     */
+    @ApiModelProperty(value= "鍒涘缓浜哄憳")
+    @TableField("create_by")
+    private Long createBy;
+
+    /**
+     * 鏇存柊鏃堕棿
+     */
+    @ApiModelProperty(value= "鏇存柊鏃堕棿")
+    @TableField("update_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 鏇存柊浜哄憳
+     */
+    @ApiModelProperty(value= "鏇存柊浜哄憳")
+    @TableField("update_by")
+    private Long updateBy;
+
+    public BasRgv() {}
+
+    public BasRgv(Integer rgvNo,Integer mode,Integer status,Integer taskNo1,Integer loaded1,Integer rgvPos,Integer walkPos,Integer taskNo2,Integer loaded2,Integer taskFinish1,Integer taskFinish2,Integer alarm,Integer heart,Integer temp1,Integer temp2,Integer temp3,Integer temp4,Integer temp5,Date createTime,Long createBy,Date updateTime,Long updateBy) {
+        this.rgvNo = rgvNo;
+        this.mode = mode;
+        this.status = status;
+        this.taskNo1 = taskNo1;
+        this.loaded1 = loaded1;
+        this.rgvPos = rgvPos;
+        this.walkPos = walkPos;
+        this.taskNo2 = taskNo2;
+        this.loaded2 = loaded2;
+        this.taskFinish1 = taskFinish1;
+        this.taskFinish2 = taskFinish2;
+        this.alarm = alarm;
+        this.heart = heart;
+        this.temp1 = temp1;
+        this.temp2 = temp2;
+        this.temp3 = temp3;
+        this.temp4 = temp4;
+        this.temp5 = temp5;
+        this.createTime = createTime;
+        this.createBy = createBy;
+        this.updateTime = updateTime;
+        this.updateBy = updateBy;
+    }
+
+//    BasRgv basRgv = new BasRgv(
+//            null,    // RGV缂栧彿[闈炵┖]
+//            null,    // 妯″紡
+//            null,    // 鐘舵��
+//            null,    // 宸ヤ綅1宸ヤ綔鍙�
+//            null,    // 宸ヤ綅1鏈夌墿淇″彿
+//            null,    // RGV褰撳墠浣嶇疆
+//            null,    // 璧拌鍦ㄥ畾浣�
+//            null,    // 宸ヤ綅2宸ヤ綔鍙�
+//            null,    // 宸ヤ綅2鏈夌墿淇″彿
+//            null,    // 宸ヤ綅1浠诲姟瀹屾垚淇″彿
+//            null,    // 宸ヤ綅2浠诲姟瀹屾垚淇″彿
+//            null,    // 寮傚父鐮�
+//            null,    // 蹇冭烦
+//            null,    // 澶囩敤1
+//            null,    // 澶囩敤2
+//            null,    // 澶囩敤3
+//            null,    // 澶囩敤4
+//            null,    // 澶囩敤5
+//            null,    // 鍒涘缓鏃堕棿
+//            null,    // 鍒涘缓浜哄憳
+//            null,    // 鏇存柊鏃堕棿
+//            null    // 鏇存柊浜哄憳
+//    );
+
+    public String getCreateTime$(){
+        if (Cools.isEmpty(this.createTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+    }
+
+    public String getUpdateTime$(){
+        if (Cools.isEmpty(this.updateTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+    }
+
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/BasRgvOpt.java b/src/main/java/com/zy/asrs/entity/BasRgvOpt.java
new file mode 100644
index 0000000..ebe6d41
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/BasRgvOpt.java
@@ -0,0 +1,207 @@
+package com.zy.asrs.entity;
+
+import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.enums.IdType;
+import com.baomidou.mybatisplus.annotations.TableField;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableName;
+import java.io.Serializable;
+
+@Data
+@TableName("asr_bas_rgv_opt")
+public class BasRgvOpt implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value= "")
+    @TableId(value = "id", type = IdType.INPUT)
+    private Long id;
+
+    /**
+     * RGV缂栧彿
+     */
+    @ApiModelProperty(value= "RGV缂栧彿")
+    @TableField("rgv_no")
+    private Integer rgvNo;
+
+    /**
+     * 浠诲姟瀹屾垚纭浣�
+     */
+    @ApiModelProperty(value= "浠诲姟瀹屾垚纭浣�")
+    @TableField("ack_finish")
+    private Integer ackFinish;
+
+    /**
+     * 宸ヤ綅1宸ヤ綔鍙�
+     */
+    @ApiModelProperty(value= "宸ヤ綅1宸ヤ綔鍙�")
+    @TableField("task_no1")
+    private Integer taskNo1;
+
+    /**
+     * 宸ヤ綅1妯″紡
+     */
+    @ApiModelProperty(value= "宸ヤ綅1妯″紡")
+    @TableField("task_mode1")
+    private Integer taskMode1;
+
+    /**
+     * 宸ヤ綅1婧愮珯
+     */
+    @ApiModelProperty(value= "宸ヤ綅1婧愮珯")
+    @TableField("source_sta_no1")
+    private Integer sourceStaNo1;
+
+    /**
+     * 宸ヤ綅1鐩爣绔�
+     */
+    @ApiModelProperty(value= "宸ヤ綅1鐩爣绔�")
+    @TableField("destination_sta_no_1")
+    private Integer destinationStaNo1;
+
+    /**
+     * 宸ヤ綅2宸ヤ綔鍙�
+     */
+    @ApiModelProperty(value= "宸ヤ綅2宸ヤ綔鍙�")
+    @TableField("task_no2")
+    private Integer taskNo2;
+
+    /**
+     * 宸ヤ綅2妯″紡
+     */
+    @ApiModelProperty(value= "宸ヤ綅2妯″紡")
+    @TableField("task_mode2")
+    private Integer taskMode2;
+
+    /**
+     * 宸ヤ綅2婧愮珯
+     */
+    @ApiModelProperty(value= "宸ヤ綅2婧愮珯")
+    @TableField("source_sta_no2")
+    private Integer sourceStaNo2;
+
+    /**
+     * 宸ヤ綅2鐩爣绔�
+     */
+    @ApiModelProperty(value= "宸ヤ綅2鐩爣绔�")
+    @TableField("destination_sta_no2")
+    private Integer destinationStaNo2;
+
+    /**
+     * 浠诲姟纭
+     */
+    @ApiModelProperty(value= "浠诲姟纭")
+    private Integer command;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @ApiModelProperty(value= "鍒涘缓鏃堕棿")
+    @TableField("create_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 鍒涘缓浜哄憳
+     */
+    @ApiModelProperty(value= "鍒涘缓浜哄憳")
+    @TableField("create_by")
+    private Long createBy;
+
+    /**
+     * 鏇存柊鏃堕棿
+     */
+    @ApiModelProperty(value= "鏇存柊鏃堕棿")
+    @TableField("update_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 鏇存柊浜哄憳
+     */
+    @ApiModelProperty(value= "鏇存柊浜哄憳")
+    @TableField("update_by")
+    private Long updateBy;
+
+    /**
+     * 鍝嶅簲缁撴灉 1: 姝e父  0: 澶辫触  
+     */
+    @ApiModelProperty(value= "鍝嶅簲缁撴灉 1: 姝e父  0: 澶辫触  ")
+    private Integer response;
+
+    public BasRgvOpt() {}
+
+    public BasRgvOpt(Integer rgvNo,Integer ackFinish,Integer taskNo1,Integer taskMode1,Integer sourceStaNo1,Integer destinationStaNo1,Integer taskNo2,Integer taskMode2,Integer sourceStaNo2,Integer destinationStaNo2,Integer command,Date createTime,Long createBy,Date updateTime,Long updateBy,Integer response) {
+        this.rgvNo = rgvNo;
+        this.ackFinish = ackFinish;
+        this.taskNo1 = taskNo1;
+        this.taskMode1 = taskMode1;
+        this.sourceStaNo1 = sourceStaNo1;
+        this.destinationStaNo1 = destinationStaNo1;
+        this.taskNo2 = taskNo2;
+        this.taskMode2 = taskMode2;
+        this.sourceStaNo2 = sourceStaNo2;
+        this.destinationStaNo2 = destinationStaNo2;
+        this.command = command;
+        this.createTime = createTime;
+        this.createBy = createBy;
+        this.updateTime = updateTime;
+        this.updateBy = updateBy;
+        this.response = response;
+    }
+
+//    BasRgvOpt basRgvOpt = new BasRgvOpt(
+//            null,    // [闈炵┖]
+//            null,    // RGV缂栧彿
+//            null,    // 浠诲姟瀹屾垚纭浣�
+//            null,    // 宸ヤ綅1宸ヤ綔鍙�
+//            null,    // 宸ヤ綅1妯″紡
+//            null,    // 宸ヤ綅1婧愮珯
+//            null,    // 宸ヤ綅1鐩爣绔�
+//            null,    // 宸ヤ綅2宸ヤ綔鍙�
+//            null,    // 宸ヤ綅2妯″紡
+//            null,    // 宸ヤ綅2婧愮珯
+//            null,    // 宸ヤ綅2鐩爣绔�
+//            null,    // 浠诲姟纭
+//            null,    // 鍒涘缓鏃堕棿
+//            null,    // 鍒涘缓浜哄憳
+//            null,    // 鏇存柊鏃堕棿
+//            null,    // 鏇存柊浜哄憳
+//            null    // 鍝嶅簲缁撴灉
+//    );
+
+    public String getCreateTime$(){
+        if (Cools.isEmpty(this.createTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+    }
+
+    public String getUpdateTime$(){
+        if (Cools.isEmpty(this.updateTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+    }
+
+    public String getResponse$(){
+        if (null == this.response){ return null; }
+        switch (this.response){
+            case 1:
+                return "姝e父";
+            case 0:
+                return "澶辫触";
+            default:
+                return String.valueOf(this.response);
+        }
+    }
+
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/BasRgvMapper.java b/src/main/java/com/zy/asrs/mapper/BasRgvMapper.java
new file mode 100644
index 0000000..cb45640
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/BasRgvMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.mapper;
+
+import com.zy.asrs.entity.BasRgv;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface BasRgvMapper extends BaseMapper<BasRgv> {
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/BasRgvOptMapper.java b/src/main/java/com/zy/asrs/mapper/BasRgvOptMapper.java
new file mode 100644
index 0000000..b8622e4
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/BasRgvOptMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.mapper;
+
+import com.zy.asrs.entity.BasRgvOpt;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface BasRgvOptMapper extends BaseMapper<BasRgvOpt> {
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
index 6af4d04..27cfc46 100644
--- a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -122,4 +122,7 @@
     List<WrkMast> selectLaneWrkMastIn();//鏌ヨ鍏ュ簱浠诲姟
 
     List<WrkMast> selectLaneWrkMastOut();//鏌ヨ鍑哄簱浠诲姟
+
+    WrkMast selectByWrkNo(Integer wrkNo);
+
 }
diff --git a/src/main/java/com/zy/asrs/service/BasRgvOptService.java b/src/main/java/com/zy/asrs/service/BasRgvOptService.java
new file mode 100644
index 0000000..cd3edcb
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/BasRgvOptService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.service;
+
+import com.zy.asrs.entity.BasRgvOpt;
+import com.baomidou.mybatisplus.service.IService;
+
+public interface BasRgvOptService extends IService<BasRgvOpt> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/BasRgvService.java b/src/main/java/com/zy/asrs/service/BasRgvService.java
new file mode 100644
index 0000000..12d4aba
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/BasRgvService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.service;
+
+import com.zy.asrs.entity.BasRgv;
+import com.baomidou.mybatisplus.service.IService;
+
+public interface BasRgvService extends IService<BasRgv> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/BasRgvOptServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasRgvOptServiceImpl.java
new file mode 100644
index 0000000..3d6d2a8
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/BasRgvOptServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service.impl;
+
+import com.zy.asrs.mapper.BasRgvOptMapper;
+import com.zy.asrs.entity.BasRgvOpt;
+import com.zy.asrs.service.BasRgvOptService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("basRgvOptService")
+public class BasRgvOptServiceImpl extends ServiceImpl<BasRgvOptMapper, BasRgvOpt> implements BasRgvOptService {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/BasRgvServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasRgvServiceImpl.java
new file mode 100644
index 0000000..36c7bb0
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/BasRgvServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service.impl;
+
+import com.zy.asrs.mapper.BasRgvMapper;
+import com.zy.asrs.entity.BasRgv;
+import com.zy.asrs.service.BasRgvService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("basRgvService")
+public class BasRgvServiceImpl extends ServiceImpl<BasRgvMapper, BasRgv> implements BasRgvService {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index 6a8cc16..db8b0e1 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -27,18 +27,18 @@
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.SlaveConnection;
 import com.zy.core.enums.*;
-import com.zy.core.model.CrnSlave;
-import com.zy.core.model.DevpSlave;
-import com.zy.core.model.LedSlave;
-import com.zy.core.model.Task;
+import com.zy.core.model.*;
 import com.zy.core.model.command.CrnCommand;
 import com.zy.core.model.command.LedCommand;
+import com.zy.core.model.command.RgvCommand;
 import com.zy.core.model.protocol.CrnProtocol;
+import com.zy.core.model.protocol.RgvProtocol;
 import com.zy.core.model.protocol.StaProtocol;
 import com.zy.core.properties.SlaveProperties;
 import com.zy.core.thread.BarcodeThread;
 import com.zy.core.thread.LedThread;
 import com.zy.core.thread.SiemensDevpThread;
+import com.zy.core.thread.ZyRgvThread;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -483,8 +483,13 @@
                             continue;
                         }
 
-                        // 鏇存柊宸ヤ綔妗g姸鎬佷负14澶辫触
-                        wrkMast.setWrkSts(14L);
+                        if (crnStn.getStaNo() == 1016 || crnStn.getStaNo() == 1019) {
+                            // 鏇存柊宸ヤ綔妗g姸鎬佷负13.RGV鎼繍涓�
+                            wrkMast.setWrkSts(13L);
+                        }else {
+                            // 鏇存柊宸ヤ綔妗g姸鎬佷负14
+                            wrkMast.setWrkSts(14L);
+                        }
                         wrkMast.setCrnEndTime(new Date());
                         if (wrkMastMapper.updateById(wrkMast) != 0) {
                             // 澶嶄綅鍫嗗灈鏈�
@@ -1950,16 +1955,259 @@
 
     }
 
-    public synchronized void outOfDevp() {
-        List<WrkMast> wrkMasts = wrkMastMapper.selectPick();
-        for (WrkMast wrkMast : wrkMasts) {
-            if (basDevpService.selectCount(new EntityWrapper<BasDevp>().eq("wrk_no", wrkMast.getWrkNo())) == 0) {
-                wrkMast.setCtnNo("Y");
-                if (wrkMastMapper.updateById(wrkMast) == 0) {
-                    log.error("淇敼{}宸ヤ綔妗eけ璐ワ紝ctn_no", wrkMast.getWrkNo());
+    //RGV鎼繍
+    public synchronized void rgvIoExecute() {
+        for (RgvSlave slave : slaveProperties.getRgv()) {
+            ZyRgvThread rgvThread = (ZyRgvThread) SlaveConnection.get(SlaveType.Rgv, slave.getId());
+            if (rgvThread == null) {
+                return;
+            }
+
+            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+            if (rgvProtocol == null) {
+                return;
+            }
+
+            // 鍒ゆ柇RGV鏄惁绌洪棽
+            if (rgvProtocol.getModeType() == RgvModeType.COMPUTER
+                    && rgvProtocol.getStatusType() == RgvStatusType.IDLE) {
+                // 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡锛屽垯浼樺厛鎵弿鍑哄簱绔欑偣
+                if (rgvProtocol.getLastIo().equals("I")) {
+                    this.rgvOutExecute(rgvThread, rgvProtocol);//鍑哄簱
+                    rgvProtocol.setLastIo("O");
+                }else {
+                    this.rgvInExecute(rgvThread, rgvProtocol);//鍏ュ簱
+                    rgvProtocol.setLastIo("I");
+                }
+
+                //妫�鏌ユ槸鍚﹀瓨鍦ㄥ伐浣�1浠诲姟瓒呮椂娌′笅鍙�
+                if (rgvProtocol.getTaskNo1() > 0 && rgvProtocol.getTaskNo2() == 0) {
+                    if (System.currentTimeMillis() - rgvProtocol.getTask1SendTime() > (1000*60)) {
+                        //宸ヤ綅1涓嬪彂鏃堕棿瓒呰繃60s
+                        RgvCommand rgvCommand = new RgvCommand();
+                        rgvCommand.setRgvNo(rgvProtocol.getRgvNo());//RGV缂栧彿
+                        rgvCommand.setCommand((short) 1);//宸ヤ綅1纭
+                        if (!MessageQueue.offer(SlaveType.Rgv, rgvCommand.getRgvNo(), new Task(4, rgvCommand))) {
+                            log.error("RGV纭鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand));
+                            return;
+                        }
+                        log.error("RGV纭鍛戒护涓嬪彂鎴愬姛锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand));
+                    }
+                }
+            }
+        }
+    }
+
+    //rgv鍏ュ簱
+    public synchronized void rgvInExecute(ZyRgvThread rgvThread, RgvProtocol rgvProtocol) {
+        for (RgvSlave.Sta sta : rgvThread.getSlave().getInStn()) {
+            if (rgvProtocol.getTaskNo1() > 0) {
+                //妫�娴媟gv宸ヤ綅1鏄惁涓哄叆搴撲换鍔�
+                WrkMast wrkMast1 = wrkMastMapper.selectByWrkNo(rgvProtocol.getTaskNo1().intValue());
+                if (wrkMast1.getWrkSts() > 100) {
+                    continue;//鍑哄簱浠诲姟璺宠繃
                 }
             }
 
+            SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, sta.getDevpPlcId());
+            StaProtocol staProtocol = devpThread.getStation().get(sta.getSourceStaNo());
+            //鍒ゆ柇杈撻�佺嚎鏄惁鑷姩銆佹湁鐗┿�佸彲鍏ャ�佹湁宸ヤ綔鍙�
+            if (!(staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isOutEnable() && (staProtocol.getWorkNo() > 0))) {
+                continue;
+            }
+
+            //鎼滅储宸ヤ綔妗�
+            WrkMast wrkMast = wrkMastMapper.selectByWrkNo(staProtocol.getWorkNo().intValue());
+            if (wrkMast == null) {
+                continue;//宸ヤ綔妗d笉瀛樺湪
+            }
+
+            //鑾峰彇RGV鏀捐揣绔欑偣
+            Integer staNo = Utils.getRgvStaNo(rgvProtocol.getRgvNo(), sta.getSourceStaNo(), staProtocol.getStaNo().intValue(), true);
+            if (staNo == null) {
+                continue;//RGV鏀捐揣绔欑偣涓嶅瓨鍦�
+            }
+
+            //鍒ゆ柇鐩爣绔欐槸鍚﹁嚜鍔ㄣ�佸彲鍏ャ�佹棤鐗┿�佹棤宸ヤ綔鍙�
+            StaProtocol staProtocol1 = devpThread.getStation().get(staNo);
+            if (!(staProtocol1.isAutoing() && staProtocol1.isInEnable() && !staProtocol1.isLoading() && (staProtocol1.getWorkNo() == 0))) {
+                continue;
+            }
+
+            // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+            RgvCommand rgvCommand = new RgvCommand();
+            rgvCommand.setRgvNo(rgvProtocol.getRgvNo());//RGV缂栧彿
+            rgvCommand.setAckFinish((short) 0);
+
+            //鍒ゆ柇rgv宸ヤ綅1鏄惁鍙敤
+            if (rgvProtocol.getTaskNo1() == 0) {
+                rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue());//宸ヤ綔鍙�
+                rgvCommand.setTaskMode1(RgvTaskModeType.PICK_RELEASE);//宸ヤ綔妯″紡 鍙栨斁璐�
+                rgvCommand.setSourceStaNo1(staProtocol.getStaNo());//婧愮珯
+                rgvCommand.setDestinationStaNo1(staNo.shortValue());//鐩爣绔�
+                rgvCommand.setCommand((short) 0);//宸ヤ綅1鏆備笉纭
+            } else if (rgvProtocol.getTaskNo2() == 0) {//鍒ゆ柇rgv宸ヤ綅2鏄惁鍙敤
+                rgvCommand.setTaskNo2(wrkMast.getWrkNo().shortValue());//宸ヤ綔鍙�
+                rgvCommand.setTaskMode2(RgvTaskModeType.PICK_RELEASE);//宸ヤ綔妯″紡 鍙栨斁璐�
+                rgvCommand.setSourceStaNo2(staProtocol.getStaNo());//婧愮珯
+                rgvCommand.setDestinationStaNo2(staNo.shortValue());//鐩爣绔�
+                rgvCommand.setCommand((short) 1);//宸ヤ綅2纭
+            }else {
+                continue;//娌℃湁鍙敤RGV宸ヤ綅
+            }
+
+            if (!MessageQueue.offer(SlaveType.Rgv, rgvCommand.getRgvNo(), new Task(2, rgvCommand))) {
+                log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand));
+                continue;
+            }
+
+            log.error("RGV鍛戒护涓嬪彂鎴愬姛锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand));
+        }
+    }
+
+    //rgv鍑哄簱
+    public synchronized void rgvOutExecute(ZyRgvThread rgvThread, RgvProtocol rgvProtocol) {
+        for (RgvSlave.Sta sta : rgvThread.getSlave().getOutStn()) {
+            if (rgvProtocol.getTaskNo1() > 0) {
+                //妫�娴媟gv宸ヤ綅1鏄惁涓哄嚭搴撲换鍔�
+                WrkMast wrkMast1 = wrkMastMapper.selectByWrkNo(rgvProtocol.getTaskNo1().intValue());
+                if (wrkMast1.getWrkSts() < 100) {
+                    continue;//鍏ュ簱浠诲姟璺宠繃
+                }
+            }
+
+            SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, sta.getDevpPlcId());
+            StaProtocol staProtocol = devpThread.getStation().get(sta.getSourceStaNo());
+            //鍒ゆ柇杈撻�佺嚎鏄惁鑷姩銆佹湁鐗┿�佸彲鍑恒�佹湁宸ヤ綔鍙�
+            if (!(staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isOutEnable() && (staProtocol.getWorkNo() > 0))) {
+                continue;
+            }
+
+            //鎼滅储宸ヤ綔妗�
+            WrkMast wrkMast = wrkMastMapper.selectByWrkNo(staProtocol.getWorkNo().intValue());
+            if (wrkMast == null) {
+                continue;//宸ヤ綔妗d笉瀛樺湪
+            }
+
+            //鑾峰彇RGV鏀捐揣绔欑偣
+            Integer staNo = Utils.getRgvStaNo(rgvProtocol.getRgvNo(), sta.getSourceStaNo(), staProtocol.getStaNo().intValue(), false);
+            if (staNo == null) {
+                continue;//RGV鏀捐揣绔欑偣涓嶅瓨鍦�
+            }
+
+            //鍒ゆ柇鐩爣绔欐槸鍚﹁嚜鍔ㄣ�佸彲鍑恒�佹棤鐗┿�佹棤宸ヤ綔鍙�
+            StaProtocol staProtocol1 = devpThread.getStation().get(staNo);
+            if (!(staProtocol1.isAutoing() && staProtocol1.isOutEnable() && !staProtocol1.isLoading() && (staProtocol1.getWorkNo() == 0))) {
+                continue;
+            }
+
+            // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+            RgvCommand rgvCommand = new RgvCommand();
+            rgvCommand.setRgvNo(rgvProtocol.getRgvNo());//RGV缂栧彿
+            rgvCommand.setAckFinish((short) 0);
+
+            //鍒ゆ柇rgv宸ヤ綅1鏄惁鍙敤
+            if (rgvProtocol.getTaskNo1() == 0) {
+                rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue());//宸ヤ綔鍙�
+                rgvCommand.setTaskMode1(RgvTaskModeType.PICK_RELEASE);//宸ヤ綔妯″紡 鍙栨斁璐�
+                rgvCommand.setSourceStaNo1(staProtocol.getStaNo());//婧愮珯
+                rgvCommand.setDestinationStaNo1(staNo.shortValue());//鐩爣绔�
+                rgvCommand.setCommand((short) 0);//宸ヤ綅1鏆備笉纭
+            } else if (rgvProtocol.getTaskNo2() == 0) {//鍒ゆ柇rgv宸ヤ綅2鏄惁鍙敤
+                rgvCommand.setTaskNo2(wrkMast.getWrkNo().shortValue());//宸ヤ綔鍙�
+                rgvCommand.setTaskMode2(RgvTaskModeType.PICK_RELEASE);//宸ヤ綔妯″紡 鍙栨斁璐�
+                rgvCommand.setSourceStaNo2(staProtocol.getStaNo());//婧愮珯
+                rgvCommand.setDestinationStaNo2(staNo.shortValue());//鐩爣绔�
+                rgvCommand.setCommand((short) 1);//宸ヤ綅2纭
+            }else {
+                continue;//娌℃湁鍙敤RGV宸ヤ綅
+            }
+
+            if (!MessageQueue.offer(SlaveType.Rgv, rgvCommand.getRgvNo(), new Task(2, rgvCommand))) {
+                log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand));
+                continue;
+            }
+
+            log.error("RGV鍛戒护涓嬪彂鎴愬姛锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand));
+        }
+    }
+
+    //RGV宸ヤ綔瀹屾垚
+    public synchronized void rgvFinished() {
+        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+        for (RgvSlave slave : slaveProperties.getRgv()) {
+            ZyRgvThread rgvThread = (ZyRgvThread) SlaveConnection.get(SlaveType.Rgv, slave.getId());
+            if (rgvThread == null) {
+                return;
+            }
+
+            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
+            if (rgvProtocol == null) {
+                return;
+            }
+
+            //  鐘舵�侊細绛夊緟纭
+            if (rgvProtocol.getStatusType() == RgvStatusType.WAITING) {
+                if (rgvProtocol.getTaskNo1() == 9999) {
+                    // RGV澶嶄綅
+                    rgvThread.setResetFlag1(true);
+                }else {
+                    // 鑾峰彇寰呯‘璁ゅ伐浣滄。
+                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(rgvProtocol.getTaskNo1().intValue());
+                    if (wrkMast == null) {
+                        log.error("RGV澶勪簬绛夊緟纭涓斾换鍔″畬鎴愮姸鎬侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�俁GV鍙�={}锛屽伐浣滃彿={}", rgvProtocol.getRgvNo(), rgvProtocol.getTaskNo1());
+                        continue;
+                    }
+
+                    if (rgvProtocol.getTaskNo1() > 0 && rgvProtocol.getTaskFinish1() == 1) {
+                        //宸ヤ綅1浠诲姟瀹屾垚
+                        // RGV澶嶄綅
+                        rgvThread.setResetFlag1(true);
+
+                        //缁欑洰鏍囩珯杈撻�佺嚎鍐欏叆鏁版嵁
+                        Short destinationPos1 = rgvProtocol.getDestinationPos1();//鑾峰彇宸ヤ綅1鐩爣绔�
+                        StaProtocol staProtocol = devpThread.getStation().get(destinationPos1.intValue()).clone();
+                        staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());//鍐欏叆宸ヤ綔鍙�
+                        staProtocol.setStaNo(wrkMast.getStaNo().shortValue());//鍐欏叆鐩爣绔�
+                        if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol))) {
+                            log.info("{}浠诲姟锛孯GV鎼繍鎴愬姛锛屽啓鍏ヨ緭閫佹暟鎹け璐}", wrkMast.getWrkNo(), JSON.toJSONString(staProtocol));
+                        }
+
+                        //2鍙稲GV鍜�3鍙稲GV宸ヤ綔瀹屾垚鍚庨渶瑕佹洿鏂板伐浣滄。鐘舵��
+                        if (rgvProtocol.getRgvNo() == 2 || rgvProtocol.getRgvNo() == 3) {
+                            if (wrkMast.getWrkSts() == 13) {//13.RGV鎼繍涓� => 14.宸插嚭搴�
+                                wrkMast.setWrkSts(14L);
+                                wrkMast.setModiTime(new Date());
+                                wrkMastMapper.updateById(wrkMast);
+                            }
+                        }
+                    }
+
+                    if (rgvProtocol.getTaskNo2() > 0 && rgvProtocol.getTaskFinish2() == 1) {
+                        //宸ヤ綅2浠诲姟瀹屾垚
+                        // RGV澶嶄綅
+                        rgvThread.setResetFlag2(true);
+
+                        //缁欑洰鏍囩珯杈撻�佺嚎鍐欏叆鏁版嵁
+                        Short destinationPos2 = rgvProtocol.getDestinationPos2();//鑾峰彇宸ヤ綅2鐩爣绔�
+                        StaProtocol staProtocol = devpThread.getStation().get(destinationPos2.intValue()).clone();
+                        staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());//鍐欏叆宸ヤ綔鍙�
+                        staProtocol.setStaNo(wrkMast.getStaNo().shortValue());//鍐欏叆鐩爣绔�
+                        if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol))) {
+                            log.info("{}浠诲姟锛孯GV鎼繍鎴愬姛锛屽啓鍏ヨ緭閫佹暟鎹け璐}", wrkMast.getWrkNo(), JSON.toJSONString(staProtocol));
+                        }
+
+                        //2鍙稲GV鍜�3鍙稲GV宸ヤ綔瀹屾垚鍚庨渶瑕佹洿鏂板伐浣滄。鐘舵��
+                        if (rgvProtocol.getRgvNo() == 2 || rgvProtocol.getRgvNo() == 3) {
+                            if (wrkMast.getWrkSts() == 13) {//13.RGV鎼繍涓� => 14.宸插嚭搴�
+                                wrkMast.setWrkSts(14L);
+                                wrkMast.setModiTime(new Date());
+                                wrkMastMapper.updateById(wrkMast);
+                            }
+                        }
+                    }
+                }
+            }
         }
     }
 
diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java
index d1ee128..a2e94d9 100644
--- a/src/main/java/com/zy/asrs/utils/Utils.java
+++ b/src/main/java/com/zy/asrs/utils/Utils.java
@@ -6,6 +6,7 @@
 
 import java.text.DecimalFormat;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 
 /**
@@ -186,6 +187,63 @@
         return 0;
     }
 
+    //鑾峰彇RGV鏀捐揣绔欑偣
+    public static Integer getRgvStaNo(Integer rgvNo, Integer sourceStaNo, Integer staNo, Boolean pakIn) {
+        if (pakIn) {
+            return getRgvStaNoPakIn(rgvNo, sourceStaNo, staNo);
+        } else {
+            return getRgvStaNoPakOut(rgvNo, sourceStaNo, staNo);
+        }
+    }
+
+    private static Integer getRgvStaNoPakIn(Integer rgvNo, Integer sourceStaNo, Integer staNo) {
+        //鑾峰彇RGV鏀捐揣绔欑偣
+        Integer rgvStaNo = null;
+        if (rgvNo == 1) {
+            switch (staNo) {
+                case 1022:
+                    rgvStaNo = 1020;
+                    break;
+                case 1025:
+                    rgvStaNo = 1023;
+                    break;
+            }
+        } else if (rgvNo == 2) {
+            rgvStaNo = 2402;
+        } else if (rgvNo == 3) {
+            if (sourceStaNo == 2102) {
+                rgvStaNo = 2103;
+            } else if (sourceStaNo == 4007 || sourceStaNo == 4016) {
+                rgvStaNo = 2301;
+            }
+        }
+
+        return rgvStaNo;
+    }
+
+    private static Integer getRgvStaNoPakOut(Integer rgvNo, Integer sourceStaNo, Integer staNo) {
+        //鑾峰彇RGV鏀捐揣绔欑偣
+        Integer rgvStaNo = null;
+        if (rgvNo == 1) {
+            if (staNo == 3007 || staNo == 3012) {
+                rgvStaNo = 2401;
+            }else {
+                rgvStaNo = 2013;
+            }
+        } else if (rgvNo == 2) {
+            rgvStaNo = 3001;
+        } else if (rgvNo == 3) {
+            if (sourceStaNo == 2003 && staNo == 2001) {
+                rgvStaNo = 2002;
+            } else if (sourceStaNo == 2003 && staNo == 4001) {
+                rgvStaNo = 4001;
+            } else if (sourceStaNo == 2003 && staNo == 4010) {
+                rgvStaNo = 4010;
+            }
+        }
+        return rgvStaNo;
+    }
+
     public static void main(String[] args) {
         SlaveProperties slaveProperties = new SlaveProperties();
         slaveProperties.setDoubleDeep(true);
diff --git a/src/main/java/com/zy/common/CodeBuilder.java b/src/main/java/com/zy/common/CodeBuilder.java
index d2c576a..3b9fcf5 100644
--- a/src/main/java/com/zy/common/CodeBuilder.java
+++ b/src/main/java/com/zy/common/CodeBuilder.java
@@ -1,6 +1,7 @@
 package com.zy.common;
 
 import com.core.generators.CoolGenerator;
+import com.core.generators.constant.SqlOsType;
 
 /**
  * Created by vincent on 2019-06-04
@@ -15,11 +16,17 @@
 //        generator.password="xltys1995";
 //        generator.table="sys_host";
         // sqlserver
-        generator.url="192.168.3.208:1433;databasename=cool";
+        generator.sqlOsType = SqlOsType.SQL_SERVER;
+        generator.url="192.168.4.15:1433;databasename=mdqdasrs";
         generator.username="sa";
         generator.password="sa@123";
-        generator.table="asr_wrk_detl";
+        generator.table="asr_bas_rgv_opt";
         generator.packagePath="com.zy.asrs";
+        generator.html = false;
+        generator.htmlDetail = false;
+        generator.js = false;
+        generator.sql = false;
+        generator.controller = false;
         generator.build();
     }
 
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index 5c536e3..74c178e 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -58,6 +58,12 @@
                     mainService.crnIoExecute();
                     // 鍏ュ簱  ===>> 鎵ц瀵瑰伐浣滄。鐨勫畬鎴愭搷浣�
                     mainService.storeFinished();
+
+                    //RGV鎼繍
+                    mainService.rgvIoExecute();
+                    //RGV宸ヤ綔瀹屾垚
+                    mainService.rgvFinished();
+
                     // 鍫嗗灈鏈哄紓甯镐俊鎭褰�
                     mainService.recCrnErr();
                     // 鍏ュ簱  ===>> 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐�
@@ -66,7 +72,6 @@
                     mainService.ledExecute();
                     // 鍏朵粬  ===>> LED鏄剧ず鍣ㄥ浣嶏紝鏄剧ず榛樿淇℃伅
                     mainService.ledReset();
-//                    mainService.outOfDevp();
 
                 } catch (Exception e) {
                     e.printStackTrace();
diff --git a/src/main/java/com/zy/core/RgvThread.java b/src/main/java/com/zy/core/RgvThread.java
new file mode 100644
index 0000000..be55a64
--- /dev/null
+++ b/src/main/java/com/zy/core/RgvThread.java
@@ -0,0 +1,9 @@
+package com.zy.core;
+
+public interface RgvThread extends ThreadHandler {
+
+    void setResetFlag1(boolean flag);
+
+    void setResetFlag2(boolean flag);
+
+}
diff --git a/src/main/java/com/zy/core/ServerBootstrap.java b/src/main/java/com/zy/core/ServerBootstrap.java
index 817c710..c2faa69 100644
--- a/src/main/java/com/zy/core/ServerBootstrap.java
+++ b/src/main/java/com/zy/core/ServerBootstrap.java
@@ -6,6 +6,7 @@
 import com.zy.core.model.CrnSlave;
 import com.zy.core.model.DevpSlave;
 import com.zy.core.model.LedSlave;
+import com.zy.core.model.RgvSlave;
 import com.zy.core.properties.SlaveProperties;
 import com.zy.core.thread.*;
 import lombok.extern.slf4j.Slf4j;
@@ -51,6 +52,10 @@
         for (Slave crn : slaveProperties.getCrn()) {
             MessageQueue.init(SlaveType.Crn, crn);
         }
+        // 鍒濆鍖朢GVmq
+        for (Slave rgv : slaveProperties.getRgv()) {
+            MessageQueue.init(SlaveType.Rgv, rgv);
+        }
         // 鍒濆鍖栬緭閫佺嚎mq
         for (Slave devp : slaveProperties.getDevp()) {
             MessageQueue.init(SlaveType.Devp, devp);
@@ -81,6 +86,12 @@
             new Thread((Runnable) crnThread).start();
             SlaveConnection.put(SlaveType.Crn, crn.getId(), crnThread);
         }
+        log.info("鍒濆鍖朢GV绾跨▼...................................................");
+        for (RgvSlave rgv : slaveProperties.getRgv()) {
+            RgvThread rgvThread = new ZyRgvThread(rgv);
+            new Thread((Runnable) rgvThread).start();
+            SlaveConnection.put(SlaveType.Rgv, rgv.getId(), rgvThread);
+        }
         // 鍒濆鍖栬緭閫佺嚎绾跨▼
         log.info("鍒濆鍖栬緭閫佺嚎绾跨▼...................................................");
         for (DevpSlave devp : slaveProperties.getDevp()) {
diff --git a/src/main/java/com/zy/core/enums/RgvModeType.java b/src/main/java/com/zy/core/enums/RgvModeType.java
new file mode 100644
index 0000000..2b2fdc5
--- /dev/null
+++ b/src/main/java/com/zy/core/enums/RgvModeType.java
@@ -0,0 +1,45 @@
+package com.zy.core.enums;
+
+/**
+ * RGV妯″紡鏋氫妇
+ */
+public enum RgvModeType {
+
+    STOP((short) 0, "鍋滄満妯″紡"),
+    MANUAL((short) 1, "鎵嬪姩妯″紡"),
+    AUTO((short) 2, "鑷姩妯″紡"),
+    COMPUTER((short) 3, "鐢佃剳妯″紡"),
+    ;
+
+    public Short id;
+    public String desc;
+
+    RgvModeType(Short id, String desc) {
+        this.id = id;
+        this.desc = desc;
+    }
+
+    public static RgvModeType get(Short id) {
+        if (null == id) {
+            return null;
+        }
+        for (RgvModeType type : RgvModeType.values()) {
+            if (type.id.equals(id)) {
+                return type;
+            }
+        }
+        return null;
+    }
+
+    public static RgvModeType get(RgvModeType type) {
+        if (null == type) {
+            return null;
+        }
+        for (RgvModeType type1 : RgvModeType.values()) {
+            if (type1 == type) {
+                return type1;
+            }
+        }
+        return null;
+    }
+}
diff --git a/src/main/java/com/zy/core/enums/RgvStatusType.java b/src/main/java/com/zy/core/enums/RgvStatusType.java
new file mode 100644
index 0000000..972cb31
--- /dev/null
+++ b/src/main/java/com/zy/core/enums/RgvStatusType.java
@@ -0,0 +1,52 @@
+package com.zy.core.enums;
+
+/**
+ * RGV鐘舵�佹灇涓�
+ */
+public enum RgvStatusType {
+
+    OFFLINE((short) -1, "绂荤嚎"),
+    IDLE((short) 0, "绌洪棽"),
+    PICK_WALK((short) 1, "鍙栬揣璧拌"),
+    PICK_WAIT((short) 2, "鍙栬揣绛夊緟"),
+    PICK_WORKING((short) 3, "鍙栬揣涓�"),
+    RELEASE_WALK((short) 4, "鏀捐揣璧拌"),
+    RELEASE_WAIT((short) 5, "鏀捐揣绛夊緟"),
+    RELEASE_WORKING((short) 6, "鏀捐揣涓�"),
+    WALKING((short) 9, "璧拌涓�"),
+    WAITING((short) 90, "浠诲姟瀹屾垚绛夊緟WCS纭"),
+    ALARM((short) 99, "鎶ヨ"),
+    OTHER((short) 100, "鍏朵粬"),
+    ;
+    public Short id;
+    public String desc;
+
+    RgvStatusType(Short id, String desc) {
+        this.id = id;
+        this.desc = desc;
+    }
+
+    public static RgvStatusType get(Short id) {
+        if (null == id) {
+            return null;
+        }
+        for (RgvStatusType type : RgvStatusType.values()) {
+            if (type.id.equals(id)) {
+                return type;
+            }
+        }
+        return null;
+    }
+
+    public static RgvStatusType get(RgvStatusType type) {
+        if (null == type) {
+            return null;
+        }
+        for (RgvStatusType type1 : RgvStatusType.values()) {
+            if (type1 == type) {
+                return type1;
+            }
+        }
+        return null;
+    }
+}
diff --git a/src/main/java/com/zy/core/enums/RgvTaskModeType.java b/src/main/java/com/zy/core/enums/RgvTaskModeType.java
new file mode 100644
index 0000000..85a8626
--- /dev/null
+++ b/src/main/java/com/zy/core/enums/RgvTaskModeType.java
@@ -0,0 +1,42 @@
+package com.zy.core.enums;
+
+public enum RgvTaskModeType {
+
+    NONE((short) 0, "鏃�"),
+    PICK((short) 1, "鍙栬揣"),
+    RELEASE((short) 2, "鏀捐揣"),
+    PICK_RELEASE((short) 3, "鍙栨斁璐�"),
+    MOVE((short) 4, "绉诲姩(鍙戝伐浣�1浠诲姟鍗冲彲)"),
+    ;
+    public Short id;
+    public String desc;
+
+    RgvTaskModeType(Short id, String desc) {
+        this.id = id;
+        this.desc = desc;
+    }
+
+    public static RgvTaskModeType get(Short id) {
+        if (null == id) {
+            return null;
+        }
+        for (RgvTaskModeType type : RgvTaskModeType.values()) {
+            if (type.id.equals(id)) {
+                return type;
+            }
+        }
+        return null;
+    }
+
+    public static RgvTaskModeType get(RgvTaskModeType type) {
+        if (null == type) {
+            return null;
+        }
+        for (RgvTaskModeType type1 : RgvTaskModeType.values()) {
+            if (type1 == type) {
+                return type1;
+            }
+        }
+        return null;
+    }
+}
diff --git a/src/main/java/com/zy/core/enums/RgvWalkPosType.java b/src/main/java/com/zy/core/enums/RgvWalkPosType.java
new file mode 100644
index 0000000..b245599
--- /dev/null
+++ b/src/main/java/com/zy/core/enums/RgvWalkPosType.java
@@ -0,0 +1,44 @@
+package com.zy.core.enums;
+
+/**
+ * RGV璧拌瀹氫綅鏋氫妇
+ */
+public enum RgvWalkPosType {
+
+    POSITION((short) 0, "鍦ㄥ畾浣�"),
+    NONE((short) 1, "涓嶅湪瀹氫綅"),
+    ;
+
+    public Short id;
+    public String desc;
+
+    RgvWalkPosType(Short id, String desc) {
+        this.id = id;
+        this.desc = desc;
+    }
+
+    public static RgvWalkPosType get(Short id) {
+        if (null == id) {
+            return null;
+        }
+        for (RgvWalkPosType type : RgvWalkPosType.values()) {
+            if (type.id.equals(id)) {
+                return type;
+            }
+        }
+        return null;
+    }
+
+    public static RgvWalkPosType get(RgvWalkPosType type) {
+        if (null == type) {
+            return null;
+        }
+        for (RgvWalkPosType type1 : RgvWalkPosType.values()) {
+            if (type1 == type) {
+                return type1;
+            }
+        }
+        return null;
+    }
+
+}
diff --git a/src/main/java/com/zy/core/enums/SlaveType.java b/src/main/java/com/zy/core/enums/SlaveType.java
index 56330fe..0f7934d 100644
--- a/src/main/java/com/zy/core/enums/SlaveType.java
+++ b/src/main/java/com/zy/core/enums/SlaveType.java
@@ -8,6 +8,7 @@
     Led,
     Scale,
     Car,
+    Rgv,
     ;
 
     public static SlaveType findInstance(String s){
diff --git a/src/main/java/com/zy/core/model/RgvSlave.java b/src/main/java/com/zy/core/model/RgvSlave.java
new file mode 100644
index 0000000..f2de390
--- /dev/null
+++ b/src/main/java/com/zy/core/model/RgvSlave.java
@@ -0,0 +1,33 @@
+package com.zy.core.model;
+
+import com.zy.core.Slave;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class RgvSlave  extends Slave {
+
+    private Integer rack;
+
+    private Integer slot;
+
+    private List<Sta> inStn = new ArrayList<>();
+
+    private List<Sta> outStn = new ArrayList<>();
+
+    @Data
+    public static class Sta {
+
+        private Integer staNo;//鐩爣绔�
+
+        private Integer sourceStaNo;//婧愮珯
+
+        private Integer devpPlcId;
+
+    }
+
+}
diff --git a/src/main/java/com/zy/core/model/command/RgvCommand.java b/src/main/java/com/zy/core/model/command/RgvCommand.java
new file mode 100644
index 0000000..3be8caa
--- /dev/null
+++ b/src/main/java/com/zy/core/model/command/RgvCommand.java
@@ -0,0 +1,95 @@
+package com.zy.core.model.command;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.zy.core.enums.RgvTaskModeType;
+import lombok.Data;
+
+/**
+ * RGV鍛戒护鎶ユ枃
+ */
+@Data
+public class RgvCommand {
+
+    // RGV缂栧彿
+    private Integer rgvNo = 0;
+
+    // 浠诲姟瀹屾垚纭浣�
+    private Short ackFinish = 0;
+
+    //**************宸ヤ綅1**************
+
+    // 宸ヤ綅1宸ヤ綔鍙�
+    private Short taskNo1 = 0;
+
+    /**
+     * 浠诲姟妯″紡锛�
+     * 0 = 鏃�
+     * 1 = 鍙栬揣
+     * 2 = 鏀捐揣
+     * 3 = 鍙栨斁璐�
+     * 4 = 绉诲姩(鍙戝伐浣�1浠诲姟鍗冲彲)
+     */
+    private Short taskMode1 = 0;
+
+    @JSONField(serialize = false)
+    private RgvTaskModeType taskModeType1;
+
+    // 宸ヤ綅1婧愮珯
+    private Short sourceStaNo1 = 0;
+
+    // 宸ヤ綅1鐩爣绔�
+    private Short destinationStaNo1 = 0;
+
+    //**************宸ヤ綅1**************
+
+
+    //**************宸ヤ綅2**************
+
+    // 宸ヤ綅2宸ヤ綔鍙�
+    private Short taskNo2 = 0;
+
+    /**
+     * 浠诲姟妯″紡锛�
+     * 0 = 鏃�
+     * 1 = 鍙栬揣
+     * 2 = 鏀捐揣
+     * 3 = 鍙栨斁璐�
+     * 4 = 绉诲姩(鍙戝伐浣�1浠诲姟鍗冲彲)
+     */
+    private Short taskMode2 = 0;
+
+    @JSONField(serialize = false)
+    private RgvTaskModeType taskModeType2;
+
+    // 宸ヤ綅1婧愮珯
+    private Short sourceStaNo2 = 0;
+
+    // 宸ヤ綅1鐩爣绔�
+    private Short destinationStaNo2 = 0;
+
+    //**************宸ヤ綅2**************
+
+    // 浠诲姟纭 0锛氭湭纭 1锛氬凡纭
+    private Short command = 0;
+
+    public void setTaskMode1(Short taskMode){
+        this.taskMode1 = taskMode;
+        this.taskModeType1 = RgvTaskModeType.get(taskMode);
+    }
+
+    public void setTaskMode1(RgvTaskModeType type) {
+        this.taskModeType1 = type;
+        this.taskMode1 = RgvTaskModeType.get(type).id;
+    }
+
+    public void setTaskMode2(Short taskMode){
+        this.taskMode2 = taskMode;
+        this.taskModeType2 = RgvTaskModeType.get(taskMode);
+    }
+
+    public void setTaskMode2(RgvTaskModeType type) {
+        this.taskModeType2 = type;
+        this.taskMode2 = RgvTaskModeType.get(type).id;
+    }
+
+}
diff --git a/src/main/java/com/zy/core/model/protocol/RgvProtocol.java b/src/main/java/com/zy/core/model/protocol/RgvProtocol.java
new file mode 100644
index 0000000..7001f63
--- /dev/null
+++ b/src/main/java/com/zy/core/model/protocol/RgvProtocol.java
@@ -0,0 +1,134 @@
+package com.zy.core.model.protocol;
+
+import com.zy.core.enums.RgvModeType;
+import com.zy.core.enums.RgvStatusType;
+import com.zy.core.enums.RgvWalkPosType;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class RgvProtocol {
+
+    //RGV缂栧彿
+    private Integer rgvNo;
+
+    //妯″紡
+    private Short mode;
+
+    //RGV妯″紡鏋氫妇
+    private RgvModeType modeType;
+
+    //RGV鐘舵��
+    private Short status;
+
+    //RGV鐘舵�佹灇涓�
+    private RgvStatusType statusType;
+
+    //宸ヤ綅1宸ヤ綔鍙�
+    private Short taskNo1;
+
+    //宸ヤ綅1鏈夌墿淇″彿
+    private Short loaded1;
+
+    //RGV褰撳墠浣嶇疆
+    private Short rgvPos;
+
+    //璧拌鍦ㄥ畾浣� 0锛氬湪瀹氫綅锛�1锛氫笉鍦ㄥ畾浣�
+    private Short walkPos;
+
+    //RGV璧拌鏋氫妇
+    private RgvWalkPosType walkPosType;
+
+    //宸ヤ綅2宸ヤ綔鍙�
+    private Short taskNo2;
+
+    //宸ヤ綅2鏈夌墿淇″彿
+    private Short loaded2;
+
+    //宸ヤ綅1浠诲姟瀹屾垚淇″彿
+    private Short taskFinish1;
+
+    //宸ヤ綅2浠诲姟瀹屾垚淇″彿
+    private Short taskFinish2;
+
+    //寮傚父鐮�
+    private Short alarm;
+
+    //蹇冭烦
+    private Short heart;
+
+    //澶囩敤1
+    private Short temp1;
+
+    //澶囩敤2
+    private Short temp2;
+
+    //澶囩敤3
+    private Short temp3;
+
+    //澶囩敤4
+    private Short temp4;
+
+    //澶囩敤5
+    private Short temp5;
+
+    //宸ヤ綅1浠诲姟妯″紡
+    private Short taskMode1;
+
+    //宸ヤ綅1婧愮珯
+    private Short sourceStn1;
+
+    //宸ヤ綅1鐩爣绔�
+    private Short destinationPos1;
+
+    //宸ヤ綅2浠诲姟妯″紡
+    private Short taskMode2;
+
+    //宸ヤ綅2婧愮珯
+    private Short sourceStn2;
+
+    //宸ヤ綅2鐩爣绔�
+    private Short destinationPos2;
+
+    //宸ヤ綅1涓嬪彂鏃堕棿
+    private Long task1SendTime;
+
+    /**
+     * 鏈�杩戜竴娆″叆鍑哄簱绫诲瀷
+     *       I:鍏ュ簱
+     *       O:鍑哄簱
+     */
+    private String lastIo = "I";
+
+    public void setMode(Short mode) {
+        this.mode = mode;
+        this.modeType = RgvModeType.get(mode);
+    }
+
+    public void setMode(RgvModeType type) {
+        this.mode = type.id;
+        this.modeType = type;
+    }
+
+    public void setStatus(Short status) {
+        this.status = status;
+        this.statusType = RgvStatusType.get(status);
+    }
+
+    public void setStatus(RgvStatusType type) {
+        this.status = type.id;
+        this.statusType = type;
+    }
+
+    public void setWalkPos(Short walkPos) {
+        this.walkPos = walkPos;
+        this.walkPosType = RgvWalkPosType.get(walkPos);
+    }
+
+    public void setWalkPos(RgvWalkPosType type) {
+        this.walkPos = type.id;
+        this.walkPosType = type;
+    }
+
+}
diff --git a/src/main/java/com/zy/core/properties/SlaveProperties.java b/src/main/java/com/zy/core/properties/SlaveProperties.java
index b2e19a4..52badea 100644
--- a/src/main/java/com/zy/core/properties/SlaveProperties.java
+++ b/src/main/java/com/zy/core/properties/SlaveProperties.java
@@ -4,6 +4,7 @@
 import com.zy.core.model.CrnSlave;
 import com.zy.core.model.DevpSlave;
 import com.zy.core.model.LedSlave;
+import com.zy.core.model.RgvSlave;
 import lombok.Data;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.context.annotation.Configuration;
@@ -42,4 +43,6 @@
 
     private List<Slave> car = new ArrayList<>();
 
+    private List<RgvSlave> rgv = new ArrayList<>();
+
 }
diff --git a/src/main/java/com/zy/core/thread/ZyRgvThread.java b/src/main/java/com/zy/core/thread/ZyRgvThread.java
new file mode 100644
index 0000000..e10e17f
--- /dev/null
+++ b/src/main/java/com/zy/core/thread/ZyRgvThread.java
@@ -0,0 +1,402 @@
+package com.zy.core.thread;
+
+import HslCommunication.Core.Types.OperateResult;
+import HslCommunication.Core.Types.OperateResultExOne;
+import HslCommunication.Profinet.Siemens.SiemensPLCS;
+import HslCommunication.Profinet.Siemens.SiemensS7Net;
+import com.alibaba.fastjson.JSON;
+import com.core.common.DateUtils;
+import com.core.common.SpringUtils;
+import com.zy.asrs.entity.BasRgv;
+import com.zy.asrs.entity.BasRgvOpt;
+import com.zy.asrs.service.BasRgvOptService;
+import com.zy.asrs.service.BasRgvService;
+import com.zy.core.RgvThread;
+import com.zy.core.cache.MessageQueue;
+import com.zy.core.cache.OutputQueue;
+import com.zy.core.enums.RgvStatusType;
+import com.zy.core.enums.RgvTaskModeType;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.model.RgvSlave;
+import com.zy.core.model.Task;
+import com.zy.core.model.command.RgvCommand;
+import com.zy.core.model.protocol.RgvProtocol;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.MessageFormat;
+import java.util.Date;
+
+/**
+ * RGV绾跨▼
+ */
+@Data
+@Slf4j
+public class ZyRgvThread implements Runnable, RgvThread {
+
+    private SiemensS7Net siemensNet;
+    private RgvSlave slave;
+    private RgvProtocol rgvProtocol;
+    private boolean resetFlag1 = false;//宸ヤ綅1澶嶄綅淇″彿
+    private boolean resetFlag2 = false;//宸ヤ綅2澶嶄綅淇″彿
+
+    public ZyRgvThread(RgvSlave slave) {
+        this.slave = slave;
+    }
+
+    @Override
+    @SuppressWarnings("InfiniteLoopStatement")
+    public void run() {
+        this.connect();
+        while (true) {
+            try {
+                int step = 1;
+                Task task = MessageQueue.poll(SlaveType.Rgv, slave.getId());
+                if (task != null) {
+                    step = task.getStep();
+                }
+                switch (step) {
+                    // 璇绘暟鎹�
+                    case 1:
+                        readStatus();
+                        break;
+                    // 鍐欏叆鏁版嵁
+                    case 2:
+                        write((RgvCommand) task.getData());
+                        break;
+                    // 澶嶄綅
+                    case 3:
+                        RgvCommand command = (RgvCommand) task.getData();
+                        if (null == command) {
+                            command = new RgvCommand();
+                        }
+                        command.setRgvNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+                        command.setTaskNo1((short) 0); // 宸ヤ綔鍙�
+                        command.setTaskMode1(RgvTaskModeType.NONE); // 浠诲姟妯″紡
+                        command.setSourceStaNo1((short) 0);//婧愮珯
+                        command.setDestinationStaNo1((short) 0);//鐩爣绔�
+                        command.setTaskNo2((short) 0); // 宸ヤ綔鍙�
+                        command.setTaskMode2(RgvTaskModeType.NONE); // 浠诲姟妯″紡
+                        command.setSourceStaNo2((short) 0);//婧愮珯
+                        command.setDestinationStaNo2((short) 0);//鐩爣绔�
+                        command.setAckFinish((short) 1);  // 浠诲姟瀹屾垚纭浣�
+                        write(command);
+                        break;
+                    //鍐欏叆鏁版嵁纭鍛戒护
+                    case 4:
+                        writeCommand((RgvCommand) task.getData());
+                        break;
+                    default:
+                        break;
+                }
+                Thread.sleep(500);
+            } catch (Exception e) {
+//                e.printStackTrace();
+            }
+
+        }
+    }
+
+    @Override
+    public boolean connect() {
+        boolean result = false;
+        siemensNet = new SiemensS7Net(SiemensPLCS.S1200, slave.getIp());
+        siemensNet.setRack(slave.getRack().byteValue());
+        siemensNet.setSlot(slave.getSlot().byteValue());
+        OperateResult connect = siemensNet.ConnectServer();
+        if(connect.IsSuccess){
+            result = true;
+            OutputQueue.CRN.offer(MessageFormat.format( "銆恵0}銆慠GV plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
+            log.info("RGV plc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
+        } else {
+            OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慠GV plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
+            log.error("RGV plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
+            initRgv();
+        }
+        return result;
+    }
+
+    /**
+     * 璇诲彇鐘舵��
+     */
+    private void readStatus(){
+        try {
+            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 34);
+            if (result.IsSuccess) {
+                if (null == rgvProtocol) {
+                    rgvProtocol = new RgvProtocol();
+                    rgvProtocol.setRgvNo(slave.getId());
+                }
+                rgvProtocol.setMode(siemensNet.getByteTransform().TransInt16(result.Content, 0));//妯″紡
+                rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 2));//RGV鐘舵��
+                rgvProtocol.setTaskNo1(siemensNet.getByteTransform().TransInt16(result.Content, 4));//宸ヤ綅1宸ヤ綔鍙�
+                rgvProtocol.setLoaded1(siemensNet.getByteTransform().TransInt16(result.Content, 6));//宸ヤ綅1鏈夌墿
+                rgvProtocol.setRgvPos(siemensNet.getByteTransform().TransInt16(result.Content, 8));//RGV褰撳墠浣嶇疆
+                rgvProtocol.setWalkPos(siemensNet.getByteTransform().TransInt16(result.Content, 10));//璧拌鍦ㄥ畾浣�
+                rgvProtocol.setTaskNo2(siemensNet.getByteTransform().TransInt16(result.Content, 12));//宸ヤ綅2宸ヤ綔鍙�
+                rgvProtocol.setLoaded2(siemensNet.getByteTransform().TransInt16(result.Content, 14));//宸ヤ綅2鏈夌墿
+                rgvProtocol.setTaskFinish1(siemensNet.getByteTransform().TransInt16(result.Content, 16));//宸ヤ綅1浠诲姟瀹屾垚
+                rgvProtocol.setTaskFinish2(siemensNet.getByteTransform().TransInt16(result.Content, 18));//宸ヤ綅2浠诲姟瀹屾垚
+                rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 20));//寮傚父鐮�
+                rgvProtocol.setHeart(siemensNet.getByteTransform().TransInt16(result.Content, 22));//RGV蹇冭烦淇″彿
+                rgvProtocol.setTemp1(siemensNet.getByteTransform().TransInt16(result.Content, 24));//澶囩敤1
+                rgvProtocol.setTemp2(siemensNet.getByteTransform().TransInt16(result.Content, 26));//澶囩敤2
+                rgvProtocol.setTemp3(siemensNet.getByteTransform().TransInt16(result.Content, 28));//澶囩敤3
+                rgvProtocol.setTemp4(siemensNet.getByteTransform().TransInt16(result.Content, 30));//澶囩敤4
+                rgvProtocol.setTemp5(siemensNet.getByteTransform().TransInt16(result.Content, 32));//澶囩敤5
+
+                OperateResultExOne<byte[]> result2 = siemensNet.Read("DB100.0", (short) 22);
+                if (result2.IsSuccess) {
+                    rgvProtocol.setTaskMode1(siemensNet.getByteTransform().TransInt16(result.Content, 4));//宸ヤ綅1浠诲姟妯″紡
+                    rgvProtocol.setSourceStn1(siemensNet.getByteTransform().TransInt16(result.Content, 6));//宸ヤ綅1婧愮珯
+                    rgvProtocol.setDestinationPos1(siemensNet.getByteTransform().TransInt16(result.Content, 8));//宸ヤ綅1鐩爣绔�
+                    rgvProtocol.setTaskMode2(siemensNet.getByteTransform().TransInt16(result.Content, 14));//宸ヤ綅2浠诲姟妯″紡
+                    rgvProtocol.setSourceStn2(siemensNet.getByteTransform().TransInt16(result.Content, 16));//宸ヤ綅2婧愮珯
+                    rgvProtocol.setDestinationPos2(siemensNet.getByteTransform().TransInt16(result.Content, 18));//宸ヤ綅2鐩爣绔�
+                }
+
+                OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
+
+                // 澶嶄綅淇″彿
+                if (rgvProtocol.getStatusType().equals(RgvStatusType.WAITING)) {
+                    if (resetFlag1) {
+                        RgvCommand rgvCommand = new RgvCommand();
+                        rgvCommand.setAckFinish((short) 2);//宸ヤ綅1浠诲姟缁撴潫宸叉帴鏀�
+                        if (write(rgvCommand)) {
+                            resetFlag1 = false;
+                        }
+                    }
+
+                    if (resetFlag2) {
+                        RgvCommand rgvCommand = new RgvCommand();
+                        rgvCommand.setAckFinish((short) 3);//宸ヤ綅2浠诲姟缁撴潫宸叉帴鏀�
+                        if (write(rgvCommand)) {
+                            resetFlag2 = false;
+                        }
+                    }
+                }
+
+                try {
+                    // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
+                    BasRgvService basRgvService = SpringUtils.getBean(BasRgvService.class);
+                    BasRgv basRgv = new BasRgv();
+                    basRgv.setRgvNo(slave.getId());
+                    basRgv.setMode(rgvProtocol.getMode().intValue());
+                    basRgv.setStatus(rgvProtocol.getStatus().intValue());
+                    basRgv.setTaskNo1(rgvProtocol.getTaskNo1().intValue());
+                    basRgv.setLoaded1(rgvProtocol.getLoaded1().intValue());
+                    basRgv.setRgvPos(rgvProtocol.getRgvPos().intValue());
+                    basRgv.setWalkPos(rgvProtocol.getWalkPos().intValue());
+                    basRgv.setTaskNo2(rgvProtocol.getTaskNo2().intValue());
+                    basRgv.setLoaded2(rgvProtocol.getLoaded2().intValue());
+                    basRgv.setTaskFinish1(rgvProtocol.getTaskFinish1().intValue());
+                    basRgv.setTaskFinish2(rgvProtocol.getTaskFinish2().intValue());
+                    basRgv.setAlarm(rgvProtocol.getAlarm().intValue());
+                    basRgv.setHeart(rgvProtocol.getHeart().intValue());
+                    basRgv.setTemp1(rgvProtocol.getTemp1().intValue());
+                    basRgv.setTemp2(rgvProtocol.getTemp2().intValue());
+                    basRgv.setTemp3(rgvProtocol.getTemp3().intValue());
+                    basRgv.setTemp4(rgvProtocol.getTemp4().intValue());
+                    basRgv.setTemp5(rgvProtocol.getTemp5().intValue());
+                    if (!basRgvService.updateById(basRgv)){
+                        log.error("RGV plc鏁版嵁搴撴洿鏂板け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
+                    }
+                } catch (Exception ignore){}
+
+            } else {
+                initRgv();
+                OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆戣鍙朢GV plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
+                log.error("璇诲彇RGV plc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆戣鍙朢GV plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+            log.error("璇诲彇RGV plc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+            initRgv();
+        }
+    }
+
+    /**
+     * 鍐欏叆鏁版嵁
+     */
+    private boolean write(RgvCommand command) throws InterruptedException {
+        if (null == command) {
+            log.error("RGV鍐欏叆鍛戒护涓虹┖");
+            return false;
+        }
+        command.setRgvNo(slave.getId());
+        OperateResult result = null;
+        if (command.getTaskNo1() > 0 && command.getTaskNo2() == 0) {
+            //鍙湁宸ヤ綅1瀛樺湪浠诲姟涓斾换鍔℃病鏈夎纭锛屽伐浣�1寮�濮嬭鏃�
+            if (command.getCommand() == 0) {
+                rgvProtocol.setTask1SendTime(System.currentTimeMillis());
+            }
+            short[] array = new short[10];
+            array[0] = command.getAckFinish(); // 浠诲姟瀹屾垚纭浣�
+            array[1] = command.getTaskNo1();  // 宸ヤ綅1浠诲姟鍙�
+            array[2] = command.getTaskMode1();  // 宸ヤ綅1妯″紡
+            array[3] = command.getSourceStaNo1(); // 宸ヤ綅1婧愮珯
+            array[4] = command.getDestinationStaNo1(); // 宸ヤ綅1鐩爣绔�
+            array[5] = 0; // 宸ヤ綅2浠诲姟鍙�
+            array[6] = 0;  // 宸ヤ綅2妯″紡
+            array[7] = 0; // 宸ヤ綅2婧愮珯
+            array[8] = 0; // 宸ヤ綅2鐩爣绔�
+            array[9] = command.getCommand();// 浠诲姟纭浣�
+            result = siemensNet.Write("DB100.0", array);
+            log.info("RGV鍛戒护涓嬪彂[id:{}] >>>>> {}", slave.getId(), array);
+        } else if (command.getTaskNo2() > 0 && command.getTaskNo1() == 0) {
+            //鍙湁宸ヤ綅2瀛樺湪浠诲姟
+            short[] array = new short[5];
+            array[0] = command.getTaskNo2(); // 宸ヤ綅2浠诲姟鍙�
+            array[1] = command.getTaskMode2();  // 宸ヤ綅2妯″紡
+            array[2] = command.getSourceStaNo2(); // 宸ヤ綅2婧愮珯
+            array[3] = command.getDestinationStaNo2(); // 宸ヤ綅2鐩爣绔�
+            array[4] = command.getCommand();// 浠诲姟纭浣�
+            result = siemensNet.Write("DB100.12", array);
+            log.info("RGV鍛戒护涓嬪彂[id:{}] >>>>> {}", slave.getId(), array);
+        }else {
+            //宸ヤ綅1鍜屽伐浣�2浠诲姟
+            short[] array = new short[10];
+            array[0] = command.getAckFinish(); // 浠诲姟瀹屾垚纭浣�
+            array[1] = command.getTaskNo1();  // 宸ヤ綅1浠诲姟鍙�
+            array[2] = command.getTaskMode1();  // 宸ヤ綅1妯″紡
+            array[3] = command.getSourceStaNo1(); // 宸ヤ綅1婧愮珯
+            array[4] = command.getDestinationStaNo1(); // 宸ヤ綅1鐩爣绔�
+            array[5] = command.getTaskNo2(); // 宸ヤ綅2浠诲姟鍙�
+            array[6] = command.getTaskMode2();  // 宸ヤ綅2妯″紡
+            array[7] = command.getSourceStaNo2(); // 宸ヤ綅2婧愮珯
+            array[8] = command.getDestinationStaNo2(); // 宸ヤ綅2鐩爣绔�
+            array[9] = command.getCommand();// 浠诲姟纭浣�
+            result = siemensNet.Write("DB100.0", array);
+            log.info("RGV鍛戒护涓嬪彂[id:{}] >>>>> {}", slave.getId(), array);
+        }
+
+        if (command.getCommand() == 1) {
+            //浠诲姟琚‘璁�
+            rgvProtocol.setTask1SendTime(0L);//閲嶇疆宸ヤ綅1涓嬪彂鏃堕棿
+        }
+
+        if(!result.IsSuccess){
+            log.error("鍐欏叆RGV plc鏁版嵁澶辫触锛岄噸鏂版坊鍔犱换鍔″埌闃熷垪 ===>> [id:{}],{}", slave.getId(), JSON.toJSON(command));
+            MessageQueue.offer(SlaveType.Rgv, slave.getId(), new Task(2, command));
+            Thread.sleep(100);
+            readStatus();
+            return false;
+        }
+
+        try {
+            // 鏃ュ織璁板綍
+            BasRgvOptService bean = SpringUtils.getBean(BasRgvOptService.class);
+            Date now = new Date();
+            BasRgvOpt basRgvOpt = new BasRgvOpt(
+                    command.getRgvNo(),    // RGV[闈炵┖]
+                    command.getAckFinish().intValue(),    // 浠诲姟瀹屾垚纭浣�
+                    command.getTaskNo1().intValue(),    // 浠诲姟鍙�
+                    command.getTaskMode1().intValue(),    // 妯″紡
+                    command.getSourceStaNo1().intValue(),    // 婧愮珯
+                    command.getDestinationStaNo1().intValue(),    // 鐩爣绔�
+                    command.getTaskNo2().intValue(),    // 浠诲姟鍙�
+                    command.getTaskMode2().intValue(),    // 妯″紡
+                    command.getSourceStaNo2().intValue(),    // 婧愮珯
+                    command.getDestinationStaNo2().intValue(),    // 鐩爣绔�
+                    command.getCommand().intValue(),
+                    now,    // 涓嬪彂鏃堕棿
+                    null, // 涓嬪彂浜哄憳
+                    now,    // 淇敼鏃堕棿
+                    null,    // 淇敼浜哄憳
+                    null //鍝嶅簲
+            );
+            bean.insert(basRgvOpt);
+        } catch (Exception ignore) {}
+
+        if (result != null && result.IsSuccess) {
+            Thread.sleep(200);
+            this.readStatus();
+            log.info("鍫嗗灈鏈哄懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command));
+            OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command)));
+            return true;
+        } else {
+            OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆戝啓鍏ュ爢鍨涙満plc鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+            log.error("鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+            return false;
+        }
+    }
+
+    /**
+     * 鍐欏叆鏁版嵁纭鍛戒护
+     */
+    private boolean writeCommand(RgvCommand command) throws InterruptedException {
+        if (null == command) {
+            log.error("RGV鍐欏叆鍛戒护涓虹┖");
+            return false;
+        }
+
+        command.setRgvNo(slave.getId());
+        short[] array = new short[1];
+        array[0] = command.getCommand();// 浠诲姟纭浣�
+        OperateResult result = siemensNet.Write("DB100.20", array);
+        log.info("RGV鍛戒护涓嬪彂[id:{}] >>>>> {}", slave.getId(), array);
+
+        if(!result.IsSuccess){
+            log.error("鍐欏叆RGV plc鏁版嵁澶辫触锛岄噸鏂版坊鍔犱换鍔″埌闃熷垪 ===>> [id:{}],{}", slave.getId(), JSON.toJSON(command));
+            MessageQueue.offer(SlaveType.Rgv, slave.getId(), new Task(2, command));
+            Thread.sleep(100);
+            readStatus();
+            return false;
+        }
+
+        try {
+            // 鏃ュ織璁板綍
+            BasRgvOptService bean = SpringUtils.getBean(BasRgvOptService.class);
+            Date now = new Date();
+            BasRgvOpt basRgvOpt = new BasRgvOpt(
+                    command.getRgvNo(),    // RGV[闈炵┖]
+                    command.getAckFinish().intValue(),    // 浠诲姟瀹屾垚纭浣�
+                    command.getTaskNo1().intValue(),    // 浠诲姟鍙�
+                    command.getTaskMode1().intValue(),    // 妯″紡
+                    command.getSourceStaNo1().intValue(),    // 婧愮珯
+                    command.getDestinationStaNo1().intValue(),    // 鐩爣绔�
+                    command.getTaskNo2().intValue(),    // 浠诲姟鍙�
+                    command.getTaskMode2().intValue(),    // 妯″紡
+                    command.getSourceStaNo2().intValue(),    // 婧愮珯
+                    command.getDestinationStaNo2().intValue(),    // 鐩爣绔�
+                    command.getCommand().intValue(),
+                    now,    // 涓嬪彂鏃堕棿
+                    null, // 涓嬪彂浜哄憳
+                    now,    // 淇敼鏃堕棿
+                    null,    // 淇敼浜哄憳
+                    null //鍝嶅簲
+            );
+            bean.insert(basRgvOpt);
+        } catch (Exception ignore) {}
+
+        if (result != null && result.IsSuccess) {
+            Thread.sleep(200);
+            this.readStatus();
+            log.info("鍫嗗灈鏈哄懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command));
+            OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command)));
+            return true;
+        } else {
+            OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆戝啓鍏ュ爢鍨涙満plc鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+            log.error("鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+            return false;
+        }
+    }
+
+    /**
+     * 鍒濆鍖栧爢鍨涙満鐘舵��
+     */
+    private void initRgv() {
+        if (null == rgvProtocol) {
+            rgvProtocol = new RgvProtocol();
+        }
+        rgvProtocol.setMode((short) 0);
+        rgvProtocol.setStatus((short) -1);
+        rgvProtocol.setWalkPos((short) 1);
+    }
+
+    @Override
+    public void close() {
+        siemensNet.ConnectClose();
+    }
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index f86372d..691b09e 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -61,6 +61,13 @@
       row: 2
       bay: 1
       lev: 1
+    # 鍫嗗灈鏈哄叆搴撶珯2
+    crnInStn[1]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1022
+      row: 3
+      bay: 1
+      lev: 3
     # 鍫嗗灈鏈哄嚭搴撶珯鐐�1
     crnOutStn[0]:
       devpPlcId: ${wcs-slave.devp[0].id}
@@ -68,6 +75,13 @@
       row: 3
       bay: 1
       lev: 1
+    # 鍫嗗灈鏈哄嚭搴撶珯鐐�2
+    crnOutStn[1]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1016
+      row: 3
+      bay: 1
+      lev: 3
   # 鍫嗗灈鏈�2
   crn[1]:
     id: 2
@@ -85,6 +99,13 @@
       row: 7
       bay: 1
       lev: 1
+    # 鍫嗗灈鏈哄叆搴撶珯2
+    crnInStn[1]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1025
+      row: 6
+      bay: 1
+      lev: 3
     # 鍫嗗灈鏈哄嚭搴撶珯鐐�1
     crnOutStn[0]:
       devpPlcId: ${wcs-slave.devp[0].id}
@@ -92,6 +113,13 @@
       row: 6
       bay: 1
       lev: 1
+    # 鍫嗗灈鏈哄嚭搴撶珯鐐�2
+    crnOutStn[1]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      staNo: 1019
+      row: 6
+      bay: 1
+      lev: 3
   # 杈撻�佺嚎1
   devp[0]:
     id: 1
@@ -111,18 +139,97 @@
       barcode: ${wcs-slave.barcode[1].id}
       backSta: 1011
       led: ${wcs-slave.led[3].id}
+    # 鍏ュ簱鍙�3
+    inSta[2]:
+      staNo: 3007
+      barcode: ${wcs-slave.barcode[2].id}
+      backSta: 3007
+      led: ${wcs-slave.led[4].id}
+    # 鍏ュ簱鍙�4
+    inSta[3]:
+      staNo: 3012
+      barcode: ${wcs-slave.barcode[2].id}
+      backSta: 3012
+      led: ${wcs-slave.led[5].id}
     # 绌烘澘鍏ュ簱鍙�1
     emptyInSta[0]:
       staNo: 102
-    # 鍑哄簱鍙�1
-    outSta[0]:
-      staNo: 101
     # 鎷f枡鍏ュ簱鍙�1
     pickSta[0]:
-      staNo: 102
+      staNo: 1003
       barcode: ${wcs-slave.barcode[0].id}
-      backSta: 102
+      backSta: 1001
       led: ${wcs-slave.led[0].id}
+    # 鎷f枡鍏ュ簱鍙�2
+    pickSta[1]:
+      staNo: 1013
+      barcode: ${wcs-slave.barcode[1].id}
+      backSta: 1011
+      led: ${wcs-slave.led[3].id}
+    # 鎷f枡鍏ュ簱鍙�3
+    pickSta[2]:
+      staNo: 3007
+      barcode: ${wcs-slave.barcode[2].id}
+      backSta: 3007
+      led: ${wcs-slave.led[4].id}
+    # 鎷f枡鍏ュ簱鍙�4
+    pickSta[3]:
+      staNo: 3012
+      barcode: ${wcs-slave.barcode[2].id}
+      backSta: 3012
+      led: ${wcs-slave.led[5].id}
+
+  # RGV1
+  rgv[0]:
+    id: 1
+    ip: 10.10.10.120
+    port: 102
+    rack: 0
+    slot: 0
+    inStn[0]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      sourceStaNo: 2401
+    inStn[1]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      sourceStaNo: 2114
+    outStn[0]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      sourceStaNo: 1014
+    outStn[1]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      sourceStaNo: 1017
+  # RGV2
+  rgv[1]:
+    id: 2
+    ip: 10.10.10.121
+    port: 102
+    rack: 0
+    slot: 0
+    inStn[0]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      sourceStaNo: 3001
+    outStn[0]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      sourceStaNo: 2402
+  # RGV1
+  rgv[2]:
+    id: 3
+    ip: 10.10.10.122
+    port: 102
+    rack: 0
+    slot: 0
+    inStn[0]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      sourceStaNo: 2102
+    inStn[1]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      sourceStaNo: 4007
+    inStn[2]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      sourceStaNo: 4016
+    outStn[0]:
+      devpPlcId: ${wcs-slave.devp[0].id}
+      sourceStaNo: 2003
 
   # 鏉$爜鎵弿浠�1
   barcode[0]:
@@ -132,6 +239,16 @@
   # 鏉$爜鎵弿浠�2
   barcode[1]:
     id: 2
+    ip: 10.10.10.3
+    port: 51236
+  # 鏉$爜鎵弿浠�3
+  barcode[2]:
+    id: 3
+    ip: 10.10.10.3
+    port: 51236
+  # 鏉$爜鎵弿浠�4
+  barcode[3]:
+    id: 4
     ip: 10.10.10.3
     port: 51236
 
@@ -162,4 +279,18 @@
     ip: 10.10.10.206
     port: 5005
     devpPlcId: ${wcs-slave.devp[0].id}
-    staArr: 1013
\ No newline at end of file
+    staArr: 1013
+  # LED5
+  led[4]:
+    id: 5
+    ip: 10.10.10.206
+    port: 5005
+    devpPlcId: ${wcs-slave.devp[0].id}
+    staArr: 3007
+  # LED6
+  led[5]:
+    id: 6
+    ip: 10.10.10.206
+    port: 5005
+    devpPlcId: ${wcs-slave.devp[0].id}
+    staArr: 3012
\ No newline at end of file
diff --git a/src/main/resources/mapper/BasRgvMapper.xml b/src/main/resources/mapper/BasRgvMapper.xml
new file mode 100644
index 0000000..df04cd8
--- /dev/null
+++ b/src/main/resources/mapper/BasRgvMapper.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zy.asrs.mapper.BasRgvMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BasRgv">
+        <result column="rgv_no" property="rgvNo" />
+        <result column="mode" property="mode" />
+        <result column="status" property="status" />
+        <result column="task_no1" property="taskNo1" />
+        <result column="loaded1" property="loaded1" />
+        <result column="rgv_pos" property="rgvPos" />
+        <result column="walk_pos" property="walkPos" />
+        <result column="task_no2" property="taskNo2" />
+        <result column="loaded2" property="loaded2" />
+        <result column="task_finish1" property="taskFinish1" />
+        <result column="task_finish2" property="taskFinish2" />
+        <result column="alarm" property="alarm" />
+        <result column="heart" property="heart" />
+        <result column="temp1" property="temp1" />
+        <result column="temp2" property="temp2" />
+        <result column="temp3" property="temp3" />
+        <result column="temp4" property="temp4" />
+        <result column="temp5" property="temp5" />
+        <result column="create_time" property="createTime" />
+        <result column="create_by" property="createBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="update_by" property="updateBy" />
+
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/BasRgvOptMapper.xml b/src/main/resources/mapper/BasRgvOptMapper.xml
new file mode 100644
index 0000000..bb3f32b
--- /dev/null
+++ b/src/main/resources/mapper/BasRgvOptMapper.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zy.asrs.mapper.BasRgvOptMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BasRgvOpt">
+        <result column="id" property="id" />
+        <result column="rgv_no" property="rgvNo" />
+        <result column="ack_finish" property="ackFinish" />
+        <result column="task_no1" property="taskNo1" />
+        <result column="task_mode1" property="taskMode1" />
+        <result column="source_sta_no1" property="sourceStaNo1" />
+        <result column="destination_sta_no_1" property="destinationStaNo1" />
+        <result column="task_no2" property="taskNo2" />
+        <result column="task_mode2" property="taskMode2" />
+        <result column="source_sta_no2" property="sourceStaNo2" />
+        <result column="destination_sta_no2" property="destinationStaNo2" />
+        <result column="command" property="command" />
+        <result column="create_time" property="createTime" />
+        <result column="create_by" property="createBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="response" property="response" />
+
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index 14e16a5..58915a4 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -203,4 +203,8 @@
     <select id="selectLaneWrkMastOut" resultMap="BaseResultMap">
         select * from dbo.asr_wrk_mast where wrk_sts in (11,12,13,14) and io_type>100 order by io_pri desc,io_time,wrk_no asc
     </select>
+
+    <select id="selectByWrkNo" resultMap="BaseResultMap">
+        select top 1 * from dbo.asr_wrk_mast where wrk_no = #{wrkNo} order by io_pri desc,io_time,wrk_no asc
+    </select>
 </mapper>

--
Gitblit v1.9.1