IP-Adresse setzen

Dieses Beispiel zeigt den schreibenden Zugriff auf Daten der IPC-Diagnose über generelle Funktionsbausteine. In der gleichen Art und Weise kann auch auf alle anderen Elemente der Module der IPC-Diagnose zugegriffen werden.

IP-Adresse setzen 1:

Aktive Netzwerkverbindung

Die Änderung dieser Einstellungen erfordert jeweils eine aktive Netzwerkverbindung für den gewählten Ethernet/EtherCAT-Adapter. Ohne aktive Netzwerkverbindung können also keine Parameter (vor-) eingestellt werden.

Beispiel zum Setzen der IP-Adresse eines Beckhoff IPCs

Variablendeklaration

PROGRAM MAIN
// First DHCP is set off and then the given new IP address is set.
// The program code is executed only one time. To restart the program set bStart TRUE again.
VAR
    bStart     : BOOL := TRUE;
    nState     : INT := 100;
    fbScan     : FB_MDP_ScanModules;
    fbWrite    : FB_MDP_Write;
    stMDPAddr  : ST_MDP_Addr;
    bDHCP      : BOOL;
    sIP        : T_IPv4Addr := '174.18.3.154'; // the new ip address 
    bError     : BOOL;
    nErrID     : UDINT;
END_VAR 

Programmcode

CASE nState OF
100: // idle
    IF bStart THEN
        bStart := FALSE;
        nState := 00;
    END_IF

00: (* scan MDP module list for dyn.module id of NIC module *)
    fbScan(
        bExecute    := TRUE,
        nModuleType := eMDP_ModT_NIC,
        iModIdx     := 0, (* index of NIC module / network port *)
        sAmsNetId   := ''
        );
 
    nState := 01;
 
01: 
    fbScan( bExecute:= FALSE );
 
    IF NOT fbScan.bBusy THEN
        IF NOT fbScan.bError THEN
            stMDPAddr.nArea     := INT_TO_BYTE(eMDP_Area_ConfigArea);
            stMDPAddr.nModuleId := fbScan.nDynModuleId;
            stMDPAddr.nTableId  := 1;
            nState              := 10;
        ELSE
            bError              := TRUE;
            nErrID              := fbScan.nErrID;
            nState              := 00;
        END_IF
    END_IF

10: // set DHCP off
    stMDPAddr.nSubIdx := 4; // DHCP
    bDHCP             := FALSE;
 
    fbWrite(
        bExecute      := TRUE,
        stMDP_DynAddr := stMDPAddr,
        pSrcBuf       := ADR(bDHCP),
        cbSrcBufLen   := SIZEOF(bDHCP),
        sAmsNetId     := ''
         );
 
    nState:= 11;

11:
    fbWrite( bExecute:= FALSE );
    IF NOT fbWrite.bBusy THEN
        IF NOT fbWrite.bError THEN
            nState     := 20;
        ELSE
            bError     := TRUE;
            nErrID     := fbWrite.nErrID;
            nState     := 10;
        END_IF
    END_IF

20: // set new IP address
    stMDPAddr.nSubIdx := 2; // IP address
    fbWrite(
        bExecute      := TRUE,
        stMDP_DynAddr := stMDPAddr,
        pSrcBuf       := ADR(sIP),
        cbSrcBufLen   := LEN(sIP),
        sAmsNetId     := ''
    );
 
    nState := 21;

21:
    fbWrite( bExecute:= FALSE );
    IF NOT fbWrite.bBusy THEN
        IF NOT fbWrite.bError THEN
            nState     := 100; (* NIC settings executed *)
        ELSE
            bError     := TRUE;
            nErrID     := fbWrite.nErrID;
            nState     := 20;
        END_IF
    END_IF
END_CASE