From 060616b7406602d1bd113bbde630a17a81d74099 Mon Sep 17 00:00:00 2001 From: "USER-20220102CG\\noblelift" <546428999@qq.com> Date: Tue, 4 Apr 2023 11:07:34 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E5=86=99=E5=85=A5=E4=BF=A1=E5=8F=B7?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../driver/AbstractOpcDeviceDriver.java | 77 +++++++++++++++++-- .../lnsh/lnsh_rgv/LnshRGVDeviceDriver.java | 6 +- .../lnsh_station/LnshStationDeviceDriver.java | 6 +- .../service/impl/InstructionServiceImpl.java | 7 +- 4 files changed, 87 insertions(+), 9 deletions(-) diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/driver/AbstractOpcDeviceDriver.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/driver/AbstractOpcDeviceDriver.java index e9017f9..28e76a5 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/driver/AbstractOpcDeviceDriver.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/driver/AbstractOpcDeviceDriver.java @@ -1,21 +1,26 @@ package org.nl.acs.device_driver.driver; +import org.jinterop.dcom.common.JIException; 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.exception.WDKException; import org.nl.modules.udw.UnifiedDataAccessor; import org.nl.modules.udw.UnifiedDataAccessorFactory; import org.nl.utils.SpringContextHolder; +import org.openscada.opc.lib.da.AddFailedException; +import org.openscada.opc.lib.da.Group; +import org.openscada.opc.lib.da.Item; +import org.openscada.opc.lib.da.ItemState; +import org.springframework.beans.factory.annotation.Autowired; -import java.util.Date; -import java.util.Iterator; -import java.util.Map; +import java.util.*; public class AbstractOpcDeviceDriver extends AbstractDeviceDriver implements OpcDeviceDriver { UnifiedDataAccessor opcUdw; + @Autowired + private OpcServerService opcServerService = SpringContextHolder.getBean(OpcServerService .class); + private Date sendTime; private String last_items; private int noLog_sendTimeOut; @@ -31,6 +36,66 @@ public class AbstractOpcDeviceDriver extends AbstractDeviceDriver implements Opc return this.opcUdw; } + + + public void checkcontrol(Map itemValues) throws JIException, AddFailedException { + Group group = opcServerService.getServer(this.getOpcServer()); + Map write = new HashMap(); + Map readitems = new LinkedHashMap(); + List itemsString = new ArrayList(); + itemsString = new ArrayList<> (itemValues.keySet()); + Iterator is = itemsString.iterator(); + + while (is.hasNext()) { + String string = (String) is.next(); + try { + readitems.put(string, group.addItem(string)); + } catch (Exception e) { + e.printStackTrace(); + } + } + int i = 0; + while(true) { + //下发信号 + control( itemValues); + Map read = new HashMap(); + Map itemStatus = group.read(true, (Item[])readitems.values().toArray(new Item[0])); + Set items = itemStatus.keySet(); + Iterator var15 = items.iterator(); + + while(var15.hasNext()) { + Item item = (Item)var15.next(); + ItemState itemState = (ItemState)itemStatus.get(item); + Object value = OpcUtl.getValue(item, itemState); + read.put(item.getId(), value); + } + + boolean check = true; + Iterator var24 = itemsString.iterator(); + + while(var24.hasNext()) { + String itemString = (String)var24.next(); + if (!ObjectUtl.isEquals(itemValues.get(itemString), JsonUtl.parse(read.get(itemString)))) { + check = false; + } + } + if (check) { + return; + } + + if (i > 0) { + ThreadUtl.sleep(300L); + } + + if (i > 3) { + throw new WDKException("写入次数超过3次而失败"); + } + ++i; + } + } + + + public boolean control(Map itemValues) { Iterator> it = itemValues.entrySet().iterator(); diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_rgv/LnshRGVDeviceDriver.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_rgv/LnshRGVDeviceDriver.java index 2669f81..4e70707 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_rgv/LnshRGVDeviceDriver.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_rgv/LnshRGVDeviceDriver.java @@ -598,7 +598,11 @@ public class LnshRGVDeviceDriver extends AbstractOpcDeviceDriver implements Devi Map itemMap = new HashMap(); itemMap.put(to_param, value); - this.control(itemMap); + try{ + this.checkcontrol(itemMap); + } catch (Exception e){ + e.printStackTrace(); + } logServer.deviceExecuteLog(this.device_code, "", "", to_param + " 写入 " + value); } diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_station/LnshStationDeviceDriver.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_station/LnshStationDeviceDriver.java index 83fb0b1..25741ad 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_station/LnshStationDeviceDriver.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_station/LnshStationDeviceDriver.java @@ -607,7 +607,11 @@ public class LnshStationDeviceDriver extends AbstractOpcDeviceDriver implements Map itemMap = new HashMap(); itemMap.put(to_command, command); - this.control(itemMap); + try{ + this.checkcontrol(itemMap); + } catch (Exception e){ + e.printStackTrace(); + } logServer.deviceExecuteLog(this.device_code, "", "", to_command + " 写入 " + command); } diff --git a/acs/hd/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java b/acs/hd/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java index fa65b22..c893728 100644 --- a/acs/hd/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java +++ b/acs/hd/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java @@ -650,7 +650,12 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu LnshStationDeviceDriver lnshStationDeviceDriver; if (device.getDeviceDriver() instanceof LnshStationDeviceDriver) { lnshStationDeviceDriver = (LnshStationDeviceDriver) device.getDeviceDriver(); - lnshStationDeviceDriver.writing(3, Integer.parseInt(dto.getInstruction_code())); + try { + lnshStationDeviceDriver.writing(3, Integer.parseInt(dto.getInstruction_code())); + } catch (Exception e){ + log.info("下发电气信号失败:"+e.getMessage()); + e.printStackTrace(); + } } //变更三色灯状态