8.1 Modbus concurrent requests

Just noticed this in the 8.1 nightly build modbus driver options:


Does this mean that if I have a modbus device that, every 5 seconds, I poll for HRs 1-120, 121-140 and write to 3 tags - it will do the 1-120 poll, wait for a response, then do the 121-140 poll, etc? As in it sets up a queue and pops the requests off one at a time as the responses come in?

Yeah, pretty much. The driver “optimizes” subscribed tags into a set of requests. These requests basically get continually queued, dequeued, executed, queued again, along with any dynamic requests from read or writes that come in, and executed 1 (or now, optionally, N) at a time by a request executor.

1 has always been the default behavior for Modbus but now you can try 2+ if think your device won’t fall over.

Ah awesome, that’s a handy feature!

Going the other way slightly, I have an important device I have to integrate with on every project that freaks out sometimes. The manufacturer says that they support only one request every 100ms, but I don’t think I can support that suggestion at the moment (since if I set my OPC tags to 1000ms, they might still all get executed in the first 100ms). Is there any possibility that Ignition could have a rate limit to prevent more than one request from being sent every x time unit for a given device?

Technically possible, yes… but would have to be implemented per-driver and might not be trivial to do, so not sure if/when it might be done.

I’m not sure about a reliable workaround. Maybe controlling polling by using only explicit reads from a gateway timer script or something… You’d have to be aware of how the data you’re requesting gets grouped up into requests, though.

Kepware’s driver might have a configuration option for this? I think it’s something like “inter-request delay”.

I think it’s most likely not a real requirement and is actually them saying that they can only handle that many on average due to CPU utilisation, but if it does turn out to be real I’ll touch base to chat a bit more about the manual tag controlling suggestion you had. It sounds like I need to understand a bit more of what’s going on in the background to do that correctly.