src/main/java/com/zy/asrs/controller/LiftController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/domain/vo/LiftMsgTableVo.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/domain/vo/LiftStateTableVo.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/entity/BasLift.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/model/protocol/LiftProtocol.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/thread/LiftThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/views/lift.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/controller/LiftController.java
@@ -69,28 +69,17 @@ } vo.setTaskNo(liftProtocol.getTaskNo()); // 任务号 vo.setProtocolStatus(liftProtocol.getProtocolStatusType().id); vo.setLiftLock(liftProtocol.getLiftLock()); vo.setPositionArrivalFeedback(liftProtocol.getPositionArrivalFeedback()); vo.setReady(liftProtocol.getReady()); vo.setRunning(liftProtocol.getRunning()); vo.setMode(liftProtocol.getMode()); vo.setLineFrontHasStock(liftProtocol.getLineFrontHasStock()); vo.setForwardRotationFeedback(liftProtocol.getForwardRotationFeedback()); vo.setReverseFeedback(liftProtocol.getReverseFeedback()); vo.setMotorOverload(liftProtocol.getMotorOverload()); vo.setLineEndHasStock(liftProtocol.getLineEndHasStock()); vo.setInConveyLineCardTrayAlarm(liftProtocol.getInConveyLineCardTrayAlarm()); vo.setOutConveyLineCardTrayAlarm(liftProtocol.getOutConveyLineCardTrayAlarm()); vo.setPlatPositionDeviationAlarm(liftProtocol.getPlatPositionDeviationAlarm()); vo.setPlatTorqueDeviationAlarm(liftProtocol.getPlatTorqueDeviationAlarm()); vo.setPlatShuttleCheck(liftProtocol.getPlatShuttleCheck()); vo.setNotReady(liftProtocol.getNotReady()); vo.setServoError1(liftProtocol.getServoError1()); vo.setServoError2(liftProtocol.getServoError2()); vo.setServoError3(liftProtocol.getServoError3()); vo.setServoError4(liftProtocol.getServoError4()); vo.setLiftActualSpeed(liftProtocol.getLiftActualSpeed()); vo.setPakMk(liftProtocol.getPakMk()); vo.setModel(liftProtocol.getModel()); vo.setBusy(liftProtocol.getBusy()); vo.setHasTray(liftProtocol.getHasTray()); vo.setHasCar(liftProtocol.getHasCar()); vo.setDeviceError(liftProtocol.getDeviceError()); vo.setFrontOverrun(liftProtocol.getFrontOverrun()); vo.setBackOverrun(liftProtocol.getBackOverrun()); vo.setLeftOverrun(liftProtocol.getLeftOverrun()); vo.setRightOverrun(liftProtocol.getRightOverrun()); vo.setOverHeight(liftProtocol.getOverHeight()); vo.setOverWeight(liftProtocol.getOverWeight()); } return R.ok().add(list); } @@ -116,13 +105,10 @@ vo.setWorkNo(liftProtocol.getTaskNo().intValue());//任务号 vo.setPakMk(liftProtocol.getPakMk()?"Y" : "N"); // 作业标记 vo.setLineFrontHasStock(liftProtocol.getLineFrontHasStock()); vo.setForwardRotationFeedback(liftProtocol.getForwardRotationFeedback()); vo.setReverseFeedback(liftProtocol.getReverseFeedback()); vo.setMotorOverload(liftProtocol.getMotorOverload()); vo.setLineEndHasStock(liftProtocol.getLineEndHasStock()); vo.setInConveyLineCardTrayAlarm(liftProtocol.getInConveyLineCardTrayAlarm()); vo.setOutConveyLineCardTrayAlarm(liftProtocol.getOutConveyLineCardTrayAlarm()); vo.setLev(liftProtocol.getLev()); vo.setTaskAddress(liftProtocol.getTaskAddress()); vo.setDistAddress(liftProtocol.getDistAddress()); vo.setCompleteTaskNo(liftProtocol.getCompleteTaskNo()); vo.setShuttleNo(liftProtocol.getShuttleNo().intValue()); } return R.ok().add(list); src/main/java/com/zy/asrs/domain/vo/LiftMsgTableVo.java
@@ -15,99 +15,28 @@ private String pakMk = "-"; /** * 输送线前端光电有货 * 有货为1,无货为0(前端指靠近货架侧) * 任务地址 */ private Boolean lineFrontHasStock; private Short taskAddress; /** * 输送线正转反馈 * 正转运行为1,否则为0 * 目的地址 */ private Boolean forwardRotationFeedback; private Short distAddress; /** * 输送线反转反馈 * 反转运行为1,否则为0 * 已完成的任务号 */ private Boolean reverseFeedback; private Short completeTaskNo; /** * 输送线电机过载 * 过载为0,正常为1 * 层 */ private Boolean motorOverload; /** * 输送线末端光电有货 * 有货为1,无货为0 */ private Boolean lineEndHasStock; /** * 进输送线卡托盘报警 * 报警为1,未报警为0 */ private Boolean inConveyLineCardTrayAlarm; /** * 出输送线卡托盘报警 * 报警为1,未报警为0 */ private Boolean outConveyLineCardTrayAlarm; private Short lev; /** * 穿梭车号 */ private Integer shuttleNo; public String getLineFrontHasStock$() { if (this.lineFrontHasStock == null) { return "N"; } return this.lineFrontHasStock ? "Y" : "N"; } public String getForwardRotationFeedback$() { if (this.forwardRotationFeedback == null) { return "N"; } return this.forwardRotationFeedback ? "Y" : "N"; } public String getReverseFeedback$() { if (this.reverseFeedback == null) { return "N"; } return this.reverseFeedback ? "Y" : "N"; } public String getMotorOverload$() { if (this.motorOverload == null) { return "N"; } return this.motorOverload ? "Y" : "N"; } public String getLineEndHasStock$() { if (this.lineEndHasStock == null) { return "N"; } return this.lineEndHasStock ? "Y" : "N"; } public String getInConveyLineCardTrayAlarm$() { if (this.inConveyLineCardTrayAlarm == null) { return "N"; } return this.inConveyLineCardTrayAlarm ? "Y" : "N"; } public String getOutConveyLineCardTrayAlarm$() { if (this.outConveyLineCardTrayAlarm == null) { return "N"; } return this.outConveyLineCardTrayAlarm ? "Y" : "N"; } } src/main/java/com/zy/asrs/domain/vo/LiftStateTableVo.java
@@ -16,261 +16,145 @@ private Short taskNo = 0; /** * 四向穿梭车号 */ private Short shuttleNo = 0; /** * 当前提升机状态(内部自我维护) */ private Integer protocolStatus; /** * 提升机锁定 * 模式 */ private Boolean liftLock; private Boolean model; /** * 位置到达反馈 * 忙闲 */ private Short positionArrivalFeedback; private Boolean busy; /** * 准备就绪 * 就绪为1,未就绪为0 * 有托盘 */ private Boolean ready; private Boolean hasTray; /** * 运行中 * 运行中为1,未运行为0 * 有小车 */ private Boolean running; private Boolean hasCar; /** * 联机/单机 * 联机为1,单机为0 * 设备故障 */ private Boolean mode; private Boolean deviceError; /** * 输送线前端光电有货 * 有货为1,无货为0(前端指靠近货架侧) * 前超限 */ private Boolean lineFrontHasStock; private Boolean frontOverrun; /** * 输送线正转反馈 * 正转运行为1,否则为0 * 后超限 */ private Boolean forwardRotationFeedback; private Boolean backOverrun; /** * 输送线反转反馈 * 反转运行为1,否则为0 * 左超限 */ private Boolean reverseFeedback; private Boolean leftOverrun; /** * 输送线电机过载 * 过载为0,正常为1 * 右超限 */ private Boolean motorOverload; private Boolean rightOverrun; /** * 输送线末端光电有货 * 有货为1,无货为0 * 超高 */ private Boolean lineEndHasStock; private Boolean overHeight; /** * 进输送线卡托盘报警 * 报警为1,未报警为0 * 超重 */ private Boolean inConveyLineCardTrayAlarm; private Boolean overWeight; /** * 出输送线卡托盘报警 * 报警为1,未报警为0 */ private Boolean outConveyLineCardTrayAlarm; /** * 平台位置偏差报警 * 报警为1,未报警为0 */ private Boolean platPositionDeviationAlarm; /** * 平台扭矩偏差报警 * 报警为1,未报警为0 */ private Boolean platTorqueDeviationAlarm; /** * 平台四向车检测 * 有车为1,无车为0 */ private Boolean platShuttleCheck; /** * 未就绪状态 * 1. 不在指定层 * 2. 四轴不同步 * 3. 平台前限光电被挡到(靠近货架) * 4. 平台后限光电被挡到(远离货架) * 5. 平台上限位报警 * 6. 平台下限位报警 * 7. 电柜急停报警 * 8. 输送线前限位被挡到(靠近货架) * 9. 输送线后限位被挡到(远离货架) * 10. 触摸屏紧急停止被按下 * 11. 四轴动力线断线 * 12. 单机模式 * 13. 四轴报警 * 14. 位置偏差过大 * 15. 扭矩偏差过大 * 16. 输送线过载 * 17. 进提升机卡托盘 * 18. 出提升机卡托盘 */ private Short notReady; /** * 伺服1错误 */ private Short servoError1; /** * 伺服2错误 */ private Short servoError2; /** * 伺服3错误 */ private Short servoError3; /** * 伺服4错误 */ private Short servoError4; /** * 提升机实际速度反馈 */ private Short liftActualSpeed; /** * 作业标记 */ private Boolean pakMk = true; public String getLiftLock$() { if (this.liftLock == null) { return "N"; public String getModel$() { if (this.model == null) { return "离线"; } return this.liftLock ? "Y" : "N"; return this.model ? "自动" : "手动"; } public String getReady$() { if (this.ready == null) { return "N"; } return this.ready ? "Y" : "N"; } public String getNotReady$() { if (this.notReady == null) { public String getBusy$() { if (this.busy == null) { return "-"; } return LiftNotReadyType.get((int) this.notReady).desc; return this.busy ? "忙碌" : "空闲"; } public String getRunning$() { if (this.running == null) { return "N"; public String getHasTray$() { if (this.hasTray == null) { return "-"; } return this.running ? "Y" : "N"; return this.hasTray ? "Y" : "N"; } public String getMode$() { if (this.mode == null) { public String getHasCar$() { if (this.hasCar == null) { return "N"; } return this.mode ? "Y" : "N"; return this.hasCar ? "Y" : "N"; } public String getLineFrontHasStock$() { if (this.lineFrontHasStock == null) { public String getDeviceError$() { if (this.deviceError == null) { return "N"; } return this.lineFrontHasStock ? "Y" : "N"; return this.deviceError ? "Y" : "N"; } public String getForwardRotationFeedback$() { if (this.forwardRotationFeedback == null) { public String getFrontOverrun$() { if (this.frontOverrun == null) { return "N"; } return this.forwardRotationFeedback ? "Y" : "N"; return this.frontOverrun ? "Y" : "N"; } public String getReverseFeedback$() { if (this.reverseFeedback == null) { public String getBackOverrun$() { if (this.backOverrun == null) { return "N"; } return this.reverseFeedback ? "Y" : "N"; return this.backOverrun ? "Y" : "N"; } public String getMotorOverload$() { if (this.motorOverload == null) { public String getLeftOverrun$() { if (this.leftOverrun == null) { return "N"; } return this.motorOverload ? "Y" : "N"; return this.leftOverrun ? "Y" : "N"; } public String getLineEndHasStock$() { if (this.lineEndHasStock == null) { public String getRightOverrun$() { if (this.rightOverrun == null) { return "N"; } return this.lineEndHasStock ? "Y" : "N"; return this.rightOverrun ? "Y" : "N"; } public String getInConveyLineCardTrayAlarm$() { if (this.inConveyLineCardTrayAlarm == null) { public String getOverHeight$() { if (this.overHeight == null) { return "N"; } return this.inConveyLineCardTrayAlarm ? "Y" : "N"; return this.overHeight ? "Y" : "N"; } public String getOutConveyLineCardTrayAlarm$() { if (this.outConveyLineCardTrayAlarm == null) { public String getOverWeight$() { if (this.overWeight == null) { return "N"; } return this.outConveyLineCardTrayAlarm ? "Y" : "N"; } public String getPlatPositionDeviationAlarm$() { if (this.platPositionDeviationAlarm == null) { return "N"; } return this.platPositionDeviationAlarm ? "Y" : "N"; } public String getPlatTorqueDeviationAlarm$() { if (this.platTorqueDeviationAlarm == null) { return "N"; } return this.platTorqueDeviationAlarm ? "Y" : "N"; } public String getPlatShuttleCheck$() { if (this.platShuttleCheck == null) { return "N"; } return this.platShuttleCheck ? "Y" : "N"; } public String getPakMk$() { if (this.pakMk == null) { return "N"; } return this.pakMk ? "Y" : "N"; return this.overWeight ? "Y" : "N"; } public String getProtocolStatus$() { src/main/java/com/zy/asrs/entity/BasLift.java
@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotations.TableField; import java.text.SimpleDateFormat; import java.util.Date; import com.zy.core.model.protocol.NyShuttleProtocol; import org.springframework.format.annotation.DateTimeFormat; import com.core.common.SpringUtils; import com.zy.system.service.UserService; @@ -72,152 +74,120 @@ private Boolean pakMk; /** * 提升机锁定 * 提升机坐标 */ @ApiModelProperty(value= "提升机锁定") @TableField("lift_lock") private Boolean liftLock; @ApiModelProperty(value= "提升机坐标") @TableField("point") private NyShuttleProtocol.NyShuttlePointClass point; /** * 位置到达反馈 * 模式 */ @ApiModelProperty(value= "位置到达反馈") @TableField("position_arrival_feedback") private Integer positionArrivalFeedback; @ApiModelProperty(value= "模式") @TableField("model") private Boolean model; /** * 准备就绪 * 忙闲 */ @ApiModelProperty(value= "准备就绪") private Boolean ready; @ApiModelProperty(value= "忙闲") @TableField("busy") private Boolean busy; /** * 运行中 * 前超限 */ @ApiModelProperty(value= "运行中") private Boolean running; @ApiModelProperty(value= "前超限") @TableField("front_overrun") private Boolean frontOverrun; /** * 联机/单机 * 后超限 */ @ApiModelProperty(value= "联机/单机") private Boolean mode; @ApiModelProperty(value= "后超限") @TableField("back_overrun") private Boolean backOverrun; /** * 输送线前端光电有货 * 左超限 */ @ApiModelProperty(value= "输送线前端光电有货") @TableField("line_front_has_stock") private Boolean lineFrontHasStock; @ApiModelProperty(value= "左超限") @TableField("left_overrun") private Boolean leftOverrun; /** * 输送线正转反馈 * 右超限 */ @ApiModelProperty(value= "输送线正转反馈") @TableField("forward_rotation_feedback") private Boolean forwardRotationFeedback; @ApiModelProperty(value= "右超限") @TableField("right_overrun") private Boolean rightOverrun; /** * 输送线反转反馈 * 超高 */ @ApiModelProperty(value= "输送线反转反馈") @TableField("reverse_feedback") private Boolean reverseFeedback; @ApiModelProperty(value= "超高") @TableField("over_height") private Boolean overHeight; /** * 输送线电机过载 * 超重 */ @ApiModelProperty(value= "输送线电机过载") @TableField("motor_overload") private Boolean motorOverload; @ApiModelProperty(value= "超重") @TableField("over_weight") private Boolean overWeight; /** * 输送线末端光电有货 * 有托盘 */ @ApiModelProperty(value= "输送线末端光电有货") @TableField("line_end_has_stock") private Boolean lineEndHasStock; @ApiModelProperty(value= "有托盘") @TableField("has_tray") private Boolean hasTray; /** * 进输送线卡托盘报警 * 有小车 */ @ApiModelProperty(value= "进输送线卡托盘报警") @TableField("in_convey_line_card_tray_alarm") private Boolean inConveyLineCardTrayAlarm; @ApiModelProperty(value= "有小车") @TableField("has_car") private Boolean hasCar; /** * 出输送线卡托盘报警 * 设备故障 */ @ApiModelProperty(value= "出输送线卡托盘报警") @TableField("out_convey_line_card_tray_alarm") private Boolean outConveyLineCardTrayAlarm; @ApiModelProperty(value= "设备故障") @TableField("device_error") private Boolean deviceError; /** * 平台位置偏差报警 * 任务地址 */ @ApiModelProperty(value= "平台位置偏差报警") @TableField("plat_position_deviation_alarm") private Boolean platPositionDeviationAlarm; @ApiModelProperty(value= "任务地址") @TableField("task_address") private Integer taskAddress; /** * 平台扭矩偏差报警 * 目的地址 */ @ApiModelProperty(value= "平台扭矩偏差报警") @TableField("plat_torque_deviation_alarm") private Boolean platTorqueDeviationAlarm; @ApiModelProperty(value= "目的地址") @TableField("dist_address") private Integer distAddress; /** * 平台四向车检测 * 已完成任务号 */ @ApiModelProperty(value= "平台四向车检测") @TableField("plat_shuttle_check") private Boolean platShuttleCheck; @ApiModelProperty(value= "已完成任务号") @TableField("complete_task_no") private Integer completeTaskNo; /** * 未就绪状态 * 楼层 */ @ApiModelProperty(value= "未就绪状态") @TableField("not_ready") private Integer notReady; /** * 伺服1错误 */ @ApiModelProperty(value= "伺服1错误") @TableField("servo_error1") private Integer servoError1; /** * 伺服2错误 */ @ApiModelProperty(value= "伺服2错误") @TableField("servo_error2") private Integer servoError2; /** * 伺服3错误 */ @ApiModelProperty(value= "伺服3错误") @TableField("servo_error3") private Integer servoError3; /** * 伺服4错误 */ @ApiModelProperty(value= "伺服4错误") @TableField("servo_error4") private Integer servoError4; /** * 提升机实际速度反馈 */ @ApiModelProperty(value= "提升机实际速度反馈") @TableField("lift_actual_speed") private Integer liftActualSpeed; @ApiModelProperty(value= "楼层") @TableField("lev") private Integer lev; public BasLift() {} public BasLift(Integer liftNo,Integer status,Integer wrkNo,Date updateTime,Long updateBy,String memo,Boolean pakMk,Boolean liftLock,Integer positionArrivalFeedback,Boolean ready,Boolean running,Boolean mode,Boolean lineFrontHasStock,Boolean forwardRotationFeedback,Boolean reverseFeedback,Boolean motorOverload,Boolean lineEndHasStock,Boolean inConveyLineCardTrayAlarm,Boolean outConveyLineCardTrayAlarm,Boolean platPositionDeviationAlarm,Boolean platTorqueDeviationAlarm,Boolean platShuttleCheck,Integer notReady,Integer servoError1,Integer servoError2,Integer servoError3,Integer servoError4,Integer liftActualSpeed) { public BasLift(Integer liftNo, Integer status, Integer wrkNo, Date updateTime, Long updateBy, String memo, Boolean pakMk, NyShuttleProtocol.NyShuttlePointClass point, Boolean model, Boolean busy, Boolean frontOverrun, Boolean backOverrun, Boolean leftOverrun, Boolean rightOverrun, Boolean overHeight, Boolean overWeight, Boolean hasTray, Boolean hasCar, Boolean deviceError, Integer taskAddress, Integer distAddress, Integer completeTaskNo, Integer lev) { this.liftNo = liftNo; this.status = status; this.wrkNo = wrkNo; @@ -225,59 +195,23 @@ this.updateBy = updateBy; this.memo = memo; this.pakMk = pakMk; this.liftLock = liftLock; this.positionArrivalFeedback = positionArrivalFeedback; this.ready = ready; this.running = running; this.mode = mode; this.lineFrontHasStock = lineFrontHasStock; this.forwardRotationFeedback = forwardRotationFeedback; this.reverseFeedback = reverseFeedback; this.motorOverload = motorOverload; this.lineEndHasStock = lineEndHasStock; this.inConveyLineCardTrayAlarm = inConveyLineCardTrayAlarm; this.outConveyLineCardTrayAlarm = outConveyLineCardTrayAlarm; this.platPositionDeviationAlarm = platPositionDeviationAlarm; this.platTorqueDeviationAlarm = platTorqueDeviationAlarm; this.platShuttleCheck = platShuttleCheck; this.notReady = notReady; this.servoError1 = servoError1; this.servoError2 = servoError2; this.servoError3 = servoError3; this.servoError4 = servoError4; this.liftActualSpeed = liftActualSpeed; this.point = point; this.model = model; this.busy = busy; this.frontOverrun = frontOverrun; this.backOverrun = backOverrun; this.leftOverrun = leftOverrun; this.rightOverrun = rightOverrun; this.overHeight = overHeight; this.overWeight = overWeight; this.hasTray = hasTray; this.hasCar = hasCar; this.deviceError = deviceError; this.taskAddress = taskAddress; this.distAddress = distAddress; this.completeTaskNo = completeTaskNo; this.lev = lev; } // BasLift basLift = new BasLift( // null, // 提升机号[非空] // null, // 当前提升机状态 // null, // 任务号 // null, // 修改时间 // null, // 修改人员 // null, // 备注 // null, // 作业标记 // null, // 提升机锁定 // null, // 位置到达反馈 // null, // 准备就绪 // null, // 运行中 // null, // 联机/单机 // null, // 输送线前端光电有货 // null, // 输送线正转反馈 // null, // 输送线反转反馈 // null, // 输送线电机过载 // null, // 输送线末端光电有货 // null, // 进输送线卡托盘报警 // null, // 出输送线卡托盘报警 // null, // 平台位置偏差报警 // null, // 平台扭矩偏差报警 // null, // 平台四向车检测 // null, // 未就绪状态 // null, // 伺服1错误 // null, // 伺服2错误 // null, // 伺服3错误 // null, // 伺服4错误 // null // 提升机实际速度反馈 // ); public String getUpdateTime$(){ if (Cools.isEmpty(this.updateTime)){ @@ -293,24 +227,6 @@ return String.valueOf(user.getUsername()); } return null; } public void setPositionArrivalFeedback(Integer lev) { switch (lev) { case 1: case 2: this.positionArrivalFeedback = 1; break; case 4: this.positionArrivalFeedback = 2; break; case 8: this.positionArrivalFeedback = 3; break; case 16: this.positionArrivalFeedback = 4; break; } } src/main/java/com/zy/core/model/protocol/LiftProtocol.java
@@ -5,8 +5,6 @@ import lombok.Data; import lombok.extern.slf4j.Slf4j; import java.util.Date; /** * 提升机 */ @@ -18,11 +16,6 @@ * 提升机号 */ private Short liftNo; /** * 提升机内部二维码 */ private Short barcode = 1661; /** * 任务号 @@ -45,145 +38,79 @@ private LiftProtocolStatusType protocolStatusType = LiftProtocolStatusType.IDLE; /** * 模式 */ private Boolean model; /** * 忙闲 */ private Boolean busy; /** * 前超限 */ private Boolean frontOverrun; /** * 后超限 */ private Boolean backOverrun; /** * 左超限 */ private Boolean leftOverrun; /** * 右超限 */ private Boolean rightOverrun; /** * 超高 */ private Boolean overHeight; /** * 超重 */ private Boolean overWeight; /** * 有托盘 */ private Boolean hasTray; /** * 有小车 */ private Boolean hasCar; /** * 设备故障 */ private Boolean deviceError; /** * 任务地址 */ private Short taskAddress; /** * 目的地址 */ private Short distAddress; /** * 已完成的任务号 */ private Short completeTaskNo; /** * 层 */ private Short lev; /** * 提升机锁定 */ private Boolean liftLock; /** * 位置到达反馈 */ private Short positionArrivalFeedback; /** * 准备就绪 * 就绪为1,未就绪为0 */ private Boolean ready; /** * 运行中 * 运行中为1,未运行为0 */ private Boolean running; /** * 联机/单机 * 联机为1,单机为0 */ private Boolean mode; /** * 输送线前端光电有货 * 有货为1,无货为0(前端指靠近货架侧) */ private Boolean lineFrontHasStock; /** * 输送线正转反馈 * 正转运行为1,否则为0 */ private Boolean forwardRotationFeedback; /** * 输送线反转反馈 * 反转运行为1,否则为0 */ private Boolean reverseFeedback; /** * 输送线电机过载 * 过载为0,正常为1 */ private Boolean motorOverload; /** * 输送线末端光电有货 * 有货为1,无货为0 */ private Boolean lineEndHasStock; /** * 进输送线卡托盘报警 * 报警为1,未报警为0 */ private Boolean inConveyLineCardTrayAlarm; /** * 出输送线卡托盘报警 * 报警为1,未报警为0 */ private Boolean outConveyLineCardTrayAlarm; /** * 平台位置偏差报警 * 报警为1,未报警为0 */ private Boolean platPositionDeviationAlarm; /** * 平台扭矩偏差报警 * 报警为1,未报警为0 */ private Boolean platTorqueDeviationAlarm; /** * 平台四向车检测 * 有车为1,无车为0 */ private Boolean platShuttleCheck; /** * 未就绪状态 * 1. 不在指定层 * 2. 四轴不同步 * 3. 平台前限光电被挡到(靠近货架) * 4. 平台后限光电被挡到(远离货架) * 5. 平台上限位报警 * 6. 平台下限位报警 * 7. 电柜急停报警 * 8. 输送线前限位被挡到(靠近货架) * 9. 输送线后限位被挡到(远离货架) * 10. 触摸屏紧急停止被按下 * 11. 四轴动力线断线 * 12. 单机模式 * 13. 四轴报警 * 14. 位置偏差过大 * 15. 扭矩偏差过大 * 16. 输送线过载 * 17. 进提升机卡托盘 * 18. 出提升机卡托盘 */ private Short notReady; /** * 伺服1错误 */ private Short servoError1; /** * 伺服2错误 */ private Short servoError2; /** * 伺服3错误 */ private Short servoError3; /** * 伺服4错误 */ private Short servoError4; /** * 提升机实际速度反馈 */ private Short liftActualSpeed; /** * 作业标记 @@ -191,43 +118,9 @@ private Boolean pakMk = true; /** * 四向穿梭车调度提升机时,需要锁定此标记 */ private Boolean securityMk = false; /** * 任务命令 */ private LiftAssignCommand assignCommand; /** * 出入库模式,1:入库,2:出库 */ private Integer outInModel; /** * 出入库模式起始站点 */ private Integer startSta; /** * 出入库模式目标站点 */ private Integer distSta; /** * 出入库模式步数 */ private Integer outInModelStep; /** * 工作时间 */ private Date wrkTime; public Short getLiftLockShortValue() { return liftLock ? (short) 1 : (short) 0; } /** * 设置提升机状态 @@ -248,22 +141,19 @@ // 是否处于空闲待命状态 public Boolean isIdle(Short taskNo) { if(this.taskNo == null || this.liftLock == null || this.ready == null || this.running == null || this.mode == null || this.busy == null || this.model == null || this.deviceError == null || this.pakMk == null ){ return false; } boolean res = (this.taskNo == 0 || this.taskNo.intValue() == taskNo.intValue()) && !this.liftLock // && this.ready && !this.running && this.mode && !this.busy && this.model && this.pakMk.equals(true) && !this.securityMk && !this.deviceError ; return res; } @@ -271,22 +161,19 @@ // 是否处于空闲待命状态 public Boolean isIdle() { if(this.taskNo == null || this.liftLock == null || this.ready == null || this.running == null || this.mode == null || this.busy == null || this.model == null || this.deviceError == null || this.pakMk == null ){ return false; } boolean res = this.taskNo == 0 && !this.liftLock // && this.ready && !this.running && this.mode && !this.busy && this.model && this.pakMk.equals(true) && !this.securityMk && !this.deviceError ; return res; } @@ -294,64 +181,20 @@ // 是否处于空闲待命状态,不判断任务号 public Boolean isIdleNoTask() { if(this.taskNo == null || this.liftLock == null || this.ready == null || this.running == null || this.mode == null || this.busy == null || this.model == null || this.deviceError == null || this.pakMk == null ){ return false; } boolean res = !this.liftLock // && this.ready && !this.running && this.mode && this.pakMk && !this.securityMk boolean res = !this.busy && this.model && this.pakMk.equals(true) && !this.deviceError ; return res; } public void setPositionArrivalFeedback(Short position) { Short lev = null; switch (position) { case 1: lev = 1; break; case 4: lev = 2; break; case 8: lev = 3; break; case 16: lev = 4; break; } this.lev = lev;//层高 this.positionArrivalFeedback = position;//位置到达反馈 } public Integer getPositionArrivalFeedback$() { if (this.positionArrivalFeedback == null) { return null; } switch (this.positionArrivalFeedback) { case 1: return 1; case 2: return 2; case 4: return 3; case 8: return 4; case 16: return 5; } return null; } src/main/java/com/zy/core/thread/LiftThread.java
@@ -118,12 +118,12 @@ readStatus(); //提升机处于运行状态,将标记置为true if (liftProtocol.getRunning()) { if (liftProtocol.getBusy()) { liftProtocol.setPakMk(true); } //提升机处于未运行、就绪、标记true、有任务号 if (!liftProtocol.getRunning() if (!liftProtocol.getBusy() && liftProtocol.getPakMk() && liftProtocol.getTaskNo() != 0) { //还有未完成的命令 @@ -136,7 +136,7 @@ private void readStatus() { try { OperateResultExOne<byte[]> result = siemensS7Net.Read("DB100.200", (short) 24); OperateResultExOne<byte[]> result = siemensS7Net.Read("M100.0", (short) 28); if (result.IsSuccess) { if (null == liftProtocol) { liftProtocol = new LiftProtocol(); @@ -145,97 +145,74 @@ //----------读取提升机状态----------- //获取数据 // byte[] content = result.Content; // //提升机锁定 // liftProtocol.setLiftLock(CommonUtils.shortToBoolean(modbusTcpNet.getByteTransform().TransInt16(content, 0))); // //位置到达反馈 // liftProtocol.setPositionArrivalFeedback(modbusTcpNet.getByteTransform().TransInt16(content,2)); // // // byte b1 = modbusTcpNet.getByteTransform().TransByte(content, 5); // byte b2 = modbusTcpNet.getByteTransform().TransByte(content, 4); // int[] datas1 = CommonUtils.byteToBits(b1); // int[] datas2 = CommonUtils.byteToBits(b2); // //准备就绪 // liftProtocol.setReady(CommonUtils.intToBoolean(datas1[0])); // //运行中 // liftProtocol.setRunning(CommonUtils.intToBoolean(datas1[1])); // //联机/单机 // liftProtocol.setMode(CommonUtils.intToBoolean(datas1[2])); // //输送线前端光电有货 // liftProtocol.setLineFrontHasStock(CommonUtils.intToBoolean(datas1[3])); // //输送线正转反馈 // liftProtocol.setForwardRotationFeedback(CommonUtils.intToBoolean(datas1[4])); // //输送线反转反馈 // liftProtocol.setReverseFeedback(CommonUtils.intToBoolean(datas1[5])); // //输送线电机过载 // liftProtocol.setMotorOverload(CommonUtils.intToBoolean(datas1[6])); // //输送线末端光电有货 // liftProtocol.setLineEndHasStock(CommonUtils.intToBoolean(datas1[7])); // //进输送线卡托盘报警 // liftProtocol.setInConveyLineCardTrayAlarm(CommonUtils.intToBoolean(datas2[0])); // //出输送线卡托盘报警 // liftProtocol.setOutConveyLineCardTrayAlarm(CommonUtils.intToBoolean(datas2[1])); // //平台位置偏差报警 // liftProtocol.setPlatPositionDeviationAlarm(CommonUtils.intToBoolean(datas2[2])); // //平台扭矩偏差报警 // liftProtocol.setPlatTorqueDeviationAlarm(CommonUtils.intToBoolean(datas2[3])); // //平台四向车检测 // liftProtocol.setPlatShuttleCheck(CommonUtils.intToBoolean(datas2[4])); // // //未就绪状态 // liftProtocol.setNotReady(modbusTcpNet.getByteTransform().TransInt16(content,6)); // //伺服1错误 // liftProtocol.setServoError1(modbusTcpNet.getByteTransform().TransInt16(content,8)); // //伺服2错误 // liftProtocol.setServoError2(modbusTcpNet.getByteTransform().TransInt16(content,10)); // //伺服3错误 // liftProtocol.setServoError3(modbusTcpNet.getByteTransform().TransInt16(content,12)); // //伺服4错误 // liftProtocol.setServoError4(modbusTcpNet.getByteTransform().TransInt16(content,14)); // //提升机实际速度反馈 // liftProtocol.setLiftActualSpeed(modbusTcpNet.getByteTransform().TransInt16(content,16)); // // ///读取提升机状态-end // // //将提升机状态保存至数据库 // BasLiftService liftService = SpringUtils.getBean(BasLiftService.class); // BasLift basLift = liftService.selectById(liftProtocol.getLiftNo()); // if (basLift == null) { // basLift = new BasLift(); // //提升机号 // basLift.setLiftNo(slave.getId()); // liftService.insert(basLift); // } // basLift.setStatus(liftProtocol.getProtocolStatus()); // basLift.setWrkNo(liftProtocol.getTaskNo().intValue()); // basLift.setUpdateTime(new Date()); // basLift.setPakMk(liftProtocol.getPakMk()); // basLift.setLiftLock(liftProtocol.getLiftLock()); // basLift.setPositionArrivalFeedback(liftProtocol.getPositionArrivalFeedback().intValue()); // basLift.setReady(liftProtocol.getReady()); // basLift.setRunning(liftProtocol.getRunning()); // basLift.setMode(liftProtocol.getMode()); // basLift.setLineFrontHasStock(liftProtocol.getLineFrontHasStock()); // basLift.setForwardRotationFeedback(liftProtocol.getForwardRotationFeedback()); // basLift.setReverseFeedback(liftProtocol.getReverseFeedback()); // basLift.setMotorOverload(liftProtocol.getMotorOverload()); // basLift.setLineEndHasStock(liftProtocol.getLineEndHasStock()); // basLift.setInConveyLineCardTrayAlarm(liftProtocol.getInConveyLineCardTrayAlarm()); // basLift.setOutConveyLineCardTrayAlarm(liftProtocol.getOutConveyLineCardTrayAlarm()); // basLift.setPlatPositionDeviationAlarm(liftProtocol.getPlatPositionDeviationAlarm()); // basLift.setPlatTorqueDeviationAlarm(liftProtocol.getPlatTorqueDeviationAlarm()); // basLift.setPlatShuttleCheck(liftProtocol.getPlatShuttleCheck()); // basLift.setNotReady(liftProtocol.getNotReady().intValue()); // basLift.setServoError1(liftProtocol.getServoError1().intValue()); // basLift.setServoError2(liftProtocol.getServoError2().intValue()); // basLift.setServoError3(liftProtocol.getServoError3().intValue()); // basLift.setServoError4(liftProtocol.getServoError4().intValue()); // basLift.setLiftActualSpeed(liftProtocol.getLiftActualSpeed().intValue()); // if (liftService.updateById(basLift)) { // OutputQueue.LIFT.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId())); //// log.info(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId())); // } byte[] content = result.Content; //模式 liftProtocol.setModel(siemensS7Net.getByteTransform().TransBool(content, 0)); //忙闲 liftProtocol.setBusy(siemensS7Net.getByteTransform().TransBool(content, 1)); //前超限 liftProtocol.setFrontOverrun(siemensS7Net.getByteTransform().TransBool(content, 7)); //后超限 liftProtocol.setBackOverrun(siemensS7Net.getByteTransform().TransBool(content, 8)); //左超限 liftProtocol.setLeftOverrun(siemensS7Net.getByteTransform().TransBool(content, 9)); //右超限 liftProtocol.setRightOverrun(siemensS7Net.getByteTransform().TransBool(content, 10)); //超高 liftProtocol.setOverHeight(siemensS7Net.getByteTransform().TransBool(content, 11)); //超重 liftProtocol.setOverWeight(siemensS7Net.getByteTransform().TransBool(content, 12)); //有托盘 liftProtocol.setHasTray(siemensS7Net.getByteTransform().TransBool(content, 16)); //有小车 liftProtocol.setHasCar(siemensS7Net.getByteTransform().TransBool(content, 17)); //设备故障 liftProtocol.setDeviceError(siemensS7Net.getByteTransform().TransBool(content, 18)); //任务号 liftProtocol.setTaskNo(siemensS7Net.getByteTransform().TransInt16(content, 19)); //任务地址 liftProtocol.setTaskAddress(siemensS7Net.getByteTransform().TransInt16(content, 21)); //目的地址 liftProtocol.setDistAddress(siemensS7Net.getByteTransform().TransInt16(content, 21)); //已完成任务号 liftProtocol.setCompleteTaskNo(siemensS7Net.getByteTransform().TransInt16(content, 23)); //当前楼层 liftProtocol.setLev(siemensS7Net.getByteTransform().TransInt16(content, 25)); ///读取提升机状态-end //将提升机状态保存至数据库 BasLiftService liftService = SpringUtils.getBean(BasLiftService.class); BasLift basLift = liftService.selectById(liftProtocol.getLiftNo()); if (basLift == null) { basLift = new BasLift(); //提升机号 basLift.setLiftNo(slave.getId()); liftService.insert(basLift); } basLift.setStatus(liftProtocol.getProtocolStatus()); basLift.setWrkNo(liftProtocol.getTaskNo().intValue()); basLift.setUpdateTime(new Date()); basLift.setPakMk(liftProtocol.getPakMk()); basLift.setModel(liftProtocol.getModel()); basLift.setBusy(liftProtocol.getBusy()); basLift.setFrontOverrun(liftProtocol.getFrontOverrun()); basLift.setBackOverrun(liftProtocol.getBackOverrun()); basLift.setLeftOverrun(liftProtocol.getLeftOverrun()); basLift.setRightOverrun(liftProtocol.getRightOverrun()); basLift.setOverHeight(liftProtocol.getOverHeight()); basLift.setOverWeight(liftProtocol.getOverWeight()); basLift.setHasTray(liftProtocol.getHasTray()); basLift.setHasCar(liftProtocol.getHasCar()); basLift.setDeviceError(liftProtocol.getDeviceError()); basLift.setTaskAddress(liftProtocol.getTaskAddress().intValue()); basLift.setDistAddress(liftProtocol.getDistAddress().intValue()); basLift.setCompleteTaskNo(liftProtocol.getCompleteTaskNo().intValue()); basLift.setLev(liftProtocol.getLev().intValue()); if (liftService.updateById(basLift)) { OutputQueue.LIFT.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId())); // log.info(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId())); } }else { OutputQueue.LIFT.offer(MessageFormat.format("【{0}】{1}提升机plc状态信息失败", DateUtils.convert(new Date()), slave.getId())); @@ -419,42 +396,42 @@ int size = commands.size(); LiftAssignCommand assignCommand = redisCommand.getAssignCommand(); if (commandStep != 0) { //判断上一条指令是否完成 LiftCommand command = commands.get(commandStep - 1); if (command.getRun().intValue() == 1) { //提升机升降命令 if (command.getDistPosition().intValue() == liftProtocol.getPositionArrivalFeedback().intValue()) { //提升机目标楼层和实际楼层相同,则认定命令完成 command.setComplete(true); } } else if (command.getRun().intValue() == 2 || command.getRun().intValue() == 3) { //无货正转,有货正转 if (!liftProtocol.getForwardRotationFeedback()) { //输送线正转反馈不在运行中,认定命令完成 command.setComplete(true); } } else if (command.getRun().intValue() == 6 || command.getRun().intValue() == 7) { //有货反转,无货反转 if (!liftProtocol.getReverseFeedback()) { //输送线反转反馈不在运行中,认定命令完成 command.setComplete(true); } } else if (command.getRun().intValue() == 4) { //输送线停止 if (!liftProtocol.getForwardRotationFeedback() && !liftProtocol.getReverseFeedback()) { //输送线正转反转都不在运行中,认定命令完成 command.setComplete(true); } } //任务数据保存到redis redisUtil.set("lift_wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand)); if (!command.getComplete()) { //上一条任务未完成,禁止下发命令 return false; } } // if (commandStep != 0) { // //判断上一条指令是否完成 // LiftCommand command = commands.get(commandStep - 1); // if (command.getRun().intValue() == 1) { // //提升机升降命令 // if (command.getDistPosition().intValue() == liftProtocol.getPositionArrivalFeedback().intValue()) { // //提升机目标楼层和实际楼层相同,则认定命令完成 // command.setComplete(true); // } // } else if (command.getRun().intValue() == 2 || command.getRun().intValue() == 3) { // //无货正转,有货正转 // if (!liftProtocol.getForwardRotationFeedback()) { // //输送线正转反馈不在运行中,认定命令完成 // command.setComplete(true); // } // } else if (command.getRun().intValue() == 6 || command.getRun().intValue() == 7) { // //有货反转,无货反转 // if (!liftProtocol.getReverseFeedback()) { // //输送线反转反馈不在运行中,认定命令完成 // command.setComplete(true); // } // } else if (command.getRun().intValue() == 4) { // //输送线停止 // if (!liftProtocol.getForwardRotationFeedback() && !liftProtocol.getReverseFeedback()) { // //输送线正转反转都不在运行中,认定命令完成 // command.setComplete(true); // } // } // //任务数据保存到redis // redisUtil.set("lift_wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand)); // // if (!command.getComplete()) { // //上一条任务未完成,禁止下发命令 // return false; // } // } //取出命令 LiftCommand command = commands.get(commandStep); @@ -503,7 +480,6 @@ return false; }else { News.info("提升机命令下发成功,提升机号={},任务数据={}", command.getLiftNo(), JSON.toJSON(command)); liftProtocol.setWrkTime(new Date());//更新工作时间 //将标记置为false(防止重发) liftProtocol.setPakMk(false); src/main/webapp/views/lift.html
@@ -29,20 +29,17 @@ <th>提升机</th> <th>工作号</th> <th>任务状态</th> <th>提升机锁定</th> <th>位置到达反馈</th> <th>准备就绪</th> <th>运行中</th> <th>联机/单机</th> <th>平台位置偏差报警</th> <th>平台扭矩偏差报警</th> <th>平台四向车检测</th> <th>未就绪状态</th> <th>伺服1错误</th> <th>伺服2错误</th> <th>伺服3错误</th> <th>伺服4错误</th> <th>提升机实际速度反馈</th> <th>模式</th> <th>忙闲</th> <th>有托盘</th> <th>有小车</th> <th>设备故障</th> <th>前超限</th> <th>后超限</th> <th>左超限</th> <th>右超限</th> <th>超高</th> <th>超重</th> </tr> </thead> <tbody> @@ -57,13 +54,10 @@ <tr> <th>提升机</th> <th>工作号</th> <th>输送线前端光电有货</th> <th>输送线正转反馈</th> <th>输送线反转反馈</th> <th>输送线电机过载</th> <th>输送线末端光电有货</th> <th>进输送线卡托盘报警</th> <th>出输送线卡托盘报警</th> <th>任务地址</th> <th>目的地址</th> <th>已完成的任务号</th> <th>层</th> <th>作业标记</th> <th>穿梭车号</th> </tr> @@ -104,11 +98,6 @@ <option value="2">输送线位置</option> </select> <button class="item" onclick="liftOperator(1)">移动提升机</button> <button class="item" onclick="liftOperator(3)">无货正转</button> <button class="item" onclick="liftOperator(4)">无货反转</button> <button class="item" onclick="liftOperator(5)">有货正转</button> <button class="item" onclick="liftOperator(6)">有货反转</button> <button class="item" onclick="liftOperator(7)">链条停止</button> <button class="item" onclick="liftOperator(0)">复位</button> </div> </fieldset> @@ -263,20 +252,17 @@ setVal(tr.children("td").eq(0), table[i-1].liftNo); setVal(tr.children("td").eq(1), table[i-1].taskNo); setVal(tr.children("td").eq(2), table[i-1].protocolStatus$); setVal(tr.children("td").eq(3), table[i-1].liftLock$); setVal(tr.children("td").eq(4), table[i-1].positionArrivalFeedback); setVal(tr.children("td").eq(5), table[i-1].ready$); setVal(tr.children("td").eq(6), table[i-1].running$); setVal(tr.children("td").eq(7), table[i-1].mode$); setVal(tr.children("td").eq(8), table[i-1].platPositionDeviationAlarm$); setVal(tr.children("td").eq(9), table[i-1].platTorqueDeviationAlarm$); setVal(tr.children("td").eq(10), table[i-1].platShuttleCheck$); setVal(tr.children("td").eq(11), table[i-1].notReady$); setVal(tr.children("td").eq(12), table[i-1].servoError1); setVal(tr.children("td").eq(13), table[i-1].servoError2); setVal(tr.children("td").eq(14), table[i-1].servoError3); setVal(tr.children("td").eq(15), table[i-1].servoError4); setVal(tr.children("td").eq(16), table[i-1].liftActualSpeed); setVal(tr.children("td").eq(3), table[i-1].model$); setVal(tr.children("td").eq(4), table[i-1].busy$); setVal(tr.children("td").eq(5), table[i-1].hasTray$); setVal(tr.children("td").eq(6), table[i-1].hasCar$); setVal(tr.children("td").eq(7), table[i-1].deviceError$); setVal(tr.children("td").eq(8), table[i-1].frontOverrun$); setVal(tr.children("td").eq(9), table[i-1].backOverrun$); setVal(tr.children("td").eq(10), table[i-1].leftOverrun$); setVal(tr.children("td").eq(11), table[i-1].rightOverrun$); setVal(tr.children("td").eq(12), table[i-1].overHeight$); setVal(tr.children("td").eq(13), table[i-1].overWeight$); } } else if (res.code === 403){ window.location.href = baseUrl+"/login"; @@ -305,15 +291,12 @@ var tr = tableEl.find("tr").eq(i); setVal(tr.children("td").eq(0), table[i-1].liftNo); setVal(tr.children("td").eq(1), table[i-1].workNo); setVal(tr.children("td").eq(2), table[i-1].lineFrontHasStock$); setVal(tr.children("td").eq(3), table[i-1].forwardRotationFeedback$); setVal(tr.children("td").eq(4), table[i-1].reverseFeedback$); setVal(tr.children("td").eq(5), table[i-1].motorOverload$); setVal(tr.children("td").eq(6), table[i-1].lineEndHasStock$); setVal(tr.children("td").eq(7), table[i-1].inConveyLineCardTrayAlarm$); setVal(tr.children("td").eq(8), table[i-1].outConveyLineCardTrayAlarm$); setVal(tr.children("td").eq(9), table[i-1].pakMk); setVal(tr.children("td").eq(10), table[i-1].shuttleNo); setVal(tr.children("td").eq(2), table[i-1].taskAddress); setVal(tr.children("td").eq(3), table[i-1].distAddress); setVal(tr.children("td").eq(4), table[i-1].completeTaskNo); setVal(tr.children("td").eq(5), table[i-1].lev); setVal(tr.children("td").eq(6), table[i-1].pakMk); setVal(tr.children("td").eq(7), table[i-1].shuttleNo); } } else if (res.code === 403){ window.location.href = baseUrl+"/login";