update
This commit is contained in:
parent
b14d86c96b
commit
22c0518721
@ -30,7 +30,6 @@ import org.opentcs.drivers.vehicle.SimVehicleCommAdapter;
|
|||||||
import org.opentcs.drivers.vehicle.VehicleCommAdapter;
|
import org.opentcs.drivers.vehicle.VehicleCommAdapter;
|
||||||
import org.opentcs.drivers.vehicle.VehicleProcessModel;
|
import org.opentcs.drivers.vehicle.VehicleProcessModel;
|
||||||
import org.opentcs.drivers.vehicle.management.VehicleProcessModelTO;
|
import org.opentcs.drivers.vehicle.management.VehicleProcessModelTO;
|
||||||
import org.opentcs.manage.entity.ActionStatus;
|
|
||||||
import org.opentcs.manage.entity.AgvInfo;
|
import org.opentcs.manage.entity.AgvInfo;
|
||||||
import org.opentcs.manage.entity.AgvInfoParams;
|
import org.opentcs.manage.entity.AgvInfoParams;
|
||||||
import org.opentcs.manage.entity.AgvStatus;
|
import org.opentcs.manage.entity.AgvStatus;
|
||||||
@ -285,9 +284,9 @@ public class LoopbackCommunicationAdapter
|
|||||||
if (message instanceof AgvInfo agvInfo) {
|
if (message instanceof AgvInfo agvInfo) {
|
||||||
//通讯适配器车辆模型更新
|
//通讯适配器车辆模型更新
|
||||||
handleCallbacks(agvInfo.getParams());
|
handleCallbacks(agvInfo.getParams());
|
||||||
} else if (message instanceof ActionStatus actionStatus) {
|
} else if (message instanceof AgvStatus agvStatus) {
|
||||||
//自动管理通讯适配器状态和适配器动作执行状态
|
//自动管理通讯适配器状态和适配器动作执行状态
|
||||||
handleActionStatus(actionStatus);
|
handleActionStatus(agvStatus);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -805,8 +804,8 @@ public class LoopbackCommunicationAdapter
|
|||||||
return serialNum;
|
return serialNum;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleActionStatus(ActionStatus actionStatus) {
|
private void handleActionStatus(AgvStatus agvStatus) {
|
||||||
if (actionStatus.getStatus()) {
|
if (agvStatus.getActionStatus()) {
|
||||||
ACTION_STATUS = false;
|
ACTION_STATUS = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,11 @@ public enum Actions {
|
|||||||
//充电
|
//充电
|
||||||
CHARGE,
|
CHARGE,
|
||||||
//取消充电
|
//取消充电
|
||||||
CANCEL_CHARGE
|
CANCEL_CHARGE,
|
||||||
|
//取货
|
||||||
|
PICK_UP,
|
||||||
|
//放货
|
||||||
|
RELEASE,
|
||||||
;
|
;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -51,6 +51,10 @@ public class AdapterManage {
|
|||||||
* 基于线程安全HASHMAP
|
* 基于线程安全HASHMAP
|
||||||
*/
|
*/
|
||||||
private static final ConcurrentHashMap<String, AgvInfo> adapterDataMap = new ConcurrentHashMap<>();
|
private static final ConcurrentHashMap<String, AgvInfo> adapterDataMap = new ConcurrentHashMap<>();
|
||||||
|
/**
|
||||||
|
* 内核状态
|
||||||
|
*/
|
||||||
|
// public static Boolean kernelStatus = false;
|
||||||
|
|
||||||
//开启通讯信息
|
//开启通讯信息
|
||||||
private static final String USER = GuestUserCredentials.USER;
|
private static final String USER = GuestUserCredentials.USER;
|
||||||
@ -58,9 +62,6 @@ public class AdapterManage {
|
|||||||
private static final String IP = GuestUserCredentials.IP;
|
private static final String IP = GuestUserCredentials.IP;
|
||||||
private static final Integer PORT = GuestUserCredentials.PORT;
|
private static final Integer PORT = GuestUserCredentials.PORT;
|
||||||
|
|
||||||
private int i = 1;
|
|
||||||
|
|
||||||
|
|
||||||
//开启定时任务
|
//开启定时任务
|
||||||
public void START() {
|
public void START() {
|
||||||
scheduler.scheduleWithFixedDelay(task, 5000, 500, TimeUnit.MILLISECONDS);
|
scheduler.scheduleWithFixedDelay(task, 5000, 500, TimeUnit.MILLISECONDS);
|
||||||
@ -72,88 +73,107 @@ public class AdapterManage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Runnable task = () -> {
|
Runnable task = () -> {
|
||||||
// kernel = new KernelCommunication(USER, PASSWORD, IP, PORT);
|
|
||||||
|
|
||||||
// autoManageAdapterStatus();
|
// if (!kernelStatus) {
|
||||||
// updateAdapterVehicleModel();
|
// return;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// System.out.println("test-----start");
|
||||||
|
//
|
||||||
|
// KernelServicePortal servicePortal = new KernelServicePortalBuilder(USER, PASSWORD).build();
|
||||||
|
// servicePortal.login(IP, PORT);
|
||||||
|
//
|
||||||
|
// VehicleService vehicleService = servicePortal.getVehicleService();
|
||||||
|
// Vehicle vehicle = vehicleService.fetchObject(Vehicle.class, "v2");
|
||||||
|
//
|
||||||
|
// vehicleService.enableCommAdapter(vehicle.getReference());
|
||||||
|
//
|
||||||
|
// servicePortal.logout();
|
||||||
|
//
|
||||||
|
// System.out.println("test-----end");
|
||||||
|
|
||||||
|
kernel = new KernelCommunication(USER, PASSWORD, IP, PORT);
|
||||||
|
|
||||||
|
autoManageAdapterStatus();
|
||||||
|
updateAdapterVehicleModel();
|
||||||
|
|
||||||
kernel.logout();
|
kernel.logout();
|
||||||
|
|
||||||
// System.out.println("end task");
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 自动管理通讯适配器
|
* 自动管理通讯适配器
|
||||||
*/
|
*/
|
||||||
private static boolean autoManageAdapterStatus(String name) {
|
// private static boolean autoManageAdapterStatus(String name) {
|
||||||
Date date = new Date();
|
|
||||||
long currentTime = date.getTime();
|
|
||||||
|
|
||||||
System.out.println("autoManageAdapterStatus: " + adapterStatusMap);
|
|
||||||
|
|
||||||
AgvStatus oldData = adapterStatusMap.get(name);
|
|
||||||
|
|
||||||
if (oldData == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
AgvStatus agvStatus = new AgvStatus();
|
|
||||||
agvStatus.setTime(oldData.getTime());
|
|
||||||
|
|
||||||
if (currentTime - oldData.getTime() > AUTO_CLOSE_TIME) {
|
|
||||||
System.out.println("adapterStatusMap first DISABLE");
|
|
||||||
agvStatus.setStatus(AdapterStatus.DISABLE);
|
|
||||||
} else {
|
|
||||||
System.out.println("adapterStatusMap first ENABLE");
|
|
||||||
agvStatus.setStatus(AdapterStatus.ENABLE);
|
|
||||||
}
|
|
||||||
|
|
||||||
//更新记录数据
|
|
||||||
adapterStatusMap.put(name, agvStatus);
|
|
||||||
|
|
||||||
return agvStatus.getStatus();
|
|
||||||
}
|
|
||||||
// private void autoManageAdapterStatus() {
|
|
||||||
// Date date = new Date();
|
// Date date = new Date();
|
||||||
// long currentTime = date.getTime();
|
// long currentTime = date.getTime();
|
||||||
//
|
//
|
||||||
// System.out.println("autoManageAdapterStatus: " + adapterStatusMap);
|
// System.out.println("autoManageAdapterStatus: " + adapterStatusMap);
|
||||||
// adapterStatusMap.forEach((key, value) -> {
|
|
||||||
// System.out.println("adapterStatusMap first");
|
|
||||||
// Long time = value.getTime();
|
|
||||||
// AgvStatus agvStatus = new AgvStatus();
|
|
||||||
// agvStatus.setTime(value.getTime());
|
|
||||||
// agvStatus.setActionStatus(value.getActionStatus());
|
|
||||||
//
|
//
|
||||||
// if (currentTime - time > AUTO_CLOSE_TIME) {
|
// AgvStatus oldData = adapterStatusMap.get(name);
|
||||||
// System.out.println("adapterStatusMap first DISABLE");
|
|
||||||
// agvStatus.setStatus(AdapterStatus.DISABLE);
|
|
||||||
// kernel.disableAdapter(key);
|
|
||||||
// } else {
|
|
||||||
// System.out.println("adapterStatusMap first ENABLE");
|
|
||||||
// agvStatus.setStatus(AdapterStatus.ENABLE);
|
|
||||||
// kernel.enableAdapter(key);
|
|
||||||
// }
|
|
||||||
//
|
//
|
||||||
// LOG.info("update the adapter: {} status:{}", key, value);
|
// if (oldData == null) {
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
//
|
//
|
||||||
// if (agvStatus.getActionStatus()) {
|
// AgvStatus agvStatus = new AgvStatus();
|
||||||
// kernel.sendToAdapter(key, agvStatus);
|
// agvStatus.setTime(oldData.getTime());
|
||||||
// //动作执行结束,修改数据
|
|
||||||
// agvStatus.setActionStatus(false);
|
|
||||||
// }
|
|
||||||
//
|
//
|
||||||
// //更新记录数据
|
// if (currentTime - oldData.getTime() > AUTO_CLOSE_TIME) {
|
||||||
// adapterStatusMap.put(key, agvStatus);
|
// System.out.println("adapterStatusMap first DISABLE");
|
||||||
// });
|
// agvStatus.setStatus(AdapterStatus.DISABLE);
|
||||||
|
// } else {
|
||||||
|
// System.out.println("adapterStatusMap first ENABLE");
|
||||||
|
// agvStatus.setStatus(AdapterStatus.ENABLE);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// //更新记录数据
|
||||||
|
// adapterStatusMap.put(name, agvStatus);
|
||||||
|
//
|
||||||
|
// return agvStatus.getStatus();
|
||||||
// }
|
// }
|
||||||
|
private void autoManageAdapterStatus() {
|
||||||
|
Date date = new Date();
|
||||||
|
long currentTime = date.getTime();
|
||||||
|
|
||||||
|
System.out.println("autoManageAdapterStatus: " + adapterStatusMap);
|
||||||
|
adapterStatusMap.forEach((key, value) -> {
|
||||||
|
LOG.info("adapterStatusMap starts name: {}", key);
|
||||||
|
|
||||||
|
AgvStatus agvStatus = new AgvStatus();
|
||||||
|
agvStatus.setTime(value.getTime());
|
||||||
|
|
||||||
|
if (currentTime - value.getTime() > AUTO_CLOSE_TIME) {
|
||||||
|
agvStatus.setStatus(AdapterStatus.DISABLE);
|
||||||
|
kernel.disableAdapter(key);
|
||||||
|
} else {
|
||||||
|
agvStatus.setStatus(AdapterStatus.ENABLE);
|
||||||
|
kernel.enableAdapter(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG.info("update the adapter: {} status:{}", key, value);
|
||||||
|
|
||||||
|
if (value.getActionStatus()) {
|
||||||
|
kernel.sendToAdapter(key, agvStatus);
|
||||||
|
}
|
||||||
|
|
||||||
|
//更新数据状态
|
||||||
|
agvStatus.setActionStatus(false);
|
||||||
|
|
||||||
|
//更新记录数据
|
||||||
|
adapterStatusMap.put(key, agvStatus);
|
||||||
|
|
||||||
|
System.out.println("adapterStatusMap end name: " + key);
|
||||||
|
LOG.info("adapterStatusMap end name: {}", key);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新适配器车辆模型
|
* 更新适配器车辆模型
|
||||||
*/
|
*/
|
||||||
private void updateAdapterVehicleModel() {
|
private void updateAdapterVehicleModel() {
|
||||||
adapterDataMap.forEach((key, value) -> {
|
adapterDataMap.forEach((key, value) -> {
|
||||||
System.out.println("updateAdapterVehicleModel first");
|
System.out.println("updateAdapterVehicleModel name: " + key);
|
||||||
kernel.sendToAdapter(key, value);
|
kernel.sendToAdapter(key, value);
|
||||||
adapterDataMap.remove(key);
|
adapterDataMap.remove(key);
|
||||||
});
|
});
|
||||||
@ -169,6 +189,7 @@ public class AdapterManage {
|
|||||||
|
|
||||||
AgvStatus newAgvStatus = new AgvStatus();
|
AgvStatus newAgvStatus = new AgvStatus();
|
||||||
newAgvStatus.setTime(time);
|
newAgvStatus.setTime(time);
|
||||||
|
newAgvStatus.setActionStatus(false);
|
||||||
|
|
||||||
if (!adapterStatusMap.isEmpty() && adapterStatusMap.containsKey(name)) {
|
if (!adapterStatusMap.isEmpty() && adapterStatusMap.containsKey(name)) {
|
||||||
//已记录,只更新时间
|
//已记录,只更新时间
|
||||||
@ -195,21 +216,24 @@ public class AdapterManage {
|
|||||||
* 设置动作完成状态
|
* 设置动作完成状态
|
||||||
* @param name 车辆名称
|
* @param name 车辆名称
|
||||||
*/
|
*/
|
||||||
// public static void setActionStatus(String name) {
|
public static void setActionStatus(String name) {
|
||||||
// AgvStatus agvStatus = adapterStatusMap.get(name);
|
AgvStatus agvStatus = adapterStatusMap.get(name);
|
||||||
// agvStatus.setActionStatus(true);
|
agvStatus.setActionStatus(true);
|
||||||
// adapterStatusMap.put(name, agvStatus);
|
adapterStatusMap.put(name, agvStatus);
|
||||||
// }
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 记录对应通讯适配器最后一次上报数据
|
* 记录对应通讯适配器最后一次上报数据
|
||||||
* @param name 车辆名称
|
* @param name 车辆名称
|
||||||
* @param data 数据
|
* @param data 数据
|
||||||
*/
|
*/
|
||||||
public static AgvInfo setAdapterVehicleModel(String name, String data) {
|
public static void setAdapterVehicleModel(String name, String data) {
|
||||||
|
|
||||||
JSONObject jsonObject = JSON.parseObject(data);
|
JSONObject jsonObject = JSON.parseObject(data);
|
||||||
|
|
||||||
|
//校验通讯序列号
|
||||||
|
|
||||||
|
|
||||||
AgvInfo agvInfo = new AgvInfo();
|
AgvInfo agvInfo = new AgvInfo();
|
||||||
agvInfo.setSender(jsonObject.getString("sender"));
|
agvInfo.setSender(jsonObject.getString("sender"));
|
||||||
agvInfo.setReceiver(jsonObject.getString("receiver"));
|
agvInfo.setReceiver(jsonObject.getString("receiver"));
|
||||||
@ -218,7 +242,7 @@ public class AdapterManage {
|
|||||||
agvInfo.setTime(jsonObject.getString("time"));
|
agvInfo.setTime(jsonObject.getString("time"));
|
||||||
agvInfo.setParams(getAgvInfoParams(jsonObject.getString("params")));
|
agvInfo.setParams(getAgvInfoParams(jsonObject.getString("params")));
|
||||||
|
|
||||||
return agvInfo;
|
adapterDataMap.put(name, agvInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static AgvInfoParams getAgvInfoParams(String paramsStr) {
|
private static AgvInfoParams getAgvInfoParams(String paramsStr) {
|
||||||
@ -247,14 +271,4 @@ public class AdapterManage {
|
|||||||
Boolean ENABLE = true;
|
Boolean ENABLE = true;
|
||||||
Boolean DISABLE = false;
|
Boolean DISABLE = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void test() {
|
|
||||||
KernelServicePortal build = new KernelServicePortalBuilder(USER, PASSWORD).build();
|
|
||||||
build.login(IP, PORT);
|
|
||||||
VehicleService vehicleService = build.getVehicleService();
|
|
||||||
Vehicle vehicle = vehicleService.fetchObject(Vehicle.class, "v1");
|
|
||||||
vehicleService.enableCommAdapter(vehicle.getReference());
|
|
||||||
vehicleService.sendCommAdapterMessage(vehicle.getReference(), "test");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
package org.opentcs.manage.entity;
|
|
||||||
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
@Data
|
|
||||||
public class ActionStatus {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 动作执行状态,true表示执行完成,false表示执行中
|
|
||||||
*/
|
|
||||||
private Boolean status;
|
|
||||||
|
|
||||||
}
|
|
@ -13,5 +13,8 @@ public class AgvStatus {
|
|||||||
* 通讯适配器状态:trye=开启,false=关闭
|
* 通讯适配器状态:trye=开启,false=关闭
|
||||||
*/
|
*/
|
||||||
private Boolean status;
|
private Boolean status;
|
||||||
|
/**
|
||||||
|
* 动作执行状态:trye=执行完成,false=未知
|
||||||
|
*/
|
||||||
|
private Boolean actionStatus;
|
||||||
}
|
}
|
||||||
|
@ -37,8 +37,6 @@ import org.opentcs.kernel.extensions.servicewebapi.v1.binding.PostVehicleRoutesR
|
|||||||
import org.opentcs.kernel.extensions.servicewebapi.v1.binding.PutVehicleAllowedOrderTypesTO;
|
import org.opentcs.kernel.extensions.servicewebapi.v1.binding.PutVehicleAllowedOrderTypesTO;
|
||||||
import org.opentcs.kernel.extensions.servicewebapi.v1.binding.PutVehicleEnergyLevelThresholdSetTO;
|
import org.opentcs.kernel.extensions.servicewebapi.v1.binding.PutVehicleEnergyLevelThresholdSetTO;
|
||||||
import org.opentcs.manage.AdapterManage;
|
import org.opentcs.manage.AdapterManage;
|
||||||
import org.opentcs.manage.entity.ActionStatus;
|
|
||||||
import org.opentcs.manage.entity.AgvInfo;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles requests related to vehicles.
|
* Handles requests related to vehicles.
|
||||||
@ -87,22 +85,11 @@ public class VehicleHandler {
|
|||||||
|
|
||||||
//将数据更新到线程安全的集合中,防止线程阻塞
|
//将数据更新到线程安全的集合中,防止线程阻塞
|
||||||
AdapterManage.setAdapterStatus(name);
|
AdapterManage.setAdapterStatus(name);
|
||||||
|
|
||||||
if (AdapterManage.getAdapterStatus(name)) {
|
|
||||||
vehicleService.enableCommAdapter(vehicle.getReference());
|
|
||||||
} else {
|
|
||||||
//todo 关闭暂时有问题
|
|
||||||
vehicleService.disableCommAdapter(vehicle.getReference());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (type == 1) { //上报agv详细信息
|
if (type == 1) { //上报agv详细信息
|
||||||
AgvInfo agvInfo = AdapterManage.setAdapterVehicleModel(name, jsonStr);
|
AdapterManage.setAdapterVehicleModel(name, jsonStr);
|
||||||
vehicleService.sendCommAdapterMessage(vehicle.getReference(), agvInfo);
|
|
||||||
} else if (type == 5) { //上报动作完成
|
} else if (type == 5) { //上报动作完成
|
||||||
//动作完成上报
|
//动作完成上报
|
||||||
ActionStatus actionStatus = new ActionStatus();
|
AdapterManage.setActionStatus(name);
|
||||||
actionStatus.setStatus(true);
|
|
||||||
vehicleService.sendCommAdapterMessage(vehicle.getReference(), actionStatus);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,14 +115,14 @@ public class StandardKernel
|
|||||||
//开启MQTT服务
|
//开启MQTT服务
|
||||||
// mqttBrokerServer.startMqtt();
|
// mqttBrokerServer.startMqtt();
|
||||||
|
|
||||||
|
//开启通讯适配器自动管理
|
||||||
|
adapterManage.START();
|
||||||
|
LOG.info("Communication adapter auto management started successfully");
|
||||||
|
|
||||||
initialized = true;
|
initialized = true;
|
||||||
LOG.debug("Starting kernel thread");
|
LOG.debug("Starting kernel thread");
|
||||||
Thread kernelThread = new Thread(this, "kernelThread");
|
Thread kernelThread = new Thread(this, "kernelThread");
|
||||||
kernelThread.start();
|
kernelThread.start();
|
||||||
|
|
||||||
//开启通讯适配器自动管理
|
|
||||||
// adapterManage.START();
|
|
||||||
// LOG.info("Communication adapter auto management started successfully");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -143,7 +143,7 @@ public class StandardKernel
|
|||||||
// mqttBrokerServer.stopMqtt();
|
// mqttBrokerServer.stopMqtt();
|
||||||
|
|
||||||
//关闭通讯适配器自动管理
|
//关闭通讯适配器自动管理
|
||||||
// adapterManage.STOP();
|
adapterManage.STOP();
|
||||||
|
|
||||||
initialized = false;
|
initialized = false;
|
||||||
terminationSemaphore.release();
|
terminationSemaphore.release();
|
||||||
|
@ -51,6 +51,7 @@ import org.opentcs.data.order.TransportOrder;
|
|||||||
import org.opentcs.data.peripherals.PeripheralJob;
|
import org.opentcs.data.peripherals.PeripheralJob;
|
||||||
import org.opentcs.data.peripherals.PeripheralOperation;
|
import org.opentcs.data.peripherals.PeripheralOperation;
|
||||||
import org.opentcs.drivers.vehicle.LoadHandlingDevice;
|
import org.opentcs.drivers.vehicle.LoadHandlingDevice;
|
||||||
|
import org.opentcs.manage.AdapterManage;
|
||||||
import org.opentcs.park.ParkStrategy;
|
import org.opentcs.park.ParkStrategy;
|
||||||
import org.opentcs.park.entity.Park;
|
import org.opentcs.park.entity.Park;
|
||||||
import org.opentcs.util.event.EventHandler;
|
import org.opentcs.util.event.EventHandler;
|
||||||
@ -171,6 +172,8 @@ public class PlantModelManager
|
|||||||
ObjectUnknownException {
|
ObjectUnknownException {
|
||||||
LOG.info("Plant model is being created: {}", to.getName());
|
LOG.info("Plant model is being created: {}", to.getName());
|
||||||
|
|
||||||
|
// AdapterManage.kernelStatus = true;
|
||||||
|
|
||||||
clear();
|
clear();
|
||||||
setName(to.getName());
|
setName(to.getName());
|
||||||
setProperties(to.getProperties());
|
setProperties(to.getProperties());
|
||||||
@ -196,6 +199,9 @@ public class PlantModelManager
|
|||||||
}
|
}
|
||||||
|
|
||||||
createVisualLayout(to.getVisualLayout());
|
createVisualLayout(to.getVisualLayout());
|
||||||
|
|
||||||
|
// AdapterManage.kernelStatus = true;
|
||||||
|
LOG.info("Plant model created successfully: {}", to.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user