src/main/java/com/zy/asrs/entity/BasRgv.java
@@ -3,9 +3,15 @@ import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.enums.IdType; import com.baomidou.mybatisplus.annotations.TableField; import com.core.common.SpringUtils; import com.zy.system.service.UserService; import com.zy.system.entity.User; import java.text.SimpleDateFormat; import java.util.Date; import org.springframework.format.annotation.DateTimeFormat; import com.core.common.SpringUtils; import com.zy.system.service.UserService; import com.zy.system.entity.User; import java.text.SimpleDateFormat; import java.util.Date; @@ -29,194 +35,152 @@ private Integer rgvNo; /** * 模式 * 可入 */ @ApiModelProperty(value= "模式") private Integer mode; @ApiModelProperty(value= "可入") @TableField("in_enable") private Integer inEnable; /** * 状态 * 可出 */ @ApiModelProperty(value= "状态") @ApiModelProperty(value= "可出") @TableField("out_enable") private Integer outEnable; /** * 作业态 */ @ApiModelProperty(value= "作业态") @TableField("rgv_sts") private Integer rgvSts; /** * 任务号 */ @ApiModelProperty(value= "任务号") @TableField("wrk_no1") private Integer wrkNo1; /** * 堆垛机号 */ @ApiModelProperty(value= "堆垛机号") @TableField("wrk_no2") private Integer wrkNo2; /** * 错误码 */ @ApiModelProperty(value= "错误码") @TableField("rgv_err") private Long rgvErr; /** * 标记 */ @ApiModelProperty(value= "标记") @TableField("pak_mk") private String pakMk; /** * 状态 1: 正常 0: 禁用 */ @ApiModelProperty(value= "状态 1: 正常 0: 禁用 ") private Integer status; /** * 工位1工作号 * 添加人员 */ @ApiModelProperty(value= "工位1工作号") @TableField("task_no1") private Integer taskNo1; @ApiModelProperty(value= "添加人员") @TableField("create_by") private Long createBy; /** * 工位1有物信号 * 添加时间 */ @ApiModelProperty(value= "工位1有物信号") private Integer loaded1; /** * RGV当前位置 */ @ApiModelProperty(value= "RGV当前位置") @TableField("rgv_pos") private Integer rgvPos; /** * 走行在定位 */ @ApiModelProperty(value= "走行在定位") @TableField("walk_pos") private Integer walkPos; /** * 工位2工作号 */ @ApiModelProperty(value= "工位2工作号") @TableField("task_no2") private Integer taskNo2; /** * 工位2有物信号 */ @ApiModelProperty(value= "工位2有物信号") private Integer loaded2; /** * 工位1任务完成信号 */ @ApiModelProperty(value= "工位1任务完成信号") @TableField("task_finish1") private Integer taskFinish1; /** * 工位2任务完成信号 */ @ApiModelProperty(value= "工位2任务完成信号") @TableField("task_finish2") private Integer taskFinish2; /** * 异常码 */ @ApiModelProperty(value= "异常码") private Integer alarm; /** * 心跳 */ @ApiModelProperty(value= "心跳") private Integer heart; /** * 备用1 */ @ApiModelProperty(value= "备用1") private Integer temp1; /** * 备用2 */ @ApiModelProperty(value= "备用2") private Integer temp2; /** * 备用3 */ @ApiModelProperty(value= "备用3") private Integer temp3; /** * 备用4 */ @ApiModelProperty(value= "备用4") private Integer temp4; /** * 备用5 */ @ApiModelProperty(value= "备用5") private Integer temp5; /** * 创建时间 */ @ApiModelProperty(value= "创建时间") @ApiModelProperty(value= "添加时间") @TableField("create_time") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date createTime; /** * 创建人员 * 修改人员 */ @ApiModelProperty(value= "创建人员") @TableField("create_by") private Long createBy; @ApiModelProperty(value= "修改人员") @TableField("update_by") private Long updateBy; /** * 更新时间 * 修改时间 */ @ApiModelProperty(value= "更新时间") @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 BasRgv() {} public BasRgv(Integer rgvNo,Integer mode,Integer status,Integer taskNo1,Integer loaded1,Integer rgvPos,Integer walkPos,Integer taskNo2,Integer loaded2,Integer taskFinish1,Integer taskFinish2,Integer alarm,Integer heart,Integer temp1,Integer temp2,Integer temp3,Integer temp4,Integer temp5,Date createTime,Long createBy,Date updateTime,Long updateBy) { public BasRgv(Integer rgvNo,Integer inEnable,Integer outEnable,Integer rgvSts,Integer wrkNo1,Integer wrkNo2,Long rgvErr,String pakMk,Integer status,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) { this.rgvNo = rgvNo; this.mode = mode; 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.taskNo1 = taskNo1; this.loaded1 = loaded1; this.rgvPos = rgvPos; this.walkPos = walkPos; this.taskNo2 = taskNo2; this.loaded2 = loaded2; this.taskFinish1 = taskFinish1; this.taskFinish2 = taskFinish2; this.alarm = alarm; this.heart = heart; this.temp1 = temp1; this.temp2 = temp2; this.temp3 = temp3; this.temp4 = temp4; this.temp5 = temp5; this.createTime = createTime; this.createBy = createBy; this.updateTime = updateTime; this.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, // 工位1工作号 // null, // 工位1有物信号 // null, // RGV当前位置 // null, // 走行在定位 // null, // 工位2工作号 // null, // 工位2有物信号 // null, // 工位1任务完成信号 // null, // 工位2任务完成信号 // null, // 异常码 // null, // 心跳 // null, // 备用1 // null, // 备用2 // null, // 备用3 // null, // 备用4 // null, // 备用5 // null, // 创建时间 // null, // 创建人员 // null, // 更新时间 // null // 更新人员 // null, // 添加人员 // null, // 添加时间 // null, // 修改人员 // null, // 修改时间 // null // 备注 // ); public String getStatus$(){ if (null == this.status){ return null; } switch (this.status){ case 1: return "正常"; case 0: return "禁用"; default: return String.valueOf(this.status); } } public String getCreateBy$(){ UserService service = SpringUtils.getBean(UserService.class); User user = service.selectById(this.createBy); if (!Cools.isEmpty(user)){ return String.valueOf(user.getUsername()); } return null; } public String getCreateTime$(){ if (Cools.isEmpty(this.createTime)){ @@ -225,6 +189,15 @@ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime); } public String getUpdateBy$(){ UserService service = SpringUtils.getBean(UserService.class); User user = service.selectById(this.updateBy); if (!Cools.isEmpty(user)){ return String.valueOf(user.getUsername()); } return null; } public String getUpdateTime$(){ if (Cools.isEmpty(this.updateTime)){ return ""; src/main/java/com/zy/asrs/entity/BasRgvErr.java
New file @@ -0,0 +1,127 @@ package com.zy.asrs.entity; import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.enums.IdType; import com.baomidou.mybatisplus.annotations.TableField; import com.core.common.SpringUtils; import com.zy.system.service.UserService; import com.zy.system.entity.User; import java.text.SimpleDateFormat; import java.util.Date; import org.springframework.format.annotation.DateTimeFormat; import com.core.common.SpringUtils; import com.zy.system.service.UserService; import com.zy.system.entity.User; import java.text.SimpleDateFormat; import java.util.Date; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import com.baomidou.mybatisplus.annotations.TableName; import java.io.Serializable; @Data @TableName("asr_bas_rgv_err") public class BasRgvErr implements Serializable { private static final long serialVersionUID = 1L; /** * 异常码 */ @ApiModelProperty(value= "异常码") @TableId(value = "error_code", type = IdType.INPUT) @TableField("error_code") private Long errorCode; /** * 异常 */ @ApiModelProperty(value= "异常") @TableField("err_name") private String errName; /** * 修改人员 */ @ApiModelProperty(value= "修改人员") @TableField("modi_user") private Long modiUser; /** * 修改时间 */ @ApiModelProperty(value= "修改时间") @TableField("modi_time") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date modiTime; /** * 添加人员 */ @ApiModelProperty(value= "添加人员") @TableField("appe_user") private Long appeUser; /** * 添加时间 */ @ApiModelProperty(value= "添加时间") @TableField("appe_time") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date appeTime; public BasRgvErr() {} public BasRgvErr(Long errorCode,String errName,Long modiUser,Date modiTime,Long appeUser,Date appeTime) { this.errorCode = errorCode; this.errName = errName; this.modiUser = modiUser; this.modiTime = modiTime; this.appeUser = appeUser; this.appeTime = appeTime; } // BasRgvErr basRgvErr = new BasRgvErr( // null, // 异常码[非空] // null, // 异常 // null, // 修改人员 // null, // 修改时间 // null, // 添加人员 // null // 添加时间 // ); public String getModiUser$(){ UserService service = SpringUtils.getBean(UserService.class); User user = service.selectById(this.modiUser); if (!Cools.isEmpty(user)){ return String.valueOf(user.getUsername()); } return null; } public String getModiTime$(){ if (Cools.isEmpty(this.modiTime)){ return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime); } public String getAppeUser$(){ UserService service = SpringUtils.getBean(UserService.class); User user = service.selectById(this.appeUser); if (!Cools.isEmpty(user)){ return String.valueOf(user.getUsername()); } return null; } public String getAppeTime$(){ if (Cools.isEmpty(this.appeTime)){ return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime); } } src/main/java/com/zy/asrs/entity/BasRgvOpt.java
@@ -1,13 +1,16 @@ package com.zy.asrs.entity; import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.enums.IdType; import com.baomidou.mybatisplus.annotations.TableField; import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableField; import java.text.SimpleDateFormat; import java.util.Date; import org.springframework.format.annotation.DateTimeFormat; import java.text.SimpleDateFormat; import java.util.Date; import com.core.common.SpringUtils; import com.zy.system.service.UserService; import com.zy.system.entity.User; import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.enums.IdType; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -20,115 +23,93 @@ private static final long serialVersionUID = 1L; /** * 任务号 */ @ApiModelProperty(value= "任务号") @TableField("wrk_no1") private Integer wrkNo1; @ApiModelProperty(value= "") @TableId(value = "id", type = IdType.INPUT) private Long id; @TableField("wrk_no2") private Integer wrkNo2; /** * RGV编号 * 穿梭车 */ @ApiModelProperty(value= "RGV编号") @ApiModelProperty(value= "穿梭车") @TableField("rgv_no") private Integer rgvNo; /** * 任务完成确认位 * 下发时间 */ @ApiModelProperty(value= "任务完成确认位") @TableField("ack_finish") private Integer ackFinish; /** * 工位1工作号 */ @ApiModelProperty(value= "工位1工作号") @TableField("task_no1") private Integer taskNo1; /** * 工位1模式 */ @ApiModelProperty(value= "工位1模式") @TableField("task_mode1") private Integer taskMode1; /** * 工位1源站 */ @ApiModelProperty(value= "工位1源站") @TableField("source_sta_no1") private Integer sourceStaNo1; /** * 工位1目标站 */ @ApiModelProperty(value= "工位1目标站") @TableField("destination_sta_no_1") private Integer destinationStaNo1; /** * 工位2工作号 */ @ApiModelProperty(value= "工位2工作号") @TableField("task_no2") private Integer taskNo2; /** * 工位2模式 */ @ApiModelProperty(value= "工位2模式") @TableField("task_mode2") private Integer taskMode2; /** * 工位2源站 */ @ApiModelProperty(value= "工位2源站") @TableField("source_sta_no2") private Integer sourceStaNo2; /** * 工位2目标站 */ @ApiModelProperty(value= "工位2目标站") @TableField("destination_sta_no2") private Integer destinationStaNo2; /** * 任务确认 */ @ApiModelProperty(value= "任务确认") private Integer command; /** * 创建时间 */ @ApiModelProperty(value= "创建时间") @TableField("create_time") @ApiModelProperty(value= "下发时间") @TableField("send_time") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date createTime; private Date sendTime; /** * 创建人员 * 作业 */ @ApiModelProperty(value= "创建人员") @TableField("create_by") private Long createBy; @ApiModelProperty(value= "作业") private String mode; /** * 更新时间 * 源排 */ @ApiModelProperty(value= "更新时间") @TableField("update_time") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date updateTime; @ApiModelProperty(value= "源排") @TableField("source_row") private Integer sourceRow; /** * 更新人员 * 源列 */ @ApiModelProperty(value= "更新人员") @TableField("update_by") private Long updateBy; @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: 正常 0: 失败 @@ -136,59 +117,79 @@ @ApiModelProperty(value= "响应结果 1: 正常 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; @ApiModelProperty(value= "") @TableId(value = "id", type = IdType.AUTO) private Integer id; public BasRgvOpt() {} public BasRgvOpt(Integer rgvNo,Integer ackFinish,Integer taskNo1,Integer taskMode1,Integer sourceStaNo1,Integer destinationStaNo1,Integer taskNo2,Integer taskMode2,Integer sourceStaNo2,Integer destinationStaNo2,Integer command,Date createTime,Long createBy,Date updateTime,Long updateBy,Integer response) { 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.ackFinish = ackFinish; this.taskNo1 = taskNo1; this.taskMode1 = taskMode1; this.sourceStaNo1 = sourceStaNo1; this.destinationStaNo1 = destinationStaNo1; this.taskNo2 = taskNo2; this.taskMode2 = taskMode2; this.sourceStaNo2 = sourceStaNo2; this.destinationStaNo2 = destinationStaNo2; this.command = command; this.createTime = createTime; this.createBy = createBy; this.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.response = response; this.memo = memo; } // BasRgvOpt basRgvOpt = new BasRgvOpt( // null, // [非空] // null, // RGV编号 // null, // 任务完成确认位 // null, // 工位1工作号 // null, // 工位1模式 // null, // 工位1源站 // null, // 工位1目标站 // null, // 工位2工作号 // null, // 工位2模式 // null, // 工位2源站 // null, // 工位2目标站 // null, // 任务确认 // null, // 创建时间 // null, // 创建人员 // null, // 更新时间 // null, // 更新人员 // null // 响应结果 // null, // 任务号 // null, // // null, // 穿梭车 // null, // 下发时间 // null, // 作业 // null, // 源排 // null, // 源列 // null, // 源层 // null, // 源站 // null, // 目标排 // null, // 目标列 // null, // 目标层 // null, // 目标站 // null, // 响应结果 // null, // 修改时间 // null, // 修改人员 // null, // 备注 // ); public String getCreateTime$(){ if (Cools.isEmpty(this.createTime)){ public String getSendTime$(){ if (Cools.isEmpty(this.sendTime)){ 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); return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.sendTime); } public String getResponse$(){ @@ -203,5 +204,21 @@ } } public String getUpdateTime$(){ if (Cools.isEmpty(this.updateTime)){ return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime); } public String getUpdateBy$(){ UserService service = SpringUtils.getBean(UserService.class); User user = service.selectById(this.updateBy); if (!Cools.isEmpty(user)){ return String.valueOf(user.getUsername()); } return null; } } src/main/java/com/zy/asrs/entity/WrkMastSta.java
New file @@ -0,0 +1,178 @@ package com.zy.asrs.entity; import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.enums.IdType; import com.baomidou.mybatisplus.annotations.TableField; import java.text.SimpleDateFormat; import java.util.Date; import org.springframework.format.annotation.DateTimeFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.text.SimpleDateFormat; import java.util.Date; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import com.baomidou.mybatisplus.annotations.TableName; import java.io.Serializable; @Data @TableName("asr_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; /** * 工作档开始位置 */ @ApiModelProperty(value= "工作档开始位置") @TableField("wrk_start") private Integer wrkStart; /** * 工作档结束位置 */ @ApiModelProperty(value= "工作档结束位置") @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= "类型 0:满版 1:空板") 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; /** * 工作类型 类型 1:取(叠盘) 2:放 3:取放 4:拆盘 */ @ApiModelProperty(value= "工作类型 类型 1:取(叠盘) 2:放 3:取放 4:拆盘") @TableField("wrk_type") private Integer wrkType; /** * 标记时间 */ @ApiModelProperty(value= "标记时间") @TableField("bign_time") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date bignTime; @ApiModelProperty(value= "") @TableField("wrk_crn") private Integer wrkCrn; 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) { 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; this.wrkCrn = wrkCrn; } // WrkMastSta wrkMastSta = new WrkMastSta( // null, // 工作号[非空] // null, // 工作档开始位置[非空] // null, // 工作档结束位置[非空] // null, // 小车接货位置[非空] // null, // 小车放货位置[非空] // null, // 添加时间 // null, // 修改时间 // null, // 类型 0:满版 1:空板[非空] // null, // 工作状态 0:初始 1:等待小车取 2:等待小车放 3:完成[非空] // null, // 行号[非空] // null, // 工作类型 类型 1:取(叠盘) 2:放 3:取放 4:拆盘[非空] // 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); } } src/main/java/com/zy/asrs/mapper/BasRgvErrMapper.java
New file @@ -0,0 +1,12 @@ package com.zy.asrs.mapper; import com.zy.asrs.entity.BasRgvErr; import com.baomidou.mybatisplus.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Repository; @Mapper @Repository public interface BasRgvErrMapper extends BaseMapper<BasRgvErr> { } src/main/java/com/zy/asrs/mapper/WrkMastStaMapper.java
New file @@ -0,0 +1,12 @@ package com.zy.asrs.mapper; import com.zy.asrs.entity.WrkMastSta; import com.baomidou.mybatisplus.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Repository; @Mapper @Repository public interface WrkMastStaMapper extends BaseMapper<WrkMastSta> { } src/main/java/com/zy/asrs/service/BasRgvErrService.java
New file @@ -0,0 +1,8 @@ package com.zy.asrs.service; import com.zy.asrs.entity.BasRgvErr; import com.baomidou.mybatisplus.service.IService; public interface BasRgvErrService extends IService<BasRgvErr> { } src/main/java/com/zy/asrs/service/WrkMastStaService.java
New file @@ -0,0 +1,8 @@ package com.zy.asrs.service; import com.zy.asrs.entity.WrkMastSta; import com.baomidou.mybatisplus.service.IService; public interface WrkMastStaService extends IService<WrkMastSta> { } src/main/java/com/zy/asrs/service/impl/BasRgvErrServiceImpl.java
New file @@ -0,0 +1,12 @@ package com.zy.asrs.service.impl; import com.zy.asrs.mapper.BasRgvErrMapper; import com.zy.asrs.entity.BasRgvErr; import com.zy.asrs.service.BasRgvErrService; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import org.springframework.stereotype.Service; @Service("basRgvErrService") public class BasRgvErrServiceImpl extends ServiceImpl<BasRgvErrMapper, BasRgvErr> implements BasRgvErrService { } src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -603,6 +603,7 @@ if (crn.getId() == 5){ continue; } this.crnStnToLoc(crn, crnProtocol); // 入库 crnProtocol.setLastIo("O"); } @@ -2020,261 +2021,11 @@ } //RGV搬运 public synchronized void rgvIoExecute() { for (RgvSlave slave : slaveProperties.getRgv()) { ZyRgvThread rgvThread = (ZyRgvThread) SlaveConnection.get(SlaveType.Rgv, slave.getId()); if (rgvThread == null) { return; } RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); if (rgvProtocol == null) { return; } // 判断RGV是否空闲 if (rgvProtocol.getModeType() == RgvModeType.COMPUTER && rgvProtocol.getStatusType() == RgvStatusType.IDLE) { // 如果最近一次是入库模式,则优先扫描出库站点 if (rgvProtocol.getLastIo().equals("I")) { this.rgvOutExecute(rgvThread, rgvProtocol);//出库 rgvProtocol.setLastIo("O"); }else { this.rgvInExecute(rgvThread, rgvProtocol);//入库 rgvProtocol.setLastIo("I"); } //检查是否存在工位1任务超时没下发 if (rgvProtocol.getTaskNo1() > 0 && rgvProtocol.getTaskNo2() == 0) { if (System.currentTimeMillis() - rgvProtocol.getTask1SendTime() > (1000*60)) { //工位1下发时间超过60s RgvCommand rgvCommand = new RgvCommand(); rgvCommand.setRgvNo(rgvProtocol.getRgvNo());//RGV编号 rgvCommand.setCommand((short) 1);//工位1确认 if (!MessageQueue.offer(SlaveType.Rgv, rgvCommand.getRgvNo(), new Task(4, rgvCommand))) { log.error("RGV确认命令下发失败,RGV号={},任务数据={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand)); return; } log.error("RGV确认命令下发成功,RGV号={},任务数据={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand)); } } } } } //rgv入库 public synchronized void rgvInExecute(ZyRgvThread rgvThread, RgvProtocol rgvProtocol) { for (RgvSlave.Sta sta : rgvThread.getSlave().getInStn()) { if (rgvProtocol.getTaskNo1() > 0) { //检测rgv工位1是否为入库任务 WrkMast wrkMast1 = wrkMastMapper.selectByWrkNo(rgvProtocol.getTaskNo1().intValue()); if (wrkMast1.getWrkSts() > 100) { continue;//出库任务跳过 } } SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, sta.getDevpPlcId()); StaProtocol staProtocol = devpThread.getStation().get(sta.getSourceStaNo()); //判断输送线是否自动、有物、可入、有工作号 if (!(staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isOutEnable() && (staProtocol.getWorkNo() > 0))) { continue; } //搜索工作档 WrkMast wrkMast = wrkMastMapper.selectByWrkNo(staProtocol.getWorkNo().intValue()); if (wrkMast == null) { continue;//工作档不存在 } //获取RGV放货站点 Integer staNo = Utils.getRgvStaNo(rgvProtocol.getRgvNo(), sta.getSourceStaNo(), staProtocol.getStaNo().intValue(), true); if (staNo == null) { continue;//RGV放货站点不存在 } //判断目标站是否自动、可入、无物、无工作号 StaProtocol staProtocol1 = devpThread.getStation().get(staNo); if (!(staProtocol1.isAutoing() && staProtocol1.isInEnable() && !staProtocol1.isLoading() && (staProtocol1.getWorkNo() == 0))) { continue; } // 命令下发区 -------------------------------------------------------------------------- RgvCommand rgvCommand = new RgvCommand(); rgvCommand.setRgvNo(rgvProtocol.getRgvNo());//RGV编号 rgvCommand.setAckFinish((short) 0); //判断rgv工位1是否可用 if (rgvProtocol.getTaskNo1() == 0) { rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue());//工作号 rgvCommand.setTaskMode1(RgvTaskModeType.PICK_RELEASE);//工作模式 取放货 rgvCommand.setSourceStaNo1(staProtocol.getStaNo());//源站 rgvCommand.setDestinationStaNo1(staNo.shortValue());//目标站 rgvCommand.setCommand((short) 0);//工位1暂不确认 } else if (rgvProtocol.getTaskNo2() == 0) {//判断rgv工位2是否可用 rgvCommand.setTaskNo2(wrkMast.getWrkNo().shortValue());//工作号 rgvCommand.setTaskMode2(RgvTaskModeType.PICK_RELEASE);//工作模式 取放货 rgvCommand.setSourceStaNo2(staProtocol.getStaNo());//源站 rgvCommand.setDestinationStaNo2(staNo.shortValue());//目标站 rgvCommand.setCommand((short) 1);//工位2确认 }else { continue;//没有可用RGV工位 } if (!MessageQueue.offer(SlaveType.Rgv, rgvCommand.getRgvNo(), new Task(2, rgvCommand))) { log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand)); continue; } log.error("RGV命令下发成功,RGV号={},任务数据={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand)); } } //rgv出库 public synchronized void rgvOutExecute(ZyRgvThread rgvThread, RgvProtocol rgvProtocol) { for (RgvSlave.Sta sta : rgvThread.getSlave().getOutStn()) { if (rgvProtocol.getTaskNo1() > 0) { //检测rgv工位1是否为出库任务 WrkMast wrkMast1 = wrkMastMapper.selectByWrkNo(rgvProtocol.getTaskNo1().intValue()); if (wrkMast1.getWrkSts() < 100) { continue;//入库任务跳过 } } SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, sta.getDevpPlcId()); StaProtocol staProtocol = devpThread.getStation().get(sta.getSourceStaNo()); //判断输送线是否自动、有物、可出、有工作号 if (!(staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isOutEnable() && (staProtocol.getWorkNo() > 0))) { continue; } //搜索工作档 WrkMast wrkMast = wrkMastMapper.selectByWrkNo(staProtocol.getWorkNo().intValue()); if (wrkMast == null) { continue;//工作档不存在 } //获取RGV放货站点 Integer staNo = Utils.getRgvStaNo(rgvProtocol.getRgvNo(), sta.getSourceStaNo(), staProtocol.getStaNo().intValue(), false); if (staNo == null) { continue;//RGV放货站点不存在 } //判断目标站是否自动、可出、无物、无工作号 StaProtocol staProtocol1 = devpThread.getStation().get(staNo); if (!(staProtocol1.isAutoing() && staProtocol1.isOutEnable() && !staProtocol1.isLoading() && (staProtocol1.getWorkNo() == 0))) { continue; } // 命令下发区 -------------------------------------------------------------------------- RgvCommand rgvCommand = new RgvCommand(); rgvCommand.setRgvNo(rgvProtocol.getRgvNo());//RGV编号 rgvCommand.setAckFinish((short) 0); //判断rgv工位1是否可用 if (rgvProtocol.getTaskNo1() == 0) { rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue());//工作号 rgvCommand.setTaskMode1(RgvTaskModeType.PICK_RELEASE);//工作模式 取放货 rgvCommand.setSourceStaNo1(staProtocol.getStaNo());//源站 rgvCommand.setDestinationStaNo1(staNo.shortValue());//目标站 rgvCommand.setCommand((short) 0);//工位1暂不确认 } else if (rgvProtocol.getTaskNo2() == 0) {//判断rgv工位2是否可用 rgvCommand.setTaskNo2(wrkMast.getWrkNo().shortValue());//工作号 rgvCommand.setTaskMode2(RgvTaskModeType.PICK_RELEASE);//工作模式 取放货 rgvCommand.setSourceStaNo2(staProtocol.getStaNo());//源站 rgvCommand.setDestinationStaNo2(staNo.shortValue());//目标站 rgvCommand.setCommand((short) 1);//工位2确认 }else { continue;//没有可用RGV工位 } if (!MessageQueue.offer(SlaveType.Rgv, rgvCommand.getRgvNo(), new Task(2, rgvCommand))) { log.error("RGV命令下发失败,RGV号={},任务数据={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand)); continue; } log.error("RGV命令下发成功,RGV号={},任务数据={}", rgvProtocol.getRgvNo(), JSON.toJSON(rgvCommand)); } } //RGV工作完成 public synchronized void rgvFinished() { SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); for (RgvSlave slave : slaveProperties.getRgv()) { ZyRgvThread rgvThread = (ZyRgvThread) SlaveConnection.get(SlaveType.Rgv, slave.getId()); if (rgvThread == null) { return; } RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); if (rgvProtocol == null) { return; } // 状态:等待确认 if (rgvProtocol.getStatusType() == RgvStatusType.WAITING) { if (rgvProtocol.getTaskNo1() == 9999) { // RGV复位 rgvThread.setResetFlag1(true); }else { // 获取待确认工作档 WrkMast wrkMast = wrkMastMapper.selectPakInStep3(rgvProtocol.getTaskNo1().intValue()); if (wrkMast == null) { log.error("RGV处于等待确认且任务完成状态,但未找到工作档。RGV号={},工作号={}", rgvProtocol.getRgvNo(), rgvProtocol.getTaskNo1()); continue; } if (rgvProtocol.getTaskNo1() > 0 && rgvProtocol.getTaskFinish1() == 1) { //工位1任务完成 // RGV复位 rgvThread.setResetFlag1(true); //给目标站输送线写入数据 Short destinationPos1 = rgvProtocol.getDestinationPos1();//获取工位1目标站 StaProtocol staProtocol = devpThread.getStation().get(destinationPos1.intValue()).clone(); staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());//写入工作号 staProtocol.setStaNo(wrkMast.getStaNo().shortValue());//写入目标站 if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol))) { log.info("{}任务,RGV搬运成功,写入输送数据失败{}", wrkMast.getWrkNo(), JSON.toJSONString(staProtocol)); } //2号RGV和3号RGV工作完成后需要更新工作档状态 if (rgvProtocol.getRgvNo() == 2 || rgvProtocol.getRgvNo() == 3) { if (wrkMast.getWrkSts() == 13) {//13.RGV搬运中 => 14.已出库 wrkMast.setWrkSts(14L); wrkMast.setModiTime(new Date()); wrkMastMapper.updateById(wrkMast); } } } if (rgvProtocol.getTaskNo2() > 0 && rgvProtocol.getTaskFinish2() == 1) { //工位2任务完成 // RGV复位 rgvThread.setResetFlag2(true); //给目标站输送线写入数据 Short destinationPos2 = rgvProtocol.getDestinationPos2();//获取工位2目标站 StaProtocol staProtocol = devpThread.getStation().get(destinationPos2.intValue()).clone(); staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());//写入工作号 staProtocol.setStaNo(wrkMast.getStaNo().shortValue());//写入目标站 if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol))) { log.info("{}任务,RGV搬运成功,写入输送数据失败{}", wrkMast.getWrkNo(), JSON.toJSONString(staProtocol)); } //2号RGV和3号RGV工作完成后需要更新工作档状态 if (rgvProtocol.getRgvNo() == 2 || rgvProtocol.getRgvNo() == 3) { if (wrkMast.getWrkSts() == 13) {//13.RGV搬运中 => 14.已出库 wrkMast.setWrkSts(14L); wrkMast.setModiTime(new Date()); wrkMastMapper.updateById(wrkMast); } } } } } } } /** * 扫描碟盘机自动入库空托盘 src/main/java/com/zy/asrs/service/impl/WrkMastStaServiceImpl.java
New file @@ -0,0 +1,12 @@ package com.zy.asrs.service.impl; import com.zy.asrs.mapper.WrkMastStaMapper; import com.zy.asrs.entity.WrkMastSta; import com.zy.asrs.service.WrkMastStaService; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import org.springframework.stereotype.Service; @Service("wrkMastStaService") public class WrkMastStaServiceImpl extends ServiceImpl<WrkMastStaMapper, WrkMastSta> implements WrkMastStaService { } src/main/java/com/zy/common/CodeBuilder.java
@@ -17,10 +17,10 @@ // generator.table="sys_host"; // sqlserver generator.sqlOsType = SqlOsType.SQL_SERVER; generator.url="192.168.4.15:1433;databasename=mdqdasrs"; generator.url="127.0.0.1:1433;databasename=mdqdasrs"; generator.username="sa"; generator.password="sa@123"; generator.table="asr_bas_rgv_opt"; generator.table="asr_wrk_mast_sta"; generator.packagePath="com.zy.asrs"; generator.html = false; generator.htmlDetail = false; src/main/java/com/zy/core/MainProcess.java
@@ -61,10 +61,7 @@ // 入库 ===>> 执行对工作档的完成操作 mainService.storeFinished(); //RGV搬运 mainService.rgvIoExecute(); //RGV工作完成 mainService.rgvFinished(); // 堆垛机异常信息记录 mainService.recCrnErr(); src/main/java/com/zy/core/cache/OutputQueue.java
@@ -11,6 +11,8 @@ // 堆垛机输出日志 public static ArrayBlockingQueue<String> CRN = new ArrayBlockingQueue<>(32); public static ArrayBlockingQueue<String> RGV = new ArrayBlockingQueue<>(32); // 输送线输出日志 public static ArrayBlockingQueue<String> DEVP = new ArrayBlockingQueue<>(32); // 条码器输出日志 src/main/java/com/zy/core/model/DevpSlave.java
@@ -21,6 +21,8 @@ private List<Sta> inSta = new ArrayList<>(); private List<Sta> rgvSta = new ArrayList<>(); private List<Sta> emptyInSta = new ArrayList<>(); private List<Sta> outSta = new ArrayList<>(); src/main/java/com/zy/core/model/command/RgvCommand.java
@@ -14,12 +14,12 @@ private Integer rgvNo = 0; // 任务完成确认位 private Short ackFinish = 0; private boolean ackFinish = false; //**************工位1************** // 工位1工作号 private Short taskNo1 = 0; private Integer taskNo1 = 0; /** * 任务模式: src/main/java/com/zy/core/model/protocol/RgvProtocol.java
@@ -26,7 +26,7 @@ private RgvStatusType statusType; //工位1工作号 private Short taskNo1; private Integer taskNo1; //工位1有物信号 private Short loaded1; @@ -59,7 +59,7 @@ private Short heart; //备用1 private Short temp1; private Integer temp1; //备用2 private Short temp2; src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -43,36 +43,6 @@ private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>(); private short heartBeatVal = 1; // public static final ArrayList<Integer> staNoseee1 = new ArrayList<Integer>() {{ // add(1001);add(1002);add(1003);add(1004);add(1005); // add(1006);add(1007);add(1008);add(1009);add(1010); // add(1011);add(1012);add(1013);add(1014);add(1015); // add(1016);add(1017);add(1018);add(1019);add(1020); // add(1021);add(1022);add(1023);add(1024);add(1025); // // add(2001);add(2002);add(2003);add(2004);add(2005); // add(2006);add(2007);add(2008);add(2009);add(2010); // add(2011);add(2012);add(2013); // // add(2101);add(2102);add(2103);add(2104);add(2105); // add(2106);add(2107);add(2108);add(2109);add(2110); // add(2111);add(2112);add(2113);add(2114); // // add(2301);add(2302);add(2303);add(2304);add(2305); // add(2306); // // add(2401);add(2402);add(2403); // // add(3001);add(3002);add(3003);add(3004);add(3005); // add(3006);add(3007);add(3008);add(3009);add(3010); // add(3011);add(3012); // // add(4001);add(4002);add(4003);add(4004);add(4005); // add(4006);add(4007); // // add(4010);add(4011);add(4012);add(4013);add(4014); // add(4015);add(4016); // }}; public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{ add(1001);add(1002);add(1003);add(1004);add(1005); @@ -83,9 +53,9 @@ }}; public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{ add(2001);add(2002);add(2003);add(2004);add(2005);add(2006); add(2101);add(2102);add(2103);add(2104);add(2105);add(2106);add(2107); add(2301);add(2302);add(2303);add(2304);add(2305);add(2306); add(2001);add(2002);add(2101);add(2102);add(2301);add(2302); add(2303);add(2304);add(2305);add(2306);add(2003);add(2004);add(2005); add(2006);add(2103);add(2104);add(2105);add(2106);add(2107); }}; public static final ArrayList<Integer> staNos3 = new ArrayList<Integer>() {{ src/main/java/com/zy/core/thread/ZyRgvThread.java
@@ -7,10 +7,10 @@ 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.entity.BasRgv; //import com.zy.asrs.entity.BasRgvOpt; //import com.zy.asrs.service.BasRgvOptService; //import com.zy.asrs.service.BasRgvService; import com.zy.core.RgvThread; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.OutputQueue; @@ -71,7 +71,7 @@ command = new RgvCommand(); } command.setRgvNo(slave.getId()); // 堆垛机编号 command.setTaskNo1((short) 0); // 工作号 command.setTaskNo1(0); // 工作号 command.setTaskMode1(RgvTaskModeType.NONE); // 任务模式 command.setSourceStaNo1((short) 0);//源站 command.setDestinationStaNo1((short) 0);//目标站 @@ -79,13 +79,10 @@ command.setTaskMode2(RgvTaskModeType.NONE); // 任务模式 command.setSourceStaNo2((short) 0);//源站 command.setDestinationStaNo2((short) 0);//目标站 command.setAckFinish((short) 1); // 任务完成确认位 command.setAckFinish(true); // 任务完成确认位 write(command); break; //写入数据确认命令 case 4: writeCommand((RgvCommand) task.getData()); break; default: break; } @@ -121,86 +118,56 @@ */ private void readStatus(){ try { OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 34); OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 30); if (result.IsSuccess) { if (null == rgvProtocol) { rgvProtocol = new RgvProtocol(); rgvProtocol.setRgvNo(slave.getId()); } rgvProtocol.setMode(siemensNet.getByteTransform().TransInt16(result.Content, 0));//模式 rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 2));//RGV状态 rgvProtocol.setTaskNo1(siemensNet.getByteTransform().TransInt16(result.Content, 4));//工位1工作号 rgvProtocol.setLoaded1(siemensNet.getByteTransform().TransInt16(result.Content, 6));//工位1有物 rgvProtocol.setTaskNo1(siemensNet.getByteTransform().TransInt32(result.Content, 2));//工位1工作号 rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 6));//RGV状态 rgvProtocol.setRgvPos(siemensNet.getByteTransform().TransInt16(result.Content, 8));//RGV当前位置 rgvProtocol.setWalkPos(siemensNet.getByteTransform().TransInt16(result.Content, 10));//走行在定位 rgvProtocol.setTaskNo2(siemensNet.getByteTransform().TransInt16(result.Content, 12));//工位2工作号 rgvProtocol.setLoaded2(siemensNet.getByteTransform().TransInt16(result.Content, 14));//工位2有物 rgvProtocol.setTaskFinish1(siemensNet.getByteTransform().TransInt16(result.Content, 16));//工位1任务完成 rgvProtocol.setTaskFinish2(siemensNet.getByteTransform().TransInt16(result.Content, 18));//工位2任务完成 rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 20));//异常码 rgvProtocol.setHeart(siemensNet.getByteTransform().TransInt16(result.Content, 22));//RGV心跳信号 rgvProtocol.setTemp1(siemensNet.getByteTransform().TransInt16(result.Content, 24));//备用1 rgvProtocol.setTemp2(siemensNet.getByteTransform().TransInt16(result.Content, 26));//备用2 rgvProtocol.setTemp3(siemensNet.getByteTransform().TransInt16(result.Content, 28));//备用3 rgvProtocol.setTemp4(siemensNet.getByteTransform().TransInt16(result.Content, 30));//备用4 rgvProtocol.setTemp5(siemensNet.getByteTransform().TransInt16(result.Content, 32));//备用5 OperateResultExOne<byte[]> result2 = siemensNet.Read("DB100.0", (short) 22); if (result2.IsSuccess) { rgvProtocol.setTaskMode1(siemensNet.getByteTransform().TransInt16(result.Content, 4));//工位1任务模式 rgvProtocol.setSourceStn1(siemensNet.getByteTransform().TransInt16(result.Content, 6));//工位1源站 rgvProtocol.setDestinationPos1(siemensNet.getByteTransform().TransInt16(result.Content, 8));//工位1目标站 rgvProtocol.setTaskMode2(siemensNet.getByteTransform().TransInt16(result.Content, 14));//工位2任务模式 rgvProtocol.setSourceStn2(siemensNet.getByteTransform().TransInt16(result.Content, 16));//工位2源站 rgvProtocol.setDestinationPos2(siemensNet.getByteTransform().TransInt16(result.Content, 18));//工位2目标站 } rgvProtocol.setTemp1(siemensNet.getByteTransform().TransInt32(result.Content, 12));//备用1 rgvProtocol.setLoaded1(siemensNet.getByteTransform().TransInt16(result.Content, 16));//工位1有物 rgvProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 18));//异常码 rgvProtocol.setTemp2(siemensNet.getByteTransform().TransInt16(result.Content, 20));//备用2 rgvProtocol.setTemp3(siemensNet.getByteTransform().TransInt16(result.Content, 24));//备用3 rgvProtocol.setTemp4(siemensNet.getByteTransform().TransInt16(result.Content, 28));//备用4 OutputQueue.CRN.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId())); // 复位信号 if (rgvProtocol.getStatusType().equals(RgvStatusType.WAITING)) { if (resetFlag1) { RgvCommand rgvCommand = new RgvCommand(); rgvCommand.setAckFinish((short) 2);//工位1任务结束已接收 if (write(rgvCommand)) { resetFlag1 = false; } } if (resetFlag2) { RgvCommand rgvCommand = new RgvCommand(); rgvCommand.setAckFinish((short) 3);//工位2任务结束已接收 if (write(rgvCommand)) { resetFlag2 = false; } } } try { // 根据实时信息更新数据库 BasRgvService basRgvService = SpringUtils.getBean(BasRgvService.class); BasRgv basRgv = new BasRgv(); basRgv.setRgvNo(slave.getId()); basRgv.setMode(rgvProtocol.getMode().intValue()); basRgv.setStatus(rgvProtocol.getStatus().intValue()); basRgv.setTaskNo1(rgvProtocol.getTaskNo1().intValue()); basRgv.setLoaded1(rgvProtocol.getLoaded1().intValue()); basRgv.setRgvPos(rgvProtocol.getRgvPos().intValue()); basRgv.setWalkPos(rgvProtocol.getWalkPos().intValue()); basRgv.setTaskNo2(rgvProtocol.getTaskNo2().intValue()); basRgv.setLoaded2(rgvProtocol.getLoaded2().intValue()); basRgv.setTaskFinish1(rgvProtocol.getTaskFinish1().intValue()); basRgv.setTaskFinish2(rgvProtocol.getTaskFinish2().intValue()); basRgv.setAlarm(rgvProtocol.getAlarm().intValue()); basRgv.setHeart(rgvProtocol.getHeart().intValue()); basRgv.setTemp1(rgvProtocol.getTemp1().intValue()); basRgv.setTemp2(rgvProtocol.getTemp2().intValue()); basRgv.setTemp3(rgvProtocol.getTemp3().intValue()); basRgv.setTemp4(rgvProtocol.getTemp4().intValue()); basRgv.setTemp5(rgvProtocol.getTemp5().intValue()); if (!basRgvService.updateById(basRgv)){ log.error("RGV plc数据库更新失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); } // BasRgvService basRgvService = SpringUtils.getBean(BasRgvService.class); // BasRgv basRgv = new BasRgv(); // basRgv.setRgvNo(slave.getId()); // basRgv.setMode(rgvProtocol.getMode().intValue()); // basRgv.setStatus(rgvProtocol.getStatus().intValue()); // basRgv.setTaskNo1(rgvProtocol.getTaskNo1()); // basRgv.setLoaded1(rgvProtocol.getLoaded1().intValue()); // basRgv.setRgvPos(rgvProtocol.getRgvPos().intValue()); // basRgv.setWalkPos(rgvProtocol.getWalkPos().intValue()); //// basRgv.setTaskNo2(rgvProtocol.getTaskNo2().intValue()); //// basRgv.setLoaded2(rgvProtocol.getLoaded2().intValue()); //// basRgv.setTaskFinish1(rgvProtocol.getTaskFinish1().intValue()); //// basRgv.setTaskFinish2(rgvProtocol.getTaskFinish2().intValue()); // basRgv.setAlarm(rgvProtocol.getAlarm().intValue()); //// basRgv.setHeart(rgvProtocol.getHeart().intValue()); // basRgv.setTemp1(rgvProtocol.getTemp1()); // basRgv.setTemp2(rgvProtocol.getTemp2().intValue()); // basRgv.setTemp3(rgvProtocol.getTemp3().intValue()); //// basRgv.setTemp4(rgvProtocol.getTemp4().intValue()); //// basRgv.setTemp5(rgvProtocol.getTemp5().intValue()); // if (!basRgvService.updateById(basRgv)){ // log.error("RGV plc数据库更新失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); // } } catch (Exception ignore){} } else { @@ -224,164 +191,116 @@ log.error("RGV写入命令为空"); return false; } command.setRgvNo(slave.getId()); OperateResult result = null; if (command.getTaskNo1() > 0 && command.getTaskNo2() == 0) { //只有工位1存在任务且任务没有被确认,工位1开始计时 if (command.getCommand() == 0) { rgvProtocol.setTask1SendTime(System.currentTimeMillis()); short[] array = new short[5]; array[0] = command.getSourceStaNo1(); array[1] = command.getSourceStaNo2(); array[2] = command.getDestinationStaNo1(); array[3] = command.getDestinationStaNo2(); array[4] = command.getTaskMode1(); OperateResult result1 = siemensNet.Write("DB100.0",array); OperateResult result2 = siemensNet.Write("DB100.10",command.getTaskNo1()); OperateResult result3 = siemensNet.Write("DB100.18.1",command.isAckFinish()); if (!result1.IsSuccess && !result2.IsSuccess && !result3.IsSuccess){ log.error("写入RGVplc数据失败,重新添加任务到队列 ===> [id:{}],{}",slave.getId(),JSON.toJSON(command)); MessageQueue.offer(SlaveType.Rgv,slave.getId(),new Task(2,command)); Thread.sleep(100); readStatus(); return false; } //RGV任务写入后,回读一次,看是否成功 Thread.sleep(400); try { OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 20); OperateResultExOne<byte[]> resultReadAck = siemensNet.Read("DB100.18.1", (short) 1); if (resultRead.IsSuccess){ RgvCommand one = new RgvCommand(); one.setAckFinish(siemensNet.getByteTransform().TransBool(resultReadAck.Content, 0)); one.setSourceStaNo1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 0)); one.setSourceStaNo2(siemensNet.getByteTransform().TransInt16(resultRead.Content, 2)); one.setDestinationStaNo1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 4)); one.setDestinationStaNo2(siemensNet.getByteTransform().TransInt16(resultRead.Content, 6)); one.setTaskMode1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 8)); one.setTaskNo1(siemensNet.getByteTransform().TransInt32(resultRead.Content, 10)); // one.setDestinationStaNo1(siemensNet.getByteTransform().TransInt16(resultRead.Content, 8)); if ( !command.isAckFinish() == one.isAckFinish() || !command.getTaskNo1().equals(one.getTaskNo1()) || !command.getTaskMode1().equals(one.getTaskMode1()) || !command.getSourceStaNo1().equals(one.getSourceStaNo1()) || !command.getDestinationStaNo1().equals(one.getDestinationStaNo1()) ){ try{ log.error("RGV命令地址写入后回读失败[id:{}] >>>>> 写入[{}],===>>回读[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one)); }catch (Exception e){ try{ log.error("日志打印失败:===>>参数one报错 [id:{}],{}", slave.getId(), JSON.toJSON(command),JSON.toJSON(resultRead)); }catch (Exception e1){ log.error("日志打印失败:===>> [id:{}],{}", slave.getId(), JSON.toJSON(command)); } } log.error("Rgv命令回读失败后,重新添加任务到队列 ===>> [id:{}],{}", slave.getId(), JSON.toJSON(command)); MessageQueue.offer(SlaveType.Rgv, slave.getId(), new Task(2, command)); Thread.sleep(100); readStatus(); return false; }else { log.info("RGV命令地址写入后回读成功[id:{}] >>>>> 写入[{}],===>>回读[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one)); } } short[] array = new short[10]; array[0] = command.getAckFinish(); // 任务完成确认位 array[1] = command.getTaskNo1(); // 工位1任务号 array[2] = command.getTaskMode1(); // 工位1模式 array[3] = command.getSourceStaNo1(); // 工位1源站 array[4] = command.getDestinationStaNo1(); // 工位1目标站 array[5] = 0; // 工位2任务号 array[6] = 0; // 工位2模式 array[7] = 0; // 工位2源站 array[8] = 0; // 工位2目标站 array[9] = command.getCommand();// 任务确认位 result = siemensNet.Write("DB100.0", array); log.info("RGV命令下发[id:{}] >>>>> {}", slave.getId(), array); } else if (command.getTaskNo2() > 0 && command.getTaskNo1() == 0) { //只有工位2存在任务 short[] array = new short[5]; array[0] = command.getTaskNo2(); // 工位2任务号 array[1] = command.getTaskMode2(); // 工位2模式 array[2] = command.getSourceStaNo2(); // 工位2源站 array[3] = command.getDestinationStaNo2(); // 工位2目标站 array[4] = command.getCommand();// 任务确认位 result = siemensNet.Write("DB100.12", array); log.info("RGV命令下发[id:{}] >>>>> {}", slave.getId(), array); }else { //工位1和工位2任务 short[] array = new short[10]; array[0] = command.getAckFinish(); // 任务完成确认位 array[1] = command.getTaskNo1(); // 工位1任务号 array[2] = command.getTaskMode1(); // 工位1模式 array[3] = command.getSourceStaNo1(); // 工位1源站 array[4] = command.getDestinationStaNo1(); // 工位1目标站 array[5] = command.getTaskNo2(); // 工位2任务号 array[6] = command.getTaskMode2(); // 工位2模式 array[7] = command.getSourceStaNo2(); // 工位2源站 array[8] = command.getDestinationStaNo2(); // 工位2目标站 array[9] = command.getCommand();// 任务确认位 result = siemensNet.Write("DB100.0", array); log.info("RGV命令下发[id:{}] >>>>> {}", slave.getId(), array); }catch (Exception e){ log.error("RGV命令地址写入后回读出错"); } if (command.getCommand() == 1) { //任务被确认 rgvProtocol.setTask1SendTime(0L);//重置工位1下发时间 if (!command.isAckFinish()) { if (result1.IsSuccess) { Thread.sleep(300); //任务下发次数 int writeCount2 = 0; do { writeCount2++; result1 = siemensNet.Write("DB100.18", true); if(result1.IsSuccess){ //RGV任务写入后,回读一次,看是否成功 Thread.sleep(200); OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.18", (short) 2); if (resultRead.IsSuccess) { boolean commandFinish=siemensNet.getByteTransform().TransBool(resultRead.Content, 0); if (!commandFinish){ log.error("RGV任务确认位"+commandFinish+"写入数据与回读数据不一致!"+"循环执行次数:"+writeCount2+"次"); }else{ //任务命令写入成功 log.info("RGV任务确认位"+commandFinish+"回读成功!"+"循环执行次数:"+writeCount2+"次"); break; } }else { log.error("RGV任务确认位回读失败!"+"循环执行次数:"+writeCount2+"次"); } } else { log.error("RGV任务确认位写入失败!"+"循环执行次数:"+writeCount2+"次"); } }while (writeCount2<5); } } if(!result.IsSuccess){ log.error("写入RGV plc数据失败,重新添加任务到队列 ===>> [id:{}],{}", slave.getId(), JSON.toJSON(command)); MessageQueue.offer(SlaveType.Rgv, slave.getId(), new Task(2, command)); Thread.sleep(100); readStatus(); return false; } try { // 日志记录 BasRgvOptService bean = SpringUtils.getBean(BasRgvOptService.class); Date now = new Date(); BasRgvOpt basRgvOpt = new BasRgvOpt( command.getRgvNo(), // RGV[非空] command.getAckFinish().intValue(), // 任务完成确认位 command.getTaskNo1().intValue(), // 任务号 command.getTaskMode1().intValue(), // 模式 command.getSourceStaNo1().intValue(), // 源站 command.getDestinationStaNo1().intValue(), // 目标站 command.getTaskNo2().intValue(), // 任务号 command.getTaskMode2().intValue(), // 模式 command.getSourceStaNo2().intValue(), // 源站 command.getDestinationStaNo2().intValue(), // 目标站 command.getCommand().intValue(), now, // 下发时间 null, // 下发人员 now, // 修改时间 null, // 修改人员 null //响应 ); bean.insert(basRgvOpt); } catch (Exception ignore) {} if (result != null && result.IsSuccess) { if (result1 != null && result1.IsSuccess) { Thread.sleep(200); this.readStatus(); log.info("堆垛机命令下发[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command)); OutputQueue.CRN.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command))); 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.CRN.offer(MessageFormat.format("【{0}】写入堆垛机plc数据失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); log.error("写入堆垛机plc数据失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); OutputQueue.RGV.offer(MessageFormat.format("【{0}】写入RGV 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; } } /** * 写入数据确认命令 */ private boolean writeCommand(RgvCommand command) throws InterruptedException { if (null == command) { log.error("RGV写入命令为空"); return false; } command.setRgvNo(slave.getId()); short[] array = new short[1]; array[0] = command.getCommand();// 任务确认位 OperateResult result = siemensNet.Write("DB100.20", array); log.info("RGV命令下发[id:{}] >>>>> {}", slave.getId(), array); if(!result.IsSuccess){ log.error("写入RGV plc数据失败,重新添加任务到队列 ===>> [id:{}],{}", slave.getId(), JSON.toJSON(command)); MessageQueue.offer(SlaveType.Rgv, slave.getId(), new Task(2, command)); Thread.sleep(100); readStatus(); return false; } try { // 日志记录 BasRgvOptService bean = SpringUtils.getBean(BasRgvOptService.class); Date now = new Date(); BasRgvOpt basRgvOpt = new BasRgvOpt( command.getRgvNo(), // RGV[非空] command.getAckFinish().intValue(), // 任务完成确认位 command.getTaskNo1().intValue(), // 任务号 command.getTaskMode1().intValue(), // 模式 command.getSourceStaNo1().intValue(), // 源站 command.getDestinationStaNo1().intValue(), // 目标站 command.getTaskNo2().intValue(), // 任务号 command.getTaskMode2().intValue(), // 模式 command.getSourceStaNo2().intValue(), // 源站 command.getDestinationStaNo2().intValue(), // 目标站 command.getCommand().intValue(), now, // 下发时间 null, // 下发人员 now, // 修改时间 null, // 修改人员 null //响应 ); bean.insert(basRgvOpt); } catch (Exception ignore) {} if (result != null && result.IsSuccess) { Thread.sleep(200); this.readStatus(); log.info("堆垛机命令下发[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command)); OutputQueue.CRN.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command))); return true; } else { OutputQueue.CRN.offer(MessageFormat.format("【{0}】写入堆垛机plc数据失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); log.error("写入堆垛机plc数据失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); return false; } } /** * 初始化堆垛机状态 src/main/resources/application.yml
@@ -1,5 +1,5 @@ server: port: 8080 port: 9090 servlet: context-path: /@pom.build.finalName@ @@ -47,7 +47,7 @@ # 堆垛机1 crn[0]: id: 1 ip: 10.10.10.120 ip: 10.10.10.100 port: 102 rack: 0 slot: 0 @@ -123,7 +123,7 @@ # 堆垛机3 crn[2]: id: 5 ip: 10.10.10.100 ip: 10.10.10.120 port: 102 rack: 0 slot: 0 @@ -219,12 +219,30 @@ autoEmptyIn[0]: staNo: 1007 # 输送线2 # devp[1]: # id: 1 # ip: 10.10.10.10 # port: 102 # rack: 0 # slot: 0 devp[1]: id: 2 ip: 10.10.10.10 port: 102 rack: 0 slot: 0 rgvSta[0]: staNo: 4007 rgvSta[1]: staNo: 4001 rgvSta[2]: staNo: 4016 rgvSta[3]: staNo: 4010 rgvSta[4]: staNo: 2003 rgvSta[5]: staNo: 2103 rgvSta[6]: staNo: 2301 rgvSta[7]: staNo: 2002 rgvSta[8]: staNo: 2102 # # 输送线3 # devp[2]: # id: 1 @@ -240,24 +258,12 @@ # rack: 0 # slot: 0 # RGV1 # rgv[0]: # id: 1 # ip: 10.10.10.120 # port: 102 # rack: 0 # slot: 0 # inStn[0]: # devpPlcId: ${wcs-slave.devp[0].id} # sourceStaNo: 2401 # inStn[1]: # devpPlcId: ${wcs-slave.devp[0].id} # sourceStaNo: 2114 # outStn[0]: # devpPlcId: ${wcs-slave.devp[0].id} # sourceStaNo: 1014 # outStn[1]: # devpPlcId: ${wcs-slave.devp[0].id} # sourceStaNo: 1017 rgv[0]: id: 1 ip: 10.10.10.120 port: 102 rack: 0 slot: 0 # # RGV2 # rgv[1]: # id: 2 src/main/resources/mapper/BasRgvErrMapper.xml
New file @@ -0,0 +1,16 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.zy.asrs.mapper.BasRgvErrMapper"> <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BasRgvErr"> <result column="error_code" property="errorCode" /> <result column="err_name" property="errName" /> <result column="modi_user" property="modiUser" /> <result column="modi_time" property="modiTime" /> <result column="appe_user" property="appeUser" /> <result column="appe_time" property="appeTime" /> </resultMap> </mapper> src/main/resources/mapper/WrkMastStaMapper.xml
New file @@ -0,0 +1,24 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.zy.asrs.mapper.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" /> <result column="wrk_crn" property="wrkCrn" /> </resultMap> </mapper>