Modbus TCP - getting large word array for a well dyno card with it's 120 block size limit?

We are working on the most efficient way to get all the registers needed for a well dynamometer card through a Modbus TCP. These give us the correct coordinates needed to draw a dynagraph. The problem is that we can only get a max of 120 registers at a time which is a limitation on the Modbus TCP. I can do many requests to the register number and specifying the block size (ex. 32669[120]) in different tags and do an expression tag to put these together, but since we have many I want to limit the amount of requests and load on our radio communications to get these.

The number of total registers for dyno cards (surface, pump, etc…) start at 209 and up to 2000 something for a stored five card, depending on which kind of card. On our Modbus Serial devices, this is not a limitation and actually have card settings and tags built in to address the tag directly instead of pointing to registers.

If it matters, we are using an opc server (kepware based). We have more Modbus TCP than Serial, and will be using TCP in all future wells. Any recommendations would be appreciated, thanks.

I don’t know that this would be any better. (If I understand correctly, it’s the “Bandwidth” that is being used by the radios that you want to keep manageable!)

I don’t deal with “Dynamometers”!

I do use a Private Cellular Network for my radios and I have to watch the bandwidth being consumed.

You might look into using MQTT and specifically (Sparkplug B) format. This allows for a very controlled data stream.

I work with Modbus/Tcp everyday and I could have used that protocol also. But for our needs MQTT worked much more efficient.

Something you may want to look into. Contact Cirrus Link they know and understand MQTT better than anybody.

This is just a thought!!

Thanks for the suggestions, something we may look into later for data streaming. We do have a robust point to point radio network that easily handles this, but we want make sure to reduce traffic where we can.

We are more concerned at this point about getting the correct card data from the Modbus TCP in as few requests possible. With Modbus Serial, there are built in addresses to access dyno cards and could be done in one request, whereas Modbus TCP, the block size is limited to 120 in OPC and for example, a typical surface card is 407 in length.

If Modbus TCP was suppose to be the future and superior to Serial, I wonder why the limitation, so I thought I wasn’t looking in the right places to find out how to do this, but still haven’t found an answer.

Can you elaborate on this? Modbus RTU over serial is also limited in data size, so maybe you were previously using something else?

Using TOP Server (Kepware based), it already has tags built in to give us various card types (last stroke, last shutdown, start, surface, pump-up, etc…) The picture attached shows the card settings when connecting to a Modbus Serial. Is it mapping things to get those? When connecting to Modbus TCP, we can connect to the addresses at the same start locations, but only get a max of 120 length at a time. I would have to do this many times, and have a expression tag put them together. Hopefully that makes some more sense.

I don’t know anything about the driver you’re using, but if it’s Modbus RTU, then are you sure it’s not just making multiple requests behind the scenes based on the length?

Either way, you should probably be talking to Kepware support about this.