10 changed files with 259 additions and 275 deletions
@ -1,49 +0,0 @@ |
|||||
package com.galaxis.rcs.communication.amrCommunication; |
|
||||
|
|
||||
import lombok.AllArgsConstructor; |
|
||||
import lombok.Data; |
|
||||
|
|
||||
@Data |
|
||||
@AllArgsConstructor |
|
||||
public class AmrStatusAndInfo { |
|
||||
// agvId 车唯一标识
|
|
||||
public String agvId; |
|
||||
// agv名称
|
|
||||
public String agvName; |
|
||||
// agv类型
|
|
||||
public String agvType; |
|
||||
// agv型号
|
|
||||
public String agvModel; |
|
||||
// AMR功能型号
|
|
||||
public String agvFnModel; |
|
||||
// agv电量
|
|
||||
public double agvSOC; |
|
||||
// agv电池电压
|
|
||||
public double agvBatteryVoltage; |
|
||||
// agv充电状态
|
|
||||
public boolean agvChargingStatus; |
|
||||
// agv充电电流
|
|
||||
public double agvChargingCurrent; |
|
||||
// agv放电电流
|
|
||||
public double agvDischargingCurrent; |
|
||||
// agv电池温度
|
|
||||
public double agvBatteryTemperature; |
|
||||
// agv当前x坐标
|
|
||||
public double x; |
|
||||
// agv当前y坐标
|
|
||||
public double y; |
|
||||
// agv当前z坐标
|
|
||||
public double z; |
|
||||
// 当前所在站点的逻辑X坐标 Int32
|
|
||||
public int logicX; |
|
||||
// 当前所在站点的逻辑Y坐标 Int32
|
|
||||
public int logicY; |
|
||||
// 当前方向 UInt8 0: X轴正向 1: Y轴正向 2: X轴负向 3: Y轴负向 15: 未知方向
|
|
||||
public short direction; |
|
||||
// agv当前转动角度值
|
|
||||
public double orientation; |
|
||||
|
|
||||
public AmrStatusAndInfo(String agvId) { |
|
||||
this.agvId = agvId; |
|
||||
} |
|
||||
} |
|
||||
@ -0,0 +1,110 @@ |
|||||
|
package com.yvan.logisticsModel; |
||||
|
|
||||
|
import com.galaxis.rcs.common.entity.RcsTaskPlan; |
||||
|
import com.galaxis.rcs.plan.PlanTaskSequence; |
||||
|
import com.google.common.collect.Queues; |
||||
|
|
||||
|
import java.util.Map; |
||||
|
import java.util.concurrent.BlockingQueue; |
||||
|
|
||||
|
public class PtrAgvItem extends ExecutorItem { |
||||
|
private final int BLOCKING_QUEUE_CAPACITY = 100; |
||||
|
|
||||
|
// ip
|
||||
|
public String ip; |
||||
|
// agv名称
|
||||
|
public String agvName; |
||||
|
// agv类型
|
||||
|
public String agvType; |
||||
|
// agv型号
|
||||
|
public String agvModel; |
||||
|
// AMR功能型号
|
||||
|
public String agvFnModel; |
||||
|
// agv电量
|
||||
|
public double agvSOC; |
||||
|
// agv电池电压
|
||||
|
public double agvBatteryVoltage; |
||||
|
// agv充电状态
|
||||
|
public boolean agvChargingStatus; |
||||
|
// agv充电电流
|
||||
|
public double agvChargingCurrent; |
||||
|
// agv放电电流
|
||||
|
public double agvDischargingCurrent; |
||||
|
// agv电池温度
|
||||
|
public double agvBatteryTemperature; |
||||
|
// agv当前x坐标
|
||||
|
public double x; |
||||
|
// agv当前y坐标
|
||||
|
public double y; |
||||
|
// agv当前z坐标
|
||||
|
public double z; |
||||
|
// 当前所在站点的逻辑X坐标 Int32
|
||||
|
public int logicX; |
||||
|
// 当前所在站点的逻辑Y坐标 Int32
|
||||
|
public int logicY; |
||||
|
// 当前方向 UInt8 0: X轴正向 1: Y轴正向 2: X轴负向 3: Y轴负向 15: 未知方向
|
||||
|
public short direction; |
||||
|
// agv当前转动角度值
|
||||
|
public double orientation; |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 当前执行的任务规划列表 |
||||
|
*/ |
||||
|
final BlockingQueue<RcsTaskPlan> planQueue = Queues.newArrayBlockingQueue(BLOCKING_QUEUE_CAPACITY); |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 连接器线程 |
||||
|
*/ |
||||
|
private final PtrAgvConnectorThread connectorThread; |
||||
|
/** |
||||
|
* 启动连接器线程 |
||||
|
*/ |
||||
|
public void startConnector() { |
||||
|
if (!connectorThread.isRunning()) { |
||||
|
connectorThread.start(); |
||||
|
System.out.println("Connector started for executor: " + this.getId()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 停止连接器线程 |
||||
|
*/ |
||||
|
public void stopConnector() { |
||||
|
connectorThread.stop(); |
||||
|
System.out.println("Connector stopped for executor: " + this.getId()); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 添加任务序列到当前执行器 |
||||
|
*/ |
||||
|
public void appendSequence(PlanTaskSequence sequence) { |
||||
|
if (sequence == null || sequence.taskList.isEmpty()) { |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
// 检查 planList 是不是全都是我的任务
|
||||
|
for (RcsTaskPlan plan : sequence.taskList) { |
||||
|
if (!plan.getExecutorId().equals(this.getId())) { |
||||
|
throw new RuntimeException("plan not belong executor:" + this.getId() + ", " + plan.getExecutorId()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
LogisticsRuntime runtime = sequence.logisticsRuntime; |
||||
|
|
||||
|
planQueue.addAll(sequence.taskList); |
||||
|
|
||||
|
// TODO: 开启轮询线程,等待下一个待执行任务
|
||||
|
} |
||||
|
|
||||
|
public boolean isFree() { |
||||
|
return (this.planQueue.isEmpty() && this.connectorThread.isRunning()); |
||||
|
} |
||||
|
|
||||
|
public PtrAgvItem(LogisticsRuntime logisticsRuntime, Map<String, Object> raw) { |
||||
|
super(logisticsRuntime, raw); |
||||
|
this.connectorThread = new PtrAgvConnectorThread(this, logisticsRuntime); |
||||
|
} |
||||
|
|
||||
|
} |
||||
Loading…
Reference in new issue