From 9d5f39fb3be0d9aed1fd975dad19d2c7fdecdde7 Mon Sep 17 00:00:00 2001
From: zjj <3272660260@qq.com>
Date: 星期四, 21 三月 2024 09:15:57 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/entity/BasRgv.java                     |  209 ++++++
 src/main/java/com/zy/core/enums/RgvModeType.java                 |   43 +
 src/main/resources/mapper/BasRgvErrMapper.xml                    |   16 
 src/main/java/com/zy/asrs/service/BasRgvErrService.java          |    8 
 src/main/java/com/zy/asrs/service/BasRgvService.java             |    8 
 src/main/java/com/zy/core/thread/SiemensRgvThread.java           |  489 ++++++++++++++++
 src/main/java/com/zy/asrs/mapper/BasRgvErrMapper.java            |   12 
 src/main/java/com/zy/core/model/RgvSlave.java                    |   57 +
 src/main/java/com/zy/core/enums/SlaveType.java                   |    1 
 src/main/java/com/zy/core/cache/OutputQueue.java                 |    4 
 src/main/java/com/zy/core/model/command/RgvCommand.java          |  129 ++++
 src/main/java/com/zy/asrs/entity/BasRgvErr.java                  |  127 ++++
 src/main/java/com/zy/asrs/controller/BasRgvErrController.java    |  123 ++++
 src/main/java/com/zy/core/enums/RgvStatusType.java               |   46 +
 src/main/java/com/zy/asrs/service/impl/BasRgvErrServiceImpl.java |   12 
 src/main/java/com/zy/asrs/mapper/BasRgvMapper.java               |   12 
 src/main/java/com/zy/core/cache/MessageQueue.java                |   14 
 src/main/java/com/zy/asrs/controller/BasRgvController.java       |  123 ++++
 src/main/java/com/zy/asrs/service/impl/BasRgvServiceImpl.java    |   12 
 src/main/java/com/zy/common/CodeBuilder.java                     |    2 
 src/main/java/com/zy/core/ServerBootstrap.java                   |    4 
 src/main/java/com/zy/core/properties/SlaveProperties.java        |    2 
 src/main/resources/mapper/BasRgvMapper.xml                       |   24 
 src/main/java/com/zy/core/RgvThread.java                         |    4 
 src/main/java/com/zy/core/model/protocol/RgvProtocol.java        |  231 +++++++
 src/main/java/com/zy/core/enums/RgvTaskModeType.java             |   47 +
 26 files changed, 1,757 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/BasRgvController.java b/src/main/java/com/zy/asrs/controller/BasRgvController.java
new file mode 100644
index 0000000..0725a43
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/BasRgvController.java
@@ -0,0 +1,123 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.common.DateUtils;
+import com.zy.asrs.entity.BasRgv;
+import com.zy.asrs.service.BasRgvService;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.R;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+@RestController
+public class BasRgvController extends BaseController {
+
+    @Autowired
+    private BasRgvService basRgvService;
+
+    @RequestMapping(value = "/basRgv/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(basRgvService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/basRgv/list/auth")
+    @ManagerAuth
+    public R list(@RequestParam(defaultValue = "1")Integer curr,
+                  @RequestParam(defaultValue = "10")Integer limit,
+                  @RequestParam(required = false)String orderByField,
+                  @RequestParam(required = false)String orderByType,
+                  @RequestParam Map<String, Object> param){
+        EntityWrapper<BasRgv> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        return R.ok(basRgvService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
+        for (Map.Entry<String, Object> entry : map.entrySet()){
+            String val = String.valueOf(entry.getValue());
+            if (val.contains(RANGE_TIME_LINK)){
+                String[] dates = val.split(RANGE_TIME_LINK);
+                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else {
+                wrapper.like(entry.getKey(), val);
+            }
+        }
+    }
+
+    @RequestMapping(value = "/basRgv/add/auth")
+    @ManagerAuth
+    public R add(BasRgv basRgv) {
+        basRgvService.insert(basRgv);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/basRgv/update/auth")
+	@ManagerAuth
+    public R update(BasRgv basRgv){
+        if (Cools.isEmpty(basRgv) || null==basRgv.getRgvNo()){
+            return R.error();
+        }
+        basRgvService.updateById(basRgv);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basRgv/delete/auth")
+    @ManagerAuth
+    public R delete(@RequestParam(value="ids[]") Long[] ids){
+         for (Long id : ids){
+            basRgvService.deleteById(id);
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basRgv/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param){
+        EntityWrapper<BasRgv> wrapper = new EntityWrapper<>();
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        Map<String, Object> map = excludeTrash(param.getJSONObject("basRgv"));
+        convert(map, wrapper);
+        List<BasRgv> list = basRgvService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/basRgvQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<BasRgv> wrapper = new EntityWrapper<>();
+        wrapper.like("rgv_no", condition);
+        Page<BasRgv> page = basRgvService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (BasRgv basRgv : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", basRgv.getRgvNo());
+            map.put("value", basRgv.getRgvNo());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/basRgv/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<BasRgv> wrapper = new EntityWrapper<BasRgv>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != basRgvService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(BasRgv.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/BasRgvErrController.java b/src/main/java/com/zy/asrs/controller/BasRgvErrController.java
new file mode 100644
index 0000000..287d351
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/BasRgvErrController.java
@@ -0,0 +1,123 @@
+package com.zy.asrs.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.common.DateUtils;
+import com.zy.asrs.entity.BasRgvErr;
+import com.zy.asrs.service.BasRgvErrService;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.R;
+import com.zy.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+@RestController
+public class BasRgvErrController extends BaseController {
+
+    @Autowired
+    private BasRgvErrService basRgvErrService;
+
+    @RequestMapping(value = "/basRgvErr/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(basRgvErrService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/basRgvErr/list/auth")
+    @ManagerAuth
+    public R list(@RequestParam(defaultValue = "1")Integer curr,
+                  @RequestParam(defaultValue = "10")Integer limit,
+                  @RequestParam(required = false)String orderByField,
+                  @RequestParam(required = false)String orderByType,
+                  @RequestParam Map<String, Object> param){
+        EntityWrapper<BasRgvErr> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        return R.ok(basRgvErrService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
+        for (Map.Entry<String, Object> entry : map.entrySet()){
+            String val = String.valueOf(entry.getValue());
+            if (val.contains(RANGE_TIME_LINK)){
+                String[] dates = val.split(RANGE_TIME_LINK);
+                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else {
+                wrapper.like(entry.getKey(), val);
+            }
+        }
+    }
+
+    @RequestMapping(value = "/basRgvErr/add/auth")
+    @ManagerAuth
+    public R add(BasRgvErr basRgvErr) {
+        basRgvErrService.insert(basRgvErr);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/basRgvErr/update/auth")
+	@ManagerAuth
+    public R update(BasRgvErr basRgvErr){
+        if (Cools.isEmpty(basRgvErr) || null==basRgvErr.getErrorCode()){
+            return R.error();
+        }
+        basRgvErrService.updateById(basRgvErr);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basRgvErr/delete/auth")
+    @ManagerAuth
+    public R delete(@RequestParam(value="ids[]") Long[] ids){
+         for (Long id : ids){
+            basRgvErrService.deleteById(id);
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/basRgvErr/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param){
+        EntityWrapper<BasRgvErr> wrapper = new EntityWrapper<>();
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        Map<String, Object> map = excludeTrash(param.getJSONObject("basRgvErr"));
+        convert(map, wrapper);
+        List<BasRgvErr> list = basRgvErrService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/basRgvErrQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<BasRgvErr> wrapper = new EntityWrapper<>();
+        wrapper.like("id", condition);
+        Page<BasRgvErr> page = basRgvErrService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (BasRgvErr basRgvErr : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", basRgvErr.getErrorCode());
+            map.put("value", basRgvErr.getErrorCode());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/basRgvErr/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<BasRgvErr> wrapper = new EntityWrapper<BasRgvErr>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != basRgvErrService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(BasRgvErr.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+}
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..b6c5525
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/BasRgv.java
@@ -0,0 +1,209 @@
+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 com.core.common.SpringUtils;
+import com.zy.system.service.UserService;
+import com.zy.system.entity.User;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import org.springframework.format.annotation.DateTimeFormat;
+import com.core.common.SpringUtils;
+import com.zy.system.service.UserService;
+import com.zy.system.entity.User;
+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= "鍙叆")
+    @TableField("in_enable")
+    private Integer inEnable;
+
+    /**
+     * 鍙嚭
+     */
+    @ApiModelProperty(value= "鍙嚭")
+    @TableField("out_enable")
+    private Integer outEnable;
+
+    /**
+     * 浣滀笟鎬�
+     */
+    @ApiModelProperty(value= "浣滀笟鎬�")
+    @TableField("rgv_sts")
+    private Integer rgvSts;
+
+    /**
+     * 浠诲姟鍙�
+     */
+    @ApiModelProperty(value= "浠诲姟鍙�")
+    @TableField("wrk_no1")
+    private Integer wrkNo1;
+
+    /**
+     * 鍫嗗灈鏈哄彿
+     */
+    @ApiModelProperty(value= "鍫嗗灈鏈哄彿")
+    @TableField("wrk_no2")
+    private Integer wrkNo2;
+
+    /**
+     * 閿欒鐮�
+     */
+    @ApiModelProperty(value= "閿欒鐮�")
+    @TableField("rgv_err")
+    private Long rgvErr;
+
+    /**
+     * 鏍囪
+     */
+    @ApiModelProperty(value= "鏍囪")
+    @TableField("pak_mk")
+    private String pakMk;
+
+    /**
+     * 鐘舵�� 1: 姝e父  0: 绂佺敤  
+     */
+    @ApiModelProperty(value= "鐘舵�� 1: 姝e父  0: 绂佺敤  ")
+    private Integer status;
+
+    /**
+     * 娣诲姞浜哄憳
+     */
+    @ApiModelProperty(value= "娣诲姞浜哄憳")
+    @TableField("create_by")
+    private Long createBy;
+
+    /**
+     * 娣诲姞鏃堕棿
+     */
+    @ApiModelProperty(value= "娣诲姞鏃堕棿")
+    @TableField("create_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 淇敼浜哄憳
+     */
+    @ApiModelProperty(value= "淇敼浜哄憳")
+    @TableField("update_by")
+    private Long updateBy;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @TableField("update_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value= "澶囨敞")
+    private String memo;
+
+    public BasRgv() {}
+
+    public BasRgv(Integer rgvNo,Integer inEnable,Integer outEnable,Integer rgvSts,Integer wrkNo1,Integer wrkNo2,Long rgvErr,String pakMk,Integer status,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
+        this.rgvNo = rgvNo;
+        this.inEnable = inEnable;
+        this.outEnable = outEnable;
+        this.rgvSts = rgvSts;
+        this.wrkNo1 = wrkNo1;
+        this.wrkNo2 = wrkNo2;
+        this.rgvErr = rgvErr;
+        this.pakMk = pakMk;
+        this.status = status;
+        this.createBy = createBy;
+        this.createTime = createTime;
+        this.updateBy = updateBy;
+        this.updateTime = updateTime;
+        this.memo = memo;
+    }
+
+//    BasRgv basRgv = new BasRgv(
+//            null,    // RGV缂栧彿[闈炵┖]
+//            null,    // 鍙叆
+//            null,    // 鍙嚭
+//            null,    // 浣滀笟鎬�
+//            null,    // 浠诲姟鍙�
+//            null,    // 鍫嗗灈鏈哄彿
+//            null,    // 閿欒鐮�
+//            null,    // 鏍囪
+//            null,    // 鐘舵��
+//            null,    // 娣诲姞浜哄憳
+//            null,    // 娣诲姞鏃堕棿
+//            null,    // 淇敼浜哄憳
+//            null,    // 淇敼鏃堕棿
+//            null    // 澶囨敞
+//    );
+
+    public String getStatus$(){
+        if (null == this.status){ return null; }
+        switch (this.status){
+            case 1:
+                return "姝e父";
+            case 0:
+                return "绂佺敤";
+            default:
+                return String.valueOf(this.status);
+        }
+    }
+
+    public String getCreateBy$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.createBy);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getId());
+        }
+        return null;
+    }
+
+    public String getCreateTime$(){
+        if (Cools.isEmpty(this.createTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+    }
+
+    public String getUpdateBy$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.updateBy);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getId());
+        }
+        return null;
+    }
+
+    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/BasRgvErr.java b/src/main/java/com/zy/asrs/entity/BasRgvErr.java
new file mode 100644
index 0000000..d9558ea
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/BasRgvErr.java
@@ -0,0 +1,127 @@
+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 com.core.common.SpringUtils;
+import com.zy.system.service.UserService;
+import com.zy.system.entity.User;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import org.springframework.format.annotation.DateTimeFormat;
+import com.core.common.SpringUtils;
+import com.zy.system.service.UserService;
+import com.zy.system.entity.User;
+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_err")
+public class BasRgvErr implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 寮傚父鐮�
+     */
+    @ApiModelProperty(value= "寮傚父鐮�")
+    @TableId(value = "error_code", type = IdType.INPUT)
+    @TableField("error_code")
+    private Long errorCode;
+
+    /**
+     * 寮傚父
+     */
+    @ApiModelProperty(value= "寮傚父")
+    @TableField("err_name")
+    private String errName;
+
+    /**
+     * 淇敼浜哄憳
+     */
+    @ApiModelProperty(value= "淇敼浜哄憳")
+    @TableField("modi_user")
+    private Long modiUser;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @TableField("modi_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date modiTime;
+
+    /**
+     * 娣诲姞浜哄憳
+     */
+    @ApiModelProperty(value= "娣诲姞浜哄憳")
+    @TableField("appe_user")
+    private Long appeUser;
+
+    /**
+     * 娣诲姞鏃堕棿
+     */
+    @ApiModelProperty(value= "娣诲姞鏃堕棿")
+    @TableField("appe_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date appeTime;
+
+    public BasRgvErr() {}
+
+    public BasRgvErr(Long errorCode,String errName,Long modiUser,Date modiTime,Long appeUser,Date appeTime) {
+        this.errorCode = errorCode;
+        this.errName = errName;
+        this.modiUser = modiUser;
+        this.modiTime = modiTime;
+        this.appeUser = appeUser;
+        this.appeTime = appeTime;
+    }
+
+//    BasRgvErr basRgvErr = new BasRgvErr(
+//            null,    // 寮傚父鐮乕闈炵┖]
+//            null,    // 寮傚父
+//            null,    // 淇敼浜哄憳
+//            null,    // 淇敼鏃堕棿
+//            null,    // 娣诲姞浜哄憳
+//            null    // 娣诲姞鏃堕棿
+//    );
+
+    public String getModiUser$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.modiUser);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getNickname());
+        }
+        return null;
+    }
+
+    public String getModiTime$(){
+        if (Cools.isEmpty(this.modiTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime);
+    }
+
+    public String getAppeUser$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.selectById(this.appeUser);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getNickname());
+        }
+        return null;
+    }
+
+    public String getAppeTime$(){
+        if (Cools.isEmpty(this.appeTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime);
+    }
+
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/BasRgvErrMapper.java b/src/main/java/com/zy/asrs/mapper/BasRgvErrMapper.java
new file mode 100644
index 0000000..4b3a44e
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/BasRgvErrMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.mapper;
+
+import com.zy.asrs.entity.BasRgvErr;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface BasRgvErrMapper extends BaseMapper<BasRgvErr> {
+
+}
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/service/BasRgvErrService.java b/src/main/java/com/zy/asrs/service/BasRgvErrService.java
new file mode 100644
index 0000000..754bb63
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/BasRgvErrService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.service;
+
+import com.zy.asrs.entity.BasRgvErr;
+import com.baomidou.mybatisplus.service.IService;
+
+public interface BasRgvErrService extends IService<BasRgvErr> {
+
+}
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/BasRgvErrServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasRgvErrServiceImpl.java
new file mode 100644
index 0000000..dcf62fd
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/BasRgvErrServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service.impl;
+
+import com.zy.asrs.mapper.BasRgvErrMapper;
+import com.zy.asrs.entity.BasRgvErr;
+import com.zy.asrs.service.BasRgvErrService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("basRgvErrService")
+public class BasRgvErrServiceImpl extends ServiceImpl<BasRgvErrMapper, BasRgvErr> implements BasRgvErrService {
+
+}
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/common/CodeBuilder.java b/src/main/java/com/zy/common/CodeBuilder.java
index 79e22e1..e776910 100644
--- a/src/main/java/com/zy/common/CodeBuilder.java
+++ b/src/main/java/com/zy/common/CodeBuilder.java
@@ -20,7 +20,7 @@
         generator.url="127.0.0.1:1433;databasename=ghtzasrs";
         generator.username="sa";
         generator.password="sa@123";
-        generator.table="sys_saas_log";
+        generator.table="asr_bas_rgv_err";
         generator.packagePath="com.zy.asrs";
         generator.js = false;
         generator.html = false;
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..503000f
--- /dev/null
+++ b/src/main/java/com/zy/core/RgvThread.java
@@ -0,0 +1,4 @@
+package com.zy.core;
+
+public interface RgvThread extends ThreadHandler{
+}
diff --git a/src/main/java/com/zy/core/ServerBootstrap.java b/src/main/java/com/zy/core/ServerBootstrap.java
index a97d9a0..415ce12 100644
--- a/src/main/java/com/zy/core/ServerBootstrap.java
+++ b/src/main/java/com/zy/core/ServerBootstrap.java
@@ -59,6 +59,10 @@
         for (Slave barcode : slaveProperties.getBarcode()) {
             MessageQueue.init(SlaveType.Barcode, barcode);
         }
+        // 鍒濆鍖朢gv灏忚溅mq
+        for (Slave rgv : slaveProperties.getRgv()) {
+            MessageQueue.init(SlaveType.Rgv, rgv);
+        }
 //        // 鍒濆鍖朙ed鐏痬q
 //        for (Slave led : slaveProperties.getLed()) {
 //            MessageQueue.init(SlaveType.Led, led);
diff --git a/src/main/java/com/zy/core/cache/MessageQueue.java b/src/main/java/com/zy/core/cache/MessageQueue.java
index b98b430..cdabb4b 100644
--- a/src/main/java/com/zy/core/cache/MessageQueue.java
+++ b/src/main/java/com/zy/core/cache/MessageQueue.java
@@ -29,6 +29,7 @@
     // 鍙拌溅mq浜ゆ崲鏈�
     private static final Map<Integer, ConcurrentLinkedQueue<Task>> CAR_EXCHANGE = new ConcurrentHashMap<>();
 
+    private static final Map<Integer, LinkedBlockingQueue<Task>> RGV_EXCHANGE = new ConcurrentHashMap<>();
     /**
      * mq 浜ゆ崲鏈哄垵濮嬪寲
      */
@@ -36,6 +37,9 @@
         switch (type) {
             case Crn:
                 CRN_EXCHANGE.put(slave.getId(), new LinkedBlockingQueue<>(1));
+                break;
+            case Rgv:
+                RGV_EXCHANGE.put(slave.getId(), new LinkedBlockingQueue<>(1));
                 break;
             case Devp:
                 DEVP_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>());
@@ -65,6 +69,8 @@
         switch (type) {
             case Crn:
                 return CRN_EXCHANGE.get(id).offer(task);
+            case Rgv:
+                return RGV_EXCHANGE.get(id).offer(task);
             case Devp:
                 return DEVP_EXCHANGE.get(id).offer(task);
             case Barcode:
@@ -88,6 +94,8 @@
         switch (type) {
             case Crn:
                 return CRN_EXCHANGE.get(id).poll();
+            case Rgv:
+                return RGV_EXCHANGE.get(id).poll();
             case Devp:
                 return DEVP_EXCHANGE.get(id).poll();
             case Barcode:
@@ -110,6 +118,8 @@
         switch (type) {
             case Crn:
                 return CRN_EXCHANGE.get(id).peek();
+            case Rgv:
+                return RGV_EXCHANGE.get(id).peek();
             case Devp:
                 return DEVP_EXCHANGE.get(id).peek();
             case Barcode:
@@ -128,9 +138,11 @@
     public static void clear(SlaveType type, Integer id){
         switch (type) {
             case Crn:
-                
                 CRN_EXCHANGE.get(id).clear();
                 break;
+            case Rgv:
+                RGV_EXCHANGE.get(id).clear();
+                break;
             case Devp:
                 DEVP_EXCHANGE.get(id).clear();
                 break;
diff --git a/src/main/java/com/zy/core/cache/OutputQueue.java b/src/main/java/com/zy/core/cache/OutputQueue.java
index 6563854..a5c050d 100644
--- a/src/main/java/com/zy/core/cache/OutputQueue.java
+++ b/src/main/java/com/zy/core/cache/OutputQueue.java
@@ -17,4 +17,8 @@
     public static ArrayBlockingQueue<JSONObject> BARCODE = new ArrayBlockingQueue<>(32);
     // 纾呯Г杈撳嚭鏃ュ織
     public static ArrayBlockingQueue<JSONObject> SCALE = new ArrayBlockingQueue<>(32);
+
+    // 鍫嗗灈鏈鸿緭鍑烘棩蹇�
+    public static ArrayBlockingQueue<String> RGV = new ArrayBlockingQueue<>(32);
+
 }
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..3a344bb
--- /dev/null
+++ b/src/main/java/com/zy/core/enums/RgvModeType.java
@@ -0,0 +1,43 @@
+package com.zy.core.enums;
+
+public enum RgvModeType {
+
+    NONE(-1, "绂荤嚎"),
+    STOP(0, "鍏虫満"),
+    HAND(1, "鎵嬪姩"),
+    HALF_AUTO(2, "鍗婅嚜鍔�"),
+    AUTO(3, "鑷姩"),
+    AUTO2(100, "鍏跺畠"),
+    ;
+
+    public Integer id;
+    public String desc;
+    RgvModeType(Integer 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.intValue())) {
+                return type;
+            }
+        }
+        return null;
+    }
+
+    public static RgvModeType get(RgvModeType type) {
+        if (null == type) {
+            return null;
+        }
+        for (RgvModeType rgvModeType : RgvModeType.values()) {
+            if (rgvModeType == type) {
+                return rgvModeType;
+            }
+        }
+        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..2b1abff
--- /dev/null
+++ b/src/main/java/com/zy/core/enums/RgvStatusType.java
@@ -0,0 +1,46 @@
+package com.zy.core.enums;
+
+public enum RgvStatusType {
+
+    NONE(-1, "绂荤嚎"),
+    IDLE(0, "绌洪棽"),
+    WORKING(1, "浣滀笟涓�"),
+    SOS(2, "鎶ヨ"),
+    WORKING1(3, "浣滀笟涓�"),
+    FETCHING(11, "鍙栬揣涓�"),
+    PUTTING(12, "鏀捐揣涓�"),
+    WAITING(90, "浠诲姟瀹屾垚绛夊緟WCS纭"),
+    FETCHWAITING(91, "鍙栬揣浠诲姟瀹屾垚绛夊緟WCS纭"),
+    ;
+
+    public Integer id;
+    public String desc;
+    RgvStatusType(Integer 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.intValue())) {
+                return type;
+            }
+        }
+        return NONE;
+    }
+
+    public static RgvStatusType get(RgvStatusType type) {
+        if (null == type) {
+            return null;
+        }
+        for (RgvStatusType rgvStatusType : RgvStatusType.values()) {
+            if (rgvStatusType == type) {
+                return rgvStatusType;
+            }
+        }
+        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..cd241f4
--- /dev/null
+++ b/src/main/java/com/zy/core/enums/RgvTaskModeType.java
@@ -0,0 +1,47 @@
+package com.zy.core.enums;
+
+public enum RgvTaskModeType {
+
+    NONE(0),    // 鏃�
+    FETCH(1),    // 鍙栬揣
+    PUT(2),    // 鏀捐揣
+    FETCH_PUT(3),    // 鍙栨斁璐�
+    X_MOVE(4),    // 绔欎綅绉昏浆
+//    Y_MOVE(5),    // 绔欎綅绉昏浆
+//    XY_MOVE(6),    // 绔欎綅绉昏浆
+    GO_ORIGIN(7),    // 鍥炲師鐐�
+//    BACK_ORIGIN(8),      // 鍥炲弽鍘熺偣
+//    CLEAR(9),       // 娓呴敊
+    ;
+
+    public Integer id;
+    RgvTaskModeType(Integer id) {
+        this.id = id;
+    }
+
+
+    public static RgvTaskModeType get(Short id) {
+        if (null == id) {
+            return null;
+        }
+        for (RgvTaskModeType type : RgvTaskModeType.values()) {
+            if (type.id.equals(id.intValue())) {
+                return type;
+            }
+        }
+        return null;
+    }
+
+    public static RgvTaskModeType get(RgvTaskModeType type) {
+        if (null == type) {
+            return null;
+        }
+        for (RgvTaskModeType rgvTaskModeType : RgvTaskModeType.values()) {
+            if (rgvTaskModeType == type) {
+                return rgvTaskModeType;
+            }
+        }
+        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..7f64d13 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..04db042
--- /dev/null
+++ b/src/main/java/com/zy/core/model/RgvSlave.java
@@ -0,0 +1,57 @@
+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 Integer offset;
+
+    private Boolean demo;
+
+    // RGV鍏ュ簱婧愮珯鐐�
+    private List<RgvStn> rgvInSStn = new ArrayList<>();
+
+    // RGV鍑哄簱婧愮珯鐐�
+    private List<RgvStn> rgvOutSStn = new ArrayList<>();
+
+    // RGV鍙犵洏
+    private List<RgvStn> rgvEmptyInSStn = new ArrayList<>();
+
+    // RGV绌烘澘鍏ュ簱
+    private List<RgvStn> rgvEmptyOutSStn = new ArrayList<>();
+
+    // RGV鍑哄簱鐩爣绔欑偣
+    private List<RgvStn> rgvDestStn = new ArrayList<>();
+
+    @Data
+    public static class RgvStn {
+
+        // 杈撻�佺嚎plc缂栧彿
+        private Integer devpPlcId;
+
+        // RGV绔欑偣缂栧彿
+        private Integer staNo;
+
+//        // 鎺�
+//        private Integer row;
+//
+//        // 鍒�
+//        private Integer bay;
+//
+//        // 灞�
+//        private Integer lev;
+
+    }
+
+}
\ No newline at end of file
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..5be8072
--- /dev/null
+++ b/src/main/java/com/zy/core/model/command/RgvCommand.java
@@ -0,0 +1,129 @@
+package com.zy.core.model.command;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.zy.core.enums.RgvTaskModeType;
+import lombok.Data;
+
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * 鍫嗗灈鏈哄懡浠ゆ姤鏂�
+ * Created by vincent on 2020/8/11
+ */
+@Data
+public class RgvCommand {
+
+    // Rgv缂栧彿
+    private Integer rgvNo = 0;
+
+    // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+    private Short ackFinish1 = 0;
+
+    // 宸ヤ綅1浠诲姟鍙�
+    private Short taskNo1 = 0;
+
+    /**
+     * 浠诲姟妯″紡锛�
+     * 0 = 鏃�
+     * 1 = 鍙栬揣
+     * 2 = 鏀捐揣
+     * 3 = 鍙栨斁璐�
+     */
+    private Short taskMode1 = 0;
+
+    @JSONField(serialize = false)
+    private RgvTaskModeType taskModeType1;
+
+    /*
+    宸ヤ綅1婧愮珯
+     */
+    private Short sourceStaNo1 = 0;
+
+    /*
+    宸ヤ綅1鐩爣绔�
+     */
+    private Short destinationStaNo1 = 0;
+
+    //////////////////////     宸ヤ綅2瀹氫箟   //////////////////////////////////////////////////
+    // 宸ヤ綅1浠诲姟瀹屾垚纭浣�
+    private Short ackFinish2 = 0;
+
+    // 宸ヤ綅2浠诲姟鍙�
+    private Short taskNo2 = 0;
+
+    /**
+     * 浠诲姟妯″紡锛�
+     * 0 = 鏃�
+     * 1 = 鍙栬揣
+     * 2 = 鏀捐揣
+     * 3 = 鍙栨斁璐�
+     */
+    private Short taskMode2 = 0;
+
+    @JSONField(serialize = false)
+    private RgvTaskModeType taskModeType2;
+
+    /*
+    宸ヤ綅1婧愮珯
+     */
+    private Short sourceStaNo2 = 0;
+
+    /*
+    宸ヤ綅1鐩爣绔�
+     */
+    private Short destinationStaNo2 = 0;
+    ///////////////////////////////////////////////////////////////////////////////////////
+
+    /**
+     * 浠诲姟妯″紡锛�
+     * 0 = 鏈‘璁�
+     * 1 = 宸ヤ綅1浠诲姟纭
+     * 2 = 宸ヤ綅2浠诲姟纭
+     * 3 = 宸ヤ綅1銆�2浠诲姟鍚屾椂纭
+     */
+    private Short command = 0;
+
+    public void setTaskMode1(Short taskMode1){
+        this.taskMode1 = taskMode1;
+        this.taskModeType1 = RgvTaskModeType.get(taskModeType1);
+    }
+
+    public void setTaskMode1(RgvTaskModeType type1) {
+        this.taskModeType1 = type1;
+        this.taskMode1 = RgvTaskModeType.get(type1).id.shortValue();
+    }
+
+    public void setTaskMode2(Short taskMode2){
+        this.taskMode2 = taskMode2;
+        this.taskModeType2 = RgvTaskModeType.get(taskModeType2);
+    }
+
+    public void setTaskMode2(RgvTaskModeType type2) {
+        this.taskModeType2 = type2;
+        this.taskMode2 = RgvTaskModeType.get(type2).id.shortValue();
+    }
+
+    public static void main(String[] args) {
+        Date date = new Date();
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(date);
+
+        System.out.println(cal.get(Calendar.YEAR));
+        //榛樿浠�0-11
+        System.out.println(cal.get(Calendar.MONTH)+1);
+        System.out.println(cal.get(Calendar.DATE));
+        int hour = cal.get(Calendar.HOUR_OF_DAY);
+        System.out.println("鏃�");
+        System.out.println(hour);
+        int minute = cal.get(Calendar.MINUTE);
+        System.out.println("鍒�");
+        System.out.println(minute);
+        int second = cal.get(Calendar.SECOND);
+        System.out.println("绉�");
+        System.out.println(second);
+        int mm = cal.get(Calendar.DAY_OF_WEEK) - 1; // 鏄熸湡锛�0(鏃�)锝�6(鍏�)
+        System.out.println("绀兼嫓");
+        System.out.println(mm);
+    }
+}
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..1dffde9
--- /dev/null
+++ b/src/main/java/com/zy/core/model/protocol/RgvProtocol.java
@@ -0,0 +1,231 @@
+package com.zy.core.model.protocol;
+
+import com.zy.asrs.entity.BasRgv;
+import com.zy.core.enums.RgvModeType;
+import com.zy.core.enums.RgvStatusType;
+import lombok.Data;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Created by vincent on 2020/8/7
+ */
+@Data
+public class RgvProtocol implements Cloneable{
+
+    private Integer RgvNo;
+
+    /**
+     * 1 = 鎵嬪姩妯″紡
+     * 2 = 鑷姩妯″紡
+     * 3 = 鐢佃剳妯″紡
+     */
+    public Short mode;
+
+    public RgvModeType modeType;
+
+    /**
+     * RGV褰撳墠鐘舵��
+     * 0锛氱┖闂诧紝鏃犱换鍔�
+     * 1锛氫綔涓氫腑
+     * 2锛氭姤璀�
+     */
+    public Short status;
+
+    /**
+     * 鐘舵�佹灇涓�
+     */
+    public RgvStatusType statusType;
+
+    /**
+     * 宸ヤ綅1浠诲姟鍙�
+     */
+    public Short taskNo1 = 0;
+
+    /**
+     * RGV宸ヤ綅1褰撳墠鐘舵��
+     * 0锛氱┖闂诧紝鏃犱换鍔�
+     * 11锛氬彇璐т腑
+     * 12锛氭斁璐т腑
+     * 10锛氫换鍔″畬鎴愮瓑寰匴CS纭
+     */
+    public Short status1;
+
+    /**
+     * 鐘舵�佹灇涓�
+     */
+    public RgvStatusType statusType1;
+
+    /**
+     * 宸ヤ綅1鏈夌墿
+     */
+    public Short loaded1;
+
+    /**
+     * RGV褰撳墠浣嶇疆
+     */
+    public Short RgvPos;
+
+    /**
+     * 璧拌鍦ㄥ畾浣�
+     * 0 = 鍦ㄥ畾浣�
+     * 1 = 涓嶅湪瀹氫綅
+     */
+    public Short walkPos;
+
+    //////////////////////     宸ヤ綅2瀹氫箟   //////////////////////////////////////////////////
+//    /**
+//     * 宸ヤ綅2浠诲姟鍙�
+//     */
+//    public Short taskNo2 = 0;
+//
+//    /**
+//     * RGV宸ヤ綅2褰撳墠鐘舵��
+//     * 0锛氱┖闂诧紝鏃犱换鍔�
+//     * 11锛氬彇璐т腑
+//     * 12锛氭斁璐т腑
+//     * 10锛氫换鍔″畬鎴愮瓑寰匴CS纭
+//     */
+//    public Short status2;
+//
+//    /**
+//     * 鐘舵�佹灇涓�
+//     */
+//    public RgvStatusType statusType2;
+//
+//    /**
+//     * 宸ヤ綅2鏈夌墿
+//     */
+//    public Short loaded2;
+    ///////////////////////////////////////////////////////////////////////////////////////
+
+    /**
+     * 寮傚父鐮�
+     */
+    public Short alarm;
+
+    /**
+     * 蹇冭烦鎸囦护 1-2姣忕鍒囨崲涓�娆�
+     */
+    public Short heart;
+
+    private Short temp1;
+
+    private Short temp2;
+
+    private Short temp3;
+
+    private Short temp4;
+
+    private Short temp5;
+
+    /**
+     * X琛岃蛋琛岄�熷害m/min
+     */
+    private Float xSpeed;
+
+    /**
+     * 鍫嗗灈鏈虹疮璁¤蛋琛岃窛绂籯m
+     */
+    public Float xDistance;
+
+    /**
+     * 鍫嗗灈鏈虹疮璁¤蛋琛屾椂闀縣
+     */
+    public Float xDuration;
+
+    public void setMode(Short mode) {
+        this.mode = mode;
+        this.modeType = RgvModeType.get(mode);
+    }
+
+    public void setMode(RgvModeType type) {
+        this.modeType = type;
+        this.mode = RgvModeType.get(type).id.shortValue();
+    }
+
+    public void setStatus(Short status){
+        this.status = status;
+        this.statusType = RgvStatusType.get(status);
+    }
+
+    public void setStatus(RgvStatusType type){
+        this.statusType = type;
+        this.status = RgvStatusType.get(type).id.shortValue();
+    }
+
+    public void setStatus1(Short status1){
+        this.status1 = status1;
+        this.statusType1 = RgvStatusType.get(status1);
+    }
+
+    public void setStatus1(RgvStatusType type1){
+        this.statusType1 = type1;
+        this.status1 = RgvStatusType.get(type1).id.shortValue();
+    }
+
+//    public void setStatus2(Short status2){
+//        this.status2 = status2;
+//        this.statusType2 = RgvStatusType.get(status2);
+//    }
+//
+//    public void setStatus2(RgvStatusType type2){
+//        this.statusType2 = type2;
+//        this.status2 = RgvStatusType.get(type2).id.shortValue();
+//    }
+
+    /**
+     * 鏈�杩戜竴娆″叆鍑哄簱绫诲瀷
+     *       I:鍏ュ簱
+     *       O:鍑哄簱
+     */
+    private String lastIo = "I";
+
+
+    public BasRgv toSqlModel(BasRgv basRgv){
+        if (alarm!=null) {
+            basRgv.setRgvErr(alarm.longValue());
+        }
+        basRgv.setWrkNo1(taskNo1.intValue());
+//        basRgv.setWrkNo2(taskNo2.intValue());
+        return basRgv;
+    }
+
+    public void setxSpeed(Short xSpeed) {
+        this.xSpeed = Float.valueOf(xSpeed);
+    }
+
+    public void setxDistance(Short xDistance) {
+        this.xDistance = Float.valueOf(xDistance);
+    }
+
+    public void setxDuration(Short xDuration) {
+        this.xDuration = Float.valueOf(xDuration);
+    }
+
+    public Integer getRgvPosI(){
+        //闇�瑕佹牴鎹幇鍦烘敼閫�  鏍规嵁璇诲埌鐨勫�艰幏鍙栧搴旂珯鐐逛綅缃�
+        Map<Short,Integer> map = new HashMap<>();
+        map.put((short) 1,100);map.put((short) 2,101);
+        map.put((short) 3,106);map.put((short) 4,107);
+        map.put((short) 5,112);map.put((short) 6,113);
+        map.put((short) 7,119);map.put((short) 8,124);
+        map.put((short) 9,149);map.put((short) 10,153);
+        map.put((short) 11,157);map.put((short) 12,161);
+        if (RgvPos==null) return 0;
+
+        return map.get(RgvPos);
+    }
+
+    @Override
+    public RgvProtocol clone() {
+        try {
+            return (RgvProtocol) super.clone();
+        } catch (CloneNotSupportedException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+}
diff --git a/src/main/java/com/zy/core/properties/SlaveProperties.java b/src/main/java/com/zy/core/properties/SlaveProperties.java
index b2e19a4..866ea67 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,5 @@
 
     private List<Slave> car = new ArrayList<>();
 
+    private List<RgvSlave> rgv = new ArrayList<>();
 }
diff --git a/src/main/java/com/zy/core/thread/SiemensRgvThread.java b/src/main/java/com/zy/core/thread/SiemensRgvThread.java
new file mode 100644
index 0000000..f77c5a8
--- /dev/null
+++ b/src/main/java/com/zy/core/thread/SiemensRgvThread.java
@@ -0,0 +1,489 @@
+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.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;
+
+@Data
+@Slf4j
+public class SiemensRgvThread implements Runnable, RgvThread {
+
+    private SiemensS7Net siemensNet;
+    private RgvSlave slave;
+    private RgvProtocol rgvProtocol;
+    /**
+     * 宸ヤ綅1澶嶄綅淇″彿
+     */
+    private boolean resetFlag1 = false;
+    /**
+     * 宸ヤ綅2澶嶄綅淇″彿
+     */
+    private boolean resetFlag2 = false;
+
+    //閿佸畾鏍囪
+    private boolean PakMk = true;
+
+    public SiemensRgvThread(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;
+//                    // 宸ヤ綅1銆�2鍐欏叆鏁版嵁
+//                    case 2:
+//                        write((RgvCommand) task.getData());
+//                        break;
+                    //宸ヤ綅1鍐欏叆鏁版嵁
+                    case 4:
+                        write1((RgvCommand) task.getData());
+                        break;
+//                    //宸ヤ綅2鍐欏叆鏁版嵁
+//                    case 5:
+//                        write2((RgvCommand) task.getData());
+//                        break;
+                    // 澶嶄綅
+                    case 3:
+                        RgvCommand command = (RgvCommand) task.getData();
+                        if (null == command) {
+                            command = new RgvCommand();
+                        }
+                        command.setRgvNo(slave.getId()); // RGV缂栧彿
+                        command.setTaskNo1((short) 0); // 宸ヤ綔鍙�
+                        command.setAckFinish1((short) 1);  // 浠诲姟瀹屾垚纭浣�
+                        command.setTaskMode1(RgvTaskModeType.NONE); // 浠诲姟妯″紡
+                        command.setSourceStaNo1((short)0);     // 婧愮珯
+                        command.setDestinationStaNo1((short)0);     // 鐩爣绔�
+                        command.setCommand((short)0);
+                        write1(command);
+                        break;
+                    // 鍥炲師鐐�  閬胯
+                    case 9:
+                        RgvCommand commandAvoidanceXY = (RgvCommand) task.getData();
+                        if (null == commandAvoidanceXY) {
+                            commandAvoidanceXY = new RgvCommand();
+                        }
+                        commandAvoidanceXY.setRgvNo(slave.getId()); // RGV缂栧彿
+                        commandAvoidanceXY.setTaskNo1((short) 9999); // 宸ヤ綔鍙�
+                        commandAvoidanceXY.setAckFinish1((short) 1);  // 浠诲姟瀹屾垚纭浣�
+                        commandAvoidanceXY.setTaskMode1(RgvTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡
+                        commandAvoidanceXY.setSourceStaNo1((short)0);     // 婧愮珯
+                        commandAvoidanceXY.setDestinationStaNo1((short)0);     // 鐩爣绔�
+//                        commandAvoidanceXY.setTaskNo2((short) 0); // 宸ヤ綔鍙�
+//                        commandAvoidanceXY.setAckFinish2((short) 1);  // 浠诲姟瀹屾垚纭浣�
+//                        commandAvoidanceXY.setTaskMode2(RgvTaskModeType.GO_ORIGIN); // 浠诲姟妯″紡
+//                        commandAvoidanceXY.setSourceStaNo2((short)0);     // 婧愮珯
+//                        commandAvoidanceXY.setDestinationStaNo2((short)0);     // 鐩爣绔�
+                        commandAvoidanceXY.setCommand((short)0);
+                        write(commandAvoidanceXY);
+                        break;
+                    default:
+                        break;
+                }
+                Thread.sleep(500);
+            } catch (Exception e) {
+//                e.printStackTrace();
+            }
+
+        }
+    }
+
+    /**
+     * 鍒濆鍖朢GV鐘舵��
+     */
+    private void initRgv() {
+        if (null == rgvProtocol) {
+            rgvProtocol = new RgvProtocol();
+        }
+        rgvProtocol.setMode((short) -1);
+        rgvProtocol.setStatus((short)-1);
+        rgvProtocol.setTaskNo1((short)0);
+        rgvProtocol.setStatus1((short)-1);
+        rgvProtocol.setLoaded1((short)0);
+        rgvProtocol.setWalkPos((short)0);
+        rgvProtocol.setRgvPos((short)0);
+//        rgvProtocol.setTaskNo2((short)0);
+//        rgvProtocol.setStatus2((short)-1);
+//        rgvProtocol.setLoaded2((short)0);
+        rgvProtocol.setAlarm((short)0);
+        rgvProtocol.setxSpeed((short) 0);
+        rgvProtocol.setxDistance((short) 0);
+        rgvProtocol.setxDuration((short) 0);
+    }
+
+    @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.RGV.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.RGV.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();
+        }
+//        siemensNet.ConnectClose();
+        return result;
+    }
+
+    /**
+     * 璇诲彇鐘舵��
+     */
+    private void readStatus(){
+        try {
+            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 30);
+            if (result.IsSuccess) {
+                if (null == rgvProtocol || rgvProtocol.getRgvNo() == null) {
+                    rgvProtocol = new RgvProtocol();
+                    rgvProtocol.setRgvNo(slave.getId());
+                }
+                rgvProtocol.setMode(siemensNet.getByteTransform().TransInt16(result.Content, 0));
+                rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 2));
+                rgvProtocol.setTaskNo1(siemensNet.getByteTransform().TransInt16(result.Content, 4));
+                rgvProtocol.setStatus1(siemensNet.getByteTransform().TransInt16(result.Content, 6));
+                rgvProtocol.setLoaded1(siemensNet.getByteTransform().TransInt16(result.Content, 8));
+                rgvProtocol.setRgvPos(siemensNet.getByteTransform().TransInt16(result.Content, 10));
+                rgvProtocol.setWalkPos(siemensNet.getByteTransform().TransInt16(result.Content, 12));
+                rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 14));
+//                rgvProtocol.setStatus2(siemensNet.getByteTransform().TransInt16(result.Content, 16));
+                rgvProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 18));
+//                rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 20));
+                rgvProtocol.setxDistance(siemensNet.getByteTransform().TransInt16(result.Content, 22));
+//                rgvProtocol.setTemp1(siemensNet.getByteTransform().TransInt16(result.Content, 24));
+                rgvProtocol.setTemp2(siemensNet.getByteTransform().TransInt16(result.Content, 26));
+//                rgvProtocol.setTemp3(siemensNet.getByteTransform().TransInt16(result.Content, 28));
+//                rgvProtocol.setTemp4(siemensNet.getByteTransform().TransInt16(result.Content, 30));
+//                rgvProtocol.setTemp5(siemensNet.getByteTransform().TransInt16(result.Content, 32));
+//                rgvProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 28));
+//                rgvProtocol.setxDistance(siemensNet.getByteTransform().TransInt16(result.Content, 40));
+//                rgvProtocol.setxDuration(siemensNet.getByteTransform().TransInt16(result.Content, 48));
+
+                OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛", DateUtils.convert(new Date()), slave.getId()));
+
+                // 宸ヤ綅1澶嶄綅淇″彿
+                if (rgvProtocol.getStatusType1().equals(RgvStatusType.WAITING)
+                        || rgvProtocol.getStatusType1().equals(RgvStatusType.FETCHWAITING)) {
+                    if (resetFlag1) {
+                        RgvCommand rgvCommand = new RgvCommand();
+                        rgvCommand.setAckFinish1((short)1);
+                        if (write(rgvCommand)) {
+                            resetFlag1 = false;
+                        }
+                    }
+                }
+
+                // 宸ヤ綅2澶嶄綅淇″彿
+//                if (rgvProtocol.getStatusType2().equals(RgvStatusType.WAITING)
+//                        || rgvProtocol.getStatusType2().equals(RgvStatusType.FETCHWAITING)) {
+//                    if (resetFlag2) {
+//                        RgvCommand rgvCommand = new RgvCommand();
+//                        rgvCommand.setAckFinish2((short)1);
+//                        if (write(rgvCommand)) {
+//                            resetFlag2 = false;
+//                        }
+//                    }
+//                }
+
+                try {
+                    // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
+                    BasRgvService basRgvService = SpringUtils.getBean(BasRgvService.class);
+                    BasRgv basRgv = new BasRgv();
+                    basRgv.setRgvNo(slave.getId());
+                    basRgv.setRgvSts((int)rgvProtocol.getMode());
+                    if (!basRgvService.updateById(rgvProtocol.toSqlModel(basRgv))){
+                        log.error("RGV plc鏁版嵁搴撴洿鏂板け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
+                    }
+                } catch (Exception ignore){
+                    System.out.println(ignore);
+                }
+
+            } else {
+                initRgv();
+                OutputQueue.RGV.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.RGV.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();
+        }
+    }
+
+    /**
+     * 宸ヤ綅1銆�2鍚屾椂鍐欏叆鏁版嵁
+     */
+    private boolean write(RgvCommand command) throws InterruptedException {
+        if (null == command) {
+            log.error("RGV鍐欏叆鍛戒护涓虹┖");
+            return false;
+        }
+//        convertRow(command);
+        command.setRgvNo(slave.getId());
+        short[] array = new short[11];
+        array[0] = command.getAckFinish1();
+        array[1] = command.getTaskNo1();
+        array[2] = command.getTaskMode1();
+        array[3] = command.getSourceStaNo1();
+        array[4] = command.getDestinationStaNo1();
+//        array[0] = command.getAckFinish1();
+//        array[1] = command.getTaskNo1();
+//        array[2] = command.getTaskMode1();
+//        array[3] = command.getSourceStaNo1();
+//        array[4] = command.getDestinationStaNo1();
+//        array[5] = command.getAckFinish2();
+//        array[6] = command.getTaskNo2();
+//        array[7] = command.getTaskMode2();
+//        array[8] = command.getSourceStaNo2();
+//        array[9] = command.getDestinationStaNo2();
+//        array[10] = command.getCommand();
+        OperateResult result = siemensNet.Write("DB100.0", array);
+
+//        if (command.getAckFinish1() == 0 && command.getAckFinish2() == 0) {
+//            short commandFinish = 3;  //宸ヤ綅1銆�2浠诲姟鍚屾椂鍐欏叆
+//            Thread.sleep(100L);
+//            result = siemensNet.Write("DB100.20", commandFinish);
+//        }
+
+
+
+        if (result != null && result.IsSuccess) {
+            Thread.sleep(200);
+            this.readStatus();
+            log.info("RGV 鍛戒护涓嬪彂[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command));
+            OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command)));
+            return true;
+        } else {
+            OutputQueue.RGV.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());
+            return false;
+        }
+    }
+
+    /**
+     * 宸ヤ綅1鍐欏叆鏁版嵁
+     */
+    private boolean write1(RgvCommand command) throws InterruptedException {
+        if (null == command) {
+            log.error("RGV鍐欏叆鍛戒护涓虹┖");
+            return false;
+        }
+
+//        siemensNet.Write("DB100.20", command.getCommand());
+
+        command.setRgvNo(slave.getId());
+        short[] array = new short[5];
+        array[0] = command.getAckFinish1();
+        array[1] = command.getTaskNo1();
+        array[2] = command.getTaskMode1();
+        array[3] = command.getSourceStaNo1();
+        array[4] = command.getDestinationStaNo1();
+        siemensNet.Write("DB100.10", command.getCommand());
+
+        OperateResult result = siemensNet.Write("DB100.0", array);
+
+        if (!result.IsSuccess){
+            log.error("鍐欏叆RGVplc鏁版嵁澶辫触锛岄噸鏂版坊鍔犱换鍔″埌闃熷垪 ===> [id:{}],{}",slave.getId(),JSON.toJSON(command));
+            MessageQueue.offer(SlaveType.Rgv,slave.getId(),new Task(4,command));
+            Thread.sleep(100);
+            readStatus();
+            return false;
+        }
+
+        //RGV浠诲姟鍐欏叆鍚庯紝鍥炶涓�娆★紝鐪嬫槸鍚︽垚鍔�
+        Thread.sleep(400);
+        try {
+            OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 12);
+            if (resultRead.IsSuccess){
+                RgvCommand one = new RgvCommand();
+//                one.setAckFinish1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 0));
+                one.setTaskNo1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 2));
+                one.setTaskMode1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 4));
+                one.setSourceStaNo1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 6));
+                one.setDestinationStaNo1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 8));
+                if (
+                        !command.getTaskNo1().equals(one.getTaskNo1()) ||
+                                !command.getTaskMode1().equals(one.getTaskMode1()) ||
+                                !command.getSourceStaNo1().equals(one.getSourceStaNo1()) ||
+                                !command.getDestinationStaNo1().equals(one.getDestinationStaNo1())
+                ){
+                    try{
+                        log.error("RGV鍛戒护鍦板潃鍐欏叆鍚庡洖璇诲け璐id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
+                    }catch (Exception e){
+                        try{
+                            log.error("鏃ュ織鎵撳嵃澶辫触锛�===>>鍙傛暟one鎶ラ敊 [id:{}],{}", slave.getId(), JSON.toJSON(command),JSON.toJSON(resultRead));
+                        }catch (Exception e1){
+                            log.error("鏃ュ織鎵撳嵃澶辫触锛�===>> [id:{}],{}", slave.getId(), JSON.toJSON(command));
+                        }
+                    }
+                    log.error("Rgv鍛戒护鍥炶澶辫触鍚庯紝閲嶆柊娣诲姞浠诲姟鍒伴槦鍒� ===>> [id:{}],{}", slave.getId(), JSON.toJSON(command));
+                    MessageQueue.offer(SlaveType.Rgv, slave.getId(), new Task(4, command));
+                    Thread.sleep(100);
+                    readStatus();
+                    return false;
+                }else {
+                    log.info("RGV鍛戒护鍦板潃鍐欏叆鍚庡洖璇绘垚鍔焄id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
+                }
+            }
+        }catch (Exception e){
+            log.error("RGV鍛戒护鍦板潃鍐欏叆鍚庡洖璇诲嚭閿�");
+        }
+
+        if (command.getAckFinish1() == 0) {
+            if (result.IsSuccess) {
+                Thread.sleep(300);
+                //浠诲姟涓嬪彂娆℃暟
+                int writeCount2 = 0;
+
+                do {
+                    writeCount2++;
+                    short commandFinish = (short) 1;
+                    result = siemensNet.Write("DB100.10", commandFinish);
+                    if(result.IsSuccess){
+                        //RGV浠诲姟鍐欏叆鍚庯紝鍥炶涓�娆★紝鐪嬫槸鍚︽垚鍔�
+                        Thread.sleep(200);
+                        OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.10", (short) 2);
+                        if (resultRead.IsSuccess) {
+                            commandFinish=siemensNet.getByteTransform().TransInt16(resultRead.Content, 0);
+                            if (commandFinish != 1){
+                                log.error("RGV浠诲姟纭浣�"+commandFinish+"鍐欏叆鏁版嵁涓庡洖璇绘暟鎹笉涓�鑷达紒"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
+                            }else{
+                                //浠诲姟鍛戒护鍐欏叆鎴愬姛
+                                log.info("RGV浠诲姟纭浣�"+commandFinish+"鍥炶鎴愬姛锛�"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
+                                break;
+                            }
+                        }else {
+                            log.error("RGV浠诲姟纭浣�"+commandFinish+"鍥炶澶辫触锛�"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
+                        }
+                    } else {
+                        log.error("RGV浠诲姟纭浣�"+commandFinish+"鍐欏叆澶辫触锛�"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
+                    }
+                }while (writeCount2<5);
+            }
+        }
+
+//        if (command.getAckFinish1() == 0) {
+//            short commandFinish = 1;  //宸ヤ綅1浠诲姟鍐欏叆
+//            Thread.sleep(200);
+//            result = siemensNet.Write("DB100.10", commandFinish);
+//        }
+
+
+
+        if (result != null && result.IsSuccess) {
+            Thread.sleep(200);
+            this.readStatus();
+            log.info("RGV 宸ヤ綅1鍛戒护涓嬪彂[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command));
+            OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 宸ヤ綅1鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command)));
+            return true;
+        } else {
+            OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆戝啓鍏GV plc宸ヤ綅1鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+            log.error("鍐欏叆RGV plc宸ヤ綅1鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+            return false;
+        }
+    }
+
+    /**
+     * 宸ヤ綅2鍐欏叆鏁版嵁
+     */
+    private boolean write2(RgvCommand command) throws InterruptedException {
+        if (null == command) {
+            log.error("RGV鍐欏叆鍛戒护涓虹┖");
+            return false;
+        }
+
+        command.setRgvNo(slave.getId());
+        short[] array = new short[6];
+        array[0] = command.getAckFinish2();
+        array[1] = command.getTaskNo2();
+        array[2] = command.getTaskMode2();
+        array[3] = command.getSourceStaNo2();
+        array[4] = command.getDestinationStaNo2();
+        array[5] = command.getCommand();
+
+        OperateResult result = siemensNet.Write("DB100.10", array);
+
+        if (command.getAckFinish2() == 0) {
+            short commandFinish = 2;  //宸ヤ綅2浠诲姟鍐欏叆
+            Thread.sleep(100L);
+            result = siemensNet.Write("DB100.20", commandFinish);
+        }
+
+
+
+        if (result != null && result.IsSuccess) {
+            Thread.sleep(200);
+            this.readStatus();
+            log.info("RGV 宸ヤ綅2鍛戒护涓嬪彂[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command));
+            OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 宸ヤ綅2鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command)));
+            return true;
+        } else {
+            OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆戝啓鍏GV plc宸ヤ綅2鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+            log.error("鍐欏叆RGV plc宸ヤ綅2鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+            return false;
+        }
+    }
+
+    @Override
+    public void close() {
+        siemensNet.ConnectClose();
+    }
+
+    /******************************************************************************************/
+    /**************************************** 娴嬭瘯涓撶敤 *****************************************/
+    /*****************************************************************************************/
+    public static void main(String[] args) throws InterruptedException {
+        RgvSlave slave = new RgvSlave();
+        slave.setId(1);
+        slave.setIp("192.168.6.9");
+        slave.setRack(0);
+        slave.setSlot(0);
+        SiemensRgvThread rgvThread = new SiemensRgvThread(slave);
+        rgvThread.connect();
+        rgvThread.readStatus();
+        System.out.println(JSON.toJSONString(rgvThread.rgvProtocol));
+        Thread.sleep(3000L);
+
+    }
+}
diff --git a/src/main/resources/mapper/BasRgvErrMapper.xml b/src/main/resources/mapper/BasRgvErrMapper.xml
new file mode 100644
index 0000000..c3eb284
--- /dev/null
+++ b/src/main/resources/mapper/BasRgvErrMapper.xml
@@ -0,0 +1,16 @@
+<?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.BasRgvErrMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BasRgvErr">
+        <result column="error_code" property="errorCode" />
+        <result column="err_name" property="errName" />
+        <result column="modi_user" property="modiUser" />
+        <result column="modi_time" property="modiTime" />
+        <result column="appe_user" property="appeUser" />
+        <result column="appe_time" property="appeTime" />
+
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/BasRgvMapper.xml b/src/main/resources/mapper/BasRgvMapper.xml
new file mode 100644
index 0000000..a826fab
--- /dev/null
+++ b/src/main/resources/mapper/BasRgvMapper.xml
@@ -0,0 +1,24 @@
+<?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="in_enable" property="inEnable" />
+        <result column="out_enable" property="outEnable" />
+        <result column="rgv_sts" property="rgvSts" />
+        <result column="wrk_no1" property="wrkNo1" />
+        <result column="wrk_no2" property="wrkNo2" />
+        <result column="rgv_err" property="rgvErr" />
+        <result column="pak_mk" property="pakMk" />
+        <result column="status" property="status" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="memo" property="memo" />
+
+    </resultMap>
+
+</mapper>

--
Gitblit v1.9.1