Modbus tcp communication to prosoft

Hello DeltaV community,

I need some help please. I am having some issues setting up a Modbus tcp interface to a prosoft on an controllogix rack, using a vim2 card on an Sx Controller. I am able to see that the VIM is communicating successfully with the prosoft (VIMnet configuration is correct and device is showing to be connected & online). But the data I am reading into my registers is gibberish. Not sure if it is a setting on the virtual serial card or a register is off, etc. 

Following is configuration on the prosoft end for the analog read and the analog write data points-

1. Registers on Prosoft for 'read' datapoint- x000 & 0001;  Data Type- Real;  Modbus Function- FC 3 (read holding registers);  2 16-bit registers

Note- this is a parameter that DeltaV is reading over Modbus and it is 32-bit floating point

2. Register on Prosoft for 'write' datapont- x2000 & x2001;  Data Type- Real;  Modbus Function- FC 16 (write multiple holding registers);  2 16-bit registers

Note- This is a setpoint that DeltaV is sending over Modbus and it is a 32-bit floating ponit

Following is configuration I used for my datasets on the deltav device on serial card -

1. dataset 1- Input Data; DeltaV Data Type- Floating point with Status; Device Data Type- 3; Data Start Address - 0; Number of values- 1

2. dataset 2- Output Data; DeltaV Data Type- Floating point with Status; Device Data Type- 3; Data Start Address - 2000; Number of values- 1

I am reading data, but it doesn't match the values on the other end. Not sure if my registers are offset or if my datatype is wrong or what??

Thanks in advance!

  • Usually gibberish reads with floating points over a VIM means you need to set one of the Special Data values in the DeltaV dataset configuration. Usually it is setting special data 1 to adjust the byte orders. There is information in the VIMNet explorer help file: Modbus TCP > DeltaV Dataset Configuration > Dataset Special Data Tab.
    You could also be offset by a register, but with a start address of 0 seems unlikely, if setting the special data doesn't work try shifting your start address by 1.
  • When reading floating point in DeltaV by default you need 2 registers per value, so number of values should be 2.
    Or you can use 32 bit registers in the VIM and then you need only 1 value, but in that case you have to set special data 2 to 1.
  • In reply to Pieter Degier:

    It was indeed the offset or the start address :) Thanks so much!