Vai al contenuto

Impostare da PLC su HMI l’indirizzo IP di comunicazione

Home Forum Discussioni su problematiche generali Impostare da PLC su HMI l’indirizzo IP di comunicazione

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Autore
    Post
  • #82306
    Anonimo
    Inattivo

    Per inquadrare il topic illustro il mio scenario.

    Realizziamo attrezzature che impiegano i Vs moduli PLC SlimLine con un pannello operatore Weintek. Le attrezzature vengono connesse dal cliente alla propria rete ethernet dove solitamente vi è un server DHCP che rilascia gli indirizzi IP ai dispositivi in rete.

    Il modulo PLC ed il pannello HMI acquisiscono gli indirizzi automaticamente dal server DHCP, ora il problema è che occorre impostare nell’HMI l’indirizzo IP acquisito dal PLC in modo da permettere la comunicazione.

    Esiste una soluzione a questo problema?

    #82310
    Sergio Bertana
    Amministratore del forum

    Visto che acquisendo nuovi indirizzi IP da un server DHCP sia il PLC che il pannello la comunicazione Modbus TCP non è più operativa, l’unica soluzione che posso proporre è di connettere l’HMI al PLC oltre che via ethernet anche con una connessione seriale. L’idea è di definire su HMI un nuovo Device/Server di tipo ELSIST MODBUS RTU che comunicherà in RS232 con il modulo PLC.

    Tramite questa comunicazione Modbus RTU l’HMI potrà acquisire dal PLC l’indirizzo IP da assegnare alla connessione Modbus TCP che è la connessione principale quella in cui transita tutta la comunicazione tra HMI e PLC. Ipotizzando di avere due device nell’HMI avremo che il dispositivo Modbus TCP sarà il Local Device 4, i registri di definizione del suo indirizzo IP sono LW-9600, LW-9601, LW-9602, LW-9603, quindi per impostarli dovremo programmare un Data Transfer globale di un array di 4 variabili UINT dal PLC all’HMI (Screenshot).

    In questo modo modificando i valori nell’array variamo l’indirizzo sull’HMI, per accettare la variazione occorre forzare la riconnessione del dispostivo 4, settando LB-10070. Per la sua attivazione ho realizzato una macro eseguita a tempo nell’HMI che alla variazione del valore nei registri di definizione indirizzo IP esegue il set del bit di force. La macro utilizza 2 LW nell’HMI (LW-0, LW-1) per salvare l’indirizzo IP attivo Ecco il listato.

    // =============================================================================
    // MACRO "ReconnectDevice"
    // =============================================================================
    // La macro è eseguita a tempo, viene controllato valore 4 LW di definizione
    // indirizzo IP PLC a cui connettersi. Su variazione valore viene settato bit
    // LB-10070 forced to reconnect device 4 (ethernet)
    // -----------------------------------------------------------------------------
    
    macro_command main()
    bool SBit=true
    short LWValue=0
    unsigned int IPRead=0, IPMemo=0 
    
    // Si utilizzano 2 LW per salvare valore a 32 bits indirizzo IP.
    
    GetData(LWValue, "Local HMI", LW, 9600, 1) //Device 4's IP0
    IPRead=LWValue
    
    GetData(LWValue, "Local HMI", LW, 9601, 1) //Device 4's IP1
    IPRead=(IPRead*256)+LWValue
    
    GetData(LWValue, "Local HMI", LW, 9602, 1) //Device 4's IP2
    IPRead=(IPRead*256)+LWValue
    
    GetData(LWValue, "Local HMI", LW, 9603, 1) //Device 4's IP3
    IPRead=(IPRead*256)+LWValue
    
    // Leggo valore di IPMemo e confronto con valore IP letto.
    
    GetData(IPMemo, "Local HMI", LW, 0, 1) //IP memo
    if (IPRead <> IPMemo) then
        SetData(IPRead, "Local HMI", LW, 0, 1) //IP memo
        SetData(SBit, "Local HMI", LB, 10070, 1)
    end if
    
    end macro_command

    Nel PLC SlimLine occorre realizzare un programma che trasferisce l’indirizzo IP nelle variabili acquisite dal data transfer dell’HMI. Conviene eseguire il programma in task Back, l’indirizzo IP potrebbe cambiare durante il funzionamento il server DHCP potrebbe inviare un nuovo indirizzo.

    VAR
        i : UDINT; (* Auxiliary variable *)
        IPValue : ARRAY[0..3] OF BYTE; (* IP address value *)
        HMIIP AT %MW100.16 : ARRAY[0..3] OF UINT; (* HMI IP definition *)
    END_VAR
    
    // *****************************************************************************
    // PROGRAM "SetHMIIPAddress"
    // *****************************************************************************
    // Read some ETH0 informations.
    // -----------------------------------------------------------------------------
    
        // -------------------------------------------------------------------------
        // READ ETH0 INFORMATIONS
        // -------------------------------------------------------------------------
        // Read the IP address and return it as a string.
    
        eTO_JUNK(SysOSIDValue(FALSE, OSID_ETH0_ACT_IP, ADR(IPValue)));
        FOR i:=0 TO 3 DO HMIIP[i]:=TO_UINT(IPValue[i]); END_FOR;
    
    // [End of file]
Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Devi essere connesso per rispondere a questo topic.