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
- Questo topic ha 1 risposta, 1 partecipante ed è stato aggiornato l'ultima volta 3 settimane fa da
Sergio Bertana.
-
AutorePost
-
Maggio 16, 2025 alle 3:39 pm #82306
Anonimo
InattivoPer 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?
Maggio 16, 2025 alle 3:56 pm #82310Sergio Bertana
Amministratore del forumVisto 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]
-
AutorePost
- Devi essere connesso per rispondere a questo topic.