Error in module Vision when saving the project

Hi!
After I have tested the project to load some data I can’t save the project due to a error in module Vision. below is a clip from the error. Any ideas?

java.lang.Exception: Error encountered in module "Vision" while saving.
	at com.inductiveautomation.ignition.designer.IgnitionDesigner.handleSave(IgnitionDesigner.java:1265)
	at com.inductiveautomation.ignition.designer.IgnitionDesigner$Handler.handleSaveAction(IgnitionDesigner.java:2821)
	at com.inductiveautomation.ignition.designer.IgnitionDesigner$Handler.access$1300(IgnitionDesigner.java:2230)
	at com.inductiveautomation.ignition.designer.IgnitionDesigner$Handler$7.actionPerformed(IgnitionDesigner.java:2401)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at com.jidesoft.plaf.basic.BasicJideButtonListener.mouseReleased(Unknown Source)
	at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$500(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at com.inductiveautomation.snap.swing.RibsEventQueue.dispatchEvent(RibsEventQueue.java:95)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: com.inductiveautomation.ignition.common.xmlserialization.SerializationException: Error during serialization for property 'children' on object '[ClientTagFolder]com.inductiveautomation.factorypmi.application.sqltags.ClientTagFolder@19cc6ce'
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.serializeProperties(DefaultObjectSerializationDelegate.java:302)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.serialize(DefaultObjectSerializationDelegate.java:327)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.XMLSerializationContext.serialize(XMLSerializationContext.java:49)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.XMLSerializer.serialize(XMLSerializer.java:515)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.XMLSerializer.serializeBinary(XMLSerializer.java:495)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.XMLSerializer.serializeBinary(XMLSerializer.java:485)
	at com.inductiveautomation.factorypmi.designer.model.VisionDesignerImpl.serializeProjectResource(VisionDesignerImpl.java:938)
	at com.inductiveautomation.factorypmi.designer.model.VisionDesignerImpl.synchAppToProject(VisionDesignerImpl.java:999)
	at com.inductiveautomation.factorypmi.designer.model.VisionDesignerImpl.notifyProjectSaveStart(VisionDesignerImpl.java:558)
	at com.inductiveautomation.ignition.designer.IgnitionDesigner.handleSave(IgnitionDesigner.java:1263)
	... 42 more
Caused by: TypeError: unhashable type: 'dict'

	at org.python.core.Py.TypeError(Py.java:235)
	at org.python.core.PyDictionary.dict___hash__(PyDictionary.java:724)
	at org.python.core.PyDictionary.hashCode(PyDictionary.java:704)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.safeHashCode(DefaultObjectSerializationDelegate.java:149)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.safeArrayHashCode(DefaultObjectSerializationDelegate.java:164)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.safeHashCode(DefaultObjectSerializationDelegate.java:145)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.safeArrayHashCode(DefaultObjectSerializationDelegate.java:164)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.safeHashCode(DefaultObjectSerializationDelegate.java:145)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.ReferenceTracker$Key.hashCode(ReferenceTracker.java:80)
	at java.util.HashMap.hash(Unknown Source)
	at java.util.HashMap.get(Unknown Source)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.ReferenceTracker.track(ReferenceTracker.java:32)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.XMLSerializationContext.serialize(XMLSerializationContext.java:46)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.writeConstructor(DefaultObjectSerializationDelegate.java:374)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.serializeConstructor(DefaultObjectSerializationDelegate.java:365)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.serialize(DefaultObjectSerializationDelegate.java:323)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.XMLSerializationContext.serialize(XMLSerializationContext.java:49)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.writeConstructor(DefaultObjectSerializationDelegate.java:374)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.serializeConstructor(DefaultObjectSerializationDelegate.java:365)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.serialize(DefaultObjectSerializationDelegate.java:323)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.XMLSerializationContext.serialize(XMLSerializationContext.java:49)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.writeCall(DefaultObjectSerializationDelegate.java:234)
	at com.inductiveautomation.factorypmi.designer.xmlserialization.ProjectTagDelegate.serializeProperties(ProjectTagDelegate.java:39)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.serialize(DefaultObjectSerializationDelegate.java:327)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.XMLSerializationContext.serialize(XMLSerializationContext.java:49)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.delegates.ArrayListDelegate.serialize(ArrayListDelegate.java:23)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.delegates.ArrayListDelegate.serialize(ArrayListDelegate.java:17)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.XMLSerializationContext.serialize(XMLSerializationContext.java:49)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.writeCall(DefaultObjectSerializationDelegate.java:234)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.writeCall(DefaultObjectSerializationDelegate.java:221)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.doProperty(DefaultObjectSerializationDelegate.java:278)
	at com.inductiveautomation.ignition.common.xmlserialization.serialization.DefaultObjectSerializationDelegate.serializeProperties(DefaultObjectSerializationDelegate.java:300)
	... 51 more

Ignition v7.9.7 (b2018032914)
Java: Oracle Corporation 1.8.0_151

Is this in 7.X, or 8.0? Are you doing anything with scripting and setting values on client tags? Could you get in contact with support?

Hi, I’m running 7.9.7. The project is not created by me. I been asked to use a copy of it do some changes.
But yes, there is client tags and they are dataset’s.

It is only after i have run the project in the client this error occurs. If I open it and do some changes I can save it without any problems, it is just when I have swithed over to preview and do some tasks.

Okay, so my educated guess at what’s happening is there’s a script somewhere that’s writing a literal Python dictionary to a client tag’s value (which will work) but you can’t save a window in the designer in that state. If you have a support contract, having a support rep look through your windows is going to be the easiest way to find this out.

If not, or you want to do this manually:

  • First, nail down as closely as you can when this occurs. What action do you perform while in preview mode that then makes the window uncloseable?
  • One thing that might help with that: once you’re in the broken state, try looking through your client tags and checking the value property on each. If you notice one with an unusual looking display, try Find/Replace (Ctrl + F) through any windows & scripts to see if you can find what’s writing to that client tag.
  • Update the logic that’s writing dictionaries to client tags to either A: not do that at all or B: never do that in the designer.

Thanks for the tips!

I found where the problem was, a client tag was loaded as a dict dataset. When I manually empty that tag there is no problem to save the project.

What is the best way to by a button script write a empty dataset to that tag? Will be handy to have while i’m working with it.

system.tag.write(<tagpath>, system.dataset.toDataSet([],[]))

2 Likes