Fresh install of Ignition 7.5.1, added the following modules:
Serial Support Client 1.5.1 (b29)
Serial Support Gateway 1.5.1 (b29)
Created a button and added the following:
system.serial.openSerialPort('/dev/ttyUSB0')
Pressing the button results in the following:
ERROR [ActionAdapter-AWT-EventQueue-0] <HTML>Error executing script for event: <code><b>actionPerformed</b></code><BR>on component: <code><b>Button</b></code>.
Traceback (most recent call last):
File "<event:actionPerformed>", line 14, in <module>
at Serialio.SerialPortLocal.SerOpenPort(Native Method)
at Serialio.SerialPortLocal.open(SerialPortLocal.java:317)
at Serialio.SerialPortLocal.<init>(SerialPortLocal.java:287)
at com.inductiveautomation.ignition.modules.serial.scripting.SerialScriptModule.openSerialPort(SerialScriptModule.java:199)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
java.lang.UnsatisfiedLinkError: java.lang.UnsatisfiedLinkError: Serialio.SerialPortLocal.SerOpenPort(LSerialio/SerialConfig;)I
at org.python.core.PyException.fillInStackTrace(PyException.java:70)
at java.lang.Throwable.<init>(Throwable.java:181)
at java.lang.Exception.<init>(Exception.java:29)
at java.lang.RuntimeException.<init>(RuntimeException.java:32)
at org.python.core.PyException.<init>(PyException.java:46)
at org.python.core.PyException.<init>(PyException.java:43)
at org.python.core.Py.JavaError(Py.java:481)
at org.python.core.Py.JavaError(Py.java:474)
at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:188)
at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:204)
at org.python.core.PyObject.__call__(PyObject.java:387)
at org.python.core.PyObject.__call__(PyObject.java:391)
at org.python.pycode._pyx17.f$0(<event:actionPerformed>:14)
at org.python.pycode._pyx17.call_function(<event:actionPerformed>)
at org.python.core.PyTableCode.call(PyTableCode.java:165)
at org.python.core.PyCode.call(PyCode.java:18)
at org.python.core.Py.runCode(Py.java:1261)
at com.inductiveautomation.ignition.common.script.ScriptManager.runCode(ScriptManager.java:539)
at com.inductiveautomation.factorypmi.application.binding.action.ActionAdapter.runActions(ActionAdapter.java:155)
at com.inductiveautomation.factorypmi.application.binding.action.ActionAdapter.invoke(ActionAdapter.java:266)
at com.inductiveautomation.factorypmi.application.binding.action.RelayInvocationHandler.invoke(RelayInvocationHandler.java:55)
at $Proxy14.actionPerformed(Unknown Source)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6288)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6053)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4651)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
at java.awt.EventQueue.access$000(EventQueue.java:84)
at java.awt.EventQueue$1.run(EventQueue.java:602)
at java.awt.EventQueue$1.run(EventQueue.java:600)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:616)
at java.awt.EventQueue$2.run(EventQueue.java:614)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Caused by: java.lang.UnsatisfiedLinkError: Serialio.SerialPortLocal.SerOpenPort(LSerialio/SerialConfig;)I
at Serialio.SerialPortLocal.SerOpenPort(Native Method)
at Serialio.SerialPortLocal.open(SerialPortLocal.java:317)
at Serialio.SerialPortLocal.<init>(SerialPortLocal.java:287)
at com.inductiveautomation.ignition.modules.serial.scripting.SerialScriptModule.openSerialPort(SerialScriptModule.java:199)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:186)
... 49 more
When I originally tried this I had code that did a full configuration, open, write, read, close. This was throwing exactly the same exception, but also included a message complaining that it could not find the libLux86_64bit library. Unfortunately, I am unable to reproduce the error with this extra text.
I cannot find any reference to libLux86 anywhere, so I would guess it is supposed to be supplied by the serial module.
This is the extra text that I was talking aboutā¦
Serialio Library: version 10.0.4: build 9212
Copyright (c) 1996-2009 Serialio.com, All Rights Reserved.
os.name="Linux" os.arch="amd64"
java.lang.UnsatisfiedLinkError: no libLux86_64bit in java.library.path: Check that native library libLux86_64bit is in proper directory
Iām finding it hard to reliably get this to appear- it seems that it is detached from the exception in some way and only runs once per session or something.
Thanks. In the meantime, is there a workaround? I could easily make the file available if I knew where it is now and where the loader was searching for it.
Using 7.5.2-beta4, I get errors when starting the designer:
INFO [main-Designer-Startup] Starting module: Serial Support Client [+7361]
ERROR [NativeLoader-Designer-Startup] Error loading SerialIo native library.
java.lang.NullPointerException
at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1383)
at org.apache.commons.io.IOUtils.copy(IOUtils.java:1357)
at com.inductiveautomation.ignition.modules.serial.SerialNativeLoader.loadNative(SerialNativeLoader.java:64)
at com.inductiveautomation.ignition.modules.serial.SerialNativeLoader.load(SerialNativeLoader.java:49)
at com.inductiveautomation.ignition.modules.serial.SerialSupportDesignerHook.startup(SerialSupportDesignerHook.java:18)
at com.inductiveautomation.ignition.designer.IgnitionDesigner$LoadedModule.startup(IgnitionDesigner.java:2353)
at com.inductiveautomation.ignition.designer.IgnitionDesigner.startupModule(IgnitionDesigner.java:1056)
at com.inductiveautomation.ignition.designer.IgnitionDesigner.loadProject(IgnitionDesigner.java:968)
at com.inductiveautomation.ignition.designer.IgnitionDesigner$StartupProjectDialogHandler$1.run(IgnitionDesigner.java:379)
at java.lang.Thread.run(Thread.java:662)
ERROR [main-Designer-Startup] Error starting up module Serial Support Client
java.lang.RuntimeException
at com.inductiveautomation.ignition.modules.serial.SerialNativeLoader.load(SerialNativeLoader.java:52)
at com.inductiveautomation.ignition.modules.serial.SerialSupportDesignerHook.startup(SerialSupportDesignerHook.java:18)
at com.inductiveautomation.ignition.designer.IgnitionDesigner$LoadedModule.startup(IgnitionDesigner.java:2353)
at com.inductiveautomation.ignition.designer.IgnitionDesigner.startupModule(IgnitionDesigner.java:1056)
at com.inductiveautomation.ignition.designer.IgnitionDesigner.loadProject(IgnitionDesigner.java:968)
at com.inductiveautomation.ignition.designer.IgnitionDesigner$StartupProjectDialogHandler$1.run(IgnitionDesigner.java:379)
at java.lang.Thread.run(Thread.java:662)
system.serial.openSerialPort still results in:
java.lang.UnsatisfiedLinkError: no libLux86_64bit in java.library.path: Check that native library libLux86_64bit is in proper directory
Please let me know if there is anything more I can do to help fix this.
Ignition v7.9.9
Serial Support Client 4.9.10 Trial
Rasberry pi 4.14.79-v7
Traceback (most recent call last):
File "<event:keyPressed>", line 58, in <module>
at Serialio.SerialPortLocal.SerOpenPort(Native Method)
at Serialio.SerialPortLocal.open(SerialPortLocal.java:369)
at Serialio.SerialPortLocal.<init>(SerialPortLocal.java:339)
at com.inductiveautomation.ignition.modules.serial.scripting.SerialScriptModule.openSerialPort(SerialScriptModule.java:193)
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:497)
java.lang.UnsatisfiedLinkError: java.lang.UnsatisfiedLinkError: Serialio.SerialPortLocal.SerOpenPort(LSerialio/SerialConfig;)I
at org.python.core.Py.JavaError(Py.java:495)
at org.python.core.Py.JavaError(Py.java:488)
at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:188)
at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:204)
at org.python.core.PyObject.__call__(PyObject.java:387)
at org.python.core.PyObject.__call__(PyObject.java:391)
at org.python.pycode._pyx4.f$0(<event:keyPressed>:97)
at org.python.pycode._pyx4.call_function(<event:keyPressed>)
at org.python.core.PyTableCode.call(PyTableCode.java:165)
at org.python.core.PyCode.call(PyCode.java:18)
at org.python.core.Py.runCode(Py.java:1275)
at com.inductiveautomation.ignition.common.script.ScriptManager.runCode(ScriptManager.java:636)
at com.inductiveautomation.factorypmi.application.binding.action.ActionAdapter.runActions(ActionAdapter.java:180)
at com.inductiveautomation.factorypmi.application.binding.action.ActionAdapter.invoke(ActionAdapter.java:271)
at com.inductiveautomation.factorypmi.application.binding.action.RelayInvocationHandler.invoke(RelayInvocationHandler.java:57)
at com.sun.proxy.$Proxy21.keyPressed(Unknown Source)
at java.awt.AWTEventMulticaster.keyPressed(AWTEventMulticaster.java:250)
at java.awt.Component.processKeyEvent(Component.java:6493)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2832)
at java.awt.Component.processEvent(Component.java:6312)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4891)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4713)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:806)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1074)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:945)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:771)
at java.awt.Component.dispatchEventImpl(Component.java:4762)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Window.dispatchEventImpl(Window.java:2750)
at java.awt.Component.dispatchEvent(Component.java:4713)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: java.lang.UnsatisfiedLinkError: Serialio.SerialPortLocal.SerOpenPort(LSerialio/SerialConfig;)I
at Serialio.SerialPortLocal.SerOpenPort(Native Method)
at Serialio.SerialPortLocal.open(SerialPortLocal.java:369)
at Serialio.SerialPortLocal.<init>(SerialPortLocal.java:339)
at com.inductiveautomation.ignition.modules.serial.scripting.SerialScriptModule.openSerialPort(SerialScriptModule.java:193)
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:497)
at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:186)
... 48 more
Ignition v7.9.9 (b2018081621)
Java: Oracle Corporation 1.8.0_65
Thanks Kevin. Is there any way to get support for ARM?
Iām guessing that using the pyserial library is also not supported, given that I tried and received an import error indication āNo Java Communications API implementation foundā (itās looking for javax.comm or gnu.io)
And it looks like adding those libraries or anything else like jSerialComm library, for example, would not support client access anywayā¦
I followed the SDK documentation for making Designer/Client modules.
Just wrote a small class to expose the jSerialComm library and added it to the script manager. Not sure how correct it is, but it works just fine ĀÆ\_(ć)_/ĀÆ
If you get the errors but it still works then yes, it was a known/expected issue - the old serial library did its own System.loadLibrary call in a static initializer that would fail and we did our own explicit System.load against the known location for the library.