AB PLC tag import/export

The support address link is coming up with a web page on my end… should I send to sales@automation-pros.com?

see wrapper file below

INFO | jvm 1 | 2020/03/25 14:26:29 | W [c.a.e.c.HostDevConfig ] [21:26:28]: Error importing configuration from XML file.
INFO | jvm 1 | 2020/03/25 14:26:29 | java.lang.NullPointerException: null
INFO | jvm 1 | 2020/03/25 14:26:29 | at com.automation_pros.enip1.config.xmlparser.LgxXmlAddOnParm.finish(LgxXmlAddOnParm.java:35)
INFO | jvm 1 | 2020/03/25 14:26:29 | at com.automation_pros.enip1.config.xmlparser.LgxXmlParser.endElement(LgxXmlParser.java:95)
INFO | jvm 1 | 2020/03/25 14:26:29 | at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(Unknown Source)
INFO | jvm 1 | 2020/03/25 14:26:29 | at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source)
INFO | jvm 1 | 2020/03/25 14:26:29 | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)
INFO | jvm 1 | 2020/03/25 14:26:29 | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
INFO | jvm 1 | 2020/03/25 14:26:29 | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
INFO | jvm 1 | 2020/03/25 14:26:29 | at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
INFO | jvm 1 | 2020/03/25 14:26:29 | at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
INFO | jvm 1 | 2020/03/25 14:26:29 | at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
INFO | jvm 1 | 2020/03/25 14:26:29 | at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
INFO | jvm 1 | 2020/03/25 14:26:29 | at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
INFO | jvm 1 | 2020/03/25 14:26:29 | at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
INFO | jvm 1 | 2020/03/25 14:26:29 | at com.automation_pros.enip1.config.HostDevConfig$ImportXmlForm.onSubmit(HostDevConfig.java:400)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.apache.wicket.markup.html.form.Form$9.component(Form.java:1248)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.apache.wicket.markup.html.form.Form$9.component(Form.java:1242)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.apache.wicket.util.visit.Visits.visitPostOrderHelper(Visits.java:274)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.apache.wicket.util.visit.Visits.visitPostOrder(Visits.java:245)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.apache.wicket.markup.html.form.Form.delegateSubmit(Form.java:1241)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.apache.wicket.markup.html.form.Form.process(Form.java:923)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:769)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:702)
INFO | jvm 1 | 2020/03/25 14:26:29 | at jdk.internal.reflect.GeneratedMethodAccessor61.invoke(Unknown Source)
INFO | jvm 1 | 2020/03/25 14:26:29 | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
INFO | jvm 1 | 2020/03/25 14:26:29 | at java.base/java.lang.reflect.Method.invoke(Unknown Source)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:258)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:216)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.invokeListener(ListenerInterfaceRequestHandler.java:240)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.respond(ListenerInterfaceRequestHandler.java:226)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:814)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:253)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:210)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:281)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:188)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:245)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1596)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:545)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:590)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1607)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1297)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:485)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1577)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1212)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:59)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:322)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:59)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.server.Server.handle(Server.java:500)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:547)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:270)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:388)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806)
INFO | jvm 1 | 2020/03/25 14:26:29 | at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938)
INFO | jvm 1 | 2020/03/25 14:26:29 | at java.base/java.lang.Thread.run(Unknown Source)

Ugh. What version of Logix is this?

Version 30

Did you encode the Add-On-Instructions when you exported? If so, try again with that checkbox turned off.

1 Like

Yep I had an AOI. Now I get “Discarded some objects from the XML import file”. Looking at the Diagnostic Logs it failed to create tags that have an array of BOOLS. Also the Import tag folder are followed by a space and the DataType Name ie. “Alarm_Delay TIMER[25]” where the tag name is “Alarm_Delay” and the datatype is an array of 25 timers. Some of the UDTs are bit corrupted, some tag members missing and others added ie “ZZZZZZZZZZa3000_Oper7” which does not exist in the project. All this said, this is manageable and still a great tool. Just requires a bit of clean-up. I’d be interested in any best practices that you may have for dos and don’t when configuring Logix projects to avoid these issues.

Yeah, I can't completely or properly support some datatypes. MESSAGE configurations don't come through. Types supplied by I/O modules are often scrambled. L5X just doesn't contain all necessary details to reconstruct some of these.

Yeah. That servers two purposes: 1) provide type information while browsing, and 2) discourage wholesale dragging and dropping of complete folders. (Don't do that!) You can see that the actual OPC item paths do not have the type info.

Hmmm. That might be due to the base (built-in) datatypes within my module were pulled from a V20 processor. I may have to expand that support. If an item is missing from a user-created UDT, please let me know.

Actually, these do exist in your project. All booleans in a Logix UDT must be "hosted" by an integer datatype. When you create booleans in UDTs in RSLogix, it hides SINTs that hold them. I don't support hiding these members. It is easy to see this in an L5K format export.

RSLogix supports external creation of booleans in UDTs as members of INTs, DINTs, and DWORD types, and they can skip bit numbers. And the host integers can be visible . But if you import such an L5K, those datatypes will not be editable within RSLogix. Many datatypes supplied by I/O modules have such members (to get the control/status bits in the right places).

2 Likes

My bad... I was comparing by expanding tag folder between Logix and Ignition. Logix expands DINTs into bits where Ignition does. All tags are imported. Thanks so much for working through this with me.

1 Like

My module does, too, though it doesn't include those in a drag and drop operation if the parent integer is included.

1 Like

Also, my module supports strings a bit differently from the Logix v21 driver, and can interpret strings in various formats from zero-padded arrays (without a .LEN element). These show up in the OPC Browser as @somekeyword options. There’s also an option to convert LINT values to microseconds in a java.sql.Timestamp with @usec. (Handy for values from Logix’s GSV WallClock.)

1 Like

Please do! I’d like to see them

Eventually. I don’t have any PLC-5/SLC-500 conversions on the horizon at the moment. I recall using a RE+script combination on the last PLC-5 due to the need for octal conversions.

After reading through this whole discussion, I gotta agree with some of the other guys in here. It’s probably best you write some script that you take an export of all your tags you need and does a find and replace to update the tagnames. I used to use VBA in Excel with good success to do these sorts of things, especially when upgrading to Logix 21+ controllers from prior controllers and finding that all my OPC paths had changed in ignition.

1 Like

Thanks for sharing. This looks promising for lots of projects. I will be sure to check it out. Thanks

This worked for what I needed! I was able to import the tags following your instructions so far. Thanks for sharing this!

1 Like