Profibus DP Diagnostics DIAGMSG and the ROWS field

Hi All,

I have some Profibus DP I/O devices that can have some varying amount of I/O cards (slots) added like ET200s, Weidmuller u-remote I/O, and Numatics G3 valve modules for example and I'm working on adding logic for reading in the extended diagnostics and putting the extended channel diagnostics in context with the signal. 

I found a few older posts here about using the Profibus DIAGMSG parameter with an external reference /&device/DIAGMSG in a module in DeltaV.   That works ok as long as you can keep track of the number of bytes in the extended diagnostics beyond the first 6 bytes. Of course, depending on devices, these extended diagnostics arrays can even change in size online depending on if there is an error or not on a particular device's channel.  So, keeping track of the extended diagnostics array size would be very helpful.

Has anyone had success with using the DIAGMSG.ROWs field in a calc block?  Books Online only briefly mentions the ROWS field but that's about it.  WatchIt seems to be only way I can use the .ROWS field successfully to return the correct number of extended diagnostic bytes, by typing in the ModuleName/ExternalReference.ROWS. 

Is there a syntax I'm missing for a calc block or an external reference, or is it out of reach of a module?  Anyone know of another clever way to read this ROWS field somewhere?  BTW, I'm working on v13.3.1.

Thanks in advance for any advice,


4 Replies

  • Maybe you can use the Diagnostic Channel property on the Profibus signals for this instead of using the DIAGMSG? For ET200 there is a KBA describing this.
  • In reply to István Orbán:

    Thanks Istvan,

    Are you referring to the check box for for the "Use diagnostic channel" at the signal level? As an aside, that would also be interesting to figure out at some point. Someone can correct me if I'm wrong, but looking at various GSD files, it appears like various profibus devices don't support the diagnostic channel, given that some GSDs have references to the diagnostic channels and others don't.

    Gosh, may I ask, where did you find that KBA? The internet only turns up the Emerson Exchange forum for that KBA number for the ET200S and the Siemens sites don't return anything.

    However, it would still be good to know if that ROWS field could work or if there was another way common to all profibus devices connected to DeltaV to know how to determine the extended diagnostic array size at any given time.

    Numatics G3 profibus modules give enough clues that there is extended diagnostics by looking at Station Status 1 (byte 1.3 of diagnostics). The size of the array is conveniently placed in the first byte in the extended diagnostics (byte 7 of diagnostics) and has a correct value. This seems to follow this profibus online manual:

    However some devices have extended diagnostic bytes present with Station Status 1 reading 0x00. This 0x00 would seem to indicate an all clear at first glance. In these cases, byte 7 of the diagnostic (first byte of the extended diagnostics) shows some number much larger than the current diagnostic byte array size. The ROWS field would just be way easier to use if it was possible.
  • In reply to JessWilson:

    AUS1-131-000601153757 is an Emerson KBA from the year 2000. You can find it on Guardian.
  • Thanks Istvan!

    I found it, and I also found NK-1400-0248 recently updated for v14.3 where it says there is an incident that Profibus Device Data Array Dimensions (aka .ROWS) can't be read by the CALC Expression. It describes the problem exactly; I can read the .ROWs field in WatchIt, but it can't be parsed in a CALC block.  So, I guess the .ROWS field is out of reach of the module for now.