From c4ceb834b1bbd302c59bd0e783a878c5831a1a55 Mon Sep 17 00:00:00 2001 From: lsh <lsh@163.com> Date: 星期四, 03 四月 2025 10:34:39 +0800 Subject: [PATCH] * --- src/main/java/com/zy/asrs/entity/BasRgv.java | 190 +++ src/main/java/com/zy/core/enums/RgvModeType.java | 43 src/main/resources/mapper/BasRgvOptMapper.xml | 27 src/main/java/com/zy/asrs/service/BasRgvService.java | 8 src/main/resources/mapper/BasRgvMapMapper.xml | 17 src/main/java/com/zy/core/model/RgvSlave.java | 62 + src/main/java/com/zy/core/enums/SlaveType.java | 1 src/main/java/com/zy/core/cache/OutputQueue.java | 2 src/main/java/com/zy/core/MainProcess.java | 24 src/main/java/com/zy/asrs/entity/BasRgvMap.java | 85 + src/main/java/com/zy/asrs/mapper/WrkMastStaMapper.java | 41 src/main/java/com/zy/core/model/command/RgvCommand.java | 129 ++ src/main/java/com/zy/asrs/service/BasRgvOptService.java | 8 src/main/java/com/zy/core/enums/RgvStatusType.java | 47 src/main/java/com/zy/asrs/utils/RouteUtils.java | 574 +++++++++ src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 1061 ++++++++++++++++ src/main/java/com/zy/asrs/mapper/BasRgvMapper.java | 12 src/main/java/com/zy/asrs/service/impl/BasRgvServiceImpl.java | 12 src/main/java/com/zy/asrs/mapper/BasRgvMapMapper.java | 12 src/main/resources/mapper/WrkMastStaMapper.xml | 126 ++ src/main/java/com/zy/core/thread/RgvThread.java | 465 +++++++ src/main/java/com/zy/asrs/entity/WrkMastSta.java | 202 +++ src/main/resources/mapper/BasRgvMapper.xml | 25 src/main/java/com/zy/asrs/mapper/BasRgvOptMapper.java | 12 src/main/java/com/zy/asrs/entity/BasRgvOpt.java | 230 +++ src/main/java/com/zy/core/model/protocol/RgvProtocol.java | 210 +++ src/main/java/com/zy/asrs/service/impl/BasRgvOptServiceImpl.java | 12 src/main/java/com/zy/core/enums/RgvTaskModeType.java | 46 28 files changed, 3,666 insertions(+), 17 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..6ce5d92 --- /dev/null +++ b/src/main/java/com/zy/asrs/entity/BasRgv.java @@ -0,0 +1,190 @@ +package com.zy.asrs.entity; + +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableId; +import com.baomidou.mybatisplus.annotations.TableName; +import com.baomidou.mybatisplus.enums.IdType; +import com.core.common.Cools; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.text.SimpleDateFormat; +import java.util.Date; + +@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 String inEnable; + + /** + * 鍙嚭 + */ + @ApiModelProperty(value= "鍙嚭") + @TableField("out_enable") + private String 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; + + /** + * 鏈夌墿鏃犵墿 + */ + @ApiModelProperty(value= "鏈夌墿鏃犵墿") + private int loaded2; + + public BasRgv() {} + + public BasRgv(Integer rgvNo,String inEnable,String 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 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/BasRgvMap.java b/src/main/java/com/zy/asrs/entity/BasRgvMap.java new file mode 100644 index 0000000..190dec9 --- /dev/null +++ b/src/main/java/com/zy/asrs/entity/BasRgvMap.java @@ -0,0 +1,85 @@ +package com.zy.asrs.entity; + +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableId; +import com.baomidou.mybatisplus.annotations.TableName; +import com.baomidou.mybatisplus.enums.IdType; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +@TableName("asr_bas_rgv_map") +public class BasRgvMap 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("start_route") + private Integer startRoute; + + /** + * 缁撴潫鑼冨洿 + */ + @ApiModelProperty(value= "缁撴潫鑼冨洿") + @TableField("end_route") + private Integer endRoute; + + /** + * 褰撳墠浣嶇疆 + */ + @ApiModelProperty(value= "褰撳墠浣嶇疆") + @TableField("now_route") + private Integer nowRoute; + + /** + * 鐘舵�� + */ + @ApiModelProperty(value= "鐘舵��") + @TableField("rgv_status") + private Integer rgvStatus; + + /** + * 閿�-寮�濮�-浣嶇疆 + */ + @ApiModelProperty(value= "閿�-寮�濮�-浣嶇疆") + @TableField("lock_start_route") + private Integer lockStartRoute; + + /** + * 閿�-缁撴潫-浣嶇疆 + */ + @ApiModelProperty(value= "閿�-缁撴潫-浣嶇疆") + @TableField("lock_end_route") + private Integer lockEndRoute; + + public BasRgvMap() {} + + public BasRgvMap(Integer rgvNo, Integer startRoute, Integer endRoute, Integer nowRoute, Integer rgvStatus, Integer lockStartRoute, Integer lockEndRoute) { + this.rgvNo = rgvNo; + this.startRoute = startRoute; + this.endRoute = endRoute; + this.nowRoute = nowRoute; + this.rgvStatus = rgvStatus; + this.lockStartRoute = lockStartRoute; + this.lockEndRoute = lockEndRoute; + } + + public Integer getRgvNoOther(){ + return 3-this.rgvNo; + } + + +} 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..6c257a2 --- /dev/null +++ b/src/main/java/com/zy/asrs/entity/BasRgvOpt.java @@ -0,0 +1,230 @@ +package com.zy.asrs.entity; + +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableId; +import com.baomidou.mybatisplus.annotations.TableName; +import com.baomidou.mybatisplus.enums.IdType; +import com.core.common.Cools; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Data +@TableName("asr_bas_rgv_opt") +public class BasRgvOpt implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value= "ID") + @TableId(value = "id", type = IdType.INPUT) + private Long id; + + /** + * 浠诲姟鍙�1 + */ + @ApiModelProperty(value= "浠诲姟鍙�1") + @TableField("wrk_no1") + private Integer wrkNo1; + + /** + * 浠诲姟鍙�2 + */ + @ApiModelProperty(value= "浠诲姟鍙�2") + @TableField("wrk_no2") + private Integer wrkNo2; + + /** + * 绌挎杞� + */ + @ApiModelProperty(value= "绌挎杞�") + @TableField("rgv_no") + private Integer rgvNo; + + /** + * 涓嬪彂鏃堕棿 + */ + @ApiModelProperty(value= "涓嬪彂鏃堕棿") + @TableField("send_time") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date sendTime; + + /** + * 浣滀笟 + */ + @ApiModelProperty(value= "浣滀笟") + private String mode; + + /** + * 婧愭帓 + */ + @ApiModelProperty(value= "婧愭帓") + @TableField("source_row") + private Integer sourceRow; + + /** + * 婧愬垪 + */ + @ApiModelProperty(value= "婧愬垪") + @TableField("source_bay") + private Integer sourceBay; + + /** + * 婧愬眰 + */ + @ApiModelProperty(value= "婧愬眰") + @TableField("source_lev") + private Integer sourceLev; + + /** + * 婧愮珯 + */ + @ApiModelProperty(value= "婧愮珯") + @TableField("source_sta") + private Integer sourceSta; + + /** + * 鐩爣鎺� + */ + @ApiModelProperty(value= "鐩爣鎺�") + @TableField("pos_row") + private Integer posRow; + + /** + * 鐩爣鍒� + */ + @ApiModelProperty(value= "鐩爣鍒�") + @TableField("pos_bay") + private Integer posBay; + + /** + * 鐩爣灞� + */ + @ApiModelProperty(value= "鐩爣灞�") + @TableField("pos_lev") + private Integer posLev; + + /** + * 鐩爣绔� + */ + @ApiModelProperty(value= "鐩爣绔�") + @TableField("pos_sta") + private Integer posSta; + + /** + * 鍝嶅簲缁撴灉 1: 姝e父 0: 澶辫触 + */ + @ApiModelProperty(value= "鍝嶅簲缁撴灉 1: 姝e父 0: 澶辫触 ") + private Integer response; + + /** + * 淇敼鏃堕棿 + */ + @ApiModelProperty(value= "淇敼鏃堕棿") + @TableField("update_time") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + /** + * 淇敼浜哄憳 + */ + @ApiModelProperty(value= "淇敼浜哄憳") + @TableField("update_by") + private Long updateBy; + + /** + * 澶囨敞 + */ + @ApiModelProperty(value= "澶囨敞") + private String memo; + + public BasRgvOpt() {} + + public BasRgvOpt(Integer wrkNo1, Integer wrkNo2, Integer rgvNo, Date sendTime, String mode, Integer sourceRow, Integer sourceBay, Integer sourceLev, Integer sourceSta, Integer posRow, Integer posBay, Integer posLev, Integer posSta, Integer response, Date updateTime, Long updateBy, String memo) { + this.wrkNo1 = wrkNo1; + this.wrkNo2 = wrkNo2; + this.rgvNo = rgvNo; + this.sendTime = sendTime; + this.mode = mode; + this.sourceRow = sourceRow; + this.sourceBay = sourceBay; + this.sourceLev = sourceLev; + this.sourceSta = sourceSta; + this.posRow = posRow; + this.posBay = posBay; + this.posLev = posLev; + this.posSta = posSta; + this.response = response; + this.updateTime = updateTime; + this.updateBy = updateBy; + this.memo = memo; + } + + public BasRgvOpt(Integer wrkNo1, Integer wrkNo2, Integer rgvNo, Date sendTime, String mode, Integer sourceSta, Integer posSta, Integer sourceRow, Integer posRow, Integer response, Date updateTime, Long updateBy) { + this.wrkNo1 = wrkNo1; + this.wrkNo2 = wrkNo2; + this.rgvNo = rgvNo; + this.sendTime = sendTime; + this.mode = mode; + this.sourceSta = sourceSta; + this.posSta = posSta; + this.sourceRow = sourceRow; + this.posRow = posRow; + this.response = response; + this.updateTime = updateTime; + this.updateBy = updateBy; + } + +// BasRgvOpt basRgvOpt = new BasRgvOpt( +// null, // ID[闈炵┖] +// null, // 浠诲姟鍙� +// null, // 绌挎杞� +// null, // 涓嬪彂鏃堕棿 +// null, // 浣滀笟 +// null, // 婧愭帓 +// null, // 婧愬垪 +// null, // 婧愬眰 +// null, // 婧愮珯 +// null, // 鐩爣鎺� +// null, // 鐩爣鍒� +// null, // 鐩爣灞� +// null, // 鐩爣绔� +// null, // 鍝嶅簲缁撴灉 +// null, // 淇敼鏃堕棿 +// null, // 淇敼浜哄憳 +// null // 澶囨敞 +// ); + + public String getSendTime$(){ + if (Cools.isEmpty(this.sendTime)){ + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.sendTime); + } + + 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); + } + } + + 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/WrkMastSta.java b/src/main/java/com/zy/asrs/entity/WrkMastSta.java new file mode 100644 index 0000000..a500865 --- /dev/null +++ b/src/main/java/com/zy/asrs/entity/WrkMastSta.java @@ -0,0 +1,202 @@ +package com.zy.asrs.entity; + +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableId; +import com.baomidou.mybatisplus.annotations.TableName; +import com.baomidou.mybatisplus.enums.IdType; +import com.core.common.Cools; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Data +@TableName("asr_wrk_mast_sta") +public class WrkMastSta implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ApiModelProperty(value= "ID") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 宸ヤ綔鍙� + */ + @ApiModelProperty(value= "宸ヤ綔鍙�") + @TableField("wrk_no") + private Long wrkNo; + + /** + * 宸ヤ綔妗e紑濮嬩綅缃� + */ + @ApiModelProperty(value= "宸ヤ綔妗e紑濮嬩綅缃�") + @TableField("wrk_start") + private Integer wrkStart; + + /** + * 宸ヤ綔妗g粨鏉熶綅缃� + */ + @ApiModelProperty(value= "宸ヤ綔妗g粨鏉熶綅缃�") + @TableField("wrk_end") + private Integer wrkEnd; + + /** + * 灏忚溅鎺ヨ揣浣嶇疆 + */ + @ApiModelProperty(value= "灏忚溅鎺ヨ揣浣嶇疆") + @TableField("sta_start") + private Integer staStart; + + /** + * 灏忚溅鏀捐揣浣嶇疆 + */ + @ApiModelProperty(value= "灏忚溅鏀捐揣浣嶇疆") + @TableField("sta_end") + private Integer staEnd; + + /** + * 娣诲姞鏃堕棿 + */ + @ApiModelProperty(value= "娣诲姞鏃堕棿") + @TableField("create_time") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** + * 淇敼鏃堕棿 + */ + @ApiModelProperty(value= "淇敼鏃堕棿") + @TableField("update_time") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + /** + * 绫诲瀷 0:闈炵┖ 1:绌烘澘 + */ + @ApiModelProperty(value= "绫诲瀷 1:婊$増 2:绌烘澘") + private Integer type; + + /** + * 宸ヤ綔鐘舵�� 0锛氬垵濮� 1锛氱瓑寰呭皬杞﹀彇 2锛氱瓑寰呭皬杞︽斁 3锛氬畬鎴� + */ + @ApiModelProperty(value= "宸ヤ綔鐘舵�� 0锛氬垵濮� 1锛氱瓑寰呭皬杞﹀彇 2锛氱瓑寰呭皬杞︽斁 3锛氬畬鎴�") + @TableField("wrk_sts") + private Integer wrkSts; + + /** + * 琛屽彿 + */ + @ApiModelProperty(value= "琛屽彿") + @TableField("line_number") + private Integer lineNumber; + + /** + * 宸ヤ綔绫诲瀷 + */ + @ApiModelProperty(value= "宸ヤ綔绫诲瀷 1:鍙栵紙鍙犵洏锛� 2锛氭媶鐩� 5锛氭弧鍙� 6锛氭弧鏀�") + @TableField("wrk_type") + private Integer wrkType; + + /** + * 宸ヤ綔绫诲瀷 + */ + @ApiModelProperty(value= "宸ヤ綔绫诲瀷") + @TableField("wrk_crn") + private Integer wrkCrn; + + /** + * 鏍囪鏃堕棿 + */ + @ApiModelProperty(value= "鏍囪鏃堕棿") + @TableField("bign_time") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date bignTime; + + public WrkMastSta() {} + + public WrkMastSta(Date now, Integer staStart) { + this.wrkNo = staStart.longValue()+19999; + this.wrkStart = staStart; + this.wrkEnd = staStart; + this.staStart = staStart; + this.staEnd = staStart; + this.createTime = now; + this.updateTime = now; + this.wrkSts = 0; + this.bignTime = now; + } + + public WrkMastSta(Long wrkNo, Integer wrkStart, Integer wrkEnd, Integer staStart, Integer staEnd, Date createTime, Date updateTime, Integer type, Integer wrkSts, Integer lineNumber, Integer wrkType, Date bignTime) { + this.wrkNo = wrkNo; + this.wrkStart = wrkStart; + this.wrkEnd = wrkEnd; + this.staStart = staStart; + this.staEnd = staEnd; + this.createTime = createTime; + this.updateTime = updateTime; + this.type = type; + this.wrkSts = wrkSts; + this.lineNumber = lineNumber; + this.wrkType = wrkType; + this.bignTime = bignTime; + } + + public Integer getStaEnd(Integer souSta) { + switch (souSta) { + case 100: + case 103: + case 106: + case 109: + case 112: + case 115: + return souSta + 1; + default: + return souSta; + } + } + +// WrkMastSta wrkMastSta = new WrkMastSta( +// null, // 宸ヤ綔鍙穂闈炵┖] +// null, // 宸ヤ綔妗e紑濮嬩綅缃甗闈炵┖] +// null, // 宸ヤ綔妗g粨鏉熶綅缃甗闈炵┖] +// null, // 灏忚溅鎺ヨ揣浣嶇疆[闈炵┖] +// null, // 灏忚溅鏀捐揣浣嶇疆[闈炵┖] +// null, // 娣诲姞鏃堕棿 +// null, // 淇敼鏃堕棿 +// null, // 绫诲瀷 0:闈炵┖ 1:绌烘澘[闈炵┖] +// null, // 宸ヤ綔鐘舵�� 0锛氬垵濮� 1锛氱瓑寰呭皬杞﹀彇 2锛氱瓑寰呭皬杞︽斁 3锛氬畬鎴怺闈炵┖] +// 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 getBignTime$(){ + if (Cools.isEmpty(this.bignTime)){ + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.bignTime); + } + + +} diff --git a/src/main/java/com/zy/asrs/mapper/BasRgvMapMapper.java b/src/main/java/com/zy/asrs/mapper/BasRgvMapMapper.java new file mode 100644 index 0000000..9f6ffa2 --- /dev/null +++ b/src/main/java/com/zy/asrs/mapper/BasRgvMapMapper.java @@ -0,0 +1,12 @@ +package com.zy.asrs.mapper; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.zy.asrs.entity.BasRgvMap; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +@Mapper +@Repository +public interface BasRgvMapMapper extends BaseMapper<BasRgvMap> { + +} 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..b426ee2 --- /dev/null +++ b/src/main/java/com/zy/asrs/mapper/BasRgvMapper.java @@ -0,0 +1,12 @@ +package com.zy.asrs.mapper; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.zy.asrs.entity.BasRgv; +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..97fbeb1 --- /dev/null +++ b/src/main/java/com/zy/asrs/mapper/BasRgvOptMapper.java @@ -0,0 +1,12 @@ +package com.zy.asrs.mapper; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.zy.asrs.entity.BasRgvOpt; +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/WrkMastStaMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastStaMapper.java new file mode 100644 index 0000000..3a9863b --- /dev/null +++ b/src/main/java/com/zy/asrs/mapper/WrkMastStaMapper.java @@ -0,0 +1,41 @@ +package com.zy.asrs.mapper; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.zy.asrs.entity.WrkMastSta; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Mapper +@Repository +public interface WrkMastStaMapper extends BaseMapper<WrkMastSta> { + + /* + * 鑾峰彇鎵�鏈変换鍔℃暟閲� + * */ + Integer selectAllWrkCount108(); + Integer selectAllWrkCount108Y(); + + Integer selectAllWrkCount(@Param("type")Integer type); + Integer selectAllWrkStsCount(@Param("type")Integer type,@Param("wrkSts")Integer wrkSts); + WrkMastSta selectAllWrkStsCountWrkMastSta(@Param("type")Integer type,@Param("wrkSts")Integer wrkSts); + + /* + * 鑾峰彇鎵�鏈夊彲鎵ц浠诲姟 + * */ + List<WrkMastSta> selectAllWrkMastStaList(@Param("type")Integer type); + + /* + * 鏌ヨ鎸囧畾宸ヤ綔鍙蜂换鍔� + * */ + WrkMastSta selectByWrkNo(@Param("workNo") Long workNo); + + /* + * 鏌ヨ涓嶅共娑夌殑鍙墽琛屼换鍔� + * */ + WrkMastSta selectNoInterfere(@Param("staStarts") List<Integer> staStarts,@Param("staEnds") List<Integer> staEnds); + List<WrkMastSta> selectNoInterfereList(@Param("staStarts") List<Integer> staStarts,@Param("staEnds") List<Integer> staEnds); + +} 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..29dd8eb --- /dev/null +++ b/src/main/java/com/zy/asrs/service/BasRgvOptService.java @@ -0,0 +1,8 @@ +package com.zy.asrs.service; + +import com.baomidou.mybatisplus.service.IService; +import com.zy.asrs.entity.BasRgvOpt; + +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..29dac13 --- /dev/null +++ b/src/main/java/com/zy/asrs/service/BasRgvService.java @@ -0,0 +1,8 @@ +package com.zy.asrs.service; + +import com.baomidou.mybatisplus.service.IService; +import com.zy.asrs.entity.BasRgv; + +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..fb27c6c --- /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.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.zy.asrs.entity.BasRgvOpt; +import com.zy.asrs.mapper.BasRgvOptMapper; +import com.zy.asrs.service.BasRgvOptService; +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..0fbdc7c --- /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.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.zy.asrs.entity.BasRgv; +import com.zy.asrs.mapper.BasRgvMapper; +import com.zy.asrs.service.BasRgvService; +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 c15dab2..04841ba 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -4,19 +4,16 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; -import com.core.common.R; import com.core.exception.CoolException; import com.zy.asrs.controller.CrnController; -import com.zy.asrs.controller.OpenController; -import com.zy.asrs.controller.SiteController; import com.zy.asrs.domain.enums.TaskStatusType; import com.zy.asrs.domain.enums.WorkNoType; import com.zy.asrs.domain.param.CrnOperatorParam; import com.zy.asrs.entity.*; -import com.zy.asrs.entity.param.TaskOverToWms; import com.zy.asrs.mapper.*; import com.zy.asrs.service.*; import com.zy.asrs.utils.CommandUtils; +import com.zy.asrs.utils.RouteUtils; import com.zy.asrs.utils.Utils; import com.zy.common.service.CommonService; import com.zy.common.utils.HttpHandler; @@ -28,15 +25,12 @@ import com.zy.core.model.CrnSlave; import com.zy.core.model.DevpSlave; import com.zy.core.model.Task; -import com.zy.core.model.command.CommandPackage; import com.zy.core.model.command.CrnCommand; import com.zy.core.model.protocol.CrnProtocol; import com.zy.core.model.protocol.StaProtocol; import com.zy.core.properties.SlaveProperties; import com.zy.core.thread.BarcodeThread; import com.zy.core.thread.SiemensDevpThread; -import com.zy.system.entity.Config; -import com.zy.system.service.ConfigService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -45,10 +39,6 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport; import java.io.IOException; -import java.lang.management.ManagementFactory; -import java.lang.management.MemoryMXBean; -import java.lang.management.MemoryUsage; -import java.lang.management.ThreadMXBean; import java.util.*; /** @@ -1123,5 +1113,1054 @@ return taskWrk; } + /** + * 鍏ュ嚭搴� ===>> 灏忚溅浣滀笟涓嬪彂 + */ + public synchronized boolean rgvIoExecute(Integer sign) { + boolean rgvIoExecuteSign = false; + try{ + for (RgvSlave rgvSlave:slaveProperties.getRgv()) { + // 鑾峰彇灏忚溅淇℃伅 + boolean signWork = false; + RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + if (rgvProtocol == null) { + continue; + } + BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); + if (basRgv == null) { + log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId()); + continue; + } + + // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤 + if (rgvProtocol.getStatusType() == RgvStatusType.IDLE + && rgvProtocol.getStatusType1() == RgvStatusType.IDLE + && rgvProtocol.getStatusType2() == RgvStatusType.IDLE + && rgvProtocol.getModeType() == RgvModeType.AUTO + && rgvProtocol.getLoaded1()==0 + && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 + ) { + switch (sign){ + //鎵ц灏忚溅璐х墿鎼繍浠诲姟 + case 1: + signWork = rgvRunWrkMastFullSta(rgvSlave); + break; + //鎵ц灏忚溅绌烘澘鎼繍浠诲姟 + case 2://鏀�//鎷嗙洏 + signWork = rgvRunWrkMastEmptyStaPut(rgvSlave); + break; + case 3://婊℃斁 + signWork = rgvRunWrkMastEmptyStaPutFull(rgvSlave); + break; + case 4://鍙栧彔鐩� + signWork = rgvRunWrkMastEmptyStaTake(rgvSlave); + break; + case 5:////婊″彇 + signWork = rgvRunWrkMastEmptyStaTakeFull(rgvSlave); + break; + case 6:////鎻愬崌 +// signWork = qwe(); + break; + default: + break; + } + for (int signCount = 1;!signWork && signCount<7;signCount++){ + switch (signCount){ + case 1://鎵ц灏忚溅璐х墿鎼繍浠诲姟 + signWork = rgvRunWrkMastFullSta(rgvSlave); + break; + case 2://鏀�//鎷嗙洏 + signWork = rgvRunWrkMastEmptyStaPut(rgvSlave); + break; + case 3://婊℃斁 + signWork = rgvRunWrkMastEmptyStaPutFull(rgvSlave); + break; + case 4://鍙栧彔鐩� + signWork = rgvRunWrkMastEmptyStaTake(rgvSlave); + break; + case 5:////婊″彇 + signWork = rgvRunWrkMastEmptyStaTakeFull(rgvSlave); + break; + case 6:////鎻愬崌 +// signWork = rgvRunWrkMastEmptyStaPut(); + break; + default: + break; + } + } + }else { + continue; + } + if (!rgvIoExecuteSign){ + rgvIoExecuteSign = signWork; + } + } +// if (!rgvIoExecuteSign){ +// if (sign>6){ +// +// } +// } + }catch (Exception e){ + log.error("RGV灏忚溅浠诲姟涓嬪彂鎶ラ敊"+e); + } + return rgvIoExecuteSign; + } + + /** + * 鎵ц灏忚溅鎼繍浠诲姟 + */ + public synchronized boolean rgvRunWrkMastFullSta(RgvSlave rgvSlave) { + try{ +// for (RgvSlave rgvSlave:slaveProperties.getRgv()) { + RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + if (rgvProtocol == null) { + return false; + } + BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); + if (basRgv == null) { + log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId()); + return false; + } + + // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤 + if (rgvProtocol.getStatusType() == RgvStatusType.IDLE + && rgvProtocol.getStatusType1() == RgvStatusType.IDLE + && rgvProtocol.getStatusType2() == RgvStatusType.IDLE + && rgvProtocol.getModeType() == RgvModeType.AUTO + && rgvProtocol.getLoaded1()==0 + && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 + ) { + BasRgvMap basRgvMap = basRgvMapMapper.selectById(basRgv.getRgvNo()); + if (basRgvMap == null) { + log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱鍦板浘涓繘琛岀淮鎶わ紒", rgvProtocol.getRgvNo()); + return false; + } + List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); + basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙� + List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route); + for (WrkMastSta wrkMastSta : wrkMastStaList){ + if (wrkMastSta.getType()!=1 || wrkMastSta.getWrkType()!=3){//1:婊$増 3锛氬彇鏀� + continue; + } + BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaEnd()); + if (!basDevp.getAutoing().equals("Y") || basDevp.getLoading().equals("Y") || basDevp.getWrkNo()!=0){ + continue; + } + if (basDevp.getDevNo()>117 && basDevp.getDevNo()<124){ + if (basDevp.getLoadingSuper().equals("Y")){ + continue; + } + } + if (basDevp.getDevNo()>=118 && basDevp.getDevNo()<=123){ + if (!basDevp.getEmptyMk().equals("Y")){ + continue; + } + } + Date date = new Date(); + + SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, rgvSlave.getDevpPlcId()); + StaProtocol staProtocol = devpThread.getStation().get(basDevp.getDevNo()); + if (staProtocol == null) { + log.info(date+"鍙栨斁浠诲姟涓嬪彂锛氭湭鏌ヨ鍒扮珯鐐逛俊鎭細"+wrkMastSta); + continue; + } + if (!staProtocol.isAutoing() || staProtocol.isLoading() || staProtocol.getWorkNo() != 0){ + continue; + } + if (basDevp.getDevNo()>117 && basDevp.getDevNo()<124){ + if (staProtocol.isLoadingSuper()){ + continue; + } + } + if (basDevp.getDevNo()>=118 && basDevp.getDevNo()<=123){ + if (!staProtocol.isEmptyMk()){ + continue; + } + } + BasDevp basDevpS = basDevpService.selectById(wrkMastSta.getStaStart()); + if (!basDevpS.getAutoing().equals("Y") || !basDevpS.getLoading().equals("Y") || basDevpS.getWrkNo()!=wrkMastSta.getWrkNo().intValue()){ + continue; + } + StaProtocol staProtocols = devpThread.getStation().get(basDevpS.getDevNo()); + if (staProtocols == null) { + log.info(date+"鍙栨斁浠诲姟涓嬪彂锛氭湭鏌ヨ鍒扮珯鐐逛俊鎭細"+wrkMastSta); + continue; + } + if (!staProtocols.isAutoing() || !staProtocols.isLoading() || staProtocols.getWorkNo() != wrkMastSta.getWrkNo().intValue()){ + continue; + } + + + log.info(date+"鍙栨斁浠诲姟涓嬪彂锛氬皬杞﹀伐浣滄。锛�"+wrkMastSta); + log.info(date+"鍙栨斁浠诲姟涓嬪彂锛氱洰鏍囩珯鐘舵�侊細"+basDevp); + boolean sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta); + if (sign){ + boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd()); + if (signMap){ + wrkMastSta.setWrkSts(1); + try{ + wrkMastStaMapper.updateById(wrkMastSta); + }catch (Exception e){ + log.error("鏇存柊灏忚溅浠诲姟澶辫触"); + } + return true; + }else { + log.error("3864琛岋紝璐х墿鎼繍浠诲姟锛氬伐浣滃彿{}鎵�灞炰换鍔′笅鍙戝悗鍦板浘鍚屾澶辫触",wrkMastSta.getWrkNo()); + } + }else { + log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo()); + } + break; + } + } +// } + }catch (Exception e){ + log.error("3875琛屾墽琛屽皬杞︽惉杩愪换鍔′笅鍙戝け璐�"); + log.error("3875琛�"+e); + } + return false; + } + /** + * 鎵ц灏忚溅鎼繍浠诲姟//鎷嗙洏 + */ + public synchronized boolean rgvRunWrkMastEmptyStaPut(RgvSlave rgvSlave) {//鎷嗙洏 + try{ +// for (RgvSlave rgvSlave:slaveProperties.getRgv()) { + RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + if (rgvProtocol == null) { + return false; + } + BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); + if (basRgv == null) { + log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId()); + return false; + } + + // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅浜屾湁鐗�//rgv鍙敤//鎷嗙洏 + if (rgvProtocol.getStatusType() == RgvStatusType.IDLE + && rgvProtocol.getStatusType1() == RgvStatusType.IDLE + && rgvProtocol.getStatusType2() == RgvStatusType.IDLE + && rgvProtocol.getModeType() == RgvModeType.AUTO + && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 + && (rgvProtocol.getLoaded2()==3 || rgvProtocol.getLoaded2()==1 || rgvProtocol.getLoaded2()==4)////0 鏃犵墿锛�1 涓�灞傛棤鐗╀簩灞傛湁鐗� 锛堝彧鑳芥媶鍙狅級 锛�2涓�灞傛湁鐗╀簩灞傛棤鐗�() 锛�3 1銆�2灞傞兘鏈夌墿 4锛氾紙锛夊彧鍏佽鎷嗙洏 + ) { + BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); + if (basRgvMap == null) { + log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱鍦板浘涓繘琛岀淮鎶わ紒", rgvProtocol.getRgvNo()); + return false; + } + basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙� + List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());//鑾峰彇娲诲姩鑼冨洿 + List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route);//鏌ヨ鍙墽琛屼换鍔� + for (WrkMastSta wrkMastSta : wrkMastStaList){ + if (wrkMastSta.getType()!=2 || wrkMastSta.getWrkType()!=2){// 2:绌烘澘 || 宸ヤ綔绫诲瀷 1:鍙栵紙鍙犵洏锛� 2锛氭媶鐩� 5锛氭弧鍙� 6锛氭弧鏀� + continue; + } + boolean sign = false; + if ( wrkMastSta.getStaEnd()!=0){//鏀� + BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaEnd()); + if (!basDevp.getAutoing().equals("Y") || basDevp.getLoading().equals("Y") || basDevp.getWrkNo()!=0){ + continue; + } + if (basDevp.getDevNo()>117 && basDevp.getDevNo()<124){ + if (basDevp.getLoadingSuper().equals("Y")){ + continue; + } + } + if (basDevp.getDevNo()>=118 && basDevp.getDevNo()<=123){ + if (!basDevp.getEmptyMk().equals("Y")){ + continue; + } + } + Date date = new Date(); + + SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, rgvSlave.getDevpPlcId()); + StaProtocol staProtocol = devpThread.getStation().get(basDevp.getDevNo()); + if (staProtocol == null) { + log.info(date+"鎷嗙洏浠诲姟涓嬪彂锛氭湭鏌ヨ鍒扮珯鐐逛俊鎭細"+wrkMastSta); + continue; + } + if (!staProtocol.isAutoing() || staProtocol.isLoading() || staProtocol.getWorkNo() != 0){ + continue; + } + if (basDevp.getDevNo()>117 && basDevp.getDevNo()<124){ + if (staProtocol.isLoadingSuper()){ + continue; + } + } + if (basDevp.getDevNo()>=118 && basDevp.getDevNo()<=123){ + if (!staProtocol.isEmptyMk()){ + continue; + } + } + + log.info(date+"鎷嗙洏浠诲姟涓嬪彂锛氬皬杞﹀伐浣滄。锛�"+wrkMastSta); + log.info(date+"鎷嗙洏浠诲姟涓嬪彂锛氱洰鏍囩珯鐘舵�侊細"+basDevp); + sign = rgvPutEmpty(rgvProtocol.getRgvNo(),wrkMastSta);//鎷嗙洏 + }else { + continue; + } + if (sign){ + boolean signMap = rgvMapUpdate(basRgvMap, basRgvMap.getStartRoute(), wrkMastSta.getStaEnd()); + if (signMap){ + wrkMastSta.setWrkSts(2); + try{ + wrkMastStaMapper.updateById(wrkMastSta); + }catch (Exception e){ + log.error("鏇存柊灏忚溅浠诲姟澶辫触"); + } + return true; + }else { + log.error("3857琛岋紝璐х墿鎼繍浠诲姟锛氬伐浣滃彿{}鎵�灞炰换鍔′笅鍙戝悗鍦板浘鍚屾澶辫触",wrkMastSta.getWrkNo()); + } + }else { + log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo()); + } + break; + } + } +// } + }catch (Exception e){ + log.error("3933琛屾墽琛屽皬杞︽斁绌烘澘浠诲姟涓嬪彂澶辫触"); + log.error("3933琛�"+e); + } + return false; + } + + /** + * 鎵ц灏忚溅鎼繍浠诲姟 + */ + public synchronized boolean rgvRunWrkMastEmptyStaPutFull(RgvSlave rgvSlave) {//婊℃斁 + try{ +// for (RgvSlave rgvSlave:slaveProperties.getRgv()) { + RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + if (rgvProtocol == null) { + return false; + } + BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); + if (basRgv == null) { + log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId()); + return false; + } + + // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅浜屾湁鐗�//rgv鍙敤 + if (rgvProtocol.getStatusType() == RgvStatusType.IDLE + && rgvProtocol.getStatusType1() == RgvStatusType.IDLE + && rgvProtocol.getStatusType2() == RgvStatusType.IDLE + && rgvProtocol.getModeType() == RgvModeType.AUTO + && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 + && (rgvProtocol.getLoaded2()==2 || rgvProtocol.getLoaded2()==3 ) ////0 鏃犵墿锛�1 涓�灞傛棤鐗╀簩灞傛湁鐗� 锛�2涓�灞傛湁鐗╀簩灞傛棤鐗� 锛堝彧鑳芥弧鏀撅級锛�3 1銆�2灞傞兘鏈夌墿 4锛氾紙锛夊彧鍏佽鎷嗙洏 + ) { + BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); + if (basRgvMap == null) { + log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱鍦板浘涓繘琛岀淮鎶わ紒", rgvProtocol.getRgvNo()); + return false; + } + basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙� + List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());//鑾峰彇娲诲姩鑼冨洿 + List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route);//鏌ヨ鍙墽琛屼换鍔� + for (WrkMastSta wrkMastSta : wrkMastStaList){ + if (wrkMastSta.getType()!=2 || wrkMastSta.getWrkType()!=6){// 2:绌烘澘 || 宸ヤ綔绫诲瀷 1:鍙栵紙鍙犵洏锛� 2锛氭媶鐩� 5锛氭弧鍙� 6锛氭弧鏀� 7:鎻愬崌 + continue; + } + boolean sign = false; + if ( wrkMastSta.getStaEnd()!=0){//婊℃斁 + BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaEnd()); + if (!basDevp.getAutoing().equals("Y") || basDevp.getLoading().equals("Y") || basDevp.getWrkNo()!=0){ + continue; + } + if (basDevp.getDevNo()>117 && basDevp.getDevNo()<124){ + if (basDevp.getLoadingSuper().equals("Y")){ + continue; + } + } + if (basDevp.getDevNo()>=118 && basDevp.getDevNo()<=123){ + if (!basDevp.getEmptyMk().equals("Y")){ + continue; + } + } + Date date = new Date(); + + SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, rgvSlave.getDevpPlcId()); + StaProtocol staProtocol = devpThread.getStation().get(basDevp.getDevNo()); + if (staProtocol == null) { + log.info(date+"婊℃斁浠诲姟涓嬪彂锛氭湭鏌ヨ鍒扮珯鐐逛俊鎭細"+wrkMastSta); + continue; + } + if (!staProtocol.isAutoing() || staProtocol.isLoading() || staProtocol.getWorkNo() != 0){ + continue; + } + if (basDevp.getDevNo()>117 && basDevp.getDevNo()<124){ + if (staProtocol.isLoadingSuper()){ + continue; + } + } + if (basDevp.getDevNo()>=118 && basDevp.getDevNo()<=123){ + if (!staProtocol.isEmptyMk()){ + continue; + } + } + + log.info(date+"婊℃斁浠诲姟涓嬪彂锛氬皬杞﹀伐浣滄。锛�"+wrkMastSta); + log.info(date+"婊℃斁浠诲姟涓嬪彂锛氱洰鏍囩珯鐘舵�侊細"+basDevp); + sign = rgvPutEmptyFull(rgvProtocol.getRgvNo(),wrkMastSta); + }else { + continue; + } + if (sign){ + boolean signMap = rgvMapUpdate(basRgvMap, basRgvMap.getStartRoute(), wrkMastSta.getStaEnd()); + if (signMap){ + wrkMastSta.setWrkSts(2); + try{ + wrkMastStaMapper.updateById(wrkMastSta); + }catch (Exception e){ + log.error("鏇存柊灏忚溅浠诲姟澶辫触"); + } + return true; + }else { + log.error("3857琛岋紝璐х墿鎼繍浠诲姟锛氬伐浣滃彿{}鎵�灞炰换鍔′笅鍙戝悗鍦板浘鍚屾澶辫触",wrkMastSta.getWrkNo()); + } + }else { + log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo()); + } + break; + } + } +// } + }catch (Exception e){ + log.error("3933琛屾墽琛屽皬杞︽斁绌烘澘浠诲姟涓嬪彂澶辫触"); + log.error("3933琛�"+e); + } + return false; + } + + public synchronized boolean rgvRunWrkMastEmptyStaTake(RgvSlave rgvSlave) {//鍙犵洏 + try{ +// for (RgvSlave rgvSlave:slaveProperties.getRgv()) { + RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + if (rgvProtocol == null) { + return false; + } + BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); + if (basRgv == null) { + log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId()); + return false; + } + + // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅浜屾棤鐗�//rgv鍙敤 + if (rgvProtocol.getStatusType() == RgvStatusType.IDLE + && rgvProtocol.getStatusType1() == RgvStatusType.IDLE + && rgvProtocol.getStatusType2() == RgvStatusType.IDLE + && rgvProtocol.getModeType() == RgvModeType.AUTO + && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 + && (rgvProtocol.getLoaded2()==0 || rgvProtocol.getLoaded2()==1 ) //鐜板満淇敼锛氬彔鐩樻満锛�////0 鏃犵墿锛�1 涓�灞傛棤鐗╀簩灞傛湁鐗╋紙鍙兘鎷嗗彔锛� 锛�2涓�灞傛湁鐗╀簩灞傛棤鐗� 锛堝彧鑳芥弧鏀撅級锛�3 1銆�2灞傞兘鏈夌墿 4锛氾紙锛夊彧鍏佽鎷嗙洏 + ) { + BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); + if (basRgvMap == null) { + log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱鍦板浘涓繘琛岀淮鎶わ紒", rgvProtocol.getRgvNo()); + return false; + } + List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); + basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙� + List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route); + for (WrkMastSta wrkMastSta : wrkMastStaList){ + if (wrkMastSta.getType()!=2 || wrkMastSta.getWrkType()!=1){// 2:绌烘澘 || 宸ヤ綔绫诲瀷 1:鍙栵紙鍙犵洏锛� 2锛氭媶鐩� 5锛氭弧鍙� 6锛氭弧鏀� + continue; + } + boolean sign = false; + if ( wrkMastSta.getStaStart()!=0){//鍙� + BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaStart()); + if (!basDevp.getAutoing().equals("Y") || !basDevp.getLoading().equals("Y")){ + continue; + } + if (basDevp.getDevNo()>=118 && basDevp.getDevNo()<=123){ + if (!basDevp.getEmptyMk().equals("Y")){ + continue; + } + } + Date date = new Date(); + + SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, rgvSlave.getDevpPlcId()); + StaProtocol staProtocol = devpThread.getStation().get(basDevp.getDevNo()); + if (staProtocol == null) { + log.info(date+"鍙犵洏浠诲姟涓嬪彂锛氭湭鏌ヨ鍒扮珯鐐逛俊鎭細"+wrkMastSta); + continue; + } + if (!staProtocol.isAutoing() || !staProtocol.isLoading()){ + continue; + } + if (basDevp.getDevNo()>=118 && basDevp.getDevNo()<=123){ + if (!staProtocol.isEmptyMk()){ + continue; + } + } + + log.info(date+"鍙犵洏浠诲姟涓嬪彂锛氬皬杞﹀伐浣滄。锛�"+wrkMastSta); + log.info(date+"鍙犵洏浠诲姟涓嬪彂锛氱洰鏍囩珯鐘舵�侊細"+basDevp); + sign = rgvTakeEmpty(rgvProtocol.getRgvNo(),wrkMastSta);//鍙犵洏 + }else { + continue; + } + if (sign){ + boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), basRgvMap.getStartRoute()); + if (signMap){ + wrkMastSta.setWrkSts(1); + try{ + wrkMastStaMapper.updateById(wrkMastSta); + }catch (Exception e){ + log.error("鏇存柊灏忚溅浠诲姟澶辫触"); + } + return true; + }else { + log.error("3879琛岋紝璐х墿鎼繍浠诲姟锛氬伐浣滃彿{}鎵�灞炰换鍔′笅鍙戝悗鍦板浘鍚屾澶辫触",wrkMastSta.getWrkNo()); + } + }else { + log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo()); + } + break; + } + } +// } + }catch (Exception e){ + log.error("3989琛屾墽琛屽皬杞﹀彇绌烘澘浠诲姟涓嬪彂澶辫触"); + log.error("3989琛�"+e); + } + return false; + } + + public synchronized boolean rgvRunWrkMastEmptyStaTakeFull(RgvSlave rgvSlave) {//婊″彇 + try{ +// for (RgvSlave rgvSlave:slaveProperties.getRgv()) { + RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + if (rgvProtocol == null) { + return false; + } + BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); + if (basRgv == null) { + log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId()); + return false; + } + + // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅浜屾棤鐗�//rgv鍙敤 + if (rgvProtocol.getStatusType() == RgvStatusType.IDLE + && rgvProtocol.getStatusType1() == RgvStatusType.IDLE + && rgvProtocol.getStatusType2() == RgvStatusType.IDLE + && rgvProtocol.getModeType() == RgvModeType.AUTO + && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 + && rgvProtocol.getLoaded2()==0 //鐜板満淇敼锛氬彔鐩樻満锛�////0 鏃犵墿锛�1 涓�灞傛棤鐗╀簩灞傛湁鐗╋紙鍙兘鎷嗗彔锛� 锛�2涓�灞傛湁鐗╀簩灞傛棤鐗� 锛堝彧鑳芥弧鏀撅級锛�3 1銆�2灞傞兘鏈夌墿 4锛氾紙锛夊彧鍏佽鎷嗙洏 + ) { + BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); + if (basRgvMap == null) { + log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱鍦板浘涓繘琛岀淮鎶わ紒", rgvProtocol.getRgvNo()); + return false; + } + List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); + basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //鏇存柊灏忚溅褰撳墠浣嶇疆绔欑偣鍙� + List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route); + WrkMast wrkMast = wrkMastMapper.selectBy122ManQu(122,110,15L); + if (!Cools.isEmpty(wrkMast)){ + WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(wrkMast.getWrkNo().longValue()); + if (!Cools.isEmpty(wrkMastSta) && wrkMastSta.getType()==2 && wrkMastSta.getWrkType()==5 ){ + wrkMastStaList.add(wrkMastSta); + } + } + for (WrkMastSta wrkMastSta : wrkMastStaList){ + if (wrkMastSta.getType()!=2 || wrkMastSta.getWrkType()!=5){// 2:绌烘澘 || 宸ヤ綔绫诲瀷 1:鍙栵紙鍙犵洏锛� 2锛氭媶鐩� 5锛氭弧鍙� 6锛氭弧鏀� + continue; + } + boolean sign = false; + if (wrkMastSta.getStaStart()!=0){//婊″彇 + BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaStart()); + if (!basDevp.getAutoing().equals("Y") || !basDevp.getLoading().equals("Y")){ + continue; + } + Date date = new Date(); + + SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, rgvSlave.getDevpPlcId()); + StaProtocol staProtocol = devpThread.getStation().get(basDevp.getDevNo()); + if (staProtocol == null) { + log.info(date+"婊″彇浠诲姟涓嬪彂锛氭湭鏌ヨ鍒扮珯鐐逛俊鎭細"+wrkMastSta); + continue; + } + if (!staProtocol.isAutoing() || staProtocol.isLoading()){ + continue; + } + + log.info(date+"婊″彇浠诲姟涓嬪彂锛氬皬杞﹀伐浣滄。锛�"+wrkMastSta); + log.info(date+"婊″彇浠诲姟涓嬪彂锛氱洰鏍囩珯鐘舵�侊細"+basDevp); + sign = rgvTakeEmptyFull(rgvProtocol.getRgvNo(),wrkMastSta); + }else { + continue; + } + if (sign){ + boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), basRgvMap.getStartRoute()); + if (signMap){ + wrkMastSta.setWrkSts(1); + try{ + wrkMastStaMapper.updateById(wrkMastSta); + }catch (Exception e){ + log.error("鏇存柊灏忚溅浠诲姟澶辫触"); + } + return true; + }else { + log.error("3879琛岋紝璐х墿鎼繍浠诲姟锛氬伐浣滃彿{}鎵�灞炰换鍔′笅鍙戝悗鍦板浘鍚屾澶辫触",wrkMastSta.getWrkNo()); + } + }else { + log.error("宸ヤ綔鍙穥}鎵�灞炰换鍔′笅鍙戝け璐�",wrkMastSta.getWrkNo()); + } + break; + } + } +// } + }catch (Exception e){ + log.error("3989琛屾墽琛屽皬杞﹀彇绌烘澘浠诲姟涓嬪彂澶辫触"); + log.error("3989琛�"+e); + } + return false; + } + + /* + * 鏈変换鍔′絾鏈墽琛� 姝ゆ椂闇�瑕佽皟鏁村皬杞︿綅缃� + * */ + public synchronized void rgvRunWrkMastEmptyStaAvoidance() { + try{ +// Integer integer = wrkMastStaMapper.selectAllWrkStsCount(null,0);//鏌ヨ鐘舵�佷负0鐨勪换鍔� +// if (integer==0){ +// return; +// } + WrkMastSta wrkMastSta = wrkMastStaMapper.selectAllWrkStsCountWrkMastSta(null, 0); + if (Cools.isEmpty(wrkMastSta)){ + return; + } + boolean signRgv = true; + boolean signRgv1 = true; + boolean signRgv2 = true; + for (RgvSlave rgvSlave:slaveProperties.getRgv()) { + RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + if (rgvProtocol == null) { + continue; + } + BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); + if (basRgv == null) { + log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId()); + continue; + } + + // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤 + if (rgvProtocol.getStatusType() == RgvStatusType.IDLE + && rgvProtocol.getModeType() == RgvModeType.AUTO + && rgvProtocol.getLoaded1()==0 //鐜板満淇敼锛氬彔鐩樻満锛屼笉婊¢兘绠楁棤鐗╋紝鎬庝箞鍒ゆ柇闇�瑕佽窡鐢垫帶瀵规帴 + && rgvProtocol.getTaskNo1()==0 + && rgvProtocol.getTaskNo2()==0 + && rgvProtocol.getStatusType1() == RgvStatusType.IDLE + && rgvProtocol.getStatusType2() == RgvStatusType.IDLE + ) { + if (rgvProtocol.getRgvNo()!=1){ + if (!rgvProtocol.getRgvPosI().equals(120) && !rgvProtocol.getRgvPosI().equals(110)){ + continue; + } + rgvAvoidanceXY(rgvProtocol.getRgvNo()); +// return; + continue; + } + if (!rgvProtocol.getRgvPosI().equals(110) && !rgvProtocol.getRgvPosI().equals(108) && !rgvProtocol.getRgvPosI().equals(119)){ + continue; + } + Integer count108Y = wrkMastStaMapper.selectAllWrkCount108Y(); + if (count108Y!=0){ + continue; + } +// Integer count108 = wrkMastStaMapper.selectAllWrkCount108(); +// if (count108!=0){ +// continue; +// } + rgvAvoidanceXY(rgvProtocol.getRgvNo()); + continue; +// BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); +// Integer fallMerge = RouteUtils.RouteIndexFarMas(basRgvMap.getRgvNo(), basRgvMap.getEndRoute()); //鑾峰彇鍚堝苟骞叉秹椤� +// List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(),fallMerge); +// List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route ,route); +// if (!wrkMastStaList.isEmpty()){ +// log.info("灏忚溅瀛樺湪鍙墽琛屼换鍔★紝璺宠繃閬胯锛侊紒4214"); +// return; +// } +// if (rgvProtocol.getRgvPosI().equals(basRgvMap.getStartRoute())){ +//// if (!RouteUtils.RgvRunStaSign(rgvProtocol.getRgvPosI(),RouteUtils.RouteIndexFarMas(rgvProtocol.getRgvNo(),rgvRunSta[rgvProtocol.getRgvNo()-1]),rgvProtocol.getRgvNo())){ +//// if (!RouteUtils.RgvRunStaSign(rgvProtocol.getRgvPosI(),rgvRunSta[rgvProtocol.getRgvNo()-1],rgvProtocol.getRgvNo())){ +// if (rgvProtocol.getRgvNo()==1){ +// signRgv1 = false; +// }else { +// signRgv2 = false; +// } +// } +// if (rgvProtocol.getRgvNo()==1 && (rgvProtocol.getRgvPosI().equals(101) || rgvProtocol.getRgvPosI().equals(102) )){ +// signRgv1 = false; +// continue; +// } else if (rgvProtocol.getRgvNo()==2 && (rgvProtocol.getRgvPosI().equals(116) || rgvProtocol.getRgvPosI().equals(117) ) ){ +// signRgv2 = false; +// continue; +// } + }else { + signRgv = false; + break; + } + } +// if (signRgv && (signRgv1 || signRgv2)){ +// for (RgvSlave rgvSlave:slaveProperties.getRgv()) { +// RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); +// RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); +// if (rgvProtocol == null) { +// continue; +// } +// +// // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤 +// if (rgvProtocol.getStatusType() == RgvStatusType.IDLE +// && rgvProtocol.getModeType() == RgvModeType.AUTO +// && rgvProtocol.getLoaded1()==0 //鐜板満淇敼锛氬彔鐩樻満锛屼笉婊¢兘绠楁棤鐗╋紝鎬庝箞鍒ゆ柇闇�瑕佽窡鐢垫帶瀵规帴 +// && rgvProtocol.getTaskNo1()==0 +// && rgvProtocol.getTaskNo2()==0 +// && rgvProtocol.getStatusType1() == RgvStatusType.IDLE +// && rgvProtocol.getStatusType2() == RgvStatusType.IDLE +// ) { +// if (rgvProtocol.getRgvNo()==1 && (rgvProtocol.getRgvPosI().equals(101) || rgvProtocol.getRgvPosI().equals(102) )){ +// continue; +// } else if (rgvProtocol.getRgvNo()==2 && (rgvProtocol.getRgvPosI().equals(116) || rgvProtocol.getRgvPosI().equals(117) ) ){ +// continue; +// } +// BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); +// rgvAvoidanceXY(rgvProtocol.getRgvNo()); +// rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); +// +// } +// } +// } + }catch (Exception e){ + log.error("4109琛屾墽琛屽皬杞﹀垵濮嬪寲浠诲姟涓嬪彂澶辫触"); + log.error("4109琛�"+e); + } + } + + /* + * 鍒锋柊鍦板浘鏁版嵁 + * */ + public synchronized void refreshRgvMap() { + try{ + for (RgvSlave rgvSlave:slaveProperties.getRgv()) { + RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + if (rgvProtocol == null) { + continue; + } + BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); + if (basRgv == null) { + log.error("{}鍙稲GV灏氭湭鍦ㄦ暟鎹簱杩涜缁存姢锛�", rgvSlave.getId()); + continue; + } + + // 鍙湁褰揜GV绌洪棽銆佽嚜鍔�,宸ヤ綅涓�鏃犵墿//rgv鍙敤 + if (rgvProtocol.getStatusType() == RgvStatusType.IDLE + && rgvProtocol.getModeType() == RgvModeType.AUTO + && rgvProtocol.getLoaded1()==0 //鐜板満淇敼锛氬彔鐩樻満锛屼笉婊¢兘绠楁棤鐗╋紝鎬庝箞鍒ゆ柇闇�瑕佽窡鐢垫帶瀵规帴 + && rgvProtocol.getTaskNo1()==0 + && rgvProtocol.getTaskNo2()==0 + ) { + BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvSlave.getId()); + basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); + rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); + } + } + }catch (Exception e){ + log.error("4109琛屾墽琛屽皬杞﹀垵濮嬪寲浠诲姟涓嬪彂澶辫触"); + log.error("4109琛�"+e); + } + } + + /* + * 灏忚溅XY绉诲姩 閬胯 + * */ + public synchronized boolean rgvAvoidanceXY(Integer rgvId){ + if (rgvId==1){ + try{ + BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvId); + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(rgvId); // RGV缂栧彿 + rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo1((short)32222); // 宸ヤ綅1宸ヤ綔鍙� + rgvCommand.setTaskMode1(RgvTaskModeType.X_MOVE); // 宸ヤ綅1浠诲姟妯″紡: 鍥炲師鐐� + //basRgvMap.getLockStartRoute().shortValue() + rgvCommand.setSourceStaNo1( (short)104); + rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� step=9锛屽洖鍘熺偣 9999浠诲姟鍙� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand)); + return false; + } else { + return true; + } + }catch (Exception e){ + return false; + + } + }else { + try{ + BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvId); + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(rgvId); // RGV缂栧彿 + rgvCommand.setAckFinish2((short) 0); // 宸ヤ綅2浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo2((short)32222); // 宸ヤ綅2宸ヤ綔鍙� + rgvCommand.setTaskMode2(RgvTaskModeType.X_MOVE); // 宸ヤ綅2浠诲姟妯″紡: 鍥炲師鐐� + rgvCommand.setSourceStaNo2((short)114); + rgvCommand.setCommand((short) 2); //宸ヤ綅2浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� step=9锛屽洖鍘熺偣 9999浠诲姟鍙� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand)); + return false; + } else { + return true; + } + }catch (Exception e){ + return false; + + } + } + } + + + /* + * 灏忚溅鍙栬揣鑷冲伐浣嶄换鍔� + * */ + public synchronized boolean rgvTakeFullAll(Integer rgvId,WrkMastSta wrkMastSta){ + try{ + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(rgvId); // RGV缂栧彿 + rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo1(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙� + rgvCommand.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 宸ヤ綅1浠诲姟妯″紡: 鍙栨斁璐� + rgvCommand.setSourceStaNo1(wrkMastSta.getStaStart().shortValue()); //宸ヤ綅1璧风偣 + rgvCommand.setDestinationStaNo1(wrkMastSta.getStaEnd().shortValue()); //宸ヤ綅1鐩爣绔欑偣 + rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand)); + return false; + } else { + return true; + } + }catch (Exception e){ + return false; + } + } + + /* + * 灏忚溅鍙栬揣鑷冲伐浣嶄换鍔� + * */ + public synchronized boolean rgvTakeFull(Integer rgvId,WrkMastSta wrkMastSta){ + try{ + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(rgvId); // RGV缂栧彿 + rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo1(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙� + rgvCommand.setTaskMode1(RgvTaskModeType.FETCH); // 宸ヤ綅1浠诲姟妯″紡: 鍙栬揣 + rgvCommand.setSourceStaNo1(wrkMastSta.getStaStart().shortValue()); //宸ヤ綅1璧风偣 + rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand)); + return false; + } else { + return true; + } + }catch (Exception e){ + return false; + } + } + + /* + * 灏忚溅鏀捐揣鑷宠緭閫佺嚎浠诲姟 + * */ + public synchronized boolean rgvPutFull(Integer rgvId,WrkMastSta wrkMastSta){ + try{ + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(rgvId); // RGV缂栧彿 + rgvCommand.setAckFinish1((short) 0); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo1(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅1宸ヤ綔鍙� + rgvCommand.setTaskMode1(RgvTaskModeType.PUT); // 宸ヤ綅1浠诲姟妯″紡: 鏀捐揣 + rgvCommand.setDestinationStaNo1(wrkMastSta.getStaEnd().shortValue()); //宸ヤ綅1鐩爣绔欑偣 + rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand)); + return false; + } else { + return true; + } + }catch (Exception e){ + return false; + } + } + + /* + * 灏忚溅鍙栫┖鏉胯嚦宸ヤ綅浠诲姟 鍙犵洏 + * */ + public synchronized boolean rgvTakeEmpty(Integer rgvId,WrkMastSta wrkMastSta){ + try{ + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(rgvId); // RGV缂栧彿 + rgvCommand.setAckFinish2((short) 0); // 宸ヤ綅2浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo2(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅2宸ヤ綔鍙� + rgvCommand.setTaskMode2(RgvTaskModeType.FETCH); // 宸ヤ綅2浠诲姟妯″紡: 鍙栬揣 + rgvCommand.setSourceStaNo2(wrkMastSta.getStaStart().shortValue()); //宸ヤ綅2璧风偣 + rgvCommand.setCommand((short) 2); //宸ヤ綅2浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand)); + return false; + } else { + return true; + } + }catch (Exception e){ + return false; + } + } + + /* + * 灏忚溅鏀剧┖鏉胯嚦杈撻�佺嚎浠诲姟 //鎷嗙洏 + * */ + public synchronized boolean rgvPutEmpty(Integer rgvId,WrkMastSta wrkMastSta){ + try{ + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(rgvId); // RGV缂栧彿 + rgvCommand.setAckFinish2((short) 0); // 宸ヤ綅2浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo2(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅2宸ヤ綔鍙� + rgvCommand.setTaskMode2(RgvTaskModeType.PUT); // 宸ヤ綅2浠诲姟妯″紡: 鏀捐揣 + rgvCommand.setDestinationStaNo2(wrkMastSta.getStaEnd().shortValue()); //宸ヤ綅2鐩爣绔欑偣 + rgvCommand.setCommand((short) 2); //宸ヤ綅2浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand)); + return false; + } else { + return true; + } + }catch (Exception e){ + return false; + } + } + + /* + * 灏忚溅鍙栫┖鏉胯嚦宸ヤ綅浠诲姟 婊″彇 + * */ + public synchronized boolean rgvTakeEmptyFull(Integer rgvId,WrkMastSta wrkMastSta){ + try{ + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(rgvId); // RGV缂栧彿 + rgvCommand.setAckFinish2((short) 0); // 宸ヤ綅2浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo2(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅2宸ヤ綔鍙� + rgvCommand.setTaskMode2(RgvTaskModeType.FETCH_5); // 宸ヤ綅2浠诲姟妯″紡: 婊″彇 + rgvCommand.setSourceStaNo2(wrkMastSta.getStaStart().shortValue()); //宸ヤ綅2璧风偣 + rgvCommand.setCommand((short) 2); //宸ヤ綅2浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand)); + return false; + } else { + return true; + } + }catch (Exception e){ + return false; + } + } + + /* + * 灏忚溅鏀剧┖鏉胯嚦杈撻�佺嚎浠诲姟 //婊℃斁 + * */ + public synchronized boolean rgvPutEmptyFull(Integer rgvId,WrkMastSta wrkMastSta){ + try{ + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(rgvId); // RGV缂栧彿 + rgvCommand.setAckFinish2((short) 0); // 宸ヤ綅2浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo2(wrkMastSta.getWrkNo().shortValue()); // 宸ヤ綅2宸ヤ綔鍙� + rgvCommand.setTaskMode2(RgvTaskModeType.PUT_6); // 宸ヤ綅2浠诲姟妯″紡: 婊℃斁 + rgvCommand.setDestinationStaNo2(wrkMastSta.getStaEnd().shortValue()); //宸ヤ綅2鐩爣绔欑偣 + rgvCommand.setCommand((short) 2); //宸ヤ綅2浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgvId, JSON.toJSON(rgvCommand)); + return false; + } else { + return true; + } + }catch (Exception e){ + return false; + } + } + + /* + * 灏忚溅澶嶄綅 + * */ + public synchronized boolean rgvComplete(Integer rgvId){ + try{ + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(3, new RgvCommand()))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}",rgvId); + return false; + } else { + log.info("RGV鍛戒护涓嬪彂鎴愬姛锛孯GV鍙�={}",rgvId); + return true; + } + }catch (Exception e){ + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}銆傚紓甯革細"+e,rgvId); + return false; + } + } + + /* + * 灏忚溅鍦板浘鏇存柊 鏇存柊閿� + * */ + public synchronized boolean rgvMapUpdate(BasRgvMap basRgvMapCurrent,Integer staStart,Integer staEnd){ + if (rgvOpen){ + return true; + } + +// List<Integer> integers = RouteUtils.RouteMapCurrentFar(basRgvMapCurrent.getNowRoute(),staStart,staEnd, basRgvMapCurrent.getLockStartRoute()); + //鏇存柊褰撳墠灏忚溅閿� + try{ + Integer farCurrentStaNo = RouteUtils.RouteIndexFarMas(basRgvMapCurrent.getNowRoute(), staStart, staEnd, basRgvMapCurrent.getLockStartRoute());//鑾峰彇鏈�杩滅珯鐐� +// Integer farCurrentStaNo = RouteUtils.RouteIndexFarMas(staEnd, staStart, staEnd, basRgvMapCurrent.getLockStartRoute());//鑾峰彇鏈�杩滅珯鐐� + Integer fallMerge = RouteUtils.RouteIndexFarMas(basRgvMapCurrent.getRgvNo(), farCurrentStaNo); //鑾峰彇鍚堝苟骞叉秹椤� + basRgvMapCurrent.setLockEndRoute(fallMerge); + basRgvMapMapper.updateById(basRgvMapCurrent); + + //鏇存柊鍙︿竴鍙板皬杞﹀湴鍥� + Integer rgvNoOther = basRgvMapCurrent.getRgvNoOther(); + BasRgvMap basRgvMapOther = basRgvMapMapper.selectById(rgvNoOther); + List<Integer> integers = RouteUtils.RouteMapCurrentFar(fallMerge, basRgvMapCurrent.getLockStartRoute()); + Integer lockEndRoute = RouteUtils.RouteMapOtherFarStnNo(integers, basRgvMapCurrent.getLockStartRoute());//鍙︿竴鍙板皬杞﹀彲娲诲姩鏈�杩滀綅缃� + Integer lockEndRouteL = RouteUtils.RouteIndexFarMasL(rgvNoOther, lockEndRoute);//鍙︿竴鍙板皬杞﹀彲娲诲姩鏈�杩滀綅缃� + basRgvMapOther.setEndRoute(lockEndRouteL); + basRgvMapMapper.updateById(basRgvMapOther); + return true; + }catch (Exception e){ + log.error("灏忚溅鍦板浘鏇存柊鍑洪敊锛�"); + return false; + } + } } diff --git a/src/main/java/com/zy/asrs/utils/RouteUtils.java b/src/main/java/com/zy/asrs/utils/RouteUtils.java new file mode 100644 index 0000000..bb88fa2 --- /dev/null +++ b/src/main/java/com/zy/asrs/utils/RouteUtils.java @@ -0,0 +1,574 @@ +package com.zy.asrs.utils; + +import com.zy.core.enums.RouteCollectCountType; + +import java.util.ArrayList; +import java.util.List; + +import static java.util.stream.Collectors.toList; + +/** + * Created by Monkey D. Luffy on 2023/7/18 + */ +public class RouteUtils { + + public static final List<Integer> MERGE_STA_NO_One = new ArrayList<Integer>() {{ + add(171);add(116);add(117); + }}; + + public static final List<Integer> MERGE_STA_NO_TWO = new ArrayList<Integer>() {{ + add(113);add(123);add(114);add(1142); + }}; + + public static final List<Integer> MERGE_STA_NO_THREE = new ArrayList<Integer>() {{ + add(107);add(118);add(108);add(119); + }}; + + public static final List<Integer> MERGE_STA_NO_FOUR = new ArrayList<Integer>() {{ + add(110);add(120);add(111);add(121); + }}; + + public static final List<Integer> MERGE_STA_NO_FIVE = new ArrayList<Integer>() {{ + add(104);add(122);add(105); + }}; + + public static final List<Integer> MERGE_STA_NO_SIX = new ArrayList<Integer>() {{ + add(108);add(119);add(110);add(120); + }}; + + public static final List<Integer> MERGE_STA_NO_SEVEN = new ArrayList<Integer>() {{ + + }}; + + public static final List<Integer> MERGE_STA_NO_EIGHT = new ArrayList<Integer>() {{ + + }}; + + public static final List<Integer> MERGE_STA_NO_NINE = new ArrayList<Integer>() {{ + + }}; + + // 姝e簭 + public static final List<Integer> TRACK_POSITION_POSITIVE_SEQUENCE1 = new ArrayList<Integer>() {{ + add(101);add(102);add(104);add(122);add(105);add(107);add(118);add(108); + }}; + // 鍙嶅簭 + public static final List<Integer> TRACK_POSITION_REVERSE_SEQUENCE2 = new ArrayList<Integer>() {{ + add(117);add(116);add(171);add(1142);add(114);add(123);add(113);add(121);add(111);add(120);add(110); + }}; + + public static Integer getEndRoute(Integer endRoute,Integer rgvNo){ + if (rgvNo == 1){ + if (TRACK_POSITION_POSITIVE_SEQUENCE1.contains(endRoute)){ + return endRoute; + } else { + return 108; + } + } else if (rgvNo == 2){ + if (TRACK_POSITION_REVERSE_SEQUENCE2.contains(endRoute)){ + return endRoute; + } else { + return 110; + } + } + return endRoute; + } + +// 姝e簭 + public static final List<Integer> TRACK_POSITION_POSITIVE_SEQUENCE = new ArrayList<Integer>() {{ + add(101);add(102);add(104);add(122);add(105);add(107);add(118);add(108);add(119);add(110);add(120);add(111);add(121);add(113);add(123);add(114);add(1142);add(171);add(116);add(117); + }}; +// 鍙嶅簭 + public static final List<Integer> TRACK_POSITION_REVERSE_SEQUENCE = new ArrayList<Integer>() {{ + add(117);add(116);add(171);add(1142);add(114);add(123);add(113);add(121);add(111);add(120);add(110);add(119);add(108);add(118);add(107);add(105);add(122);add(104);add(102);add(101); + }}; + + public static String zerofill(String msg, Integer count){ + if (msg.length() == count){ + return msg; + } else if (msg.length() > count){ + return msg.substring(0, 16); + } else { + StringBuilder msgBuilder = new StringBuilder(msg); + for (int i = 0; i<count-msg.length(); i++){ + msgBuilder.insert(0,"0"); + } + return msgBuilder.toString(); + } + } +// /* +// * 鑾峰彇骞叉秹鏈�杩滅珯鐐� +// * */ +// public static Integer RouteIndexFarMas(int rgvNo,Integer staNo){ +// List<Integer> staFall = new ArrayList<>(); +// if (MERGE_STA_NO_SIX.contains(staNo)){ +// staFall = MERGE_STA_NO_SIX; +// }else if (MERGE_STA_NO_One.contains(staNo)){ +// staFall = MERGE_STA_NO_One; +// }else if (MERGE_STA_NO_TWO.contains(staNo)){ +// staFall = MERGE_STA_NO_TWO; +// }else if (MERGE_STA_NO_THREE.contains(staNo)){ +// staFall = MERGE_STA_NO_THREE; +// }else if (MERGE_STA_NO_FOUR.contains(staNo)){ +// staFall = MERGE_STA_NO_FOUR; +// }else if (MERGE_STA_NO_FIVE.contains(staNo)){ +// staFall = MERGE_STA_NO_FIVE; +// }else { +// return staNo; +// } +// +// int indexNo = 0; +// if (rgvNo==1){ +// indexNo=staFall.size()-1; +// } +// return staFall.get(indexNo); +// } + + /* + * 鑾峰彇骞叉秹鏈�杩滅珯鐐� + * */ + public static Integer RouteIndexFarMas(int rgvNo,Integer staNo){ + if (rgvNo==1){ + switch (staNo){ + case 101: + case 102: return 102; + case 104: + case 122: return 118; + case 105: return 119; + case 107: + case 118: return 108; + case 108: + case 119: return 111; + case 110: + case 120: return 113; + case 111: + case 121: return 113; + case 113: return 114; + case 123: + case 114: return 1142; + default: + return 116; + } + }else { + switch (staNo){ + case 117: + case 116: + case 171: + return 1142; + case 1142: + case 114: return 113; + case 123: + case 113: return 111; + case 121: return 110; + case 111: return 110; + case 120: + case 110: return 108; + case 119: + case 108: return 107; + case 118: + case 107: return 105; + case 105: + case 122: + case 104: return 104; + default: + return 102; + } + } + } + /* + * 鑾峰彇骞叉秹鏈�杩滅珯鐐� + * */ + public static Integer RouteIndexFarMasL(int rgvNo,Integer staNo){ + if (rgvNo==1){ + switch (staNo){ + case 101: + case 102: + case 104: + case 122: + case 105: + case 107: + return 118; + case 118: + return staNo; + default: + return 108; + } + }else { + switch (staNo){ + case 117: + case 116: + case 171: + case 1142: + case 114: + case 123: + case 113: + case 121: + return 121; + case 111: + return staNo; + default: + return 110; + } + } + } + + // 鑾峰彇褰撳墠灏忚溅鏈璧扮殑璺嚎闆嗗悎 + public static List<Integer> getRoute(Integer groupStart,Integer groupEnd){ + boolean sign = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(groupStart) < TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(groupEnd); + List<Integer> result = new ArrayList<>(); + List<Integer> groupRoute = new ArrayList<>(); + if (sign){ + groupRoute = TRACK_POSITION_POSITIVE_SEQUENCE; + }else { + groupRoute = TRACK_POSITION_REVERSE_SEQUENCE; + } + if (groupRoute.contains(groupStart) && groupRoute.contains(groupEnd)) { + sign = false; + for (Integer route : groupRoute) { + if (route.equals(groupStart)){ + sign=true; + } + if (route.equals(groupEnd)){ + result.add(route); + break; + } + if (sign){ + result.add(route); + } + } + }else { + return null; + } + return result; + } + + /* + * 鑾峰彇鏈�杩滅珯鐐� + * */ + public static Integer RouteIndexFarMas(Integer a,Integer b,Integer c,Integer d){ + int ia = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(a); + int ib = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(b); + int ic = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(c); + int id = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(d); + if (id==0){ + if (ia>ib){ + if (ia>ic){ + return a; + }else { + return c; + } + }else { + if (ib>ic){ + return b; + }else { + return c; + } + } + }else { + if (ia<ib){ + if (ia<ic){ + return a; + }else { + return c; + } + }else { + if (ib<ic){ + return b; + }else { + return c; + } + } + } + } + + /* + * 鑾峰彇鏈�杩滅珯鐐� + * a:褰撳墠浣嶇疆 + * b:寮�濮嬩綅缃� + * c:缁撴潫浣嶇疆 + * d:閿佸紑濮嬩綅缃� + * */ + public static Integer RouteIndexFarMasNew(Integer a,Integer b,Integer c,Integer d){ + int ia = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(a); + int ib = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(b); + int ic = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(c); + int id = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(d); + if (id==0){ + if (ia>ib){ + if (ia>ic){ + return a; + }else { + return c; + } + }else { + if (ib>ic){ + return b; + }else { + return c; + } + } + }else { + if (ia<ib){ + if (ia<ic){ + return a; + }else { + return c; + } + }else { + if (ib<ic){ + return b; + }else { + return c; + } + } + } + } + + public static Integer[] RouteIndexFarArr(Integer a,Integer b,Integer c,Integer d){ + int ia = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(a); + int ib = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(b); + int ic = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(c); + int id = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(d); + return new Integer[]{ia,ib,ic,id}; + } + + /* + * a 灏忚溅褰撳墠浣嶇疆 + * b 灏忚溅浠诲姟寮�濮嬩綅缃� + * c 灏忚溅浠诲姟缁撴潫浣嶇疆 + * d 灏忚溅鍒濆浣嶇疆 + * 鑾峰彇鏈�澶ц矾寰勫樊鍊� + * */ + public static List<Integer> RouteMapCurrentFar(Integer a,Integer b,Integer c,Integer d){ + Integer farStn = RouteIndexFarMas(a, b, c, d); + return getRouteIntersection(TRACK_POSITION_POSITIVE_SEQUENCE,getRoute(farStn, d), RouteCollectCountType.DIFFERENCESET); + } + + public static List<Integer> RouteMapCurrentFar(Integer farStn,Integer d){ + return getRouteIntersection(TRACK_POSITION_POSITIVE_SEQUENCE,getRoute(farStn, d), RouteCollectCountType.DIFFERENCESET); + } + + /* + * 鍙︿竴鍙板皬杞︽渶杩滀綅缃� + * */ + public static Integer RouteMapOtherFarStnNo(List<Integer> routeDIFF,Integer d){ + int id = TRACK_POSITION_POSITIVE_SEQUENCE.indexOf(d); + if (id==0){ + return routeDIFF.get(0); + }else { + int size = routeDIFF.size(); + return routeDIFF.get(size-1); + } + } + + //鏄惁鏈変氦闆� + public static boolean getRouteBoolean(List<Integer> groupCurrent,List<Integer> groupOther){ + for (Integer positionCurrent : groupCurrent){ + for (Integer positionOther : groupOther){ + if (positionCurrent.equals(positionOther)){ + return true; + } + } + } + return false; + } + + //闆嗗悎杩愮畻 + public static List<Integer> getRouteIntersection(List<Integer> groupCurrent, List<Integer> groupOther, RouteCollectCountType routeCollectCountType){ + switch (routeCollectCountType){ + case INTERSECTION: + //浜ら泦 + return groupCurrent.stream().filter(item -> groupOther.contains(item)).collect(toList()); + case DIFFERENCESET: + //宸泦 + return groupCurrent.stream().filter(item -> !groupOther.contains(item)).collect(toList()); + case UNION: + //骞堕泦 + groupCurrent.addAll(groupOther); + return groupCurrent; + case DEDUPLICATIONUNION: + //鍘婚噸骞堕泦 + groupCurrent.addAll(groupOther); + return groupCurrent.stream().distinct().collect(toList()); + default: + return null; + } + } + + /* + * a 灏忚溅褰撳墠浣嶇疆 + * b 灏忚溅浠诲姟寮�濮嬩綅缃� + * c 灏忚溅浠诲姟缁撴潫浣嶇疆 + * sign 鍙︿竴涓皬杞︾┖闂叉爣璁� + * */ + public static boolean RouteAutoBoolean(Integer a,Integer b,Integer c,Integer aa,Integer bb,Integer cc,boolean idleOther){ + List<Integer> routeCurrent = getRouteIntersection(getRoute(a, c), getRoute(b, c), RouteCollectCountType.DEDUPLICATIONUNION);//骞堕泦 + List<Integer> routeOther = getRouteIntersection(getRoute(aa, cc), getRoute(bb, cc), RouteCollectCountType.DEDUPLICATIONUNION);// + return !getRouteBoolean(routeCurrent, routeOther); //鏄惁鏈変氦闆� + } + + public static List<Integer> RouteAutoBoolean(Integer a,Integer b,Integer c){ + return getRouteIntersection(getRoute(a, c), getRoute(b, c), RouteCollectCountType.DEDUPLICATIONUNION); + } + + + + public static void main(String[] arge){ + List<Integer> routeCurrent = getRoute(104, 119); //鑾峰彇褰撳墠灏忚溅璺緞 + List<Integer> routeOther = getRoute(117, 118); //鑾峰彇鍏跺畠灏忚溅璺緞 + System.out.println("褰撳墠灏忚溅璺緞:\t"+routeCurrent); + System.out.println("鍏跺畠灏忚溅璺緞:\t"+routeOther); + + boolean routeBoolean = getRouteBoolean(routeCurrent, routeOther); //鏄惁鏈変氦闆� + System.out.println("鏄惁鏈変氦闆�:\t"+routeBoolean); + + List<Integer> routeIntersection = getRouteIntersection(routeCurrent, routeOther, RouteCollectCountType.INTERSECTION);//浜ら泦 + System.out.println("璺緞浜ら泦锛歕t"+routeIntersection); + + List<Integer> routeIntersection1 = getRouteIntersection(routeCurrent, routeOther, RouteCollectCountType.DIFFERENCESET);//宸泦 + System.out.println("璺緞宸泦锛歕t"+routeIntersection1); + + List<Integer> routeIntersection2 = getRouteIntersection(routeCurrent, routeOther, RouteCollectCountType.UNION);//骞堕泦 + System.out.println("璺緞骞堕泦锛歕t"+routeIntersection2); + + List<Integer> routeIntersection3 = getRouteIntersection(routeCurrent, routeOther, RouteCollectCountType.DEDUPLICATIONUNION);//鍘婚噸骞堕泦 + System.out.println("璺緞鍘婚噸骞堕泦锛歕t"+routeIntersection3); + + System.out.println(RouteAutoBoolean(101,104,119,114,116,120,true)); + + List<Integer> routeDIFF = RouteMapCurrentFar(114, 104, 119, 117); + System.out.println("褰撳墠璺緞鏈�澶ч泦鍚堬細\t"+ routeDIFF); + + Integer routeFarOther= RouteMapOtherFarStnNo(routeDIFF,117); + System.out.println("鍙︿竴鍙板皬杞︽渶杩滅珯鐐癸細\t"+routeFarOther); + + + Integer[] integers = RouteIndexFarArr(114, 104, 119, 101); + for (Integer integer:integers){ + System.out.println(integer); + } + } + + public static short RgvPosSta(Integer rgvId,Short posId){ + switch (rgvId){ + case 1: + return RgvPosStaOne(posId); + case 2: + return RgvPosStaTwo(posId); + default: + return 1; + } + } + + public static short RgvPosStaOne(Short posId){ + switch (posId.intValue()){ + case 1: + case 2: + return 102; + case 3: + case 4: + return 122; + case 5: + case 6: + return 105; + case 7: + case 8: + case 9: + return 118; + case 10: + case 11: + return 119; + case 12: + case 13: + case 14: + return 110; + case 15: + return 120; + case 16: + case 17: + case 18: + return 111; + case 19: + return 121; + case 20: + case 21: + case 22: + return 113; + case 23: + case 24: + return 123; + case 25: + return 114; + case 26: + case 27: + return 1142; + case 28: + return 116; + default: + return 1142; + } + } + + public static short RgvPosStaTwo(Short posId){ + switch (posId.intValue()){ + case 1: + return 116; + case 28: + case 2: + return 1142; + case 3: + case 4: + return 114; + case 5: + return 123; + case 6: + case 7: + case 8: + return 113; + case 9: + case 10: + return 121; + case 11: + case 12: + case 13: + case 14: + return 120; + case 15: + case 16: + return 110; + case 17: + case 18: + return 119; + case 19: + return 108; + case 20: + case 21: + case 22: + return 107; + case 23: + case 24: + return 105; + case 25: + case 26: + case 27: + return 104; + default: + return 104; + } + } + + public static Integer CrnStaEnd(Integer endSta,Integer souSta) { + switch (souSta) { + case 100: + case 103: + case 106: + case 109: + case 112: + case 115: + return souSta + 1; + default: + return endSta; + } + } + +} diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java index 1e228d1..227e183 100644 --- a/src/main/java/com/zy/core/MainProcess.java +++ b/src/main/java/com/zy/core/MainProcess.java @@ -26,6 +26,7 @@ private Thread thread; // 棰戠巼 private int i = 0; + private int k = 0; /** * =====>> 寮�濮嬪伐浣� @@ -56,17 +57,28 @@ // 鍫嗗灈鏈哄紓甯镐俊鎭褰� mainService.recCrnErr(); - // 鍏ュ簱 ===>> 绌烘爤鏉垮垵濮嬪寲鍏ュ簱,鍙夎溅鍏ュ簱绔欐斁璐� -// mainService.storeEmptyPlt(); -// mainService.outOfDevp(); - // 鍏朵粬 ===>> // 鍏ュ嚭搴撴ā寮忓垏鎹㈠嚱鏁� i++; - if (i > 1) { -// mainService.ioConvert(); + k++; + if (i<7) { + // RGV ===>> 灏忚溅浠诲姟浣滀笟涓嬪彂 + try{ + boolean rgvIoExecuteSign = mainService.rgvIoExecute(i); + if (rgvIoExecuteSign){ + k = 0; + } else if (k>7){ + k = 0; + mainService.rgvRunWrkMastEmptyStaAvoidance();//閬胯 + } + }catch (Exception e){ + log.error("RGV ===>> 灏忚溅浠诲姟浣滀笟涓嬪彂寮傚父"+e); + } + }else { i = 0; } + //瀹屾垚灏忚溅浠诲姟 + mainService.rgvCompleteWrkMastSta(); } catch (Exception e) { e.printStackTrace(); diff --git a/src/main/java/com/zy/core/cache/OutputQueue.java b/src/main/java/com/zy/core/cache/OutputQueue.java index 6563854..9a4e678 100644 --- a/src/main/java/com/zy/core/cache/OutputQueue.java +++ b/src/main/java/com/zy/core/cache/OutputQueue.java @@ -17,4 +17,6 @@ public static ArrayBlockingQueue<JSONObject> BARCODE = new ArrayBlockingQueue<>(32); // 纾呯Г杈撳嚭鏃ュ織 public static ArrayBlockingQueue<JSONObject> SCALE = new ArrayBlockingQueue<>(32); + // rgv杈撳嚭鏃ュ織 + 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..f1dbe1e --- /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..5361565 --- /dev/null +++ b/src/main/java/com/zy/core/enums/RgvStatusType.java @@ -0,0 +1,47 @@ +package com.zy.core.enums; + +public enum RgvStatusType { + + NONE(-1, "绂荤嚎"), + IDLE(0, "绌洪棽"), + WORKING(1, "浣滀笟涓�"), + SOS(2, "鎶ヨ"), + FETCHING(11, "鍙栬揣涓�"), + PUTTING(12, "鏀捐揣涓�"), + WAITING(90, "浠诲姟瀹屾垚绛夊緟WCS纭"), + FETCHWAITING(91, "鍙栬揣浠诲姟瀹屾垚绛夊緟WCS纭"), + SOS99(99, "鎶ヨ99"), + SOS100(100, "鍏跺畠100") + ; + + 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..01c0649 --- /dev/null +++ b/src/main/java/com/zy/core/enums/RgvTaskModeType.java @@ -0,0 +1,46 @@ +package com.zy.core.enums; + +public enum RgvTaskModeType { + + NONE(0), // 鏃� + FETCH(1), // 鍙栬揣 锛堢┖鏉匡級鍗曞彇 + PUT(2), // 鏀捐揣 锛堢┖鏉匡級鍗曟斁 + FETCH_PUT(3), // 鍙栨斁璐� + X_MOVE(4), // 绔欎綅绉昏浆 + FETCH_5(5), // 锛堢┖鏉匡級婊″彇 + PUT_6(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..f16c22d --- /dev/null +++ b/src/main/java/com/zy/core/model/RgvSlave.java @@ -0,0 +1,62 @@ +package com.zy.core.model; + +import com.zy.core.Slave; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by vincent on 2020/8/10 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class RgvSlave extends Slave { + + private Integer rack; + + private Integer slot; + + private Integer offset; + + private Boolean demo; + + private Integer devpPlcId; + + // 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; + + } + +} 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..d14bd52 --- /dev/null +++ b/src/main/java/com/zy/core/model/protocol/RgvProtocol.java @@ -0,0 +1,210 @@ +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; + +/** + * Created by vincent on 2020/8/7 + */ +@Data +public class RgvProtocol { + + 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;//0 鏃犵墿锛�1 鏈夌墿 + + /** + * 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; //0 鏃犵墿锛�1 涓�灞傛棤鐗╀簩灞傛湁鐗╋紙鍙兘鎷嗗彔锛� 锛�2涓�灞傛湁鐗╀簩灞傛棤鐗� 锛堝彧鑳芥弧鏀撅級锛�3 1銆�2灞傞兘鏈夌墿 4锛氾紙锛夊彧鍏佽鎷嗙洏 + /////////////////////////////////////////////////////////////////////////////////////// + + /** + * 寮傚父鐮� + */ + 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(){ + //闇�瑕佹牴鎹幇鍦烘敼閫� 鏍规嵁璇诲埌鐨勫�艰幏鍙栧搴旂珯鐐逛綅缃� + if (RgvPos==null) return 0; + return RgvPos.intValue(); + } + +} diff --git a/src/main/java/com/zy/core/thread/RgvThread.java b/src/main/java/com/zy/core/thread/RgvThread.java new file mode 100644 index 0000000..b3d3f21 --- /dev/null +++ b/src/main/java/com/zy/core/thread/RgvThread.java @@ -0,0 +1,465 @@ +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.asrs.utils.RouteUtils; +import com.zy.core.ThreadHandler; +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绾跨▼ + * Created by vincent on 2022/11/29 + */ +@Data +@Slf4j +public class RgvThread implements Runnable, ThreadHandler { + + private SiemensS7Net siemensNet; + private RgvSlave slave; + private RgvProtocol rgvProtocol; + /** + * 宸ヤ綅1澶嶄綅淇″彿 + */ + private boolean resetFlag1 = false; + /** + * 宸ヤ綅2澶嶄綅淇″彿 + */ + private boolean resetFlag2 = false; + + public RgvThread(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.setTaskNo2((short) 0); // 宸ヤ綔鍙� + command.setAckFinish2((short) 1); // 浠诲姟瀹屾垚纭浣� + command.setTaskMode2(RgvTaskModeType.NONE); // 浠诲姟妯″紡 + command.setSourceStaNo2((short)0); // 婧愮珯 + command.setDestinationStaNo2((short)0); // 鐩爣绔� + command.setCommand((short)0); + write(command); + break; + // 鍥炲師鐐� 閬胯 + case 9: + RgvCommand commandAvoidanceXY = (RgvCommand) task.getData(); + if (null == commandAvoidanceXY) { + commandAvoidanceXY = new RgvCommand(); + } + commandAvoidanceXY.setRgvNo(slave.getId()); // RGV缂栧彿 + commandAvoidanceXY.setTaskNo1((short) 32222); // 宸ヤ綔鍙� + commandAvoidanceXY.setAckFinish1((short) 1); // 浠诲姟瀹屾垚纭浣� + commandAvoidanceXY.setTaskMode1(RgvTaskModeType.X_MOVE); // 浠诲姟妯″紡 + commandAvoidanceXY.setSourceStaNo1((short)0); // 婧愮珯 + commandAvoidanceXY.setDestinationStaNo1(slave.getId()==1? (short) 101:(short)116); // 鐩爣绔� + commandAvoidanceXY.setTaskNo2((short) 0); // 宸ヤ綔鍙� + commandAvoidanceXY.setAckFinish2((short) 1); // 浠诲姟瀹屾垚纭浣� + commandAvoidanceXY.setTaskMode2(RgvTaskModeType.X_MOVE); // 浠诲姟妯″紡 + commandAvoidanceXY.setSourceStaNo2((short)0); // 婧愮珯 + commandAvoidanceXY.setDestinationStaNo2(slave.getId()==1? (short) 101:(short)117); // 鐩爣绔� + 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) 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)); + 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(RouteUtils.RgvPosSta(slave.getId(),siemensNet.getByteTransform().TransInt16(result.Content, 10))); + rgvProtocol.setWalkPos(siemensNet.getByteTransform().TransInt16(result.Content, 12)); + rgvProtocol.setTaskNo2(siemensNet.getByteTransform().TransInt16(result.Content, 14)); + rgvProtocol.setStatus2(siemensNet.getByteTransform().TransInt16(result.Content, 16)); + rgvProtocol.setLoaded2(siemensNet.getByteTransform().TransInt16(result.Content, 18)); + rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 20)); + rgvProtocol.setHeart(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()); + basRgv.setLoaded2(rgvProtocol.getLoaded2().intValue()); + 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){} + + } 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[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); + } + + try { + // 鏃ュ織璁板綍 + BasRgvOptService bean = SpringUtils.getBean(BasRgvOptService.class); + BasRgvOpt basRgvOpt = new BasRgvOpt( + command.getTaskNo1().intValue(), + command.getTaskNo2().intValue(), + command.getRgvNo(), + new Date(), + command.getTaskModeType1().toString(), + command.getSourceStaNo1().intValue(), + command.getDestinationStaNo1().intValue(), + command.getSourceStaNo2().intValue(), + command.getDestinationStaNo2().intValue(), + null, + new Date(), + null + ); + bean.insert(basRgvOpt); + } catch (Exception ignore) {} + + 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.20", 0); + + OperateResult result = siemensNet.Write("DB100.0", array); + + if (command.getAckFinish1() == 0) { + short commandFinish = 1; //宸ヤ綅1浠诲姟鍐欏叆 + Thread.sleep(100L); + result = siemensNet.Write("DB100.20", commandFinish); + } + + try { + // 鏃ュ織璁板綍 + BasRgvOptService bean = SpringUtils.getBean(BasRgvOptService.class); + BasRgvOpt basRgvOpt = new BasRgvOpt( + command.getTaskNo1().intValue(), + command.getTaskNo2().intValue(), + command.getRgvNo(), + new Date(), + command.getTaskModeType1().toString(), + command.getSourceStaNo1().intValue(), + command.getDestinationStaNo1().intValue(), + command.getSourceStaNo2().intValue(), + command.getDestinationStaNo2().intValue(), + null, + new Date(), + null + ); + bean.insert(basRgvOpt); + } catch (Exception ignore) {} + + 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); + } + + try { + // 鏃ュ織璁板綍 + BasRgvOptService bean = SpringUtils.getBean(BasRgvOptService.class); + BasRgvOpt basRgvOpt = new BasRgvOpt( + command.getTaskNo1().intValue(), + command.getTaskNo2().intValue(), + command.getRgvNo(), + new Date(), + command.getTaskModeType1().toString(), + command.getSourceStaNo1().intValue(), + command.getDestinationStaNo1().intValue(), + command.getSourceStaNo2().intValue(), + command.getDestinationStaNo2().intValue(), + null, + new Date(), + null + ); + bean.insert(basRgvOpt); + } catch (Exception ignore) {} + + 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); + RgvThread rgvThread = new RgvThread(slave); + rgvThread.connect(); + rgvThread.readStatus(); + System.out.println(JSON.toJSONString(rgvThread.rgvProtocol)); + Thread.sleep(3000L); + + } + +} diff --git a/src/main/resources/mapper/BasRgvMapMapper.xml b/src/main/resources/mapper/BasRgvMapMapper.xml new file mode 100644 index 0000000..623d770 --- /dev/null +++ b/src/main/resources/mapper/BasRgvMapMapper.xml @@ -0,0 +1,17 @@ +<?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.BasRgvMapMapper"> + + <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 --> + <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BasRgvMap"> + <result column="RGV_NO" property="rgvNo" /> + <result column="START_ROUTE" property="startRoute" /> + <result column="END_ROUTE" property="endRoute" /> + <result column="NOW_ROUTE" property="nowRoute" /> + <result column="RGV_STATUS" property="rgvStatus" /> + <result column="LOCK_START_ROUTE" property="lockStartRoute" /> + <result column="LOCK_END_ROUTE" property="lockEndRoute" /> + + </resultMap> + +</mapper> diff --git a/src/main/resources/mapper/BasRgvMapper.xml b/src/main/resources/mapper/BasRgvMapper.xml new file mode 100644 index 0000000..40d2d3d --- /dev/null +++ b/src/main/resources/mapper/BasRgvMapper.xml @@ -0,0 +1,25 @@ +<?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" /> + <result column="LOADED2" property="loaded2" /> + + </resultMap> + +</mapper> diff --git a/src/main/resources/mapper/BasRgvOptMapper.xml b/src/main/resources/mapper/BasRgvOptMapper.xml new file mode 100644 index 0000000..bc1536d --- /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="WRK_NO" property="wrkNo" /> + <result column="RGV_NO" property="rgvNo" /> + <result column="SEND_TIME" property="sendTime" /> + <result column="MODE" property="mode" /> + <result column="SOURCE_ROW" property="sourceRow" /> + <result column="SOURCE_BAY" property="sourceBay" /> + <result column="SOURCE_LEV" property="sourceLev" /> + <result column="SOURCE_STA" property="sourceSta" /> + <result column="POS_ROW" property="posRow" /> + <result column="POS_BAY" property="posBay" /> + <result column="POS_LEV" property="posLev" /> + <result column="POS_STA" property="posSta" /> + <result column="RESPONSE" property="response" /> + <result column="UPDATE_TIME" property="updateTime" /> + <result column="UPDATE_BY" property="updateBy" /> + <result column="MEMO" property="memo" /> + + </resultMap> + +</mapper> diff --git a/src/main/resources/mapper/WrkMastStaMapper.xml b/src/main/resources/mapper/WrkMastStaMapper.xml new file mode 100644 index 0000000..1672011 --- /dev/null +++ b/src/main/resources/mapper/WrkMastStaMapper.xml @@ -0,0 +1,126 @@ +<?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.WrkMastStaMapper"> + + <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 --> + <resultMap id="BaseResultMap" type="com.zy.asrs.entity.WrkMastSta"> + <id column="ID" property="id" /> + <result column="WRK_NO" property="wrkNo" /> + <result column="WRK_START" property="wrkStart" /> + <result column="WRK_END" property="wrkEnd" /> + <result column="STA_START" property="staStart" /> + <result column="STA_END" property="staEnd" /> + <result column="CREATE_TIME" property="createTime" /> + <result column="UPDATE_TIME" property="updateTime" /> + <result column="TYPE" property="type" /> + <result column="WRK_STS" property="wrkSts" /> + <result column="LINE_NUMBER" property="lineNumber" /> + <result column="WRK_TYPE" property="wrkType" /> + <result column="BIGN_TIME" property="bignTime" /> + + </resultMap> + + <select id="selectAllWrkMastStaList" resultMap="BaseResultMap"> + select * from asr_wrk_mast_sta + where 1=1 + and wrk_sts=0 + <if test="type!=null"> + and type = #{type} + </if> + order by line_number,id + </select> + + <select id="selectByWrkNo" resultMap="BaseResultMap"> + select top 1 * from asr_wrk_mast_sta + where 1=1 + and wrk_no = #{workNo} + </select> + + <select id="selectNoInterfere" resultMap="BaseResultMap"> + select top 1 * from asr_wrk_mast_sta + where 1=1 + and (sta_start in + <foreach item="item" collection="staStarts" index="index" separator="," open="(" close=")"> + #{item} + </foreach> + or sta_start = 0 + ) + and (sta_end in + <foreach item="item" collection="staEnds" index="index" separator="," open="(" close=")"> + #{item} + </foreach> + or sta_end = 0 + ) + and wrk_sts=0 + order by line_number,id + </select> + + <select id="selectNoInterfereList" resultMap="BaseResultMap"> + select * from asr_wrk_mast_sta + where 1=1 + and (sta_start in + <foreach item="item" collection="staStarts" index="index" separator="," open="(" close=")"> + #{item} + </foreach> + or sta_start = 0 + ) + and (sta_end in + <foreach item="item" collection="staEnds" index="index" separator="," open="(" close=")"> + #{item} + </foreach> + or sta_end = 0 + ) + and wrk_sts=0 + order by line_number,id + </select> + + <select id="selectAllWrkCount" resultType="Integer"> + select count(1) from asr_wrk_mast_sta + where 1=1 + <if test="type!=null"> + and type = #{type} + </if> + </select> + + <select id="selectAllWrkCount108" resultType="Integer"> + select count(1) from asr_wrk_mast_sta + where 1=1 + and type = 1 + and (sta_end = 108 or sta_start = 108) + </select> + + <select id="selectAllWrkCount108Y" resultType="Integer"> + select count(1) from asr_wrk_mast_sta + where 1=1 +-- and type = 1 + and ((sta_end <= 108 or sta_start <= 108) + or (sta_end = 118 or sta_start = 118) + or (sta_end = 122 or sta_start = 122)) + </select> + + <select id="selectAllWrkStsCount" resultType="Integer"> + select count(1) from asr_wrk_mast_sta + where 1=1 + <if test="type!=null"> + and type = #{type} + </if> + <if test="wrkSts!=null"> + and wrk_sts = #{wrkSts} + </if> + </select> + + <select id="selectAllWrkStsCountWrkMastSta" resultMap="BaseResultMap"> + select top 1 * from asr_wrk_mast_sta + where 1=1 + <if test="type!=null"> + and type = #{type} + </if> + <if test="wrkSts!=null"> + and wrk_sts = #{wrkSts} + </if> + </select> + + + + +</mapper> -- Gitblit v1.9.1