最近在做一个项目,使用KEPServerEX 4.0 采集PLC数据,项目是JAVA写的,程序写好后,开始能正常运行
,采集数据和远程操作设备都正常,但是程序运行了大概两天左右后就报错了,采集和操作都不行了,报错
内容如下:
org.jinterop.dcom.common.JIException: Not enough storage is available to complete this operation. [0x8007000E]
at org.jinterop.dcom.core.JIComServer.call(JIComServer.java:1012)
at org.jinterop.dcom.core.JIComServer.call(JIComServer.java:951)
at org.jinterop.dcom.core.JIComObjectImpl.call(JIComObjectImpl.java:293)
at org.jinterop.dcom.core.JIComObjectImpl.call(JIComObjectImpl.java:159)
at org.openscada.opc.dcom.common.impl.Helper.callIgnoreSpecificError(Helper.java:57)
at org.openscada.opc.dcom.da.impl.OPCServer.addGroup(OPCServer.java:71)
at org.openscada.opc.lib.da.Server.addGroup(Server.java:251)
at org.openscada.opc.lib.da.Server.addGroup(Server.java:281)
at com.xl.gngr.opc.OpcDeviceModify.modifyDeviceRateAndSwitch(OpcDeviceModify.java:75)
at com.xl.gngr.controllerapp.OpcController.modifyDeviceRate(OpcController.java:52)
at com.xl.gngr.controllerapp.OpcController$$FastClassBySpringCGLIB$$dc5c6886.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88)
at com.xl.gngr.aop.LogAop.aroundAdvice(LogAop.java:94)
at sun.reflect.GeneratedMethodAccessor302.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691)
at com.xl.gngr.controllerapp.OpcController$$EnhancerBySpringCGLIB$$82380b6.modifyDeviceRate(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:879)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
实在不知道原因,各位大神帮看看。
我连接OPC是通过utgard来连接的,代码如下:
ConnectionInformation connectionInfo = new ConnectionInformation();
connectionInfo.setHost("127.0.0.1");
connectionInfo.setClsid("6E6170F0-FF2D-11D2-8087-00105AA8F840");
connectionInfo.setUser("OPCUser");
connectionInfo.setDomain("");
connectionInfo.setPassword("123456");
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
Server mServer = new Server(connectionInfo, executor);
try {
mServer.connect();
Group group = mServer.addGroup();
//先通过OPC树形结构获取itemID
FlatBrowser browser = mServer.getFlatBrowser();
List<String> itemIdList = new ArrayList<>();
for (String name : browser.browse()) {
//匹配字符串获取想要的itemID
if (name.startsWith("STAND14.Device1") && !name.contains("STAND14.Device1._")) {
itemIdList.add(name);
}
}
int length = itemIdList.size();
Item[] itemArr = new Item[length];
for (int i = 0; i < length; i++) {
itemArr[i] = group.addItem(itemIdList.get(i));
}
//读取数据
Map<Item, ItemState> itemsMap = group.read(true, itemArr);
//入库省略
//关闭连接
mServer.disconnect();
}catch (Exception e){
e.printStackTrace();
}