Applies To:
  • CitectSCADA 5.xx, 6.xx, 7.00
  • CitectHMI 5.xx, 6.xx, 7.00

Summary:
Ocassionally a hardware alarm will appear "General error 0x0004001f" for an IODevice that uses the ABRSLINX driver. The Rockwell API error code "1F" (Defined by the RSLinx API as DTL_E_TOOBIG) corresponds to "Data item greater than the maximum allowed". This is suggesting that the number of points requested by the IOServer from the IODevice is not allowed.

This may also start happening as a result of a V7 upgrade.

How can I correct this?

Notes:

with Driver trace enabled, messages will look similar to this

=> 06ea44fc 24.377 Cmd: 04 CTDRV_READ		,abrslinx250, Port: P3_B, Unit: WTP_PLC\par
| 06ea44fc 24.377 UnitType: 327724 (0x5002c), UnitAddr: 16 (0x10), BitWidth: 1, UnitCount: 1888, RawType: DIGITAL\par
<+06ea44fc 24.377 Cmd: 04 CTDRV_READ ErrDriver 262175 (0x4001f) and took 6ms\par
<+06ea44fc 24.377 UnitType: 327724 (0x5002c), UnitAddr: 16 (0x10), BitWidth: 1, UnitCount: 1888, RawType: DIGITAL\par
<+06ea44fc 24.377 000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\par

with ABRSLINX Driver debugging enabled, messages will look similar to this

2008/08/15-08:55:47.000 DTL_C_DEFINE\par
DTL_E_TOOBIG, Data Item is > Max Allowed Length 0\par
2008/08/15-08:55:47.000 Transmit-4001f $0N44:1,118,RAW,READ,AB:ASA/L:76,1.0.2.24,PLC5250,3 Length 0\par
2008/08/15-08:55:47.015 Transmit $0N44:293,115,RAW,READ,AB:ASA/L:76,1.0.2.24,PLC5250,3 Length 0\par
2008/08/15-08:55:47.015 Transmit $0N44:200,80,RAW,READ,AB:ASA/L:76,1.0.2.24,PLC5250,3 Length 0\par
2008/08/15-08:55:47.436 Receive $0N44:293,115,RAW,READ,AB:ASA/L:76,1.0.2.24,PLC5250,3 Length 230\par

In a recent case, symptoms were digitals not showing the correct values.

 

Solution:
In V6 and below, blocked requests can be generated by the compiler (using the appropriate settings in the protdir.dbf bit_block and max_length fields) and also at runtime by the IOServer and driver (depending on the requests that the IOserver recieves at the same time.

In V7, due to the publish subscribe architecture, all blocking is dynamically determined at run time.

Their is a citect.ini parameter [ABRSLINX]MaxReqSize which can be used to adjust the dynamic blocking size. Its default is 236, reducing this value should resolve the above stated error.

This parameter is only valid with ABRSLINX v1.2.8B1 or later.

Since the MAX_LENGTH specified in the protdir.dbf is 1824 this corresponds to [ABRSLINX]MaxReqSize=228 (which is 1824 / 8)

Setting [ABRSLINX]MaxReqSize=228 should resolve the issue in most cases. It seems that for some PLC types (a known example is PLC5/250) that the default maximum of 236 is too big.

In these cases the issue is more likely to occur in V7 (although still possible to occur in V6) since all blocking is dynamic and hence all blocking is done using the [ABRSLINX]MaxReqSize value rather than the lower MAX_LENGTH value by which most blocking is determined in V6.

Please keep in mind that by reducing the maximum dynamic blocking size you are marginally reducing the communications efficiency to your IODevice. Although there is little choice if you are encountering this error.

Please refer also to the related article KB Q5374 on [ABRSLINX]Block

Keywords:
MaxReqSize, ABRSLINX, 4001F, DTL_E_TOOBIG 

Attachments