...
- Byte mode - allows working with devices that implement the registers as 1-byte variables (in contrast with Modbus standard in which the register value is 2 bytes).
- Variable mode - allows working with devices that implement the registers with different sizes than standard 2 bytes. It was implemented because of support of the flowmeter FloBoss 103 made by Fisher Controls International (at this time a part of Emerson Process Management): 1-byte variables, 4-byte unsigned/signed integers, text strings of length 10,12,20,40 characters, a 6-byte time stamp, and other.
Note: this mode enables work with devices implementing the so-called Enron Modbus or Daniel Modbus. - Passive (scanning) mode allows to work in eavesdropping mode. This applies especially to serial communication when the communication port of the device is already used to communicate with another Master device. Due to the nature of the Modbus protocol, it is necessary to receive both requests and responses in this mode.
...
Parameter | Meaning | Unit | Default value | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
| Maximum count of request retries. If no response returns after a request has been sent, the station's status will change to a communication error. | - | 2 | |||||||||
| Timeout before resending a request if no response has been received. | s | 0.1 | |||||||||
| The delay after sending the request and before reading the response. | s | 0.1 | |||||||||
| The delay between the response readings. | s | 0.1 | |||||||||
| The maximum number of retries of the response reading. | - | 20 | |||||||||
| "Start silent interval" before the beginning of the transmission in RTU mode. | ms | 50 | |||||||||
| "Stop silent interval" after ending of the transmission in RTU mode. | ms | 50 | |||||||||
| After writing to the I/O tag, the reading immediately follows. By setting the parameter to the NO value, it is possible to reduce the load on communications (especially serial ones) with a large number of writes. | YES/NO | YES | |||||||||
| Byte order in Little-endian mode for 4-byte variables. The individual options indicate in which bytes (1-lowest, 4-highest) the individual bytes from the communication will go:
| - | 2143 | |||||||||
| Special byte mode of transmission in which the values of registers have a length of 1 byte and not 2 bytes as it is defined in Modbus protocol specification. | YES/NO | NO | |||||||||
| Special variable mode of transmission in which the values of registers have variable lengths. The setting of Variable mode: Note 1: Variable and byte modes are incompatible and only one of them can be enabled. | OFF Little endian Big endian | OFF | |||||||||
| Logging of detailed debug information about communication in the line log. | YES/NO | NO | |||||||||
| Protocol mode: RTU or ASCII. Note: In the case of "MODBUS over TCP/IP", the parameter value is ignored and Protocol Mode=RTU is used. | RTU ASCII | RTU | |||||||||
| Sets an address model of MODBUS protocol: MODBUS PDU data are addressed from 0 up to 65535. MODBUS data Model data are addressed from 1 up to 65536. Note: MODBUS PDU is a default value. If the MODBUS data Model is set, the object with the address X is addressed as X-1 in the MODBUS PDU. After you change this parameter, a restart of the respective communication process was required in the past (KOM binaries older than May 27, 2021). | MODBUS PDU MODBUS data Model | MODBUS PDU | |||||||||
| Select a variant of the protocol in case of TCP/IP communication: "MODBUS TCP" is a variant of communication without control checksum. Safeguarding is done by the underlying TCP protocol. "MODBUS over TCP" is a variant where a payload is MODBUS RTU data containing a checksum. | "MODBUS TCP" "MODBUS over TCP" | "MODBUS TCP" | |||||||||
| Maximum count of registers that are read by one request. | - | 100 | |||||||||
| Maximum count of bytes that are required by one request (only in "Byte mode"). | - | 100 | |||||||||
| If a value of the integer type (Holding Registers, Input Registers) is assigned to an I/O tag of the Di or Dout type, this is done by comparing the read value with zero. If the value is zero, the value of the I/O tag is False, otherwise True. The Bool Mask parameter allows specific bits to be filtered out before the comparison is made, based on a bitmask specified as a hexadecimal number (the leftmost byte is the highest). The bitmask FF FF FF FF means that all bits are considered (for 1- and 2-register integer addresses). | - | FF FF FF FF | |||||||||
| This parameter is used to avoid reading the values from addresses that are not configured. Description and example: | YES/NO | NO | See an example of such communication: | YES/NO | NO | ||||||
| If this parameter is set to YES, then an extra check is performed when receiving a response to a read request: the length of received data is checked whether it matches the number of registers in a read request:
Kotva | | crl | crl | Check Receive LengthIf this parameter is set to YES, then an extra check is performed when receiving a response to a read request: the length of received data is checked whether it matches the number of registers in a read request:YES/NO | NO | ||||||
| If the parameter is set to YES, then a single request (which contains the total number of registers) is used. It is necessary that the I/O tags are defined for all addresses 0..N. | YES/NO | NO | |||||||||
| On the TCP/IP-TCP line, immediately after the connection is established, it is possible to write a specific value to the selected address (TCP Password Address) using the selected function (TCP Password Function). In this way, the ComAp control unit enables the authorized Modbus client to be authenticated. The value is entered in hexadecimal in the order of the bytes as they will be transmitted (e.g. "01 0A BC D0". If an odd number of bytes is entered, a byte with the value 0 will be added at the end. Setting the parameter to an empty value causes the write to not be performed after the connection is established. | - | ||||||||||
| Address for writing the password (TCP Write Password) on the TCP/IP-TCP line. If the password is longer than 2 bytes, it is the address of the first register. If the password has e.g. 6 bytes, written as 3 registers from the specified address. | - | 0 | |||||||||
| The write function for writing the password (TCP Write Password) on the TCP/IP-TCP line. | 6 16 | 6 |
...
- 1.10 - the function Read Coils reads the binary status value with address 10.
- 1.10, 4 - the function Read Coils reads the binary status values with addresses 10-13 to the Destination Column.
- 3.1 - a signed 16-bit number, it is read by the function Read Holding Registers from the address 1 (it can be also in the form I3.1).
- U3.1 - an unsigned 16-bit number that is read by the function Read Holding Registers from address 1.
- I3-6.1000 - signed 16-bit number that is read by the function Read Holding Registers from address 1000 and written by the function Write Single Register (as this function is the default, the address could be also I3.1000).
- S3.321 - a signed 32-bit number, it is read by the function Read Holding Registers from the registers 321 and 322.
- B1.20.0 - a bit that is read by the function Read Coils from address 20 as 0-bit in a byte.
- s10.3.123 - a text string, length 10 characters (2 bytes per character), it is read by the function Read Holding Registers from the address 123.
- a5.3.123 - a text string, length 10 characters (1 byte per character), it is read by the function Read Holding Registers from the address 123.
- U0-6.456 - an unsigned 16-bit number, is written to the register 456, it is written by Write Single Register, a register reading is not performed.
- Ld3.3204 - reading the value of a 64-bit unsigned number, it is read by the function Read Holding Registers from addresses 3204 to 3207.
...
- performed.
- Ld3.3204 - reading the value of a 64-bit unsigned number, it is read by the function Read Holding Registers from addresses 3204 to 3207.
Kotva | ||||
---|---|---|---|---|
|
The address format is [xN].[I|U|F|B|C|T][b]RdFn[-WrFn].Address[.BitNr] [,Items] in which:
- xN indicates the number of bytes that read or write. Valid values for N are 1, 2, 4, 8 (in combination with I, U, F), 6 for T type, and an arbitrary number for C type.
- A letter defines the type of I/O tag. Besides standard I, U, F, B types, two extra types have been added:
- C - text string of fixed length (e.g. x10.C3.1001 is a 10-character string on address 1001)
- T - timestamp with length of 6 bytes (ss:mi:hh dd:mm:yy)
- The meaning of other parameters complies with the standard mode.
See the example of the configuration in the next section.
Kotva | ||||
---|---|---|---|---|
|
...
- configuration software ROCLINK800
- default login LOI, password 1000
- logging in FloBoss 103: click on DirectConnect (connection through COM1, on the side of FloBoss 103 it is connected to LOI-local interface)
- menu Configure->Modbus->Configuration
set the parameter "Variable Mode" on the station in D2000 according to the setting "Byte Order":- if "Least Significant Byte first" then "Little endian"
- if "Most Significant Byte first" then "Big endian"
- I/O tags are configured through menu Configure -> Modbus -> Registers on FloBoss 103
- following types are supported (n means 16-bit address):
- Binary input:
- address in D2000: 1.n, e.g. 1.1001, the variable of Di/Dout type
- address in FloBoss 103: variable of BIN type
Function: 1
Starting/ending register: n
- Binary output:
- address in D2000: 1.n, e.g. 1.1001, the variable of Dout type
- address in FloBoss 103: variable of BIN r/w
Function: 1 (for reading)
Starting/ending register: n
Function: 5 (for reading)
Starting/ending register: n
- Unsigned Int 8 bits input:
- address in D2000: x1.B3.n, e.g. x1.B3.1003, variable of Ci/Co
- Binary input:
The address format is [xN].[I|U|F|B|C|T][b]RdFn[-WrFn].Address[.BitNr] [,Items] in which:
- xN indicates the number of bytes that read or write. Valid values for N are 1, 2, 4, 8 (in combination with I, U, F), 6 for T type, and an arbitrary number for C type.
- A letter defines the type of I/O tag. Besides standard I, U, F, B types, two extra types have been added:
- C - text string of fixed length (e.g. x10.C3.1001 is a 10-character string on address 1001)
- T - timestamp with length of 6 bytes (ss:mi:hh dd:mm:yy)
- The meaning of other parameters complies with the standard mode.
See the example of the configuration in the next section.
...
- configuration software ROCLINK800
- default login LOI, password 1000
- logging in FloBoss 103: click on DirectConnect (connection through COM1, on the side of FloBoss 103 it is connected to LOI-local interface)
- menu Configure->Modbus->Configuration
set the parameter "Variable Mode" on the station in D2000 according to the setting "Byte Order":- if "Least Significant Byte first" then "Little endian"
- if "Most Significant Byte first" then "Big endian"
- I/O tags are configured through menu Configure -> Modbus -> Registers on FloBoss 103
- following types are supported (n means 16-bit address):
- Binary input:
- address in D2000: 1.n, e.g. 1.1001, the variable of Di/Dout type
- address in FloBoss 103: variable of BIN UINT8 type
Function: 13A or 3B
Starting/ending register: n
- Unsigned Int 8 bits output:
- address in D2000: 1x1.B3.n, e.g. x1. 1B3.10011003, the variable of Dout Co type
- address in FloBoss 103: variable of BIN UINT8 r/w type
Function: 1 (for reading)3A or 3B
Starting/ending register: n
Function: 5 (for reading)6
Starting/ending register: n
- Unsigned Int 8 16 bits input:
- address in D2000: x1x2.B3U3.n, e.g. x1x2.B3U3.10031004, variable of Ci/Co type
- address in FloBoss 103: variable of UINT8 UINT16 type
Function: 3A or 3B
Starting/ending register: n
- Unsigned Int 8 16 bits output:
- address in D2000: x1x2.B3U3.n, e.g. x1x2.B3U3.10031004, variable of Co type
- address in FloBoss 103: variable of UINT8 UINT16 r/w type
Function: 3A or 3B
Starting/ending register: n
Function: 6
Starting/ending register: n
- Unsigned Signed Int 16 bits input:
- address in D2000: x2.U3I3.n, e.g. x2.U3I3.10041005, variable of Ci/Co type
- address in FloBoss 103: variable of UINT16 INT16 type
Function: 3A or 3B
Starting/ending register: n
- Unsigned Signed Int 16 bits output:
- address in D2000: x2.U3I3.n, e.g. x2.U3I3.10041005, variable of Co type
- address in FloBoss 103: variable of UINT16 INT16 r/w type
Function: 3A or 3B
Starting/ending register: n
Function: 6
Starting/ending register: n
- Signed Unsigned Int 16 32 bits input:
- address in D2000: x2x4.I3U3.n, e.g. x2x4.I3U3.10051006, variable of Ci/Co type
- address in FloBoss 103: variable INT16 of UINT32 type
Function: 3A or 3B
Starting/ending register: n
- Signed Unsigned Int 16 32 bits output:
- address in D2000: x2x4.I3U3.n, e.g. x2x4.I3U3.10051006, variable of Co type
- address in FloBoss 103: variable of INT16 UINT32 r/w type
Function: 3A or 3B
Starting/ending register: n
Function: 6
Starting/ending register: n n
- Float 32 bits input:
- address in D2000: x4.F3.n, e.g. x4.F3.1008, variable of Ai/Ao type
- address in FloBoss 103: variable of FL type
Function: 63A or 3B
Starting/ending register: n
- Float 32 bits inputoutput:
- address in D2000: x4.U3F3.n, e.g. x4.U3F3.10061008, variable of Ci/ Co type
- address in FloBoss 103: variable of UINT32 FL r/w type
Function: 3A or 3B
Starting/ending register: n
Function: 6
Starting/ending register: n
- String (N bytes) input:
- address in D2000: x4x1N.U3C3.n, e.g. x4x10.U3C3.10061010, variable of Co TxtI/TxtO type
- address in FloBoss 103: variable of UINT32 r/w type
Function: 3A or 3B
Starting/ending register: n
Function: 6 ACm(AC10,AC12,AC20,AC30,AC40) type
Function: 3A or 3B
Starting/ending register: n
- String (N bytes) output:
- address in D2000: x4xN.F3C3.n, e.g. x4x10.F3C3.10081010, variable of Ai/Ao Co type
- address in FloBoss 103: variable of FL type ACN r/w type (AC10,AC12,AC20,AC30,AC40)
Function: 3A or 3B
Starting/ending register: n
Function: 6
Starting/ending register: n
- Time and date 6 bytes input:
- address in D2000: x4x6.F3T3.n, e.g. x4x6.F3T3.10081010, variable of Co TiA/TxtI type
- address in FloBoss 103: variable of FL r/w of DT6 type
Function: 3A or 3B
Starting/ending register: n
Function: 6
Starting/ending register: n
- String (N bytes) input:
- address in D2000: x1N.C3.n, e.g. x10.C3.1010, variable of TxtI/TxtO type
- address in FloBoss 103: variable of ACm(AC10,AC12,AC20,AC30,AC40) type
Function: 3A or 3B
Starting/ending register: n
- String (N bytes) output:
- address in D2000: xN.C3.n, e.g. x10.C3.1010, variable of Co type
- address in FloBoss 103: variable of ACN r/w type (AC10,AC12,AC20,AC30,AC40)
Function: 3A or 3B
Starting/ending register: n
Function: 6
Starting/ending register: n
- Time and date 6 bytes input:
- address in D2000: x6.T3.n, e.g. x6.T3.1010, variable of TiA/TxtI type
- address in FloBoss 103: variable of DT6 type
Function: 3A or 3B
Starting/ending register: n - Note 1: FloBoss 103 supports local and monotonous time - that is why the configuration of the station in D2000 must correspond to the configuration of FloBoss.
- Note 2: It is possible to set time and date but it requires configuring extra I/O tags for a second, minute, hour, day, month, and year as Unsigned Int 8 bits and after that to write into them.
- Binary input:
...
Honeywell UDC1700 controllers (probably generally UDC1xxx):
The basic parameters and current data of these controllers are not normally read by means of functions 0x01 up to 0x04. It is necessary to use the functions 0x14/0x15 Read/write configuration reference data. These controllers use "big-endian" byte order. Therefore, for proper functionality, it is not necessary to modify parameters that change byte mode and endianness.
Examples of I/O tag configuration:
20.039 - 16-bit number from address 39(0x27)
f20.040 - 32-bit real number from address 40(0x28)
Note: Honeywell-made products (UDC 2xxx/3xxx, HC900, DPR, Trendview) use the common Modbus function codes 1-4 in spite of the UDC manuals referring only to 0x14/0x15 Read/write configuration reference data register tables. For more detailed information, see this post.
...
- Note 1: FloBoss 103 supports local and monotonous time - that is why the configuration of the station in D2000 must correspond to the configuration of FloBoss.
- Note 2: It is possible to set time and date but it requires configuring extra I/O tags for a second, minute, hour, day, month, and year as Unsigned Int 8 bits and after that to write into them.
Kotva | ||||
---|---|---|---|---|
|
...
Honeywell UDC1700 controllers (probably generally UDC1xxx):
The basic parameters and current data of these controllers are not normally read by means of functions 0x01 up to 0x04. It is necessary to use the functions 0x14/0x15 Read/write configuration reference data. These controllers use "big-endian" byte order. Therefore, for proper functionality, it is not necessary to modify parameters that change byte mode and endianness.
Examples of I/O tag configuration:
20.039 - 16-bit number from address 39(0x27)
f20.040 - 32-bit real number from address 40(0x28)
Note: Honeywell-made products (UDC 2xxx/3xxx, HC900, DPR, Trendview) use the common Modbus function codes 1-4 in spite of the UDC manuals referring only to 0x14/0x15 Read/write configuration reference data register tables. For more detailed information, see this post.
Kotva | ||||
---|---|---|---|---|
|
...
- MODBUS APPLICATION PROTOCOL SPECIFICATION V1.1b, December 28, 2006. http://www.modbus.org
Info | ||||||
---|---|---|---|---|---|---|
| ||||||
The attached ZIP contains the configuration of two lines and two stations with the MODBUS Client/MODBUS Server protocol that communicate via TCP (MODBUS Server listens on a TCP port 9999). Data written through one line is received through the other line. Four I/O tags are configured on each line (Float, with address 3.0, Signed with addresses 4.0 and 4.1, and Bool with address 1.0). MODBUS Server I/O tags values are controlled by the system second (Sec) and use linear conversion (Float is divided by 1000, Signed with address 4.0 is multiplied by 10). The value of the Bool I/O tag is controlled by the eval tag P.TrueFalse, which changes the value True/False every second.
|
Info | ||||||
---|---|---|---|---|---|---|
| ||||||
The attached ZIP contains the configuration of the line, station, and I/O tags for communication with an Emerson chromatograph that implements MODBUS DANIEL®.
|
Info | ||
---|---|---|
| ||
You can read blogs about the Modbus protocol |
...