FB_IEC870_5_104Slave
![FB_IEC870_5_104Slave 1:](Images/gif/984745611__en-US__Web.gif)
An instance of the function block FB_IEC870_5_104Slave can be used to implement an IEC 60870-5-104 substation (slave, high-level) in the TwinCAT PLC. An instance of the function block can only establish a connection with a master.
![]() | To implement redundant systems with two or more connections to the master, please use the FB_IEC870_5_104SlaveGrp function block. |
VAR_IN_OUT
VAR_IN_OUT
hServer : T_HSERVER;
END_VAR
hServer: TCP/IP server handle. The internal parameters of the server handle variable first have to be initialised via the F_CreateServerHnd function.
VAR_INPUT
VAR_INPUT
protPara : ST_IEC870_5_104ProtocolParams;
sysPara : ST_IEC870_5_101SystemParams;
pAOEntries : POINTER TO ARRAY[0..IEC870_ANYSIZE_ARRAY] OF ST_IEC870_5_101AODBEntry := 0;
cbAOEntries : UDINT := 0;
pInputs : PVOID := 0;
cbInputs : UDINT := 0;
pOutputs : PVOID := 0;
cbOutputs : UDINT := 0;
pMemory : PVOID := 0;
cbMemory : UDINT := 0;
pData : PVOID := 0;
cbData : UDINT := 0;
bEnable : BOOL := TRUE;
END_VAR
protPara: IEC 60870-5-104 protocol parameters.
sysPara: System parameter.
pAOEntries: Address of the first application object database variable.
cbAOEntries: Byte size of the application object database variables.
pInputs: Address of the PLC process data area for the inputs.
cbInputs: Byte size of the PLC process data area for the inputs.
pOutputs: Address of the PLC process data area for the outputs.
cbOutputs: Byte size of the PLC process data area for the outputs.
pMamory: Address of the PLC process data area for the flags.
cbMamory: Byte size of the PLC process data area for the flags.
pData: Address of the PLC data area.
cbData: Byte size of the PLC data area.
bEnable: Activates/deactivates the function block (communication and connection).
The addresses can be determined with the ADR operator and the byte sizes with the SIZEOF operator.
VAR_OUTPUT
VAR_OUTPUT
system : ST_IEC870_5_104SystemInterface;
eConnState : E_SocketConnectionState := eSOCKET_DISCONNECTED;
eDTState : E_IEC870_5_104DataTransferState := eIEC870_STOPDT;
END_VAR
system: System interface. This variable is used by other IEC application functions as a communication interface for the IEC device (here: substation).
- Member variable system.device is expected by the F_iecSetAOQuality function as VAR_IN_OUT parameter, for example.
- Member variable system.device.errors is a device error FIFO. The PLC application can read and analyses registered errors.
eConnState: status of the TCP/IP connection with the master.
eDTState: Status of the IEC 60870-5-104 data exchange (STARTDT, STOPDT)
Examples (high-level interface):
Further examples:
Call in FBD:
PROGRAM test
VAR
AODB : ARRAY[0..49] OF ST_IEC870_5_101AODBEntry;
inputs AT%IB0 : ARRAY[0..999] OF BYTE;
outputs AT%QB0 : ARRAY[0..999] OF BYTE;
memory AT%MB0 : ARRAY[0..999] OF BYTE;
data : ARRAY[0..999] OF BYTE;
hServer : T_HSERVER;
server : FB_IEC870_5_104Slave;
bEnable : BOOL := TRUE;
protPara : ST_IEC870_5_104ProtocolParams;
sysPara : ST_IEC870_5_101SystemParams := ( asduAddr := 7 );
eConnState : E_SocketConnectionState;
eDTState : E_IEC870_5_104DataTransferState;
bError : BOOL;
iecError : ST_IEC870_5_101ErrorFifoEntry;
END_VAR
In the following example, the device error FIFO is read cyclically, and the registered errors are written to the TwinCAT XAE->"Error List" window.
REPEAT
server.system.device.errors.RemoveError( getError=>iecError, bOk=>bError );
IF bError THEN
ADSLOGSTR( ADSLOG_MSGTYPE_ERROR OR ADSLOG_MSGTYPE_LOG, 'IEC 60870-5-104 slave error: 0x%s',
DWORD_TO_HEXSTR( iecError.nErrId, 8, FALSE) );
END_IF
UNTIL NOT bError
END_REPEAT
Requirements
Development environment |
Target system type |
PLC libraries to be linked (category group) |
---|---|---|
TwinCAT v3.1.4012.0 |
PC oder CX (x86, x64, ARM) |
Tc2_IEC60870_5_10x (Communication->IEC60870) |