pang.jiabao
8 天以前 e47fb4b03ccdb0eee776814826a61ae4014454cd
部署服务器
8个文件已修改
124 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/RgvController.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/SortTheExecutionOfTheCarUtil.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/Utils.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/RgvThread.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/license.lic 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/RgvController.java
@@ -7,7 +7,8 @@
import com.core.exception.CoolException;
import com.zy.asrs.domain.enums.RgvStatusType;
import com.zy.asrs.domain.param.*;
import com.zy.asrs.domain.vo.*;
import com.zy.asrs.domain.vo.RgvMsgTableVo;
import com.zy.asrs.domain.vo.RgvStateTableVo;
import com.zy.asrs.entity.*;
import com.zy.asrs.mapper.BasRgvErrMapper;
import com.zy.asrs.service.BasCircularShuttleService;
@@ -15,7 +16,6 @@
import com.zy.asrs.service.BasRgvService;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.service.impl.MainServiceImpl;
import com.zy.asrs.utils.NumUtils;
import com.zy.asrs.utils.Utils;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.OutputQueue;
@@ -39,8 +39,9 @@
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.rmi.CORBA.Util;
import java.util.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * RGV接口
@@ -429,7 +430,7 @@
//    @ManagerAuth(memo = "作业信息")
    public R ringThroughTaskWrkMast(){
        List<RgvWrkMastParam> result = new ArrayList<>();
        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<>());
        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts",9,10));
        for (WrkMast wrkMast : wrkMasts){
            RgvWrkMastParam rgvWrkMastParam = new RgvWrkMastParam(wrkMast);
            if (Cools.isEmpty(rgvWrkMastParam.getRgvNo())){
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -98,7 +98,7 @@
     */
    public synchronized void updateStePositionNearby() {
        try {
            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", 2L));
            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", 9L).eq("rgv_no",0));
            if (wrkMasts.isEmpty()) {
                return;
            }
@@ -225,7 +225,7 @@
     */
    public synchronized void DevpTaskNoRun() {
        try {
            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("rgv_no", 0).orderBy("modi_time", true));
            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("rgv_no", 0).eq("wrk_sts",9).orderBy("modi_time", true));
            if (wrkMasts.isEmpty()) {
                return;
            }
@@ -259,7 +259,7 @@
            List<WrkMast> wrkMastlistA = new ArrayList<>();
            List<WrkMast> wrkMastlistB = new ArrayList<>();
            for (BasDevpPosition basDevpPosition : basDevpPositionsListUN) {
                List<WrkMast> wrkMastList = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("sta_no", basDevpPosition.getDevNo()).eq("rgv_no", 0).orderBy("modi_time", true));
                List<WrkMast> wrkMastList = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("rgv_ssta_no", basDevpPosition.getDevNo()).eq("rgv_no", 0).orderBy("modi_time", true));
                for (WrkMast wrkMast : wrkMastList) {
                    if (!Cools.isEmpty(wrkMast)) {
                        if (SortTheExecutionOfTheCarUtil.devpNoSortbj(basDevpPositionsListUN, wrkMast.getSourceStaNo(), wrkMast.getStaNo())) {
@@ -300,7 +300,7 @@
                        continue;
                    }
                    List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("rgv_no", rgvProtocol.getRgvNo()));
                    List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("rgv_no", rgvProtocol.getRgvNo()).eq("wrk_sts",9));
                    if (!wrkMasts.isEmpty()) {
                        continue;
                    }
@@ -308,11 +308,11 @@
                            && (rgvProtocol.getStatusType() == RgvStatusType.IDLE || rgvProtocol.getStatusType() == RgvStatusType.ROAM)
                            && rgvProtocol.getTaskNo1() == 0
                            && rgvProtocol.getAlarm() == 0) {
                        if (rgvProtocol.getStatusType() == RgvStatusType.ROAM) {
                            double finalVelocity = 0.0;     // 最终速度 (m/s)
                            double distance = (Math.pow(finalVelocity, 2) - Math.pow(rgvProtocol.instantaneousSpeed / 60, 2)) / (2 * acceleration);
                            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("dev_no", wrkMast.getSourceStaNo()));
                            if ((distance * proportion + (rgvProtocol.instantaneousSpeed / 60) * proportion * rgvDate) > (SortTheExecutionOfTheCarUtil.LatelyAndLessThan(basDevpPosition.getPlcPosition(), rgvProtocol.getRgvPos(), perimeter) )) {
//                        if (rgvProtocol.getStatusType() == RgvStatusType.ROAM) {
//                            double finalVelocity = 0.0;     // 最终速度 (m/s)
//                            double distance = (Math.pow(finalVelocity, 2) - Math.pow(rgvProtocol.instantaneousSpeed / 60, 2)) / (2 * acceleration);
//                            BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("dev_no", wrkMast.getSourceStaNo()));
//                            if ((distance * proportion + (rgvProtocol.instantaneousSpeed / 60) * proportion * rgvDate) > (SortTheExecutionOfTheCarUtil.LatelyAndLessThan(basDevpPosition.getPlcPosition(), rgvProtocol.getRgvPos(), perimeter) )) {
//                                List<BasDevpPosition> basDevpPositions = basDevpPositionService.selectList(new EntityWrapper<BasDevpPosition>().orderBy("plc_position", true));
//                                if (basDevpPositions.isEmpty()) {
//                                    log.error("获取所有站点信息异常,RGV任务下发失败,请联系管理员!!!");
@@ -321,10 +321,10 @@
//                                List<Integer> devpList = SortTheExecutionOfTheCarUtil.BasDevpPositionExtractSites(basDevpPositions);
//
//                                if (!SortTheExecutionOfTheCarUtil.calculateShortestDistanceDirection(devpList,rgvProtocol.getEndStaM(),wrkMast.getSourceStaNo())){
                                    continue;
//                                    continue;
//                                }
                            }
                        }
//                            }
//                        }
                        RgvCommand rgvCommand = new RgvCommand();
                        rgvCommand.setRgvNo(rgvProtocol.getRgvNo());
                        rgvCommand.setAckFinish1((short) 0);  // 工位1任务完成确认位
@@ -341,6 +341,7 @@
                        log.info("RGV命令下发成功,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand));
                        wrkMast.setRgvNo(rgvProtocol.getRgvNo());
                        wrkMast.setWrkSts(10L);
                        wrkMast.setAppeTime(new Date());
                        try {
                            wrkMastService.updateById(wrkMast);
@@ -371,9 +372,7 @@
                    log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId());
                    continue;
                }
                if (rgvProtocol.getStatusType() == RgvStatusType.WAITING) {
                    log.info("{}号小车等待wcs确认,状态{},参数{}", rgvProtocol.getRgvNo(), rgvProtocol.getStatusType(), rgvProtocol);
                }
                // 只有当RGV等待WCS确认、自动
                if (rgvProtocol.getStatusType() == RgvStatusType.WAITING
                        && rgvProtocol.getModeType() == RgvModeType.AUTO
@@ -381,16 +380,19 @@
                ) {
                    log.info("{}号小车等待wcs确认,状态{},参数{}",rgvProtocol.getRgvNo(),rgvProtocol.getStatusType(),rgvProtocol);
                    WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", rgvProtocol.getTaskNo1().longValue()));
                    if (Cools.isEmpty(wrkMast) && (wrkMast.getWrkSts() == 2 || wrkMast.getWrkSts() == 15) && (wrkMast.getRgvNo() == 0 || wrkMast.getRgvNo() > 10)) {
                        log.error("未查到小车执行任务或者执行任务状态不符合!" + rgvProtocol.getTaskNo1());
                    if (Cools.isEmpty(wrkMast)) {
                        log.error("未查到小车执行任务!" + rgvProtocol.getTaskNo1());
                        continue;
                    } else if(wrkMast.getWrkSts() != 10) {
                        log.error("执行任务状态不符合!" + rgvProtocol.getTaskNo1());
                        continue;
                    }
                    boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo());
                    if (!rgvComplete) {
                        log.error("小车复位失败,小车号{}!", rgvProtocol.getRgvNo());
                            log.error("小车复位失败,小车号{}!", rgvProtocol.getRgvNo());
                        break;
                    }
                    wrkMast.setRgvNo(10+rgvProtocol.getRgvNo());
                    wrkMast.setWrkSts(2L);
                    Date now = new Date();
                    wrkMast.setModiTime(now);
                    wrkMastService.updateById(wrkMast);
@@ -408,7 +410,7 @@
        try {
            //  命令下发区 --------------------------------------------------------------------------
            if (!MessageQueue.offer(SlaveType.Rgv, rgvNo, new Task(3, new RgvCommand()))) {
                log.error("RGV命令下发失败,RGV号={}", rgvNo);
                log.error("小车复位RGV命令下发失败,RGV号={}", rgvNo);
                return false;
            } else {
                log.info("RGV命令下发成功,RGV号={}", rgvNo);
src/main/java/com/zy/asrs/utils/SortTheExecutionOfTheCarUtil.java
@@ -2,9 +2,11 @@
import com.zy.asrs.entity.BasDevpPosition;
import com.zy.asrs.entity.WrkMast;
import com.zy.core.enums.RouteCollectCountType;
import java.util.*;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class SortTheExecutionOfTheCarUtil {
    //排序
src/main/java/com/zy/asrs/utils/Utils.java
@@ -2,11 +2,8 @@
import com.core.common.Arith;
import com.core.common.Cools;
import com.zy.core.properties.SlaveProperties;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
/**
 * Created by vincent on 2020/8/27
@@ -189,32 +186,26 @@
        // 类型说明:0-直线,1-圆弧(需要圆心坐标)
        Object[][] intervals = {
                // 直线区间(0-134400)
                {0.0, 134400.0, 0, 390.0, 775.0, 25.0, 775.0},
                {0.0, 296680.0, 0, 350.0, 700.0, 1200.0, 700.0},
                // 弧线区间(拐点-转弯-133)保持贝塞尔曲线
                {134400.0, 134900.0, 1, 25.0, 775.0, 65.0, 882.0, 25.0, 882.0},
                {296680.0, 450865.0, 2, 1200.0, 700.0, 1200.0, 800.0, 1150.0, 650.0},
                // 直线区间
                {134900.0, 680103.0,0, 65.0, 885.0, 1115.0, 882.0},
//                // 弧线区间(拐点116-115),控制点假设为(1125, 882)
//                {680103, 731550, 1115, 882, 1215, 775, 1125, 882},
                // 圆弧区间(拐点116-115)新参数:圆心(1115,775)
                {680103.0, 731550.0, 2, 1115.0, 882.0, 1215.0, 775.0, 1115.0, 775.0}, // 修正终点坐标
                {450865.0, 945407.0,0, 100.0, 800.0, 1200.0, 800.0},
                // 直线区间
                {731550.0, 972950.0,0, 1215.0, 775.0, 1215.0, 125.0},
                {450865.0, 1473370.0,0, 100.0, 800.0, 100.0, 100.0},
                // 弧线区间(拐点112-顶点),控制点假设为(1215, 80)
                {972950.0, 1016193.0,0, 1215.0, 125.0, 1164.0, 80.0},
                {1473370.0, 1550588.0,2, 0.0, 0.0, 100.0, 100.0,50.0,50.0},
                // 弧线区间(拐点-顶点-111),控制点假设为(1164, 125)
                {1016193.0, 1063563.0,0, 1164.0, 80.0, 1115.0, 125.0},
//                {1016193.0, 1063563.0,0, 1164.0, 80.0, 1115.0, 125.0},
                // 直线区间
                {1063563.0, 1315250.0,0, 1115.0, 150.0, 1115.0, 720.0},
                {1550588.0, 2068254.0,0, 0.0, 0.0, 0.0, 700.0},
                // 弧线区间(拐点101-转弯),控制点假设为(1115, 750)
                {1315250.0, 1322829.0,0, 1115.0, 720.0, 1100.0, 750.0},
//                {2068254.0, 2110201.0,2, 1115.0, 720.0, 1100.0, 750.0,0.0,0.0},
                // 直线区间
                {1322829.0, 1737000.0,0, 1090.0, 775.0, 390.0, 775.0},
                {2110201.0, 2318250.0,0, 0.0, 700.0, 350.0, 700.0},
        };
        for (Object[] interval : intervals) {
src/main/java/com/zy/core/MainProcess.java
@@ -5,11 +5,9 @@
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PreDestroy;
import java.util.ArrayList;
/**
 * WCS主流程
@@ -53,11 +51,11 @@
                    Thread.sleep(200);
                    // 系统运行状态判断
                    if (!SystemProperties.WCS_RUNNING_STATUS.get()) {
                        continue;
                    }
//                    if (!SystemProperties.WCS_RUNNING_STATUS.get()) {
//                        continue;
//                    }
                    //更新位置信息
                    //更新小车排序
                    mainService.updateStePositionNearby();
                    //更新位置信息
                    mainService.updateStePosition();
src/main/java/com/zy/core/thread/RgvThread.java
@@ -11,12 +11,9 @@
import com.zy.asrs.entity.BasRgvOpt;
import com.zy.asrs.service.BasRgvOptService;
import com.zy.asrs.service.BasRgvService;
import com.zy.asrs.utils.NumUtils;
import com.zy.asrs.utils.RouteUtils;
import com.zy.core.ThreadHandler;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.OutputQueue;
import com.zy.core.enums.RgvStatusType;
import com.zy.core.enums.RgvTaskModeType;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.RgvSlave;
@@ -148,8 +145,8 @@
    private void readStatus(){
        try {
            OperateResultExOne<byte[]> result = siemensNet.Read("DB100.0", (short) 20);
            OperateResultExOne<byte[]> resultV = siemensNet.Read("DB20.16", (short) 2);
            OperateResultExOne<byte[]> resultE = siemensNet.Read("DB20.26", (short) 2);
//            OperateResultExOne<byte[]> resultV = siemensNet.Read("DB20.16", (short) 2);
//            OperateResultExOne<byte[]> resultE = siemensNet.Read("DB20.26", (short) 2);
            if (result.IsSuccess) {
                if (null == rgvProtocol) {
                    rgvProtocol = new RgvProtocol();
@@ -164,8 +161,8 @@
                rgvProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 12));
                rgvProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 14));
                rgvProtocol.setRgvPos(siemensNet.getByteTransform().TransUInt32(result.Content, 16));
                rgvProtocol.setInstantaneousSpeed(Double.valueOf(siemensNet.getByteTransform().TransInt16(resultV.Content, 0)));
                rgvProtocol.setEndStaM(siemensNet.getByteTransform().TransInt16(resultE.Content, 0));
//                rgvProtocol.setInstantaneousSpeed((double) siemensNet.getByteTransform().TransInt16(resultV.Content, 0));
//                rgvProtocol.setEndStaM(siemensNet.getByteTransform().TransInt16(resultE.Content, 0));
//                rgvProtocol.setRgvPos((long)NumUtils.GetRandomIntInRange(1737000));
                OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId()));
@@ -281,6 +278,7 @@
            result = siemensNet.Write("DB24.10.0", true);
        } else {
            siemensNet.Write("DB24.10.1", true);
            log.info("任务完成后复位清除rgv信息:小车号:{},ack:{}", command.getRgvNo(),command.getAckFinish1());
        }
        try {
src/main/resources/application.yml
@@ -8,8 +8,8 @@
    name: @pom.build.finalName@
  datasource:
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
#    url: jdbc:sqlserver://192.168.4.191:50948;databasename=gdhmasrs
    url: jdbc:sqlserver://127.0.0.1:1433;databasename=mdqzasrs
    url: jdbc:sqlserver://192.168.2.201:1433;databasename=mdqzasrs
#    url: jdbc:sqlserver://127.0.0.1:1433;databasename=mdqzasrs
    username: sa
    password: sa@123
  mvc:
@@ -48,7 +48,7 @@
constant-parameters:
  # 轨道总长
  perimeter: 1737000
  perimeter: 2318250
  # 轨道转换为米比例
  proportion: 10000
  # 加速度  m/s^2
@@ -63,7 +63,7 @@
  # RGV穿梭车1
  rgv[0]:
    id: 1
    ip: 172.17.196.3
    ip: 192.168.2.43
    port: 502
    rack: 0
    slot: 0
@@ -71,7 +71,7 @@
  # RGV穿梭车2
  rgv[1]:
    id: 2
    ip: 172.17.196.6
    ip: 192.168.2.46
    port: 502
    rack: 0
    slot: 0
@@ -79,7 +79,7 @@
  # RGV穿梭车3
  rgv[2]:
    id: 3
    ip: 172.17.196.9
    ip: 192.168.2.49
    port: 502
    rack: 0
    slot: 0
@@ -87,7 +87,7 @@
  # RGV穿梭车4
  rgv[3]:
    id: 4
    ip: 172.17.196.12
    ip: 192.168.2.52
    port: 502
    rack: 0
    slot: 0
@@ -95,7 +95,7 @@
  # RGV穿梭车5
  rgv[4]:
    id: 5
    ip: 172.17.196.15
    ip: 192.168.2.55
    port: 502
    rack: 0
    slot: 0
src/main/resources/license.lic
Binary files differ