From d066787439f4542a452f496061866959f0dac496 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=B1=9F=E7=8E=AE?= Date: Fri, 13 Oct 2023 16:03:20 +0800 Subject: [PATCH] fix --- .../driver/AbstractOpcDeviceDriver.java | 191 +++++++++++++----- .../device_driver/driver/OpcDeviceDriver.java | 2 +- .../HfKilnManipulatorDeviceDriver.java | 2 +- .../HfKilnTrussDeviceDriver.java | 2 +- .../HfGantryManipulatorDeviceDriver.java | 2 +- .../hf_rgv_two/HfRGVTwoDeviceDriver.java | 2 +- .../hf_station/HfStationDeviceDriver.java | 4 +- .../HfStationTwoDeviceDriver.java | 4 +- .../hf_two_rgv/HfTwoRGVDeviceDriver.java | 2 +- .../acs/service/impl/AcsToWmsServiceImpl.java | 4 + 10 files changed, 151 insertions(+), 64 deletions(-) diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/driver/AbstractOpcDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/driver/AbstractOpcDeviceDriver.java index 94dabf7..1f9fbb1 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/driver/AbstractOpcDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/driver/AbstractOpcDeviceDriver.java @@ -1,21 +1,24 @@ package org.nl.acs.device_driver.driver; +import lombok.extern.slf4j.Slf4j; import org.nl.acs.ext.wms.data.JsonUtl; -import org.nl.acs.opc.OpcConfig; -import org.nl.acs.opc.OpcServerService; -import org.nl.acs.opc.OpcServerServiceImpl; +import org.nl.acs.opc.*; import org.nl.acs.udw.UnifiedDataAccessor; import org.nl.acs.udw.UnifiedDataAccessorFactory; import org.nl.modules.wql.exception.WDKException; import org.nl.modules.wql.util.SpringContextHolder; +import org.openscada.opc.lib.da.Group; +import org.openscada.opc.lib.da.Item; +import org.openscada.opc.lib.da.ItemState; -import java.util.Date; -import java.util.Iterator; -import java.util.Map; +import java.util.*; +@Slf4j public class AbstractOpcDeviceDriver extends AbstractDeviceDriver implements OpcDeviceDriver { UnifiedDataAccessor opcUdw; + private final OpcServerService opcServerService = SpringContextHolder.getBean(OpcServerService.class); + public AbstractOpcDeviceDriver() { this.opcUdw = UnifiedDataAccessorFactory.getAccessor(OpcConfig.udw_opc_value_key); } @@ -25,77 +28,157 @@ public class AbstractOpcDeviceDriver extends AbstractDeviceDriver implements Opc return this.opcUdw; } - public boolean control(Map itemValues) { + public void control(Map itemValues) { Iterator> it = itemValues.entrySet().iterator(); - ItemValue p2[]; + ItemValue[] p2; p2 = new ItemValue[itemValues.size()]; - int i=0; + int i = 0; while (it.hasNext()) { Map.Entry entry = it.next(); - System.out.println("即将写入值:"+entry.getKey() + ":" + entry.getValue()); + log.info(entry.getKey() + " 即将写入 " + entry.getValue()); p2[i] = new ItemValue(); p2[i].setItem_code(entry.getKey()); p2[i].setItem_value(entry.getValue()); i++; } - return this.control(p2); + this.control(p2); } - public boolean control(ItemValue[] itemValues) { + public void control(ItemValue[] itemValues) { if (itemValues != null && itemValues.length != 0) { - String this_items = JsonUtl.parseWithoutException(itemValues); - boolean need_write = false; - StringBuilder sb = new StringBuilder(); - ItemValue[] var5 = itemValues; - int var6 = itemValues.length; + OpcServerService opcServerService = SpringContextHolder.getBean(OpcServerServiceImpl.class); -// for (int var7 = 0; var7 < var6; ++var7) { -// ItemValue itemValue = var5[var7]; -// String code = itemValue.getItem_code(); -// Object udw_value = this.getUdwValue(code); -// Object write_value = itemValue.getItem_value(); -// sb.append(code); -// sb.append(":"); -// sb.append(JsonUtl.parseWithoutException(udw_value)); -// sb.append(";"); -// if (!need_write && !UnifiedDataAppService.isEquals(udw_value, write_value)) { -// need_write = true; -// } else { -// log.warn("下发信号点位{} 当前写入值:{} 与系统内存值:{} 相同,不再写入 ", code, write_value, udw_value ); -// } -// } - need_write = true; - if (need_write) { - /*if (StringUtl.isEqual(this_items, this.last_items) && date.getTime() - this.sendTime.getTime() < (long) WcsConfig.opc_write_repeat_check) { - log.trace("发送时间因为小于{}毫秒,而被无视", WcsConfig.opc_write_repeat_check); - return false; - }*/ - /* this.execute_log.setResource(this.getDevice().getCode(), this.getDevice().getName()); - this.execute_log.log("原始记录{}->变更为{}", new Object[]{sb, this_items}); - OpcServerService opcServerService = OpcServerFactory.getOpcServerService();*/ + opcServerService.writeInteger(this.getOpcServer(), itemValues); - OpcServerService opcServerService = SpringContextHolder.getBean(OpcServerServiceImpl.class); + UnifiedDataAccessor opcValueAccessor = this.getOpcValueAccessor(); + for (ItemValue itemValue : itemValues) { + String code = itemValue.getItem_code(); + Object value = itemValue.getItem_value(); + opcValueAccessor.setValue(code, value); + } + } else { + log.warn("写入信号无内容!"); + } + } - opcServerService.writeInteger(this.getOpcServer(), itemValues); + public void checkControl(Map itemValues) { + Group group = opcServerService.getServer(this.getOpcServer()); + Map readItems = new LinkedHashMap<>(); + List itemsString; + itemsString = new ArrayList<>(itemValues.keySet()); - UnifiedDataAccessor opcValueAccessor = this.getOpcValueAccessor(); - ItemValue[] var17 = itemValues; - int var18 = itemValues.length; - - for (int var19 = 0; var19 < var18; ++var19) { - ItemValue itemValue = var17[var19]; - String code = itemValue.getItem_code(); - Object value = itemValue.getItem_value(); - opcValueAccessor.setValue(code, value); + for (String string : itemsString) { + try { + readItems.put(string, group.addItem(string)); + } catch (Exception e) { + log.error("group add item error!", e); + } + } + int i = 0; + while (true) { + //下发信号 + try{ + if(i == 0){ + control( itemValues); + } else { + controlByNewConn( itemValues); } + } catch (Exception e){ + log.error("check control error!", e); + } + + Map read = new HashMap<>(); + Map itemStatus; + boolean check = true; + try { + if (i > 0) { + group = opcServerService.getServer(this.getOpcServer()); + itemsString = new ArrayList<>(itemValues.keySet()); + + for (String string : itemsString) { + try { + readItems.put(string, group.addItem(string)); + } catch (Exception e) { + log.error("group add item error!", e); + } + } + itemStatus = group.read(true, readItems.values().toArray(new Item[0])); + + } else { + itemStatus = group.read(true, readItems.values().toArray(new Item[0])); + } + Set items = itemStatus.keySet(); + for (Item item : items) { + ItemState itemState = itemStatus.get(item); + Object value = OpcUtl.getValue(item, itemState); + read.put(item.getId(), value); + } + + for (String itemString : itemsString) { + if (!ObjectUtl.isEquals(itemValues.get(itemString), JsonUtl.parse(read.get(itemString)))) { + check = false; + } + } + } catch (Exception e) { + log.error("check control error!", e); + check = false; + } + + if (check) { + return; + } + + if (i > 0) { + ThreadUtl.sleep(300L); + } + + if (i > 3) { + log.info("写入次数超过3次而失败"); + throw new WDKException("写入次数超过3次而失败"); + } + ++i; + } + } + + public void controlByNewConn(Map itemValues) { + + Iterator> it = itemValues.entrySet().iterator(); + + ItemValue[] p2; + p2 = new ItemValue[itemValues.size()]; + int i = 0; + while (it.hasNext()) { + Map.Entry entry = it.next(); + log.info(entry.getKey() + " 即将写入 " + entry.getValue()); + p2[i] = new ItemValue(); + p2[i].setItem_code(entry.getKey()); + p2[i].setItem_value(entry.getValue()); + i++; + } + + this.controlByNewConn(p2); + } + + public void controlByNewConn(ItemValue[] itemValues) { + if (itemValues != null && itemValues.length != 0) { + OpcServerService opcServerService = SpringContextHolder.getBean(OpcServerServiceImpl.class); + + opcServerService.writeIntegerByNewConn(this.getOpcServer(), itemValues); + + + UnifiedDataAccessor opcValueAccessor = this.getOpcValueAccessor(); + + for (ItemValue itemValue : itemValues) { + String code = itemValue.getItem_code(); + Object value = itemValue.getItem_value(); + opcValueAccessor.setValue(code, value); } - return true; } else { - throw new WDKException("下发 无内容"); + log.warn("写入信号无内容!"); } } } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/driver/OpcDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/driver/OpcDeviceDriver.java index 8b3cf17..9ed9721 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/driver/OpcDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/driver/OpcDeviceDriver.java @@ -24,7 +24,7 @@ public interface OpcDeviceDriver extends DeviceDriver { //设备扩展表【acs_device_extra】 WQLObject extraTab = WQLObject.getWQLObject("acs_device_extra"); - JSONArray arr = extraTab.query("filed_type='02' and device_id = '" + this.getDevice().getDevice_id() + "'").getResultJSONArray(0); + JSONArray arr = extraTab.query("filed_type IN ('02', '03') and device_id = '" + this.getDevice().getDevice_id() + "'").getResultJSONArray(0); for (int i = 0; i < arr.size(); i++) { JSONObject json = arr.getJSONObject(i); OpcItemDto dto = new OpcItemDto(); diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_kiln_manipulator/HfKilnManipulatorDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_kiln_manipulator/HfKilnManipulatorDeviceDriver.java index 304fab7..673d938 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_kiln_manipulator/HfKilnManipulatorDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_kiln_manipulator/HfKilnManipulatorDeviceDriver.java @@ -340,7 +340,7 @@ public class HfKilnManipulatorDeviceDriver extends AbstractOpcDeviceDriver imple Map itemMap = new HashMap<>(); itemMap.put(to_param, value); - this.control(itemMap); + this.checkControl(itemMap); logServer.writeLog("下发电气信号", this.getDevice_code(), "下发信号:" + to_param + "信号值:" + value); } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_kiln_truss/HfKilnTrussDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_kiln_truss/HfKilnTrussDeviceDriver.java index 9fe1cde..22caecb 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_kiln_truss/HfKilnTrussDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_kiln_truss/HfKilnTrussDeviceDriver.java @@ -293,7 +293,7 @@ public class HfKilnTrussDeviceDriver extends AbstractOpcDeviceDriver implements Map itemMap = new HashMap<>(); itemMap.put(to_command, command); - this.control(itemMap); + this.checkControl(itemMap); logServer.writeLog("下发电气信号", this.getDevice_code(), "下发信号:" + to_command + "信号值:" + command); } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_manipulator/HfGantryManipulatorDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_manipulator/HfGantryManipulatorDeviceDriver.java index a7ab14d..82dd777 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_manipulator/HfGantryManipulatorDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_manipulator/HfGantryManipulatorDeviceDriver.java @@ -405,7 +405,7 @@ public class HfGantryManipulatorDeviceDriver extends AbstractOpcDeviceDriver imp Map itemMap = new HashMap<>(); itemMap.put(to_param, value); - this.control(itemMap); + this.checkControl(itemMap); logServer.writeLog("下发电气信号", this.getDevice_code(), "下发信号:" + to_param + "信号值:" + value); } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_rgv_two/HfRGVTwoDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_rgv_two/HfRGVTwoDeviceDriver.java index 07e3da7..8911b01 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_rgv_two/HfRGVTwoDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_rgv_two/HfRGVTwoDeviceDriver.java @@ -580,7 +580,7 @@ public class HfRGVTwoDeviceDriver extends AbstractOpcDeviceDriver implements Dev Map itemMap = new HashMap<>(); itemMap.put(to_param, value); - this.control(itemMap); + this.checkControl(itemMap); logServer.writeLog("下发电气信号", this.getDevice_code(), "下发信号:" + to_param + "信号值:" + value); } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_station/HfStationDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_station/HfStationDeviceDriver.java index c9ccc74..30a7f16 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_station/HfStationDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_station/HfStationDeviceDriver.java @@ -667,7 +667,7 @@ public class HfStationDeviceDriver extends AbstractOpcDeviceDriver implements De Map itemMap = new HashMap<>(); itemMap.put(to_command, command); - this.control(itemMap); + this.checkControl(itemMap); logServer.writeLog("下发电气信号", this.getDevice_code(), "下发信号:" + to_command + "信号值:" + command); } @@ -677,7 +677,7 @@ public class HfStationDeviceDriver extends AbstractOpcDeviceDriver implements De Map itemMap = new HashMap<>(); itemMap.put(to_param, value); - this.control(itemMap); + this.checkControl(itemMap); logServer.writeLog("下发电气信号", this.getDevice_code(), "下发信号:" + to_param + "信号值:" + value); } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_station_two/HfStationTwoDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_station_two/HfStationTwoDeviceDriver.java index c4ea451..bf9144f 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_station_two/HfStationTwoDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_station_two/HfStationTwoDeviceDriver.java @@ -519,7 +519,7 @@ public class HfStationTwoDeviceDriver extends AbstractOpcDeviceDriver implements Map itemMap = new HashMap<>(); itemMap.put(to_command, command); - this.control(itemMap); + this.checkControl(itemMap); logServer.writeLog("下发电气信号", this.getDevice_code(), "下发信号:" + to_command + "信号值:" + command); } @@ -529,7 +529,7 @@ public class HfStationTwoDeviceDriver extends AbstractOpcDeviceDriver implements Map itemMap = new HashMap<>(); itemMap.put(to_param, value); - this.control(itemMap); + this.checkControl(itemMap); logServer.writeLog("下发电气信号", this.getDevice_code(), "下发信号:" + to_param + "信号值:" + value); } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_two_rgv/HfTwoRGVDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_two_rgv/HfTwoRGVDeviceDriver.java index 31cc967..4a4a1c9 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_two_rgv/HfTwoRGVDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/hongfeng/hf_two_rgv/HfTwoRGVDeviceDriver.java @@ -697,7 +697,7 @@ public class HfTwoRGVDeviceDriver extends AbstractOpcDeviceDriver implements Dev Map itemMap = new HashMap<>(); itemMap.put(to_param, value); - this.control(itemMap); + this.checkControl(itemMap); logServer.writeLog("下发电气信号", this.getDevice_code(), "下发信号:" + to_param + "信号值:" + value); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index 19250b0..992df17 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -328,6 +328,10 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { HnjSendMaterialTask taskBean = SpringContextHolder.getBean(HnjSendMaterialTask.class); taskBean.createTask(param); // 创建任务 } else if (StrUtil.equals(type, "3")) { + JSONArray schBaseTask = WQLObject.getWQLObject("sch_base_task").query("is_delete = '0' AND task_type = 'yljcallm' AND task_status <> '7'").getResultJSONArray(0); + if (!schBaseTask.isEmpty()) { + throw new BadRequestException("有其它正在执行的压机叫料任务!"); + } // 3.压力机叫料 JSONObject param = new JSONObject(); param.put("point_code2", point_code);