Best practice per lo sviluppo di soluzioni > Connessione di dispositivi
Connessione di dispositivi
ThingWorx Kepware Server consente la comunicazione per l'automazione e l'Industrial IoT. Viene spesso utilizzato nei sistemi di produzione per la produzione in batch di processi distinti, la produzione e la distribuzione di petrolio e gas, l'automazione degli edifici, la produzione e la distribuzione di energia e altro ancora.
Sono stati osservati alcuni scenari in ThingWorx 9.4 e versioni precedenti e Kepware 6.15 e versioni precedenti, in cui proprietà remote contrassegnate come Read from Edge mostrano la qualità UNKNOWN e non riflettono i valori più recenti del dispositivo. Sono stati osservati gli scenari seguenti:
Scenario
Descrizione
Riavvio della piattaforma
Al riavvio, la piattaforma non è in grado di leggere i valori iniziali dall'edge per le proprietà remote contrassegnate come Read from Edge. Ciò è dovuto all'assenza di connessioni WebSocket attive.
Edge/Kepware si riconnette dopo la disconnessione
Quando Edge/Kepware si riconnette dopo una perdita di connessione, tenta di effettuare l'associazione seguendo lo schema di associazione menzionato in Riavvio della piattaforma (scenario 1). Questo si verifica perché nel workflow non viene letta nessuna proprietà dell'edge.
Servizio RestartThing o salvataggio da Composer
In questo caso di utilizzo, l'oggetto viene prima contrassegnato come arrestato. In questo modo si perdono le associazioni con l'endpoint edge.
Durante il metodo RestartThing, ThingWorx Platform prima si associa all'endpoint esistente e chiama il metodo notifyPropertyUpdate. Questo edge chiama GetPropertySubscriptions per ottenere informazioni sulle proprietà e sulle associazioni remote. Questa chiamata potrebbe non andare a buon fine perché l'oggetto potrebbe non essere stato avviato. In seguito alla chiamata a readPropertyValueFromEdge, alcune proprietà potrebbero essere aggiornate.
Avvio a freddo di Kepware
Quando Kepware viene avviato per la prima volta in un sistema, non dispone di informazioni sull'associazione delle proprietà. Dopo l'avvio, Kepware si connette a ThingWorx Platform e si associa agli oggetti RemoteThing. Kepware quindi tenta di sincronizzare lo stato in base ai dettagli della proprietà recuperati da ThingWorx Platform. Contestualmente, Kepware inizia a ottenere dati anche da dispositivi/hardware industriali (ad esempio, PLC, sistemi SCADA, DCS e così via). In questa fase. ThingWorx Platform tenta di leggere le proprietà prima che Kepware recuperi il valore dal dispositivo. Questo può determinare come risultato dati con qualità UNKNOWN.
Correzione fornita
La soluzione prevede l'introduzione di un nuovo meccanismo di recupero sincrono per ottenere il valore corrente delle proprietà remote e riorganizzare le chiamate di servizio interne in modo che il valore venga richiamato solo quando l'oggetto si trova nello stato Running.
È stato introdotto un nuovo servizio, SynchronizeModelState, che verrà utilizzato da ThingWorx Platform per inviare informazioni sul modello, quali sottoscrizioni di proprietà, sottoscrizioni di eventi e così via. Il servizio prevede la restituzione da parte di Edge dei valori correnti delle proprietà. Inoltre risolve il problema di "thundering herd" che può verificarsi quando viene avviato o riavviato ThingWorx Platform o al riavvio di un oggetto remoto.
Quando Edge si riconnette, viene stabilita una nuova connessione WebSocket e viene ricevuta una richiesta di associazione. In questa soluzione, Edge attende l'invio della risposta di associazione al client, quindi esegue la chiamata sincrona per recuperare le proprietà correnti e attivare la richiesta asincrona. Il motivo per cui è opportuno attendere il completamento dell'associazione è impedire una chiamata ciclica e il blocco dell'associazione.
Vengono aggiunte due nuove proprietà per monitorare lo stato di sincronizzazione tra ThingWorx Platform e il dispositivo edge. Queste due proprietà vengono impostate dopo la sincronizzazione dello stato del dispositivo edge con la piattaforma. Verranno quindi reimpostate quando l'oggetto viene avviato o arrestato oppure quando il dispositivo edge si disconnette.
IsInitialStateSynchronized(Booleano) - Specifica se il dispositivo edge è attualmente sincronizzato con ThingWorx Platform.
lastInitialStateSynchronized(DateTime) - Ultimo aggiornamento dello stato del dispositivo edge in ThingWorx Platform.
È stato utile?