Tutoriel : implémenter l’architecture de la solution de référence Azure Industrial IoT

Les fabricants souhaitent déployer une solution d’IoT industriel globale à l’échelle mondiale et connecter tous leurs sites de production à cette solution afin d’accroître l’efficacité de chaque site de production individuel.

Ces gains d’efficacité permettent d’augmenter la production et de réduire la consommation d’énergie, ce qui baisse le coût des biens produits tout en améliorant leur qualité dans la plupart des cas.

La solution doit être aussi efficace que possible et prendre en charge tous les cas d’usage nécessaires tels que le monitoring des conditions, le calcul du TRG, les prévisions et la détection d’anomalie. À partir des insights obtenus de ces cas d’usage, dans un deuxième temps, une boucle de rétroaction numérique peut être créée pour pouvoir ensuite appliquer des optimisations et autres modifications aux processus de production.

L’interopérabilité est la clé pour réaliser un lancement rapide de l’architecture de solution, et l’utilisation de normes ouvertes comme OPC UA contribue considérablement à l’obtention de cette interopérabilité.

OPC UA (Open Platform Communications Unified Architecture) IEC 62541

Cette solution utilise OPC (Open Platform Communications) UA (Unified Architecture) IEC 62541 pour toutes les données OT (Operational Technology). Cette norme est décrite ici.

Architecture de la solution de référence

Architecture simplifiée (options à la fois Azure et Fabric) :

Diagramme d’une architecture IIoT simple.

Architecture détaillée (Azure uniquement) :

Diagramme d’une architecture IIoT.

Composants

Voici les composants impliqués dans cette solution :

Composant Description
Ressources industrielles Ensemble de lignes de production simulées avec OPC-UA hébergées dans des conteneurs Docker
Opérations Azure IoT Opérations Azure IoT est un plan de données unifié pour la périphérie. Il comprend un ensemble de services de données modulaires, évolutifs et hautement disponibles qui s’exécutent sur des clusters Kubernetes de périphérie avec Azure Arc.
Passerelle de données Cette passerelle connecte vos sources de données locales (telles que SAP) à Azure Logic Apps dans le cloud.
Azure Kubernetes Services Edge Essentials Cette implémentation Kubernetes s’exécute à la périphérie. Elle fournit des clusters Kubernetes à un ou plusieurs nœuds pour une configuration de la périphérie tolérante aux pannes. K3S et K8S sont tous les deux pris en charge. Elle s’exécute sur du matériel incorporé ou de classe PC, comme une passerelle industrielle.
Azure Event Hubs Répartiteur de messages cloud qui reçoit les messages OPC UA PubSub à partir de passerelles de périphérie et les stocke jusqu’à ce qu’ils soient récupérés par les abonnés.
Explorateur de données Azure La base de données de série chronologique et le service de tableau de bord frontal pour l’analytique cloud avancée, y compris la détection et les prédictions d’anomalies intégrées.
Azure Logic Apps Azure Logic Apps est une plateforme cloud que vous pouvez utiliser pour créer et exécuter des workflows automatisés avec peu ou pas de code.
Azure Arc Ce service cloud est utilisé pour gérer le cluster Kubernetes local à la périphérie. De nouvelles charges de travail peuvent être déployées via Flux.
Stockage Azure Ce service cloud est utilisé pour gérer le magasin de certificats OPC UA et les paramètres des charges de travail Kubernetes de périphérie.
Grafana géré par Azure Azure Managed Grafana est une plateforme de visualisation des données basée sur le logiciel Grafana de Grafana Labs. Grafana est créé en tant que service complètement managé, qui est hébergé et pris en charge par Microsoft.
Microsoft Power BI Microsoft Power BI est un ensemble de services logiciels, d’applications et de connecteurs SaaS qui travaillent de concert pour transformer vos sources de données disparates en insights cohérents, visuellement immersifs et interactifs.
Microsoft Dynamics 365 Field Service Microsoft Dynamics 365 Field Service est une solution SaaS clé en main pour la gestion de demandes de service sur le terrain.
UA Cloud Commander Cette application de référence open source convertit les messages envoyés à un répartiteur MQTT (Message Queue Telemetry Transport) ou Kafka (éventuellement dans le cloud) en demandes client/serveur OPC UA pour un serveur OPC UA connecté. L’application s’exécute dans un conteneur Docker.
UA Cloud Action Cette application cloud de référence open source interroge Azure Data Explorer pour obtenir une valeur de données spécifique. La valeur de données correspond à la pression de l’une des machines simulées de la ligne de production. Elle appelle UA Cloud Commander via Azure Event Hubs lorsqu’un certain seuil est atteint (4 000 mbar). UA Cloud Commander appelle ensuite la méthode OpenPressureReliefValve sur la machine via OPC UA.
UA Cloud Library UA Cloud Library est un magasin en ligne de modèles d’information OPC UA, hébergé par OPC Foundation ici.
UA Edge Translator Cette application de référence de connectivité industrielle open source traduit les interfaces de ressources propriétaires en OPC UA à l’aide de descriptions d’objets WoT (Web of Things) W3C comme schéma pour décrire l’interface des ressources industrielles.

Remarque

Dans un vrai déploiement, une opération aussi critique que l’ouverture d’une soupape de sécurité serait effectuée localement. Il s’agit juste d’un exemple simple pour montrer comment effectuer la boucle de rétroaction numérique.

Magasin de certificats OPC UA basé sur le cloud et stockage persistant

Lorsque des industriels exécutent des applications OPC UA, leurs fichiers de configuration, clés et certificats OPC UA doivent être conservés. Même si Kubernetes a la capacité de conserver ces fichiers dans des volumes, le cloud est un endroit plus sûr, en particulier sur les clusters à nœud unique où le volume serait perdu en cas de défaillance du nœud. Ce scénario est la raison pour laquelle les applications OPC UA utilisées dans cette solution stockent leurs fichiers de configuration, clés et certificats dans le cloud. Cette approche présente également l’avantage de fournir un même emplacement pour les certificats mutuellement approuvés pour toutes les applications OPC UA.

UA Cloud Library

Vous pouvez lire les modèles d’informations OPC UA directement depuis Azure Data Explorer. Pour ce faire, vous pouvez importer les nœuds OPC UA définis dans le modèle d’informations OPC UA dans une table pour rechercher davantage de métadonnées dans les requêtes.

Tout d’abord, configurez une stratégie d’appel Azure Data Explorer (ADX) pour UA Cloud Library en exécutant la requête suivante sur votre cluster ADX (assurez-vous que vous êtes administrateur de cluster ADX, configurable sous Autorisations dans l’onglet ADX du Portail Azure) :

.alter cluster policy callout @'[{"CalloutType": "webapi","CalloutUriRegex": "uacloudlibrary.opcfoundation.org","CanCall": true}]'

Exécutez ensuite la requête Azure Data Explorer suivante à partir du Portail Azure :

let uri='https://uacloudlibrary.opcfoundation.org/infomodel/download/\<insert information model identifier from the UA Cloud Library here\>';
let headers=dynamic({'accept':'text/plain'});
let options=dynamic({'Authorization':'Basic \<insert your cloud library credentials hash here\>'});
evaluate http_request(uri, headers, options)
| project title = tostring(ResponseBody.['title']), contributor = tostring(ResponseBody.contributor.name), nodeset = parse_xml(tostring(ResponseBody.nodeset.nodesetXml))
| mv-expand UAVariable=nodeset.UANodeSet.UAVariable
| project-away nodeset
| extend NodeId = UAVariable.['@NodeId'], DisplayName = tostring(UAVariable.DisplayName.['#text']), BrowseName = tostring(UAVariable.['@BrowseName']), DataType = tostring(UAVariable.['@DataType'])
| project-away UAVariable
| take 10000

Vous devez fournir deux éléments dans cette requête :

  • L’ID unique du modèle d’information de la bibliothèque UA Cloud Library à entrer dans le champ <insert information model identifier from cloud library here> de la requête ADX.
  • Le code de hachage de l’en-tête d’autorisation de base de vos informations d’identification UA Cloud Library (généré lors de l’inscription) à insérer dans le champ <insert your cloud library credentials hash here> de la requête ADX. Utilisez des outils comme https://www.debugbear.com/basic-auth-header-generator pour générer cela.

Par exemple, pour afficher le modèle d’information du serveur OPC UA de poste de simulation de la ligne de production dans l’outil Kusto Explorer disponible en téléchargement ici, exécutez la requête suivante :

let uri='https://uacloudlibrary.opcfoundation.org/infomodel/download/1627266626';
let headers=dynamic({'accept':'text/plain'});
let options=dynamic({'Authorization':'Basic \<insert your cloud library credentials hash here\>'});
let variables = evaluate http_request(uri, headers, options)
    | project title = tostring(ResponseBody.['title']), contributor = tostring(ResponseBody.contributor.name), nodeset = parse_xml(tostring(ResponseBody.nodeset.nodesetXml))
    | mv-expand UAVariable = nodeset.UANodeSet.UAVariable
    | extend NodeId = UAVariable.['@NodeId'], ParentNodeId = UAVariable.['@ParentNodeId'], DisplayName = tostring(UAVariable['DisplayName']), DataType = tostring(UAVariable.['@DataType']), References = tostring(UAVariable.['References'])
    | where References !contains "HasModellingRule"
    | where DisplayName != "InputArguments"
    | project-away nodeset, UAVariable, References;
let objects = evaluate http_request(uri, headers, options)
    | project title = tostring(ResponseBody.['title']), contributor = tostring(ResponseBody.contributor.name), nodeset = parse_xml(tostring(ResponseBody.nodeset.nodesetXml))
    | mv-expand UAObject = nodeset.UANodeSet.UAObject
    | extend NodeId = UAObject.['@NodeId'], ParentNodeId = UAObject.['@ParentNodeId'], DisplayName = tostring(UAObject['DisplayName']), References = tostring(UAObject.['References'])
    | where References !contains "HasModellingRule"
    | project-away nodeset, UAObject, References;
let nodes = variables
    | project source = tostring(NodeId), target = tostring(ParentNodeId), name = tostring(DisplayName)
    | join kind=fullouter (objects
        | project source = tostring(NodeId), target = tostring(ParentNodeId), name = tostring(DisplayName)) on source
        | project source = coalesce(source, source1), target = coalesce(target, target1), name = coalesce(name, name1);
let edges = nodes;
edges
    | make-graph source --> target with nodes on source

Pour obtenir des résultats optimaux, remplacez l’option Layout par Grouped et Lables par name.

Graphique du modèle d’informations du poste.

Simulation de ligne de production

La solution utilise une simulation de ligne de production composée de plusieurs postes en ayant recours à un modèle d’information OPC UA et à un système d’exécution de fabrication (MES, Manufacturing Execution System) simple. Les postes et le système MES sont conteneurisés pour faciliter le déploiement.

Configuration de la simulation par défaut

La simulation est configurée pour inclure deux lignes de production. La configuration par défaut est :

Ligne de production Durée idéale du cycle (en secondes)
Munich 6
Seattle 10
Nom du service Démarrer Fin
Matin 07:00 14h00
Après-midi 15h00 22:00
Nuit 23:00 06:00

Remarque

Les horaires des services (« shifts ») sont en heure locale, plus précisément dans le fuseau horaire dans lequel la machine virtuelle hébergeant la simulation de ligne de production est définie.

ID de nœud OPC UA du serveur OPC UA de poste

Les ID de nœud OPC UA suivants sont utilisés dans le serveur OPC UA de poste pour la télémétrie dans le cloud.

  • i=379 – numéro de série des produits manufacturés
  • i=385 – numéro des produits manufacturés
  • i=391 – nombre de produits ignorés
  • i=398 – durée d’exécution
  • i=399 – durée en état d’erreur
  • i=400 – état (0=poste prêt à travailler, 1=travail en cours, 2=travail effectué et grande partie manufacturée, 3=travail terminé et petite partie manufacturée, 4=poste en état d’erreur)
  • i=406 – consommation d’énergie
  • i=412 – durée idéale du cycle
  • i=418 – durée effective du cycle
  • i=434 – pression

Boucle de rétroaction numérique avec UA Cloud Commander et UA Cloud Action

Cette implémentation de référence met en œuvre une « boucle de rétroaction numérique » en déclenchant spécialement une commande sur l’un des serveurs OPC UA de la simulation à partir du cloud, sur la base des données de série chronologique qui ont atteint un certain seuil (la pression simulée). Vous pouvez voir la pression de la machine d’assemblage de la ligne de production Seattle qui est actuellement libérée à intervalles réguliers dans le tableau de bord Azure Data Explorer.

Installer la simulation de ligne de production et les services cloud

Cliquez sur le bouton pour déployer toutes les ressources requises sur Microsoft Azure :

Déployer sur Azure

Pendant le déploiement, vous devez fournir un mot de passe pour une machine virtuelle utilisée pour héberger la simulation de ligne de production et pour UA Cloud Twin. Le mot de passe doit avoir trois des attributs suivants : une lettre en minuscule, une lettre en majuscule, un chiffre et un caractère spécial. La longueur du mot de passe doit être comprise entre 12 et 72 caractères.

Remarque

Pour réduire les coûts, le déploiement déploie une seule machine virtuelle Windows 11 Entreprise pour la simulation de ligne de production et le système d’exploitation de base de l’instance Azure Kubernetes Services Edge Essentials. Dans les scénarios de production, la simulation de ligne de production n’est pas requise. Pour le système d’exploitation de base de l’instance Azure Kubernetes Services Edge Essentials, nous vous recommandons le canal de maintenance à long terme (LTSC) Windows IoT Entreprise.

Une fois que le déploiement est terminé, connectez-vous à la machine virtuelle Windows déployée avec une connexion RDP (Bureau à distance). Vous pouvez télécharger le fichier RDP dans la page Portail Azure de la machine virtuelle, sous les options Connexion. Connectez-vous avec les informations d’identification que vous avez fournies pendant le déploiement, ouvrez une fenêtre PowerShell d’administrateur, accédez au répertoire C:\ManufacturingOntologies-main\Deployment et exécutez :

New-AksEdgeDeployment -JsonConfigFilePath .\aksedge-config.json

Une fois que la commande a fini, votre installation d’Azure Kubernetes Services Edge Essentials est terminée et vous pouvez exécuter la simulation de ligne de production.

Conseil

Pour obtenir les journaux de l’ensemble de vos charges de travail et services Kubernetes quand vous voulez, exécutez Get-AksEdgeLogs à partir d’une fenêtre PowerShell Administrateur.

Pour vérifier l’utilisation de la mémoire de votre cluster Kubernetes, exécutez Invoke-AksEdgeNodeCommand -Command "sudo cat /proc/meminfo" à partir d’une fenêtre PowerShell Administrateur.

Exécuter la simulation de ligne de production

À partir de la machine virtuelle déployée, ouvrez une invite de commandes Windows. Accédez au répertoire C:\ManufacturingOntologies-main\Tools\FactorySimulation et exécutez la commande StartSimulation en fournissant les paramètres suivants :

    StartSimulation <EventHubsCS> <StorageAccountCS> <AzureSubscriptionID> <AzureTenantID>

Paramètres :

Paramètre Description
EventHubCS Copiez la chaîne de connexion de l’espace de noms Event Hubs, comme décrit ici.
StorageAccountCS Dans le Portail Azure, accédez au compte de stockage créé par cette solution. Dans le menu de navigation de gauche, sélectionnez « Clés d’accès ». Copiez ensuite la chaîne de connexion pour key1.
AzureSubscriptionID Dans le Portail Azure, parcourez vos abonnements et copiez l’ID de l’abonnement utilisé dans cette solution.
AzureTenantID Dans le Portail Azure, ouvrez la page Microsoft Entra ID et copiez votre ID de locataire.

L’exemple suivant montre la commande avec tous les paramètres :

    StartSimulation Endpoint=sb://ontologies.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=abcdefgh= DefaultEndpointsProtocol=https;AccountName=ontologiesstorage;AccountKey=abcdefgh==;EndpointSuffix=core.windows.net 9dd2eft0-3dad-4aeb-85d8-c3adssd8127a 6e660ce4-d51a-4585-80c6-58035e212354

Remarque

Si vous avez accès à plusieurs abonnements Azure, vous devez d’abord vous connecter au Portail Azure à partir de la machine virtuelle via le navigateur web. Vous pouvez également changer de locataire Active Directory via l’interface utilisateur du Portail Azure (en haut à droite) pour veiller à être connecté au locataire utilisé pendant le déploiement. Une fois que vous êtes connecté, laissez la fenêtre du navigateur ouverte. Cela garantit que le script StartSimulation peut se connecter plus facilement à l’abonnement approprié.

Dans cette solution, le magasin de certificats d’application OPC UA pour UA Cloud Publisher, ainsi que le système MES de la ligne de production simulée et le magasin des machines individuelles, se trouvent dans le cloud dans le compte de stockage Azure déployé.

Activer le cluster Kubernetes pour une gestion via Azure Arc

  1. Sur votre machine virtuelle, ouvrez une fenêtre PowerShell Administrateur. Accédez au répertoire C:\ManufacturingOntologies-main\Deployment et exécutez CreateServicePrincipal. Les deux paramètres subscriptionID et tenantID peuvent être récupérés à partir du Portail Azure.

  2. Exécutez notepad aksedge-config.json et fournissez les informations suivantes :

    Attribut Description
    Emplacement La localisation Azure de votre groupe de ressources. Vous trouverez cette localisation dans le Portail Azure sous le groupe de ressources déployé pour cette solution, mais supprimez les espaces dans le nom. Actuellement, les régions prises en charge sont eastus, eastus2, westus2, westus3, westeurope et northeurope.
    SubscriptionId Votre ID d’abonnement. Dans le Portail Azure, sélectionnez l’abonnement que vous utilisez et copiez/collez l’ID d’abonnement.
    TenantId Votre ID de client. Dans le Portail Azure, sélectionnez Azure Active Directory et copiez/collez l’ID de locataire.
    ResourceGroupName Nom du groupe de ressources Azure déployé pour cette solution.
    ClientId Nom du principal de service Azure précédemment créé. Azure Kubernetes Services utilise ce principal de service pour connecter votre cluster à Arc.
    ClientSecret Mot de passe pour le principal de service Azure.
  3. Enregistrez le fichier, fermez la fenêtre PowerShell et ouvrez une nouvelle fenêtre PowerShell Administrateur. Revenez au répertoire C:\ManufacturingOntologies-main\Deployment et exécutez SetupArc.

Vous pouvez maintenant gérer votre cluster Kubernetes à partir du cloud via l’instance Azure Arc nouvellement déployée. Dans le Portail Azure, accédez à l’instance Azure Arc et sélectionnez Charges de travail. Le jeton de service requis peut être récupéré via Get-AksEdgeManagedServiceToken à partir d’une fenêtre PowerShell Administrateur sur votre machine virtuelle.

Capture d’écran d’Azure Arc dans le Portail Azure.

Déploiement d’Opérations Azure IoT sur la périphérie

Vérifiez que vous avez déjà démarré la simulation de ligne de production et activé le cluster Kubernetes pour la gestion via Azure Arc, comme décrit dans les paragraphes précédents. Ensuite, procédez comme suit :

  1. Dans le Portail Azure, accédez au coffre de clés déployé dans cette solution de référence et ajoutez votre propre identité aux stratégies d’accès en cliquant sur Access policies, Create, sélectionnez le modèle Keys, Secrets & Certificate Management, sélectionnez Next, recherchez et sélectionnez votre propre identité d’utilisateur, sélectionnez Next, laissez la section Application vide, puis sélectionnez Next et enfin Create.
  2. Activez les localisations personnalisés pour votre cluster Kubernetes connecté à Arc (appelé ontologies_cluster) en vous connectant d’abord à votre abonnement Azure via az login à partir d’une fenêtre PowerShell Administrateur, puis en exécutant az connectedk8s enable-features -n "ontologies_cluster" -g "<resourceGroupName>" --features cluster-connect custom-locations et en fournissant le resourceGroupName à partir de la solution de référence déployée.
  3. Dans le Portail Azure, déployez Opérations Azure IoT en accédant à votre cluster Kubernetes connecté à Arc, puis sélectionnez successivement Extensions, Add, Azure IoT Operations et Create. Dans la page Informations de base, laissez tout tel quel. Dans la page Configuration, définissez MQ Mode sur Auto. Vous n’avez pas besoin de déployer un contrôleur logique programmable (PLC) simulé, car cette solution de référence contient déjà une simulation de ligne de production beaucoup plus importante. Dans la page Automation, sélectionnez le Key Vault déployé pour cette solution de référence, puis copiez la commande az iot ops init générée automatiquement. À partir de votre machine virtuelle déployée, ouvrez une nouvelle fenêtre PowerShell Administrateur, connectez-vous à l’abonnement Azure approprié en exécutant az login, puis exécutez la commande az iot ops init avec les arguments du Portail Azure. Une fois que la commande est finie, sélectionnez Next, puis fermez l’Assistant.

Configuration de la sécurité et de la connectivité OPC UA pour Opérations Azure IoT

Vérifiez que vous avez correctement déployé Opérations Azure IoT et que toutes les charges de travail Kubernetes sont opérationnelles en accédant à la ressource Kubernetes avec Arc dans le Portail Azure.

  1. À partir du Portail Azure, accédez au stockage Azure déployé dans cette solution de référence, ouvrez Storage browser, puis Blob containers. Ici, vous pouvez accéder au magasin de certificats OPC UA basé sur le cloud utilisé dans cette solution. Opérations Azure IoT utilise Azure Key Vault comme magasin de certificats OPC UA basé sur le cloud, donc les certificats doivent être copiés :
    1. À partir des conteneurs d’objets blob du navigateur Stockage Azure, pour chaque ligne de production simulée, accédez au dossier app/pki/trusted/certs, sélectionnez l’assemblage et l’emballage, puis testez le fichier de certificat et téléchargez-le.
    2. Connectez-vous à votre abonnement Azure via az login à partir d’une fenêtre PowerShell Administrateur, puis exécutez az keyvault secret set --name "<stationName>-der" --vault-name <keyVaultName> --file .<stationName>.der --encoding hex --content-type application/pkix-cert en fournissant le keyVaultName et le stationName de chacun des 6 postes pour lesquels vous avez téléchargé un fichier de certificat .der à l’étape précédente.
  2. À partir de la machine virtuelle déployée, ouvrez une invite de commandes Windows et exécutez kubectl apply -f secretsprovider.yaml avec le fichier de ressources du fournisseur de secrets mis à jour fourni dans le répertoire C:\ManufacturingOntologies-main\Tools\FactorySimulation\Station, en indiquant le nom du coffre de clés, l’ID de locataire Azure, les noms des fichiers de certificat des postes et les alias que vous avez chargés dans Azure Key Vault précédemment.
  3. À partir d’un navigateur web, connectez-vous à https://iotoperations.azure.com, sélectionnez le locataire Azure approprié (en haut à droite) et commencez à créer des ressources à partir de la simulation de ligne de production. La solution est fournie avec deux lignes de production (Munich et Seattle) composées de trois postes chacune (assemblage, test et emballage) :
    1. Pour les points de terminaison de ressource, entrez opc.tcp://assembly.munich dans le champ de l’URL du répartiteur OPC UA pour le poste d’assemblage de la ligne de production Munich, etc. Sélectionnez Do not use transport authentication certificate (l’authentification mutuelle basée sur les certificats OPC UA entre Opérations Azure IoT et tous les serveurs OPC UA connectés est toujours en cours d’utilisation).
    2. Pour les étiquettes de ressource, sélectionnez Import CSV file et ouvrez le fichier StationTags.csv situé dans le répertoire C:\ManufacturingOntologies-main\Tools\FactorySimulation\Station.
  4. À partir du Portail Azure, accédez au stockage Azure déployé dans cette solution de référence, ouvrez Storage browser, puis Blob containers. Pour chaque ligne de production simulée, accédez au dossier app/pki/rejected/certs et téléchargez le fichier de certificat Opérations Azure IoT. Ensuite, supprimez le fichier. Accédez au dossier app/pki/trusted/certs et chargez le fichier de certificat Opérations Azure IoT dans ce répertoire.
  5. À partir de la machine virtuelle déployée, ouvrez une invite de commandes Windows et redémarrez la simulation de ligne de production en accédant au répertoire C:\ManufacturingOntologies-main\Tools\FactorySimulation, puis exécutez la commande StopSimulation, suivie de la commande StartSimulation.
  6. Suivez les instructions décrites ici pour vérifier que les données circulent à partir de la simulation de ligne de production.
  7. En guise de dernière étape, connectez Opérations Azure IoT aux hubs d’événements déployés dans cette solution de référence, comme décrit ici.

Monitoring des conditions de cas d’usage, calcul du TRG, détection des anomalies et prédictions dans Azure Data Explorer

Vous pouvez également consulter la documentation Azure Data Explorer pour savoir comment créer des tableaux de bord sans code pour la surveillance des conditions, les prédictions de rendement ou de maintenance, ou la détection d’anomalies. Nous vous fournissons un exemple de tableau de bord ici à déployer sur le tableau de bord ADX en suivant les étapes décrites ici. Après l’importation, vous devez mettre à jour la source de données du tableau de bord en spécifiant le point de terminaison HTTPS de votre instance de cluster de serveurs ADX au format https://ADXInstanceName.AzureRegion.kusto.windows.net/ en haut à droite du tableau de bord.

Capture d’écran d’un tableau de bord Azure Data Explorer.

Remarque

Si vous souhaitez afficher le TRG pour un service spécifique, sélectionnez Custom Time Range dans la liste déroulante Time Range en haut à gauche du tableau de bord ADX et entrez la date et l’heure de début et de fin du service qui vous intéresse.

Afficher l’UNS (Unified NameSpace) intégré et le graphe de modèle ISA-95 dans Kusto Explorer

Cette solution de référence implémente un UNS (Unified NameSpace) basé sur les métadonnées OPC UA envoyées à la base de données de série chronologique dans le cloud (Azure Data Explorer). Ces métadonnées OPC UA incluent également la hiérarchie des ressources ISA-95. Le graphe obtenu peut être facilement visualisé dans l’outil Kusto Explorer disponible en téléchargement ici.

Ajoutez une nouvelle connexion à votre instance Azure Data Explorer déployée dans cette solution de référence, puis exécutez la requête suivante dans Kusto Explorer :

let edges = opcua_metadata_lkv
| project source = DisplayName, target = Workcell
| join kind=fullouter (opcua_metadata_lkv
    | project source = Workcell, target = Line) on source
    | join kind=fullouter (opcua_metadata_lkv
        | project source = Line, target = Area) on source
        | join kind=fullouter (opcua_metadata_lkv
            | project source = Area, target = Site) on source
            | join kind=fullouter (opcua_metadata_lkv
                | project source = Site, target = Enterprise) on source
                | project source = coalesce(source, source1, source2, source3, source4), target = coalesce(target, target1, target2, target3, target4);
let nodes = opcua_metadata_lkv;
edges | make-graph source --> target with nodes on DisplayName

Pour obtenir des résultats optimaux, remplacez l’option Layout par Grouped.

Graphe montrant une hiérarchie de ressources ISA-95.

Utiliser le service Azure Managed Grafana

Vous pouvez également utiliser Grafana pour créer un tableau de bord sur Azure pour la solution décrite dans cet article. Grafana est utilisé dans le secteur industriel pour créer des tableaux de bord qui affichent des données en temps réel. Azure propose un service appelé Azure Managed Grafana. En l’utilisant, vous pouvez créer des tableaux de bord cloud. Dans ce manuel de configuration, vous activez Grafana sur Azure et vous créez un tableau de bord avec des données qui sont interrogées depuis les services Azure Data Explorer et Azure Digital Twins, en utilisant les données de ligne de production simulées de cette solution de référence.

La capture d’écran suivante montre le tableau de bord :

Capture d’écran montrant un tableau de bord Grafana.

Activer le service Azure Managed Grafana

  1. Accédez au Portail Azure et recherchez le service « Grafana », puis sélectionnez le service « Azure Managed Grafana ».

    Capture d’écran de l’activation de Grafana sur la Place de marché.

  2. Attribuez un nom à votre instance, laissez les options standard activées et créez le service.

  3. Une fois que le service est créé, accédez à l’URL à partir de laquelle vous accédez à votre instance Grafana. Vous trouverez l’URL dans la page d’accueil du service.

Ajouter une nouvelle source de données dans Grafana

Une fois que vous vous êtes connecté, vous devez ajouter une nouvelle source de données à Azure Data Explorer.

  1. Accédez à « Configuration » et ajoutez une nouvelle source de données.

  2. Recherchez Azure Data Explorer et sélectionnez le service.

  3. Configurez votre connexion et utilisez l’inscription d’application (suivez le manuel fourni en haut de cette page).

  4. Enregistrez et testez votre connexion en bas de la page.

Importer un exemple de tableau de bord

Maintenant, vous êtes prêt à importer l’exemple de tableau de bord fourni.

  1. Téléchargez l’exemple de tableau de bord ici : Exemple de tableau de bord Grafana du secteur industriel.

  2. Accédez à « Tableau de bord » et sélectionnez « Importer ».

  3. Sélectionnez la source que vous avez téléchargée et sélectionnez « Enregistrer ». Vous obtenez une erreur sur la page parce que deux variables ne sont pas encore définies. Accédez à la page des paramètres du tableau de bord.

  4. À gauche, sélectionnez « Variables » et mettez à jour les deux URL avec l’URL de votre service Azure Digital Twins.

  5. Revenez au tableau de bord et appuyez sur le bouton Actualiser. Vous devriez voir les données maintenant (n’oubliez pas d’appuyer sur le bouton Enregistrer sur le tableau de bord).

    La variable de localisation située en haut de la page est automatiquement renseignée avec les données d’Azure Digital Twins (zone nœuds d’ISA95). Ici, vous pouvez sélectionner les différentes régions et voir les différents points de données de chaque usine.

  6. Si les données ne s’affichent pas dans votre tableau de bord, accédez aux panneaux individuels et vérifiez si la source de données appropriée est sélectionnée.

Configurer des alertes

Dans Grafana, il est également possible de créer des alertes. Dans cet exemple, nous créons une alerte TRG faible pour l’une des lignes de production.

  1. Connectez-vous à votre service Grafana, puis sélectionnez Règles d’alerte dans le menu.

    Capture d’écran montrant la navigation vers les alertes.

  2. Sélectionnez « Créer une règle d’alerte ».

    Capture d’écran qui montre comment créer une règle d’alerte.

  3. Donnez un nom à votre alerte et sélectionnez « Azure Data Explorer » comme source de données. Sélectionnez Requête dans le volet de navigation.

    Capture d’écran de la création d’une requête d’alerte.

  4. Dans le champ de requête, entrez la requête suivante. Dans cet exemple, nous utilisons la ligne de production « Seattle ».

    let oee = CalculateOEEForStation("assembly", "seattle", 6, 6);
    print round(oee * 100, 2)
    
  5. Sélectionnez « tableau » comme sortie.

  6. Faites défiler vers le bas jusqu’à la prochaine section. Ici, vous configurez le seuil d’alerte. Dans cet exemple, nous utilisons « inférieur à 10 » comme seuil, mais dans les environnements de production, cette valeur peut être plus élevée.

    Capture d’écran montrant une alerte de seuil.

  7. Sélectionnez le dossier dans lequel vous souhaitez enregistrer vos alertes et configurez le « Comportement d’évaluation des alertes ». Sélectionnez l’option « toutes les 2 minutes ».

  8. Sélectionnez le bouton « Enregistrer et quitter ».

Dans la vue d’ensemble de vos alertes, vous pouvez maintenant voir une alerte déclenchée lorsque votre TRG est inférieur à « 10 ».

Capture d’écran montrant la vue d’ensemble d’une alerte.

Vous pouvez intégrer cette configuration à Microsoft Dynamics Field Services, par exemple.

Connexion de la solution de référence à Microsoft Power BI

Pour connecter la solution de référence Power BI, vous devez accéder à un abonnement Power BI.

Suivez les étapes ci-dessous :

  1. Installez l’application Power BI Desktop à partir d’ici.

  2. Connectez-vous à l’application Power BI Desktop avec l’utilisateur qui a accès à l’abonnement Power BI.

  3. À partir du portail Azure, accédez à votre instance de base de données Azure Data Explorer (ontologies) et ajoutez les autorisations Database Admin à un utilisateur Azure Active Directory qui a un accès à un seul abonnement Azure, à savoir l’abonnement utilisé pour votre instance déployée de cette solution de référence. Créez un utilisateur dans Azure Active Directory, le cas échéant.

  4. À partir de Power BI, créez un rapport et sélectionnez des données de série chronologique Azure Data Explorer en tant que source de données via Get data ->Azure ->Azure Data Explorer (Kusto).

  5. Dans la fenêtre contextuelle, entrez le point de terminaison Azure Data Explorer de votre instance (par exemple, https://erichbtest3adx.eastus2.kusto.windows.net), le nom de la base de données (ontologies) et la requête suivante :

    let _startTime = ago(1h);
    let _endTime = now();
    opcua_metadata_lkv
    | where Name contains "assembly"
    | where Name contains "munich"
    | join kind=inner (opcua_telemetry
        | where Name == "ActualCycleTime"
        | where Timestamp > _startTime and Timestamp < _endTime
    ) on DataSetWriterID
    | extend NodeValue = todouble(Value)
    | project Timestamp, NodeValue
    
  6. Sélectionnez Load. Cela permet d’importer la durée effective du cycle du poste Assemblage de la ligne de production de Munich pendant la dernière heure.

  7. Lorsque vous y êtes invité, connectez-vous à Azure Data Explorer avec l’utilisateur Azure Active Directory que vous avez autorisé à accéder à la base de données Azure Data Explorer précédemment.

  8. Dans Data view, sélectionnez la colonne NodeValue et Don't summarize dans l’élément de menu Summarization.

  9. Basculez sur Report view.

  10. Sous Visualizations, sélectionnez la visualisation Line Chart.

  11. Sous Visualizations, déplacez le Timestamp de la source Data vers X-axis, sélectionnez-le, puis sélectionnez Timestamp.

  12. Sous Visualizations, déplacez le NodeValue de la source Data vers Y-axis, sélectionnez-le, puis sélectionnez Median.

  13. Enregistrez votre nouveau rapport.

    Remarque

    Vous pouvez ajouter d’autres données d’Azure Data Explorer à votre rapport de la même façon.

    Capture d’écran d’une vue Power BI.

Connexion de la solution de référence à Microsoft Dynamics 365 Field Service

Cette intégration présente les scénarios suivants :

  • Chargement des ressources de la solution de référence Manufacturing Ontologies sur Dynamics 365 Field Service.
  • Création d’alertes dans Dynamics 365 Field Service lorsqu’un certain seuil sur les données de télémétrie de la solution Manufacturing Ontologies est atteint.

L’intégration utilise Azure Logics Apps. Avec Logic Apps, les applications et services critiques pour l’entreprise peuvent être connectés via des workflows sans code. Nous récupérons des informations à partir d’Azure Data Explorer et déclenchons des actions dans Dynamics 365 Field Service.

Si vous n’êtes pas déjà un client Dynamics 365 Field Service, commencez par activer une version d’évaluation de 30 jours ici. N’oubliez pas d’utiliser la même instance Microsoft Entra ID (anciennement Azure Active Directory) que celle utilisée lors du déploiement de la solution de référence Manufacturing Ontologies. Sinon, vous devrez configurer une authentification multilocataire, procédure qui ne fait pas partie de ces instructions.

Créer un workflow Azure Logic App pour créer des ressources dans Dynamics 365 Field Service

Commençons par charger les ressources Manufacturing Ontologies sur Dynamics 365 Field Service :

  1. Accédez au Portail Azure et créez une application logique.

  2. Donnez un nom à l’application logique Azure et placez-la dans le même groupe de ressources que la solution de référence Manufacturing Ontologies.

  3. Sélectionnez « Workflows ».

  4. Donnez un nom à votre workflow : pour ce scénario, nous utilisons le type d’état avec état parce que les ressources ne sont pas des flux de données.

  5. Créez un déclencheur. Nous commençons par créer un déclencheur « Périodicité ». Cela permet de vérifier la base de données tous les jours pour voir si de nouvelles ressources sont créées. Vous pouvez changer pour une périodicité plus courte.

  6. Dans les actions, recherchez Azure Data Explorer et sélectionnez la commande Run KQL query. Dans cette requête, nous vérifions le type de ressources que nous avons. Utilisez la requête suivante pour obtenir des ressources et collez-la dans le champ de requête :

    let ADTInstance =  "PLACE YOUR ADT URL";let ADTQuery = "SELECT T.OPCUAApplicationURI as AssetName, T.$metadata.OPCUAApplicationURI.lastUpdateTime as UpdateTime FROM DIGITALTWINS T WHERE IS_OF_MODEL(T , 'dtmi:digitaltwins:opcua:nodeset;1') AND T.$metadata.OPCUAApplicationURI.lastUpdateTime > 'PLACE DATE'";evaluate azure_digital_twins_query_request(ADTInstance, ADTQuery)
    
  7. Pour obtenir vos données de ressources dans Dynamics 365 Field Service, vous devez vous connecter à Microsoft Dataverse. Connectez-vous à votre instance Dynamics 365 Field Service et utilisez la configuration suivante :

    • Utiliser le nom de tableau « Ressources client »
    • Placer « AssetName » dans le champ Nom
  8. Enregistrez votre workflow et exécutez-le. Après quelques secondes, vous voyez que de nouvelles ressources sont créées dans Dynamics 365 Field Service.

Créer un workflow Azure Logic App pour créer des alertes dans Dynamics 365 Field Service

Ce workflow crée des alertes dans Dynamics 365 Field Service, en particulier lorsqu’un certain seuil de FaultyTime sur une ressource de la solution de référence Manufacturing Ontologies est atteint.

  1. Nous devons d’abord créer une fonction Azure Data Explorer pour obtenir les données appropriées. Accédez à votre volet de requête Azure Data Explorer dans le Portail Azure et exécutez le code suivant pour créer une fonction FaultyFieldAssets :

    Capture d’écran de la création d’une requête ADX de fonction.

    .create-or-alter function  FaultyFieldAssets() {  
    let Lw_start = ago(3d);
    opcua_telemetry
    | where Name == 'FaultyTime'
    and Value > 0
    and Timestamp between (Lw_start .. now())
    | join kind=inner (
        opcua_metadata
        | extend AssetList =split (Name, ';')
        | extend AssetName=AssetList[0]
        ) on DataSetWriterID
    | project AssetName, Name, Value, Timestamp}
    
  2. Créez un workflow dans l’application logique Azure. Créez un déclencheur « Périodicité » pour démarrer, toutes les 3 minutes. Créez comme action « Azure Data Explorer » et sélectionnez Exécuter la requête KQL.

  3. Entrez l’URL de votre cluster Azure Data Explorer, puis sélectionnez votre base de données et utilisez le nom de la fonction créée à l’étape 1 comme requête.

  4. Sélectionnez Microsoft Dataverse comme action.

  5. Exécutez le workflow pour voir les nouvelles alertes générées dans votre tableau de bord Dynamics 365 Field Service :

    Capture d’écran des alertes dans Dynamics 365 FS.