This class realises the server side of the MODBUS/TCP slave protocol.
More...
|
| int | readHeader (int sockIdx) |
| | Sub-routine to read and validate the Modbus/TCP header. More...
|
| |
| int | readPayload (int sockIdx, int result) |
| | Sub-routine to read and validate the Modbus/TCP payload. More...
|
| |
| void | terminateSocket (int sockIdx, DisconnectReason reason) |
| | Sub-routine to manage termination of connection. More...
|
| |
|
| int | isStarted () |
| | Returns whether server has been started up. More...
|
| |
| int | setPort (unsigned short portNo) |
| | Sets the TCP port number to be used by the protocol. More...
|
| |
|
void | installIpAddrValidationCallBack (int(*f)(const char *masterIpAddrSz)) |
| |
| void | installIpAddrValidationCallBack (int(*f)(void *userData, const char *masterIpAddrSz), void *userData) |
| | This function installs a callback handler for validating a master's IP address. More...
|
| |
|
void | installMasterPollNotifyCallBack (int(*f)(const char *masterIpAddrSz)) |
| |
| void | installMasterPollNotifyCallBack (int(*f)(void *userData, const char *masterIpAddrSz), void *userData) |
| | This function installs a callback handler to be called everytime a master polls this slave and allows a forced closure of the master connection by returning 0. More...
|
| |
| unsigned short | getPort () |
| | Returns the TCP port number used by the protocol. More...
|
| |
This class realises the server side of the MODBUS/TCP slave protocol.
It provides functions to start-up and to execute the server engine. This server engine can handle multiple master connections and is implemented as a single threaded TCP server. Upon receipt of a valid master query the server engine calls Data Provider methods to exchange data with the user application. For a more detailed description which Modbus data and control functions have been implemented in the server engine seesection Server Functions common to all Modbus Protocol Flavours.
- See also
- Server Functions common to all Modbus Protocol Flavours, IP based Protocols
-
MbusDataTableInterface
◆ MbusTcpSlaveProtocol()
◆ startupServer() [1/2]
Puts the Modbus server into operation.
The server accepts connections on any interface.
This function opens a TCP/IP socket, binds the configured TCP port to the Modbus/TCP protocol and initialises the server engine.
- Note
- If the configured TCP port is below IPPORT_RESERVED (usually 1024), the process has to run with root privilege!
- Returns
- FTALK_SUCCESS on success or error code. See Error Management for a list of error codes.
Reimplemented from MbusIpServerBase.
References MbusIpServerBase::startupServer().
◆ startupServer() [2/2]
| int startupServer |
( |
const char *const |
hostName | ) |
|
|
virtual |
Puts the Modbus server into operation.
The server accepts connections only on the interfaces which match the supplied hostname or IP address. This method allows to run different servers on multiple interfaces (so called multihomed servers).
This function opens a TCP/IP socket, binds the configured TCP port to the Modbus/TCP protocol and initialises the server engine.
- Note
- If the configured TCP port is below IPPORT_RESERVED (usually 1024), the process has to run with root privilege!
- Parameters
-
| hostName | String with IP address for a specific host interface or NULL if connections are accepted on any interface |
- Returns
- FTALK_SUCCESS on success or error code. See Error Management for a list of error codes.
Implements MbusIpServerBase.
References FTALK_LISTEN_FAILED, FTALK_OPEN_ERR, FTALK_PORT_ALREADY_BOUND, FTALK_PORT_NO_ACCESS, FTALK_PORT_NOT_AVAIL, FTALK_SUCCESS, FTALK_TCPIP_CONNECT_ERR, MAX_CONNECTIONS, and shutdownServer().
◆ shutdownServer()
◆ serverLoop()
◆ setConnectionTimeOut()
| int setConnectionTimeOut |
( |
long |
masterTimeOut | ) |
|
Configures connection time-out.
This allows to detect broken TCP connections. The TCP connection is closed if a valid request is not received within the configured time period. A value of 0 disables the time-out. Default value is 0 (disabled).
- Parameters
-
| masterTimeOut | Timeout value in ms (Range: 0 - 3600000), 0 disables time-out |
- Return values
-
| FTALK_SUCCESS | Success |
| FTALK_ILLEGAL_ARGUMENT_ERROR | Argument out of range |
| FTALK_ILLEGAL_STATE_ERROR | Server already running |
References FTALK_ILLEGAL_ARGUMENT_ERROR, FTALK_ILLEGAL_STATE_ERROR, FTALK_SUCCESS, and MbusIpServerBase::isStarted().
◆ getConnectionTimeOut()
| long getConnectionTimeOut |
( |
| ) |
|
|
inline |
Returns the connection time-out setting.
- Returns
- Timeout value in ms
◆ installMasterDisconnectCallBack()
| void installMasterDisconnectCallBack |
( |
void(*)(void *userData, const char *masterIpAddrSz, DisconnectReason reason) |
f, |
|
|
void * |
userData |
|
) |
| |
This function installs a callback handler to be called in the event of a master disconnection.
A void pointer argument can be used to pass additional data, for example a reference to the data table object or the protocol instance.
This routine can be used to implement custom time-out mechanisms.
- Parameters
-
| f | Callback function pointer |
| userData | A void pointer which is passed as argument to the callback. |
◆ readHeader()
| int readHeader |
( |
int |
sockIdx | ) |
|
|
protected |
Sub-routine to read and validate the Modbus/TCP header.
- Parameters
-
| sockIdx | Index of socket within the connectionSocketArr |
- Returns
- -1 for error, 0 for graceful socket disconnect or payload data length
◆ readPayload()
| int readPayload |
( |
int |
sockIdx, |
|
|
int |
dataLen |
|
) |
| |
|
protected |
Sub-routine to read and validate the Modbus/TCP payload.
- Parameters
-
| sockIdx | Index of socket within the connectionSocketArr |
| dataLen | Length of the payload (read from MPAB header) |
- Returns
- -1 for error, 0 for graceful socket disconnect
References MasterInfo::transactionId.
◆ terminateSocket()
| void terminateSocket |
( |
int |
sockIdx, |
|
|
DisconnectReason |
reason |
|
) |
| |
|
protected |
Sub-routine to manage termination of connection.
- Parameters
-
| sockIdx | Index of socket within the connectionSocketArr |
| reason | A enum indicating why the termination occured |
◆ isStarted()
Returns whether server has been started up.
- Return values
-
| true | = started |
| false | = shutdown |
Implements MbusSlaveServer.
◆ setPort()
| int setPort |
( |
unsigned short |
portNo | ) |
|
|
inherited |
Sets the TCP port number to be used by the protocol.
- Note
- If the configured TCP port is below IPPORT_RESERVED (usually 1024), the process has to run with root or administrator privilege!
-
This parameter must be set before starting the server in order to come into effect.
- Parameters
-
| portNo | Port number the server shall listen on |
- Return values
-
| FTALK_SUCCESS | Success |
| FTALK_ILLEGAL_STATE_ERROR | Server already running |
References FTALK_ILLEGAL_STATE_ERROR, FTALK_SUCCESS, and MbusIpServerBase::isStarted().
◆ installIpAddrValidationCallBack()
| void installIpAddrValidationCallBack |
( |
int(*)(void *userData, const char *masterIpAddrSz) |
f, |
|
|
void * |
userData |
|
) |
| |
|
inherited |
This function installs a callback handler for validating a master's IP address.
Pass a pointer to a function with checks a master's IP address and either accepts or rejects a master's connection.
- Parameters
-
| f | Callback function pointer |
| userData | A void pointer which is passed as argument to the callback. |
- Returns
- Returns 1 to accept a connection or 0 to reject it.
◆ installMasterPollNotifyCallBack()
| void installMasterPollNotifyCallBack |
( |
int(*)(void *userData, const char *masterIpAddrSz) |
f, |
|
|
void * |
userData |
|
) |
| |
|
inherited |
This function installs a callback handler to be called everytime a master polls this slave and allows a forced closure of the master connection by returning 0.
This routine can be used to implement custom time-out mechanisms.
- Parameters
-
| f | Callback function pointer |
| userData | A void pointer which is passed as argument to the callback. |
- Returns
- Returns 1 to process the poll or 0 to reject and drop the connection.
◆ getPort()
| unsigned short getPort |
( |
| ) |
|
|
inlineinherited |
Returns the TCP port number used by the protocol.
- Returns
- Port number used by the protocol
◆ addDataTable()
Associates a protocol object with a Data Provider and a Modbus slave ID.
- Parameters
-
| slaveAddr | Modbus slave address for server to listen on (-1 - 255). 0 is regarded as a valid value for a MODBUS/TCP server address. A value of -1 means the server disregards the slave address and listens to all slave addresses. 0 or -1 is only valid for MODBUS/TCP! |
| dataTablePtr | Modbus data table pointer. Must point to a Data Provider object derived from the MbusDataTableInterface class. The Data Provider is the interface between your application data and the Modbus network. |
- Returns
- FTALK_SUCCESS on success or error code. See Error Management for a list of error codes.
References FTALK_ILLEGAL_ARGUMENT_ERROR, and FTALK_SUCCESS.
◆ getConnectionStatus()
| int getConnectionStatus |
( |
| ) |
|
|
inlineinherited |
Checks if a Modbus master is polling periodically.
- Return values
-
| true | = A master is polling at a frequency higher than the master transmit time-out value |
| false | = No master is polling within the time-out period |
- Note
- The master transmit time-out value must be set > 0 in order for this function to work.
◆ setTimeout()
| int setTimeout |
( |
long |
timeOut | ) |
|
|
inherited |
Configures master activity time-out supervision.
The slave can monitor whether a master is actually polling or not. This function sets the activity time-out to the specified value. A value of 0 disables the time-out, which stops time-out notifications being sent to the Data Provider. Default value is 1000 ms.
- Note
- The time-out does not check whether a master is sending valid frames. The transmission of characters is sufficient to avoid the time-out.
- Parameters
-
| timeOut | Timeout value in ms (Range: 0 - 100000), 0 disables time-out |
- Return values
-
| FTALK_SUCCESS | Success |
| FTALK_ILLEGAL_ARGUMENT_ERROR | Argument out of range |
References FTALK_ILLEGAL_ARGUMENT_ERROR, and FTALK_SUCCESS.
◆ getTimeout()
Returns the currently set master activity time-out value.
- Returns
- Timeout value in ms
◆ disableExceptionReplies()
| void disableExceptionReplies |
( |
| ) |
|
|
inherited |
Supress exception replies to be sent.
With this option only positive replies are sent to the master. All failure replies are silently discarded. This option can be useful if redundant Modbus devices are used. In this scenario supressing the reply would trigger a swap-over of the redundant devices.
◆ enableExceptionReplies()
| void enableExceptionReplies |
( |
| ) |
|
|
inherited |
Enables exception replies after they have been turned off.
Sending exception replies in case of slave failures is the normal mode of operation.
◆ getTotalCounter()
| unsigned long getTotalCounter |
( |
| ) |
|
|
inlineinherited |
Returns how often a message transfer has been executed.
- Returns
- Counter value
◆ getSuccessCounter()
| unsigned long getSuccessCounter |
( |
| ) |
|
|
inlineinherited |
Returns how often a message transfer was successful.
- Returns
- Counter value
◆ getPackageVersion()
| const TCHAR * getPackageVersion |
( |
| ) |
|
|
staticinherited |
Returns the library version number.
- Returns
- Version string