diff --git a/acs/nladmin-system/pom.xml b/acs/nladmin-system/pom.xml
index 2095112..aec1a03 100644
--- a/acs/nladmin-system/pom.xml
+++ b/acs/nladmin-system/pom.xml
@@ -57,6 +57,12 @@
org.openscada.jinterop.deps
1.5.0
+
+
+ org.bouncycastle
+ bcprov-jdk15on
+ 1.54
+
org.openscada.utgard
org.openscada.opc.dcom
@@ -415,7 +421,33 @@
ik-analyzer
${lucene.version}
-
+
+ commons-io
+ commons-io
+ 2.8.0
+
+
+ org.openscada.jinterop
+ org.openscada.jinterop.core
+ 2.1.8
+
+
+ org.bouncycastle
+ bcprov-jdk15on
+
+
+
+
+ org.openscada.jinterop
+ org.openscada.jinterop.deps
+ 1.5.0
+
+
+ org.bouncycastle
+ bcprov-jdk15on
+
+
+
org.apache.lucene
diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/agv/server/AgvWaitUtil.java b/acs/nladmin-system/src/main/java/org/nl/acs/agv/server/AgvWaitUtil.java
index 6e8a9a9..3025d02 100644
--- a/acs/nladmin-system/src/main/java/org/nl/acs/agv/server/AgvWaitUtil.java
+++ b/acs/nladmin-system/src/main/java/org/nl/acs/agv/server/AgvWaitUtil.java
@@ -1,5 +1,6 @@
package org.nl.acs.agv.server;
+import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
@@ -14,6 +15,7 @@ import org.nl.acs.opc.Device;
import org.nl.acs.opc.DeviceAppService;
import org.nl.acs.task.service.dto.TaskDto;
import org.nl.modules.common.exception.BadRequestException;
+import org.nl.modules.wql.core.bean.WQLObject;
import org.springframework.stereotype.Service;
/**
@@ -127,6 +129,7 @@ public class AgvWaitUtil {
AgvConveyorDeviceDriver driver = (AgvConveyorDeviceDriver) executeDevice.getDeviceDriver();
if ("down".equals(task.getExecute_message())) {
driver.writing("to_down_finished", 1);
+ this.deviceExecuteLogService.deviceExecuteLog(deviceCode, "", "", "下料完成");
}
}
}
@@ -308,6 +311,16 @@ public class AgvWaitUtil {
// 普通站点驱动
String message = "允许AGV放货后离开。";
this.deviceExecuteLogService.deviceExecuteLog(deviceCode, "", "", message);
+ //人工放货位到缓存区需要将货位信息写入缓存区
+ if (task.getStart_device_code().startsWith("R_")&& deviceCode.endsWith("CH_")){
+ WQLObject wo = WQLObject.getWQLObject("acs_device_runpoint");
+ JSONObject json = wo.query("device_code ='" + task.getStart_device_code() + "'").uniqueResult(0);
+ if (MapUtil.isNotEmpty(json)) {
+ JSONObject rpUpdate = new JSONObject();
+ rpUpdate.put("material_type", json.get("material_type"));
+ WQLObject.getWQLObject("acs_device_runpoint").update(rpUpdate, "device_code = '" + deviceCode + "'");
+ }
+ }
// agv上料完成后写信号
String executeCode = task.getExecute_code();
if (StrUtil.isNotEmpty(executeCode)) {
@@ -316,9 +329,10 @@ public class AgvWaitUtil {
AgvConveyorDeviceDriver driver = (AgvConveyorDeviceDriver) executeDevice.getDeviceDriver();
if ("up".equals(task.getExecute_message())) {
driver.writing("to_up_finished", 1);
+ this.deviceExecuteLogService.deviceExecuteLog(deviceCode, "", "", "上料完成");
}
-
}
+
}
flag = true;
} else {
diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv_conveyor/AgvConveyorDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv_conveyor/AgvConveyorDeviceDriver.java
index bb73128..9a0c87b 100644
--- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv_conveyor/AgvConveyorDeviceDriver.java
+++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv_conveyor/AgvConveyorDeviceDriver.java
@@ -71,11 +71,14 @@ public class AgvConveyorDeviceDriver extends AbstractOpcDeviceDriver implements
int heartbeat = 0;
int error = 0;
int task = 0;
- String on_off_site;
- String tray_Information;
+ int on_off_site;
+ int tray_Information;
int down_request;
int up_request;
+ String on_off_site_str;
+ String tray_Information_str;
+
Boolean isonline = true;
Boolean iserror = false;
@@ -99,12 +102,12 @@ public class AgvConveyorDeviceDriver extends AbstractOpcDeviceDriver implements
String message = null;
device_code = this.getDeviceCode();
- heartbeat = this.itemProtocol.getItem_heartbeat();
on_off_site = this.itemProtocol.getItem_on_off_site();
tray_Information = this.itemProtocol.getItem_tray_Information();
down_request = this.itemProtocol.getItem_down_request();
up_request = this.itemProtocol.getItem_up_request();
-
+ on_off_site_str = String.valueOf(on_off_site);
+ tray_Information_str = String.valueOf(tray_Information);
@@ -116,10 +119,12 @@ public class AgvConveyorDeviceDriver extends AbstractOpcDeviceDriver implements
this.setIsonline(false);
this.setIserror(true);
//未联机
+ logServer.deviceExecuteLog(this.device_code, "", "", "未联机");
+
} else {
this.setIsonline(true);
this.setIserror(false);
- if ((down_request == 1 || up_request == 1) && StringUtils.isNoneEmpty(on_off_site)){
+ if ((down_request == 1 || up_request == 1) && StringUtils.isNoneEmpty(on_off_site_str)){
task_apply();
}
}
@@ -135,42 +140,88 @@ public class AgvConveyorDeviceDriver extends AbstractOpcDeviceDriver implements
} else {
this.instruction_require_time = date;
WQLObject wo = WQLObject.getWQLObject("acs_device_runpoint");
- JSONObject json = wo.query("device_code ='" + on_off_site + "'").uniqueResult(0);
- if (MapUtil.isNotEmpty(json) && "0".equals(json.get("hasgoods"))){
- logServer.deviceExecuteLog(this.device_code, "", "", on_off_site + "无上下料货物");
- return false;
- }
+ //上料设备
+ List putDeviceCodeList = this.getExtraDeviceCodes("put_device_code");
+ //下料设备
+ List getDeviceCodeList = this.getExtraDeviceCodes("get_device_code");
+
//请求下料
if (down_request == 1){
- List routeLineDtos = routeLineService.getsByCode(on_off_site,"normal");
- if (CollUtil.isEmpty(routeLineDtos) || routeLineDtos.size() < 1) {
- logServer.deviceExecuteLog(this.device_code, "", "", "没有"+ on_off_site + "的路由");
+ String nextCode = null;
+ //下料点要有货,终点要无货
+ JSONObject json = wo.query("device_code ='" + on_off_site_str + "'").uniqueResult(0);
+ if (MapUtil.isNotEmpty(json) && "0".equals(json.get("hasgoods"))){
+ logServer.deviceExecuteLog(this.device_code, "", "", on_off_site_str + "下料点无货物");
return false;
}
- RouteLineDto routeLineDto = routeLineDtos.get(0);
+ if (CollUtil.isNotEmpty(getDeviceCodeList)){
+ //查找无货的防货点
+ for (String deviceCode : getDeviceCodeList) {
+ JSONObject jsonEnd = wo.query("device_code ='" + deviceCode + "'").uniqueResult(0);
+ if (MapUtil.isNotEmpty(jsonEnd) && "0".equals(jsonEnd.get("hasgoods"))){
+ nextCode = deviceCode;
+ break;
+ }
+ }
+ }
+
+ if (nextCode == null){
+ logServer.deviceExecuteLog(this.device_code, "", "", "终点货物占满");
+ return false;
+ }
+ List taskDtos = taskserver.queryTaskByDeviceCodeAndStatus(on_off_site_str);
+ if (CollUtil.isNotEmpty(taskDtos)){
+ logServer.deviceExecuteLog(this.device_code, "", "", "已存在"+on_off_site_str+"为起点就绪或执行的任务");
+ return false;
+ }
+
TaskDto taskDto = new TaskDto();
- taskDto.setStart_device_code(on_off_site);
- taskDto.setNext_device_code(routeLineDto.getNext_device_code());
- taskDto.setStart_point_code(on_off_site);
- taskDto.setNext_point_code(routeLineDto.getNext_device_code());
+ taskDto.setStart_device_code(on_off_site_str);
+ taskDto.setNext_device_code(nextCode);
+ taskDto.setStart_point_code(on_off_site_str);
+ taskDto.setNext_point_code(nextCode);
taskDto.setExecute_code(this.device_code);
taskDto.setExecute_message("down");
+ taskDto.setTask_type("3");
taskserver.create(taskDto);
}
//请求上料
if (up_request == 1){
- List routeLineDtos = routeLineService.getPathLinesByCode(on_off_site,"normal");
- if (CollUtil.isEmpty(routeLineDtos) || routeLineDtos.size() < 1) {
- logServer.deviceExecuteLog(this.device_code, "", "", "没有"+ on_off_site + "的路由");
+ String startCode = null;
+ //起点要有货,上料点要无货
+ JSONObject json = wo.query("device_code ='" + on_off_site_str + "'").uniqueResult(0);
+ if (MapUtil.isNotEmpty(json) && "1".equals(json.get("hasgoods"))){
+ logServer.deviceExecuteLog(this.device_code, "", "", on_off_site_str + "上料点存在货物");
+ return false;
+ }
+
+ if (CollUtil.isNotEmpty(putDeviceCodeList)){
+ //查找无货的防货点
+ for (String deviceCode : putDeviceCodeList) {
+ JSONObject jsonStar = wo.query("device_code ='" + deviceCode + "'").uniqueResult(0);
+ if (MapUtil.isNotEmpty(jsonStar) && "1".equals(jsonStar.get("hasgoods")) && tray_Information_str.equals(jsonStar.get("material_type"))){
+ startCode = deviceCode;
+ break;
+ }
+ }
+ }
+ if (startCode == null){
+ logServer.deviceExecuteLog(this.device_code, "", "", "起点无货物可取或者物料类型不匹配");
+ return false;
+ }
+ List taskDtos = taskserver.queryTaskByEndDeviceCodeAndStatus(on_off_site_str);
+ if (CollUtil.isNotEmpty(taskDtos)){
+ logServer.deviceExecuteLog(this.device_code, "", "", "已存在"+startCode+"为终点就绪或执行的任务");
+ return false;
}
- RouteLineDto routeLineDto = routeLineDtos.get(0);
TaskDto taskDto = new TaskDto();
- taskDto.setStart_device_code(routeLineDto.getDevice_code());
- taskDto.setNext_device_code(on_off_site);
- taskDto.setStart_point_code(routeLineDto.getDevice_code());
- taskDto.setNext_point_code(on_off_site);
+ taskDto.setStart_device_code(startCode);
+ taskDto.setNext_device_code(on_off_site_str);
+ taskDto.setStart_point_code(startCode);
+ taskDto.setNext_point_code(on_off_site_str);
taskDto.setExecute_code(this.device_code);
taskDto.setExecute_message("up");
+ taskDto.setTask_type("3");
taskserver.create(taskDto);
}
return true;
diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv_conveyor/ItemProtocol.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv_conveyor/ItemProtocol.java
index f830602..97f104f 100644
--- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv_conveyor/ItemProtocol.java
+++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv_conveyor/ItemProtocol.java
@@ -13,12 +13,11 @@ import java.util.List;
@Setter
public class ItemProtocol {
- public static String item_heartbeat = "heartbeat";
public static String item_on_off_site = "on_off_site";
public static String item_tray_Information = "tray_Information";
public static String item_down_request = "down_request";
public static String item_up_request = "up_request";
- public static String item_to_up_finished = "to_up_finished ";
+ public static String item_to_up_finished = "to_up_finished";
public static String item_to_down_finished = "to_down_finished";
@@ -29,16 +28,14 @@ public class ItemProtocol {
this.driver = driver;
}
- public int getItem_heartbeat() {
- return this.getOpcIntegerValue(item_heartbeat);
- }
- public String getItem_on_off_site() {
- return this.getOpcStringValue(item_on_off_site);
+
+ public int getItem_on_off_site() {
+ return this.getOpcIntegerValue(item_on_off_site);
}
- public String getItem_tray_Information() {
- return this.getOpcStringValue(item_tray_Information);
+ public int getItem_tray_Information() {
+ return this.getOpcIntegerValue(item_tray_Information);
}
public int getItem_down_request() {
@@ -75,7 +72,6 @@ public class ItemProtocol {
public static List getReadableItemDtos() {
ArrayList list = new ArrayList();
- list.add(new ItemDTO(item_heartbeat, "心跳", "VW0"));
list.add(new ItemDTO(item_on_off_site, "上下站点", "VW2"));
list.add(new ItemDTO(item_tray_Information, "料盘信息", "VW4"));
list.add(new ItemDTO(item_down_request, "下料请求", "VW6"));
diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/task/service/TaskService.java b/acs/nladmin-system/src/main/java/org/nl/acs/task/service/TaskService.java
index 8c4f08b..ccfacb2 100644
--- a/acs/nladmin-system/src/main/java/org/nl/acs/task/service/TaskService.java
+++ b/acs/nladmin-system/src/main/java/org/nl/acs/task/service/TaskService.java
@@ -242,4 +242,11 @@ public interface TaskService {
*/
List queryTaskByDeviceCodeAndStatus(String device_code);
+ /**
+ * 根据终点设备号和任务状态查询
+ * @param device_code
+ * @return
+ */
+ List queryTaskByEndDeviceCodeAndStatus(String device_code);
+
}
diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java b/acs/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java
index 51bd979..f8c2840 100644
--- a/acs/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java
+++ b/acs/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java
@@ -728,10 +728,10 @@ public class TaskServiceImpl implements TaskService, ApplicationAutoInitial {
rpUpdate.put("update_time", DateUtil.now());
String device_code3 = "";
String device_code4 = "";
- if (device3 != null){
+ if (device3 != null) {
device_code3 = device3.getDevice_code();
}
- if (device4 != null){
+ if (device4 != null) {
device_code4 = device4.getDevice_code();
}
WQLObject.getWQLObject("acs_device_runpoint").update(rpUpdate, "device_code IN ('" + device1.getDevice_code() + "', '" + device2.getDevice_code() + "', '" + device_code3 + "', '" + device_code4 + "')");
@@ -1226,11 +1226,22 @@ public class TaskServiceImpl implements TaskService, ApplicationAutoInitial {
Iterator iterator = tasks.iterator();
while (iterator.hasNext()) {
TaskDto task = iterator.next();
- if (task.getStart_device_code().equals(device_code) && StrUtil.equals(task.getTask_status(), "1")) {
- Instruction instruction = instructionService.findByTaskcodeAndStatus(task.getTask_code());
- if (ObjectUtil.isNotEmpty(instruction)) {
- list.add(task);
- }
+ if (task.getStart_device_code().equals(device_code) && (StrUtil.equals(task.getTask_status(), "1") || StrUtil.equals(task.getTask_status(), "0"))) {
+ list.add(task);
+ }
+ }
+ return list;
+ }
+
+
+ @Override
+ public List queryTaskByEndDeviceCodeAndStatus(String device_code) {
+ List list = new ArrayList<>();
+ Iterator iterator = tasks.iterator();
+ while (iterator.hasNext()) {
+ TaskDto task = iterator.next();
+ if (task.getNext_device_code().equals(device_code) && (StrUtil.equals(task.getTask_status(), "1") || StrUtil.equals(task.getTask_status(), "0"))) {
+ list.add(task);
}
}
return list;
diff --git a/acs/nladmin-ui/public/config.js b/acs/nladmin-ui/public/config.js
index 56d6c09..07f88d9 100644
--- a/acs/nladmin-ui/public/config.js
+++ b/acs/nladmin-ui/public/config.js
@@ -3,7 +3,7 @@ window.g = {
VUE_APP_BASE_API: 'http://127.0.0.1:8010'
},
prod: {
- VUE_APP_BASE_API: 'http://10.93.41.198:8010'
+ VUE_APP_BASE_API: 'http://188.188.69.101:8010'
}
diff --git a/acs/nladmin-ui/src/views/acs/device/driver/agv_conveyor.vue b/acs/nladmin-ui/src/views/acs/device/driver/agv_conveyor.vue
index 7db5a97..61ece3d 100644
--- a/acs/nladmin-ui/src/views/acs/device/driver/agv_conveyor.vue
+++ b/acs/nladmin-ui/src/views/acs/device/driver/agv_conveyor.vue
@@ -67,17 +67,14 @@
-
-
-
-
-
-
-
+
+
+
-
-
+
+
@@ -107,23 +105,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -294,7 +276,9 @@ export default {
manual_create_task: true,
is_pickup: true,
is_release: true,
- link_device_code: ''
+ link_device_code: '',
+ get_device_code: [],
+ put_device_code: []
},
rules: {}
}