I was using freeopcua to loop through all the tags and get the values I needed. I had another apps that would subscribe to one tag from each udt, they all fail trying to traverse the tag tree now. We know we've overloaded the server, severely. I'm doing damage control and rewrote all the apps, except one, to go from the historian data. This one though gets all tags to dump to a snapshot database used for analytics on an hourly basis. I just need the current value from each tag to insert into that database. This is all in linux of course. Any ideas?Thx
There's the system.opc.browse
function, but it has lots of caveats.. @Kevin.Herron can probably elaborate as he commented on my posts back in the day re this
Can I run that outside of ignition, or is there an interface to run system commands from the command line in linux? This will be automated.Thx
No. From outside, you will need to make an OPC UA connection.
Otherwise, to access internal APIs from outside, the common approach is to create an external API with the WebDev module.
I kind of thought I would be screwed. Do you think the db load will be too much? We have 249573 active tags and we'll need to do single select for each one as we need to go from the historian.Thx
Recursively browsing the address space from an external client shouldn’t overload the server unless you’ve written your client such that the browse parallelism grows unbounded.
The server can't maintain the connection and cuts it. I've tried an oversized server, which got me through a few more and hacked the client timeout to basically be infinite, again helped to get through a few more, the server just can't handle that much work. We are working towards scaling out, but would like the services going again before that is finalized. We tried buying softing's opc library but will get a refund, they don't seem to know how their library works and have terrible support outside of europe.Thx
Prove it? Show me a Wireshark capture of your client browsing, start to finish or interruption.
what settings on it
The OPC connection has to be made with security disabled so Wireshark can decode it.
Think it already does that. What ports?
You should already know that, it’s whatever the endpoint you are connecting to is configured for.
figured, it's opc:tcp, I'm working on setting up a capture now
do you not want any filtering, just all the raw packets on the interface?
You can cut the capture size down by filtering to just the hosts and port involved. No other filter necessary.
all on the same host, using port 4096
sudo tshark -f "port 4096"
Running as user "root" and group "root". This could be dangerous.
Capturing on 'eth0'
^C0 packets captured
I don't run wireshark as much as I used to, any thoughts?
If this is all running on the same host, you probably need to capture on localhost instead of eth0.
sudo tshark -D
lists interfaces. Find loopback.
Then tshark -f "port 4096" -i N -w browsetraffic.pcap
(where "N" is whatever number the loopback interface was)
On linux the -i
option takes a network device name. So, -i lo
should work.
out.txt.zip (6.0 MB)
Got it