调试修改

main
judy 2 years ago
parent efdfab4f2b
commit d51cf00c07
  1. 115
      shkj-wms/src/main/java/com/shkj/wcs/plc/PlcEventTask.java
  2. 18
      shkj-wms/src/main/java/com/shkj/wcs/plc/PlcInit.java
  3. 64
      shkj-wms/src/main/java/com/shkj/wcs/third/stacker/StkCallUtil.java
  4. 2
      shkj-wms/src/main/java/com/shkj/wms/service/impl/BusinOutInPlanServiceImpl.java
  5. 2
      shkj-wms/src/main/java/com/shkj/wms/service/impl/SysThirdExceptionRequestServiceImpl.java
  6. 2
      shkj-wms/src/main/java/com/shkj/wms/vo/PlanOrderLocationVo.java
  7. 1
      shkj-wms/src/main/resources/mapper/wms/BaseContainerMapper.xml

@ -97,7 +97,7 @@ public class PlcEventTask {
@Autowired
PlcInit plcInit;
// @Scheduled(fixedDelay = 8000)
@Scheduled(fixedDelay = 8000)
public void init() {
//查询需要连接的PLC,初始化连接对象
List<WcsPlcConnectVo> plcList = iWcsPlcConnectService.selectWcsPlcConnectList(new WcsPlcConnect().setIsActive("1"));
@ -107,11 +107,11 @@ public class PlcEventTask {
}
for (WcsPlcConnectVo conn : plcList) {
if (conn.getPlcIp().contains("150.154")){
if (conn.getPlcIp().contains("1.20")){
plcTask(plcInit.getPlcOperate_stk(), conn, conn.getPointTables());
}
if (conn.getPlcIp().contains("150.150")){
if (conn.getPlcIp().contains("1.10")){
plcTask(plcInit.getPlcOperate_dps(), conn, conn.getPointTables());
}
}
@ -119,7 +119,7 @@ public class PlcEventTask {
// @Scheduled(fixedDelay = 4000)
@Scheduled(fixedDelay = 4000)
public void writePlcheartbeat(){
//根据连接的plcId获取属性
PlcOperate plcOperate = plcInit.getPlcOperate_dps();
@ -350,7 +350,7 @@ public class PlcEventTask {
twoAllotAddress = plcProperty.getAddress();
} else if (pointType.equals("oneAllotTask")) {
oneAllotTaskId = plcProperty.getAddress();
oneAllotTaskId = plcProperty.getValueType();
oneAllotTaskIdVt = plcProperty.getValueType();
} else if (pointType.equals("twoAllotTask")) {
twoAllotTaskId = plcProperty.getAddress();
twoAllotTaskIdVt = plcProperty.getValueType();
@ -423,7 +423,7 @@ public class PlcEventTask {
cargoHeight = data.getType();//获取托盘或模具类型
}else {
redisTemplate.opsForValue().set(RedisConstant.redisPutInExeMsg+orderResult.getMsg(),orderResult.getMsg());
log.error("获取任务信息失败:"+orderResult.getMsg()+"托盘条码:"+barcodeValue);
log.info("获取任务信息失败:"+orderResult.getMsg()+"托盘条码:"+barcodeValue);
//回填任务号
Map<String, Boolean> writeMap = new HashMap<>(1);
writeMap.put(oneEcsErrExitVT, true);
@ -508,7 +508,7 @@ public class PlcEventTask {
Map<String, Long> writeMap = new HashMap<>(1);
writeMap.put(twoAllotTaskIdVt, taskId);
Map<String, Object> allMap = new HashMap<>(1);
allMap.put(oneAllotTaskId, writeMap);
allMap.put(twoAllotTaskId, writeMap);
Map<String, String> cargoHeightMap = new HashMap<>(1);
cargoHeightMap.put(twoHignTypeVT, cargoHeight);
@ -649,7 +649,7 @@ public class PlcEventTask {
return;
}
//执行dps任务,给堆垛机下发命令
dpsTask(taskId) ;
dpsTask(taskId,1) ;
}
//2楼是否请求入库
if (pointMap.containsKey(twoReqPutin) && Boolean.valueOf(pointMap.get(twoReqPutin).toString())) {
@ -661,7 +661,7 @@ public class PlcEventTask {
return;
}
//执行dps任务,给堆垛机下发命令
dpsTask(taskId) ;
dpsTask(taskId,2) ;
}
}
}catch (Exception e){
@ -694,7 +694,7 @@ public class PlcEventTask {
for (WcsPlcProperty wcsPlcProperty : propertyList) {
if (wcsPlcProperty.getPointType().equals("4")) {
readfinishPoint = wcsPlcProperty.getAddress();
} else if (wcsPlcProperty.getPointType().equals("101")) {
} else if (wcsPlcProperty.getPointType().equals("111")) {
readTaskPoint = wcsPlcProperty.getAddress();
}
}
@ -764,7 +764,7 @@ public class PlcEventTask {
* @param taskId
* @return
*/
public Boolean dpsTask(Long taskId){
public Boolean dpsTask(Long taskId,Integer reqLayer){
//下发任务时,先查询是否有正在执行的入库任务或出库任务,如果有,则不下发入库任务
Object taskInId = redisTemplate.opsForValue().get(RedisConstant.redisTaskIn);
@ -773,6 +773,8 @@ public class PlcEventTask {
return false;
}
Object taskOutId = redisTemplate.opsForValue().get(RedisConstant.redisTaskOut);
if (taskOutId !=null ){
log.info("有出库任务在执行,无法下发入库任务:"+taskOutId);
@ -808,16 +810,17 @@ public class PlcEventTask {
String toLayerValueType="";
String plcFromRow = "";
String FromRowValueType="";
String fromRowValueType="";
String plcFromColumn = "";
String FromColumnValueType = "";
String fromColumnValueType = "";
String plcFromLayer = "";
String FromLayerValueType="";
String fromLayerValueType="";
String plcPlatform="";
String plcPlatformValueType="";
String plcOrderType = "";
String plcOrderTypeValue = "";
//启动设备
String plcStartEq = "";
String plcStartEqValueType = "";
//堆垛机完成状态
String readfinish ="";
@ -835,13 +838,16 @@ public class PlcEventTask {
taskIdvalueType = stkProperty.getValueType();
} else if (stkProperty.getPointType().equals("104")) {
plcFromRow = stkProperty.getAddress();
FromRowValueType = stkProperty.getValueType();
fromRowValueType = stkProperty.getValueType();
} else if (stkProperty.getPointType().equals("103")) {
plcPlatform = stkProperty.getAddress();
plcPlatformValueType = stkProperty.getValueType();
} else if (stkProperty.getPointType().equals("105")) {
plcFromColumn = stkProperty.getAddress();
FromColumnValueType=stkProperty.getValueType();
fromColumnValueType=stkProperty.getValueType();
} else if (stkProperty.getPointType().equals("106")) {
plcFromLayer = stkProperty.getAddress();
FromLayerValueType=stkProperty.getValueType();
fromLayerValueType=stkProperty.getValueType();
} else if (stkProperty.getPointType().equals("108")) {
plcToRow = stkProperty.getAddress();
toRowValueType = stkProperty.getValueType();
@ -854,9 +860,6 @@ public class PlcEventTask {
} else if (stkProperty.getPointType().equals("102")) {
plcOrderType = stkProperty.getAddress();
plcOrderTypeValue=stkProperty.getValueType();
}else if (stkProperty.getPointType().equals(PlcPropertyEnum.twentythree.getValue())){
plcStartEq=stkProperty.getAddress();
plcStartEqValueType=stkProperty.getValueType();
}else if (stkProperty.getPointType().equals("4")) {
readfinish = stkProperty.getAddress();
readfinishValueType=stkProperty.getValueType();
@ -876,49 +879,49 @@ public class PlcEventTask {
}
}
Integer stkRunV = 0;
Boolean stkRunV = false;
if (pointMap.containsKey(stkRun)) {
stkRunV = Integer.valueOf(pointMap.get(stkRun).toString());
stkRunV = Boolean.valueOf(pointMap.get(stkRun).toString());
}
log.info("堆垛机运行状态:"+stkRunV);
if (stkRunV!=1){
log.info("请求入库时,堆垛机尚未运行");
if (!stkRunV){
log.info(taskId+"请求入库时,堆垛机尚未运行");
return false;
}
Integer stkAutoManualV=0;
Boolean stkAutoManualV=null;
if (pointMap.containsKey(stkAutoManual)) {
stkAutoManualV = Integer.valueOf(pointMap.get(stkAutoManual).toString());
stkAutoManualV = Boolean.valueOf(pointMap.get(stkAutoManual).toString());
}
log.info("堆垛机自动状态:"+stkAutoManualV);
if(stkAutoManualV ==0 ){
log.info("请求入库时,堆垛机手动状态");
log.info(taskId+"堆垛机自动状态:"+stkAutoManualV);
if(!stkAutoManualV ){
log.info(taskId+"请求入库时,堆垛机手动状态");
return false;
}
Integer stkGroundV= 0;
Boolean stkGroundV= false;
if (pointMap.containsKey(stkGround)) {
stkGroundV = Integer.valueOf(pointMap.get(stkGround).toString());
stkGroundV = Boolean.valueOf(pointMap.get(stkGround).toString());
}
log.info("地面柜自动状态:"+stkGroundV);
if(stkGroundV==0){
log.info("请求入库时,堆垛机地面柜手动状态");
log.info(taskId+"地面柜自动状态:"+stkGroundV);
if(!stkGroundV){
log.info(taskId+"请求入库时,堆垛机地面柜手动状态");
return false;
}
Integer stkidleV = 0;
Boolean stkidleV = false;
if (pointMap.containsKey(stkidle)) {
stkidleV = Integer.valueOf(pointMap.get(stkidle).toString());
stkidleV = Boolean.valueOf(pointMap.get(stkidle).toString());
}
log.info("堆垛机是状态:"+stkidleV);
log.info(taskId+"堆垛机是状态:"+stkidleV);
//1空闲 0繁忙
if(stkidleV==0){
log.info("请求入库时,堆垛机繁忙");
if(!stkidleV){
log.info(taskId+"请求入库时,堆垛机繁忙");
return false;
}
//给堆垛机写命令
//给堆垛机写命令
Map<String, Object> allMap = new HashMap<>(1);
Map<String, Object> plcTaskIdMap = new HashMap<>(1);
plcTaskIdMap.put(taskIdvalueType, taskId);
@ -936,37 +939,37 @@ public class PlcEventTask {
Map<String, Object> plcOrderTypeMap = new HashMap<>(1);
plcOrderTypeMap.put(plcOrderTypeValue, 1);
allMap.put(plcOrderType, plcOrderTypeMap);
Map<String, Object> plcFromRowMap = new HashMap<>(1);
plcFromRowMap.put(FromRowValueType, "1");
/* Map<String, Object> plcFromRowMap = new HashMap<>(1);
plcFromRowMap.put(fromRowValueType, fromRow);
allMap.put(plcFromRow, plcFromRowMap);
Map<String, Object> plcFromColumnMap = new HashMap<>(1);
plcFromColumnMap.put(FromColumnValueType, "22");
plcFromColumnMap.put(fromColumnValueType, fromColumn);
allMap.put(plcFromColumn, plcFromColumnMap);
Map<String, Object> plcFromLayerMap = new HashMap<>(1);
plcFromLayerMap.put(FromLayerValueType, "1");
allMap.put(plcFromLayer, plcFromLayerMap);
//启动设备
Map<String, Object> plcStartEqMap = new HashMap<>(1);
plcStartEqMap.put(plcStartEqValueType, true);
allMap.put(plcStartEq, plcStartEqMap);
plcFromLayerMap.put(fromLayerValueType, fromLayer);
allMap.put(plcFromLayer, plcFromLayerMap);*/
//入库起始站台
Map<String, Object> plcPlatformMap = new HashMap<>(1);
plcPlatformMap.put(plcPlatformValueType,reqLayer);
allMap.put(plcPlatform,plcPlatformMap);
//堆垛机完成状态,下命令时写入0,未完成状态
Map<String, Object> readfinishMap = new HashMap<>(1);
readfinishMap.put(readfinishValueType, 0);
allMap.put(readfinish, readfinishMap);
log.info("请求入库:任务下发之前"+JsonUtil.toJSONString(allMap));
log.info(taskId+"请求入库:任务下发之前"+JsonUtil.toJSONString(allMap));
if (plcReadAndWrite.execWrite(stkOperate, JsonUtil.toJSONString(allMap))) {
log.info("请求入库,任务下发成功:"+taskId);
log.info(taskId+"请求入库,任务下发成功:");
//请求成功,记录已下发
redisTemplate.opsForValue().set(RedisConstant.redisReqWare + taskId, taskId,24,TimeUnit.HOURS);
//请求分配任务ID dps
redisTemplate.delete(RedisConstant.redisContainer+taskId);
return true;
}else {
log.info("请求入库任务下发失败");
log.info(taskId+"请求入库任务下发失败");
return false;
}
}
}

@ -32,7 +32,7 @@ public class PlcInit {
RedisTemplate redisTemplate;
private ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
//@PostConstruct
@PostConstruct
public void init(){
log.info("初始化连接对象");
executorService.scheduleWithFixedDelay(
@ -50,23 +50,23 @@ public class PlcInit {
for (WcsPlcConnectVo conn : plcList) {
redisTemplate.opsForValue().set(RedisConstant.redisPlcConnect+conn.getDevCode(),conn);
PlcHelper plc = new PlcHelper(conn.getPlcType(), conn.getPlcIp(), conn.getPlcFactory(), conn.getPort());
if (conn.getPlcIp().contains("150.154")){
if (conn.getPlcIp().contains("1.20")){
plcOperate_stk = plc.getAutomation();
OperateResult connect = plcOperate_stk.connect();
if (connect.IsSuccess){
log.info(conn.getPlcIp()+"stk初始化成功");
log.info(conn.getPlcIp()+"stk连接成功");
}else {
log.info(conn.getPlcIp()+"stk初始化失败");
log.info(conn.getPlcIp()+"stk连接失败");
}
}
if (conn.getPlcIp().contains("150.150")){
if (conn.getPlcIp().contains("1.10")){
plcOperate_dps = plc.getAutomation();
OperateResult connect = plcOperate_dps.connect();
if (connect.IsSuccess){
log.info(conn.getPlcIp()+"dps初始化成功");
log.info(conn.getPlcIp()+"dps连接成功");
}else {
log.info(conn.getPlcIp()+"dps初始化失败");
log.info(conn.getPlcIp()+"dps连接失败");
}
}
}
@ -90,10 +90,10 @@ public class PlcInit {
public PlcOperate getPlcOperateByIp(String plcIp){
if (plcIp.contains("150.154")){
if (plcIp.contains("1.20")){
return plcOperate_stk;
}
if (plcIp.contains("150.150")){
if (plcIp.contains("1.10")){
return plcOperate_dps;
}
return null;

@ -70,13 +70,13 @@ public class StkCallUtil {
//下发任务时,先查询是否有正在执行的入库任务,如果有,则不下发出库任务
Object taskInId = redisTemplate.opsForValue().get(RedisConstant.redisTaskIn);
if (taskInId !=null ){
log.error("有入库任务在执行,无法下发出库任务:"+taskInId);
log.info("有入库任务在执行,无法下发出库任务:"+taskInId);
return Result.err().msg("有入库任务在执行,无法下发出库任务");
}
Object taskOutId = redisTemplate.opsForValue().get(RedisConstant.redisTaskOut);
if (taskOutId !=null ){
log.error("有出库任务在执行,无法下发出库任务:"+taskOutId);
log.info("有出库任务在执行,无法下发出库任务:"+taskOutId);
return Result.err().msg("有出库任务在执行,无法下发出库任");
}
SysThirdExceptionRequest one = sysThirdExceptionRequestService.getOneByOrderNo(stkMoveBo.getTaskId().toString());
@ -90,7 +90,7 @@ public class StkCallUtil {
String fromLayer = stkMoveBo.getFromLayer();
String fromColumn = stkMoveBo.getFromColumn();
String fromRow = stkMoveBo.getFromRow();
log.info("出库对应的排层列:"+fromRow+fromLayer+fromColumn);
log.info(stkMoveBo.getTaskId()+"出库对应的排层列:"+fromRow+fromLayer+fromColumn);
//获取堆垛机
WcsPlcConnectQueryBo plcConnect = new WcsPlcConnectQueryBo();
plcConnect.setDevType("1");
@ -142,7 +142,7 @@ public class StkCallUtil {
log.info("1楼是否允许出库::"+oneDpsidle+" 出库的值:"+oneDpsidleV);
log.info("2楼是否允许出库::"+twoDpsidle+" 出库的值:"+twoDpsidleV);
Integer layer = one.getLayer();
Integer layer = 1;
if (layer==1){
//false不允许出库
if (!Boolean.valueOf(oneDpsidleV)){
@ -179,6 +179,10 @@ public class StkCallUtil {
String finishPoint="";
String finishPointVT="";
//站台
String plcPlatform="";
String plcPlatformValueType="";
String stkAutoManual="", stkGround="",stkidle="", stkRun="";
for (WcsPlcProperty stkProperty : propertyList) {
//获取要堆垛机要写入的点位
@ -194,6 +198,9 @@ public class StkCallUtil {
} else if (stkProperty.getPointType().equals("106")) {
plcFromLayer = stkProperty.getAddress();
FromLayerValueType=stkProperty.getValueType();
} else if (stkProperty.getPointType().equals("107")) {
plcPlatform = stkProperty.getAddress();
plcPlatformValueType = stkProperty.getValueType();
} else if (stkProperty.getPointType().equals("108")) {
plcToRow = stkProperty.getAddress();
toRowValueType = stkProperty.getValueType();
@ -229,45 +236,47 @@ public class StkCallUtil {
Thread.sleep(2000);
Integer stkRunV = 0;
Boolean stkRunV = false;
if (stkPointMap.containsKey(stkRun)) {
stkRunV = Integer.valueOf(stkPointMap.get(stkRun).toString());
stkRunV = Boolean.valueOf(stkPointMap.get(stkRun).toString());
}
log.info("堆垛机运行状态:"+stkRunV);
if (stkRunV!=1){
if (!stkRunV){
log.info("堆垛机尚未运行:"+stkRunV);
return Result.err().msg("堆垛机尚未运行");
}
Integer stkAutoManualV=0;
Boolean stkAutoManualV=false;
if (stkPointMap.containsKey(stkAutoManual)) {
stkAutoManualV = Integer.valueOf(stkPointMap.get(stkAutoManual).toString());
stkAutoManualV = Boolean.valueOf(stkPointMap.get(stkAutoManual).toString());
}
log.info("堆垛机自动状态:"+stkAutoManualV);
if(stkAutoManualV ==0 ){
if(!stkAutoManualV ){
log.info("堆垛机手动状态:"+stkAutoManualV);
return Result.err().msg("堆垛机手动状态");
}
Integer stkGroundV= 0;
Boolean stkGroundV= false;
if (stkPointMap.containsKey(stkGround)) {
stkGroundV = Integer.valueOf(stkPointMap.get(stkGround).toString());
stkGroundV = Boolean.valueOf(stkPointMap.get(stkGround).toString());
}
log.info("地面柜自动状态:"+stkGroundV);
if(stkGroundV==0){
if(!stkGroundV){
log.info("堆垛机地面柜手动状态:"+stkGroundV);
return Result.err().msg("堆垛机地面柜手动状态");
}
Integer stkidleV = 0;
Boolean stkidleV = false;
if (stkPointMap.containsKey(stkidle)) {
stkidleV = Integer.valueOf(stkPointMap.get(stkidle).toString());
stkidleV = Boolean.valueOf(stkPointMap.get(stkidle).toString());
}
log.info("堆垛机是状态:"+stkidleV);
//1空闲 0繁忙
if(stkidleV==0){
if(!stkidleV){
log.info("堆垛机繁忙:"+stkidleV);
return Result.err().msg("堆垛机繁忙");
}
if((!Boolean.valueOf(oneDpsidleV) || !Boolean.valueOf(twoDpsidleV)) && stkidleV == 0){
if((!Boolean.valueOf(oneDpsidleV) || !Boolean.valueOf(twoDpsidleV)) && !stkidleV){
return Result.err().msg("出库状态与堆垛机的状态都不可出库");
}else{
log.info("出库状态与堆垛机的状态可出库one: "+Boolean.valueOf(oneDpsidleV)+" two:"+twoDpsidleV+" --"+stkidleV);
@ -277,15 +286,11 @@ public class StkCallUtil {
Map<String, Object> plcTaskIdMap = new HashMap<>(1);
plcTaskIdMap.put(taskIdvalueType, stkMoveBo.getTaskId());
allMap.put(plcTaskId, plcTaskIdMap);
Map<String, Object> plcToRowMap = new HashMap<>(1);
plcToRowMap.put(toRowValueType, "1");
allMap.put(plcToRow, plcToRowMap);
Map<String, Object> plcToColumnMap = new HashMap<>(1);
plcToColumnMap.put(toColumnValueType, "22");
allMap.put(plcToColumn, plcToColumnMap);
Map<String, Object> plcToLayerMap = new HashMap<>(1);
plcToLayerMap.put(toLayerValueType, "1");
allMap.put(plcToLayer, plcToLayerMap);
//出库目标站台
Map<String, Object> plcPlatformMap = new HashMap<>(1);
plcPlatformMap.put(plcPlatformValueType,layer);
allMap.put(plcPlatform,plcPlatformMap);
Map<String, Object> plcOrderTypeMap = new HashMap<>(1);
plcOrderTypeMap.put(plcOrderTypeValue, 2);
@ -300,9 +305,6 @@ public class StkCallUtil {
plcFromLayerMap.put(FromLayerValueType, fromLayer);
allMap.put(plcFromLayer, plcFromLayerMap);
Map<String, Object> plcStartEqMap = new HashMap<>(1);
plcStartEqMap.put(plcStartEqValueType, true);
allMap.put(plcStartEq, plcStartEqMap);
//堆垛机完成入库状态
Map<String, Object> finishPointMap = new HashMap<>(1);
finishPointMap.put(finishPointVT, 0);

@ -1376,7 +1376,7 @@ public class BusinOutInPlanServiceImpl extends ServiceImpl<BusinOutInPlanMapper,
//堆垛机非自动完成状态后,把redis中的ID删除,代表此任务已经完成
Object taskInId = redisTemplate.opsForValue().get(RedisConstant.redisTaskIn);
if (taskInId !=null && String.valueOf(taskInId).equals(orderNo.toString())){
log.error("手动处理入库时判断redis中的数据是否还存在,存在则删除,删除redis中的出库任务状态记录:",orderNo);
log.info("手动处理入库时判断redis中的数据是否还存在,存在则删除,删除redis中的出库任务状态记录:",orderNo);
redisTemplate.delete(RedisConstant.redisTaskIn);
}

@ -22,6 +22,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -191,6 +192,7 @@ public class SysThirdExceptionRequestServiceImpl extends ServiceImpl<SysThirdExc
* 做任务 定时任务
*/
@Override
@Scheduled(fixedDelay = 10000)
public void doTask() {
LambdaQueryWrapper<SysThirdExceptionRequest> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysThirdExceptionRequest::getStatus, ThirdApiStatusEnum.fail.getValue());

@ -14,7 +14,7 @@ public class PlanOrderLocationVo {
private static final long serialVersionUID = 1L;
/**
* 类型 1空托盘2货位3高货位
* 类型 1空托盘2货位7103货位910 4 货位1110
*/
private String type;

@ -73,6 +73,7 @@
<if test="containerCode != null and containerCode != ''">
AND (
LOWER(bc.container_code) LIKE LOWER(CONCAT('%',#{containerCode},'%'))
or LOWER(bc.container_name) LIKE LOWER(CONCAT('%',#{containerCode},'%'))
)
</if>
<if test="containerType != null">

Loading…
Cancel
Save