opt:西门子项目优化,新增大小车指定逻辑

This commit is contained in:
2026-03-20 14:57:16 +08:00
parent 633304c7f5
commit 4a134ddb2e
11 changed files with 44 additions and 35 deletions

View File

@@ -94,12 +94,16 @@ public class NDCAgvServiceImpl implements NDCAgvService {
//如果起始点在PS15起始点位区间、终点也在PS15终点区间则使用PS15type=2其他情况type =1 //如果起始点在PS15起始点位区间、终点也在PS15终点区间则使用PS15type=2其他情况type =1
StorageCell startStorageCell = storageCellService.getByCode(inst.getStart_point_code()); StorageCell startStorageCell = storageCellService.getByCode(inst.getStart_point_code());
StorageCell endStorageCell = storageCellService.getByCode(inst.getNext_point_code()); StorageCell endStorageCell = storageCellService.getByCode(inst.getNext_point_code());
if(null != startStorageCell && null != endStorageCell if ((null != startStorageCell && null != endStorageCell)
&& "2".equals(startStorageCell.getCar_type())){ && (("start".equals(inst.getCar_type()) && "2".equals(startStorageCell.getCar_type()))
|| "end".equals(inst.getCar_type()) && "2".equals(endStorageCell.getCar_type())
|| "new_car".equals(startStorageCell.getRemark())
|| "new_car".equals(endStorageCell.getRemark()))) {
inst.setCar_type("2"); inst.setCar_type("2");
startAddress = deviceService.queryEndAddressBydeviceCode(inst.getStart_point_code()); startAddress = deviceService.queryEndAddressBydeviceCode(inst.getStart_point_code());
nextAddress = deviceService.queryEndAddressBydeviceCode(inst.getNext_point_code()); nextAddress = deviceService.queryEndAddressBydeviceCode(inst.getNext_point_code());
} else { }
else {
inst.setCar_type("1"); inst.setCar_type("1");
startAddress = deviceService.queryAddressBydeviceCode(inst.getStart_point_code()); startAddress = deviceService.queryAddressBydeviceCode(inst.getStart_point_code());
nextAddress = deviceService.queryAddressBydeviceCode(inst.getNext_point_code()); nextAddress = deviceService.queryAddressBydeviceCode(inst.getNext_point_code());

View File

@@ -25,12 +25,12 @@ public class AcsAgvStatus implements Serializable {
/** /**
* AGV设备编码 * AGV设备编码
*/ */
private String deviceCode; private String device_code;
/** /**
* AGV设备名称 * AGV设备名称
*/ */
private String deviceName; private String device_name;
/** /**
* 状态 * 状态
@@ -55,16 +55,16 @@ public class AcsAgvStatus implements Serializable {
/** /**
* 电量 * 电量
*/ */
private Integer electricQty; private Integer electric_qty;
/** /**
* 更新时间 * 更新时间
*/ */
private Date updateTime; private Date update_time;
/** /**
* 是否有效: 1-有效, 0-无效 * 是否有效: 1-有效, 0-无效
*/ */
private String isActive; private String is_active;
} }

View File

@@ -4,15 +4,15 @@
<resultMap id="BaseResultMap" type="org.nl.acs.agv_alarm.domain.AcsAgvStatus"> <resultMap id="BaseResultMap" type="org.nl.acs.agv_alarm.domain.AcsAgvStatus">
<id column="id" property="id" /> <id column="id" property="id" />
<result column="device_code" property="deviceCode" /> <result column="device_code" property="device_code" />
<result column="device_name" property="deviceName" /> <result column="device_name" property="device_name" />
<result column="status" property="status" /> <result column="status" property="status" />
<result column="x" property="x" /> <result column="x" property="x" />
<result column="y" property="y" /> <result column="y" property="y" />
<result column="angle" property="angle" /> <result column="angle" property="angle" />
<result column="electric_qty" property="electricQty" /> <result column="electric_qty" property="electric_qty" />
<result column="update_time" property="updateTime" /> <result column="update_time" property="update_time" />
<result column="is_active" property="isActive" /> <result column="is_active" property="is_active" />
</resultMap> </resultMap>
<select id="selectAllStatus" resultMap="BaseResultMap"> <select id="selectAllStatus" resultMap="BaseResultMap">

View File

@@ -58,8 +58,8 @@ public class AcsAgvAlarmServiceImpl implements AcsAgvAlarmService {
insertFlag = true; insertFlag = true;
agvStatus = new AcsAgvStatus(); agvStatus = new AcsAgvStatus();
agvStatus.setId(IdUtil.simpleUUID()); agvStatus.setId(IdUtil.simpleUUID());
agvStatus.setDeviceCode(deviceCode); agvStatus.setDevice_code(deviceCode);
agvStatus.setDeviceName(deviceName); agvStatus.setDevice_name(deviceName);
} }
// 更新状态信息 // 更新状态信息
@@ -67,13 +67,13 @@ public class AcsAgvAlarmServiceImpl implements AcsAgvAlarmService {
agvStatus.setX(x); agvStatus.setX(x);
agvStatus.setY(y); agvStatus.setY(y);
agvStatus.setAngle(angle); agvStatus.setAngle(angle);
agvStatus.setElectricQty(electricQty); agvStatus.setElectric_qty(electricQty);
agvStatus.setUpdateTime(new Date()); agvStatus.setUpdate_time(new Date());
if (statusInt == 1 || statusInt == 3 || statusInt == 4 || statusInt == 6 || statusInt == 7) { if (statusInt == 1 || statusInt == 3 || statusInt == 4 || statusInt == 6 || statusInt == 7) {
agvStatus.setIsActive("1"); agvStatus.setIs_active("1");
} else { } else {
agvStatus.setIsActive("0"); agvStatus.setIs_active("0");
} }
if (insertFlag) { if (insertFlag) {

View File

@@ -18,6 +18,7 @@ import org.nl.acs.instruction.service.InstructionService;
import org.nl.acs.instruction.service.impl.InstructionServiceImpl; import org.nl.acs.instruction.service.impl.InstructionServiceImpl;
import org.nl.acs.log.service.DeviceExecuteLogService; import org.nl.acs.log.service.DeviceExecuteLogService;
import org.nl.acs.opc.DeviceAppService; import org.nl.acs.opc.DeviceAppService;
import org.nl.common.utils.ThrowableUtil;
import org.nl.system.service.dict.ISysDictService; import org.nl.system.service.dict.ISysDictService;
import org.nl.system.service.dict.dao.Dict; import org.nl.system.service.dict.dao.Dict;
import org.nl.system.service.lucene.LuceneExecuteLogService; import org.nl.system.service.lucene.LuceneExecuteLogService;
@@ -267,7 +268,7 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
} }
data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0); data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0);
} catch (Exception e) { } catch (Exception e) {
log.info("下发告警灯告警信号失败"); log.error("下发告警灯告警信号失败", e);
} }
} }
} else { } else {
@@ -292,7 +293,7 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable {
} }
data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0); data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0);
} catch (Exception e) { } catch (Exception e) {
log.info("下发告警灯取消告警信号失败"); log.error("下发告警灯取消告警信号失败", e);
} }
} }
} else { } else {

View File

@@ -41,6 +41,7 @@ import org.nl.acs.task.domain.Task;
import org.nl.acs.task.service.TaskService; import org.nl.acs.task.service.TaskService;
import org.nl.acs.task.service.dto.TaskDto; import org.nl.acs.task.service.dto.TaskDto;
import org.nl.acs.task.service.impl.TaskServiceImpl; import org.nl.acs.task.service.impl.TaskServiceImpl;
import org.nl.common.utils.ThrowableUtil;
import org.nl.system.service.dict.ISysDictService; import org.nl.system.service.dict.ISysDictService;
import org.nl.system.service.dict.dao.Dict; import org.nl.system.service.dict.dao.Dict;
import org.nl.system.service.param.ISysParamService; import org.nl.system.service.param.ISysParamService;
@@ -159,6 +160,10 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
transportOrder = inst.getTask_code(); transportOrder = inst.getTask_code();
logServer.deviceExecuteLog(this.device_code, "", "", "agvphase" + "反馈:" + data); logServer.deviceExecuteLog(this.device_code, "", "", "agvphase" + "反馈:" + data);
//到达取货点
//(需要WCS反馈)
} else if (phase == 0x03) {
// AGV使用率统计 - 开始工作 // AGV使用率统计 - 开始工作
try { try {
String agvDeviceCode = "agv" + carno; String agvDeviceCode = "agv" + carno;
@@ -172,9 +177,6 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
log.error("AGV使用率统计-开始工作失败: {}", e.getMessage()); log.error("AGV使用率统计-开始工作失败: {}", e.getMessage());
} }
//到达取货点
//(需要WCS反馈)
} else if (phase == 0x03) {
if (agvaddr == 0) { if (agvaddr == 0) {
agvaddr = agvaddr_copy; agvaddr = agvaddr_copy;
} }
@@ -577,7 +579,7 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
} }
} }
} catch (Exception e) { } catch (Exception e) {
log.info("下发告警灯告警信号失败"); log.error("下发告警灯告警信号失败", e);
} }
data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0); data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0);
logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data);
@@ -594,7 +596,7 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic
} }
} }
} catch (Exception e) { } catch (Exception e) {
log.info("下发告警灯取消告警信号失败"); log.error("下发告警灯取消告警信号失败", e);
} }
data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0); data = NDCAgvService.sendAgvOneModeInst(phase, index, 0, 0, 0, 0, 0);
logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data);

View File

@@ -64,35 +64,29 @@ public class GuardLampDeviceDriver extends AbstractOpcDeviceDriver implements De
Map<String, Object> itemMap = new HashMap<String, Object>(); Map<String, Object> itemMap = new HashMap<String, Object>();
itemMap.put(to_param, Integer.parseInt(value)); itemMap.put(to_param, Integer.parseInt(value));
// 改动1恢复线程池状态打印和你原代码一致方便监控
java.util.concurrent.ThreadPoolExecutor executor = (java.util.concurrent.ThreadPoolExecutor) ThreadPoolUtil.getGlobalFixedExecutor(); java.util.concurrent.ThreadPoolExecutor executor = (java.util.concurrent.ThreadPoolExecutor) ThreadPoolUtil.getGlobalFixedExecutor();
log.info("线程池状态 - 活跃线程数: {}, 队列大小: {}, 已完成任务数: {}", log.info("线程池状态 - 活跃线程数: {}, 队列大小: {}, 已完成任务数: {}",
executor.getActiveCount(), executor.getActiveCount(),
executor.getQueue().size(), executor.getQueue().size(),
executor.getCompletedTaskCount()); executor.getCompletedTaskCount());
// 改动2加try-catch捕获线程池满的拒绝异常实现「满了就拒绝」
try { try {
// 核心全局线程池直接执行control无任何嵌套新建线程
ThreadPoolUtil.getGlobalFixedExecutor().submit(new Runnable() { ThreadPoolUtil.getGlobalFixedExecutor().submit(new Runnable() {
@Override @Override
public void run() { public void run() {
try { try {
control(itemMap); control(itemMap);
logServer.deviceExecuteLog(device_code, "", "", "下发电气信号设备号:" + device_code + ",下发电气:" + to_param + ",下发电气值:" + value);
} catch (Exception e) { } catch (Exception e) {
log.error("异步执行 control 方法失败,参数:" + to_param, e); log.error("异步执行 control 方法失败,参数:" + to_param, e);
logServer.deviceExecuteLog(device_code, "", "", "下发电气信号失败:" + e.getMessage() + ",设备号:" + device_code + ",下发电气:" + to_param + ",下发电气值:" + value);
} }
} }
}); });
} catch (RejectedExecutionException e) { } catch (RejectedExecutionException e) {
// 改动3线程池满拒绝时打错误日志+记录执行日志,不影响主流程
log.error("线程池队列满,下发任务被拒绝,参数:{}", to_param, e); log.error("线程池队列满,下发任务被拒绝,参数:{}", to_param, e);
logServer.deviceExecuteLog(device_code, "", "", "下发电气信号失败:线程池队列满,参数:" + to_param + ",值:" + value); logServer.deviceExecuteLog(device_code, "", "", "下发电气信号失败:线程池队列满,参数:" + to_param + ",值:" + value);
return; // 拒绝后直接返回,不记录成功日志
} }
// 仅任务提交成功时,记录正常下发日志
logServer.deviceExecuteLog(device_code, "", "", "下发电气信号设备号:" + device_code + ",下发电气:" + to_param + ",下发电气值:" + value);
} }
@Override @Override

View File

@@ -987,6 +987,7 @@ public class InstructionServiceImpl extends CommonServiceImpl<InstructionMapper,
instdto.setNext_point_code(next_point_code); instdto.setNext_point_code(next_point_code);
instdto.setPriority(acsTask.getPriority()); instdto.setPriority(acsTask.getPriority());
instdto.setInstruction_status("0"); instdto.setInstruction_status("0");
instdto.setCar_type(acsTask.getCar_type());
instdto.setExecute_device_code(dto.getNext_device_code()); instdto.setExecute_device_code(dto.getNext_device_code());
try { try {
this.create(instdto); this.create(instdto);

View File

@@ -225,7 +225,7 @@ public class FabController {
public ResponseEntity<TableDataInfo<List<LB>>> vehicleType() { public ResponseEntity<TableDataInfo<List<LB>>> vehicleType() {
List<LB> result = new ArrayList<>(); List<LB> result = new ArrayList<>();
for (VehicleTypeEnum value : VehicleTypeEnum.values()) { for (VehicleTypeEnum value : VehicleTypeEnum.values()) {
result.add(LB.builder().label(value.getVehicleName()).value(value.getVehicleCode()).build()); result.add(LB.builder().label(value.getVehicleCode()).value(value.getVehicleCode()).build());
} }
return new ResponseEntity(TableDataInfo.build(result), HttpStatus.OK); return new ResponseEntity(TableDataInfo.build(result), HttpStatus.OK);
} }

View File

@@ -294,6 +294,7 @@ public class HandheldServiceImpl implements HandheldService {
jo.put("vehicle_type", mdBaseVehicle.getVehicle_type()); jo.put("vehicle_type", mdBaseVehicle.getVehicle_type());
jo.put("region_code", RegionEnum.NBGD.getRegion_code()); jo.put("region_code", RegionEnum.NBGD.getRegion_code());
param.put("region_code", RegionEnum.NBGD.getRegion_code()); param.put("region_code", RegionEnum.NBGD.getRegion_code());
jo.put("car_type","start");
jo.put("ext_data", param); jo.put("ext_data", param);
connectorTask.apply(jo); connectorTask.apply(jo);
} }
@@ -324,6 +325,7 @@ public class HandheldServiceImpl implements HandheldService {
jo.put("config_code", "EMPTYCAGENEWTask"); jo.put("config_code", "EMPTYCAGENEWTask");
jo.put("create_mode", GeneralDefinition.AUTO_CREATION); jo.put("create_mode", GeneralDefinition.AUTO_CREATION);
jo.put("vehicle_code", vehicle_code); jo.put("vehicle_code", vehicle_code);
jo.put("car_type","end");
connectorTask.apply(jo); connectorTask.apply(jo);
} }
@@ -350,6 +352,8 @@ public class HandheldServiceImpl implements HandheldService {
jo.put("create_mode", GeneralDefinition.AUTO_CREATION); jo.put("create_mode", GeneralDefinition.AUTO_CREATION);
jo.put("vehicle_qty", vehicle_list.length); jo.put("vehicle_qty", vehicle_list.length);
jo.put("vehicle_code", vehicle); jo.put("vehicle_code", vehicle);
jo.put("car_type","start");
jo.put("ext_data", param); jo.put("ext_data", param);
connectorTask.apply(jo); connectorTask.apply(jo);
} }
@@ -707,6 +711,7 @@ public class HandheldServiceImpl implements HandheldService {
jo.put("config_code", "TOSTOREHOUSETask"); jo.put("config_code", "TOSTOREHOUSETask");
jo.put("create_mode", GeneralDefinition.AUTO_CREATION); jo.put("create_mode", GeneralDefinition.AUTO_CREATION);
jo.put("vehicle_type", vehicle_type); jo.put("vehicle_type", vehicle_type);
jo.put("car_type", "start");
jo.put("ext_data", param); jo.put("ext_data", param);
connectorTask.apply(jo); connectorTask.apply(jo);
iSchBasePointService.update(Wrappers.lambdaUpdate(SchBasePoint.class) iSchBasePointService.update(Wrappers.lambdaUpdate(SchBasePoint.class)
@@ -743,6 +748,7 @@ public class HandheldServiceImpl implements HandheldService {
jo.put("create_mode", GeneralDefinition.AUTO_CREATION); jo.put("create_mode", GeneralDefinition.AUTO_CREATION);
jo.put("vehicle_code", vehicle_code); jo.put("vehicle_code", vehicle_code);
jo.put("vehicle_type", mdBaseVehicle.getVehicle_type()); jo.put("vehicle_type", mdBaseVehicle.getVehicle_type());
jo.put("car_type","start");
jo.put("ext_data", param); jo.put("ext_data", param);
connectorTask.apply(jo); connectorTask.apply(jo);
} }

View File

@@ -285,6 +285,7 @@ public abstract class AbstractTask {
task.setWorkshop_code(taskConfig.getWorkshop_code()); task.setWorkshop_code(taskConfig.getWorkshop_code());
task.setRemark(param.getString("remark")); task.setRemark(param.getString("remark"));
task.setAcs_trace_id(param.getString("task_seq")); task.setAcs_trace_id(param.getString("task_seq"));
task.setCar_type(param.getString("car_type"));
// 设置起/终点 // 设置起/终点
this.setTaskPoint(taskConfig, task, apply_point_code); this.setTaskPoint(taskConfig, task, apply_point_code);
task.setRequest_param(JSONObject.toJSONString(param.get("ext_data"))); task.setRequest_param(JSONObject.toJSONString(param.get("ext_data")));