src/main/java/com/zy/asrs/entity/CombParam.java
New file @@ -0,0 +1,46 @@ package com.zy.asrs.entity; import lombok.Data; import java.util.List; /** * Created by vincent on 2020/6/28 */ @Data public class CombParam { // 单据编号 private String orderNo; // 托盘条码 private String barcode; // 库位编号 private String locno; // // 货主 // private int owner; private List<CombMat> combMats; @Data public static class CombMat { // 单据编号 private String orderNo; // 物料编号 private String matnr; // 序列码 private String batch; // 物料数量 private Double anfme; private Double weight; } } src/main/java/com/zy/asrs/entity/MatnrCode.java
New file @@ -0,0 +1,40 @@ package com.zy.asrs.entity; import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.enums.IdType; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import com.baomidou.mybatisplus.annotations.TableName; import java.io.Serializable; @Data @TableName("man_matnr_code") public class MatnrCode implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty(value= "") @TableId(value = "id", type = IdType.AUTO) private Integer id; @ApiModelProperty(value= "") private Integer code; @ApiModelProperty(value= "") private String matnr; public MatnrCode() {} public MatnrCode(Integer code,String matnr) { this.code = code; this.matnr = matnr; } // MatnrCode matnrCode = new MatnrCode( // null, // // null // // ); } src/main/java/com/zy/asrs/entity/WaitPakin.java
@@ -1,8 +1,13 @@ 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 com.core.common.SpringUtils; import com.zy.system.entity.User; import com.zy.system.service.UserService; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -16,82 +21,117 @@ private static final long serialVersionUID = 1L; /** * 物料 */ @ApiModelProperty(value= "商品编号") private String matnr; /** * 物料描述 */ @ApiModelProperty(value= "商品名称") private String maktx; /** * 仓库号 */ @ApiModelProperty(value= "规格") private String lgnum; /** * 仓库号 */ @ApiModelProperty(value= "型号") private String type; /** * 仓库号 */ @ApiModelProperty(value= "条码") private String color; /** * 仓库号 */ @ApiModelProperty(value= "批号") private String supplier; /** * 仓库号 */ @ApiModelProperty(value= "单据编号") private String warehouse; /** * 仓库号 */ @ApiModelProperty(value= "品项数") private String brand; /** * 数量 */ @ApiModelProperty(value= "数量") private Double anfme; /** * 单位 */ @ApiModelProperty(value= "单位") private String altme; /** * 托盘条码 */ @TableId("zpallet") @ApiModelProperty(value= "托盘条码") private String zpallet; /** * 用户ID */ @ApiModelProperty(value= "客户名称") private String bname; @ApiModelProperty(value= "数量") private Double anfme; @ApiModelProperty(value= "库位号") @TableField("loc_no") private Date locNo; private String locNo; @TableId("matnr") @ApiModelProperty(value= "商品编号") private String matnr; @ApiModelProperty(value= "商品名称") private String maktx; @TableId("batch") @ApiModelProperty(value= "批号") private String batch; @ApiModelProperty(value= "单据编号") @TableField("order_no") private String orderNo; @ApiModelProperty(value= "规格") private String specs; @ApiModelProperty(value= "型号") private String model; @ApiModelProperty(value= "颜色") private String color; @ApiModelProperty(value= "品牌") private String brand; @ApiModelProperty(value= "单位") private String unit; @ApiModelProperty(value= "单价") private Double price; @ApiModelProperty(value= "sku") private String sku; @ApiModelProperty(value= "单位量") private Double units; @ApiModelProperty(value= "条码") private String barcode; @ApiModelProperty(value= "产地") private String origin; @ApiModelProperty(value= "厂家") private String manu; @ApiModelProperty(value= "生产日期") @TableField("manu_date") private String manuDate; @ApiModelProperty(value= "品项数") @TableField("item_num") private String itemNum; @ApiModelProperty(value= "安全库存量") @TableField("safe_qty") private Double safeQty; @ApiModelProperty(value= "重量") private Double weight; @ApiModelProperty(value= "长度") private Double length; @ApiModelProperty(value= "体积") private Double volume; @ApiModelProperty(value= "三方编码") @TableField("three_code") private String threeCode; @ApiModelProperty(value= "供应商") private String supp; @ApiModelProperty(value= "供应商编码") @TableField("supp_code") private String suppCode; @ApiModelProperty(value= "是否批次 1: 是 0: 否 ") @TableField("be_batch") private Integer beBatch; @ApiModelProperty(value= "保质期") @TableField("dead_time") private String deadTime; @ApiModelProperty(value= "预警天数") @TableField("dead_warn") private Integer deadWarn; @ApiModelProperty(value= "制购 1: 制造 2: 采购 3: 外协 ") private Integer source; @ApiModelProperty(value= "要求检验 1: 是 0: 否 ") private Integer inspect; @ApiModelProperty(value= "危险品 1: 是 0: 否 ") private Integer danger; @ApiModelProperty(value= "状态") private String status; @@ -100,39 +140,124 @@ @TableField("io_status") private String ioStatus; /** * 备注 */ @ApiModelProperty(value= "备注") private String memo; /** * 修改时间 */ @ApiModelProperty(value= "修改时间") @TableField("modi_time") private Date modiTime; /** * 修改人员 */ @ApiModelProperty(value= "修改人员") @TableField("modi_user") private Long modiUser; /** * 添加时间 */ @ApiModelProperty(value= "添加时间") @TableField("appe_time") private Date appeTime; /** * 创建者 */ @ApiModelProperty(value= "创建者") @TableField("appe_user") private Long appeUser; @ApiModelProperty(value= "备注") private String memo; /** * 拥有者 */ @ApiModelProperty(value= "拥有者 1: 杰克 ") private Integer owner; /** * 货物形态:0:代采、1:仓储 */ @ApiModelProperty(value= "货物形态:0:代采、1:仓储") private Integer payment; /** * uuid时间戳 */ @ApiModelProperty(value= "uuid") @TableId(value = "uuid", type = IdType.ID_WORKER_STR) @TableField("uuid") private String uuid; public String getUserName$(){ UserService service = SpringUtils.getBean(UserService.class); User user = service.selectById(this.modiUser); if (!Cools.isEmpty(user)){ return String.valueOf(user.getUsername()); } return null; } // public String getOwner$(){ // LocOwnerService service = SpringUtils.getBean(LocOwnerService.class); // LocOwner locOwner = service.selectById(this.owner); // if (!Cools.isEmpty(locOwner)){ // return String.valueOf(locOwner.getOwner()); // } // return null; // } public String getPayment$(){ if (null == this.payment){ return null; } switch (this.payment){ case 1: return "仓储"; case 0: return "代采"; default: return String.valueOf(this.payment); } } public String getBeBatch$(){ if (null == this.beBatch){ return null; } switch (this.beBatch){ case 1: return "是"; case 0: return "否"; default: return String.valueOf(this.beBatch); } } public String getSource$(){ if (null == this.source){ return null; } switch (this.source){ case 1: return "制造"; case 2: return "采购"; case 3: return "外协"; default: return String.valueOf(this.source); } } public String getInspect$(){ if (null == this.inspect){ return null; } switch (this.inspect){ case 1: return "是"; case 0: return "否"; default: return String.valueOf(this.inspect); } } public String getDanger$(){ if (null == this.danger){ return null; } switch (this.danger){ case 1: return "是"; case 0: return "否"; default: return String.valueOf(this.danger); } } public String getModiTime$(){ if (Cools.isEmpty(this.modiTime)){ @@ -148,4 +273,7 @@ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime); } // public void sync(Object source) { // Synchro.Copy(source, this); // } } src/main/java/com/zy/asrs/entity/WrkMastSta.java
@@ -130,6 +130,26 @@ @ApiModelProperty(value= "") @TableField("matnr2") private Integer matnr2; @ApiModelProperty(value= "") @TableField("type2") private Integer type2; @ApiModelProperty(value= "") @TableField("batch") private String batch; @ApiModelProperty(value= "") @TableField("batch2") private String batch2; @ApiModelProperty(value= "") @TableField("anfme") private Integer anfme; @ApiModelProperty(value= "") @TableField("anfme2") private Integer anfme2; public WrkMastSta() {} 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,Integer wrkCrn) { src/main/java/com/zy/asrs/mapper/MatnrCodeMapper.java
New file @@ -0,0 +1,13 @@ package com.zy.asrs.mapper; import com.zy.asrs.entity.MatnrCode; import com.baomidou.mybatisplus.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Repository; @Mapper @Repository public interface MatnrCodeMapper extends BaseMapper<MatnrCode> { MatnrCode selectByCode(Integer code); } src/main/java/com/zy/asrs/service/MatnrCodeService.java
New file @@ -0,0 +1,9 @@ package com.zy.asrs.service; import com.zy.asrs.entity.MatnrCode; import com.baomidou.mybatisplus.service.IService; public interface MatnrCodeService extends IService<MatnrCode> { MatnrCode selectByCode(Integer code); } src/main/java/com/zy/asrs/service/WrkMastService.java
@@ -21,4 +21,5 @@ List<WrkMast> selectLaneWrkMast(Integer lane, Boolean pakIn);//查询指定巷道任务 WrkMast selectByworkNo(Short workNo); WrkMast selectByworkNo(Integer workNo); } src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -92,6 +92,8 @@ private EmptyBarrelInService emptyBarrelInService; @Autowired private WrkMastStaService wrkMastStaService; @Autowired private MatnrCodeService matnrCodeService; @Value("${wms.url}") private String wmsUrl; @@ -545,7 +547,7 @@ } if (crnStn.getStaNo() == 1016 || crnStn.getStaNo() == 1019) { if (crnStn.getStaNo() > 1013) { // 更新工作档状态为13.RGV搬运中 wrkMast.setWrkSts(13L); }else { @@ -1328,8 +1330,9 @@ // 站点条件判断 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isEmptyMk() && (staProtocol.getWorkNo() >= 9990 && staProtocol.getWorkNo() <= 9999) && staProtocol.isPakMk()) { && (staProtocol.isEmptyMk() || staProtocol.getStaNo() == 9999) // && (staProtocol.getWorkNo() >= 9990 && staProtocol.getWorkNo() <= 9999) && staProtocol.isPakMk()) { List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() .eq("sta_no", emptyInSta.getStaNo()) .eq("io_type", 10) @@ -2489,7 +2492,7 @@ } } public synchronized void RGVTaskPut(){ public synchronized void RGVTaskCreate(){ for (RgvSlave rgvSlave:slaveProperties.getRgv()){ ZyRgvThread rgvThread = (ZyRgvThread)SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); @@ -2507,8 +2510,14 @@ short sta1 = 0; short souSta2 = 0; short sta2 = 0; short matnr = 0; short matnr2 = 0; Integer matnr = 0; Integer matnr2 = 0; String batch = ""; String batch2 = ""; short type = 0; short type2 = 0; short anfme = 0; short anfme2 = 0; //工位一任务 for (RgvSlave.Sta inStn : rgvSlave.getInStn()){ @@ -2520,78 +2529,57 @@ } else { staProtocol = staProtocol.clone(); } if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()){ if (staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() <9900){ if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk() && staProtocol.getWorkNo()>0){ WrkMast wrkMast = wrkMastService.selectByworkNo(staProtocol.getWorkNo()); if (Cools.isEmpty(wrkMast)){ log.error("未找到工作档"); continue; } workNo1 = wrkMast.getWrkNo(); souSta1 = Utils.getRgvStaNo(rgvSlave.getId(),wrkMast.getSourceStaNo()); souSta1 = Utils.getRgvStaNo(rgvSlave.getId(),staProtocol.getSiteId()); sta1 = Utils.getRgvEndStaNo(rgvSlave.getId(),wrkMast.getStaNo()); work1 = true; devpThread.setPakMk(inStn.getSourceStaNo(),false); break; } workNo1 = workNo++; souSta1 = Utils.getRgvStaNo(rgvSlave.getId(),inStn.getSourceStaNo()); if (inStn.getSourceStaNo() == 4007 && staProtocol.getTongType() == 1){ sta1 = Utils.getRgvStaNo(rgvSlave.getId(),2103); } else if (inStn.getSourceStaNo() == 4007 && staProtocol.getTongType() == 2) { sta1 = Utils.getRgvStaNo(rgvSlave.getId(),2002); }else { sta1 = Utils.getRgvStaNo(rgvSlave.getId(),inStn.getStaNo()); } work1 = true; if (inStn.getSourcePlcId() == 4){ matnr = staProtocol.getMatnr(); } devpThread.setPakMk(inStn.getSourceStaNo(),false); break; } } //工位二任务 for (RgvSlave.Sta inStn : rgvSlave.getInStn()){ if (souSta1 == inStn.getSourceStaNo()){ continue; } SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, inStn.getSourcePlcId()); StaProtocol staProtocol = devpThread.getStation().get(inStn.getSourceStaNo()); if (staProtocol == null) { break; // continue; } else { staProtocol = staProtocol.clone(); } if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()&& staProtocol.isPakMk()){ if (staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() <9900){ WrkMast wrkMast = wrkMastService.selectByworkNo(staProtocol.getWorkNo()); if (Cools.isEmpty(wrkMast)){ log.error("未找到工作档"); continue; } workNo2 = wrkMast.getWrkNo(); souSta2 = inStn.getSourceStaNo().shortValue(); sta2 = Utils.getRgvEndStaNo(rgvSlave.getId(),wrkMast.getStaNo()); work2 = true; devpThread.setPakMk(inStn.getSourceStaNo(),false); if (rgvSlave.getId() != 3){ //工位二任务 for (RgvSlave.Sta inStn : rgvSlave.getInStn()){ if (souSta1 == inStn.getSourceStaNo()){ continue; } SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, inStn.getSourcePlcId()); StaProtocol staProtocol = devpThread.getStation().get(inStn.getSourceStaNo()); if (staProtocol == null) { break; // continue; } else { staProtocol = staProtocol.clone(); } workNo2 = workNo++; souSta2 = inStn.getSourceStaNo().shortValue(); sta2 = inStn.getStaNo().shortValue(); work2 = true; if (inStn.getSourcePlcId() == 4){ matnr2 = staProtocol.getMatnr(); } devpThread.setPakMk(inStn.getSourceStaNo(),false); break; if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()&& staProtocol.isPakMk() && staProtocol.getWorkNo()>0){ WrkMast wrkMast = wrkMastService.selectByworkNo(staProtocol.getWorkNo()); if (Cools.isEmpty(wrkMast)){ log.error("未找到工作档"); continue; } workNo2 = wrkMast.getWrkNo(); souSta2 = inStn.getSourceStaNo().shortValue(); sta2 = Utils.getRgvEndStaNo(rgvSlave.getId(),wrkMast.getStaNo()); work2 = true; devpThread.setPakMk(inStn.getSourceStaNo(),false); break; } } } if (work1 || work2){ //rgv任务下发-------------------------------------------------------------- @@ -2611,6 +2599,13 @@ command.setMatnr(matnr); command.setMatnr2(matnr2); command.setBatch(batch); command.setBatch2(batch2); command.setAnfme(anfme); command.setAnfme2(anfme2); command.setType(type); command.setType2(type2); if (workNo1 == 0 && workNo2 !=0){ command.setTaskMode(RgvTaskModeType.FETCH_PUT2); // 任务模式: 2取放货 @@ -2636,6 +2631,9 @@ public synchronized void RGVTaskOver() { for (RgvSlave rgvSlave:slaveProperties.getRgv()) { if (rgvSlave.getId() ==2){ continue; } ZyRgvThread rgvThread = (ZyRgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); if (Cools.isEmpty(rgvProtocol)){ @@ -2646,12 +2644,84 @@ //工位一任务完成 if (rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getStatusType() == RgvStatusType.WAITING && rgvProtocol.getLoaded1() == 0) { try { Wrapper<WrkMastSta> wrkMastStaWrapper = new EntityWrapper<WrkMastSta>().eq("wrk_crn", rgvProtocol.getRgvNo()).eq("wrk_no", rgvProtocol.getTaskNo1()); WrkMastSta wrkMastSta1 = wrkMastStaService.selectOne(wrkMastStaWrapper); if (Cools.isEmpty(wrkMastSta1)){ log.error("完成{}号车工位一任务未找到对应rgv任务,{}",rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo1()); }else { if (wrkMastSta1.getWrkType() == 8 ){ wrkMastSta1.setWrkSts(3); wrkMastStaService.update(wrkMastSta1,wrkMastStaWrapper); } } }catch (Exception e){ log.error("完成{}号车工位一任务出错!!!!!!!!!!!!!!!!,{}",rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo1()); continue; } MessageQueue.offer(SlaveType.Rgv, rgvSlave.getId(), new Task(3,new RgvCommand())); log.info("{}号rgv工位一工作完成复位,工作号:{}",rgvSlave.getId(),rgvProtocol.getTaskNo1()); } //工位二任务完成 if (rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getStatusType() == RgvStatusType.WAITING2 && rgvProtocol.getLoaded2() == 0) { try { Wrapper<WrkMastSta> wrkMastStaWrapper = new EntityWrapper<WrkMastSta>().eq("wrk_crn", rgvProtocol.getRgvNo()).eq("wrk_no", rgvProtocol.getTaskNo2()); WrkMastSta wrkMastSta1 = wrkMastStaService.selectOne(wrkMastStaWrapper); if (Cools.isEmpty(wrkMastSta1)){ log.error("完成{}号车工位二任务未找到对应工作任务,{}",rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo2()); }else { if (wrkMastSta1.getWrkType() == 9 ){ wrkMastSta1.setWrkSts(3); wrkMastStaService.update(wrkMastSta1,wrkMastStaWrapper); }else if (wrkMastSta1.getWrkType() == 1){ wrkMastSta1.setWrkSts(3); wrkMastStaService.update(wrkMastSta1,wrkMastStaWrapper); } } }catch (Exception e){ log.error("完成{}号车工位一任务出错!!!!!!!!!!!!!!!!,{}",rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo1()); continue; } MessageQueue.offer(SlaveType.Rgv, rgvSlave.getId(), new Task(4,new RgvCommand())); log.info("{}号rgv工位二工作完成复位,工作号:{}",rgvSlave.getId(),rgvProtocol.getTaskNo2()); } } } //二号rgv输送线命令下发 public synchronized void RGVTaskput() { for (RgvSlave rgvSlave:slaveProperties.getRgv()) { if (rgvSlave.getId() ==2){ continue; } ZyRgvThread rgvThread = (ZyRgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); if (Cools.isEmpty(rgvProtocol)){ continue; }else { rgvProtocol = rgvProtocol.clone(); } //工位一任务完成 if (rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getStatusType() == RgvStatusType.OUTSTN1 && rgvProtocol.getLoaded1() == 1) { WrkMastSta wrkMastSta = wrkMastStaService.selectByRgvNoandWrkNo(rgvProtocol.getRgvNo(), rgvProtocol.getTaskNo1()); WrkMast wrkMast = wrkMastService.selectByworkNo(rgvProtocol.getTaskNo1()); if (Cools.isEmpty(wrkMastSta)){ log.error("未查询到rgv工作任务,rgv编号{},工作号{}",rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo1()); continue; } for (RgvSlave.Sta outStn :rgvSlave.getOutStn()){ if (!Objects.equals(Utils.getStaNo(rgvSlave.getId(), wrkMastSta.getWrkEnd()), outStn.getStaNo())){ continue; } SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, outStn.getStaPlcId()); StaProtocol staProtocol = devpThread.getStation().get(outStn.getStaNo()); if (staProtocol == null) { @@ -2659,29 +2729,26 @@ } else { staProtocol = staProtocol.clone(); } if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isPakMk()){ if (staProtocol.isAutoing() && !staProtocol.isLoading() && staProtocol.isPakMk()){ staProtocol.setWorkNo(wrkMastSta.getWrkNo().shortValue()); staProtocol.setStaNo(wrkMastSta.getWrkEnd().shortValue()); if (!MessageQueue.offer(SlaveType.Devp, outStn.getStaPlcId(), new Task(2, staProtocol))) { continue; } staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); MessageQueue.offer(SlaveType.Devp, outStn.getStaPlcId(), new Task(2, staProtocol)); } } MessageQueue.offer(SlaveType.Rgv, rgvSlave.getId(), new Task(3,new RgvCommand())); log.info("{}号rgv工位一工作完成复位,工作号:{}",rgvSlave.getId(),wrkMastSta.getWrkNo()); } //工位二任务完成 if (rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getStatusType() == RgvStatusType.WAITING2 && rgvProtocol.getLoaded1() == 0) { WrkMastSta wrkMastSta = wrkMastStaService.selectByRgvNoandWrkNo2(rgvProtocol.getRgvNo(), rgvProtocol.getTaskNo2()); if (rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getStatusType() == RgvStatusType.OUTSTN8 && rgvProtocol.getLoaded2() == 1) { WrkMastSta wrkMastSta = wrkMastStaService.selectByRgvNoandWrkNo(rgvProtocol.getRgvNo(), rgvProtocol.getTaskNo2()); WrkMast wrkMast = wrkMastService.selectByworkNo(rgvProtocol.getTaskNo2()); if (Cools.isEmpty(wrkMastSta)){ log.error("未查询到rgv工作任务,rgv编号{},工作号{}",rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo2()); continue; } for (RgvSlave.Sta outStn :rgvSlave.getOutStn()){ if (wrkMastSta.getStaEnd() != outStn.getStaNo()){ continue; } SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, outStn.getStaPlcId()); StaProtocol staProtocol = devpThread.getStation().get(outStn.getStaNo()); if (staProtocol == null) { @@ -2689,18 +2756,12 @@ } else { staProtocol = staProtocol.clone(); } if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isPakMk()){ // staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); //// staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); // if (!MessageQueue.offer(SlaveType.Devp, outStn.getStaPlcId(), new Task(2, staProtocol))) { // continue; // } if (staProtocol.isAutoing() && !staProtocol.isLoading() && staProtocol.isPakMk()){ staProtocol.setWorkNo(wrkMastSta.getWrkNo2().shortValue()); staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); MessageQueue.offer(SlaveType.Devp, outStn.getStaPlcId(), new Task(2, staProtocol)); } } MessageQueue.offer(SlaveType.Rgv, rgvSlave.getId(), new Task(4,new RgvCommand())); log.info("{}号rgv工位二工作完成复位,工作号:{}",rgvSlave.getId(),wrkMastSta.getWrkNo2()); } } } @@ -2738,8 +2799,12 @@ if (outStn.getStaPlcId() == 2){ if (staProtocol.isAutoing() && !staProtocol.isLoading() && staProtocol.isPakMk()){ staProtocol.setWorkNo(wrkMastSta.getWrkNo().shortValue()); staProtocol.setStaNo((short) 2106); staProtocol.setMatnr(wrkMastSta.getMatnr1().shortValue()); if (wrkMastSta.getType() == 1){ staProtocol.setStaNo((short) 9999); }else { staProtocol.setStaNo((short) 2106); } staProtocol.setMatnr(wrkMastSta.getMatnr1()); if (!MessageQueue.offer(SlaveType.Devp, outStn.getStaPlcId(), new Task(2, staProtocol))) { continue; @@ -2751,8 +2816,8 @@ } //工位二任务完成 if (rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getStatusType() == RgvStatusType.OUTSTN8 && rgvProtocol.getLoaded1() == 1) { WrkMastSta wrkMastSta = wrkMastStaService.selectByRgvNoandWrkNo(rgvProtocol.getRgvNo(), rgvProtocol.getTaskNo2()); if (rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getStatusType() == RgvStatusType.OUTSTN8 && rgvProtocol.getLoaded2() == 1) { WrkMastSta wrkMastSta = wrkMastStaService.selectByRgvNoandWrkNo2(rgvProtocol.getRgvNo(), rgvProtocol.getTaskNo2()); if (Cools.isEmpty(wrkMastSta)){ log.error("未查询到rgv工作任务,rgv编号{},工作号{}",rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo2()); continue; @@ -2768,8 +2833,13 @@ if (outStn.getStaPlcId() == 2){ if (staProtocol.isAutoing() && !staProtocol.isLoading() && staProtocol.isPakMk()){ staProtocol.setWorkNo(wrkMastSta.getWrkNo2().shortValue()); staProtocol.setStaNo((short) 2106); staProtocol.setMatnr(wrkMastSta.getMatnr2().shortValue()); if (wrkMastSta.getType2() == 1){ staProtocol.setStaNo((short) 9999); }else { staProtocol.setStaNo((short) 2106); } staProtocol.setMatnr(wrkMastSta.getMatnr2()); if (!MessageQueue.offer(SlaveType.Devp, outStn.getStaPlcId(), new Task(2, staProtocol))) { continue; @@ -2797,12 +2867,50 @@ //工位一任务完成 if (rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getStatusType() == RgvStatusType.WAITING && rgvProtocol.getLoaded1() == 0) { try { Wrapper<WrkMastSta> wrkMastStaWrapper = new EntityWrapper<WrkMastSta>().eq("wrk_crn", rgvProtocol.getRgvNo()).eq("wrk_no", rgvProtocol.getTaskNo1()); WrkMastSta wrkMastSta1 = wrkMastStaService.selectOne(wrkMastStaWrapper); if (Cools.isEmpty(wrkMastSta1)){ log.error("完成{}号车工位一任务未找到对应rgv任务,{}",rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo1()); }else { if (wrkMastSta1.getWrkType() == 8 ){ wrkMastSta1.setWrkSts(3); wrkMastStaService.update(wrkMastSta1,wrkMastStaWrapper); } } }catch (Exception e){ log.error("完成{}号车工位一任务出错!!!!!!!!!!!!!!!!,{}",rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo1()); continue; } MessageQueue.offer(SlaveType.Rgv, rgvSlave.getId(), new Task(3,new RgvCommand())); log.info("{}号rgv工位一工作完成复位,工作号:{}",rgvSlave.getId(),rgvProtocol.getTaskNo1()); } //工位二任务完成 if (rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getStatusType() == RgvStatusType.WAITING2 && rgvProtocol.getLoaded1() == 0) { if (rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getStatusType() == RgvStatusType.WAITING2 && rgvProtocol.getLoaded2() == 0) { try { Wrapper<WrkMastSta> wrkMastStaWrapper = new EntityWrapper<WrkMastSta>().eq("wrk_crn", rgvProtocol.getRgvNo()).eq("wrk_no", rgvProtocol.getTaskNo2()); WrkMastSta wrkMastSta1 = wrkMastStaService.selectOne(wrkMastStaWrapper); if (Cools.isEmpty(wrkMastSta1)){ log.error("完成{}号车工位二任务未找到对应工作任务,{}",rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo2()); }else { if (wrkMastSta1.getWrkType() == 9 ){ wrkMastSta1.setWrkSts(3); wrkMastStaService.update(wrkMastSta1,wrkMastStaWrapper); }else if (wrkMastSta1.getWrkType() == 1){ wrkMastSta1.setWrkSts(3); wrkMastStaService.update(wrkMastSta1,wrkMastStaWrapper); } } }catch (Exception e){ log.error("完成{}号车工位一任务出错!!!!!!!!!!!!!!!!,{}",rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo1()); continue; } MessageQueue.offer(SlaveType.Rgv, rgvSlave.getId(), new Task(4,new RgvCommand())); @@ -2832,7 +2940,185 @@ wrkMastSta.setWrkType(command.getTaskMode().intValue()); wrkMastSta.setMatnr1(command.getMatnr().intValue()); wrkMastSta.setMatnr2(command.getMatnr2().intValue()); wrkMastSta.setType(command.getType().intValue()); wrkMastSta.setType2(command.getType2().intValue()); wrkMastSta.setBatch(command.getBatch()); wrkMastSta.setBatch2(command.getBatch2()); wrkMastSta.setAnfme(command.getAnfme().intValue()); wrkMastSta.setAnfme2(command.getAnfme2().intValue()); return wrkMastStaService.insert(wrkMastSta); } //二期组托 public synchronized void generateStoreWrkFile2() { // 根据输送线plc遍历 for (DevpSlave devp : slaveProperties.getDevp()) { if (devp.getId() != 2){ continue; } // 遍历入库口 for (DevpSlave.Sta inSta : devp.getInSta()) { // 获取条码扫描仪信息 BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode()); if (barcodeThread == null) { continue; } String barcode = barcodeThread.getBarcode(); // 获取入库站信息 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); if (staProtocol == null) { continue; } else { staProtocol = staProtocol.clone(); } if (!Cools.isEmpty(barcode)) { log.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode); if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) { continue; } } else { // led 异常显示 // LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); // if (ledThread != null) { // String errorMsg = "扫码失败,请重试"; // MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg)); // } continue; } // 判断是否满足入库条件 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && !staProtocol.isEmptyMk() && staProtocol.getStaNo() != 9999 && staProtocol.isPakMk()) { if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode)) { log.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode); //条码为空或者不符合,退库到 LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); if (ledThread != null) { String errorMsg = "扫码失败,请重试"; MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg)); } continue; } // 判断重复工作档 WrkMast wrkMast = new WrkMast(); if (barcode.length() == 8) { wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode); if (wrkMast != null) { log.error("工作档中已存在该站状态为( 2.设备上走 )的数据,工作号={}", wrkMast.getWrkNo()); continue; } } // 获取入库通知档 List<WaitPakin> waitPakins = waitPakinMapper.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", barcode).eq("io_status", "N")); if (waitPakins.isEmpty()) { try { CreateComb(barcode,staProtocol.getMatnr().intValue(),staProtocol.getWorkNo().intValue()); }catch (IOException e) { throw new CoolException(e); } }else { try { LocTypeDto locTypeDto = new LocTypeDto(staProtocol); SearchLocParam param = new SearchLocParam(); param.setBarcode(barcode); param.setIoType(1); param.setSourceStaNo(inSta.getStaNo()); param.setLocType1(locTypeDto.getLocType1()); String response = new HttpHandler.Builder() .setUri(wmsUrl) .setPath("/rpc/pakin/loc/v1") .setJson(JSON.toJSONString(param)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); if (jsonObject.getInteger("code").equals(200)) { StartupDto dto = jsonObject.getObject("data", StartupDto.class); barcodeThread.setBarcode(""); staProtocol.setWorkNo(dto.getWorkNo().shortValue()); staProtocol.setStaNo(dto.getStaNo().shortValue()); devpThread.setPakMk(staProtocol.getSiteId(), false); ledThread.errorReset(); boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); if (!result) { throw new CoolException("更新plc站点信息失败"); } } else if(jsonObject.getInteger("code").equals(700)) { log.error(barcode + "托盘识别异常,请先进行组托!"); // led 异常显示 ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); if (ledThread != null) { String errorMsg = barcode + "托盘识别异常,请先进行组托!"; MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errorMsg)); } } else { log.error("请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response); } } catch (Exception e) { e.printStackTrace(); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } } } } } } public void CreateComb(String barcode,Integer code,Integer wrkNo) throws IOException { String batch = ""; Double anfme = 0D; WrkMastSta wrkMastSta = wrkMastStaService.selectOne(new EntityWrapper<WrkMastSta>().eq("wrk_no", wrkNo)); if (Cools.isEmpty(wrkMastSta)){ wrkMastSta = wrkMastStaService.selectOne(new EntityWrapper<WrkMastSta>().eq("wrk_no2", wrkNo)); if (Cools.isEmpty(wrkMastSta)){ throw new CoolException("未找到对应的任务信息"); } batch = wrkMastSta.getBatch2(); anfme = wrkMastSta.getAnfme2().doubleValue(); code = wrkMastSta.getMatnr2(); }else { batch = wrkMastSta.getBatch(); anfme = wrkMastSta.getAnfme().doubleValue(); code = wrkMastSta.getMatnr1(); } MatnrCode matnrCode = matnrCodeService.selectByCode(code); if (Cools.isEmpty(matnrCode)){ throw new CoolException("未找到对应的物料信息"); } CombParam combParam = new CombParam(); ArrayList<CombParam.CombMat> combMats = new ArrayList<>(); CombParam.CombMat combMat = new CombParam.CombMat(); combParam.setBarcode(barcode); combMat.setMatnr(matnrCode.getMatnr()); combMat.setBatch(batch); combMat.setAnfme(anfme); combMats.add(combMat); combParam.setCombMats(combMats); String response = new HttpHandler.Builder() .setUri(wmsUrl) .setPath("/mobile/comb/auth") .setJson(JSON.toJSONString(combParam)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response); if (jsonObject.getInteger("code").equals(200)) { } } } src/main/java/com/zy/asrs/service/impl/MatnrCodeServiceImpl.java
New file @@ -0,0 +1,16 @@ package com.zy.asrs.service.impl; import com.zy.asrs.mapper.MatnrCodeMapper; import com.zy.asrs.entity.MatnrCode; import com.zy.asrs.service.MatnrCodeService; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import org.springframework.stereotype.Service; @Service("matnrCodeService") public class MatnrCodeServiceImpl extends ServiceImpl<MatnrCodeMapper, MatnrCode> implements MatnrCodeService { @Override public MatnrCode selectByCode(Integer code) { return this.baseMapper.selectByCode(code); } } src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
@@ -67,4 +67,8 @@ public WrkMast selectByworkNo(Short workNo) { return this.baseMapper.selectByWrkNo(Integer.valueOf(workNo)); } @Override public WrkMast selectByworkNo(Integer workNo) { return this.baseMapper.selectByWrkNo(workNo); } } src/main/java/com/zy/asrs/utils/Utils.java
@@ -9,6 +9,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * Created by vincent on 2020/8/27 @@ -19,13 +20,18 @@ public static short getRgvStaNo(Integer rgvNo,Integer staNo){ Map<Integer, Short> rgv1Map = new HashMap<>(); rgv1Map.put(1014,(short)1);rgv1Map.put(1020,(short)2); rgv1Map.put(1023,(short)3);rgv1Map.put(1017,(short)4); rgv1Map.put(2013,(short)5);rgv1Map.put(2401,(short)6); rgv1Map.put(2114,(short)7); Map<Integer, Short> rgv2Map = new HashMap<>(); rgv2Map.put(4007, (short) 1);rgv2Map.put(4001, (short) 2); rgv2Map.put(2003, (short) 3);rgv2Map.put(2103, (short) 4); rgv2Map.put(4016, (short) 5);rgv2Map.put(4010, (short) 6); rgv2Map.put(2301, (short) 7);rgv2Map.put(2002, (short) 8); rgv2Map.put(2001, (short) 9); rgv2Map.put(4016, (short) 6);rgv2Map.put(4010, (short) 7); rgv2Map.put(2301, (short) 5);rgv2Map.put(2002, (short) 8); rgv2Map.put(2102, (short) 9); Map<Integer, Short> rgv3Map = new HashMap<>(); rgv3Map.put(2402,(short)1);rgv3Map.put(3001,(short)2); switch (rgvNo){ case 1: return rgv1Map.get(staNo); @@ -37,12 +43,45 @@ return 0; } public static Integer getStaNo(Integer rgvNo,Integer staNo){ Map<Integer, Short> rgv1Map = new HashMap<>(); rgv1Map.put(1014,(short)1);rgv1Map.put(1020,(short)2); rgv1Map.put(1023,(short)3);rgv1Map.put(1017,(short)4); rgv1Map.put(2013,(short)5);rgv1Map.put(2401,(short)6); rgv1Map.put(2114,(short)7); Map<Integer, Short> rgv2Map = new HashMap<>(); rgv2Map.put(4007, (short) 1);rgv2Map.put(4001, (short) 2); rgv2Map.put(2003, (short) 3);rgv2Map.put(2103, (short) 4); rgv2Map.put(4016, (short) 6);rgv2Map.put(4010, (short) 7); rgv2Map.put(2301, (short) 5);rgv2Map.put(2002, (short) 8); rgv2Map.put(2102, (short) 9); Map<Integer, Short> rgv3Map = new HashMap<>(); rgv3Map.put(2402,(short)1);rgv3Map.put(3001,(short)2); rgv1Map.entrySet().stream().collect(Collectors.toMap(entity ->entity.getValue(),entity-> entity.getKey())).get(staNo); switch (rgvNo){ case 1: return rgv1Map.entrySet().stream().collect(Collectors.toMap(entity ->entity.getValue(),entity-> entity.getKey())).get(staNo.shortValue()); case 2: return rgv2Map.entrySet().stream().collect(Collectors.toMap(entity ->entity.getValue(),entity-> entity.getKey())).get(staNo.shortValue()); case 3: return rgv3Map.entrySet().stream().collect(Collectors.toMap(entity ->entity.getValue(),entity-> entity.getKey())).get(staNo.shortValue()); } return 0; } public static short getRgvEndStaNo(Integer rgvNo,Integer staNo){ Map<Integer, Integer> rgv1Map = new HashMap<>(); rgv1Map.put(3007,2401);rgv1Map.put(3012,2401); rgv1Map.put(4002,2013); rgv1Map.put(4011,2013); rgv1Map.put(2101,2013);rgv1Map.put(2001,2013); rgv1Map.put(1022,1020);rgv1Map.put(1025,1023); Map<Integer, Integer> rgv2Map = new HashMap<>(); rgv2Map.put(4002,4001); rgv2Map.put(4011,4010); rgv2Map.put(2101,2102); rgv2Map.put(2101,2102);rgv2Map.put(2001,2002); Map<Integer, Integer> rgv3Map = new HashMap<>(); rgv3Map.put(3007,3001);rgv3Map.put(3012,3001); rgv3Map.put(1022,2402);rgv3Map.put(1025,2402); rgv3Map.put(1016,2402);rgv3Map.put(1019,2402); switch (rgvNo){ case 1: return getRgvStaNo(rgvNo,rgv1Map.get(staNo)); src/main/java/com/zy/common/CodeBuilder.java
@@ -20,7 +20,7 @@ generator.url="127.0.0.1:1433;databasename=mdqdasrs"; generator.username="sa"; generator.password="sa@123"; generator.table="man_emptyBarrel_in"; generator.table="man_matnr_code"; generator.packagePath="com.zy.asrs"; generator.html = false; generator.htmlDetail = false; src/main/java/com/zy/core/MainProcess.java
@@ -74,12 +74,16 @@ // //空桶出库完成 // mainService.crn5StnToOutStn(); //rgv任务 mainService.RGVTaskPut(); mainService.RGVTaskCreate(); //rgv1,3任务完成 mainService.RGVTaskput(); mainService.RGVTaskOver(); //rgv2任务完成 mainService.RGV2Taskput(); mainService.RGV2TaskOver(); //二期组托 mainService.generateStoreWrkFile2(); } catch (Exception e) { src/main/java/com/zy/core/enums/RgvStatusType.java
@@ -14,9 +14,13 @@ OUTSTN1((short)5,"工作位1请求出站"), OUTSTN8((short)6,"工作位2请求出站"), WALKING((short) 9, "走行中"), WALKING((short) 7, "放货中"), WALKING2((short) 8, "等待货位2任务执行"), WAITING((short) 90, "工位一任务完成等待WCS确认"), WAITING2((short) 91, "工位二任务完成等待WCS确认"), WAITING3((short)98,"联机任务中断"), ALARM((short) 99, "报警"), OTHER((short) 100, "其他"), ; src/main/java/com/zy/core/model/command/RgvCommand.java
@@ -53,9 +53,19 @@ @JSONField(serialize = false) private RgvTaskModeType taskModeType; private Short matnr; private Integer matnr; private Short matnr2; private Integer matnr2; private Short type; private Short type2; private String batch; private String batch2; private Short anfme; private Short anfme2; //**************工位2************** src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -23,7 +23,8 @@ // ---------------------------------------------------------------- // 物料代码 private Short matnr; private Integer matnr; private String batch; // ---------------------------------------------------------------- // 自动 src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -67,11 +67,17 @@ }}; public static final ArrayList<Integer> staNos5 = new ArrayList<Integer>() {{ add(4001);add(4002);add(4003);add(4004);add(4005);add(4006);add(4007); add(4016); }}; public static final ArrayList<Integer> staNos6 = new ArrayList<Integer>() {{ add(4010);add(4011);add(4012);add(4013);add(4014);add(4015);add(4016); add(2007);add(2008);add(2009);add(2010);add(2011);add(2012);add(2013); add(2108);add(2109);add(2110);add(2111);add(2112);add(2113);add(2114); add(2401);add(2402);add(2403); }}; public static final ArrayList<Integer> staNos7 = new ArrayList<Integer>() {{ add(3001);add(3002);add(3003);add(3004);add(3005);add(3006);add(3007); add(3008);add(3009);add(3010);add(3011);add(3012); }}; @@ -94,17 +100,21 @@ }}; public static final ArrayList<Integer> writeStaNos4 = new ArrayList<Integer>() {{ add(3001); add(3007); add(3012); add(4007); }}; public static final ArrayList<Integer> writeStaNos5 = new ArrayList<Integer>() {{ add(4001);add(4007); add(4016); }}; public static final ArrayList<Integer> writeStaNos6 = new ArrayList<Integer>() {{ add(4010);add(4016); add(2007);add(2008);add(2009);add(2010);add(2011);add(2012);add(2013); add(2108);add(2109);add(2110);add(2111);add(2112);add(2113);add(2114); add(2401);add(2402);add(2403); }}; public static final ArrayList<Integer> writeStaNos7 = new ArrayList<Integer>() {{ add(3001);add(3002);add(3003);add(3004);add(3005);add(3006);add(3007); add(3008);add(3009);add(3010);add(3011);add(3012); }}; public static final ArrayList<Integer> errorStaNos1 = new ArrayList<Integer>() {{ @@ -117,6 +127,10 @@ public static final ArrayList<Integer> errorStaNos4 = new ArrayList<Integer>() {{ add(3007);add(3012); }}; public static final ArrayList<Integer> errorStaNos7 = new ArrayList<Integer>() {{ add(3006);add(3007); }}; /** @@ -152,6 +166,8 @@ return staNos5; case 6: return staNos6; case 7: return staNos7; default: throw new CoolException("获取站点失败!"); } @@ -171,6 +187,8 @@ return writeStaNos5; case 6: return writeStaNos6; case 7: return writeStaNos7; default: throw new CoolException("获取站点失败!"); } @@ -184,6 +202,8 @@ return errorStaNos2; case 4: return errorStaNos4; case 7: return errorStaNos7; default: throw new CoolException("获取站点失败!"); } @@ -205,6 +225,8 @@ case 1: switch (slave.getId()){ case 1: case 6: case 7: read();break; case 2: read10();break; @@ -212,6 +234,8 @@ read30();break; case 4: read33();break; case 5: read55();break; } break; @@ -220,7 +244,9 @@ switch (slave.getId()){ case 1: case 3: write((StaProtocol)task.getData()); case 6: case 7: write((StaProtocol)task.getData());break; case 2: write10((StaProtocol)task.getData());break; @@ -319,25 +345,62 @@ } } } } else if (slave.getId() == 7) { Thread.sleep(200); OperateResultExOne<byte[]> result2 = null; result2 = siemensS7Net.Read("DB101.104.0", (short) (barcodeSize * 8)); if (result2.IsSuccess) { for (int i = 0; i < barcodeSize; i++) { String barcode = siemensS7Net.getByteTransform().TransString(result2.Content, i * 8, 8, "UTF-8"); BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, i + 4); if (!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { barcodeThread.setBarcode(barcode); } } } } //报警信息 Thread.sleep(200); OperateResultExOne<byte[]> result3 = null; result3 = siemensS7Net.Read("DB101.200.0", (short) (getErrorStaNo().size() * 4)); if (result3.IsSuccess) { for (int i = 0; i < getErrorStaNo().size(); i++) { Integer siteId = getErrorStaNo().get(i); // 站点编号 StaProtocol staProtocol = station.get(siteId); if (slave.getId() ==1){ //报警信息 Thread.sleep(200); OperateResultExOne<byte[]> result3 = null; result3 = siemensS7Net.Read("DB101.200.0", (short) (getErrorStaNo().size() * 4)); if (result3.IsSuccess) { for (int i = 0; i < getErrorStaNo().size(); i++) { Integer siteId = getErrorStaNo().get(i); // 站点编号 StaProtocol staProtocol = station.get(siteId); // staProtocol.setLocType1(siemensS7Net.getByteTransform().TransInt16(result.Content, i*4)); // 库位高度 boolean[] status = siemensS7Net.getByteTransform().TransBool(result3.Content, i*4+2, 1); staProtocol.setFrontErr(status[0]); staProtocol.setBackErr(status[1]); staProtocol.setHighErr(status[2]); staProtocol.setLeftErr(status[3]); staProtocol.setRightErr(status[4]); staProtocol.setWeightErr(status[5]); staProtocol.setBarcodeErr(status[6]); boolean[] status = siemensS7Net.getByteTransform().TransBool(result3.Content, i*4+2, 1); staProtocol.setFrontErr(status[0]); staProtocol.setBackErr(status[1]); staProtocol.setHighErr(status[2]); staProtocol.setLeftErr(status[3]); staProtocol.setRightErr(status[4]); staProtocol.setWeightErr(status[5]); staProtocol.setBarcodeErr(status[6]); } } } else if (slave.getId() == 7) { //报警信息 Thread.sleep(200); OperateResultExOne<byte[]> result3 = null; result3 = siemensS7Net.Read("DB101.96.0", (short) (getErrorStaNo().size() * 4)); if (result3.IsSuccess) { for (int i = 0; i < getErrorStaNo().size(); i++) { Integer siteId = getErrorStaNo().get(i); // 站点编号 StaProtocol staProtocol = station.get(siteId); // staProtocol.setLocType1(siemensS7Net.getByteTransform().TransInt16(result.Content, i*4)); // 库位高度 boolean[] status = siemensS7Net.getByteTransform().TransBool(result3.Content, i*4+2, 1); staProtocol.setFrontErr(status[0]); staProtocol.setBackErr(status[1]); staProtocol.setHighErr(status[2]); staProtocol.setLeftErr(status[3]); staProtocol.setRightErr(status[4]); staProtocol.setWeightErr(status[5]); staProtocol.setBarcodeErr(status[6]); } } } @@ -384,7 +447,7 @@ } staProtocol.setWorkNo((short) siemensS7Net.getByteTransform().TransInt32(result.Content, i * 10)); // 工作号 staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*10 + 4 )); // 目标站 staProtocol.setMatnr(siemensS7Net.getByteTransform().TransInt16(result.Content, i*10 + 6 )); // 目标站 staProtocol.setMatnr((int) siemensS7Net.getByteTransform().TransInt16(result.Content, i * 10 + 6)); // 目标站 } } Thread.sleep(200); @@ -413,14 +476,14 @@ } // 条码扫描器 if(slave.getId() == 1) { if(slave.getId() == 2) { Thread.sleep(200); OperateResultExOne<byte[]> result2 = null; result2 = siemensS7Net.Read("DB101.208.0", (short) (barcodeSize * 8)); result2 = siemensS7Net.Read("DB101.194.0", (short) (8)); if (result2.IsSuccess) { for (int i = 0; i < barcodeSize; i++) { for (int i = 0; i < 1; i++) { String barcode = siemensS7Net.getByteTransform().TransString(result2.Content, i * 8, 8, "UTF-8"); BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, i + 1); BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, 3); if (!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { barcodeThread.setBarcode(barcode); } @@ -523,13 +586,15 @@ int staNoSize = staNos.size(); OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size() * 8)); result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size()*6)); result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size()*30)); if (result.IsSuccess) { for (int i = 0; i < staNoSize; i++) { Integer siteId = staNos.get(i); // 站点编号 boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, i*4, 1); short tongType = siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 2); short matnr = siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 4); Integer matnr = siemensS7Net.getByteTransform().TransInt32(result.Content, i * 4 + 4); short amount = siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 8); String batch = siemensS7Net.getByteTransform().TransString(result.Content, i * 4+10, 20, "UTF-8"); StaProtocol staProtocol = station.get(siteId); if (null == staProtocol) { staProtocol = new StaProtocol(); @@ -539,8 +604,76 @@ staProtocol.setAutoing(status[0]); // 自动 staProtocol.setLoading(status[1]); // 有物 staProtocol.setInEnable(status[2]); // 可入 staProtocol.setEmptyOutPalletRequire(status[3]); staProtocol.setMatnr(matnr); staProtocol.setTongType(tongType); staProtocol.setBatch(batch); staProtocol.setAmount(amount); staProtocol.setLow(true); if (!staProtocol.isPakMk() && !staProtocol.isLoading()) { staProtocol.setPakMk(true); } } } if (result.IsSuccess) { OutputQueue.DEVP.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId())); // 根据实时信息更新数据库 try { List<BasDevp> basDevps = new ArrayList<>(); for (Integer siteId : staNos) { StaProtocol staProtocol = station.get(siteId); basDevps.add(staProtocol.toSqlModel()); } BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class); if (null != basDevpService && !basDevpService.updateBatchById(basDevps)) { throw new Exception("更新数据库数据失败"); } } catch (Exception e) { e.printStackTrace(); OutputQueue.DEVP.offer(MessageFormat.format("【{0}】更新数据库数据失败 ===>> [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("更新数据库数据失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); } } else { OutputQueue.DEVP.offer(MessageFormat.format("【{0}】读取输送线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("读取输送线plc状态信息失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); } } private void read55() throws InterruptedException { ArrayList<Integer> staNos = getStaNo(); int staNoSize = staNos.size(); OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size() * 8)); result = siemensS7Net.Read("DB101.0", (short) (getStaNo().size()*28)); if (result.IsSuccess) { for (int i = 0; i < staNoSize; i++) { Integer siteId = staNos.get(i); // 站点编号 boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, i*4, 1); // short tongType = siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 2); Integer matnr = siemensS7Net.getByteTransform().TransInt32(result.Content, i * 4 + 2); short amount = siemensS7Net.getByteTransform().TransInt16(result.Content, i * 4 + 6); String batch = siemensS7Net.getByteTransform().TransString(result.Content, i * 4+8, 20, "UTF-8"); StaProtocol staProtocol = station.get(siteId); if (null == staProtocol) { staProtocol = new StaProtocol(); staProtocol.setSiteId(siteId); station.put(siteId, staProtocol); } staProtocol.setAutoing(status[0]); // 自动 staProtocol.setLoading(status[1]); // 有物 staProtocol.setInEnable(status[2]); // 可入 staProtocol.setEmptyOutPalletRequire(status[3]); staProtocol.setMatnr(matnr); staProtocol.setAmount(amount); staProtocol.setBatch(batch); staProtocol.setLow(true); src/main/java/com/zy/core/thread/ZyRgvThread.java
@@ -108,7 +108,7 @@ */ private void readStatus(){ try { OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 34); OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 38); if (result.IsSuccess) { if (null == rgvProtocol) { rgvProtocol = new RgvProtocol(); @@ -126,6 +126,7 @@ rgvProtocol.setxSpeed(siemensNet.getByteTransform().TransSingle(result.Content, 24));//备用2 rgvProtocol.setxDistance(siemensNet.getByteTransform().TransSingle(result.Content, 28));//备用3 rgvProtocol.setxDuration(siemensNet.getByteTransform().TransInt16(result.Content, 32));//备用4 rgvProtocol.setLoaded2(siemensNet.getByteTransform().TransInt16(result.Content, 36));//工位1有物 OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId())); src/main/resources/application.yml
@@ -147,7 +147,7 @@ # 输送线1 devp[0]: id: 1 ip: 10.10.10.1 ip: 10.10.10.111 port: 102 rack: 0 slot: 0 @@ -225,6 +225,16 @@ port: 102 rack: 0 slot: 0 # 入库口1 inSta[0]: staNo: 2106 barcode: ${wcs-slave.barcode[2].id} backSta: 2105 led: ${wcs-slave.led[0].id} # 空板入库口1 emptyInSta[0]: staNo: 2106 led: ${wcs-slave.led[0].id} # 输送线3 devp[2]: id: 3 @@ -239,13 +249,40 @@ port: 102 rack: 0 slot: 0 # # 输送线5 # devp[4]: # id: 5 # ip: 10.10.10.33 # port: 102 # rack: 0 # slot: 0 # 输送线5 devp[4]: id: 5 ip: 10.10.10.55 port: 102 rack: 0 slot: 0 # 输送线5 devp[5]: id: 6 ip: 10.10.10.14 port: 102 rack: 0 slot: 0 # 输送线5 devp[6]: id: 7 ip: 10.10.10.20 port: 102 rack: 0 slot: 0 # 入库口1 inSta[0]: staNo: 3006 barcode: ${wcs-slave.barcode[3].id} backSta: 3007 led: ${wcs-slave.led[0].id} # 入库口1 inSta[1]: staNo: 3011 barcode: ${wcs-slave.barcode[4].id} backSta: 3012 led: ${wcs-slave.led[0].id} # # RGV1 rgv[0]: id: 2 @@ -260,43 +297,51 @@ staPlcId: 2 inStn[1]: sourceStaNo: 2003 sourcePlcId: 4 sourcePlcId: 2 inStn[2]: sourceStaNo: 2102 sourcePlcId: 2 staNo: 2103 staPlcId: 2 inStn[3]: sourceStaNo: 4016 sourcePlcId: 5 staNo: 2103 staPlcId: 2 outStn[0]: staNo: 2103 staPlcId: 2 # # RGV2 # rgv[1]: # id: 2 # ip: 10.10.10.121 # port: 102 # rack: 0 # slot: 0 # inStn[0]: # devpPlcId: ${wcs-slave.devp[0].id} # sourceStaNo: 3001 # outStn[0]: # devpPlcId: ${wcs-slave.devp[0].id} # sourceStaNo: 2402 # # RGV1 # rgv[2]: # id: 3 # ip: 10.10.10.122 # port: 102 # rack: 0 # slot: 0 # inStn[0]: # devpPlcId: ${wcs-slave.devp[0].id} # sourceStaNo: 2102 # inStn[1]: # devpPlcId: ${wcs-slave.devp[0].id} # sourceStaNo: 4007 # inStn[2]: # devpPlcId: ${wcs-slave.devp[0].id} # sourceStaNo: 4016 # outStn[0]: # devpPlcId: ${wcs-slave.devp[0].id} # sourceStaNo: 2003 # RGV2 rgv[1]: id: 1 ip: 10.10.10.133 port: 102 rack: 0 slot: 0 # RGV1 rgv[2]: id: 3 ip: 10.10.10.135 port: 102 rack: 0 slot: 0 inStn[0]: sourceStaNo: 2402 sourcePlcId: 6 staNo: 3001 staPlcId: 7 inStn[1]: sourceStaNo: 3001 sourcePlcId: 7 staNo: 2402 staPlcId: 6 outStn[0]: staNo: 2402 staPlcId: 6 outStn[1]: staNo: 3001 staPlcId: 7 # 条码扫描仪1 barcode[0]: @@ -318,6 +363,11 @@ id: 4 ip: 10.10.10.3 port: 51236 # 条码扫描仪4 barcode[4]: id: 5 ip: 10.10.10.3 port: 51236 # LED1 led[0]: src/main/resources/mapper/MatnrCodeMapper.xml
New file @@ -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.MatnrCodeMapper"> <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.zy.asrs.entity.MatnrCode"> <id column="id" property="id" /> <result column="code" property="code" /> <result column="matnr" property="matnr" /> </resultMap> <select id="selectByCode" resultMap="BaseResultMap"> select * from man_matnr_code where code = #{code} </select> </mapper> src/main/resources/mapper/WaitPakinMapper.xml
@@ -4,27 +4,52 @@ <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.zy.asrs.entity.WaitPakin"> <result column="zpallet" property="zpallet" /> <result column="loc_no" property="locNo" /> <result column="anfme" property="anfme" /> <result column="matnr" property="matnr" /> <result column="maktx" property="maktx" /> <result column="lgnum" property="lgnum" /> <result column="type" property="type" /> <result column="batch" property="batch" /> <result column="order_no" property="orderNo" /> <result column="specs" property="specs" /> <result column="model" property="model" /> <result column="color" property="color" /> <result column="supplier" property="supplier" /> <result column="warehouse" property="warehouse" /> <result column="brand" property="brand" /> <result column="anfme" property="anfme" /> <result column="altme" property="altme" /> <result column="zpallet" property="zpallet" /> <result column="bname" property="bname" /> <result column="loc_no" property="locNo" /> <result column="unit" property="unit" /> <result column="price" property="price" /> <result column="sku" property="sku" /> <result column="units" property="units" /> <result column="barcode" property="barcode" /> <result column="origin" property="origin" /> <result column="manu" property="manu" /> <result column="manu_date" property="manuDate" /> <result column="item_num" property="itemNum" /> <result column="safe_qty" property="safeQty" /> <result column="weight" property="weight" /> <result column="length" property="length" /> <result column="volume" property="volume" /> <result column="three_code" property="threeCode" /> <result column="supp" property="supp" /> <result column="supp_code" property="suppCode" /> <result column="be_batch" property="beBatch" /> <result column="dead_time" property="deadTime" /> <result column="dead_warn" property="deadWarn" /> <result column="source" property="source" /> <result column="inspect" property="inspect" /> <result column="danger" property="danger" /> <result column="status" property="status" /> <result column="io_status" property="ioStatus" /> <result column="memo" property="memo" /> <result column="modi_time" property="modiTime" /> <result column="modi_user" property="modiUser" /> <result column="appe_time" property="appeTime" /> <result column="appe_user" property="appeUser" /> <result column="memo" property="memo" /> <result column="owner" property="owner" /> <result column="payment" property="payment" /> <result column="uuid" property="uuid" /> </resultMap> </mapper> src/main/resources/mapper/WrkMastMapper.xml
@@ -205,7 +205,7 @@ </select> <select id="selectByWrkNo" resultMap="BaseResultMap"> select top 1 * from dbo.asr_wrk_mast where wrk_no = #{wrkNo} order by io_pri desc,io_time,wrk_no asc select top 1 * from dbo.asr_wrk_mast where wrk_no = #{wrkNo} and (wrk_sts = 13 or wrk_sts = 2) order by io_pri desc,io_time,wrk_no asc </select> <select id="selectCrn5Task2" resultMap="BaseResultMap"> select * from dbo.asr_wrk_mast where wrk_sts=1 and io_type=1 and crn_no=5 order by io_pri desc,io_time,wrk_no ASC src/main/resources/mapper/WrkMastStaMapper.xml
@@ -21,6 +21,11 @@ <result column="wrk_no2" property="wrkNo2"/> <result column="matnr1" property="matnr1"/> <result column="matnr2" property="matnr2"/> <result column="type2" property="type2"/> <result column="batch" property="batch"/> <result column="batch2" property="batch2"/> <result column="anfme" property="anfme"/> <result column="anfme2" property="anfme2"/> </resultMap> <select id="selectByRgvNoandWrkNo" resultMap="BaseResultMap">