Blocking
- Last UpdatedNov 11, 2021
- 2 minute read
Requests for a basic DNP3 poll do not use a blocking (grouping) algorithm as applies to a lot of protocols. Instead, the required points are predefined in the device (as Class 0), and are requested during an integrity poll. The DNPR driver can support requests of up to 2048 bits in one request from Plant SCADA, but this is for contiguous data. The data available in the driver cache will not be contiguous if the predefined points in Class 0 are not contiguous. If any of the points in the requested block is not defined in Class 0, all points in a Plant SCADA request will be flagged as bad quality (#COM).
To avoid this situation, non-digital data is not blocked by default. All requests from Plant SCADA to the driver for non-digital data are for individual points. This does not affect the data acquisition algorithm between the driver and the device, only between Plant SCADA and the driver. Digital types will still be optimized together. A device may have digital types as a non-contiguous list, and may start or end on points not on an 8-bit boundary.
As Plant SCADA will block a minimum of 8 bits for digitals, and enforce an 8-bit boundary, the driver assumes that bits not updated by the polling sequence are irrelevant and not configured as tags by the user. These points will return 0 and NO_ERROR to avoid forcing the valid points in the same DCB into error. The [DNPR]Commissioning Parameter tests for invalid BI points.
Digital Reads are blocked by Plant SCADA to a minimum of 8 bits. A DNP device can configure points in a non continuous fashion, for example, points 0 to 4, then 10 to 14, and so on. Therefore, non-digital Plant SCADA requests are not blocked so as to avoid the situation where a blocked request may also include a point in cache that is not part of the pre-defined DNP3 group. This is why the default protdir.dbf entries are 8 & 8 bits.
If you know your RTU devices have continuous point allocations, then the compile time value can be increased. For example, if 32 digitals are configured then the value could be set to 32 & 32 in protdir.dbf.
Runtime blocking is controlled by the [DNPR]Block=x, the [DNPR]IsItemisedRequest=y parameter, and the [DNPR]MaxBits=z parameters. This allows you to block together several read requests in the IOServer.
Block = MaxBits / 8, IsItemisedRequest=0
Set the runtime values at least equal the compile time settings. They can however be larger than compile time settings.
If you wish to remove any residual block errors, then you can use the [DNPR]IgnoreWarnIfOneOK parameter. This should be done only after you are happy that all points are configured correctly.