add: 添加反馈AGV状态驱动,AGV状态变化下发信号
This commit is contained in:
@@ -1,10 +1,12 @@
|
|||||||
package org.nl.acs.agv.server.impl;
|
package org.nl.acs.agv.server.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.http.HttpRequest;
|
import cn.hutool.http.HttpRequest;
|
||||||
import cn.hutool.http.HttpResponse;
|
import cn.hutool.http.HttpResponse;
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.sf.json.JSONArray;
|
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.DeviceService;
|
||||||
import org.nl.acs.device.service.impl.DeviceServiceImpl;
|
import org.nl.acs.device.service.impl.DeviceServiceImpl;
|
||||||
import org.nl.acs.device_driver.agv_site.AgvSiteDeviceDriver;
|
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.lamp_three_color.LampThreecolorDeviceDriver;
|
||||||
import org.nl.acs.device_driver.machines_site.MachinesSiteDeviceDriver;
|
import org.nl.acs.device_driver.machines_site.MachinesSiteDeviceDriver;
|
||||||
import org.nl.acs.device_driver.magic3.Magic3DeviceDriver;
|
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.special_ordinary_site.SpecialOrdinarySiteDeviceDriver;
|
||||||
import org.nl.acs.device_driver.standard_autodoor.StandardAutodoorDeviceDriver;
|
import org.nl.acs.device_driver.standard_autodoor.StandardAutodoorDeviceDriver;
|
||||||
import org.nl.acs.device_driver.standard_inspect_site.StandardInspectSiteDeviceDriver;
|
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_manipulator_inspect_site.StandardManipulatorInspectSiteDeviceDriver;
|
||||||
import org.nl.acs.device_driver.standard_ordinary_site.StandardOrdinarySiteDeviceDriver;
|
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.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.device_driver.yzja_special.YzjaSpecialDeviceDriver;
|
||||||
import org.nl.acs.ext.erp.service.AcsToErpService;
|
import org.nl.acs.ext.erp.service.AcsToErpService;
|
||||||
import org.nl.acs.ext.wms.service.AcsToWmsService;
|
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.beans.factory.annotation.Value;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
@@ -78,10 +79,17 @@ public class AgvServiceImpl implements AgvService {
|
|||||||
|
|
||||||
private final LogServer logServer;
|
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();
|
Map<String, AgvDto> AGVDeviceStatus = new HashMap();
|
||||||
|
|
||||||
@Value("${agvToAcs.addr}")
|
@Value("${agvToAcs.addr}")
|
||||||
private String addr;
|
private String addr;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得之后num个天的时间
|
* 获得之后num个天的时间
|
||||||
*
|
*
|
||||||
@@ -560,11 +568,25 @@ public class AgvServiceImpl implements AgvService {
|
|||||||
HttpResponse result = HttpRequest.get(agvurl)
|
HttpResponse result = HttpRequest.get(agvurl)
|
||||||
.timeout(20000)//超时,毫秒
|
.timeout(20000)//超时,毫秒
|
||||||
.execute();
|
.execute();
|
||||||
|
log.info("查询agv状态:{}", result.body());
|
||||||
System.out.println("查询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.JSONObject body = com.alibaba.fastjson.JSONObject.parseObject(result.body());
|
||||||
com.alibaba.fastjson.JSONArray ja = body.getJSONArray("report");
|
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++) {
|
for (int i = 0; i < ja.size(); i++) {
|
||||||
com.alibaba.fastjson.JSONObject jo = ja.getJSONObject(i);
|
com.alibaba.fastjson.JSONObject jo = ja.getJSONObject(i);
|
||||||
//机器人编码
|
//机器人编码
|
||||||
@@ -583,36 +605,117 @@ public class AgvServiceImpl implements AgvService {
|
|||||||
//执行运单信息
|
//执行运单信息
|
||||||
com.alibaba.fastjson.JSONObject current_order = jo.getJSONObject("current_order");
|
com.alibaba.fastjson.JSONObject current_order = jo.getJSONObject("current_order");
|
||||||
int task_status = rbk_report.getInteger("task_status");
|
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;
|
String state = null;
|
||||||
if (task_status == 0) {
|
if (task_status == 0) {
|
||||||
state = "NONE";
|
state = "NONE";
|
||||||
}if(task_status==1){
|
}
|
||||||
|
if (task_status == 1) {
|
||||||
state = "WAITING";
|
state = "WAITING";
|
||||||
}if(task_status==2){
|
}
|
||||||
|
if (task_status == 2) {
|
||||||
state = "RUNNING";
|
state = "RUNNING";
|
||||||
}if(task_status==3){
|
}
|
||||||
|
if (task_status == 3) {
|
||||||
state = "SUSPENDED";
|
state = "SUSPENDED";
|
||||||
}if(task_status==4){
|
}
|
||||||
|
if (task_status == 4) {
|
||||||
state = "COMPLETED";
|
state = "COMPLETED";
|
||||||
}if(task_status==5){
|
}
|
||||||
|
if (task_status == 5) {
|
||||||
state = "FAILED";
|
state = "FAILED";
|
||||||
}if(task_status==6){
|
}
|
||||||
|
if (task_status == 6) {
|
||||||
state = "CANCELED";
|
state = "CANCELED";
|
||||||
}
|
}
|
||||||
|
//0表示断连,1表示连接上
|
||||||
Integer connectionStatus = jo.getInteger("connection_status");
|
Integer connectionStatus = jo.getInteger("connection_status");
|
||||||
String inst_code = current_order.getString("id");
|
String inst_code = null;
|
||||||
String taskNo = "0";
|
String taskNo = "0";
|
||||||
|
Instruction inst = null;
|
||||||
|
if (CollUtil.isNotEmpty(current_order)) {
|
||||||
|
inst_code = current_order.getString("id");
|
||||||
if (StrUtil.isNotEmpty(inst_code)) {
|
if (StrUtil.isNotEmpty(inst_code)) {
|
||||||
Instruction inst = instructionService.findByCodeFromCache(inst_code);
|
inst = instructionService.findByCodeFromCache(inst_code);
|
||||||
if (ObjectUtil.isNotEmpty(inst)) {
|
if (ObjectUtil.isNotEmpty(inst)) {
|
||||||
//任务号
|
//任务号
|
||||||
taskNo = inst.getTask_code();
|
taskNo = inst.getTask_code();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
//x坐标
|
//x坐标
|
||||||
float x = rbk_report.getFloatValue("x");
|
float x = rbk_report.getFloatValue("x");
|
||||||
//y坐标
|
//y坐标
|
||||||
float y = rbk_report.getFloatValue("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();
|
AgvDto dto = new AgvDto();
|
||||||
dto.setName(agv_code);
|
dto.setName(agv_code);
|
||||||
dto.setCurrent_map(current_map);
|
dto.setCurrent_map(current_map);
|
||||||
@@ -627,7 +730,7 @@ public class AgvServiceImpl implements AgvService {
|
|||||||
AGVDeviceStatus.put(agv_code, dto);
|
AGVDeviceStatus.put(agv_code, dto);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -1040,6 +1143,7 @@ public class AgvServiceImpl implements AgvService {
|
|||||||
log.info("仙工AGV请求取放货,请求参数 - {}", requestParam);
|
log.info("仙工AGV请求取放货,请求参数 - {}", requestParam);
|
||||||
String instCode = requestParam.getString("task_code");
|
String instCode = requestParam.getString("task_code");
|
||||||
Instruction inst = instructionService.findByCodeFromCache(instCode);
|
Instruction inst = instructionService.findByCodeFromCache(instCode);
|
||||||
|
instcode = instCode;
|
||||||
if (ObjectUtil.isEmpty(inst)) {
|
if (ObjectUtil.isEmpty(inst)) {
|
||||||
throw new BadRequestException("请求失败,未找到指令!");
|
throw new BadRequestException("请求失败,未找到指令!");
|
||||||
}
|
}
|
||||||
@@ -1069,6 +1173,7 @@ public class AgvServiceImpl implements AgvService {
|
|||||||
if (responseCode == 200) {
|
if (responseCode == 200) {
|
||||||
JSONObject jo2 = new JSONObject();
|
JSONObject jo2 = new JSONObject();
|
||||||
jo2.put("status", 200);
|
jo2.put("status", 200);
|
||||||
|
startPointInget = true;
|
||||||
log.info("上位允许取货 请求结果{}", responseCode);
|
log.info("上位允许取货 请求结果{}", responseCode);
|
||||||
return jo2;
|
return jo2;
|
||||||
} else {
|
} else {
|
||||||
@@ -1092,6 +1197,7 @@ public class AgvServiceImpl implements AgvService {
|
|||||||
if (responseCode == 200) {
|
if (responseCode == 200) {
|
||||||
JSONObject jo2 = new JSONObject();
|
JSONObject jo2 = new JSONObject();
|
||||||
jo2.put("status", 200);
|
jo2.put("status", 200);
|
||||||
|
startPointOutget = true;
|
||||||
log.info("上位允许取货离开 请求结果{}", responseCode);
|
log.info("上位允许取货离开 请求结果{}", responseCode);
|
||||||
return jo2;
|
return jo2;
|
||||||
} else {
|
} else {
|
||||||
@@ -1116,6 +1222,7 @@ public class AgvServiceImpl implements AgvService {
|
|||||||
if (responseCode == 200) {
|
if (responseCode == 200) {
|
||||||
JSONObject jo2 = new JSONObject();
|
JSONObject jo2 = new JSONObject();
|
||||||
jo2.put("status", 200);
|
jo2.put("status", 200);
|
||||||
|
endPointInput = true;
|
||||||
log.info("上位允许放货 请求结果{}", responseCode);
|
log.info("上位允许放货 请求结果{}", responseCode);
|
||||||
return jo2;
|
return jo2;
|
||||||
} else {
|
} else {
|
||||||
@@ -1139,6 +1246,7 @@ public class AgvServiceImpl implements AgvService {
|
|||||||
int responseCode = response.getInteger("status");
|
int responseCode = response.getInteger("status");
|
||||||
if (responseCode == 200) {
|
if (responseCode == 200) {
|
||||||
JSONObject jo2 = new JSONObject();
|
JSONObject jo2 = new JSONObject();
|
||||||
|
endPointOutput = true;
|
||||||
jo2.put("status", 200);
|
jo2.put("status", 200);
|
||||||
log.info("上位允许放货离开 请求结果{}", responseCode);
|
log.info("上位允许放货离开 请求结果{}", responseCode);
|
||||||
return jo2;
|
return jo2;
|
||||||
@@ -1535,6 +1643,7 @@ public class AgvServiceImpl implements AgvService {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public com.alibaba.fastjson.JSONArray createBlocksData(Instruction inst) {
|
public com.alibaba.fastjson.JSONArray createBlocksData(Instruction inst) {
|
||||||
com.alibaba.fastjson.JSONArray ja = new com.alibaba.fastjson.JSONArray();
|
com.alibaba.fastjson.JSONArray ja = new com.alibaba.fastjson.JSONArray();
|
||||||
|
|
||||||
@@ -1877,6 +1986,7 @@ public class AgvServiceImpl implements AgvService {
|
|||||||
}
|
}
|
||||||
return ja;
|
return ja;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public HttpResponse addOrderSequences(Instruction inst) throws Exception {
|
public HttpResponse addOrderSequences(Instruction inst) throws Exception {
|
||||||
JSONObject orderjo = createOrederData(inst, "1");
|
JSONObject orderjo = createOrederData(inst, "1");
|
||||||
@@ -2273,12 +2383,9 @@ public class AgvServiceImpl implements AgvService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
String address = "L1-01-01";
|
String msg = null;
|
||||||
if (address.indexOf("-") > 0) {
|
String msg1 = null;
|
||||||
String str = address.substring(address.indexOf("-"), address.length());
|
System.out.println("msg = " + Objects.equals(msg,msg1));
|
||||||
address = address.substring(0, address.indexOf("-"));
|
|
||||||
System.out.println(address);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,6 +46,8 @@ public enum DriverTypeEnum {
|
|||||||
|
|
||||||
FEEDBACK_AGV_STATUS_SITE(19, "feedback_agv_status_site", "上报AGV状态站点", "conveyor"),
|
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"),
|
MANIPULATOR_STACKING_SITE(20, "standard_manipulator_stacking_site", "机械手码垛驱动(区分托盘类型)", "conveyor"),
|
||||||
|
|
||||||
PHOTOELECTRIC_INSPECT_SITE(21, "standard_photoelectric_inspect_site", "光电检测站点(优先出库)", "conveyor"),
|
PHOTOELECTRIC_INSPECT_SITE(21, "standard_photoelectric_inspect_site", "光电检测站点(优先出库)", "conveyor"),
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -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 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 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_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_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 standard_photoelectric_inspect_site from '@/views/acs/device/driver/standard_photoelectric_inspect_site'
|
||||||
import ndxy_special from '@/views/acs/device/driver/ndxy_special'
|
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,
|
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,
|
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,
|
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,
|
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 },
|
electric_fence, oumulong_plc, traffic_light, standard_rgv, ykbk_special, ssj_cache_site, magic3, agv_site, whxr_weighing, jmagv, yzja_special },
|
||||||
dicts: ['device_type'],
|
dicts: ['device_type'],
|
||||||
|
|||||||
352
qd/src/views/acs/device/driver/feedback_agv_status.vue
Normal file
352
qd/src/views/acs/device/driver/feedback_agv_status.vue
Normal file
@@ -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() { // 拼接DB的Item值
|
||||||
|
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>
|
||||||
Reference in New Issue
Block a user