Connexion de périphériques
ThingWorx Kepware Server facilite la communication dans les domaines de l'automatisation et l'IoT industriels. Il est souvent utilisé dans les systèmes de production pour la fabrication de pièces en batch, la production et la distribution de pétrole et de gaz, l'automatisation de bâtiments, la production et la distribution d'énergie, et plus encore.
Quelques scénarios ont été observés avec ThingWorx 9.4 et versions antérieures, et Kepware 6.15 et versions antérieures, dans lesquels les propriétés distantes marquées comme Read from Edge affichent une qualité UNKNOWN et ne reflètent pas les valeurs les plus récentes du périphérique. Voici les scénarios dans lesquels cela a été observé.
Scénario
Description
Redémarrage de la plateforme
Lorsque la plateforme redémarre, elle ne peut pas lire les valeurs initiales à partir de l'Edge pour les propriétés distantes marquées comme Read from Edge. Ceci est dû à l'absence de connexions WebSocket actives.
L'Edge/Kepware se reconnecte après la déconnexion
Lorsque l'Edge/Kepware se reconnecte après une perte de connexion, il tente une liaison. Cette opération suit le modèle de liaison mentionné pour le scénario Redémarrage de la plateforme (scénario 1). Cela se produit parce qu'aucune propriété Edge n'est lue dans le processus.
Redémarrage du service de l'objet ou enregistrement à partir de Composer
Dans ce cas d'utilisation, l'objet est d'abord marqué comme arrêté. Cela entraîne la perte des liaisons avec le point de terminaison de l'Edge.
Lors de l'exécution de la méthode RestartThing, ThingWorx Platform commence par se lier au point de terminaison existant et appelle la méthode notifyPropertyUpdate. Ce périphérique Edge appelle GetPropertySubscriptions pour obtenir des informations sur les propriétés distantes et les liaisons. Cet appel peut échouer dès lors que l'objet n'a pas démarré. Certaines propriétés peuvent être mises à jour suite à l'appel de readPropertyValueFromEdge.
Démarrage à froid de Kepware
Lorsque Kepware démarre pour la première fois sur un système, il ne dispose d'aucune information sur la liaison des propriétés. Après le démarrage, Kepware se connecte à ThingWorx Platform et se lie à des objets distants. Kepware tente ensuite de synchroniser l'état en fonction des détails de propriété récupérés dans ThingWorx Platform. Dans le même temps, Kepware commence également à obtenir des données des périphériques/du matériel industriels (systèmes PLC, SCADA, DCS, etc.), et ThingWorx Platform tente alors de lire les propriétés avant que Kepware n'ait récupéré leurs valeurs sur le périphérique. Les données peuvent alors être associées à la qualité UNKNOWN.
Correction proposée
La solution consiste à introduire un nouveau mécanisme de récupération synchrone pour obtenir la valeur actuelle des propriétés distantes et à réorganiser les appels de service internes de manière à ce qu'ils n'aient lieu que lorsque l'objet est à l'état Running.
Un nouveau service SynchronizeModelState est introduit. Ce service sera utilisé par ThingWorx Platform pour envoyer des informations sur les modèles, telles que l'abonnement à des propriétés, les abonnements à des événements, et ainsi de suite. Ce service attend les valeurs de propriété actuelles de l'Edge en retour. Ce service résout également le problème de type "thundering herd" qui peut se produire lorsque ThingWorx Platform démarre ou redémarre ou que l'objet distant redémarre.
Lorsque le périphérique Edge se reconnecte, une nouvelle connexion WebSocket est établie et une demande de liaison est reçue. Dans cette solution, le périphérique Edge attend que la réponse de liaison soit envoyée au client, après quoi l'appel synchrone pour récupérer les propriétés actuelles est exécuté et la requête asynchrone déclenchée. La raison de cette attente de la liaison est qu'elle vise à éviter un appel cyclique et un blocage de la liaison.
Deux nouvelles propriétés sont ajoutées pour suivre l'état de la synchronisation entre ThingWorx Platform et le périphérique Edge. Ces deux propriétés seront définies une fois la synchronisation de l'état du périphérique Edge avec la plateforme effectuée. Ces propriétés seront réinitialisées au démarrage ou à l'arrêt de l'objet, ou à la déconnexion du périphérique Edge.
IsInitialStateSynchronized (Boolean) : indique si le périphérique Edge est actuellement synchronisé ou non avec ThingWorx Platform.
lastInitialStateSynchronized (DateTime) : la dernière fois que le périphérique Edge a synchronisé son état avec ThingWorx Platform.
Est-ce que cela a été utile ?