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