mikakaraila / node-red-contrib-opcua

A Node-RED node to communicate OPC UA. Uses node-opcua library.
Other
214 stars 197 forks source link

OpcUaClientNode: StatusCode: Good#InfoTypeDataValue|Overflow (0x00000480) #513

Closed firefox7518 closed 1 year ago

firefox7518 commented 1 year ago

I want to use Node-Red to read out a heating system of our town and visualize the data. I'm using the OpcUA-Item node to define the item to call and then use the OpcUa-Client with action "Subscribe". This works fine for only some fields. As soon as I add more items to the client node (like 36 in my case) I suddenly see the following warning in Node-Red: OpcUaClientNode: StatusCode: Good#InfoTypeDataValue|Overflow (0x00000480)

I therefore tried to split up the items to multiple client nodes subscribing but this also did not help. I also tried to rule out any wrong Item nodes but it always happens suddenly with more fields added no matter what I do.

Is there a limit somewhere for the amount of data coming back? The data coming back looks like this: {"topic":"ns=1;i=1005856","_msgid":"8c216f0c.e757e","datatype":"Double","browseName":"Kessel Total Energy","statusCode":{"value":0},"serverTimestamp":"2023-01-20T12:50:02.677Z","serverPicoseconds":972000000,"sourceTimestamp":"2023-01-20T12:49:59.389Z","sourcePicoseconds":560000000,"}

As the error indicates overflow I guess it can be too much data? But why does it then still happen when I split up the 36 items to 3 subscribe nodes? Does it handle the data as a whole or per subscription?

It is really annoying as it floods now my debug log and I have to turn off the subscription in order to work on other stuff in node-red. The weird thing is the data seems to go through to my logging instance fine but it still always throws this error message.

mikakaraila commented 1 year ago

No the variable contain measurement value and it has own overflow bit.

// InfoBits         0:9    Additional information bits that qualify the StatusCode.
//                         The structure of these bits depends on the Info Type field.
//
// LimitBits        8:9    The limit bits associated with the data value. The limits bits have the
//                         following meanings:
//                         Limit     Bits   Description
//                         None      00     The value is free to change.
//                         Low       01     The value is at the lower limit for the data source.
//                         High      10     The value is at the higher limit for the data source.
//                         Constant  11     The value is constant and cannot change.
LimitLow: 0x1 << 8,
LimitHigh: 0x2 << 8,
LimitConstant: 0x3 << 8,

As actual StatusCode is Good you should handle this with the function node, because it depends on you how your application wants to handle situation.

mikakaraila commented 1 year ago

You can do it with the node-opcua StatusCode function:

hasOverflowBit()

or other bits with StatusCode.value.checkBit(extraStatusCodeBits.LimitLow)

firefox7518 commented 1 year ago

Thanks for your answers

I'm really new in that OPCUA stuff so I really do not understand what you try to explain me? StatusCode is Good so everything is ok? Wo why is it flooding my debug section in node-red if it is ok? How can I deactivate this then?

I wrote a function to pull out the data I need, mostly temp and kw value of type boolean, double and int32. So I only use the value of the msg. So I do not understand what die Overflow message is good for?

firefox7518 commented 1 year ago

I have inject node going to item node and from there to client node which is setup as subscription. This error message shows up before it even reaches the function node as the OPC UA Client Node is throwing this into the debug node. So I see no way how I can handle that with a function node?!?

mikakaraila commented 1 year ago

From the node-opcua source code I found this: /**

So server cannot handle so many monitored items. You should change parameters that server queue will not overflow.

firefox7518 commented 1 year ago

It's a Loytec Lynx-215 I do not see anywhere parameters to setup for the UPC DA Server. That is sad and annoying but thanks for your answers.

mikakaraila commented 1 year ago

OPC DA is Windows specific DCOM based implementation, you need OPC UA Gateway to access it with OPC UA.

mikakaraila commented 1 year ago

You can try reading if subscription will got queue overflow.