@@ -3,7 +3,6 @@ package org.opentcs.manage;
import com.alibaba.fastjson.JSON ;
import com.alibaba.fastjson.JSONObject ;
import java.util.Date ;
import java.util.HashMap ;
import java.util.concurrent.ConcurrentHashMap ;
import java.util.concurrent.Executors ;
import java.util.concurrent.ScheduledExecutorService ;
@@ -50,7 +49,7 @@ public class AdapterManage {
* 记录通讯适配器数据,实现异步不阻塞更新车辆模型
* 基于线程安全HASHMAP
*/
private static final ConcurrentHashMap< String, AgvInfo > adapterDataMap = new ConcurrentHashMap< > ( ) ;
// private static final ConcurrentHashMap< String, AgvInfo> adapterDataMap = new ConcurrentHashMap<>() ;
/**
* 内核状态
*/
@@ -74,69 +73,21 @@ public class AdapterManage {
Runnable task = ( ) - > {
// if (!kernelStatus) {
// 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 ( ) ;
} ;
/**
* 自动管理通讯适配器
*/
// 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 ( ) ;
long currentTime = date . getTime ( ) ;
System . out . println ( " autoManageAdapterStatus: " + adapterStatusMap ) ;
System . out . println ( " autoManageAdapterStatus sout : " + adapterStatusMap ) ;
adapterStatusMap . forEach ( ( key , value ) - > {
LOG . info ( " adapterStatusMap starts name: {} " , key ) ;
@@ -144,52 +95,33 @@ public class AdapterManage {
agvStatus . setTime ( value . getTime ( ) ) ;
if ( currentTime - value . getTime ( ) > AUTO_CLOSE_TIME ) {
agvStatus . setStatus ( AdapterStatus . DISABLE ) ;
//当前时间减去记录时间大于阈值,自动关闭通讯适配器
kernel . disableAdapter ( key ) ;
agvStatus . setStatus ( AdapterStatus . DISABLE ) ;
} else {
agvStatus . setStatus ( AdapterStatus . ENABLE ) ;
//通讯适配器当前状态为关闭,设置状态为开启时才会进入
kernel . enableAdapter ( key ) ;
agvStatus . setStatus ( AdapterStatus . ENABLE ) ;
}
LOG . info ( " update the adapter: {} status: {} " , key , value ) ;
if ( value . getActionStatus ( ) ) {
kernel . sendToAdapter ( key , agvStatus ) ;
}
//更新数据状态
agvStatus . setActionStatus ( false ) ;
LOG . info ( " update the adapter: {} status: {} " , key , value ) ;
//更新记录数据
adapterStatusMap . put ( key , agvStatus ) ;
System . out . println ( " adapterStatusMap end name: " + key ) ;
LOG . info ( " adapterStatusMap end name: {} " , key ) ;
} ) ;
}
/**
* 更新适配器车辆模型
*/
private void updateAdapterVehicleModel ( ) {
adapterDataMap . forEach ( ( key , value ) - > {
System . out . println ( " updateAdapterVehicleModel name: " + key ) ;
kernel . sendToAdapter ( key , value ) ;
adapterDataMap . remove ( key ) ;
} ) ;
}
/**
* 更新通讯适配器状态
* @param name 车辆名称
*/
public static void setAdapterStatus ( String name ) {
Date date = new Date ( ) ;
long time = date . getTime ( ) ;
AgvStatus newAgvStatus = new AgvStatus ( ) ;
newAgvStatus . setTime ( time ) ;
newAgvStatus . setActionStatus ( false ) ;
Date date = new Date ( ) ;
newAgvStatus . setTime ( date . getTime ( ) ) ;
if ( ! adapterStatusMap . isEmpty ( ) & & adapterStatusMap . containsKey ( name ) ) {
//已记录,只更新时间
@@ -202,38 +134,15 @@ public class AdapterManage {
adapterStatusMap . put ( name , newAgvStatus ) ;
}
public static boolean getAdapterStatus ( String name ) {
AgvStatus agvStatus = adapterStatusMap . get ( name ) ;
if ( agvStatus ! = null ) {
return agvStatus . getStatus ( ) ;
}
return false ;
}
/**
* 设置动作完成状态
* @param name 车辆名称
*/
public static void setActionStatus ( String name ) {
AgvStatus agvStatus = adapterStatusMap . get ( name ) ;
agvStatus . setActionStatus ( true ) ;
adapterStatusMap . put ( name , agvStatus ) ;
}
/**
* 记录对应通讯适配器最后一次上报数据
* @param name 车辆名称
* @param data 数据
*/
public static void setAdapterVehicleModel ( String name , String data ) {
public static AgvInfo setAdapterVehicleModel ( String name , String data ) {
JSONObject jsonObject = JSON . parseObject ( data ) ;
//校验通讯序列号
AgvInfo agvInfo = new AgvInfo ( ) ;
agvInfo . setSender ( jsonObject . getString ( " sender " ) ) ;
agvInfo . setReceiver ( jsonObject . getString ( " receiver " ) ) ;
@@ -242,7 +151,8 @@ public class AdapterManage {
agvInfo . setTime ( jsonObject . getString ( " time " ) ) ;
agvInfo . setParams ( getAgvInfoParams ( jsonObject . getString ( " params " ) ) ) ;
adapterDataMap. put ( name , agvInfo) ;
// adapterDataMap.put(name, agvInfo) ;
return agvInfo ;
}
private static AgvInfoParams getAgvInfoParams ( String paramsStr ) {
@@ -271,4 +181,44 @@ public class AdapterManage {
Boolean ENABLE = true ;
Boolean DISABLE = false ;
}
// private void testSendMessage() {
// System.out.println("test");
// AgvInfoParams agvInfoParams = new AgvInfoParams();
// agvInfoParams.setX(0.5f);
// agvInfoParams.setY(0.5f);
// agvInfoParams.setAngle(0.5f);
// agvInfoParams.setPoint(12);
// agvInfoParams.setPower(0.52f);
// agvInfoParams.setAgv_status(0);
// agvInfoParams.setCargo_status(0);
// agvInfoParams.setAgv_model(0);
// agvInfoParams.setCharge_status(0);
// agvInfoParams.setAction_status(1);
//
// AgvInfo agvInfo = new AgvInfo();
// agvInfo.setReceiver("OPENTCS");
// agvInfo.setSender("KC-CTRL");
// agvInfo.setSerial_num(1);
// agvInfo.setType(1);
// agvInfo.setTime("2020-07-07 09:09:09");
// agvInfo.setVehicle_name("v2");
// agvInfo.setParams(agvInfoParams);
//
// System.out.println("testSendMessage agvInfo: " + agvInfo);
//
// KernelServicePortal servicePortal = new KernelServicePortalBuilder(USER, PASSWORD).build();
// servicePortal.login(IP, PORT);
// VehicleService vehicleService = servicePortal.getVehicleService();
// Vehicle vehicle = vehicleService.fetchObject(Vehicle.class, "v2");
//
// if (vehicle != null) {
// System.out.println("send success");
// vehicleService.sendCommAdapterMessage(vehicle.getReference(), agvInfo);
// } else {
// System.out.println("send not fund");
// }
//
//// kernel.sendToAdapter("v2", agvInfo);
// }
}