Browse Source

add: 添加反馈AGV状态驱动,AGV状态变化下发信号

master
yanps 6 months ago
parent
commit
27c83cdc71
  1. 519
      hd/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/AgvServiceImpl.java
  2. 2
      hd/nladmin-system/src/main/java/org/nl/acs/device/device_driver/DriverTypeEnum.java
  3. 83
      hd/nladmin-system/src/main/java/org/nl/acs/device_driver/feedback_agv_status/FeedbackAgvStatusDefination.java
  4. 103
      hd/nladmin-system/src/main/java/org/nl/acs/device_driver/feedback_agv_status/FeedbackAgvStatusDeviceDriver.java
  5. 195
      hd/nladmin-system/src/main/java/org/nl/acs/device_driver/feedback_agv_status/ItemProtocol.java
  6. 3
      qd/src/views/acs/device/config.vue
  7. 352
      qd/src/views/acs/device/driver/feedback_agv_status.vue

519
hd/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/AgvServiceImpl.java

@ -1,10 +1,12 @@
package org.nl.acs.agv.server.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import net.sf.json.JSONArray;
@ -16,10 +18,10 @@ import org.nl.acs.config.server.AcsConfigService;
import org.nl.acs.device.service.DeviceService;
import org.nl.acs.device.service.impl.DeviceServiceImpl;
import org.nl.acs.device_driver.agv_site.AgvSiteDeviceDriver;
import org.nl.acs.device_driver.feedback_agv_status.FeedbackAgvStatusDeviceDriver;
import org.nl.acs.device_driver.lamp_three_color.LampThreecolorDeviceDriver;
import org.nl.acs.device_driver.machines_site.MachinesSiteDeviceDriver;
import org.nl.acs.device_driver.magic3.Magic3DeviceDriver;
import org.nl.acs.device_driver.ndxy_special_two.NdxySpecialTwoDeviceDriver;
import org.nl.acs.device_driver.special_ordinary_site.SpecialOrdinarySiteDeviceDriver;
import org.nl.acs.device_driver.standard_autodoor.StandardAutodoorDeviceDriver;
import org.nl.acs.device_driver.standard_inspect_site.StandardInspectSiteDeviceDriver;
@ -27,8 +29,6 @@ import org.nl.acs.device_driver.standard_inspect_site_smart200.StandardInspectSi
import org.nl.acs.device_driver.standard_manipulator_inspect_site.StandardManipulatorInspectSiteDeviceDriver;
import org.nl.acs.device_driver.standard_ordinary_site.StandardOrdinarySiteDeviceDriver;
import org.nl.acs.device_driver.standard_storage.StandardStorageDeviceDriver;
import org.nl.acs.device_driver.weighing_site.WeighingSiteDeviceDriver;
import org.nl.acs.device_driver.ykbk_special.YkbkSpecialDeviceDriver;
import org.nl.acs.device_driver.yzja_special.YzjaSpecialDeviceDriver;
import org.nl.acs.ext.erp.service.AcsToErpService;
import org.nl.acs.ext.wms.service.AcsToWmsService;
@ -49,10 +49,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
@Slf4j
@Service
@ -78,10 +79,17 @@ public class AgvServiceImpl implements AgvService {
private final LogServer logServer;
private boolean startPointInget = false;
private boolean startPointOutget = false;
private boolean endPointInput = false;
private boolean endPointOutput = false;
private String instcode = null;
Map<String, AgvDto> AGVDeviceStatus = new HashMap();
@Value("${agvToAcs.addr}")
private String addr;
/**
* 获得之后num个天的时间
*
@ -537,7 +545,7 @@ public class AgvServiceImpl implements AgvService {
if (result.getStatus() == 200) {
arr.add(result.body());
}
} catch (Exception e ){
} catch (Exception e) {
e.printStackTrace();
}
}
@ -560,11 +568,25 @@ public class AgvServiceImpl implements AgvService {
HttpResponse result = HttpRequest.get(agvurl)
.timeout(20000)//超时,毫秒
.execute();
log.info("查询agv状态:{}", result.body());
System.out.println("查询agv状态数据:" + result.body());
if (result.getStatus() == 200) {
if (200 == 200) {
com.alibaba.fastjson.JSONObject body = com.alibaba.fastjson.JSONObject.parseObject(result.body());
com.alibaba.fastjson.JSONArray ja = body.getJSONArray("report");
com.alibaba.fastjson.JSONObject alarms = body.getJSONObject("alarms");
AtomicBoolean flag = new AtomicBoolean(false);
if (ObjectUtil.isNotEmpty(alarms) && CollUtil.isNotEmpty(alarms.getJSONArray("errors"))) {
com.alibaba.fastjson.JSONArray errors = alarms.getJSONArray("errors");
errors.forEach(e -> {
cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(e);
String code = jsonObject.getStr("code");
if (StrUtil.equals(code, "52106")) {
flag.set(true);
}
});
}
//0=可推送;1=正在更新场景;2=正在执行运单。
Integer upload_scene_status = body.getInteger("upload_scene_status");
for (int i = 0; i < ja.size(); i++) {
com.alibaba.fastjson.JSONObject jo = ja.getJSONObject(i);
//机器人编码
@ -575,44 +597,125 @@ public class AgvServiceImpl implements AgvService {
Boolean charging = rbk_report.getBoolean("charging");
//电池电量
float battery_level1 = rbk_report.getFloatValue("battery_level");
float battery_level=battery_level1*100;
float battery_level = battery_level1 * 100;
//当前地图
String current_map = rbk_report.getString("current_map");
//角度
float angle = rbk_report.getFloatValue("angle");
//执行运单信息
com.alibaba.fastjson.JSONObject current_order = jo.getJSONObject("current_order");
int task_status=rbk_report.getInteger("task_status");
String state=null;
if(task_status==0){
state="NONE";
}if(task_status==1){
state="WAITING";
}if(task_status==2){
state="RUNNING";
}if(task_status==3){
state="SUSPENDED";
}if(task_status==4){
state="COMPLETED";
}if(task_status==5){
state="FAILED";
}if(task_status==6){
state="CANCELED";
int task_status = rbk_report.getInteger("task_status");
//机器人是否被阻挡
Boolean blocked = rbk_report.getBoolean("blocked");
//true 表示急停按钮处于激活状态(按下), false 表示急停按钮处于非激活状态(拔起)
Boolean emergency = rbk_report.getBoolean("emergency");
String state = null;
if (task_status == 0) {
state = "NONE";
}
if (task_status == 1) {
state = "WAITING";
}
if (task_status == 2) {
state = "RUNNING";
}
if (task_status == 3) {
state = "SUSPENDED";
}
if (task_status == 4) {
state = "COMPLETED";
}
if (task_status == 5) {
state = "FAILED";
}
if (task_status == 6) {
state = "CANCELED";
}
//0表示断连,1表示连接上
Integer connectionStatus = jo.getInteger("connection_status");
String inst_code = current_order.getString("id");
String taskNo= "0";
String inst_code = null;
String taskNo = "0";
Instruction inst = null;
if (CollUtil.isNotEmpty(current_order)) {
inst_code = current_order.getString("id");
if (StrUtil.isNotEmpty(inst_code)) {
Instruction inst = instructionService.findByCodeFromCache(inst_code);
inst = instructionService.findByCodeFromCache(inst_code);
if (ObjectUtil.isNotEmpty(inst)) {
//任务号
taskNo = inst.getTask_code();
}
}
}
//x坐标
float x = rbk_report.getFloatValue("x");
//y坐标
float y = rbk_report.getFloatValue("y");
//是否正在执行用户下发的运单
Integer procBusiness = jo.getInteger("procBusiness");
Device deviceByCode = deviceAppService.findDeviceByCode(agv_code);
if (ObjectUtil.isNotNull(deviceByCode) && deviceByCode.getDeviceDriver() instanceof FeedbackAgvStatusDeviceDriver) {
FeedbackAgvStatusDeviceDriver deviceDriver = (FeedbackAgvStatusDeviceDriver) deviceByCode.getDeviceDriver();
if (deviceDriver.getWork() != procBusiness) {
//工作中
deviceDriver.writing("work", procBusiness);
//休息中
deviceDriver.writing("resting", procBusiness == 1 ? 0 : 1);
} else if ((charging ? 1 : 0) != deviceDriver.getCharging()) {
//充电中
deviceDriver.writing("charging", charging ? 1 : 0);
deviceDriver.writing("resting", charging ? 0 : 1);
} else if ((CollUtil.isEmpty(alarms) ? 0 : 1) == deviceDriver.getError()) {
//故障
deviceDriver.writing("error", (ObjectUtil.isEmpty(alarms) ? 0 : 1));
} else if ((connectionStatus == 0 && deviceDriver.getPick_up() == 0) || (connectionStatus == 1 && deviceDriver.getPick_up() == 1)) {
//离线中
deviceDriver.writing("pick_up", connectionStatus == 1 ? 0 : 1);
} else if (task_status == 2 && deviceDriver.getTask_start() != 1) {
//任务开始
deviceDriver.writing("task_start", 1);
deviceDriver.writing("ma", 0);
} else if (task_status == 4 && deviceDriver.getMa() != 1) {
//任务完成
deviceDriver.writing("task_start", 0);
deviceDriver.writing("ma", 1);
deviceDriver.writing("tss", 0);
deviceDriver.writing("eots", 0);
deviceDriver.writing("rtg", 0);
deviceDriver.writing("tric", 0);
deviceDriver.writing("rap", 0);
deviceDriver.writing("rtrtg", 0);
startPointInget = false;
endPointOutput = false;
startPointOutget = false;
endPointInput = false;
} else if ((startPointOutget ? 1 : 0) != deviceDriver.getRtg() && Objects.equals(instcode, inst_code)) {
//取货完成
deviceDriver.writing("rtg", startPointOutget ? 1 : 0);
} else if ((endPointOutput ? 1 : 0) != deviceDriver.getTric() && Objects.equals(inst_code, instcode)) {
//放货完成
deviceDriver.writing("tric", endPointOutput ? 1 : 0);
} else if ((startPointInget ? 1 : 0) != deviceDriver.getRap() && Objects.equals(inst_code, instcode)) {
//申请取货
deviceDriver.writing("rap", startPointInget ? 1 : 0);
} else if ((endPointInput ? 1 : 0) != deviceDriver.getRtrtg() && Objects.equals(inst_code, instcode)) {
//申请放货
deviceDriver.writing("rtrtg", endPointInput ? 1 : 0);
} else if ((flag.get() ? 1 : 0) != deviceDriver.getCac()) {
//被管制区域管制
deviceDriver.writing("cac", flag.get() ? 1 : 0);
} else if ((blocked ? 1 : 0) != deviceDriver.getBlocked()) {
//被阻挡
deviceDriver.writing("blocked", blocked ? 1 : 0);
} else if ((emergency ? 1 : 0) != deviceDriver.getEs()) {
//急停
deviceDriver.writing("es", emergency ? 1 : 0);
} else if (!StrUtil.equals(taskNo, "0") && ObjectUtil.isNotNull(inst)) {
//任务开始站点
deviceDriver.writing("tss", Integer.parseInt(inst.getStart_point_code()));
//任务结束站点
deviceDriver.writing("eots", Integer.parseInt(inst.getNext_point_code()));
}
}
AgvDto dto = new AgvDto();
dto.setName(agv_code);
dto.setCurrent_map(current_map);
@ -627,7 +730,7 @@ public class AgvServiceImpl implements AgvService {
AGVDeviceStatus.put(agv_code, dto);
}
}
return result;
return null;
} else {
return null;
}
@ -656,7 +759,7 @@ public class AgvServiceImpl implements AgvService {
row.add(instruction.getInstruction_code());
predicates.add(row);
}
agvurl = agvurl+ "&where=" + where;
agvurl = agvurl + "&where=" + where;
}
HttpResponse result = HttpRequest.get(agvurl)
@ -870,7 +973,7 @@ public class AgvServiceImpl implements AgvService {
yzjaSpecialDeviceDriver.setManua_confirm(0);
inst.setExecute_status("1");
is_feedback = true;
} else if (ObjectUtil.isEmpty(inst.getExecute_status()) || !inst.getExecute_status().equals("1")){
} else if (ObjectUtil.isEmpty(inst.getExecute_status()) || !inst.getExecute_status().equals("1")) {
yzjaSpecialDeviceDriver.setManua_confirm(1);
}
} else {
@ -886,7 +989,7 @@ public class AgvServiceImpl implements AgvService {
yzjaSpecialDeviceDriver.setManua_confirm(0);
inst.setExecute_status("3");
is_feedback = true;
} else if (ObjectUtil.isEmpty(inst.getExecute_status()) || !inst.getExecute_status().equals("3")){
} else if (ObjectUtil.isEmpty(inst.getExecute_status()) || !inst.getExecute_status().equals("3")) {
yzjaSpecialDeviceDriver.setManua_confirm(1);
}
} else {
@ -1040,6 +1143,7 @@ public class AgvServiceImpl implements AgvService {
log.info("仙工AGV请求取放货,请求参数 - {}", requestParam);
String instCode = requestParam.getString("task_code");
Instruction inst = instructionService.findByCodeFromCache(instCode);
instcode = instCode;
if (ObjectUtil.isEmpty(inst)) {
throw new BadRequestException("请求失败,未找到指令!");
}
@ -1051,98 +1155,102 @@ public class AgvServiceImpl implements AgvService {
if (StrUtil.isBlank(address)) {
throw new BadRequestException("请求失败,地址为空!");
}
String startcode=inst.getStart_device_code();
String startcode = inst.getStart_device_code();
//请求取货
if (address.contains("INGET")) {
JSONObject jo=new JSONObject();
jo.put("device_code",inst.getStart_device_code());
jo.put("task_code",inst.getTask_code());
jo.put("status","1");
jo.put("vehicle_code",inst.getVehicle_code());
JSONArray ja=new JSONArray();
JSONObject jo = new JSONObject();
jo.put("device_code", inst.getStart_device_code());
jo.put("task_code", inst.getTask_code());
jo.put("status", "1");
jo.put("vehicle_code", inst.getVehicle_code());
JSONArray ja = new JSONArray();
ja.add(jo);
HttpResponse result=acsToWmsService.vehicle(ja);
HttpResponse result = acsToWmsService.vehicle(ja);
log.info("请求取货请求参数:{}", ja);
com.alibaba.fastjson.JSONObject response = com.alibaba.fastjson.JSONObject.parseObject(result.body());
log.info("上位反馈请求取货请求参数:{}",response);
log.info("上位反馈请求取货请求参数:{}", response);
int responseCode = response.getInteger("status");
if (responseCode == 200) {
JSONObject jo2 = new JSONObject();
jo2.put("status",200);
jo2.put("status", 200);
startPointInget = true;
log.info("上位允许取货 请求结果{}", responseCode);
return jo2;
}else{
} else {
throw new BadRequestException("上位系统不允许取货");
}
}
//取货完成离开
if (address.contains("OUTGET")) {
JSONObject jo=new JSONObject();
jo.put("device_code",inst.getStart_device_code());
jo.put("task_code",inst.getTask_code());
jo.put("status","2");
jo.put("vehicle_code",inst.getVehicle_code());
JSONArray ja=new JSONArray();
JSONObject jo = new JSONObject();
jo.put("device_code", inst.getStart_device_code());
jo.put("task_code", inst.getTask_code());
jo.put("status", "2");
jo.put("vehicle_code", inst.getVehicle_code());
JSONArray ja = new JSONArray();
ja.add(jo);
log.info("取货完成离开请求参数:{}", ja);
HttpResponse result=acsToWmsService.vehicle(ja);
HttpResponse result = acsToWmsService.vehicle(ja);
com.alibaba.fastjson.JSONObject response = com.alibaba.fastjson.JSONObject.parseObject(result.body());
log.info("上位反馈取货完成离开请求参数:{}",response);
log.info("上位反馈取货完成离开请求参数:{}", response);
int responseCode = response.getInteger("status");
if (responseCode == 200) {
JSONObject jo2 = new JSONObject();
jo2.put("status",200);
jo2.put("status", 200);
startPointOutget = true;
log.info("上位允许取货离开 请求结果{}", responseCode);
return jo2;
}else{
} else {
throw new BadRequestException("上位系统不允许取货完成离开");
}
}
//请求放货
if (address.contains("INPUT")) {
JSONObject jo=new JSONObject();
jo.put("device_code",inst.getNext_device_code());
jo.put("task_code",inst.getTask_code());
jo.put("status","3");
jo.put("vehicle_code",inst.getVehicle_code());
JSONArray ja=new JSONArray();
JSONObject jo = new JSONObject();
jo.put("device_code", inst.getNext_device_code());
jo.put("task_code", inst.getTask_code());
jo.put("status", "3");
jo.put("vehicle_code", inst.getVehicle_code());
JSONArray ja = new JSONArray();
ja.add(jo);
log.info("请求放货请求参数:{}", ja);
HttpResponse result=acsToWmsService.vehicle(ja);
HttpResponse result = acsToWmsService.vehicle(ja);
com.alibaba.fastjson.JSONObject response = com.alibaba.fastjson.JSONObject.parseObject(result.body());
log.info("上位反馈请求放货请求参数:{}",response);
log.info("上位反馈请求放货请求参数:{}", response);
int responseCode = response.getInteger("status");
if (responseCode == 200) {
JSONObject jo2 = new JSONObject();
jo2.put("status",200);
jo2.put("status", 200);
endPointInput = true;
log.info("上位允许放货 请求结果{}", responseCode);
return jo2;
}else{
} else {
throw new BadRequestException("上位系统不允许请求放货");
}
}
//放货完成离开
if (address.contains("OUTPUT")) {
JSONObject jo=new JSONObject();
jo.put("device_code",inst.getNext_device_code());
jo.put("task_code",inst.getTask_code());
jo.put("status","4");
jo.put("vehicle_code",inst.getVehicle_code());
JSONArray ja=new JSONArray();
JSONObject jo = new JSONObject();
jo.put("device_code", inst.getNext_device_code());
jo.put("task_code", inst.getTask_code());
jo.put("status", "4");
jo.put("vehicle_code", inst.getVehicle_code());
JSONArray ja = new JSONArray();
ja.add(jo);
log.info("放货完成离开:{}", ja);
HttpResponse result=acsToWmsService.vehicle(ja);
HttpResponse result = acsToWmsService.vehicle(ja);
com.alibaba.fastjson.JSONObject response = com.alibaba.fastjson.JSONObject.parseObject(result.body());
log.info("上位反馈放货完成离开请求参数:{}",response);
log.info("上位反馈放货完成离开请求参数:{}", response);
int responseCode = response.getInteger("status");
if (responseCode == 200) {
JSONObject jo2 = new JSONObject();
jo2.put("status",200);
endPointOutput = true;
jo2.put("status", 200);
log.info("上位允许放货离开 请求结果{}", responseCode);
return jo2;
}else{
} else {
throw new BadRequestException("上位系统不允许放货完成离开");
}
}
@ -1535,6 +1643,7 @@ public class AgvServiceImpl implements AgvService {
return null;
}
}
public com.alibaba.fastjson.JSONArray createBlocksData(Instruction inst) {
com.alibaba.fastjson.JSONArray ja = new com.alibaba.fastjson.JSONArray();
@ -1608,245 +1717,245 @@ public class AgvServiceImpl implements AgvService {
}
//放货前下发旋转角度
com.alibaba.fastjson.JSONObject json1 = new com.alibaba.fastjson.JSONObject();
if(inst.getStart_device_code().equals("3010")&&inst.getNext_device_code().equals("4031")){
if (inst.getStart_device_code().equals("3010") && inst.getNext_device_code().equals("4031")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3031")&&inst.getNext_device_code().equals("4010")){
} else if (inst.getStart_device_code().equals("3031") && inst.getNext_device_code().equals("4010")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3012")&&inst.getNext_device_code().equals("4019")){
} else if (inst.getStart_device_code().equals("3012") && inst.getNext_device_code().equals("4019")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3019")&&inst.getNext_device_code().equals("4012")){
} else if (inst.getStart_device_code().equals("3019") && inst.getNext_device_code().equals("4012")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3001")&&inst.getNext_device_code().equals("4019")){
} else if (inst.getStart_device_code().equals("3001") && inst.getNext_device_code().equals("4019")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3019")&&inst.getNext_device_code().equals("4001")){
} else if (inst.getStart_device_code().equals("3019") && inst.getNext_device_code().equals("4001")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3019")&&inst.getNext_device_code().equals("4027")){
} else if (inst.getStart_device_code().equals("3019") && inst.getNext_device_code().equals("4027")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3027")&&inst.getNext_device_code().equals("4019")){
} else if (inst.getStart_device_code().equals("3027") && inst.getNext_device_code().equals("4019")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3027")&&inst.getNext_device_code().equals("4019")){
} else if (inst.getStart_device_code().equals("3027") && inst.getNext_device_code().equals("4019")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3019")&&inst.getNext_device_code().equals("4028")){
} else if (inst.getStart_device_code().equals("3019") && inst.getNext_device_code().equals("4028")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3028")&&inst.getNext_device_code().equals("4019")){
} else if (inst.getStart_device_code().equals("3028") && inst.getNext_device_code().equals("4019")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3019")&&inst.getNext_device_code().equals("4017")){
} else if (inst.getStart_device_code().equals("3019") && inst.getNext_device_code().equals("4017")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3017")&&inst.getNext_device_code().equals("4019")){
} else if (inst.getStart_device_code().equals("3017") && inst.getNext_device_code().equals("4019")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3019")&&inst.getNext_device_code().equals("4036")){
} else if (inst.getStart_device_code().equals("3019") && inst.getNext_device_code().equals("4036")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3036")&&inst.getNext_device_code().equals("4019")){
} else if (inst.getStart_device_code().equals("3036") && inst.getNext_device_code().equals("4019")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3036")&&inst.getNext_device_code().equals("4019")){
} else if (inst.getStart_device_code().equals("3036") && inst.getNext_device_code().equals("4019")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3010")&&inst.getNext_device_code().equals("4032")){
} else if (inst.getStart_device_code().equals("3010") && inst.getNext_device_code().equals("4032")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3032")&&inst.getNext_device_code().equals("4010")){
} else if (inst.getStart_device_code().equals("3032") && inst.getNext_device_code().equals("4010")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3010")&&inst.getNext_device_code().equals("4033")){
} else if (inst.getStart_device_code().equals("3010") && inst.getNext_device_code().equals("4033")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3033")&&inst.getNext_device_code().equals("4010")){
} else if (inst.getStart_device_code().equals("3033") && inst.getNext_device_code().equals("4010")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3010")&&inst.getNext_device_code().equals("4034")){
} else if (inst.getStart_device_code().equals("3010") && inst.getNext_device_code().equals("4034")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3034")&&inst.getNext_device_code().equals("4010")){
} else if (inst.getStart_device_code().equals("3034") && inst.getNext_device_code().equals("4010")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3010")&&inst.getNext_device_code().equals("4015")){
} else if (inst.getStart_device_code().equals("3010") && inst.getNext_device_code().equals("4015")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3035")&&inst.getNext_device_code().equals("4010")){
} else if (inst.getStart_device_code().equals("3035") && inst.getNext_device_code().equals("4010")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3010")&&inst.getNext_device_code().equals("4003")){
} else if (inst.getStart_device_code().equals("3010") && inst.getNext_device_code().equals("4003")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3003")&&inst.getNext_device_code().equals("4010")){
} else if (inst.getStart_device_code().equals("3003") && inst.getNext_device_code().equals("4010")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3034")&&inst.getNext_device_code().equals("4018")){
} else if (inst.getStart_device_code().equals("3034") && inst.getNext_device_code().equals("4018")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3035")&&inst.getNext_device_code().equals("4018")){
} else if (inst.getStart_device_code().equals("3035") && inst.getNext_device_code().equals("4018")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3018")&&inst.getNext_device_code().equals("4034")){
} else if (inst.getStart_device_code().equals("3018") && inst.getNext_device_code().equals("4034")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}else if(inst.getStart_device_code().equals("3018")&&inst.getNext_device_code().equals("4035")){
} else if (inst.getStart_device_code().equals("3018") && inst.getNext_device_code().equals("4035")) {
com.alibaba.fastjson.JSONObject operation_args = new com.alibaba.fastjson.JSONObject();
operation_args.put("increase_spin_angle",3.14);//弧度值,如3.14
operation_args.put("skill_name","GoByOdometer");
operation_args.put("increase_spin_angle", 3.14);//弧度值,如3.14
operation_args.put("skill_name", "GoByOdometer");
json1.put("blockId", IdUtil.simpleUUID());
json1.put("location", inst.getNext_point_code() + "INPUT");
json1.put("operation_args",operation_args);
json1.put("operation_args", operation_args);
ja.add(json1);
}
com.alibaba.fastjson.JSONObject jo4 = new com.alibaba.fastjson.JSONObject();
@ -1877,6 +1986,7 @@ public class AgvServiceImpl implements AgvService {
}
return ja;
}
@Override
public HttpResponse addOrderSequences(Instruction inst) throws Exception {
JSONObject orderjo = createOrederData(inst, "1");
@ -2014,8 +2124,8 @@ public class AgvServiceImpl implements AgvService {
//起点
if (startdevice.getDeviceDriver() instanceof StandardManipulatorInspectSiteDeviceDriver) {
standardManipulatorInspectSiteDeviceDriver = (StandardManipulatorInspectSiteDeviceDriver) startdevice.getDeviceDriver();
if(ObjectUtil.equal(standardManipulatorInspectSiteDeviceDriver.getExtraValue().get("is_pickup_spin"),"true") &&
ObjectUtil.isNotEmpty(standardManipulatorInspectSiteDeviceDriver.getExtraValue().get("pickup_spin")) ){
if (ObjectUtil.equal(standardManipulatorInspectSiteDeviceDriver.getExtraValue().get("is_pickup_spin"), "true") &&
ObjectUtil.isNotEmpty(standardManipulatorInspectSiteDeviceDriver.getExtraValue().get("pickup_spin"))) {
ja.add(destination2(startAddress + "IQ", "Spin", "2",
standardManipulatorInspectSiteDeviceDriver.getExtraValue().get("pickup_spin").toString()));
}
@ -2049,8 +2159,8 @@ public class AgvServiceImpl implements AgvService {
//终点
if (nextdevice.getDeviceDriver() instanceof StandardManipulatorInspectSiteDeviceDriver) {
standardManipulatorInspectSiteDeviceDriver = (StandardManipulatorInspectSiteDeviceDriver) nextdevice.getDeviceDriver();
if(ObjectUtil.equal(standardManipulatorInspectSiteDeviceDriver.getExtraValue().get("is_release_spin"),"true") &&
ObjectUtil.isNotEmpty(standardManipulatorInspectSiteDeviceDriver.getExtraValue().get("release_spin")) ){
if (ObjectUtil.equal(standardManipulatorInspectSiteDeviceDriver.getExtraValue().get("is_release_spin"), "true") &&
ObjectUtil.isNotEmpty(standardManipulatorInspectSiteDeviceDriver.getExtraValue().get("release_spin"))) {
ja.add(destination2(nextAddress + "IQ", "Spin", "2",
standardManipulatorInspectSiteDeviceDriver.getExtraValue().get("release_spin").toString()));
}
@ -2208,8 +2318,8 @@ public class AgvServiceImpl implements AgvService {
com.alibaba.fastjson.JSONObject response = com.alibaba.fastjson.JSONObject.parseObject(result.body());
int responseCode = response.getInteger("status");
JSONObject jo2 = new JSONObject();
jo2.put("message","ok");
jo2.put("code",200);
jo2.put("message", "ok");
jo2.put("code", 200);
log.info("上位允许仙工AGV请求离开管制区 请求结果{}", responseCode);
return jo2;
}
@ -2233,8 +2343,8 @@ public class AgvServiceImpl implements AgvService {
int responseCode = response.getInteger("status");
if (responseCode == 200) {
JSONObject jo2 = new JSONObject();
jo2.put("message","ok");
jo2.put("code",200);
jo2.put("message", "ok");
jo2.put("code", 200);
log.info("上位允许仙工AGV请求进入管制区域 请求结果{}", responseCode);
return jo2;
} else {
@ -2273,12 +2383,9 @@ public class AgvServiceImpl implements AgvService {
}
public static void main(String[] args) {
String address = "L1-01-01";
if (address.indexOf("-") > 0) {
String str = address.substring(address.indexOf("-"), address.length());
address = address.substring(0, address.indexOf("-"));
System.out.println(address);
}
String msg = null;
String msg1 = null;
System.out.println("msg = " + Objects.equals(msg,msg1));
}
}

2
hd/nladmin-system/src/main/java/org/nl/acs/device/device_driver/DriverTypeEnum.java

@ -46,6 +46,8 @@ public enum DriverTypeEnum {
FEEDBACK_AGV_STATUS_SITE(19, "feedback_agv_status_site", "上报AGV状态站点", "conveyor"),
FEEDBACK_AGV_STATUS(42, "feedback_agv_status", "反馈AGV状态", "conveyor"),
MANIPULATOR_STACKING_SITE(20, "standard_manipulator_stacking_site", "机械手码垛驱动(区分托盘类型)", "conveyor"),
PHOTOELECTRIC_INSPECT_SITE(21, "standard_photoelectric_inspect_site", "光电检测站点(优先出库)", "conveyor"),

83
hd/nladmin-system/src/main/java/org/nl/acs/device_driver/feedback_agv_status/FeedbackAgvStatusDefination.java

@ -0,0 +1,83 @@
package org.nl.acs.device_driver.feedback_agv_status;
import org.nl.acs.device.device_driver.standard_inspect.ItemDto;
import org.nl.acs.device_driver.DeviceDriver;
import org.nl.acs.device_driver.defination.OpcDeviceDriverDefination;
import org.nl.acs.opc.Device;
import org.nl.acs.opc.DeviceType;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
/**
* 反馈agv状态
*/
@Service
public class FeedbackAgvStatusDefination implements OpcDeviceDriverDefination {
@Override
public String getDriverCode() {
return "feedback_agv_status";
}
@Override
public String getDriverName() {
return "反馈AGV状态";
}
@Override
public String getDriverDescription() {
return "反馈AGV状态";
}
@Override
public DeviceDriver getDriverInstance(Device device) {
return (new FeedbackAgvStatusDeviceDriver()).setDevice(device).setDriverDefination(this);
}
@Override
public Class<? extends DeviceDriver> getDeviceDriverType() {
return FeedbackAgvStatusDeviceDriver.class;
}
@Override
public List<DeviceType> getFitDeviceTypes() {
List<DeviceType> types = new LinkedList();
types.add(DeviceType.conveyor);
return types;
}
@Override
public List<ItemDto> getReadableItemDtos() {
return getReadableItemDtos2();
}
public static List<ItemDto> getReadableItemDtos2() {
List<ItemDto> list = new ArrayList();
list.add(new ItemDto(ItemProtocol.item_work, "工作中", "DB51.B0"));
list.add(new ItemDto(ItemProtocol.item_charging, "充电中", "DB51.B2", Boolean.TRUE));
list.add(new ItemDto(ItemProtocol.item_error, "故障", "DB51.B3"));
list.add(new ItemDto(ItemProtocol.item_resting, "休息中", "DB51.B5"));
list.add(new ItemDto(ItemProtocol.item_task_start, "离线中", "DB51.B5"));
list.add(new ItemDto(ItemProtocol.item_pick_up, "任务开始", "DB51.B5"));
list.add(new ItemDto(ItemProtocol.item_rtg, "取货完成", "DB51.B5"));
list.add(new ItemDto(ItemProtocol.item_tric, "放货完成", "DB51.B5"));
list.add(new ItemDto(ItemProtocol.item_rap, "请求取货", "DB51.B5"));
list.add(new ItemDto(ItemProtocol.item_rtrtg, "请求放货", "DB51.B5"));
list.add(new ItemDto(ItemProtocol.item_ma, "任务完成", "DB51.B5"));
list.add(new ItemDto(ItemProtocol.item_cac, "被管制区域管制", "DB51.B5"));
list.add(new ItemDto(ItemProtocol.item_blocked, "被阻挡", "DB51.B5"));
list.add(new ItemDto(ItemProtocol.item_es, "急停", "DB51.B5"));
list.add(new ItemDto(ItemProtocol.item_tss, "任务开始站点", "DB51.B5"));
list.add(new ItemDto(ItemProtocol.item_eots, "任务结束站点", "DB51.B5"));
return list;
}
@Override
public List<ItemDto> getWriteableItemDtos() {
return ItemProtocol.getWriteableItemDtos();
}
}

103
hd/nladmin-system/src/main/java/org/nl/acs/device_driver/feedback_agv_status/FeedbackAgvStatusDeviceDriver.java

@ -0,0 +1,103 @@
package org.nl.acs.device_driver.feedback_agv_status;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import net.sf.json.JSONObject;
import org.nl.acs.device.device_driver.standard_inspect.ReadUtil;
import org.nl.acs.device.service.DeviceService;
import org.nl.acs.device_driver.DeviceDriver;
import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver;
import org.nl.acs.device_driver.driver.ExecutableDeviceDriver;
import org.nl.acs.instruction.service.InstructionService;
import org.nl.acs.opc.Device;
import org.nl.acs.route.service.RouteLineService;
import org.nl.acs.task.service.TaskService;
import org.nl.utils.SpringContextHolder;
import org.openscada.opc.lib.da.Server;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* 反馈agv状态
*/
@Slf4j
@Data
@RequiredArgsConstructor
public class FeedbackAgvStatusDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver {
protected ItemProtocol itemProtocol = new ItemProtocol(this);
@Autowired
InstructionService instructionService = SpringContextHolder.getBean("instructionServiceImpl");
@Autowired
DeviceService deviceservice = SpringContextHolder.getBean("deviceServiceImpl");
@Autowired
RouteLineService routelineserver = SpringContextHolder.getBean("routeLineServiceImpl");
@Autowired
TaskService taskserver = SpringContextHolder.getBean("taskServiceImpl");
String devicecode;
int work;
int charging;
int error;
int resting;
int task_start;
int pick_up;
int rtg;
int tric;
int rap;
int rtrtg;
int ma;
int cac;
int blocked;
int es;
int tss;
int eots;
@Override
public Device getDevice() {
return this.device;
}
@Override
public void execute() {
String message = null;
work = itemProtocol.getWork();
charging = itemProtocol.getCharging();
error = itemProtocol.getError();
resting = itemProtocol.getResting();
task_start = itemProtocol.getTaskStart();
pick_up = itemProtocol.getPickUp();
rtg = itemProtocol.getRtg();
tric = itemProtocol.getTric();
rap = itemProtocol.getRap();
rtrtg = itemProtocol.getRtrtg();
ma = itemProtocol.getMa();
cac = itemProtocol.getCac();
blocked = itemProtocol.getBlocked();
es = itemProtocol.getEs();
tss = itemProtocol.getTss();
eots = itemProtocol.getEots();
}
public synchronized String getStatus() {
JSONObject jo = new JSONObject();
return jo.toString();
}
public void writing(String name,int command) {
String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code()
+ "." + name;
String opcservcerid = this.getDevice().getOpc_server_id();
Server server = ReadUtil.getServer(opcservcerid);
Map<String, Object> itemMap = new HashMap<>();
itemMap.put(to_command, command);
ReadUtil.write(itemMap, server);
log.info("下发PLC信号:{},{}", to_command, command);
System.out.println("设备:" + devicecode + ",下发PLC信号:" + to_command + ",value:" + command);
}
}

195
hd/nladmin-system/src/main/java/org/nl/acs/device_driver/feedback_agv_status/ItemProtocol.java

@ -0,0 +1,195 @@
package org.nl.acs.device_driver.feedback_agv_status;
import lombok.extern.slf4j.Slf4j;
import org.nl.acs.device.device_driver.standard_inspect.ItemDto;
import java.util.ArrayList;
import java.util.List;
@Slf4j
public class ItemProtocol {
/**
* 工作中
*/
public static String item_work = "work";
/**
* 充电中
*/
public static String item_charging = "charging";
/**
* 故障
*/
public static String item_error = "error";
/**
* 休息中
*/
public static String item_resting = "resting";
/**
* 离线中
*/
public static String item_pick_up = "pick_up";
/**
* 任务开始
*/
public static String item_task_start = "task_start";
/**
* 取货完成
*/
public static String item_rtg = "rtg";
/**
* 放货完成
*/
public static String item_tric = "tric";
/**
* 请求取货
*/
public static String item_rap = "rap";
/**
* 请求放货
*/
public static String item_rtrtg = "rtrtg";
/**
* 任务完成
*/
public static String item_ma = "ma";
/**
* 被管制区域管制
*/
public static String item_cac = "cac";
/**
* 被阻挡
*/
public static String item_blocked = "blocked";
/**
* 急停
*/
public static String item_es = "es";
/**
* 任务开始站点
*/
public static String item_tss = "tss";
/**
* 任务结束站点
*/
public static String item_eots = "eots";
private FeedbackAgvStatusDeviceDriver driver;
public ItemProtocol(FeedbackAgvStatusDeviceDriver driver) {
this.driver = driver;
}
public int getWork() {
return this.getOpcIntegerValue(item_work);
}
public int getCharging() {
return this.getOpcIntegerValue(item_charging);
}
public int getError() {
return this.getOpcIntegerValue(item_error);
}
public int getResting() {
return this.getOpcIntegerValue(item_resting);
}
public int getTaskStart() {
return this.getOpcIntegerValue(item_task_start);
}
public int getPickUp() {
return this.getOpcIntegerValue(item_pick_up);
}
public int getRtg() {
return this.getOpcIntegerValue(item_rtg);
}
public int getTric() {
return this.getOpcIntegerValue(item_tric);
}
public int getRap() {
return this.getOpcIntegerValue(item_rap);
}
public int getRtrtg() {
return this.getOpcIntegerValue(item_rtrtg);
}
public int getMa() {
return this.getOpcIntegerValue(item_ma);
}
public int getCac() {
return this.getOpcIntegerValue(item_cac);
}
public int getBlocked() {
return this.getOpcIntegerValue(item_blocked);
}
public int getEs() {
return this.getOpcIntegerValue(item_es);
}
public int getTss() {
return this.getOpcIntegerValue(item_tss);
}
public int getEots() {
return this.getOpcIntegerValue(item_eots);
}
public int getOpcIntegerValue(String protocol) {
Integer value = this.driver.getIntegerValue(protocol);
if (value == null) {
} else {
return value;
}
return 0;
}
public static List<ItemDto> getReadableItemDtos() {
ArrayList list = new ArrayList();
list.add(new ItemDto(item_work, "工作中", "DB51.B0"));
list.add(new ItemDto(item_charging, "充电中", "DB51.B2", Boolean.TRUE));
list.add(new ItemDto(item_error, "故障", "DB51.B3"));
list.add(new ItemDto(item_resting, "休息中", "DB51.B5"));
list.add(new ItemDto(item_task_start, "离线中", "DB51.B5"));
list.add(new ItemDto(item_pick_up, "任务开始", "DB51.B5"));
list.add(new ItemDto(item_rtg, "取货完成", "DB51.B5"));
list.add(new ItemDto(item_tric, "放货完成", "DB51.B5"));
list.add(new ItemDto(item_rap, "请求取货", "DB51.B5"));
list.add(new ItemDto(item_rtrtg, "请求放货", "DB51.B5"));
list.add(new ItemDto(item_ma, "任务完成", "DB51.B5"));
list.add(new ItemDto(item_cac, "被管制区域管制", "DB51.B5"));
list.add(new ItemDto(item_blocked, "被阻挡", "DB51.B5"));
list.add(new ItemDto(item_es, "急停", "DB51.B5"));
list.add(new ItemDto(item_tss, "任务开始站点", "DB51.B5"));
list.add(new ItemDto(item_eots, "任务结束站点", "DB51.B5"));
return list;
}
public static List<ItemDto> getWriteableItemDtos() {
ArrayList list = new ArrayList();
list.add(new ItemDto(item_work, "工作中", "DB51.B0"));
list.add(new ItemDto(item_charging, "充电中", "DB51.B2", Boolean.TRUE));
list.add(new ItemDto(item_error, "故障", "DB51.B3"));
list.add(new ItemDto(item_resting, "休息中", "DB51.B5"));
list.add(new ItemDto(item_task_start, "离线中", "DB51.B5"));
list.add(new ItemDto(item_pick_up, "任务开始", "DB51.B5"));
list.add(new ItemDto(item_rtg, "取货完成", "DB51.B5"));
list.add(new ItemDto(item_tric, "放货完成", "DB51.B5"));
list.add(new ItemDto(item_rap, "请求取货", "DB51.B5"));
list.add(new ItemDto(item_rtrtg, "请求放货", "DB51.B5"));
list.add(new ItemDto(item_ma, "任务完成", "DB51.B5"));
list.add(new ItemDto(item_cac, "被管制区域管制", "DB51.B5"));
list.add(new ItemDto(item_blocked, "被阻挡", "DB51.B5"));
list.add(new ItemDto(item_es, "急停", "DB51.B5"));
list.add(new ItemDto(item_tss, "任务开始站点", "DB51.B5"));
list.add(new ItemDto(item_eots, "任务结束站点", "DB51.B5"));
return list;
}
}

3
qd/src/views/acs/device/config.vue

@ -93,6 +93,7 @@ import non_line_manipulator_inspect_site from '@/views/acs/device/driver/non_lin
import non_line_inspect_site from '@/views/acs/device/driver/non_line_inspect_site'
import manipulator_inspect_site_NDC from '@/views/acs/device/driver/manipulator_inspect_site_NDC'
import feedback_agv_status_site from '@/views/acs/device/driver/feedback_agv_status_site'
import feedback_agv_status from '@/views/acs/device/driver/feedback_agv_status'
import standard_manipulator_stacking_site from '@/views/acs/device/driver/standard_manipulator_stacking_site'
import standard_photoelectric_inspect_site from '@/views/acs/device/driver/standard_photoelectric_inspect_site'
import ndxy_special from '@/views/acs/device/driver/ndxy_special'
@ -120,7 +121,7 @@ export default {
standard_emptypallet_site, standard_manipulator_inspect_site, standard_special_inspect_site,
lamp_three_color, standard_storage, special_ordinary_site, standard_scanner, standard_conveyor_control_with_scanner,
standard_conveyor_control_with_plcscanner, standard_conveyor_control, standard_conveyor_monitor, weighing_site, machines_site, non_line_manipulator_inspect_site,
non_line_inspect_site, manipulator_inspect_site_NDC, feedback_agv_status_site, standard_manipulator_stacking_site,
non_line_inspect_site, manipulator_inspect_site_NDC, feedback_agv_status_site, feedback_agv_status, standard_manipulator_stacking_site,
standard_photoelectric_inspect_site, ndxy_special, hailiang_labeling, ndxy_special_two, whxr_storage_conveyor, whxr_ball_mill, whxr_spary_tower, whxr_weight,
electric_fence, oumulong_plc, traffic_light, standard_rgv, ykbk_special, ssj_cache_site, magic3, agv_site, whxr_weighing, jmagv, yzja_special },
dicts: ['device_type'],

352
qd/src/views/acs/device/driver/feedback_agv_status.vue

@ -0,0 +1,352 @@
<template>
<!--电子围栏-->
<div>
<el-card class="box-card" shadow="never">
<div slot="header" class="clearfix">
<span class="role-span">设备协议</span>
</div>
<el-row>
<el-col :span="12">
OpcServer:
<el-select
v-model="opc_id"
placeholder="无"
clearable
@change="changeOpc"
>
<el-option
v-for="item in dataOpcservers"
:key="item.opc_id"
:label="item.opc_name"
:value="item.opc_id"
/>
</el-select>
</el-col>
<el-col :span="12">
PLC:
<el-select
v-model="plc_id"
placeholder="无"
clearable
@change="changePlc"
>
<el-option
v-for="item in dataOpcPlcs"
:key="item.plc_id"
:label="item.plc_name"
:value="item.plc_id"
/>
</el-select>
</el-col>
</el-row>
</el-card>
<el-card class="box-card" shadow="never">
<div slot="header" class="clearfix">
<span class="role-span">输送系统</span>
</div>
<el-form ref="form" :inline="true" :model="form" :rules="rules" size="small" label-width="78px">
<el-row>
<el-col :span="8">
<el-form-item label="电气调度号" label-width="150px">
<el-switch v-model="form.OPCServer" />
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<el-card class="box-card" shadow="never">
<div slot="header" class="clearfix">
<span class="role-span">PLC读取字段</span>
</div>
<el-form ref="form" :inline="true" :model="form" :rules="rules" size="small" label-width="78px">
<el-table
v-loading="false"
:data="data1"
:max-height="550"
size="small"
style="width: 100%;margin-bottom: 15px"
>
<el-table-column prop="name" label="用途" />
<el-table-column prop="code" label="别名要求" />
<el-table-column prop="db" label="DB块">
<template slot-scope="scope">
<el-input
v-model="data1[scope.$index].db"
size="mini"
class="edit-input"
@input="finishReadEdit(data1[scope.$index])"
/>
</template>
</el-table-column>
<el-table-column prop="dbr_value">
<template slot="header">
<el-link type="primary" :underline="false" @click.native="test_read1()">测试读</el-link>
</template>
<template slot-scope="scope">
<el-input v-model="data1[scope.$index].dbr_value" size="mini" class="edit-input" />
</template>
</el-table-column>
</el-table>
</el-form>
</el-card>
<el-card class="box-card" shadow="never">
<div slot="header" class="clearfix">
<span class="role-span">PLC写入字段</span>
</div>
<el-form ref="form" :inline="true" :model="form" :rules="rules" size="small" label-width="78px">
<el-table
v-loading="false"
:data="data2"
:max-height="550"
size="small"
style="width: 100%;margin-bottom: 15px"
>
<el-table-column prop="name" label="用途" />
<el-table-column prop="code" label="别名要求" />
<el-table-column prop="db" label="DB块">
<template slot-scope="scope">
<el-input
v-model="data2[scope.$index].db"
size="mini"
class="edit-input"
@input="finishWriteEdit(data2[scope.$index])"
/>
</template>
</el-table-column>
<el-table-column prop="dbw_value">
<template slot="header">
<el-link type="primary" :underline="false" @click.native="test_write1()">测试写</el-link>
</template>
<template slot-scope="scope">
<el-input v-model="data2[scope.$index].dbw_value" size="mini" class="edit-input" />
</template>
</el-table-column>
</el-table>
</el-form>
</el-card>
<el-card class="box-card" shadow="never">
<div slot="header" class="clearfix">
<span class="role-span" />
<el-button
:loading="false"
icon="el-icon-check"
size="mini"
style="float: right; padding: 6px 9px"
type="primary"
@click="doSubmit"
>保存
</el-button>
</div>
</el-card>
</div>
</template>
<script>
import {
queryDriverConfig,
updateConfig,
testRead,
testwrite
} from '@/api/acs/device/driverConfig'
import { selectOpcList } from '@/api/acs/device/opc'
import { selectPlcList } from '@/api/acs/device/opcPlc'
import { selectListByOpcID } from '@/api/acs/device/opcPlc'
import crud from '@/mixins/crud'
export default {
name: 'ElectricFence',
mixins: [crud],
props: {
parentForm: {
type: Object,
require: true
}
},
data() {
return {
device_code: '',
device_id: '',
plc_id: '',
plc_code: '',
opc_id: '',
opc_code: '',
configLoading: false,
dataOpcservers: [],
dataOpcPlcs: [],
data1: [],
data2: [],
form: {
inspect_in_stocck: true,
ignore_pickup_check: true,
ignore_release_check: true,
apply_task: true,
manual_create_task: true,
is_pickup: true,
is_release: true
},
rules: {}
}
},
created() {
this.$nextTick(() => {
//
this.device_id = this.$props.parentForm.device_id
this.device_code = this.$props.parentForm.device_code
queryDriverConfig(this.device_id, this.$props.parentForm.driver_code).then(data => {
//
if (data.form) {
const arr = Object.keys(data.form)
//
if (arr.length > 0) {
this.form = data.form
}
}
//
if (data.parentForm) {
const arr = Object.keys(data.parentForm)
//
if (arr.length > 0) {
this.opc_code = data.parentForm.opc_code
this.plc_code = data.parentForm.plc_code
}
}
this.data1 = data.rs
this.data2 = data.ws
this.sliceItem()
})
selectPlcList().then(data => {
this.dataOpcPlcs = data
this.plc_id = this.$props.parentForm.opc_plc_id
})
selectOpcList().then(data => {
this.dataOpcservers = data
this.opc_id = this.$props.parentForm.opc_server_id
})
})
},
methods: {
changeOpc(val) {
this.dataOpcservers.forEach(item => {
if (item.opc_id === val) {
this.opc_code = item.opc_code
}
})
selectListByOpcID(val).then(data => {
this.dataOpcPlcs = data
this.plc_id = ''
this.plc_code = ''
if (this.dataOpcPlcs && this.dataOpcPlcs.length > 0) {
this.plc_id = this.dataOpcPlcs[0].plc_id
this.plc_code = this.dataOpcPlcs[0].plc_code
}
this.sliceItem()
})
},
finishReadEdit(data) {
// code,mode
if (data.code.indexOf('mode') !== -1) {
const dbValue = data.db
// .
const beforeStr = dbValue.match(/(\S*)\./)[1]
// .
const afterStr = dbValue.match(/\.(\S*)/)[1]
//
const endNumber = afterStr.substring(1)
//
if (isNaN(parseInt(endNumber))) {
return
}
for (const val in this.data1) {
if (this.data1[val].code.indexOf('action') !== -1) {
this.data1[val].db = beforeStr + '.' + afterStr.substring(0, 1) + (parseInt(endNumber) + 1)
}
if (this.data1[val].code.indexOf('error') !== -1) {
this.data1[val].db = beforeStr + '.' + afterStr.substring(0, 1) + (parseInt(endNumber) + 2)
}
}
}
},
changePlc(val) {
this.dataOpcPlcs.forEach(item => {
if (item.plc_id === val) {
this.plc_code = item.plc_code
this.sliceItem()
return
}
})
},
test_read1() {
testRead(this.data1, this.opc_id).then(data => {
this.data1 = data
this.notify('操作成功!', 'success')
}).catch(err => {
console.log(err.response.data.message)
})
},
test_write1() {
testwrite(this.data2, this.opc_id).then(data => {
this.notify('操作成功!', 'success')
}).catch(err => {
console.log(err.response.data.message)
})
},
doSubmit() {
this.$refs['form'].validate((valid) => {
if (valid) {
this.configLoading = true
//
const parentForm = this.parentForm
parentForm.is_route = true
parentForm.plc_id = this.plc_id
parentForm.opc_id = this.opc_id
updateConfig(parentForm, this.form, this.data1, this.data2).then(res => {
this.notify('保存成功', 'success')
this.configLoading = false
}).catch(err => {
this.configLoading = false
console.log(err.response.data.message)
})
}
})
},
sliceItem() { // DBItem
this.data1.forEach(item => {
const str = item.code
// .
if (str.search('.') !== -1) {
//
item.code = this.opc_code + '.' + this.plc_code + '.' + this.device_code + '.' + str.slice(str.lastIndexOf('.') + 1)
} else {
item.code = this.opc_code + '.' + this.plc_code + '.' + this.device_code + '.' + item.code
}
})
this.data2.forEach(item => {
const str = item.code
// .
if (str.search('.') !== -1) {
//
item.code = this.opc_code + '.' + this.plc_code + '.' + this.device_code + '.' + str.slice(str.lastIndexOf('.') + 1)
} else {
item.code = this.opc_code + '.' + this.plc_code + '.' + this.device_code + '.' + item.code
}
})
}
}
}
</script>
<style scoped>
</style>
Loading…
Cancel
Save