Difference between revisions of "Modbus TCP Client Read Map Edit"

From Control Solutions IoTServer Documentation
Jump to navigation Jump to search
Line 71: Line 71:
 
'''LittleEnd''' – Used when RegSize is greater than 1 to indicate what order the registers should be interpreted in. Enter “Y” to indicate that the lowest numbered register contains the least significant portion of data. Enter “N” or omit to indicate that the lowest numbered register contains the most significant portion of data. Although Modbus protocol itself is not inherently “Little Endian”, many devices operate that way due to Intel processors being inherently Little Endian. Modbus protocol does not stipulate what the register order should be when multiple registers are treated as a single data entity. Therefore, the user is required to pay attention to this.  
 
'''LittleEnd''' – Used when RegSize is greater than 1 to indicate what order the registers should be interpreted in. Enter “Y” to indicate that the lowest numbered register contains the least significant portion of data. Enter “N” or omit to indicate that the lowest numbered register contains the most significant portion of data. Although Modbus protocol itself is not inherently “Little Endian”, many devices operate that way due to Intel processors being inherently Little Endian. Modbus protocol does not stipulate what the register order should be when multiple registers are treated as a single data entity. Therefore, the user is required to pay attention to this.  
  
[[File:Modbus TCP read map edit 3.jpg]]
+
[[File:Modbus read map edit 3.jpg]]
  
 
'''Device''' – (REQUIRED if TCP) – Device number from the TCP Device list that should be accessed for this read attempt on a TCP network.
 
'''Device''' – (REQUIRED if TCP) – Device number from the TCP Device list that should be accessed for this read attempt on a TCP network.
Line 77: Line 77:
 
'''Unit''' – (TCP only) – Unit number to be included in the TCP request, will default to 1 if not given or is set to zero.
 
'''Unit''' – (TCP only) – Unit number to be included in the TCP request, will default to 1 if not given or is set to zero.
  
[[File:Modbus TCP read map edit 4.jpg]]  
+
[[File:Modbus read map edit 4.jpg]]  
  
 
'''Mask''' – A bit mask given as a 4-digit or 8-digit hexadecimal value, if non-zero (Mask operation skipped if mask value is zero, or register format is not Int). When the data of interest is a single bit, or bit field less than the full register width, the Mask is used. When the Modbus register is read, its data is bit-wise ANDed with the Mask, then right justified so that the least significant mask bit becomes the least significant data bit. The result is then placed in the local data object selected by the read map.  
 
'''Mask''' – A bit mask given as a 4-digit or 8-digit hexadecimal value, if non-zero (Mask operation skipped if mask value is zero, or register format is not Int). When the data of interest is a single bit, or bit field less than the full register width, the Mask is used. When the Modbus register is read, its data is bit-wise ANDed with the Mask, then right justified so that the least significant mask bit becomes the least significant data bit. The result is then placed in the local data object selected by the read map.  
  
[[File:Modbus TCP read map edit 5.jpg]]
+
[[File:Modbus read map edit 5.jpg]]
  
 
'''Scale''' – Register content is multiplied by this value, if non-zero, before being placed into the local object.
 
'''Scale''' – Register content is multiplied by this value, if non-zero, before being placed into the local object.
Line 89: Line 89:
 
NOTE: The order of operation is as follows: (1) read Modbus register; (2) apply mask if applicable; (3) apply scale if non-zero; (4) apply offset. Result is then placed in local object.  
 
NOTE: The order of operation is as follows: (1) read Modbus register; (2) apply mask if applicable; (3) apply scale if non-zero; (4) apply offset. Result is then placed in local object.  
  
[[File:Modbus TCP read map edit 6.jpg]]
+
[[File:Modbus read map edit 6.jpg]]
  
 
'''PollTime''' – Poll time in seconds (can be fractional). The sets the rate at which the remote Modbus register will be read. This poll time is not guaranteed to be met. Polling is done in round-robin fashion. In a very busy system, more than this time may expire before the next poll. If less than this time has expired, then the system will wait this amount of time until polling again.
 
'''PollTime''' – Poll time in seconds (can be fractional). The sets the rate at which the remote Modbus register will be read. This poll time is not guaranteed to be met. Polling is done in round-robin fashion. In a very busy system, more than this time may expire before the next poll. If less than this time has expired, then the system will wait this amount of time until polling again.
  
[[File:Modbus TCP read map edit 7.jpg]]
+
[[File:Modbus read map edit 7.jpg]]
  
 
'''DestObj''' – (REQUIRED) – Local object number that the result of the Modbus read operation should be placed into.  
 
'''DestObj''' – (REQUIRED) – Local object number that the result of the Modbus read operation should be placed into.  
  
[[File:Modbus TCP read map edit 8.jpg]]
+
[[File:Modbus read map edit 8.jpg]]
  
 
'''DefValue''' – Provides the default value that the local object should be set to in the event the FailCount is exceeded.
 
'''DefValue''' – Provides the default value that the local object should be set to in the event the FailCount is exceeded.
Line 103: Line 103:
 
'''FailCount''' – Optional, provides a count of read failures, if non-zero, that can occur before the local object will be set to the default value given in this map. If zero, the default value will never be applied. If 1, then the default value will be applied upon the first failure (probably not recommended), and so on. The count is reset by a successful read.
 
'''FailCount''' – Optional, provides a count of read failures, if non-zero, that can occur before the local object will be set to the default value given in this map. If zero, the default value will never be applied. If 1, then the default value will be applied upon the first failure (probably not recommended), and so on. The count is reset by a successful read.
  
[[File:Modbus TCP read map edit 9.jpg]]
+
[[File:Modbus read map edit 9.jpg]]
  
 
'''IndexObj''' – Optional, allows for selectively enabling this read operation. If an index object (local object number) is given, and its value matches the IndexVal value, then this read operation will take place. If an IndexObj is given but the local object’s value does not match the IndexVal, then this read operation will be skipped.
 
'''IndexObj''' – Optional, allows for selectively enabling this read operation. If an index object (local object number) is given, and its value matches the IndexVal value, then this read operation will take place. If an IndexObj is given but the local object’s value does not match the IndexVal, then this read operation will be skipped.
  
 
'''IndexVal''' – Optional, used in conjunction with IndexObj (see note above).
 
'''IndexVal''' – Optional, used in conjunction with IndexObj (see note above).

Revision as of 14:30, 1 May 2019

Modbus TCP Client Read Maps are where you configure this device to query other Modbus TCP devices for data, and store that data in local data objects. This page is where you enter the various parameters to make that happen.

Modbus TCP read map edit 1.jpg

Map Number – Used as a reference in the map list for ordering the maps. Polling is done in round robin fashion in the order of map number.


The appearance of the following line will vary depending on your user settings. You have the option of displaying Modbus registers as raw address (0-indexed), register number (1-indexed), or Modicon format (e.g. 40001 style).

The following variations all refer to exactly the same register:

Modbus read map edit 2a.jpg Modbus read map edit 2a-addr.jpg Modbus read map edit 2a-modicon.jpg

Click the Check to validate a Modicon number.


The options available on this line will vary depending on selections made. The following are a few examples.

Modbus read map edit 2a.jpg Modbus read map edit 2b.jpg Modbus read map edit 2c.jpg Modbus read map edit 2d.jpg Modbus read map edit 2e.jpg

Register Type – Modbus register type from following table, will default to “HOLD” if omitted. The labels must be entered exactly as depicted in the table.

Label Modbus Register type
“none” No register defined
“Coil” Coil
“Disc” Discrete Input
“Input” Input Register
“Hold” Holding Register

Register Number – (NEEDS UPDATE) Raw 0-indexed address of the register to be read. IMPORTANT: If manufacturer’s documentation indicates register 40001, DO NOT enter 40001 for RegAddr. This number is short-hand for holding register 1, and its address is zero. Therefore, if you see 40001, select “Hold” for RegType, and enter 0 for RegAddr.

Modicon – (In lieu of RegType, RegAddr) – If one wishes to use Modicon notation, i.e., enter 40001 when the manufacturer’s documentation says 40001, then OMIT RegType AND RegAddr, and use the Modicon label instead. Both standard and extended Modicon are recognized. However, you cannot use both Modicon and RegType/RegAddr in the same section. When Modicon is used, the RegType and RegAddr columns will be generated internally based on the Modicon number given. Modicon is only available for Import. On export, RegType and RegAddr will be used (Modicon notation is not recognized by the Modbus protocol standard even though widely used as a defacto stanard).

RegFormat – Format of the data contained in the Modbus register(s), not used by the protocol, but used by the gateway to interpret what the raw increments of 1 or 16 bits should mean. Select format from the following table.

Format Label Format description
“None” No format defined
“Bit” Single bit, used ONLY for RegType Coil or Disc
“Int” Integer (size and whether signed are defined by labels below)
“Real” Floating point (single or double precision)
“Char” Character string with 2 ASCII characters per register
“Mod10” Mod10 format, can be 2, 3, or 4-register, specific to Schneider Electric meters

RegSize – Register size refers to the number of consecutive input or holding registers should be read for a value greater than 16 bits. A 16-bit value would have size of 1, a 32-bit value would have size of 2, and a 64-bit value would have size of 4. Single precision Real (32-bit IEEE 754 floating point) would be size 2, and double precision Real (64-bit IEEE 754 floating point) would be size 4. If format is Mod10, then valid sizes are 2, 3, or 4 – check manufacturer’s documentation if Mod10 is noted. Register “size” for a character string will be character count divided by 2 (plus 1 of string length is an odd number). RegSize is not used for Coil or Disc types.

Unsigned – Indicate “Y” if unsigned, or “N” if signed. Defaults to signed integer. Has no effect on RegFormat other than Int.

Modbus read map edit 3a.jpg

LittleEnd – Used when RegSize is greater than 1 to indicate what order the registers should be interpreted in. Enter “Y” to indicate that the lowest numbered register contains the least significant portion of data. Enter “N” or omit to indicate that the lowest numbered register contains the most significant portion of data. Although Modbus protocol itself is not inherently “Little Endian”, many devices operate that way due to Intel processors being inherently Little Endian. Modbus protocol does not stipulate what the register order should be when multiple registers are treated as a single data entity. Therefore, the user is required to pay attention to this.

File:Modbus read map edit 3.jpg

Device – (REQUIRED if TCP) – Device number from the TCP Device list that should be accessed for this read attempt on a TCP network.

Unit – (TCP only) – Unit number to be included in the TCP request, will default to 1 if not given or is set to zero.

Modbus read map edit 4.jpg

Mask – A bit mask given as a 4-digit or 8-digit hexadecimal value, if non-zero (Mask operation skipped if mask value is zero, or register format is not Int). When the data of interest is a single bit, or bit field less than the full register width, the Mask is used. When the Modbus register is read, its data is bit-wise ANDed with the Mask, then right justified so that the least significant mask bit becomes the least significant data bit. The result is then placed in the local data object selected by the read map.

Modbus read map edit 5.jpg

Scale – Register content is multiplied by this value, if non-zero, before being placed into the local object.

Offset – This value is added to the register content (after being multiplied by scale) before being placed into the local object.

NOTE: The order of operation is as follows: (1) read Modbus register; (2) apply mask if applicable; (3) apply scale if non-zero; (4) apply offset. Result is then placed in local object.

Modbus read map edit 6.jpg

PollTime – Poll time in seconds (can be fractional). The sets the rate at which the remote Modbus register will be read. This poll time is not guaranteed to be met. Polling is done in round-robin fashion. In a very busy system, more than this time may expire before the next poll. If less than this time has expired, then the system will wait this amount of time until polling again.

Modbus read map edit 7.jpg

DestObj – (REQUIRED) – Local object number that the result of the Modbus read operation should be placed into.

Modbus read map edit 8.jpg

DefValue – Provides the default value that the local object should be set to in the event the FailCount is exceeded.

FailCount – Optional, provides a count of read failures, if non-zero, that can occur before the local object will be set to the default value given in this map. If zero, the default value will never be applied. If 1, then the default value will be applied upon the first failure (probably not recommended), and so on. The count is reset by a successful read.

Modbus read map edit 9.jpg

IndexObj – Optional, allows for selectively enabling this read operation. If an index object (local object number) is given, and its value matches the IndexVal value, then this read operation will take place. If an IndexObj is given but the local object’s value does not match the IndexVal, then this read operation will be skipped.

IndexVal – Optional, used in conjunction with IndexObj (see note above).