ServerSerial_extended (FB)¶
FUNCTION_BLOCK ServerSerial_extended EXTENDS ModbusFB.ServerSerial
MODBUS Serial server (slave) with non-standard extensions.
ServerSerial_extended actually supports beyond the ServerSerial features: - “wide register” (registers > 16bit) Other non-standard extensions might be added here, but not on ServerSerial.
“wide registers” and endianess¶
The MODBUS standard defines the length of input / holding registers to read/write with 16-bit - no way out of this. The message definitions in the MODBUS standard come with some room for non-standard interpretation. FC03 Read Holding Registers should be used as an example here:
Request: Quantity of Registers Response: Byte count
So a non-standard MODBUS server can inform a client in the response indirectly about the register width (Response:Byte count = Request:Quantity of Registers * register width in Bytes). This fact leaded some vendors to implement MODBUS devices with registers > 16bit. Because the CODESYS ModbusFB lib should be usable with such non-standard devices (clients as well as servers) there is a Server*_extended and some related ClientRequest*RegistersWide in this library. Following client requests can be used with “wide registers”: - Read Holding Registers - Read Input Registers - Write Multiple registers - Read/Write Multiple registers
Following client requests can not be used with “wide registers” because of their MODBUS protocol data unit (PDU) definition: - Write Single Register - Mask Write Register because the “data item” width is explicitly defined to be 16bit.
A standard MODBUS client requesting register data from such a non-standard MODBUS server, unfortunately requesting register data from a register > 16bit gets confronted with an invalid Response: Byte count <> Quantity of Registers * 2, and will most likely drop such a response as invalid or less likely put out error/warning/information on this fact.
The MODBUS standard defines byte ordering in MODBUS messages to read/write 16-bit registers. The MODBUS standard doesnt define anything beyond this - so there is no rule for byte ordering in “wide registers”. This ServerSerial_extended is using the same byte ordering for register data > 16bit as defined in the MODBUS standard (“big-Endian” representation). So for example register size 32bit value 0x12345678 - the first byte sent is 0x12 then 0x34, 0x56, 0x78.
Please visit https://forge.codesys.com/prj/codesys-example/modbus/home to find examples.
- InOut:
- Scope - Name - Type - Initial - Comment - Inherited from - Input - xEnable- BOOL- FALSE - Enables the server, take over the configuration information fcsSupported and dataModel. If the “data model” (tableDefinitions) contains configuration errors, the Server will not got busy (xBusy = FALSE). - Server - fcsSupported- SupportedFcs- Constants.SUPPORTED_FCS_SIMPLE_SERVER - Supported “function codes”, accepted at xEnable FALSE => TRUE. In case fcsSupported is not assigned by the application it defaults to |Constants.SUPPORTED_FCS_SIMPLE_SERVER|. - Server - dataModel- TableDefinitions- “data model”, accepted at xEnable FALSE => TRUE. - Server - tInactivityInfoTime- UDINT- 0 - “inactivity info time” (in milliseconds). If no valid requests are received in this time xInactive is signaling inactivity - default = 0 -> no “inactivity info”. - Server - Output - xRunning- BOOL- Server is up and running, waiting for requests. - Server - xError- BOOL- Error - Server - eErrorID- Error- Error status - Server - xInactive- BOOL- No valid requests received for tInactivityTimeOut. - Server - udiNumMsgRecv- UDINT- Number of request messages received since enabling the Server. - Server - udiNumMsgReply- UDINT- Number of reply messages send since enabling the Server. - Server - udiNumMsgExcReply- UDINT- Number of exception reply messages send since enabling the Server. - Server - udiNumMsgExcReplyIllFct- UDINT- Number of exception reply messages send since enabling the Server, signaling illegal function. - Server - udiNumMsgExcReplyIllDataAdr- UDINT- Number of exception reply messages send since enabling the Server, signaling illegal data address. - Server - udiNumMsgExcReplyIllDataValue- UDINT- Number of exception reply messages send since enabling the Server, signaling illegal data value. - Server - xReadRequest- BOOL- Read request(s) happened since last call, rejected requests included. - Server - udiNumReadRequests- UDINT- Read request counter, rejected requests included. - Server - xWriteRequest- BOOL- Write request(s) happened since last call, rejected requests included. - Server - udiNumWriteRequests- UDINT- Write request counter, rejected requests included. - Server - Input - uiUnitId- UINT- 1 - Unit-Id / Slave address. Only read when rising edge on xEnable occurs. Slave address has to be in range 1 .. 247 according to MODBUS standard. - ServerSerial - iPort- SysCom.SYS_COM_PORTS- SysCom.SYS_COM_PORTS.SYS_COMPORT_NONE - Serial port. Only read when rising edge on xEnable occurs. - ServerSerial - dwBaudrate- SysCom.SYS_COM_BAUDRATE- SysCom.SYS_COM_BAUDRATE.SYS_BR_115200 - Baud rate. Only read when rising edge on xEnable occurs. - ServerSerial - byDataBits- BYTE- 8 - Number of data bits/BYTE, 4-8. Only read when rising edge on xEnable occurs. - ServerSerial - eParity- SysCom.SYS_COM_PARITY- SysCom.SYS_COM_PARITY.SYS_NOPARITY - Parity. Only read when rising edge on xEnable occurs. - ServerSerial - eStopBits- SysCom.SYS_COM_STOPBITS- SysCom.SYS_COM_STOPBITS.SYS_ONESTOPBIT - Stop bits. Only read when rising edge on xEnable occurs. - ServerSerial - eDTRcontrol- SysCom.SYS_COM_DTR_CONTROL- SysCom.SYS_COM_DTR_CONTROL.SYS_DTR_CONTROL_DISABLE - DTR control. Only read when rising edge on xEnable occurs. - ServerSerial - eRTScontrol- SysCom.SYS_COM_RTS_CONTROL- SysCom.SYS_COM_RTS_CONTROL.SYS_RTS_CONTROL_DISABLE - RTS control. Only read when rising edge on xEnable occurs. - ServerSerial - eRtuAscii- RtuAscii- RtuAscii.RTU - RTU / ASCII. Only read when rising edge on xEnable occurs. - ServerSerial - udiLogOptions- UDINT- LoggingOptions.ServerStartStop - Logging options. - ServerSerial 
