Remote OPC

I have a requirement to connect remotely to a Kepware OPC Server. We have the latest version of Kepware Communications Server V5.7.84.0. We are running Ignition 7.3.2 (b533).

( The two computers in question for testing purposes have the Firewalls disabled and each one is able to ping the other with a straight through Ethernet connection between the two. One is a 64bit Windows 7 system the other 32 bit Windows XP ).

I am able to establish a local connection on each computer to a local Kepware Server. The remote connection is an issue and results is the following Console message;

8:57:30 AM Common.BasicExecutionEngine One-shot task com.inductiveautomation.xopc.client.sropc.UAServer$3@4d9363c threw uncaught exception.

java.lang.NullPointerException
at com.inductiveautomation.xopc.client.sropc.ConnectionUtil.getEndpoint(ConnectionUtil.java:76)
at com.inductiveautomation.xopc.client.sropc.ConnectionManager.connect(ConnectionManager.java:92)
at com.inductiveautomation.xopc.client.sropc.UAServer.setUp(UAServer.java:120)
at com.inductiveautomation.xopc.client.sropc.UAServer.access$200(UAServer.java:52)
at com.inductiveautomation.xopc.client.sropc.UAServer$3.run(UAServer.java:208)
at com.inductiveautomation.ignition.common.execution.impl.BasicExecutionEngine$ThrowableCatchingRunnable.run(BasicExecutionEngine.java:526)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)

I believe I have a correct endpoint setup on the Kepware end;

opc.tcp://192.168.0.199:49320 Basic 128Rsa(S,SE), Basic256(S,SE)

And my Ignition OPC-UA Connection parameters are;

Host: 192.168.0.199
Port: 49320
Security Policy: Basic128Rsa15
MessageSecurityMode: SignAndEncrypt

Everything else is blank.

Like I said before I am able to establish a local connection by setting the Host: localhost but once I try to connect on the remote OPC Server it fails.

I’m hoping someone has a suggestion of what I might need to look at as I am running out of ideas.

Can you go to the Console “Levels” tab, use the search to find a logger for “ConnectionUtil”, then turn that to DEBUG.

After a couple connection attempts go to the log viewer and export the logs and attach the logs.bin.gz file here or email it to support.

Log File Attached…
logs.bin.gz (431 KB)

I see the problem… there’s a totally invalid endpoint coming back from Kepware along with all the other valid endpoints that is causing a NPE…

I’ll have to write some code to handle this case and it’ll make it into the next release. In the meantime, is there anything suspicious looking in your Kepware UA configuration? I’ve never seen this coming from Kepware before.

The UA Configuration on the Kepware side appears trivial. I am not seeing many options but I will poke around. I may try to revert the Kepware back a couple of revisions to see if I get different results. Not sure what I’m going to do if this does not work. Thx.

I can always push out a beta version of the OPC-UA module that has a fix for the NPE if it comes to that.

I did manage to get a “remote” connection to the Kepware Sever by only “enabling” one endpoint in the Kepware OPC-UA configuration. I disabled the other local endpoints and communications from Ignition cleared up. Maybe I don’t understand endpoints but I thought that multiple ones could co exist. I even tried differentiating them with different port numbers but it still broke the Ignition comms. Once I reverted back to 1 endpoint the comms started working again. FYI.

Your understanding is correct. The problem is that one of those enabled endpoints on Kepware is coming into Ignition in an invalid/malformed format. By disabling the others and enabling just the one you’ve stopped that from happening.