src/main/java/com/zy/asrs/controller/CarController.java
@@ -1,7 +1,37 @@ package com.zy.asrs.controller; import com.zy.asrs.service.BasSteErrService; import com.zy.asrs.service.BasSteService; import com.zy.asrs.service.LocMastService; import com.zy.asrs.service.WrkMastService; import com.zy.asrs.service.impl.MainServiceImpl; import com.zy.core.properties.SlaveProperties; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * 穿梭车接口 * Created by vincent on 2022/3/14 */ @Slf4j @RestController @RequestMapping("/car") public class CarController { private SlaveProperties slaveProperties; @Autowired private WrkMastService wrkMastService; @Autowired private BasSteErrService basSteErrService; @Autowired private BasSteService basSteService; @Autowired private MainServiceImpl mainService; @Autowired private LocMastService locMastService; } src/main/java/com/zy/asrs/entity/BasSteErr.java
New file @@ -0,0 +1,148 @@ package com.zy.asrs.entity; import com.baomidou.mybatisplus.annotations.TableField; import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.annotations.TableName; import com.baomidou.mybatisplus.enums.IdType; import com.core.common.Cools; import io.swagger.annotations.ApiModelProperty; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.Date; @TableName("asr_bas_ste_err") public class BasSteErr 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 BasSteErr() {} public BasSteErr(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; } // BasSteErr basSteErr = new BasSteErr( // null, // 异常码[非空] // null, // 异常 // null, // 修改人员 // null, // 修改时间 // null, // 添加人员 // null // 添加时间 // ); public Long getErrorCode() { return errorCode; } public void setErrorCode(Long errorCode) { this.errorCode = errorCode; } public String getErrName() { return errName; } public void setErrName(String errName) { this.errName = errName; } public Long getModiUser() { return modiUser; } public void setModiUser(Long modiUser) { this.modiUser = modiUser; } public Date getModiTime() { return modiTime; } public String getModiTime$(){ if (Cools.isEmpty(this.modiTime)){ return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime); } public void setModiTime(Date modiTime) { this.modiTime = modiTime; } public Long getAppeUser() { return appeUser; } public void setAppeUser(Long appeUser) { this.appeUser = appeUser; } public Date getAppeTime() { return appeTime; } public String getAppeTime$(){ if (Cools.isEmpty(this.appeTime)){ return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime); } public void setAppeTime(Date appeTime) { this.appeTime = appeTime; } } src/main/java/com/zy/asrs/mapper/BasSteErrMapper.java
New file @@ -0,0 +1,12 @@ package com.zy.asrs.mapper; import com.zy.asrs.entity.BasSteErr; import com.baomidou.mybatisplus.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Repository; @Mapper @Repository public interface BasSteErrMapper extends BaseMapper<BasSteErr> { } src/main/java/com/zy/asrs/service/BasSteErrService.java
New file @@ -0,0 +1,8 @@ package com.zy.asrs.service; import com.zy.asrs.entity.BasSteErr; import com.baomidou.mybatisplus.service.IService; public interface BasSteErrService extends IService<BasSteErr> { } src/main/java/com/zy/asrs/service/impl/BasSteErrServiceImpl.java
New file @@ -0,0 +1,12 @@ package com.zy.asrs.service.impl; import com.zy.asrs.mapper.BasSteErrMapper; import com.zy.asrs.entity.BasSteErr; import com.zy.asrs.service.BasSteErrService; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import org.springframework.stereotype.Service; @Service("basSteErrService") public class BasSteErrServiceImpl extends ServiceImpl<BasSteErrMapper, BasSteErr> implements BasSteErrService { } src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -220,20 +220,6 @@ for (DevpSlave devp : slaveProperties.getDevp()) { // 遍历拣料入库口 for (DevpSlave.Sta pickSta : devp.getPickSta()) { // 获取条码扫描仪信息 BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode()); if (barcodeThread == null) { continue; } String barcode = barcodeThread.getBarcode(); if(!Cools.isEmpty(barcode)) { log.info("{}号条码扫描器检测条码信息:{}", pickSta.getBarcode(), barcode); if("NG".endsWith(barcode) || "NoRead".equals(barcode)) { continue; } } else { continue; } // 获取拣料入库站信息 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); @@ -244,6 +230,22 @@ staProtocol = staProtocol.clone(); } if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()){ // 获取条码扫描仪信息 BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode()); if (barcodeThread == null) { continue; } String barcode = barcodeThread.getBarcode(); if(!Cools.isEmpty(barcode)) { log.info("{}号条码扫描器检测条码信息:{}", pickSta.getBarcode(), barcode); if("NG".endsWith(barcode) || "NoRead".equals(barcode)) { continue; } } else { continue; } WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode); if (wrkMast == null) { // 无拣料数据 src/main/java/com/zy/common/CodeBuilder.java
@@ -18,7 +18,7 @@ generator.url="localhost:1433;databasename=bfasrs"; generator.username="sa"; generator.password="sa@123"; generator.table="asr_bas_ste_opt"; generator.table="asr_bas_ste_err"; generator.packagePath="com.zy.asrs"; generator.controller = false; src/main/java/com/zy/core/model/command/SteCommand.java
@@ -54,10 +54,10 @@ private Short init; // 复位信号 1=复位 private Short reset; private Boolean reset; // 删除指令 1=删除 private Short delete; private Boolean delete; // 托盘间距 中间托盘之间距离 单位毫米 private Short space; src/main/java/com/zy/core/model/protocol/SteProtocol.java
@@ -71,7 +71,7 @@ public Boolean lowCharge; /** * 电池馈电 0,正常,1馈电 * 电池馈电 0,欠电,1低电 2满电 */ public Short feed; src/main/java/com/zy/core/thread/SteThread.java
@@ -126,7 +126,7 @@ */ private void readStatus(){ try { OperateResultExOne<byte[]> result = siemensS7Net.Read("DB4", (short) 70); OperateResultExOne<byte[]> result = siemensS7Net.Read("V800", (short) 70); if (result.IsSuccess) { if (null == steProtocol) { steProtocol = new SteProtocol(); @@ -134,36 +134,42 @@ steProtocol.setSteNo(siemensS7Net.getByteTransform().TransInt16(result.Content, 0)); steProtocol.setMode(siemensS7Net.getByteTransform().TransInt16(result.Content, 2)); steProtocol.setStatus(siemensS7Net.getByteTransform().TransInt16(result.Content, 4)); // steProtocol.setExecute(); // steProtocol.setWaiting(); OperateResultExOne<Boolean> executeRes = siemensS7Net.ReadBool("V2001.0"); if (executeRes.IsSuccess) { steProtocol.setExecute(executeRes.Content); } OperateResultExOne<Boolean> waitingRes = siemensS7Net.ReadBool("V2001.1"); if (waitingRes.IsSuccess) { steProtocol.setWaiting(waitingRes.Content); } steProtocol.setAlarm(siemensS7Net.getByteTransform().TransInt32(result.Content, 6)); steProtocol.setAlarm0(siemensS7Net.getByteTransform().TransInt32(result.Content, 10)); steProtocol.setCharge(siemensS7Net.getByteTransform().TransInt16(result.Content, 14)); steProtocol.setAlarm0(siemensS7Net.getByteTransform().TransInt32(result.Content, 8)); steProtocol.setCharge(siemensS7Net.getByteTransform().TransInt16(result.Content, 10)); // steProtocol.setFullCharge(); // steProtocol.setLowCharge(); steProtocol.setFeed(siemensS7Net.getByteTransform().TransInt16(result.Content, 16)); steProtocol.setLoca(siemensS7Net.getByteTransform().TransInt16(result.Content, 18)); steProtocol.setFeed(siemensS7Net.getByteTransform().TransInt16(result.Content, 14)); steProtocol.setLoca(siemensS7Net.getByteTransform().TransInt16(result.Content, 16)); // steProtocol.setCloser(); // steProtocol.setSpeed(); steProtocol.setPos(siemensS7Net.getByteTransform().TransInt16(result.Content, 28)); steProtocol.setLoad(siemensS7Net.getByteTransform().TransInt16(result.Content, 30)); steProtocol.setTrack(siemensS7Net.getByteTransform().TransInt16(result.Content, 32)); steProtocol.setTaskNo(siemensS7Net.getByteTransform().TransInt32(result.Content, 38)); steProtocol.setTaskType(siemensS7Net.getByteTransform().TransInt16(result.Content, 42)); steProtocol.setRow(siemensS7Net.getByteTransform().TransInt16(result.Content, 44)); steProtocol.setBay(siemensS7Net.getByteTransform().TransInt16(result.Content, 46)); steProtocol.setLev(siemensS7Net.getByteTransform().TransInt16(result.Content, 48)); steProtocol.setPos(siemensS7Net.getByteTransform().TransInt16(result.Content, 18)); steProtocol.setLoad(siemensS7Net.getByteTransform().TransInt16(result.Content, 20)); steProtocol.setTrack(siemensS7Net.getByteTransform().TransInt16(result.Content, 22)); steProtocol.setTaskNo(siemensS7Net.getByteTransform().TransInt32(result.Content, 24)); steProtocol.setTaskType(siemensS7Net.getByteTransform().TransInt16(result.Content, 28)); steProtocol.setRow(siemensS7Net.getByteTransform().TransInt16(result.Content, 30)); steProtocol.setBay(siemensS7Net.getByteTransform().TransInt16(result.Content, 32)); steProtocol.setLev(siemensS7Net.getByteTransform().TransInt16(result.Content, 34)); steProtocol.setHisTaskNo(siemensS7Net.getByteTransform().TransInt32(result.Content, 58)); steProtocol.setHisTaskStatus(siemensS7Net.getByteTransform().TransInt16(result.Content, 62)); steProtocol.setCheckQty(siemensS7Net.getByteTransform().TransInt16(result.Content, 64)); steProtocol.setReady(siemensS7Net.getByteTransform().TransInt16(result.Content, 66)); steProtocol.setChargeNo(siemensS7Net.getByteTransform().TransInt16(result.Content, 68)); // steProtocol.setHisTaskNo(siemensS7Net.getByteTransform().TransInt32(result.Content, 58)); // steProtocol.setHisTaskStatus(siemensS7Net.getByteTransform().TransInt16(result.Content, 62)); // steProtocol.setCheckQty(siemensS7Net.getByteTransform().TransInt16(result.Content, 64)); steProtocol.setReady(siemensS7Net.getByteTransform().TransInt16(result.Content, 36)); // steProtocol.setChargeNo(siemensS7Net.getByteTransform().TransInt16(result.Content, 68)); steProtocol.setHeart(siemensS7Net.getByteTransform().TransInt16(result.Content, 72)); steProtocol.setCrnStopRun(siemensS7Net.getByteTransform().TransInt16(result.Content, 74)); steProtocol.setCrnStopFork(siemensS7Net.getByteTransform().TransInt16(result.Content, 76)); steProtocol.setCrnAllowRun(siemensS7Net.getByteTransform().TransInt16(result.Content, 78)); // steProtocol.setHeart(siemensS7Net.getByteTransform().TransInt16(result.Content, 72)); steProtocol.setCrnStopRun(siemensS7Net.getByteTransform().TransInt16(result.Content, 38)); steProtocol.setCrnStopFork(siemensS7Net.getByteTransform().TransInt16(result.Content, 40)); steProtocol.setCrnAllowRun(siemensS7Net.getByteTransform().TransInt16(result.Content, 42)); OutputQueue.CRN.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId())); @@ -218,25 +224,25 @@ // 作业 if (command.getTaskMode() != 0) { // 1.任务号 OperateResult result0 = siemensS7Net.Write("DB3.0", command.getTaskNo()); OperateResult result0 = siemensS7Net.Write("V1000", command.getTaskNo()); // 2.作业 OperateResult result1 = siemensS7Net.Write("DB3.4", command.getTaskMode()); OperateResult result1 = siemensS7Net.Write("V1000", command.getTaskMode()); // todo // 3.确认开始任务 if (result0.IsSuccess && result1.IsSuccess) { result = siemensS7Net.Write("D0", true); result = siemensS7Net.Write("V2000.0", true); } // 其他指令 } else { // 控制模式 if (command.getControlMode() != null) { result = siemensS7Net.Write("DB3.20", command.getControlMode()); result = siemensS7Net.Write("V1010", command.getControlMode()); // 复位信号 } else if (command.getReset() != null) { result = siemensS7Net.Write("DB3.26", command.getReset()); result = siemensS7Net.Write("V2000.2", command.getReset()); // 删除指令 } else if (command.getDelete() != null) { result = siemensS7Net.Write("DB3.28", command.getDelete()); result = siemensS7Net.Write("V2000.3", command.getDelete()); // 无效指令 } else { return false; @@ -252,25 +258,27 @@ // 日志记录 if (!command.getComplete() && command.getTaskMode() != 0) { BasSteOptService bean = SpringUtils.getBean(BasSteOptService.class); BasSteOpt basSteOpt = new BasSteOpt( command.getTaskNo(), // 任务号 command.getSteNo(), // 穿梭车 new Date(), // 下发时间 command.getTaskModeType().desc, // 作业 null, // 源排 null, // 源列 null, // 源层 null, // 源站 null, // 目标排 null, // 目标列 null, // 目标层 null, // 目标站 null, // 响应结果 null, // 修改时间 null, // 修改人员 null // 备注 ); bean.insert(basSteOpt); if (null != bean) { BasSteOpt basSteOpt = new BasSteOpt( command.getTaskNo(), // 任务号 command.getSteNo(), // 穿梭车 new Date(), // 下发时间 command.getTaskModeType().desc, // 作业 null, // 源排 null, // 源列 null, // 源层 null, // 源站 null, // 目标排 null, // 目标列 null, // 目标层 null, // 目标站 null, // 响应结果 null, // 修改时间 null, // 修改人员 null // 备注 ); bean.insert(basSteOpt); } } } catch (Exception ignore) {} @@ -308,7 +316,7 @@ if (basSte != null) { // 更新plc数据块 short[] arr = new short[] {this.lastRow.shortValue(), this.lastBay.shortValue(), this.lastLev.shortValue()}; OperateResult result = siemensS7Net.Write("D0", arr); OperateResult result = siemensS7Net.Write("V1002", arr); if (result.IsSuccess) { // 更新数据库 if (service.updatePos(this.lastRow, this.lastBay, this.lastLev) > 0) { src/main/resources/mapper/BasSteErrMapper.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.BasSteErrMapper"> <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BasSteErr"> <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/WrkMastMapper.xml
@@ -106,7 +106,7 @@ </select> <select id="selectPickStep" resultMap="BaseResultMap"> select top 1 * from asr_wrk_mast where barcode=#{barcode} and wrk_sts=14 and (io_type=103 or io_type=107 or io_type=104) select top 1 * from asr_wrk_mast where barcode=#{barcode} and wrk_sts=17 and (io_type=103 or io_type=107 or io_type=104) </select> <select id="selectPakOutStep11" resultMap="BaseResultMap">