OpenModbusTCP V3 Protocol API 01 EN
OpenModbusTCP V3 Protocol API 01 EN
Open Modbus/TCP
V3.0.0
Table of contents
1 Introduction............................................................................................................................................. 4
1.1 Abstract .......................................................................................................................................... 4
1.2 List of revisions............................................................................................................................... 4
1.3 Functional overview ....................................................................................................................... 5
1.4 System requirements ..................................................................................................................... 5
1.5 Intended audience .......................................................................................................................... 5
1.6 Technical data ................................................................................................................................ 6
1.7 Terms, abbreviations and definitions ............................................................................................. 8
1.8 References to documents .............................................................................................................. 8
2 Getting started ........................................................................................................................................ 9
2.1 Client/server and operating modes ................................................................................................ 9
2.2 Structure of the Open Modbus/TCP protocol stack ..................................................................... 10
2.3 Configuration ................................................................................................................................ 11
3 Exchanging data ................................................................................................................................... 12
3.1 Message mode vs IO mode ......................................................................................................... 12
3.2 Command table ............................................................................................................................ 13
3.3 Modbus function codes ................................................................................................................ 13
3.3.1 Troubleshooting ............................................................................................................................... 15
4 The application interface ..................................................................................................................... 16
4.1 Configuration ................................................................................................................................ 17
4.1.1 Configuration via packet .................................................................................................................. 17
4.1.2 Configuration with SYCON.net ........................................................................................................ 18
4.1.3 OMB_IF_SET_CONFIGURATION_REQ – Set configuration request ............................................. 20
4.1.4 OMB_IF_SET_CONFIGURATION_CNF – Confirmation packet for Set configuration .................... 23
4.1.5 Detailed parameter descriptions for Set configuration request ........................................................ 24
4.2 Common operating system packets ............................................................................................. 32
4.3 IO mode: Server Modbus data model .......................................................................................... 34
4.4 Message mode: Server with packets ........................................................................................... 37
4.4.1 Overview ......................................................................................................................................... 37
4.4.2 OMB_IF_RECEIVE_IND/RES – Receive data indication ................................................................ 38
4.4.3 OMB_IF_CONNECTION_IND/RES – Connection indication .......................................................... 46
4.5 Message mode: Client with packets ............................................................................................ 49
4.5.1 Overview ......................................................................................................................................... 49
4.5.2 OMB_IF_SEND_REQ/CNF - Send data request............................................................................. 50
4.6 Message mode: Client with command table ................................................................................ 56
4.6.1 Overview ......................................................................................................................................... 56
4.6.2 CMDTBL_INIT_REQ/CNF – Init command table task ..................................................................... 58
4.6.3 CMDTBL_ADD_TABLE_REQ/CNF – Add new command table ..................................................... 59
4.6.4 CMDTBL_DELETE_TABLE_REQ/CNF – Delete a command table................................................ 62
4.6.5 CMDTBL_ACTIVATE_TABLE_REQ/CNF – Activate a command table .......................................... 64
4.6.6 CMDTBL_DEACTIVATE_TABLE_REQ/CNF – Deactivate a command table................................. 66
4.6.7 CMDTBL_ADD_COMMAND_REQ/CNF – Add a command to a table ........................................... 68
4.6.8 CMDTBL_DELETE_COMMAND _REQ/CNF – Delete a command ................................................ 72
4.6.9 CMDTBL_ACTIVATE_COMMAND_REQ/CNF – Activate a command ........................................... 74
4.6.10 CMDTBL_DEACTIVATE_COMMAND_REQ/CNF – Deactivate a command .................................. 76
4.6.11 CMDTBL_TRIGGER_COMMAND_REQ/CNF – Trigger a command.............................................. 78
4.6.12 CMDTBL_GET_IO_INFO_REQ/CNF – Get IO Info ........................................................................ 80
4.6.13 CMDTBL_DEINIT_REQ/CNF – Table Deinitialization ..................................................................... 82
4.6.14 CMDTBL_START_STOP_REQ/CNF – Table Start/Stop ................................................................ 83
4.6.15 Command Table diagnostic with Status bit fields ............................................................................ 85
4.6.16 Command table timing diagram ....................................................................................................... 87
5 Status/Error codes ............................................................................................................................... 89
5.1 Status/Error codes OMB task....................................................................................................... 89
5.2 Status/Error codes Modbus Core ................................................................................................. 94
5.3 Status/Error codes CMD task....................................................................................................... 95
6 Appendix ............................................................................................................................................... 97
6.1 Modbus Exception Codes ............................................................................................................ 97
6.2 List of tables ................................................................................................................................. 98
1 Introduction
1.1 Abstract
This manual describes the application interface of the Open Modbus/TCP protocol stack. Use this
manual to support and guide you through the integration process of the given stack into your own
application.
Technical data
Feature Value
Maximum number of input data 5760 bytes
Maximum number of output data 5760 bytes
Acyclic communication Read/Write register:
Max. 125 registers per read telegram (FC 3, 4, 23)
Max. 121 registers per write telegram (FC 23),
Max. 123 registers per write telegram (FC 16)
Read/Write coil:
Max. 2000 coils per read telegram (FC 1, 2)
Max. 1968 coils per write telegram (FC 15)
Modbus function codes 1, 2, 3, 4, 5, 6, 7, 15, 16, 23, 43
Modes Message Mode: Client, Server (I/O data area is not used in this mode)
I/O Mode: Server
Command table Max. 16 servers configurable
Max. 256 commands in total *)
Baud rates 10 and 100 MBit/s
Data transport layer Ethernet II, IEEE 802.3
Table 2: Technical data Open Modbus/TCP
netX Available
netX 50 Yes
netX 51 Yes
netX 52 Yes
netX 90 No
netX 100 Yes
netX 500 Yes
netX 4000 No
Table 3: Firmware/stack available for netX
Configuration
Configured by Remark
SYCON.net Download or
by exported configuration files named inibatch.nxd and command.nxd
Application Application can use packets to configure the firmware/stack.
Table 4: Configuration
Firmware supports common and extended diagnostic in the dual-port-memory for loadable firmware.
Additional features
Feature Value
DMA transfer Supported for PCI target
Slot number Supported for CIFX 50-RE, CIFX 50E-RE
Integrated WebServer Supported (for details see reference [5])
Table 5: Additional features
Limitations
TCP/IP routing not supported anymore due to change of TCP/IP stack component.
*) For the netRAPID device only 64 commands can be configured.
All variables, parameters and data used in this manual have the LSB/MSB (“Intel”) data format. This
corresponds to the convention of the Microsoft C Compiler.
All IP addresses in this document have host byte order.
2 Getting started
This section explains some essential information you should know when starting to work with the
Open Modbus/TCP protocol API.
The dual-port memory is used for exchange of data, status information and packets. Configuration
and IO data will be transferred using this way.
The user application only accesses the task located in the highest layer namely the AP task which
constitutes the application interface of the Open Modbus/TCP protocol stack.
AP task
The AP task provides the interface to the user application and the control of the stack. It also
completely handles the dual-port memory interface of the communication channel. In detail, it is
responsible for the following:
Handling the communication channels dual-port memory interface
Process data exchange (IO mode)
Channel mailboxes
Watchdog
Service the common and extended status field in the dual-port memory
Configuration management
Loading the data base file ‘command.nxd’
Reception and routing of configuration packets sent by the user application
Mailbox packet handling and routing
handle of all incoming and outgoing packets to the user application
The OMB core component represents the central part of the Open Modbus/TCP stack
implementation. It manages the conversion of Modbus functions to TCP/IP frames. It is responsible
for the protocol handling, the communication to/from TCP/IP stack and it is the counterpart of the AP
task.
The underlying TCP/IP stack provides basic TCP/IP communication capabilities located at the layers
3 and 4 of the OSI/ISO layer model.
The OMB task is the Open Modbus/TCP stack implementation. It is responsible for the protocol
handling, the communication from and to the TCP/IP stack and it is the counterpart of the AP task.
CMD component
The CMD component (Command Table) executes a previously configured command table. The
command table is a list of configured Open Modbus/TCP request sthat are executed cyclically. The
command table works as Open Modbus/TCP client. It can send reading or writing function codes to
a remote Open Modbus/TCP server. The data that is read or written from a remote Open
Modbus/TCP server are exchanged with the host application via dual-port memory input/output
areas.
2.3 Configuration
The Open Modbus/TCP stack requires configuration parameters e.g. IP address.
Configuration parameters can be set using configuration software or can be set from an application
program using the packet API.
3 Exchanging data
3.1 Message mode vs IO mode
The Open Modbus/TCP task offers two basic operation modes:
Message mode: the stack operates as client only, as server only or as client and server
IO mode: the stack operates as server (only)
The parameter ulMode sets the operation mode of the Open Modbus/TCP stack. This parameter is
one of the basic configuration parameters, which are described in section Basic parameter on page
23.
Message mode
In message mode, the stack uses packets to communicate with the application. In this mode, a
simultaneous operation of the Open Modbus/TCP task as server and client is possible.
The Open Modbus/TCP stack can handle up to 16 sockets to establish 16 TCP/IP connections
simultaneously. By default, 4 sockets are configured as server sockets and the remaining 12 sockets
can be used as client sockets. The fraction of the available 16 sockets (server sockets to client
sockets) can be parameterized. With the default setting 4 clients can connect to the stack over
TCP/IP. The rest of 12 sockets can be used from a client application to send commands to different
Open Modbus/TCP devices or Open Modbus/TCP application.
In message mode, the application programmer has the option to implement a Modbus data model
of his or her own. The application programmer can decide, which function codes are supported. It is
also possible to support the full Modbus address range of Modbus register and coils.
As an alternative, a command table can be used instead of packets. In this case, the stack
automatically executes the commands of the command table to act as a client and request data from
the Modbus server. The stack uses the input and output area of the dual-port memory to
communicate to the application. The application program cannot use packets when using the
command table at the same time.
IO mode
In IO mode the stack uses the input and output area of the dual-port memory to communicate to the
application. In IO mode, the Open Modbus/TCP task works exclusive as server (No client
functionality is available).
In IO mode the Modbus data model is fixed. The entire handling of Open Modbus/TCP function
codes is done by the Open Modbus/TCP stack. The number of supported registers and coils is limited
by the size of the dual-port input and output area.
Note: Function Code 43 is supported beginning with Modbus/TCP Stack V2.6. The Device
Identification data are configured with the Set Configuration packet. The Modbus/TCP
Stack V2.6 supports the “Basic” and “Regular” Device Identification. The “Conformity
Level” 0x82 is supported. This means the Device Identification data can be accessed per
“stream” or “individual”. The “Extended” Device Identification is not supported for
loadable firmware. But it is optionally supported, in case of custom specific firmware
based on linkable objects. In this case, the Extended Device Identification data are
configured as task start up parameter.
Note: Function Code 43 is only supported as server. This means the Modbus/TCP stack will
respond to FC43 requests from a client. Sending FC43 to a remote server as client is
not supported.
Illegal Function
The function code received in the query is not allowed (Server mode). This could be
because the function code does not belong to the allowed range (currently 1 … 7, 15, 16, 23
or 43).
because the server is not in the correct state to process such a request, for example because
it has not been configured correctly and is asked to return register values.
These situations might lead to an error message Exception code ILLEGAL FUNCTION (Code
01).
Other possibilities include:
Wrong number of data in connection of the Modbus reference number
Wrong data address
These situations might lead to an error message Exception code ILLEGAL DATA ADDRESS
(Code 02).
The data address received in the query is not a correct address for the slave, i.e. the combination of
reference number and transfer length is invalid. For a controller with 100 registers, a request with
offset 96 and length 4 could be executed successfully, while a request with offset 96 and length 5
will cause this error.
In IO mode, this situation might lead to an error message
TLR_E_OMB_IF_MOD_MEM_MOD_START_ADR (0xC0600004).
The host application communicates with the AP task via the dual-port memory by exchanging
packets. The following chapter describes the packets that may be received or sent by the AP Task.
In general, packets can be divided into “Request/Confirmation” packets and Indication/Response
packets. “Request” packets are sent from the host application to the Open Modbus/TCP stack and
the stack will return a corresponding “Confirmation”. Also the Open Modbus/TCP stack can send
“Indication” packets to the host application and the host application has to send a corresponding
“Response” packet.
The AP task internally communicates with the underlying OMB Task and the CMD Task and TCP/IP
Task.
4.1 Configuration
4.1.1 Configuration via packet
Structure OMB_IF_SET_CONFIGURATION_REQ_DATA_T
ulSystemFlags uint32_t Default value: 0 System Flags
indicating BIT 0: AUTOSTART(0) / APPLICATION CONTROLLED(1)
AUTOSTART BIT 2 - 31 not yet implemented
Allowed values: BIT 0 corresponds to
0,1 OMB_IF_SYS_FLAG_COM_CONTROLLED_RELEASE
The meaning of BIT 0 is:
0 - Communication with a remote station after a device start is
allowed without BUS_ON flag, but the communication will be
interrupted if the BUS_ON flag changes state to 0 ;
1 - Communication with a remote station is allowed only with the
BUS_ON flag.
ulWdgTime uint32_t 0, 20 … 65535 Watchdog time (in ms)
0 means the watchdog timer has been switched off.
tOmbConfig STRUCT Open Modbus/TCP Basic configuration data structure:
OMB_IF_CONFIG_BASIC_T
See section Basic parameter on page 23.
tIPConfig STRUCT TCP/IP configuration data structure:
OMB_IF_CONFIG_IP_T
See section TCP/IP parameter on page 26.
ulFlags uint32_t Bit field Configuration Flags
See section Parameter flags on page 28.
* The packet length of 62 bytes is also accepted for compatibility reasons with the older firmware
version V2.0.x. In this case, the parameters ulFlags, tOmbConfigExt, tOmbConfigIdent
are internally set to zero.
** The packet length of 66 bytes is also accepted for compatibility reasons with the older firmware
version V2.5.x. In this case, the parameters tOmbConfigExt, tOmbConfigIdent are internally
set to zero.
This parameter contains the system flags area. Currently, this parameter may only have the values
0 or 1. The start of the device can be performed either application controlled or automatically:
Automatic (0):
Network connections are opened automatically without taking care of the state of the host
application. Communication with a remote controller after a device start is allowed without
BUS_ON flag, but the communication will be interrupted if the BUS_ON flag changes state to 0
Application controlled (1):
The Open Modbus/TCP stack is forced to wait for the host application before releasing the
network communication. Network communication is allowed with the BUS_ON flag set. Setting
the BUS_ON flag can be performed by using the packet HIL_START_STOP_COMM_REQ/CNF
packet.
The default value is 0 (Automatic).
Parameter ulWdgTime
This parameter contains the time interval for the supervision of data transfer by the internal watchdog
timer (Host activity watchdog timeout). The value must be either the value 0 or a number between
20 and 65535.
If the value 0 is specified, this indicates the watchdog timer has been switched off. Otherwise, the
watchdog timer interval is specified in units of milliseconds.
Packet description
Structure HIL_PACKET_HEADER_T
ulLen uint32_t 0 Packet Data Length in bytes
(OMB_IF_AP_SET_CONFIGURATION_CNF_SIZE)
ulSta uint32_t 0 ... 232-1 See section Status/Error codes AP task*)
ulCmd uint32_t 0x3F19 OMB_IF_SET_CONFIGURATION_CNF - Command
Table 10: OMB_IF_SET_CONFIGURATION_CNF –Confirmation of Provide Warmstart Parameters Packet
Parameter ulSystemFlags
This parameter contains the system flags area. Currently, this parameter may only have the values
0 or 1. The start of the device can be performed either application controlled or automatically:
Automatic (0):
Network connections are opened automatically without taking care of the state of the host
application. Communication with a remote controller after a device start is allowed without
BUS_ON flag, but the communication will be interrupted if the BUS_ON flag changes state to 0
Application controlled (1):
The Open Modbus/TCP stack is forced to wait for the host application before releasing the
network communication. Network communication is allowed with the BUS_ON flag set. Setting
the BUS_ON flag can be performed by using the packet HIL_START_STOP_COMM_REQ/CNF
packet.
The default value is 0 (Automatic).
Parameter ulWdgTime
This parameter contains the time interval for the supervision of data transfer by the internal watchdog
timer (Host activity watchdog timeout). The value must be either the value 0 or a number between
20 and 65535.
If the value 0 is specified, this indicates the watchdog timer has been switched off. Otherwise, the
watchdog timer interval is specified in units of milliseconds.
All further basic parameters are explained in the following table:
Variable Type Value / Range Description
ulOpenServerSock uint32_t 0..4...16
U Number of sockets to provide for server requests.
ets
A value of 0 would mean that the Open Modbus/TCP task
exclusively works as a client, while a value of 16 means that the
Open Modbus/TCP task exclusively works as server in message
mode. The values 1 … 15 mean that the Open Modbus/TCP task
could simultaneously work as a client and a server.
Default value: 4
ulAnswerTimeout uint32_t 1...60000 Server response timeout.
This parameter is only relevant for client jobs in message mode.
After expiration of the specified time, the job will be cancelled
and an error will be sent to the application.
The value is multiplied with 100 ms.
Default value: 20 (equivalent to 2 seconds effectively)
U
The ulFlags parameter contains bit-oriented flags according to the following table:
Bits Name (Bit mask) Description
0 OMB_IF_CONFIG_IP_FLAG_IP_ADDR The network interface configuration contains a fixed IP address.
If set, the ulIpAddr parameter will be evaluated.
1 OMB_IF_CONFIG_IP_FLAG_NET_MASK The network interface configuration contains a network address
mask.
If set, the ulNetMask parameter will be evaluated. If the flag is not
set, the stack will assume to be an isolated host which is not
connected to any network. The ulGateway parameter will be
ignored in this case.
2 OMB_IF_CONFIG_IP_FLAG_GATEWAY The network interface configuration contains a gateway IP address.
If set, the ulGateway parameter will be evaluated. If the flag is not
set, the stack will assume that no gateway is present in the
network.
3 OMB_IF_CONFIG_IP_FLAG_BOOTP Enable BOOTP:
If set, the stack tries to obtain its configuration from a BOOTP
server.
4 OMB_IF_CONFIG_IP_FLAG_DHCP Enable DHCP:
If set, the stack tries to obtain its configuration from a DHCP server.
5 OMB_IF_CONFIG_IP_FLAG_ETHERNET Set Ethernet address (MAC address):
_ADDR
If set, the abEthernetAddr area will be evaluated. Not supported
in OMB V3.
31 ... 6 Reserved Reserved for future use
Table 13: TCP/IP Parameter – ulFlags
Please note, that a fallback procedure between the different configuration methods is active, if more
than one choice is enabled in the ulFlags parameter.
If enabled, the stack will first try to configure using DHCP.
If DHCP configuration fails, the stack will fall back to BOOTP, if this is enabled.
In case of a BOOTP failure, the values found in the ulIpAddr, ulNetMask and ulGateway
parameters will be used, if enabled in ulFlags.
If none of these configuration mechanisms succeeds, the stack will report an error.
Note: The flags marked with *) have been introduced with Open Modbus/TCP Stack V2.6.
The flags marked with **) have been introduced with Open Modbus/TCP Stack V3.0.
Note: The Extended Parameters are introduced with Open Modbus/TCP Stack V2.6
The registers and the coils are located within the same memory. Thus, either a word manner or bit
manner access to actually the same data can be selected!
Open Modbus/TCP devices can write and read back data in the input data image
abPd0Input[5760] and read data from the output data image abPd0Output[5760] via the
TCP/IP network.
The host applications can write data in the output data image abPd0Output[5760] and read data
from the input data image abPd0Input[5760] via the dual-port memory.
If an Open Modbus/TCP device writes data to one register with function code 6 or function code 16,
another Open Modbus/TCP device is able to read back these data accordingly by using function
codes 1 or 3.
union
{
struct
{
unit32_t ulDataAdr; /* Starting address */
unit32_t ulDataCnt; /* Register- or Bit-Count */
unit8_t abData[OMB_IF_MAX_DATA_BYTESIZE];
} tFcStd; /* Union for FCs 1-6, 15-16 */
struct
{
unit32_t ulDataAdrRead; /* Read Starting address */
unit32_t ulDataCntRead; /* Quantity to Read */
unit32_t ulDataAdrWrite; /* Write Starting address */
unit32_t ulDataCntWrite; /* Quantity to Write */
unit8_t abData[OMB_IF_MAX_DATA_BYTESIZE];
} tFc23; /* Union for FC 23 */
Variable ulDataAdr contains the register- or bit-offset depending on the requested function
code, always beginning at offset zero.
Variable ulDataCnt contains the register- or bit-count depending on the requested function
code.
The field abData[OMB_MAX_DATA_CNT] contains the user data to be transferred. The field
can contain up to 250 bytes of usable data. This is equivalent to:
125 16-bit-registers.
2000 coils
stored at the same location.
For FC7 ulDataAdr bytes ulDataCnt is unused
Variable ulDataAdrRead contains the read register offset, always beginning at offset zero.
Variable ulDataCntRead contains the read register count.
Variable ulDataAdrWrite contains the write register offset, always beginning at offset zero.
Variable ulDataCntWrite contains the write register count.
The field abData[OMB_MAX_DATA_CNT] contains the user data to be transferred. The field
can contain up to 250 bytes of user data. These are:
up to 121 16-bit registers for the write part (indication packet)
up to 125 16-bit registers for the read part (response packet).
union
{
struct
{
unit32_t ulDataAdr; /* Starting address */
unit32_t ulDataCnt; /* Register- or Bit-Count */
unit8_t abData[OMB_MAX_DATA_CNT];
} tFcStd; /* Union for FCs 1-6, 15-16 */
struct
{
unit32_t ulDataAdrRead; /* Read Starting address */
unit32_t ulDataCntRead; /* Quantity to Read */
unit32_t ulDataAdrWrite; /* Write Starting address */
unit32_t ulDataCntWrite; /* Quantity to Write */
unit8_t abData[OMB_MAX_DATA_CNT];
} tFc23; /* Union for FC 23 */
} OMB_IF_MODBUS_DATA_T;
} OMB_IF_RECEIVE_IND_T;
Structure OMB_IF_MODBUS_DATA_T
ulRouting uint32_t IP address of remote station (Modbus client)
ulUnitId uint32_t 0 … 255 Unit identifier
ulFunctionCode uint32_t 1…6,7, 15, 16, Function code
23
ulException uint32_t 0 Exception code
unData union Contains various data, see above
Table 19: OMB_IF_RECEIVE_IND – Receive Data Indication
union
{
struct
{
unit32_t ulDataAdr; /* Starting address */
unit32_t ulDataCnt; /* Register- or Bit-Count */
unit8_t abData[OMB_IF_MAX_DATA_BYTESIZE];
} tFcStd; /* Union for FCs 1-6, 15-16 */
struct
{
unit32_t ulDataAdrRead; /* Read Starting address */
unit32_t ulDataCntRead; /* Quantity to Read */
unit32_t ulDataAdrWrite; /* Write Starting address */
unit32_t ulDataCntWrite; /* Quantity to Write */
unit8_t abData[OMB_IF_MAX_DATA_BYTESIZE];
} tFc23; /* Union for FC 23 */
} OMB_IF_MODBUS_DATA_T;
} OMB_IF_AP_RECEIVE_RES_T;
Structure OMB_IF_MODBUS_DATA_T
ulRouting uint32_t IP address of remote station (Modbus client), unchanged
ulUnitId uint32_t 0 … 255 Unit identifier, unchanged
ulFunctionCode uint32_t 1…6, 7, 15, 16, Function code, unchanged or 0x80 added to generate an exception -
23 see variable ulException in this chapter
(if so, + 0x80)
ulException uint32_t Exception code - see variable ulException in this chapter
unData union Contains various data, see above
Table 21: OMB_IF_RECEIVE_RES– Receive Data Response
If the remote station 192.168.10.16 (Client) wants to write one register to our station (FC 6, data
offset = 10, Value = 255), the Open Modbus/TCP stack generates the following indication packet to
the host application. The host application should poll/receive this packet via the driver function
xSysdeviceGetPacket()
Variable Value
ulDest 0
ulSrc Queue handle of OMB task, does not matter in this context
ulDestId Handle from Register AP's ulSrcId (command
OMB_IF_REGISTER_AP_REQ)
ulSrcId Socket number ulSocketNumber of the receiving OMB socket (the allowed range for
socket numbers extends from 0 to 15).
ulLen 26 (24 + 2)
ulId Is generated automatically
ulSta 0
ulCmd 0x3F06 (OMB_IF_RECEIVE_IND)
ulExt Do not change
ulRout Do not change
ulRouting 192.168.10.16 (equivalent to 0xC0A80A10)
ulUnitId Value from client (Node), typically 0
ulFunctionCode 6 (Function code for “Write single register”)
ulException 0
ulDataAdr 10 (“Offset 10”)
ulDataCnt 1 (“1 Register”)
abData[0] 0 (No swap)
abData[1] 255 (No swap)
Table 23: Example: Writing Data via FC6 - Indication
Variable Value
ulDest Do not change
ulSrc Queue handle of OMB task, does not matter in this context, do not touch
ulDestId Handle from Register AP's ulSrcId (command
OMB_IF_REGISTER_AP_REQ) , do not touch
ulSrcId Socket number ulSocketNumber of the receiving OMB socket. , do not touch
ulLen 26 (24 + 2)
ulSta 0 (if successful, otherwise TLR_E_FAIL)
ulCmd 0x3F07 (OMB_IF_RECEIVE_RES)
ulExt Do not change
ulRout Do not change
ulRouting 192.168.10.16, do not change
ulUnitId Do not change
ulFunctionCode 6 (Function code “Write single register”), do not change in case of error free response
ulDataAdr 10 (“Offset 10”), do not change
ulDataCnt 1 (“1 Register”) , do not change
abData[0] 0 (No swap), do not change
abData[1] 255 (No swap), do not change
Table 24: Example: Writing Data via FC6 – Response
} __OMB_IF_CONNECTION_IND_T;
Structure OMB_IF_CONNECTION_IND_DATA_T
ulConnectionId uint32_t 0 … 15 Connection Identifier (same as packet ulSrcId)
bState uint8_t 0, 1 Connection State:
Bit D0 := 0 -> Not Connected
Bit D0 := 1 -> Connected
Bit D1 … D7 := Reserved
#define
OMB_IF_CONNECTION_STATE_CONNECTED (0x01)
bType uint8_t 1 Connection Type:
1 := Server Connection
usReserved uint16_t 0 Reserved
ulIpAddress uint32_t n Client IpAddress that has been connected or disconnected
Table 25: OMB_IF_CONNECTION_IND – Connection Indication Packet
} OMB_IF_CONNECTION_RES_T;
Packet description
This mode is the preferred way to implement a fully user specific Modbus/TCP Client data model. It
is in scope of the user application to decide which function codes are requested to which
Modbus/TCP server. The entire Modbus address range is available in this mode.
To operate in this mode, two preconditions need to be fulfilled
The Open Modbus/TCP stack must be configured in Message mode (ulMode = 0)
The Open Modbus/TCP stack must have configured some client ports (e.g.
‘ulOpenServerSockets’ = 4; /* 12 are left as client sockets*/)
union
{
struct
{
unit32_t ulDataAdr; /* Starting address */
unit32_t ulDataCnt; /* Register- or Bit-Count */
unit8_t abData[OMB_IF_MAX_DATA_BYTESIZE];
} tFcStd; /* Union for FCs 1-6, 15-16 */
struct
{
unit32_t ulDataAdrRead; /* Read Starting address */
unit32_t ulDataCntRead; /* Quantity to Read */
unit32_t ulDataAdrWrite; /* Write Starting address */
unit32_t ulDataCntWrite; /* Quantity to Write */
unit8_t abData[OMB_IF_MAX_DATA_BYTESIZE];
} tFc23; /* Union for FC 23 */
Variable ulDataAdr contains the register- or bit-offset depending on the function code,
always beginning at offset zero.
Variable ulDataCnt contains the register- or bit-count depending on the function code.
The field abData[OMB_MAX_DATA_CNT] contains the user data to be transferred. The field
can contain up to 250 bytes of usable data. This is equivalent to:
125 16-bit-registers.
2000 coils
stored at the same location.
Variable ulDataAdrRead contains the read register offset, always beginning at offset zero.
Variable ulDataCntRead contains the read register count.
Variable ulDataAdrWrite contains the write register offset, always beginning at offset zero.
Variable ulDataCntWrite contains the write register count.
The field abData[OMB_MAX_DATA_CNT] contains the user data to be transferred. The field
can contain up to 250 bytes of usable data. These are:
up to 121 16-bit-registers for the write part (request packet)
up to 125 16-bit-registers for the read part (confirmation packet).
union
{
struct
{
unit32_t ulDataAdr; /* Starting address */
unit32_t ulDataCnt; /* Register- or Bit-Count */
unit8_t abData[OMB_IF_MAX_DATA_BYTESIZE];
} tFcStd; /* Union for FCs 1-6, 15-16 */
struct
{
unit32_t ulDataAdrRead; /* Read Starting address */
unit32_t ulDataCntRead; /* Quantity to Read */
unit32_t ulDataAdrWrite; /* Write Starting address */
unit32_t ulDataCntWrite; /* Quantity to Write */
unit8_t abData[OMB_IF_MAX_DATA_BYTESIZE];
Open Modbus/TCP V3 | Protocol API
DOC180702API01EN | Revision 1 | English | 2019-06 | Released | Public © Hilscher, 2018-2019
The application interface 52/104
} tFc23; /* Union for FC 23 */
} OMB_IF_MODBUS_DATA_T;
} OMB_IF_SEND_REQ_T;
Packet description
union
{
struct
{
unit32_t ulDataAdr; /* Starting address */
unit32_t ulDataCnt; /* Register- or Bit-Count */
unit8_t abData[OMB_IF_MAX_DATA_BYTESIZE];
} tFcStd; /* Union for FCs 1-6, 15-16 */
struct
{
unit32_t ulDataAdrRead; /* Read Starting address */
unit32_t ulDataCntRead; /* Quantity to Read */
unit32_t ulDataAdrWrite; /* Write Starting address */
unit32_t ulDataCntWrite; /* Quantity to Write */
unit8_t abData[OMB_IF_MAX_DATA_BYTESIZE];
} tFc23; /* Union for FC 23 */
} OMB_IF_MODBUS_DATA_T;
} OMB_IF_SEND_CNF_T;
Open Modbus/TCP V3 | Protocol API
DOC180702API01EN | Revision 1 | English | 2019-06 | Released | Public © Hilscher, 2018-2019
The application interface 54/104
Packet description
Structure OMB_IF_MODBUS_DATA_T
ulRouting uint32_t IP address of remote station (Modbus server), unchanged
ulUnitId uint32_t 0 … 247 Unit identifier, unchanged
ulFunctionCode uint32_t 1…7, 15, Function code, unchanged - see variable ulException in this chapter
16, 23
ulException uint32_t Exception code - see variable ulException in this chapter
unData union Contains various data, see above
Table 29: OMB_IF_SEND_CNF - Send Data Confirmation
If the host application wants to read one holding register from remote station 192.168.10.16 (FC 3,
data offset = 10, Value = 255), the host application must send the following request packet to the
Open Modbus/TCP stack.
Variable Value
ulDest 0x20 (HIL_PACKET_DEST_DEFAULT_CHANNEL)
ulSrc 0
ulDestId 0
ulSrcId 0 (Source End Point Identifier - could be used from host
application as handle or so)
ulLen 24 (OMB_IF_SEND_REQ_FC_STD_DATA_SIZE)
ulId 0 (Packet identification - could be used from host application)
ulSta 0
ulCmd 0x 3F08 (OMB_IF_SEND_REQ)
ulExt 0 (Set to zero)
ulRout 0
ulRouting 192.168.10.16 (equivalent to 0xC0A80A10)
ulUnitId 0
ulFunctionCode 3 (Function code for “Read holding register”)
ulException 0
ulDataAdr 10 (“Offset 10”)
ulDataCnt 1 (“1 Register”)
Table 31: Example: Reading data via FC3 - Request
The confirmation of the remote station generates a confirmation packet to the host application. The
host application should poll/receive this packet via the driver function.
Variable Value
ulDest 0x20 (HIL_PACKET_DEST_DEFAULT_CHANNEL)
ulSrc 0
ulDestId 0
ulSrcId 0 (Source End Point Identifier - value from request packet)
ulLen 26 (OMB_IF_SEND_CNF_FC_STD_DATA_SIZE + 2)
ulId 0 (Packet identification - value from request packet)
ulSta 0 (Error free case)
ulCmd 0x 3F09 (OMB_IF_SEND_CNF)
ulExt
ulRout
ulRouting 192.168.10.16 (equivalent to 0xC0A80A10)
ulUnitId 0
ulFunctionCode 3 (Function code for “Read holding register”)
ulException 0
ulDataAdr 10 (“Offset 10”)
ulDataCnt 1 (“1 Register”)
abData[0] 0 (No swap)
abData[1] 255 (No swap)
Table 32: Example: Reading data via FC3 - Confirmation
Packet description
Structure CMDTBL_INIT_DATA_REQ_T
ulProtocolType uint32_t 0x12 The command table should run as Open Modbus/TCP command table
CMDTBL_PROTOCOL_TYPE_MODBUS_TCP
ulDpmBitFieldOff uint32_t 0 … 5679 Start offset of the diagnostic bitfield in the dual-port memory input
set image. The default position should be dword aligned after the last
input byte in the input image
abReserved[] Uint8_t[16] Reserved array, set to 0
Table 34: CMDTBL_INIT_REQ_T packet
Packet description
Structure CMDTBL_ADD_TABLE_DATA_REQ_T
ulProtocolType uint32_t 0x12 The command table should run as an Open Modbus/TCP command
table
CMDTBL_PROTOCOL_TYPE_MODBUS_TCP
ulCycleTime uint32_t 0 .. 60.000 Cycle time, in that all commands of this of this shell be executed once.
[ms] The cycle time is given in ms.
Note: If the execution of all commands within the command table takes
longer than this time, the cycle time cannot be respected and the cycle
time will be increased. If the execution of all commands within a
command table takes less than this time, the next execution of the
command table will be started when this time has expired.
The default value is 0 which means the table is executed is fast as
possible. When the last command is finished immediately with the first
command will be started again.
ulInterCommand uint32_t 0 .. 60.000 This delay time specifies a fixed time that is inserted between two
Delay commands of command table. It can be used to delay the execution of
[ms] commands e.g. for a non-performant server that needs a pause on
each request. This time is valid for all commands within one table.
The default value is 0. This means no delay is inserted between each
command.
ulInterScanDelay uint32_t 0 .. 60.000 This delay time can be used to insert a fixed delay time when the last
[ms] command of a table was executed before starting over with the first
command of the table.
The default value is 0. This means no delay time is inserted.
ulFlags uint32_t 0…1 Configuration flag field: Per default all flags are 0
Bit D0 : Table disable bit
If this bit is set, the table (all commands within the table) is excluded
from the execution when the command table is started. The table can
be activated later on explicitly at run time with the
CMDTBL_ACTIVATE_TABLE_REQ Request.
abReserved[16] uint8_t [] 0 Reserved array set to 0
Table 36: CMDTBL_ADD_TABLE_REQ_T packet
Packet description
Structure CMDTBL_ADD_TABLE_DATA_CNF_T
ulTableId uint32_t n This is the returned table identifier. The host application has to store
this identifier in order to use it later as table reference with other
commands like add a command or activate a table etc.
Table 37: CMDTBL_ADD_TABLE_CNF_T packet
Packet description
Structure CMDTBL_DELETE_TABLE_DATA_REQ_T
ulTableId uint32_t n ID of the command table that should be deleted.
Table 38: CMDTBL_DELETE_TABLE_REQ_T packet
Packet description
Structure CMDTBL_DELETE_TABLE_DATA_CNF_T
ulTableId uint32_t n Table identifier of the deleted table.
Table 39: CMDTBL_DELETE_TABLE_CNF_T packet
Packet description
Structure CMDTBL_ACTIVATE_TABLE_DATA_REQ_T
ulTableId uint32_t n Command table that should be activated.
Use 0 to activate all tables at once that are created.
Use table ID returned by the CMDTBL_ADD_TABLE_CNF_T packet
to active a particular table.
Table 40: CMDTBL_ACTIVATE_TABLE_REQ_T packet
Packet description
Structure CMDTBL_ACTIVATE_TABLE_DATA_CNF_T
ulTableId uint32_t n Table identifier of the activated table.
Table 41: CMDTBL_ACTIVATE_TABLE_CNF_T packet
Packet description
Variable Type Value / Range Description
ulDest uint32_t 0x20 Destination (HIL_PACKET_DEST_DEFAULT_CHANNEL)
QUE_OMBAPTASK
ulLen uint32_t 4 Packet Data Length in bytes
sizeof(CMDTBL_DEACTIVATE_TABLE_DATA_REQ_T)
ulSta uint32_t 0 Set to zero
ulCmd uint32_t 0xA308 CMDTBL_DEACTIVATE_TABLE_REQ - Command
Structure CMDTBL_DEACTIVATE_TABLE_DATA_REQ_T
ulTableId uint32_t n Command table that should be deactivated.
Use 0 to deactivate all tables at once that are created.
Use table ID returned by the CMDTBL_ADD_TABLE_CNF_T packet
to deactivate a particular table.
Table 42: CMDTBL_DEACTIVATE_TABLE_REQ_T packet
Packet description
Structure CMDTBL_DEACTIVATE_TABLE_DATA_CNF_T
ulTableId uint32_t n Table identifier of the deactivated table.
Table 43: CMDTBL_DEACTIVATE_TABLE_CNF_T packet
For more information about the function codes and their meaning and use, see section Modbus
function codes.
Furthermore, you can specify whether the command is activated or deactivated (disabled) at the
start. This is done using flag variable ulFlags. If you specify a command as deactivated here, you
can activate it later using the CMDTBL_ACTIVATE_COMMAND_REQ/CNF – Activate a command
packet.
The confirmation packet returns a command identifier to be stored for future use as reference to the
newly defined command table.
Packet description
Structure CMDTBL_ADD_COMMAND_DATA_REQ_T
ulTableId uint32_t n Id of the table where to add the command.
Use table ID returned by the CMDTBL_ADD_TABLE_CNF_T packet
to add a particular command.
Structure CMDTBL_COMMAND_T
ulDeviceAddr uint32_t n IP address of the requested remote server
e.g. 0x192.168.10.16 (= 0xC0A80A10)
ulUnitId uint32_t 0 … 255 Sub addressing with the requested remote server.
ulFunctionCode uint32_t 1, 2, 3, 4, 5, Requested function code
6, 15, 16
ulRegisterWriteA uint32_t 0 … 65535 Address within the requested server for writing function codes.
ddr
ulRegisterWriteC uint32_t 0…x Number of Register or Coils that shall be written to the server.
ount 0 – no data is written
ulRegisterReadA uint32_t 0 … 65535 Address within the requested server for reading function codes.
ddr
ulRegisterReadC uint32_t Number of Register or Coils that shall be read from the server.
ount 0 – no data is read.
ulDPMSrcOffset uint32_t Byte offset in dual-port memory “Output area” that holds the data
which shall be written to the server.
Note:
The commands must be added in ascending order in relation to their
offset. It is not possible to add a second command with a smaller
offset then the previous command.
Note:
The commands must be added in ascending order in relation to their
offset. It is not possible to add a second command with a smaller
offset then the previous command.
ulTriggerType uint32_t 0,1,2,3 Command Execution
0 := CMDTBL_TRIGGER_TYPE_CYCLIC
-> cyclically depending on a configured interval
1 := CMDTBL_TRIGGER_TYPE_ON_CHANGE
-> only in case of data change
2: = CMDTBL_TRIGGER_TYPE_ON_CHANGE_NON_ZERO
-> only in case of data change to a non-zero value
3 := CMDTBL_TRIGGER_TYPE_ON_REQUEST
-> triggered by external event
CMDTBL_TRIGGER_COMMAND_REQ (see page 78)
ulCyclePeriod uint32_t 0 … 60.000 Each command can be configured with an individual cycle time. This
[ms] time specifies the execution cycle of this command.
The default value is 0. This means that the command is executed
within the configured cycle time of the command table itself.
Note:
This cycle time can be configured only, when the cycle time
‘ulCycleTime ‘and the ‘ulInterScanDelay’ of the command table itself is
set to 0.
ulFlags uint32_t 0…1 Configuration flag field: By default, all flags are set to 0
Bit D0: Command disable bit
If this bit is set, the command is excluded from the execution when the
command table is started. The command can be activated later on
explicitly at run time with the CMDTBL_ACTIVATE_COMMAND_REQ
Request.
abReserved uint8_t [16] 0 Reserved field set to 0
Table 45: CMDTBL_ADD_COMMAND_REQ_T packet
Packet description
Structure HIL_PACKET_HEADER_T
ulLen uint32_t 4 Packet Data Length in bytes
sizeof(CMDTBL_ADD_COMMAND_DATA_CNF_T)
ulSta uint32_t x See section Status/Error codes
ulCmd uint32_t 0xA30B CMDTBL_ADD_COMMAND_CNF - Command
Structure CMDTBL_ADD_COMMAND_DATA_CNF_T
ulCommandId uint32_t n Command identifier of the added command. The host application
should hold this handle to use it later by other commands e.g.
CMDTBL_ACTIVATE_COMMAND_REQ
Table 46: CMDTBL_ADD_COMMAND_CNF_T packet
Packet description
Structure CMDTBL_DELETE_COMMAND_DATA_REQ_T
ulCommandId uint32_t n Command that shall be deleted.
Use the command ID returned by the CMDTBL_ADD_COMMAND
_REQ_T packet to delete a particular command.
Table 47: CMDTBL_DELETE_COMMAND_REQ_T packet
Packet description
Structure CMDTBL_DELETE_COMMAND_DATA_CNF_T
ulCommandId uint32_t n Command identifier of the deleted command.
Table 48: CMDTBL_DELETE_COMMAND_CNF_T packet
Packet description
Structure CMDTBL_ACTIVATE_COMMAND_DATA_REQ_T
ulCommandId uint32_t n Command that shall be activated.
Use the command ID returned by the CMDTBL_ADD_COMMAND
_REQ_T packet to activate a particular command.
Table 49: CMDTBL_ACTIVATE_COMMAND_REQ_T packet
Packet description
Structure CMDTBL_ACTIVATE_COMMAND_DATA_CNF_T
ulCommandId uint32_t n Command identifier of the activated command.
Table 50: CMDTBL_ACTIVATE_COMMAND_CNF_T packet
Packet description
Structure CMDTBL_DEACTIVATE_COMMAND_DATA_REQ_T
ulCommandId uint32_t n Command that shall be activated.
Use the command ID returned by the
CMDTBL_ADD_COMMAND_REQ_T packet to activate a particular
command.
Table 51: CMDTBL_DEACTIVATE_COMMAND_REQ_T packet
Packet description
Structure CMDTBL_DEACTIVATE_COMMAND_DATA_CNF_T
ulCommandId uint32_t n Command identifier of the activated command.
Table 52: CMDTBL_ACTIVATE_COMMAND_CNF_T packet
Packet description
Structure CMDTBL_TRIGGER_COMMAND_DATA_REQ_T
ulCommandId uint32_t n Command that shall be triggered.
Use the command ID returned by the CMDTBL_ADD_COMMAND
_REQ_T packet to trigger a particular command.
Note:
A command can be triggered only if it is configured from trigger type
“CMDTBL_TRIGGER_TYPE_ON_REQUEST” and the command itself
and the command table where it belongs to must not be deactivated.
Table 53: CMDTBL_TRIGGER_COMMAND_REQ_T packet
Packet description
Structure CMDTBL_TRIGGER_COMMAND_DATA_CNF_T
ulCommandId uint32_t N Command identifier of the activated command.
Table 54: CMDTBL_TRIGGER_COMMAND_CNF_T packet
Packet description
Packet description
Structure CMDTBL_GET_IO_INFO_DATA_CNF_T
ulInputByteSize uint32_t 0 … 5680 This value defines last byte used in “Input area” of the dual-port
memory.
ulOutputByteSize uint32_t 0 … 5680 This value defines last byte used in “Output area” of the dual-port
memory.
ulDpmBitFieldPos uint32_t 0 … 5680 Start offset of the diagnostic bit field within the dual-port “Input area”.
ition This value reflects the offset that has been configured with the
CMDTBL_INIT_REQ - Command
Table 56: CMDTBL_GET_IO_INFO_CNF_T packet
Packet description
Packet description
Structure HIL_PACKET_HEADER_T
ulLen uint32_t 0 Packet Data Length in bytes
ulSta uint32_t x See section Status/Error codes
ulCmd uint32_t 0xA317 CMDTBL_DEINIT_CNF - Command
Table 58: CMDTBL_DEINIT_CNF packet
Packet description
Packet description
The command table contains 6 commands. These commands are sent to 3 slave different devices
with:
IPAddress1=192.168.10.22
IPAddress2=192.168.10.11
IPAddress3=192.168.10.33.
The condition is as following IP2 and IP3 are active on the network. IP1 is not connected to the
network. The second command (FC16) of IP2 does not work for any reason. All other commands
are executed successfully.
In this case, the bit fields are filled as follows:
Note: It is not possible to configure a mixed mode of both described timing use cases. This
means it is not allowed to configure a Table Cycle Time ulCycleTime (TCT) to a non 0
value and an individual ulCyclePeriod (CCP). If the command individual ulCyclePeriod
(CCP) is configured then it is not possible to configure an ulInterScanDelay (ISD).
5 Status/Error codes
5.1 Status/Error codes OMB task
Hexadecimal value Definition / description
0x00000000 SUCCESS_HIL_OK
Status ok
0xC0000004 ERR_HIL_UNKNOWN_COMMAND
Unknown Command in Packet received
0xC0000007 ERR_HIL_INVALID_PACKET_LEN
Packet length is invalid.
0xC000000C ERR_HIL_WATCHDOG_TIMEOUT
Watchdog error occurred.
0xC000001A ERR_HIL_REQUEST_RUNNING
Request is already running.
0xC0000119 ERR_HIL_NOT_CONFIGURED
Configuration not available
0xC0000200 ERR_HIL_WATCHDOGTIME_INVALID
Watchdog time is out of range.
0xC0600002 ERR_OMB_IF_SEND_IP_SET_CONFIG_FAILED
Failed to forward the SET_CONFIG information to TCP_UDP task (because of a resource
problem).
0xC0600003 ERR_OMB_IF_SYSTEM_FUNCTION_CODE
Wrong function code.
0xC0600004 ERR_OMB_IF_MOD_MEM_MOD_START_ADR
Wrong Modbus start address.
0xC0600005 ERR_OMB_IF_MOD_MEM_LEN
IO mode: Wrong length of Memory map.
0xC0600006 ERR_OMB_IF_MOD_MEM_START_MEM_OFF
IO mode: Wrong Start byte offset in Memory map.
0xC0600007 ERR_OMB_IF_MOD_MEM_SYSTEM_ERROR
IO mode: System error.
0xC0600008 ERR_OMB_IF_INVALID_STARTUP_PARAMETER_QUE_ELEM_CNT
Invalid Startup Parameter ulQueElemCnt.
0xC0600009 ERR_OMB_IF_INVALID_STARTUP_PARAMETER_POOL_ELEM_CNT
Invalid Startup Parameter ulPoolElemCnt.
0xC060000A ERR_OMB_IF_INVALID_STARTUP_PARAMETER_START_FLAGS
Invalid Startup Parameter ulStartFlags.
0xC060000B ERR_OMB_IF_INVALID_STARTUP_PARAMETER_OMB_CYCLE_EVENT
Invalid Startup Parameter ulOmbCycleEvent.
0xC060000C ERR_OMB_IF_APPLICATION_TIMER_CREATE_FAILED
Failed to create an application timer (Timer task).
0xC060000D ERR_OMB_IF_APPLICATION_TIMER_INIT_PACKET_FAILED
Failed to initialize a packet of application timer (Timer task).
0xC060000E ERR_OMB_IF_TCP_UDP_IDENTIFY_FAILED
Failed to identify the TCP_UDP task.
0xC060000F ERR_OMB_IF_TCP_UDP_QUEUE_IDENTIFY_FAILED
The queue identification of TCP_UDP task queue has failed.
6 Appendix
6.1 Modbus Exception Codes
The allowed values for packet element Exception Code and their meanings are listed in the following
table according to the MODBUS Application Protocol Specification V1.1b3, April 26, 2012, p.48-49,
which is available at http://www.modbus.org/.
MODBUS Exception Codes
Copyright
Important notes
Utmost care was/is given in the preparation of the documentation at hand consisting of a user's
manual, operating manual and any other document type and accompanying texts. However, errors
cannot be ruled out. Therefore, we cannot assume any guarantee or legal responsibility for
erroneous information or liability of any kind. You are hereby made aware that descriptions found in
the user's manual, the accompanying texts and the documentation neither represent a guarantee
nor any indication on proper use as stipulated in the agreement or a promised attribute. It cannot be
ruled out that the user's manual, the accompanying texts and the documentation do not completely
match the described attributes, standards or any other data for the delivered product. A warranty or
guarantee with respect to the correctness or accuracy of the information is not assumed.
We reserve the right to modify our products and the specifications for such as well as the
corresponding documentation in the form of a user's manual, operating manual and/or any other
document types and accompanying texts at any time and without notice without being required to
notify of said modification. Changes shall be taken into account in future manuals and do not
represent an obligation of any kind, in particular there shall be no right to have delivered documents
revised. The manual delivered with the product shall apply.
Under no circumstances shall Hilscher Gesellschaft für Systemautomation mbH be liable for direct,
indirect, ancillary or subsequent damage, or for any loss of income, which may arise after use of the
information contained herein.
The hardware and/or software was created and tested by Hilscher Gesellschaft für
Systemautomation mbH with utmost care and is made available as is. No warranty can be assumed
for the performance or flawlessness of the hardware and/or software under all application conditions
and scenarios and the work results achieved by the user when using the hardware and/or software.
Liability for any damage that may have occurred as a result of using the hardware and/or software
or the corresponding documents shall be limited to an event involving willful intent or a grossly
negligent violation of a fundamental contractual obligation. However, the right to assert damages
due to a violation of a fundamental contractual obligation shall be limited to contract-typical
foreseeable damage.
It is hereby expressly agreed upon in particular that any use or utilization of the hardware and/or
software in connection with
Flight control systems in aviation and aerospace;
Nuclear fission processes in nuclear power plants;
Medical devices used for life support and
Vehicle control systems used in passenger transport
shall be excluded. Use of the hardware and/or software in any of the following areas is strictly
prohibited:
For military purposes or in weaponry;
For designing, engineering, maintaining or operating nuclear systems;
In flight safety systems, aviation and flight telecommunications systems;
In life-support systems;
In systems in which any malfunction in the hardware and/or software may result in physical
injuries or fatalities.
You are hereby made aware that the hardware and/or software was not created for use in hazardous
environments, which require fail-safe control mechanisms. Use of the hardware and/or software in
this kind of environment shall be at your own risk; any liability for damage or loss due to impermissible
use shall be excluded.
Hilscher Gesellschaft für Systemautomation mbH hereby guarantees that the software shall run
without errors in accordance with the requirements listed in the specifications and that there were
no defects on the date of acceptance. The warranty period shall be 12 months commencing as of
the date of acceptance or purchase (with express declaration or implied, by customer's conclusive
behavior, e.g. putting into operation permanently).
The warranty obligation for equipment (hardware) we produce is 36 months, calculated as of the
date of delivery ex works. The aforementioned provisions shall not apply if longer warranty periods
are mandatory by law pursuant to Section 438 (1.2) BGB, Section 479 (1) BGB and Section 634a
(1) BGB [Bürgerliches Gesetzbuch; German Civil Code] If, despite of all due care taken, the delivered
product should have a defect, which already existed at the time of the transfer of risk, it shall be at
our discretion to either repair the product or to deliver a replacement product, subject to timely
notification of defect.
The warranty obligation shall not apply if the notification of defect is not asserted promptly, if the
purchaser or third party has tampered with the products, if the defect is the result of natural wear,
was caused by unfavorable operating conditions or is due to violations against our operating
regulations or against rules of good electrical engineering practice, or if our request to return the
defective object is not promptly complied with.
Please be advised that any subsequent improvement shall only be free of charge if a defect is found.
Any form of technical support, maintenance and customization is not a warranty service, but instead
shall be charged extra.
Additional guarantees
Although the hardware and software was developed and tested in-depth with greatest care, Hilscher
Gesellschaft für Systemautomation mbH shall not assume any guarantee for the suitability thereof
for any purpose that was not confirmed in writing. No guarantee can be granted whereby the
hardware and software satisfies your requirements, or the use of the hardware and/or software is
uninterruptable or the hardware and/or software is fault-free.
It cannot be guaranteed that patents and/or ownership privileges have not been infringed upon or
violated or that the products are free from third-party influence. No additional guarantees or promises
shall be made as to whether the product is market current, free from deficiency in title, or can be
integrated or is usable for specific purposes, unless such guarantees or promises are required under
existing law and cannot be restricted.
The customer hereby expressly acknowledges that this document contains trade secrets,
information protected by copyright and other patent and ownership privileges as well as any related
rights of Hilscher Gesellschaft für Systemautomation mbH. The customer agrees to treat as
confidential all of the information made available to customer by Hilscher Gesellschaft für
Systemautomation mbH and rights, which were disclosed by Hilscher Gesellschaft für
Systemautomation mbH and that were made accessible as well as the terms and conditions of this
agreement itself.
The parties hereby agree to one another that the information that each party receives from the other
party respectively is and shall remain the intellectual property of said other party, unless provided for
otherwise in a contractual agreement.
The customer must not allow any third party to become knowledgeable of this expertise and shall
only provide knowledge thereof to authorized users as appropriate and necessary. Companies
associated with the customer shall not be deemed third parties. The customer must obligate
authorized users to confidentiality. The customer should only use the confidential information in
connection with the performances specified in this agreement.
The customer must not use this confidential information to his own advantage or for his own purposes
or rather to the advantage or for the purpose of a third party, nor must it be used for commercial
purposes and this confidential information must only be used to the extent provided for in this
agreement or otherwise to the extent as expressly authorized by the disclosing party in written form.
The customer has the right, subject to the obligation to confidentiality, to disclose the terms and
conditions of this agreement directly to his legal and financial consultants as would be required for
the customer's normal business operation.
Export provisions
The delivered product (including technical data) is subject to the legal export and/or import laws as
well as any associated regulations of various countries, especially such laws applicable in Germany
and in the United States. The products / hardware / software must not be exported into such countries
for which export is prohibited under US American export control laws and its supplementary
provisions. You hereby agree to strictly follow the regulations and to yourself be responsible for
observing them. You are hereby made aware that you may be required to obtain governmental
approval to export, reexport or import the product.
6.5 Contacts
Headquarters
Germany
Hilscher Gesellschaft für
Systemautomation mbH
Rheinstrasse 15
65795 Hattersheim
Phone: +49 (0) 6190 9907-0
Fax: +49 (0) 6190 9907-50
E-Mail: [email protected]
Support
Phone: +49 (0) 6190 9907-99
E-Mail: [email protected]
Subsidiaries
China Japan
Hilscher Systemautomation (Shanghai) Co. Ltd. Hilscher Japan KK
200010 Shanghai Tokyo, 160-0022
Phone: +86 (0) 21-6355-5161 Phone: +81 (0) 3-5362-0521
E-Mail: [email protected] E-Mail: [email protected]
Support Support
Phone: +86 (0) 21-6355-5161 Phone: +81 (0) 3-5362-0521
E-Mail: [email protected] E-Mail: [email protected]
France Korea
Hilscher France S.a.r.l. Hilscher Korea Inc.
69500 Bron Seongnam, Gyeonggi, 463-400
Phone: +33 (0) 4 72 37 98 40 Phone: +82 (0) 31-789-3715
E-Mail: [email protected] E-Mail: [email protected]
Support
Phone: +33 (0) 4 72 37 98 40 Switzerland
E-Mail: [email protected] Hilscher Swiss GmbH
4500 Solothurn
India Phone: +41 (0) 32 623 6633
Hilscher India Pvt. Ltd. E-Mail: [email protected]
Pune, Delhi, Mumbai Support
Phone: +91 8888 750 777 Phone: +49 (0) 6190 9907-99
E-Mail: [email protected] E-Mail: [email protected]
Italy USA
Hilscher Italia S.r.l. Hilscher North America, Inc.
20090 Vimodrone (MI) Lisle, IL 60532
Phone: +39 02 25007068 Phone: +1 630-505-5301
E-Mail: [email protected] E-Mail: [email protected]
Support Support
Phone: +39 02 25007068 Phone: +1 630-505-5301
E-Mail: [email protected] E-Mail: [email protected]