Formation Archivage&Taracabilité Wincc RT PRO V16 & SQL Server 2019 - VF
Formation Archivage&Taracabilité Wincc RT PRO V16 & SQL Server 2019 - VF
Formation Archivage&Taracabilité Wincc RT PRO V16 & SQL Server 2019 - VF
Présenté par
Wissal ABID
i
Table des matières
1 Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019 1
1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Les logiciels utilisés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.3 Accès au serveur SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.3.1 Configuration d’une base de données SQL . . . . . . . . . . . . . . . . . . . . . 1
1.4 La configuration de la source de données (ODBC) . . . . . . . . . . . . . . . . . . . . . 4
1.4.1 Ouvrir la source de données (ODBC) : . . . . . . . . . . . . . . . . . . . . . . . 4
1.4.2 Création d’une nouvelle source de données utilisateur : . . . . . . . . . . . . . . 5
1.5 Configuration des Stations sur WinCC . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.5.1 Importation des Projets de Référence . . . . . . . . . . . . . . . . . . . . . . . . 6
1.5.2 Intégration des Projets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.5.3 Ajout de WinCC Pro et IE Général . . . . . . . . . . . . . . . . . . . . . . . . 7
1.5.4 Configuration des Paramètres de Communication Réseau . . . . . . . . . . . . . 7
1.6 La Connexion à une Base de Données avec ADO . . . . . . . . . . . . . . . . . . . . . 8
1.7 Gestion de l’Insertion, Traçabilité et d’Archivage . . . . . . . . . . . . . . . . . . . . . 10
1.7.1 Ajout et Utilisation de VBScript dans WinCC . . . . . . . . . . . . . . . . . . . 10
1.7.2 Concept et Utilisation des SmartTags dans WinCC . . . . . . . . . . . . . . . . 10
1.7.3 Gestion de la traçabilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.7.4 Gestion d’Archivage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.7.5 Planification des tâches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.7.6 Vérification de bon fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.7.7 Affichage des Données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.7.8 Exportation des Données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.8 La création de la bibliothèque .dll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1.8.1 La Création du Projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1.8.2 Installation des packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.8.3 La création des propriétés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
1.8.4 Affichage des données : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
1.8.5 Filtrage des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
1.8.6 Gestion de la Mise à Jour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
1.8.7 Exportation de Données vers Excel . . . . . . . . . . . . . . . . . . . . . . . . . 41
1.9 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
42
ii
Table des figures
iii
1.40 Création de l’application Windows Forms. . . . . . . . . . . . . . . . . . . . . . . . . . 32
1.41 Ajout de référence. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
1.42 Ajout d’un contrôle utilisateur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
1.43 Configuration du projet de démarrage. . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.44 Ajout d’un Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
1.45 Installation du Package. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
1.46 La création des propriétes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
1.47 Ajout d’un ComboBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
1.48 Interface de Gestion de la Mise à Jour . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
1.49 Organigramme de Gestion de la Mise à Jour . . . . . . . . . . . . . . . . . . . . . . . . 40
1.50 Export des donées entre deux dates. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
iv
Chapitre 1
1.1 Introduction
Ce document est un guide détaillé pour exploiter les capacités de WinCC RT PRO V16, un
logiciel robuste de supervision et d’acquisition de données (SCADA), en conjonction avec la puissante
plateforme de gestion des données, SQL Server 2019. En suivant ces étapes, vous serez en mesure
de configurer efficacement vos bases de données, de gérer les insertions de données, de suivre les
changements au fil du temps et d’exporter des données pour une analyse approfondie.
Après avoir terminé l’installation de SQL Server 2019 et de SQL Server Management Studio,
vous pouvez commencer à les utiliser pour vous connecter au serveur et construire la base de données.
On commence par démarrer Microsoft SQL Server Management Studio. Une boîte de dialogue de
connexion s’ouvre comme indiqué dans la figure1.1.
1
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Le nom de votre ordinateur suivi de celui de votre serveur devrait être affiché dans la zone
Nom du serveur (Server name :). Le moteur de sécurité par défaut de Windows NT est utilisé en
sélectionnant la méthode d’authentification Windows Authentication dans la zone d’authentification
(Authentication). La zone Nom d’utilisateur (User name) contient le nom que vous avez saisi lors de
l’enregistrement de votre ordinateur. Cliquez sur le bouton Connexion (Connect) pour connecter votre
client au serveur de base de données SQL.
Pour créer une nouvelle base de données, faites un clic droit sur le dossier Databases dans la
fenêtre Explorateur d’objets (Object Explorer), puis sélectionnez l’élément Nouvelle base de données
(New Database) dans le menu contextuel. Saisissez nom de database dans la zone Nom de la base de
données (Database name) de la boîte de dialogue Nouvelle base de données , laissez tous les autres
paramètres inchangés, puis cliquez sur le bouton OK. Vous constaterez qu’une nouvelle base de données
est créée et se trouve sous le dossier Database dans la fenêtre Explorateur d’objets, comme le montre
la Figure1.2.
Ensuite, vous devez créer des tables de données.Développez le dossier de la base de données
database en cliquant sur le symbole plus (+) à côté de celui-ci. Faites un clic droit sur le dossier Tables
et sélectionnez l’élément Table, une nouvelle fenêtre de table s’affiche, comme le montre la Figure 1.3.
2
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Une table de données par défaut dbo.Table1 est créée comme indiqué dans la Figure 1.4. Trois
colonnes sont affichées dans cette nouvelle table : Nom de colonne, Type de données et Autoriser les
NULLs, vous permettant ainsi d’entrer le nom, le type de données, et une coche pour chaque colonne
pour vérifier si elle peut être vide ou non. Cochez la case si vous autorisez une colonne à être vide,
sinon ne la cochez pas si vous voulez qu’elle contienne des données valides. En général, pour la colonne
qui sert de clé primaire, ne cochez pas la case associée à cette colonne. Saisissez les noms dans les
colonnes correspondantes. Sachant que si le type de donnée est un réel, il faut l’insérer dans
la table en tant que chaîne de caractères (String).
Vous devez par la suite enregistrer et nommer cette table. Allez à Fichier > Enregistrer sous >
Table-1 et entrez un nom pour cette nouvelle table. Cliquez sur OK pour terminer cet enregistrement.
Une nouvelle table est ajoutée à la nouvelle base de données sous le dossier Tables dans la fenêtre
Explorateur d’objets.
Notez qu’il est nécessaire de placer un NULL pour tout champ qui n’a pas de valeur dans cette
table, car cela diffère du champ vide dans la base de données Microsoft Access. Allez à Fichier >
Enregistrer tout pour sauvegarder cette table.
3
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
1. Recherchez l’applet Sources de données ODBC (64 bits) dans le menu Démarrer ou le Panneau
de configuration.
2. Lancez l’applet. La fenêtre Administrateur de source de données ODBC s’ouvre.
3. Sous l’onglet Pilotes, vous trouverez la liste de tous les pilotes ODBC installés sur votre
ordinateur.
Voici un exemple de liste des pilotes 64 bits installés présenté dans la firgure 1.6
4
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Pour créer une nouvelle source de données utilisateur, suivez ces étapes simples.
Tout d’abord, dans la barre de menu, accédez à l’onglet "DSN utilisateur". Ensuite, cliquez sur le
bouton "Ajouter" et sélectionnez le driver "SQL Server". Enfin, cliquez sur "Terminer". Les différentes
étapes d’ajout de serveur sont présentées dans les figures 1.7 et 1.8.
5
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Figure 1.8 : La création d’une nouvelle source de données vers SQL Server.
NB :
Il faut sélectionner le serveur que vous avez choisi lors de la création de la connexion au serveur de
base de données (1)(WISSAL/WINCC , dans ce cas ) ,ainsi que le même nom de base de données que
celle que nous avons déjà créée précédemment (database , dans ce cas)(2).
La première étape de la configuration des stations a consisté à importer les 8 projets de référence
déjà programmés dans TIA Portal. Chaque projet était dédié à une station spécifique du système
d’automatisation. L’importation de ces projets a permis d’intégrer les configurations matérielles et
logicielles préétablies pour chaque station.
6
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Après l’importation des 8 projets, ils ont été intégrés au projet principal afin de faciliter leur
communication entre eux au sein de l’environnement TIA Portal. Cette intégration garantit également
leur utilisation efficace dans le système SCADA.
Les projets sont présentés dans la vue d’ensemble, comme illustré dans la figure 1.9.
En parallèle, WinCC Pro version 16 a été ajouté au projet pour le développement de l’interface
utilisateur. De plus, le module IE (Industrial Ethernet) Général a été intégré pour la communication
réseau entre les différentes stations.
La connexion en ligne via Ethernet industriel est représentée dans la figure 1.10.
Pour établir la communication réseau entre le HMI et les stations PLC (utilisant le protocole
PROFINET), les étapes suivantes ont été suivies :
— Attribution des Adresses IP : Des adresses IP ont été attribuées à chaque station PLC ainsi
qu’au HMI pour permettre une communication IP correcte. Ces attributions sont présentées dans
la figure 1.11.
7
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Le script commence par créer une instance de l’objet de connexion ADO à l’aide de la ligne de
code suivante :
8
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
L’ADO utilise une chaîne de connexion (ConnectionString) pour spécifier les détails de la
connexion, tels que le type de fournisseur de données, le serveur, la base de données, le nom d’utilisateur
et le mot de passe. Dans le VBScript, la chaîne de connexion est construite comme suit :
conn.ConnectionString = "Provider=SQLOLEDB;Data
Source=WISSAL|WINCC;Initial Catalog=database;Integrated
Security=SSPI;DSN=Data-base;"
Cette ligne permet d’établir la connexion à la base de données en utilisant la chaîne de connexion
fournie.
conn.Open
L’objet Commande ADO nommé cmdExist est créé. Il permet d’exécuter les commandes SQL
sur notre base de données.
Cette ligne définit la connexion active pour l’objet de commande cmdExist sur la connexion de
base de données précédemment ouverte conn.
Ces deux lignes de code se concentrent sur l’exécution d’une requête SQL dans une base de
données. La première ligne définit la commande SQL à exécuter. La deuxième ligne exécute cette
commande SQL et stocke le résultat dans un objet Recordset nommé "rs".
9
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
conn.Close
Set conn = Nothing
Set cmdExist = Nothing
Set rs = Nothing
Cette étape consiste à ajouter un VBScript dans WinCC Professional V16. Pour ce faire,
commencez par cliquer sur le dossier "STIMATIC PC STATION" suivi de "WinCC RT Professional",
puis accédez à "Script" et sélectionnez "Script VB". Ensuite, ajoutez une nouvelle fonction VB .
Étant donné que nous avons 8 stations, chacune est contrôlée par un PLC où nous stockons les
données à archiver dans une base de données (DB), comme illustré dans la figure 1.13. Par la suite,
dans le code, nous accédons à ces variables en utilisant des SmartTags.
Pour Créer un SmarTags , il suffit de cliquer sur liste des objets et choisir le nom de variable ,
comme il est sélectionné dans figure 1.14 , ou bien tout simplement écrire SmartTags("Nom_Variable").
La liste des variables IHM utilisées dans notre système peut être trouvée dans le dossier
"Variable_IHM" de notre environnement de développement. Pour accéder à cette liste, il suffit de
10
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
naviguer vers la "Table de variables standard" dans le dossier spécifié, comme illustré dans la figure
1.15 :
La fonction de traçabilité offre une visibilité claire et précise sur le parcours et l’état des pièces
dans le processus de production de la station, facilitant ainsi la gestion et le suivi des différentes
opérations.
Elle permet de récupérer le statut d’une pièce dans la station à partir d’une table SQL,
c’est-à-dire l’état précédent de la pièce dans la station. Il y a 4 états possibles :
— Status-WSn-1 = 1, cela indique que la pièce n’a pas été trouvée.
— Status-WSn-1 = 2 , signifie que la pièce a été traitée dans la station WSn-1 ( la station précédente
) et est dans un état OK (bonne pièce).
— Status-WSn-1 = 3 , indique que la pièce a déjà été traitée dans la station WSn-1 ( la station
précédente ) mais est dans un état NOK (mauvaise pièce).
— Status-WSn-1 = 4 , signifie que la pièce a déjà été traitée.
Huit VBscripts dédiées à la traçabilité ont été développées,chacune correspondant à une station.
La caractéristique commune à tous les scripts est que la fonction de traçabilité ne s’active que lorsque
top-traçabilité est égal à 1. Une fois que le statut-WSn-1 est retourné, on désactive le bit top-traçabilité
en le mettant à 0.
Le code VBA présenté dans l’organigramme dans la figure 1.16 est une subroutine conçue pour
gérer le processus de traçabilité. Tout d’abord, il vérifie si un SmartTag spécifique est activé, ce qui
signifie qu’une opération de traçabilité est requise. Ensuite, il récupère les valeurs des SmartTags pour
obtenir des informations telles que le DataMatrix et l’état précédent du système.
En continuant, le code établit une connexion à une base de données SQL en utilisant la
bibliothèque ADODB. Il exécute des requêtes SQL pour vérifier l’existence d’un enregistrement correspondant
au DataMatrix dans la base de données. S’il trouve l’enregistrement, il extrait l’état associé à ce
DataMatrix dans la base de données. En fonction de cet état, il met à jour le status_WSn-1 avec une
valeur correspondante pour refléter l’état actuel de la pièce.
11
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Le script intègre également des mécanismes de gestion des erreurs pour anticiper les problèmes
potentiels lors de l’exécution des requêtes SQL. Une fois les opérations sur la base de données complétées,
la connexion à la base de données est fermée et les objets associés sont libérés pour optimiser l’utilisation
des ressources mémoire. Enfin, il réinitialise le top_traçabilité pour signaler que l’opération de traçabilité
a été exécutée avec succès.
Le code présenté dans l’organigramme de la figure 1.17 est conçue pour gérer le processus de
traçabilité pour la station WS20. Tout d’abord, le code vérifie si le top_traçabilité est activé, puis il lit
la valeur du DataMatrix. Ensuite, il crée une commande SQL pour récupérer l’état dans les stations
WS10 et WS20 (State_WS10 et State_WS20) associé au DataMatrix dans la table de la base de
données.
12
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Si State_WS20 n’est pas NULL, cela signifie que la pièce est déjà passée par cette station. Dans
ce cas, on vérifie si le Mode Rework est activé ; si ce n’est pas le cas, le status est mis à 4 (ce qui bloque
la production). Si le mode Rework est activé, on examine l’état de la pièce dans la station WS10.
Si l’état est "OK", le Status_WS20 est mis à jour avec la valeur 2 pour indiquer une pièce en
bon état. Si l’état est "NOK", le Status_WS20 est mis à jour avec la valeur 3 pour indiquer une pièce
défectueuse.
Si la pièce n’a pas passé (state_WS20=NULL), on passe directement à l’examen de l’état de
la pièce dans la station WS10.
Enfin, le top_traçabilité est réinitialisé pour indiquer que la traçabilité a été effectuée avec
succès.
13
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Dans cette station, le mode Rework n’est pas disponible. Le code présenté dans la figure 1.18
récupère d’abord l’état de la pièce dans la station WS30, si elle existe, c’est-à-dire si elle a déjà été
traitée. Si ce n’est pas le cas, il examine alors l’état de la pièce dans la station WS20.
14
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Comme il existe 3 versions de pièces, il est important de noter que seule la version XC13 passe
par la station WS30. Donc, pour vérifier la traçabilité dans la station WS40, il faut discuter la version
de la pièce. Si la version est XC13, le code va récupérer l’état de la pièce dans la station WS30. Sinon,
il va le récupérer dans la station WS20.
Dans l’organigramme de la figure 1.19, nous allons présenter la partie qui diffère des autres
stations.
15
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Dans cette station, il est possible d’activer le mode rework. Le code suit le même organigramme
que celui de WS20, mais il sélectionne l’état de la pièce dans la station WS40.
Vous pouvez consulter le code dans l’Annexe E.
16
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Les pièces de version "F28C" ne passent pas par la station WS50. Donc, pour vérifier
la traçabilité, on doit discuter la version de la pièce :
— Si la version est "F28C", le code récupère l’état de la pièce dans la station WS40.
— Si la version est "F28A" ou "XC13", le code récupère l’état de la pièce dans la station WS50.
Le code de la fonction de traçabilité est présenté dans l’organigramme de la figure 1.20.
17
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Le code suit le même principe que celui détaillé dans l’organigramme de la figure 1.18, mais il
sélectionne l’état de la pièce dans la station WS60. Vous pouvez consulter le code dans l’Annexe
G.
Le code suit également le principe décrit dans l’organigramme de la figure 1.18, mais cette
fois-ci, il récupère l’état de la pièce dans la station WS70. Vous pouvez consulter le code dans
l’Annexe H.
Après avoir vérifié la traçabilité et retourné l’état de la pièce dans chaque station, nous passons
maintenant à l’archivage des données dans la table SQL. Pour ce faire, un VBScript est créé pour
chaque station.
Il est important de noter qu’il faut toujours convertir les données de type float en
String.
Ce script VBA, appelé "Archive_WS10", est conçu pour automatiser le processus d’archivage
des données de la station WS10. Il commence par vérifier si le Top_Archive est activé et si la pièce
est introuvable dans la table SQL. Ensuite, il crée des objets pour les opérations de base de données,
récupère les valeurs des SmartTags, et détermine l’état des pièces en fonction des valeurs des OK et
NOK. Après avoir établi une connexion à la base de données, il insère les données récupérées dans
la table correspondante. En cas de succès, il met à jour le statut en conséquence. En cas d’échec de
la connexion ou d’une erreur lors de l’insertion des données, il affiche un message d’erreur approprié.
Une fois toutes les opérations terminées, il ferme la connexion à la base de données et libère les objets
utilisés. L’organigramme de code est présenté dans la figure 1.21.
18
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Pour la station WS20, deux modes distincts sont disponibles : Normal et Rework. Dans le mode
Normal, la vérification de l’activation de Top_Archive est suivie d’une confirmation que c’est une
bonne pièce (Status_WS20 = 2). Par contre, pour le mode Rework, il est impératif d’activer le bouton
Rework tout en s’assurant que state_WS10 est en état OK.
Notons que le mode Rework a la priorité sur le mode Normal. Dans ce mode, les champs
states_WS30, states_WS40, states_WS50, states_WS60, states_WS70 et states_WS80 reçoivent
des valeurs nulles, tandis que le champ rework est renseigné avec la valeur 1. Le code est illustré dans
le schéma de la figure 1.22.
19
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Dans ce code, nous avons mis en place une stratégie pour éviter les mises à jour répétitives
des mêmes pièces. Nous utilisons une commande pour compter le nombre d’enregistrements de chaque
pièce. Cette commande vérifie que l’enregistrement existe et que le champ State_WS30 est "NULL",
ce qui signifie que c’est la première mise à jour pour cette pièce.
20
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
La station ne laisse passer que les pièces de la version XC13. Dans le code, nous avons inclus
une condition pour vérifier si la version de la pièce est XC13 (en utilisant la fonction Left(matrix, 4)
= "XC13"). Si c’est le cas, nous effectuons une mise à jour des données en utilisant la commande SQL
appropriée. Sinon, nous effectuons une mise à jour avec la valeur "NONE".
L’organigramme présenté dans la figure 1.23 illustre le processus d’archivage spécifique à cette
station.
Dans ce code, présenté dans l’organigramme la figure 1.24 ,nous avons un unique mode (Normal).
Il faut tout d’abord vérifier que "top_Archive" est activée. Ensuite, pour effectuer la mise à jour de
la table et ajouter les données de la station, il est nécessaire que la pièce soit bonne (status_WSn-1 =
2).
21
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Ce code permet également de vérifier s’il s’agit de la première mise à jour (en calculant le
nombre d’enregistrements de pièces et en accédant à l’enregistrement s’il existe), et enfin, il s’assure
que le state_WS40 est "NULL".
Le processus d’archivage dans la station WS50 est similaire à celui de la station WS20. Cependant,
il existe un mode REWORK spécifique aux stations WS50, WS70 et WS80. En cliquant sur le
bouton "Rework", l’état des pièces dans les stations en rework est supprimé en les
remplaçant par des valeurs NULL, ce qui garantit le bon fonctionnement de la production.
Cependant, cette station n’accepte pas les pièces de version F28C. Vous pouvez consulter le
code dans l’organigramme présenté dans la figure 1.25.
22
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Ce code suit l’organigramme présenté dans la figure 1.24, avec des données à archiver spécifiques
et des paramètres adaptés à la station WS60.
Vous pouvez consulter le code dans l’Annexe O.
Chaque station possède ses propres paramètres et variables à archiver. Néanmoins, le code suit
essentiellement le même principe que celui présenté dans l’organigramme de la figure 1.24.
Vous pouvez consulter le code dans l’Annexe P.
23
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Ce code suit l’organigramme présenté dans la figure 1.24 et se différencie uniquement par les
données à archiver et les paramètres spécifiques à cette station.
Vous pouvez consulter le code dans l’Annexe Q.
Pour que le processus soit automatique, la prochaine étape est la planification des tâches. Nous
avons créé une tâche pour chaque fonction (8 tâches pour la traçabilité et 8 pour l’archivage). La liste
des tâches pour le processus d’archivage et de traçabilité est présentée dans la figure 1.26.
Le processus d’archivage et de traçabilité sera déclenché chaque fois qu’il y aura un changement
dans la valeur de la variable de déclenchement spécifiée.
Pour cela, cliquez sur "Planificateur des tâches" dans WinCC RT Professional et ensuite sur
"Ajouter".
Ensuite, cliquez sur Propriétés et choisissez le déclenchement de l’exécution de la tâche :
"Déclenchement de Variable".
Nous avons choisi la variable "Top_Archive" comme déclencheur de l’exécution des tâches
d’archivage et "Top_Traçabilité" comme déclencheur de l’exécution des tâches de traçabilité. Le cycle
est réglé sur "UponChange".
Cliquez ensuite sur Événement et ajoutez la fonction à exécuter. Les étapes sont présenté dans
la figure 1.27.
24
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Pour vérifier le bon fonctionnement, il faut activer la Simulation de PLC sur PLCSIM et le
runtime de WinCC. Il est également nécessaire de forcer les bits Top_Traçabilité et Top_Archive.
Pour cela, des modifications ont été apportées au bloc de programme afin d’activer le bit traçabilité
ou archive. J’ai suivi le Grafcet pour cela.
25
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
pièce. Ensuite, en forçant les variables à archiver et en activant le bit Top_Archive, on peut consulter
la SQL Table pour vérifier si les données sont ajoutées correctement. Si c’est le cas, tout fonctionne
correctement. Il est nécessaire de vérifier l’archivage et la traçabilité pour toutes les stations.
Vous pouvez voir dans la figure 1.29 les étapes nécessaires pour lancer la simulation et enfin
obtenir la fenêtre présentée dans la figure 1.28.
Après avoir archivé les données, passons maintenant à l’affichage de ces données.
Pour commencer, ajoutons une vue en cliquant sur "Ajouter une vue" dans le dossier des Vues.
Ensuite, nous passerons à la gestion des vues en cliquant sur "Menu et Barre d’outils" pour ajouter le
bouton "Archive". Associez ensuite un événement de clic à ce bouton, appelé "ActiveVue". Les étapes
détaillées sont illustrées dans la figure 1.30.
26
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Nous avons également intégré une bibliothèque .dll pour l’affichage des données. Pour cela,
cliquez sur "Accessoires" => "Contrôles personnalisés" => Cliquez droit => "Sélectionner les objets"
=> "Contrôles .Net Spécifiques" => Sélectionnez le fichier .dll.
Les étapes détaillées sont expliquées dans la figure 1.31.
Assurez-vous de configurer correctement les paramètres comme indiqué dans la figure 1.32 :
— Data_Source : Nom du serveur (le même que celui utilisé dans le SQL Table).
— NameDatabase : Nom de la base de données.
— NameTable : Nom de la table.
27
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Après avoir lancé la simulation WinCC, la vue Archive est affichée comme indiqué dans la figure
1.33.
L’objectif est d’exporter automatiquement les données pour chaque jour de production. Le
défi réside dans l’absence d’un planning fixe ; ainsi, les jours de production sont imprévisibles. Pour
résoudre cela, une table SQL (DateTable) a été créée, dans laquelle la date est insérée chaque fois que
la simulation est lancée. L’idée est de comparer la date actuelle avec la dernière date dans DateTable à
chaque fois que nous exécutons la simulation. Si la date actuelle est supérieure à la dernière date dans
DateTable, nous exportons les données de la dernière date.
Pour réaliser cela, nous avons développé trois scripts VB :
28
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Ce code permet de comparer la dernière date dans une table SQL (DateTable) avec la date
actuelle. Si la date actuelle est plus grande, elle génère une requête SQL pour récupérer des données
d’une autre table basée sur la dernière date, exporte ces données dans un fichier Excel, puis affiche un
message de succès. Sinon, elle affiche un message indiquant que la date actuelle n’est pas plus grande
que la dernière date. Le code est expliqué dans l’organigramme dans la figure 1.36.
29
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Nous avons créé trois tâches comme illustré dans la Figure 1.37.
Pour déclencher les fonctions de comparaison de dates et d’insertion, une tâche est ajoutée et
programmée pour s’exécuter lors de la fermeture de l’application (au moment de l’arrêt de l’exécution).
Une variable booléenne, nommée variable_IHM, est alors créée et son bit est défini à 1. Lors de la
fermeture de l’application, la fonction ’MiseA1Bit’ est appelée pour agir sur la variable_IHM ainsi
créée.
Les fonctions ’InsertCurrentDate’ et ’CompareDates’ sont déclenchées par la variable_IHM
créée (UponChange), assurant ainsi qu’elles s’exécutent dès le début de la simulation. La planification
des tâches pour le déclenchement de l’exportation est illustrée dans la Figure 1.38.
30
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Étape 1 : Ouvrez Visual Studio 2022, cliquez sur "Créer un nouveau projet", puis choisissez
"Bibliothèque de classes (.Net Framework)".
31
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Étape 2 : Dans Visual Studio, créez un autre nouveau projet. Choisissez "Application Windows
Forms (.NET Core ou .NET Framework)" comme type de projet et nommez le projet.
32
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Dans les fichiers de code de l’application Windows Forms, importez l’espace de noms de la
bibliothèque de classes (using library).
Étape 4 : Ajout de UserControl.cs au projet de bibliothèque de classes.
Ouvrez le projet de bibliothèque de classes ("MyClassLibrary") dans Visual Studio. Ajoutez un
élément existant en cliquant avec le bouton droit sur le projet dans l’Explorateur de solutions, puis
choisissez "Ajouter" -> "User Control"(contrôle utilisateur (Windows Forms)) , comme il est présenté
dans la figure 1.42.
33
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Remarque : Les contrôles utilisateurs sont des ensembles de contrôles Windows Forms rassemblés
dans un conteneur unique. Ils sont souvent appelés contrôles composites, avec les contrôles à l’intérieur
étant désignés comme des contrôles constitutifs. Ces contrôles sont dérivés de la classe UserControl.
Ils sont créés à l’aide d’un concepteur visuel similaire à celui des formulaires, permettant la
création, l’organisation et la modification des contrôles constitutifs via cette interface graphique. La
logique et les événements du contrôle sont programmés de la même manière que pour un formulaire
standard. Enfin, les contrôles utilisateurs peuvent être intégrés dans un formulaire comme n’importe
quel autre contrôle.
Ils sont utilisables dans le projet où ils sont créés, ainsi que dans d’autres projets qui font
référence à la bibliothèque contenant ces contrôles utilisateurs.
Étape 5 : Utilisation du contrôle personnalisé dans le formulaire Windows
Instanciez le contrôle personnalisé dans Form1.cs de votre application Windows Forms en créant
une instance du contrôle personnalisé depuis la bibliothèque de classes liée.
Initialisation et Configuration :
this.hDataHistory1.Dock = System.Windows.Forms.DockStyle.Fill ;
this.hDataHistory1.Size = new System.Drawing.Size(1833, 828) ;
this.Controls.Add(this.hDataHistory1) ;
34
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
this.Name = "Form1" ;
this.Text = "WissalABID" ;
Étape 6 : Pour que le processus de construction se déroule sans problème, il est essentiel de
définir le projet WindowsFormApp en tant que projet de démarrage. Suivez les étapes ci-dessous et
référez-vous à la figure 1.43 pour une visualisation claire de ces étapes :
— Ouvrez le projet dans Visual Studio.
— Dans la barre de menus, accédez à Projet > Propriétés
— Dans la fenêtre des propriétés du projet, sélectionnez l’onglet Déboguer.
— Dans la section "Démarrage", assurez-vous que l’option "Projet de démarrage" est définie sur
"WindowsFormApp".
— Cliquez sur Appliquer puis sur OK pour enregistrer les modifications.
— Étape 1 : Dans Visual Studio, cliquez sur Outils => Gestionnaire de package NuGet => Gérer
les packages de la solution. Les étapes sont illustrées dans la figure 1.44.
35
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
On commence par créer les propriétés telles qu’elles sont présentées dans les lignes de code de
la figure 1.46.
— 1 : C’est le nom de la base des données .
— 2 : Le nom de variable pour lier avec le username
— 3 : Le nom de la table SQL .
— 4 : Le nom de Data Source .
Nous avons utilisé ces variables dans WinCC dans la figure 1.33 .
36
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Pour afficher les données, nous ajoutons un DataGridView à partir de la liste des outils.
Ensuite, nous passons à Form.cs pour écrire le code nécessaire, présenté dans la figure ci-dessous.
Ce code représente une méthode qui se déclenche lors du chargement de la fenêtre (ou du
contrôle) DataHistory. Voici ce qu’il fait étape par étape :
— Création d’une connexion à une base de données SQL Server en utilisant la classe SqlConnection
et la chaîne de connexion avec les variables _Data_Source et _NameDatabase.
— Vérification de la fermeture de la connexion.
— Ouverture de la connexion.
— Vérification si la table (_NameTable) n’est pas vide.
— Exécution d’une requête SQL pour sélectionner toutes les colonnes de la table spécifiée en utilisant
un objet SqlCommand, puis exécution avec un objet SqlDataAdapter.
— Stockage des données résultantes dans un objet DataTable nommé dt.
— Association de l’objet dt à la source de données, une grille de données dans une interface
utilisateur.
Ce code permet de charger des données à partir d’une table spécifique d’une base de données
SQL Server dans une grille de données (dataGridView2). Pour consulter le code , Voir Annexe
T.
37
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Pour filtrer les données par version, nous ajoutons un ComboBox dans l’espace utilisateur en
suivant les étapes présentées dans la figure 1.47.
Cette méthode récupère des données de la base de données en fonction de la sélection dans
comboBox1 et les affiche dans une grille de données. En fonction de la sélection dans comboBox1, une
requête SQL est construite :
— Si l’élément sélectionné est "ALL", une requête pour sélectionner toutes les données de la table
spécifiée est créée.
— Sinon, une requête pour sélectionner les données de la table où les quatre premiers caractères de
la colonne "QRCode" correspondent à la version sélectionnée est créée.
— Les résultats de la requête SQL sont stockés dans un objet DataTable (dt1).
— La source de données de la grille dataGridView2 est définie comme étant ce DataTable.
Cette fonction permet de filtrer les données de table dans un intervalle de temps [de date 1
vers date 2]. Nous avons créé deux DateTimePicker et un bouton. On choisit les deux dates comme
premier step, puis on clique sur le bouton "Load". Seules les pièces entre ces deux dates s’affichent sur
DataGridView.
Ce code établit une connexion à une base de données SQL Server en utilisant une chaîne de
connexion intégrée, exécute une requête SQL pour récupérer des données d’une table spécifique dans
une plage de dates définie, puis affiche les résultats dans un contrôle DataGridView.
Pour consulter le code , Voir Annexe T.
Cette fonction permet de filtrer les données selon le QRCode de la pièce. Pour l’utilisateur, il
suffit d’écrire le QRCode et de cliquer sur "Find".
38
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Ce code exécute une requête SQL pour rechercher des données dans une table spécifique en
fonction d’un QR Code fourni par l’utilisateur, puis affiche les résultats dans un contrôle DataGridView.
Pour consulter le code , Voir Annexe T.
Cette fonction permet d’afficher les données selon l’état de la pièce "OK" ou "NOK" dans la
station sélectionnée par l’utilisateur. L’utilisateur choisit la station en utilisant le ComboBox et écrit
l’état de la pièce désirée ("OK" ou "NOK"), puis clique sur "Get the pieces".
Ce code exécute une requête SQL pour rechercher des données dans une table spécifique en
fonction de la valeur fournie dans un champ de texte (textBox1), correspondant à la colonne sélectionnée
dans un ComboBox (comboBox2), puis affiche les résultats dans un contrôle DataGridView.
Pour consulter le code , Voir Annexe T.
Si l’utilisateur désire afficher toutes les données sans filtre, il suffit de cliquer sur "« Without
Filter »".
Ce code exécute une requête SQL pour récupérer toutes les données d’une table spécifique et
les affiche dans un contrôle DataGridView lorsqu’un utilisateur clique sur un lien (linkLabel1). Si une
erreur se produit lors de la connexion à la base de données ou lors de l’exécution de la requête SQL,
un message d’erreur est affiché.
Pour consulter le code , Voir Annexe T.
Lorsque l’utilisateur clique sur le QR Code de la pièce et s’assure d’être connecté en tant que
régleur, une nouvelle fenêtre s’ouvre. L’utilisateur peut alors modifier les valeurs désirées avant de
cliquer sur le bouton "Update", comme illustré dans la figure 1.48.
39
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Passons maintenant à la décomposition du code dans la classe UpdateForm. Cette classe est
utilisée pour gérer la mise à jour des données dans une base de données.
— Propriétés de la Classe :
— _NameDatabase, _NameTable, _Data_Source : Ce sont des propriétés publiques qui stockent
respectivement le nom de la base de données, le nom de la table et la source de données
(probablement une chaîne de connexion SQL).
— Constructeur UpdateForm :
— Prend un tableau de chaînes rowDataArray en argument lors de l’initialisation.
— Ajoute des colonnes au contrôle DataGridView (dataGridView1) en fonction de la valeur
du QR Code (rowDataArray[0]).
— Remplit la première ligne du DataGridView avec les données de rowDataArray.
— Événement clic sur le bouton "Update" dans le formulaire :
— Construit une chaîne de connexion SQL connectionString en utilisant les propriétés de la
classe.
— En fonction de la version de la pièce, il définit une requête SQL de mise à jour spécifique
pour chaque type de données.
— Établit une connexion à la base de données à l’aide de SqlConnection et exécute la requête de
mise à jour pour chaque ligne dans le DataGridView.
40
Chapitre 1. Archivage & Taraçabilité Wincc RT PRO V16 & SQL Server 2019
Lorsque l’utilisateur clique sur le bouton « Export » dans l’interface utilisateur de notre
application, cela déclenche l’événement Export_Click. Ce dernier ouvre une fenêtre appelée export,
où l’utilisateur peut choisir une date de début et une date de fin pour la plage de données à exporter.
Une fois que l’utilisateur a confirmé sa sélection de dates, les données correspondantes sont extraites
de dataGridView2 de la fenêtre principale.Comme il est illustré dans la figure 1.50.
Nous utilisons des fonctionnalités de Microsoft Office Interop pour créer et manipuler des fichiers
Excel à partir de notre application. Lorsque l’utilisateur confirme les dates de la plage de données, un
nouveau thread est lancé pour gérer le processus d’exportation. Cela garantit que l’interface utilisateur
reste réactive pendant l’exportation des données volumineuses vers Excel.
La méthode ThreadExport est responsable de la logique d’exportation effective vers Excel. Elle
filtre les données en fonction des dates sélectionnées par l’utilisateur et les écrit dans un nouveau fichier
Excel. Une fois l’exportation terminée avec succès, un message est affiché pour informer l’utilisateur
que l’exportation a réussi.
Vous pouvez consulter le code dans l’Annexe U.
1.9 Conclusion
En conclusion, ce guide offre une approche détaillée et pratique pour exploiter pleinement les
capacités d’archivage et de traçabilité de WinCC RT PRO V16 en collaboration avec SQL Server 2019.
En suivant les étapes et les bonnes pratiques présentées ici, vous êtes désormais prêt à optimiser la
gestion de vos données industrielles.
41
42
Annexes
Annexe A
1
2
3 Sub Tracabilite_WS10()
4
5
6 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''
7 ''
''
8 '' Traceability
Station_WS10 ''
9 ''
''
10 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''
'
11
12 If SmartTags("DB_Gestion_Archivage_Top_Traçabilité_WS10") = 1 Then
13
14 Dim conn, rs, cmdExist, cmdSelect
15 Dim Matrix, etat, IsValidDataMatrix
16 Dim top_tracability , status_ws10
17 Dim cancelPressed ,tr
18
19 ' Read values from SmartTags
20 Matrix = SmartTags("DB_Gestion_Archivage_DataMatrix_WS10")
21 status_ws10 = SmartTags("DB_Gestion_Archivage_Status_WSn-1_ws10")
22
23
24
25 ' Open database connection
26 Set conn = CreateObject("ADODB.Connection") ' Creation of ADO Object named conn
27 conn.ConnectionString = "Provider=SQLOLEDB;Data Source=WISSAL\WINCC;" & _
28 "Initial Catalog=database;" & _
29 "Integrated Security=SSPI;" & _
30 "DSN=Data_base;"
31 conn.Open
32
33 Set cmdExist = CreateObject("ADODB.Command")
34 Set cmdExist.ActiveConnection = conn
35 cmdExist.CommandText = "SELECT COUNT(*) FROM Table_Wiss WHERE QRCode = '" & Matrix
& "'"
36 On Error Resume Next
37 Set rs = cmdExist.Execute
38 On Error GoTo 0
39
40
41 If Not rs Is Nothing Then
42 Dim recordCount
43 recordCount = rs.Fields(0).Value
44
45 If recordCount > 0 Then
46
47 Set cmdSelect = CreateObject("ADODB.Command")
48 Set cmdSelect.ActiveConnection = conn
49 cmdSelect.CommandText = "SELECT State_WS10 FROM Table_Wiss WHERE QRCode =
'" & Matrix & "'"
50
51 On Error Resume Next
52 Set rs = cmdSelect.Execute
53 On Error GoTo 0
54
55 If Not rs.EOF Then
56
57 etat = Trim(rs.Fields("State_WS10").Value)
58 If etat = "OK" Then
59 SmartTags("DB_Gestion_Archivage_Status_WSn-1_ws10") = 2
60 'MsgBox "Record found OK" ,vbOKOnly, "Information"
61 ElseIf etat = "NOK" Then
62 SmartTags("DB_Gestion_Archivage_Status_WSn-1_ws10") = 3
63 'MsgBox "Record found NOK ", vbOKOnly, "Information"
64 Else
43
Annexes
65 SmartTags("DB_Gestion_Archivage_Status_WSn-1_ws10") = 0
66 ' MsgBox " ERROR " , vbOKOnly, "Information"
67 End If
68
69 Else
70
71 'MsgBox "State_WS10 is not available for QRCode: " & Matrix,
vbExclamation, "Error"
72 End If
73 Else
74
75 SmartTags("DB_Gestion_Archivage_Status_WSn-1_ws10") = 1
76 ' MsgBox "Record not found" , vbOKOnly, "Information"
77 End If
78 Else
79 MsgBox "Error executing database query.", vbExclamation, "Error"
80 End If
81 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''
82
83 ' Close connection
84 conn.Close
85
86
87 Set conn = Nothing
88 Set cmdExist = Nothing
89 Set cmdSelect = Nothing
90 Set rs = Nothing
91
92
93 SmartTags("DB_Gestion_Archivage_Top_Traçabilité_WS10") = 0
94
95 End If
96
97 End Sub
44
Annexes
Annexe B
1
2
3 Sub Tracabilite_ws20()
4 Dim conn, rs, cmdExist, cmdSelect
5 Dim Matrix, etat, IsValidDataMatrix
6 Dim top_tracability
7 Dim cancelPressed ,tr ,etat_WS20
8
9
10 Matrix = SmartTags("DB_Archive_DataMatrix_WS20") ' Récuperer le dataMatrix
11 If SmartTags("DB_Archive_Top_Tracabilite") = 1 Then
12
13 ' Connexion avec la base de données
14 Set conn = CreateObject("ADODB.Connection")
15 conn.ConnectionString = "Provider=SQLOLEDB;Data Source=WISSAL\WINCC;" & _
16 "Initial Catalog=database;" & _
17 "Integrated Security=SSPI;" & _
18 "DSN=Data_base;"
19 conn.Open
20
21 Set cmdExist = CreateObject("ADODB.Command")
22 Set cmdExist.ActiveConnection = conn
23 'check if DataMatrix already exists
24 cmdExist.CommandText = "SELECT COUNT(*) FROM Table_Wiss WHERE QRCode = '" & Matrix
& "'"
25 On Error Resume Next
26 Set rs = cmdExist.Execute
27 On Error GoTo 0
28
29 If Not rs Is Nothing Then
30 Dim recordCount
31 recordCount = rs.Fields(0).Value
32
33 If recordCount > 0 Then
34
35 Set cmdSelect = CreateObject("ADODB.Command")
36 Set cmdSelect.ActiveConnection = conn
37 'Récuperer les States
38 cmdSelect.CommandText = "SELECT State_WS10 , State_WS20 FROM Table_Wiss
WHERE QRCode = '" & Matrix & "'"
39
40 On Error Resume Next
41 Set rs = cmdSelect.Execute
42 On Error GoTo 0
43
44 If Not rs.EOF Then
45
46
47 etat = Trim(rs.Fields("State_WS10").Value) 'etat de station WS10
48 etat_WS20 = Trim(rs.Fields("State_WS20").Value) 'etat de station WS20
49
50
51 If IsNull(etat_WS20) Then ' IsNull is means that the piece not
done !
52 If etat = "OK" Then
53 SmartTags("DB_Archive_Status_WSn-1")= 2
54 Else
55 SmartTags("DB_Archive_Status_WSn-1") = 3
56 End If
57
58 ElseIf SmartTags("DB_Archive_Button_Rework") = 1 Then
59 If etat = "OK" Then
60 SmartTags("DB_Archive_Status_WSn-1")= 2
61 Else
62 SmartTags("DB_Archive_Status_WSn-1") = 3
63 End If
64 Else
65 SmartTags("DB_Archive_Status_WSn-1") = 4
66 End If
67
68
69 Else
70
45
Annexes
71 End If
72 Else
73 SmartTags("DB_Archive_Status_WSn-1") = 1
74 ' MsgBox "Status_WS10 " & SmartTags("DB_Archive_Status_WSn-1") & ": Record
not found"
75 End If
76 Else
77 'MsgBox "Error executing database query.", vbExclamation, "Error"
78 End If
79 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''
80
81 ' Close connection
82 conn.Close
83
84 ' Release objects
85 Set conn = Nothing
86 Set cmdExist = Nothing
87 Set cmdSelect = Nothing
88 Set rs = Nothing
89 SmartTags("DB_Archive_Top_Tracabilite") = 0
90
91 End If
92 End Sub
46
Annexes
Annexe C
1
2
3 Sub Tracabilite_ws30()
4
5 ' Traceability Station_WS30
6 If SmartTags("DB_Archivage_Top_Tracabilite_WS30") = 1 Then
7
8 Dim conn, rs, cmdExist, cmdSelect
9 Dim Matrix, etat, IsValidDataMatrix
10 Dim top_tracability , etat1
11 Dim cancelPressed
12
13 Matrix = SmartTags("DB_Archivage_DataMatrix_WS30")
14
15
16
17
18 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''
19 ' Open database connection
20 Set conn = CreateObject("ADODB.Connection")
21 conn.ConnectionString = "Provider=SQLOLEDB;Data Source=WISSAL\WINCC;" & _
22 "Initial Catalog=database;" & _
23 "Integrated Security=SSPI;" & _
24 "DSN=Data_base;"
25 conn.Open
26
27 Set cmdExist = CreateObject("ADODB.Command")
28 Set cmdExist.ActiveConnection = conn
29 cmdExist.CommandText = "SELECT COUNT(*) FROM Table_Wiss WHERE QRCode = '" & Matrix
& "'"
30 On Error Resume Next
31 Set rs = cmdExist.Execute
32 On Error GoTo 0
33
34 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''
35 If Not rs Is Nothing Then
36 Dim recordCount
37 recordCount = rs.Fields(0).Value
38
39 If recordCount > 0 Then
40 ' The line exists, select State_WS10
41 Set cmdSelect = CreateObject("ADODB.Command")
42 Set cmdSelect.ActiveConnection = conn
43 cmdSelect.CommandText = "SELECT State_WS20 FROM Table_Wiss WHERE QRCode =
'" & Matrix & "'"
44
45 On Error Resume Next
46 Set rs = cmdSelect.Execute
47 On Error GoTo 0
48
49 If Not rs.EOF Then
50
51 etat1 = rs.Fields("State_WS30").Value
52
53
54 etat = Trim(rs.Fields("State_WS20").Value)
55
56
57
58 If IsNull(etat1) Then
59 If etat = "OK" Then
60 SmartTags("DB_Archivage_Status_WSn-1") = 2
61 'MsgBox "Record found OK"
62
63 ElseIf etat = "NOK" Then
64 SmartTags("DB_Archivage_Status_WSn-1") = 3
65 ' MsgBox "Record found NOK "
66 End If
67 Else
68 SmartTags("DB_Archivage_Status_WSn-1") = 4
69 'MsgBox "Status ERROR!!!"
47
Annexes
70 End If
71
72
73
74 Else
75 'MsgBox "State_WS20 is not available for QRCode: " & Matrix,
vbExclamation, "Error"
76 End If
77 Else
78 SmartTags("DB_Archivage_Status_WSn-1") = 1
79 'MsgBox "Record not found!"
80 End If
81 Else
82
83 MsgBox "Error executing database query."
84 End If
85 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''
86
87 ' Close connection
88 conn.Close
89
90 ' Release objects
91 Set conn = Nothing
92 Set cmdExist = Nothing
93 Set cmdSelect = Nothing
94 Set rs = Nothing
95 SmartTags("DB_Archivage_Top_Tracabilite_WS30") = 0
96 End If
97 End Sub
48
Annexes
Annexe D
1
2
3 Sub Tracabilite_ws40()
4
5
6 If SmartTags("DB_Archivage_Top_Tracabilite_WS40") = 1 Then
7
8 Dim conn, rs, cmdExist, cmdSelect
9 Dim Matrix, etat, IsValidDataMatrix
10 Dim top_tracability,etat1
11 Dim cancelPressed
12
13 Matrix = SmartTags("DB_Archivage_DataMatrix_WS40")
14
15
16 ' Open database connection
17 Set conn = CreateObject("ADODB.Connection")
18 conn.ConnectionString = "Provider=SQLOLEDB;Data Source=WISSAL\WINCC;" & _
19 "Initial Catalog=database;" & _
20 "Integrated Security=SSPI;" & _
21 "DSN=Data_base;"
22 conn.Open
23
24 Set cmdExist = CreateObject("ADODB.Command")
25 Set cmdExist.ActiveConnection = conn
26 cmdExist.CommandText = "SELECT COUNT(*) FROM Table_Wiss WHERE QRCode = '" & Matrix
& "'"
27
28 On Error Resume Next
29 Set rs = cmdExist.Execute
30 On Error GoTo 0
31
32 ' State of the piece
33 If Not rs Is Nothing Then
34 Dim recordCount
35 recordCount = rs.Fields(0).Value
36
37 If recordCount > 0 Then
38
39 Set cmdSelect = CreateObject("ADODB.Command")
40 Set cmdSelect.ActiveConnection = conn
41
42 cmdSelect.CommandText = "SELECT State_WS20,State_WS30,State_WS40 FROM
Table_Wiss WHERE QRCode = '" & Matrix & "'"
43
44
45 On Error Resume Next
46 Set rs = cmdSelect.Execute
47 On Error GoTo 0
48 If Left(Matrix, 4) = "XC13" Then
49 etat = Trim(rs.Fields("State_WS30").Value)
50 Else
51 etat = Trim(rs.Fields("State_WS20").Value)
52 End If
53
54 etat1 = Trim(rs.Fields("State_WS40").Value)
55 If Not rs.EOF Then
56 If IsNull(etat1) Then
57 If etat = "OK" Then
58 SmartTags("DB_Archivage_Status_WSn-1_WS40") = 2
59 ' MsgBox "Record found State Ok "
60 ElseIf etat = "NOK" Then
61
62 SmartTags("DB_Archivage_Status_WSn-1_WS40") = 3
63 'MsgBox "Record found State NOK "
64 End If
65 Else
66 SmartTags("DB_Archivage_Status_WSn-1_WS40") = 4
67 End If
68
69
70 Else
71
49
Annexes
72 ' MsgBox "State_WS20 is not available for QRCode: " & Matrix,
vbExclamation, "Error"
73 End If
74 Else
75 SmartTags("DB_Archivage_Status_WSn-1_WS40") = 1
76 ' MsgBox "Record not found!"
77 End If
78 Else
79 MsgBox "Error executing database query.", vbExclamation, "Error"
80 End If
81
82 ' Close connection
83 conn.Close
84
85 ' Release objects
86 Set conn = Nothing
87 Set cmdExist = Nothing
88 Set cmdSelect = Nothing
89 Set rs = Nothing
90 SmartTags("DB_Archivage_Top_Tracabilite_WS40") = 0
91 End If
92 End Sub
50
Annexes
Annexe E
1
2
3 Sub Tracabilite_ws50()
4 If SmartTags("DB_Gestion_Archivage_Top_Traçabilité_WS50") = 1 Then
5 Dim conn, rs, cmdExist, cmdSelect
6 Dim Matrix, etat, IsValidDataMatrix
7 Dim top_tracability,etat1
8 Dim cancelPressed
9
10
11 Matrix = SmartTags("DB_Gestion_Archivage_DataMatrix_WS50")
12
13
14 Set conn = CreateObject("ADODB.Connection")
15 conn.ConnectionString = "Provider=SQLOLEDB;Data Source=WISSAL\WINCC;" & _
16 "Initial Catalog=database;" & _
17 "Integrated Security=SSPI;" & _
18 "DSN=Data_base;"
19 conn.Open
20
21 Set cmdExist = CreateObject("ADODB.Command")
22 Set cmdExist.ActiveConnection = conn
23 cmdExist.CommandText = "SELECT COUNT(*) FROM Table_Wiss WHERE QRCode = '" & Matrix
& "'"
24
25 On Error Resume Next
26 Set rs = cmdExist.Execute
27 On Error GoTo 0
28
29
30 If Not rs Is Nothing Then
31 Dim recordCount
32 recordCount = rs.Fields(0).Value
33
34 If recordCount > 0 Then
35
36 Set cmdSelect = CreateObject("ADODB.Command")
37 Set cmdSelect.ActiveConnection = conn
38 cmdSelect.CommandText = "SELECT State_WS40,State_WS50 FROM Table_Wiss
WHERE QRCode = '" & Matrix & "'"
39
40
41 On Error Resume Next
42 Set rs = cmdSelect.Execute
43 On Error GoTo 0
44
45 If Not rs.EOF Then
46
47 etat = Trim(rs.Fields("State_WS40").Value)
48 etat1= Trim(rs.Fields("State_WS50").Value)
49
50
51 If IsNull(etat1) Then
52 If etat = "OK" Then
53 SmartTags("DB_Gestion_Archivage_Status_WSn-1_WS50") = 2
54 Else
55 SmartTags("DB_Gestion_Archivage_Status_WSn-1_WS50") = 3
56 End If
57
58 ElseIf SmartTags("DB_Gestion_Archivage_Rework") = 1 Then
59 If etat = "OK" Then
60 SmartTags("DB_Gestion_Archivage_Status_WSn-1_WS50") = 2
61 Else
62 SmartTags("DB_Gestion_Archivage_Status_WSn-1_WS50") = 3
63 End If
64 Else
65 SmartTags("DB_Gestion_Archivage_Status_WSn-1_WS50") = 4
66 ' MsgBox "Status ERROR ! "
67 End If
68
69
70
71 Else
51
Annexes
72
73 'MsgBox "State_WS40 is not available for QRCode: " & Matrix,
vbExclamation, "Error"
74 End If
75 Else
76
77 SmartTags("DB_Gestion_Archivage_Status_WSn-1_WS50") = 1
78 ' MsgBox "Record not found!"
79 End If
80 Else
81 MsgBox "Error executing database query.", vbExclamation, "Error"
82 End If
83
84
85 conn.Close
86
87
88 Set conn = Nothing
89 Set cmdExist = Nothing
90 Set cmdSelect = Nothing
91 Set rs = Nothing
92 End If
93
94
95 SmartTags("DB_Gestion_Archivage_Top_Traçabilité_WS50") = 0
96 End Sub
52
Annexes
Annexe F
1
2
3 Sub Tracabilite_ws60()
4
5 If SmartTags("DB_Archive_Top_Tracabilite_WS60") = 1 Then
6
7 Dim conn, rs, cmdExist, cmdSelect
8 Dim Matrix, etat, IsValidDataMatrix
9 Dim top_tracability
10 Dim cancelPressed,etat1
11
12
13 Matrix = SmartTags("DB_Archive_DataMatrix_WS60")
14
15
16
17 Set conn = CreateObject("ADODB.Connection")
18 conn.ConnectionString = "Provider=SQLOLEDB;Data Source=WISSAL\WINCC;" & _
19 "Initial Catalog=database;" & _
20 "Integrated Security=SSPI;" & _
21 "DSN=Data_base;"
22 conn.Open
23
24 Set cmdExist = CreateObject("ADODB.Command")
25 Set cmdExist.ActiveConnection = conn
26 cmdExist.CommandText = "SELECT COUNT(*) FROM Table_Wiss WHERE QRCode = '" & Matrix
& "'"
27
28 On Error Resume Next
29 Set rs = cmdExist.Execute
30 On Error GoTo 0
31
32
33 If Not rs Is Nothing Then
34 Dim recordCount
35 recordCount = rs.Fields(0).Value
36
37 If recordCount > 0 Then
38
39 Set cmdSelect = CreateObject("ADODB.Command")
40 Set cmdSelect.ActiveConnection = conn
41
42 cmdSelect.CommandText = "SELECT State_WS40,State_WS50,State_WSS60 FROM
Table_Wiss WHERE QRCode = '" & Matrix & "'"
43
44
45 On Error Resume Next
46 Set rs = cmdSelect.Execute
47 On Error GoTo 0
48 If Left(Matrix, 4) = "XC13" Or Left(Matrix, 4) = "F28A" Then
49 etat = Trim(rs.Fields("State_WS50").Value)
50 Else
51 etat = Trim(rs.Fields("State_WS40").Value)
52
53 End If
54 If Not rs.EOF Then
55
56 etat1 = Trim(rs.Fields("State_WS60").Value)
57
58 If IsNull(etat1) Then
59 If etat = "OK" Then
60 SmartTags("DB_Archive_Status_WSn-1_WS60") = 2
61 'MsgBox "Record found OK"
62 ElseIf etat = "NOK" Then
63 SmartTags("DB_Archive_Status_WSn-1_WS60") = 3
64 ' MsgBox "Record found NOK "
65 End If
66 Else
67 SmartTags("DB_Archive_Status_WSn-1_WS60") = 4
68 'MsgBox "Status ERROR!!!"
69 End If
70
71 Else
53
Annexes
72
73 ' MsgBox "State_WS50 is not available for QRCode: " & Matrix,
vbExclamation, "Error"
74 End If
75 Else
76
77 SmartTags("DB_Archive_Status_WSn-1_WS60") = 1
78 'MsgBox "Record not found!"
79 End If
80 Else
81 MsgBox "Error executing database query.", vbExclamation, "Error"
82 End If
83
84 ' Close connection
85 conn.Close
86
87 ' Release objects
88 Set conn = Nothing
89 Set cmdExist = Nothing
90 Set cmdSelect = Nothing
91 Set rs = Nothing
92 SmartTags("DB_Archive_Top_Tracabilite_WS60") = 0
93 End If
94 End Sub
54
Annexes
Annexe G
1
2
3 Sub Tracabilite_ws70()
4
5 If SmartTags("DB_Gestion_Archivage_Top_Traçabilité") = 1 Then
6
7
8 Dim conn, rs, cmdExist, cmdSelect
9 Dim Matrix, etat, IsValidDataMatrix
10 Dim top_tracability
11 Dim cancelPressed,etat1
12
13
14 Matrix = SmartTags("DB_Gestion_Archivage_DataMatrix")
15
16
17
18
19 Set conn = CreateObject("ADODB.Connection")
20 conn.ConnectionString = "Provider=SQLOLEDB;Data Source=WISSAL\WINCC;" & _
21 "Initial Catalog=database;" & _
22 "Integrated Security=SSPI;" & _
23 "DSN=Data_base;"
24 conn.Open
25
26 Set cmdExist = CreateObject("ADODB.Command")
27 Set cmdExist.ActiveConnection = conn
28 cmdExist.CommandText = "SELECT COUNT(*) FROM Table_Wiss WHERE QRCode = '" & Matrix
& "'"
29
30 On Error Resume Next
31 Set rs = cmdExist.Execute
32 On Error GoTo 0
33
34 ' State of the piece
35 If Not rs Is Nothing Then
36 Dim recordCount
37 recordCount = rs.Fields(0).Value
38
39 If recordCount > 0 Then
40
41 Set cmdSelect = CreateObject("ADODB.Command")
42 Set cmdSelect.ActiveConnection = conn
43 cmdSelect.CommandText = "SELECT State_WS60,State_WS70 FROM Table_Wiss
WHERE QRCode = '" & Matrix & "'"
44 On Error Resume Next
45 Set rs = cmdSelect.Execute
46 On Error GoTo 0
47
48 If Not rs.EOF Then
49 etat = Trim(rs.Fields("State_WS60").Value)
50 etat1 = Trim(rs.Fields("State_WS70").Value)
51
52
53 If IsNull(etat1) Then
54 If etat = "OK" Then
55 SmartTags("DB_Gestion_Archivage_Status_WSn-1")= 2
56 'MsgBox "Record found OK"
57 ElseIf etat = "NOK" Then
58 SmartTags("DB_Gestion_Archivage_Status_WSn-1") = 3
59 ' MsgBox "Record found NOK "
60 End If
61 Else
62 SmartTags("DB_Gestion_Archivage_Status_WSn-1") = 4
63 'MsgBox "Status ERROR!!!"
64 End If
65 End If
66 Else
67
68 SmartTags("DB_Gestion_Archivage_Status_WSn-1") = 1
69 ' MsgBox "Record not found!"
70 End If
71 Else
55
Annexes
56
Annexes
Annexe H
1
2
3 Sub Tracabilite_ws80()
4
5
6 If SmartTags("Archive_Top_Traçabilité_WS80") = 1 Then
7 Dim conn, rs, cmdExist, cmdSelect
8 Dim Matrix, etat, IsValidDataMatrix
9 Dim top_tracability,etat1
10 Dim cancelPressed
11
12 ' Read values from SmartTags
13 Matrix = SmartTags("Archive_DataMatrix")
14
15
16 ' Open database connection
17 Set conn = CreateObject("ADODB.Connection")
18 conn.ConnectionString = "Provider=SQLOLEDB;Data Source=WISSAL\WINCC;" & _
19 "Initial Catalog=database;" & _
20 "Integrated Security=SSPI;" & _
21 "DSN=Data_base;"
22 conn.Open
23
24 Set cmdExist = CreateObject("ADODB.Command")
25 Set cmdExist.ActiveConnection = conn
26 cmdExist.CommandText = "SELECT COUNT(*) FROM Table_Wiss WHERE QRCode = '" & Matrix
& "'"
27
28 On Error Resume Next
29 Set rs = cmdExist.Execute
30 On Error GoTo 0
31
32 ' State of the piece
33 If Not rs Is Nothing Then
34 Dim recordCount
35 recordCount = rs.Fields(0).Value
36
37 If recordCount > 0 Then
38 ' The line exists, select State_WS10
39 Set cmdSelect = CreateObject("ADODB.Command")
40 Set cmdSelect.ActiveConnection = conn
41 cmdSelect.CommandText = "SELECT State_WS70,State_WS80 FROM Table_Wiss
WHERE QRCode = '" & Matrix & "'"
42
43
44 On Error Resume Next
45 Set rs = cmdSelect.Execute
46 On Error GoTo 0
47
48 etat = Trim(rs.Fields("State_WS70").Value)
49
50 If Not rs.EOF Then
51 If IsNull(etat1) Then
52 If etat = "OK" Then
53 SmartTags("Archive_Status_WSn-1") = 2
54 'MsgBox "Record found OK"
55 ElseIf etat = "NOK" Then
56 SmartTags("Archive_Status_WSn-1") = 3
57 ' MsgBox "Record found NOK "
58 End If
59 Else
60 SmartTags("Archive_Status_WSn-1") = 4
61 'MsgBox "Status ERROR!!!"
62 End If
63
64 End If
65 Else
66
67 SmartTags("Archive_Status_WSn-1") = 1
68 'MsgBox "Record not found!"
69 End If
70 Else
71 MsgBox "Error executing database query.", vbExclamation, "Error"
57
Annexes
72 End If
73
74 ' Close connection
75 conn.Close
76
77
78 Set conn = Nothing
79 Set cmdExist = Nothing
80 Set cmdSelect = Nothing
81 Set rs = Nothing
82
83 SmartTags("Archive_Top_Traçabilité_WS80") = 0
84 End If
85
86
87
88 End Sub
58
Annexes
Annexe I
1
2
3 Sub Archive_WS10()
4 If SmartTags("DB_Gestion_Archivage_Top_Archive_WS10") = 1 Then
5 If SmartTags("DB_Gestion_Archivage_Status_WSn-1_ws10") = 1 Then
6 Dim conn, cmdInsert
7 Set conn = CreateObject("ADODB.Connection")
8 Set cmdInsert = CreateObject("ADODB.Command")
9 Dim Statee, Oke, Nok, Time_in, Time_out , Matrix , outil1 , outil2 , pos1,
pos2,stat,va ,va1
10 va=SmartTags("variable")
11
12 Statee = SmartTags("Statee")
13 Oke = SmartTags("DB_Gestion_Archivage_Part_Ok_WS10")
14 Nok = SmartTags("DB_Gestion_Archivage_Part_NOK_WS10")
15 Time_in = SmartTags("DB_Gestion_Archivage_Time_In_WS10")
16 Time_out = SmartTags("DB_Gestion_Archivage_Time_Out_WS10")
17 outil1 = SmartTags("DB_Gestion_Archivage_Force_Outil1_WS10")
18 outil2 = SmartTags("DB_Gestion_Archivage_Force_Outil2_WS10")
19 pos1 = SmartTags("DB_Gestion_Archivage_Position_Outil1_WS10")
20 pos2 = SmartTags("DB_Gestion_Archivage_Position_Outil2_WS10")
21 stat = SmartTags("DB_Gestion_Archivage_Status_Code_WS10")
22 Matrix = SmartTags("DB_Gestion_Archivage_DataMatrix_WS10")
23 va = CStr(pos1)
24 va1 = CStr(pos2)
25
26 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''
27 If Oke = 1 And Nok = 0 Then
28 Statee = "OK"
29 ElseIf Oke = 0 And Nok = 1 Then
30 Statee = "NOK"
31 Else
32 Statee = "Error"
33 End If
34
35 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''
36
37 'OPEN << data source >>
38 On Error Resume Next
39 conn.ConnectionString = "Provider=SQLOLEDB;Data Source=WISSAL\WINCC;" & _
40 "Initial Catalog=database;" & _
41 "Integrated Security=SSPI;" & _
42 "DSN=Data_base;"
43 conn.Open
44 On Error GoTo 0
45
46 If conn.State = 1 Then ' 1 means the connection is open
47 cmdInsert.ActiveConnection = conn
48 cmdInsert.CommandText = "INSERT INTO Table_Wiss (QRCode,Rework,
State_WS10, Time_In_WS10, Time_Out_WS10, Force_outil1, Force_outil2,
Position_Outil1, Position_Outil2, Status_Code_WS10) VALUES ('" &
Matrix & "','" & 0 & "', '" & Statee & "', '" & Time_in & "', '" &
Time_out & "','" & outil1 & "','" & outil2 & "','" & va & "','" & va1
& "','" & stat & "')"
49 On Error Resume Next
50 cmdInsert.Execute
51 On Error GoTo 0
52 If Err.Number <> 0 Then
53 MsgBox "Error executing insertion command: " & Err.Description,
vbOK, "Error"
54 Err.Clear
55 Else
56 'MsgBox "Data inserted successfully!", vbOK, "Report"
57 SmartTags("DB_Gestion_Archivage_Top_Archive_WS10") = 0
58 'trac = 0
59 ' Update statuus based on Statee
60 If Statee = "OK" Then
61 SmartTags("DB_Gestion_Archivage_Status_WSn-1_ws10") = 2
62 Else
63 SmartTags("DB_Gestion_Archivage_Status_WSn-1_ws10") = 3
64 End If
59
Annexes
65 Matrix = ""
66 Oke = 0
67 Nok = 0
68 Time_in = ""
69 Time_out = ""
70 va = ""
71 va1 = ""
72
73
74 End If
75 Else
76 MsgBox "Error connecting to the database.", vbOK, "Error"
77 End If
78 conn.Close
79 Set conn = Nothing
80 Set cmdInsert = Nothing
81 End If
82 End If
83 End Sub
60
Annexes
Annexe J
1
2
3 Sub Archive_WS20()
4 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''
5 '
'
6 '
Archive_Station_WS20
'
7 '
'
8 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''
9
10
11 If SmartTags("DB_Archive_Top_Archive") = 1 Then
12
13
14 Dim conn, cmdInsert
15 Set conn = CreateObject("ADODB.Connection")
16 Set cmdInsert = CreateObject("ADODB.Command")
17
18 '_____________________________________________________________________________________
____________________________________________________________________________
19
20 Dim Statee, Oke, Nok, Time_in, Time_out ,Orifice1_Nm,Orifice1_A,
Orifice2_Nm,Orifice2_A,Orifice3_Nm,Orifice3_A,Capot,Capot_A,
Purge_Valve1_Nm
21 Dim Purge_Valve1_A , Purge_Valve2_Nm ,Purge_Valve2_A,Anti_Drain_Tube1_Nm,
Anti_Drain_Tube1_A,Anti_Drain_Tube2_Nm
22 Dim Anti_Drain_Tube2_A , Pump_Nm,Pump_A,Capot_Valve_Nm,Capot_Valve_A,
Status_Code_WS20,Matrix ,etat
23
24 Statee = SmartTags("state2_ws20")
25 Oke = SmartTags("DB_Archive_Part_Ok")
26 Nok = SmartTags("DB_Archive_Part_NOK")
27 Time_in = SmartTags("DB_Archive_Time_In")
28 Time_out = SmartTags("DB_Archive_Time_Out")
29 Orifice1_Nm = CStr(SmartTags("DB_Archive_Orifice1_Nm"))
30 Orifice1_A = CStr(SmartTags("DB_Archive_Orifice1_A°"))
31 Orifice2_Nm = CStr(SmartTags("DB_Archive_Orifice2_Nm"))
32 Orifice2_A = CStr(SmartTags("DB_Archive_Orifice2_A°"))
33 Orifice3_Nm = CStr(SmartTags("DB_Archive_Orifice3_Nm"))
34 Orifice3_A = CStr(SmartTags("DB_Archive_Orifice3_A°"))
35 Capot = CStr(SmartTags("DB_Archive_Capot_Nm"))
36 Capot_A =CStr(SmartTags("DB_Archive_Capot_A°"))
37 Purge_Valve1_Nm = CStr(SmartTags("DB_Archive_Purge_Valve1_Nm"))
38 Purge_Valve1_A = CStr(SmartTags("DB_Archive_Purge_Valve1_A°"))
39 Purge_Valve2_Nm = CStr(SmartTags("DB_Archive_Purge_Valve2_Nm"))
40 Purge_Valve2_A = CStr(SmartTags("DB_Archive_Purge_Valve2_A°"))
41 Anti_Drain_Tube1_Nm = CStr(SmartTags("DB_Archive_Anti_Drain_Tube1_Nm"))
42 Anti_Drain_Tube1_A = CStr(SmartTags("DB_Archive_Anti_Drain_Tube1_A°"))
43 Anti_Drain_Tube2_Nm = CStr(SmartTags("DB_Archive_Anti_Drain_Tube2_Nm"))
44 Anti_Drain_Tube2_A = CStr(SmartTags("DB_Archive_Anti_Drain_Tube2_A°"))
45 Pump_Nm = CStr(SmartTags("DB_Archive_Pump_Nm"))
46 Pump_A = CStr(SmartTags("DB_Archive_Pump_A°"))
47 Capot_Valve_Nm = CStr(SmartTags("DB_Archive_Capot_Valve_Nm"))
48 Capot_Valve_A=CStr(SmartTags("DB_Archive_Capot_Valve_A°"))
49 Status_Code_WS20 = SmartTags("DB_Archive_Satatus_Code")
50 Matrix = SmartTags("DB_Archive_DataMatrix_WS20")
51 '_____________________________________________________________________________________
___________________________________________________________________________________
52
53
54 If Oke = 1 And Nok = 0 Then
55 Statee = "OK"
56 ElseIf Oke = 0 And Nok = 1 Then
57 Statee = "NOK"
58 Else
59 Statee = "Error"
60 End If
61
61
Annexes
62 '_____________________________________________________________________________________
___________________________________________________
63
64
65 On Error Resume Next
66 conn.ConnectionString = "Provider=SQLOLEDB;Data Source=WISSAL\WINCC;" & _
67 "Initial Catalog=database;" & _
68 "Integrated Security=SSPI;" & _
69 "DSN=Data_base;"
70 conn.Open
71 On Error GoTo 0
72
73 '_______________________________________________________ Status_WS20 = 2
__________________________________________________________________
74
75 If SmartTags("DB_Archive_Status_WSn-1") = 2 Then
76 If SmartTags("DB_Archive_Button_Rework") = 0 Then
77 '_________ Mode Normal __________
78 If conn.State = 1 Then
79 Dim cmdExist, rs, cmdSelect
80 Set cmdExist = CreateObject("ADODB.Command")
81 cmdExist.ActiveConnection = conn
82 cmdExist.CommandText = "SELECT COUNT(*) FROM Table_Wiss WHERE QRCode = '" &
Matrix & "'"
83
84 On Error Resume Next
85 Set rs = cmdExist.Execute
86 On Error GoTo 0
87
88 If Not rs Is Nothing Then
89 Dim recordCount
90 recordCount = rs.Fields(0).Value
91
92 If recordCount > 0 Then
93
94 Set cmdSelect = CreateObject("ADODB.Command")
95 cmdSelect.ActiveConnection = conn
96 cmdSelect.CommandText = "SELECT State_WS20 FROM Table_Wiss WHERE
QRCode = '" & Matrix & "'"
97
98 On Error Resume Next
99 Set rs = cmdSelect.Execute
100 On Error GoTo 0
101
102 If Not rs.EOF Then
103
104 etat = Trim(rs.Fields("State_WS20").Value)
105
106 If IsNull(etat) Then
107 cmdInsert.ActiveConnection = conn
108 cmdInsert.CommandText = "UPDATE Table_Wiss SET State_WS20 =
'" & Statee & "', Time_In_WS20 = '" &Time_in & "',
Time_Out_WS20 = '" & Time_out & "' , Orifice1_Nm = '" &
Orifice1_Nm & "',Orifice1_A = '" & Orifice1_A &
"',Orifice2_Nm = '" & Orifice2_Nm & "' , Orifice2_A = '" &
Orifice2_A & "', Orifice3_Nm = '" & Orifice3_Nm & "' ,
Orifice3_A = '"& Orifice3_A &"' , Capot_Nm = '"& Capot & "'
,Capot_A = '"& Capot_A &"' ,Purge_Valve1_Nm = '"&
Purge_Valve1_Nm&"' , Purge_Valve1_A = '" & Purge_Valve1_A &
"' , Purge_Valve2_Nm = '"&Purge_Valve2_Nm &"' ,
Purge_Valve2_A = '"& Purge_Valve2_A & "' ,
Anti_Drain_Tube1_Nm = '" & Anti_Drain_Tube1_Nm & "'
,Anti_Drain_Tube1_A = '" & Anti_Drain_Tube1_A & "',
Anti_Drain_Tube2_Nm = '" & Anti_Drain_Tube2_Nm & "' ,
Anti_Drain_Tube2_A = '" & Anti_Drain_Tube2_A & "' , Pump_Nm =
'" & Pump_Nm & "' , Pump_A = '" & Pump_A & "' ,
Capot_Valve_Nm = '" & Capot_Valve_Nm & "' , Capot_Valve_A = '"
& Capot_Valve_A &"' , Status_Code_WS20 = '" &
Status_Code_WS20 & "' WHERE QRCode = '" & SmartTags(
"DB_Archive_DataMatrix_WS20") & "'"
109
110 On Error Resume Next
111 cmdInsert.Execute
62
Annexes
63
Annexes
Annexe L
1
2
3 Sub Archive_WS30()
4 If SmartTags("DB_Archivage_Top_Archive_WS30") = 1 Then
5
6
7 Dim conn, cmdInsert
8 Set conn = CreateObject("ADODB.Connection")
9 Set cmdInsert = CreateObject("ADODB.Command")
10
11
12 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
13 Dim Statee, Oke, Nok, Time_in, Time_out,matrix,Torque_Quick_Connector,
Angle_Quick_Connector
14 Dim Torque_CAP_1,Angle_CAP_1,Torque_CAP_2,Angle_CAP_2,
Torque_Connector_2,Angle_Connector_2
15 Dim Force_Therom_Valve,Statut_code_WS30,etat
16
17 Statee = SmartTags("Statee2_ws30")
18 Oke = SmartTags("DB_Archivage_Part_Ok")
19 Nok = SmartTags("DB_Archivage_Part_NOK")
20 Time_in = SmartTags("DB_Archivage_Time_In_WS30")
21 Time_out = SmartTags("DB_Archivage_Time_Out_WS30")
22 matrix = SmartTags("DB_Archivage_DataMatrix_WS30")
23 Torque_Quick_Connector = CStr(SmartTags(
"DB_Archivage_Torque_Quick_Connector"))
24 Angle_Quick_Connector = CStr(SmartTags(
"DB_Archivage_Angle_Quick_Connector"))
25 Torque_CAP_1 = CStr(SmartTags("DB_Archivage_Torque_CAP_1"))
26 Angle_CAP_1 = CStr(SmartTags("DB_Archivage_Angle_CAP_1"))
27 Torque_CAP_2 = CStr(SmartTags("DB_Archivage_Torque_CAP_2"))
28 Angle_CAP_2 = CStr(SmartTags("DB_Archivage_Angle_CAP_2"))
29 Torque_Connector_2 = CStr(SmartTags("DB_Archivage_Torque_Connector_2"
))
30 Angle_Connector_2 = CStr(SmartTags("DB_Archivage_Angle_Connector_2"))
31 Force_Therom_Valve = CStr(SmartTags("DB_Archivage_Force_Therom_Valve"
))
32 Statut_code_WS30 = SmartTags("DB_Archivage_Statut_code")
33
34
35 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
36
37 If Oke = 1 And Nok = 0 Then
38 Statee = "OK"
39 ElseIf Oke = 0 And Nok = 1 Then
40 Statee = "NOK"
41 Else
42 Statee = "Error"
43 End If
44
45 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
46 ' Open data source
47 On Error Resume Next
48 conn.ConnectionString = "Provider=SQLOLEDB;Data Source=WISSAL\WINCC;"
& _
49 "Initial Catalog=database;" & _
50 "Integrated Security=SSPI;" & _
51 "DSN=Data_base;"
52 conn.Open
53 On Error GoTo 0
54
55
56 '_______________________________________________________ Status_WS30 = 2
______________________________________________________________________________________
_________________________________
57
58 If SmartTags("DB_Archivage_Status_WSn-1") = 2 Then
59 If conn.State = 1 Then
60 Dim cmdExist, rs, cmdSelect
61 Set cmdExist = CreateObject("ADODB.Command")
64
Annexes
62 cmdExist.ActiveConnection = conn
63 cmdExist.CommandText = "SELECT COUNT(*) FROM Table_Wiss WHERE QRCode = '" &
matrix & "'"
64
65 On Error Resume Next
66 Set rs = cmdExist.Execute
67 On Error GoTo 0
68
69 If Not rs Is Nothing Then
70 Dim recordCount
71 recordCount = rs.Fields(0).Value
72
73 If recordCount > 0 Then
74
75 Set cmdSelect = CreateObject("ADODB.Command")
76 cmdSelect.ActiveConnection = conn
77 cmdSelect.CommandText = "SELECT State_WS30 FROM Table_Wiss WHERE
QRCode = '" & matrix & "'"
78
79 On Error Resume Next
80 Set rs = cmdSelect.Execute
81 On Error GoTo 0
82
83 If Not rs.EOF Then
84
85 etat = Trim(rs.Fields("State_WS30").Value)
86
87 If IsNull(etat) Then
88 cmdInsert.ActiveConnection = conn
89 If Left(matrix, 4) = "XC13" Then
90 cmdInsert.CommandText = "UPDATE Table_Wiss SET State_WS30
= '" & Statee & "', Time_In_WS30 = '" & Time_in & "',
Time_Out_WS30 = '" &Time_out& "' ,Torque_Quick_Connector
= '" & Torque_Quick_Connector & "',Angle_Quick_Connector
= '" & Angle_Quick_Connector & "' , Torque_CAP_1 = '" &
Torque_CAP_1 & "' , Angle_CAP_1 = '" & Angle_CAP_1 & "' ,
Torque_CAP_2 = '" & Torque_CAP_2 & "' , Angle_CAP_2 = '" &
Angle_CAP_2 & "' , Torque_Connector_2 = '" &
Torque_Connector_2 & "' , Angle_Connector_2 = '" &
Angle_Connector_2 & "' , Force_Therom_Valve = '" &
Force_Therom_Valve & "' , Statut_code_WS30 = '" &
Statut_code_WS30 & "', State_WS50=NULL , Time_In_WS50 =
NULL , Time_Out_WS50 = NULL , Pression_Inlet = NULL ,
Pression_Outlet = NULL , Status_Code_WS50 = NULL WHERE
QRCode = '" & SmartTags("DB_Archivage_DataMatrix_WS30") &
"'"
91
92 Else
93 cmdInsert.CommandText = "UPDATE Table_Wiss SET State_WS30
= 'NONE',State_WS50 = NULL , Time_In_WS30 = NULL,
Time_Out_WS30 = NULL, Torque_Quick_Connector = 'NONE',
Angle_Quick_Connector = 'NONE', Torque_CAP_1 = 'NONE',
Angle_CAP_1 = 'NONE', Torque_CAP_2 = 'NONE', Angle_CAP_2
= 'NONE', Torque_Connector_2 = 'NONE', Angle_Connector_2
= 'NONE', Force_Therom_Valve = 'NONE', Statut_code_WS30 =
NULL WHERE QRCode = '" & SmartTags(
"DB_Archivage_DataMatrix_WS30") & "'"
94
95
96 End If
97 On Error Resume Next
98 cmdInsert.Execute
99 On Error GoTo 0
100
101 If Err.Number <> 0 Then
102 MsgBox "Error executing update command: " &
Err.Description, vbOK, "Error"
103 Err.Clear
104 Else
105 'MsgBox "Data updated successfully!", vbOK, "Report"
106 SmartTags("DB_Archivage_Top_Archive_WS30") = 0
107
108
65
Annexes
109 Oke = 0
110 Nok = 0
111 Time_in = ""
112 Time_out = ""
113 matrix = ""
114 Torque_Quick_Connector = ""
115 Angle_Quick_Connector = ""
116 Torque_CAP_1 = ""
117 Angle_CAP_1 = ""
118 Torque_CAP_2 = ""
119 Angle_CAP_2 = ""
120 Torque_Connector_2 =""
121 Force_Therom_Valve = ""
122 Statut_code_WS30 = 0
123 End If
124
125
126 End If
127 End If
128 End If
129 End If
130 Else
131 MsgBox "Error connecting to the database.", vbOK, "Error"
132 End If
133
134 ' Close connection
135 conn.Close
136
137 ' Release objects
138 Set conn = Nothing
139 Set cmdInsert = Nothing
140 End If
141
142 End Sub
66
Annexes
Annexe M
1
2
3 Sub Archive_ws40()
4 If SmartTags("DB_Archivage_Top_Archive_WS40") = 1 Then
5 Dim conn, cmdInsert
6 Set conn = CreateObject("ADODB.Connection")
7 Set cmdInsert = CreateObject("ADODB.Command")
8
9 ' Declare variables
10 Dim Statee, Oke, Nok, Time_in, Time_out
11 Dim matrix, Torque_Viss_1, Angle_Viss_1, Torque_Viss_2
12 Dim Angle_Viss_2, Torque_Viss_3, Angle_Viss_3, Torque_WD_1, Angle_WD_1,
Torque_WD_2
13 Dim Angle_WD_2, Torque_WD_3, Angle_WD_3, Angle_Bush1, Torque_Bush1,
Torque_Bush2
14 Dim Angle_Bush2, Torque_Drain, Angle_Drain, Status_code_WS40, etat
15
16 ' Retrieve values from SmartTags
17 Statee = SmartTags("Statee2_ws40")
18 Oke = SmartTags("DB_Archivage_Part_OK_WS40")
19 Nok = SmartTags("DB_Archivage_Part_NOK_WS40")
20 Time_in = SmartTags("DB_Archivage_Time_In_WS40")
21 Time_out = SmartTags("DB_Archivage_Time_Out_WS40")
22 matrix = SmartTags("DB_Archivage_DataMatrix_WS40")
23 Torque_Viss_1 = CStr(SmartTags("DB_Archivage_Torque_Viss_1"))
24 Angle_Viss_1 = CStr(SmartTags("DB_Archivage_Angle_Viss_1"))
25 Torque_Viss_2 = CStr(SmartTags("DB_Archivage_Torque_Viss_2"))
26 Angle_Viss_2 = CStr(SmartTags("DB_Archivage_Angle_Viss_2"))
27 Torque_Viss_3 = CStr(SmartTags("DB_Archivage_Torque_Viss_3"))
28 Angle_Viss_3 = CStr(SmartTags("DB_Archivage_Angle_Viss_3"))
29 Torque_WD_1 = CStr(SmartTags("DB_Archivage_Torque_WD_1"))
30 Angle_WD_1 = CStr(SmartTags("DB_Archivage_Angle_WD_1"))
31 Torque_WD_2 = CStr(SmartTags("DB_Archivage_Torque_WD_2"))
32 Angle_WD_2 = CStr(SmartTags("DB_Archivage_Angle_WD_2"))
33 Torque_WD_3 = CStr(SmartTags("DB_Archivage_Torque_WD_3"))
34 Angle_WD_3 = CStr(SmartTags("DB_Archivage_Angle_WD_3"))
35 Angle_Bush1 = CStr(SmartTags("DB_Archivage_Angle_Bush1"))
36 Torque_Bush1 = CStr(SmartTags("DB_Archivage_Torque_Bush1"))
37 Torque_Bush2 = CStr(SmartTags("DB_Archivage_Torque_Bush2"))
38 Angle_Bush2 = CStr(SmartTags("DB_Archivage_Angle_Bush2"))
39 Torque_Drain = CStr(SmartTags("DB_Archivage_Torque_Drain"))
40 Angle_Drain = CStr(SmartTags("DB_Archivage_Angle_Drain"))
41 Status_code_WS40 = SmartTags("DB_Archivage_Statut_code_WS40")
42
43 ' Update Statee based on Oke and Nok
values'''''''''''''''''''''''''''''''''''''''''''
44 If Oke = 1 And Nok = 0 Then
45 Statee = "OK"
46 ElseIf Oke = 0 And Nok = 1 Then
47 Statee = "NOK"
48 Else
49 Statee = "Error"
50 End If
51
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''
52 On Error Resume Next
53 conn.ConnectionString = "Provider=SQLOLEDB;Data Source=WISSAL\WINCC;" & _
54 "Initial Catalog=database;" & _
55 "Integrated Security=SSPI;" & _
56 "DSN=Data_base;"
57 conn.Open
58 On Error GoTo 0
59 If conn.State = 1 Then
60 If SmartTags("DB_Archivage_Status_WSn-1_WS40") = 2 Then
61 Dim cmdExist, rs, cmdSelect
62 Set cmdExist = CreateObject("ADODB.Command")
63 cmdExist.ActiveConnection = conn
64 cmdExist.CommandText = "SELECT COUNT(*) FROM Table_Wiss WHERE QRCode
= '" & matrix & "'"
65
66 On Error Resume Next
67 Set rs = cmdExist.Execute
67
Annexes
68 On Error GoTo 0
69
70 If Not rs Is Nothing Then
71 Dim recordCount
72 recordCount = rs.Fields(0).Value
73
74 If recordCount > 0 Then
75 Set cmdSelect = CreateObject("ADODB.Command")
76 cmdSelect.ActiveConnection = conn
77 cmdSelect.CommandText = "SELECT State_WS40 FROM Table_Wiss
WHERE QRCode = '" & matrix & "'"
78
79 On Error Resume Next
80 Set rs = cmdSelect.Execute
81 On Error GoTo 0
82
83 If Not rs.EOF Then
84 etat = Trim(rs.Fields("State_WS40").Value)
85
86 If IsNull(etat) Then
87 cmdInsert.ActiveConnection = conn
88 cmdInsert.CommandText = "UPDATE Table_Wiss SET
State_WS40 = '" & Statee & "', Time_In_WS40 = '" &
Time_in & "', Time_Out_WS40 = '" & Time_out & "',
Torque_Viss_1 = '" & Torque_Viss_1 & "' ,
Angle_Viss_1 = '" & Angle_Viss_1 & "' , Torque_Viss_2
= '" & Torque_Viss_2 & "' , Angle_Viss_2 = '" &
Angle_Viss_2 & "' , Torque_Viss_3 = '" &
Torque_Viss_3 & "' , Angle_Viss_3 = '" & Angle_Viss_3
& "' , Torque_WD_1 = '" & Torque_WD_1 & "' ,
Angle_WD_1 = '" & Angle_WD_1 & "' , Torque_WD_2 = '" &
Torque_WD_2 & "' , Angle_WD_2 = '" & Angle_WD_2 & "'
, Torque_WD_3 = '" & Torque_WD_3 & "' , Angle_WD_3 =
'" & Angle_WD_3 & "' , Torque_Bush1 = '" &
Torque_Bush1 & "' , Angle_Bush1 = '" & Angle_Bush1 &
"' , Torque_Bush2 = '" & Torque_Bush2 & "' ,
Angle_Bush2 = '" & Angle_Bush2 & "' , Torque_Drain =
'" & Torque_Drain & "' , Angle_Drain = '" &
Angle_Drain & "' , Status_code_WS40 = '" &
Status_code_WS40 & "' WHERE QRCode = '" & matrix & "'"
89 On Error Resume Next
90 cmdInsert.Execute
91 On Error GoTo 0
92
93 If Err.Number <> 0 Then
94 MsgBox "Error executing update command: " &
Err.Description, vbOK, "Error"
95 Err.Clear
96 Else
97 'MsgBox "Data updated successfully!", vbOK,
"Report"
98 SmartTags("DB_Archivage_Top_Archive_WS40") = 0
99 Oke = 0
100 Nok = 0
101 Time_in = ""
102 Time_out = ""
103 matrix = ""
104 End If
105 End If
106 End If
107 End If
108 End If
109
110 ' Close connection
111 conn.Close
112
113 ' Release objects
114 Set conn = Nothing
115 Set cmdInsert = Nothing
116 Else
117 MsgBox "Error connecting to the database.", vbOK, "Error"
118 End If
119 End If
68
Annexes
120
121 End Sub
69
Annexes
Annexe N
1
2
3 Sub Archive_ws50()
4 If SmartTags("DB_Gestion_Archivage_Top_Archive_WS50") = 1 Then
5
6 ' Create objects
7 Dim conn, cmdInsert
8 Set conn = CreateObject("ADODB.Connection")
9 Set cmdInsert = CreateObject("ADODB.Command")
10
11
12 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
13
14 Dim Statee, Oke, Nok, Time_in, Time_out,matrix
15 Dim Status_Code_WS50 , Pression_Outlet , Pression_Inlet
16
17 Statee = SmartTags("Statee2_ws50")
18 Oke = SmartTags("DB_Gestion_Archivage_Part_Ok_WS50")
19 Nok = SmartTags("DB_Gestion_Archivage_Part_NOK_WS50")
20 Time_in = SmartTags("DB_Gestion_Archivage_Time_In_WS50")
21 Time_out = SmartTags("DB_Gestion_Archivage_Time_Out_WS50")
22 matrix = SmartTags("DB_Gestion_Archivage_DataMatrix_WS50")
23 Pression_Inlet = SmartTags("DB_Gestion_Archivage_Pression_Inlet")
24 Pression_Outlet = SmartTags("DB_Gestion_Archivage_Pression_Outlet")
25 Status_Code_WS50 = SmartTags("DB_Gestion_Archivage_Status_Code_WS50")
26
27
28
29
30
31 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
32
33 ' Adjust Statee based on Oke and Nok values
34 If Oke = 1 And Nok = 0 Then
35 Statee = "OK"
36 ElseIf Oke = 0 And Nok = 1 Then
37 Statee = "NOK"
38 Else
39 Statee = "Error"
40 End If
41
42 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
43
44 ' Open data source
45 On Error Resume Next
46 conn.ConnectionString = "Provider=SQLOLEDB;Data Source=WISSAL\WINCC;"
& _
47 "Initial Catalog=database;" & _
48 "Integrated Security=SSPI;" & _
49 "DSN=Data_base;"
50 conn.Open
51 On Error GoTo 0
52
53 If conn.State = 1 Then ' 1 means the connection is open
54 If SmartTags("DB_Gestion_Archivage_Status_WSn-1_WS50") = 2 Then
55
56 If SmartTags("DB_Gestion_Archivage_Rework") = 0 Then 'Mode
normal
57
58 cmdInsert.ActiveConnection = conn
59 If Left(matrix, 4) = "XC13" Or Left(matrix, 4) =
"F28A" Then
60 cmdInsert.CommandText = "UPDATE Table_Wiss SET
State_WS50 = '" & Statee & "', Time_In_WS50 = '"
& Time_in & "', Time_Out_WS50 = '" & Time_out &
"' , Pression_Inlet = '" & Pression_Inlet & "' ,
Pression_Outlet = '" & Pression_Outlet & "' ,
Status_Code_WS50 = '"& Status_Code_WS50 &"' WHERE
QRCode = '" & SmartTags(
"DB_Gestion_Archivage_DataMatrix_WS50")& "'"
70
Annexes
61 Else
62 cmdInsert.CommandText = "UPDATE Table_Wiss SET
State_WS50 = 'NONE', Time_In_WS50 = NULL ,
Time_Out_WS50 = NULL , Pression_Inlet = NULL ,
Pression_Outlet = NULL , Status_Code_WS50 = NULL
WHERE QRCode = '" & SmartTags(
"DB_Gestion_Archivage_DataMatrix_WS50")& "'"
63 End If
64 On Error Resume Next
65 cmdInsert.Execute
66 On Error GoTo 0
67
68 If Err.Number <> 0 Then
69 MsgBox "Error executing insertion command: " &
Err.Description, vbOK, "Error"
70 Err.Clear
71 Else
72 'MsgBox "Data inserted successfully!", vbOK,
"Report"
73 SmartTags("DB_Gestion_Archivage_Top_Archive_WS50")
= 0
74 Oke = 0
75 Nok = 0
76 End If
77
78 Else
79 'Mode Rework IS ACTIVATED
80 cmdInsert.ActiveConnection = conn
81 If Left(matrix, 4)= "XC13" Or Left(matrix, 4) = "F28A"
Then
82 cmdInsert.CommandText = "UPDATE Table_Wiss SET
State_WS50 = '" & Statee & "' , State_WS70 = NULL
,State_WS80 = NULL , Rework = '" & 1 &
"',Time_In_WS50 = '" & Time_in & "', Time_Out_WS50 =
'" &Time_out & "' , Pression_Inlet = '" &
Pression_Inlet& "' , Pression_Outlet = '" &
Pression_Outlet & "' , Status_Code_WS50 = '"&
Status_Code_WS50 &"' WHERE QRCode = '" & SmartTags(
"DB_Gestion_Archivage_DataMatrix_WS50")& "'"
83 Else
84 cmdInsert.CommandText = "UPDATE Table_Wiss SET
State_WS50 = 'NONE' , State_WS70 = NULL ,State_WS80 =
Null , Rework = '" & 1 & "' , Time_In_WS50 = NULL ,
Time_Out_WS50 = Null , Pression_Inlet = Null ,
Pression_Outlet = Null , Status_Code_WS50 = Null
WHERE QRCode = '" & SmartTags(
"DB_Gestion_Archivage_DataMatrix_WS50")& "'"
85 End If
86
87 On Error Resume Next
88 cmdInsert.Execute
89 On Error GoTo 0
90
91 If Err.Number <> 0 Then
92 MsgBox "Error executing insertion command: " &
Err.Description, vbOK, "Error"
93 Err.Clear
94 Else
95 'MsgBox "Data inserted successfully!", vbOK,
"Report"
96 SmartTags("DB_Gestion_Archivage_Top_Archive_WS50") = 0
97 Oke = 0
98 Nok = 0
99 End If
100 End If
101 End If
102 ' Close connection
103 conn.Close
104
105 ' Release objects
106 Set conn = Nothing
107 Set cmdInsert = Nothing
108
71
Annexes
109
110 End If
111 End If
112 End Sub
72
Annexes
Annexe O
1
2
3 Sub Archive_WS60()
4
5
6 If SmartTags("DB_Archive_Top_Archive_WS60") = 1 Then
7
8 Dim conn, cmdInsert
9 Set conn = CreateObject("ADODB.Connection")
10 Set cmdInsert = CreateObject("ADODB.Command")
11
12 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
13
14 Dim Statee, Oke, Nok, Time_in, Time_out
15 Statee = SmartTags("Statee2_ws60")
16 Oke = SmartTags("DB_Archive_Part_Ok_WS60")
17 Nok = SmartTags("DB_Archive_Part_NOK_WS60")
18 Time_in = SmartTags("DB_Archive_Time_In_WS60")
19 Time_out = SmartTags("DB_Archive_Time_Out_WS60")
20 Dim matrix , Sensor_F28_Nm,Sensor_F28_A,Conector_F28_Nm
21 Dim Conector_F28_A ,Heater_Conector_F28_Nm , Heater_Conector_F28_A ,
Thread_Conector_F28_Nm
22 Dim Thread_Conector_F28_A , Conector1_XC13_Nm , Conector1_XC13_A,
Conector2_XC13_Nm
23 Dim Conector2_XC13_A , Conector3_XC13_Nm , Conector3_XC13_A ,
Conector4_XC13_Nm
24 Dim Conector4_XC13_A , Metal_Plug_XC13_Nm,Metal_Plug_XC13_A,
P_Sensor_XC13_Nm
25 Dim P_and_T_Sensor_XC13_Nm,P_and_T_Sensor_XC13_A,Status_Code_WS60,
P_Sensor_XC13_A
26
27 matrix = SmartTags("DB_Archive_DataMatrix_WS60")
28 Sensor_F28_Nm = CStr(SmartTags("DB_Archive_Sensor_F28_Nm"))
29 Sensor_F28_A = CStr(SmartTags("DB_Archive_Sensor_F28_A°"))
30 Conector_F28_Nm = CStr(SmartTags("DB_Archive_Conector_F28_Nm"))
31 Conector_F28_A = CStr(SmartTags("DB_Archive_Conector_F28_A°"))
32 Heater_Conector_F28_Nm = CStr(SmartTags(
"DB_Archive_Heater_Conector_F28_Nm"))
33 Heater_Conector_F28_A = CStr(SmartTags(
"DB_Archive_Heater_Conector_F28_A°"))
34 Thread_Conector_F28_Nm = CStr(SmartTags(
"DB_Archive_Thread_Conector_F28_Nm"))
35 Thread_Conector_F28_A = CStr(SmartTags(
"DB_Archive_Thread_Conector_F28_A°"))
36 Conector1_XC13_Nm = CStr(SmartTags("DB_Archive_Conector-1_XC13_Nm"))
37 Conector1_XC13_A = CStr(SmartTags("DB_Archive_Conector-1_XC13_A°"))
38 Conector2_XC13_Nm = CStr(SmartTags("DB_Archive_Conector-2_XC13_Nm"))
39 Conector2_XC13_A = CStr(SmartTags("DB_Archive_Conector-2_XC13_A°"))
40 Conector3_XC13_Nm = CStr(SmartTags("DB_Archive_Conector-3_XC13_Nm"))
41 Conector3_XC13_A = CStr(SmartTags("DB_Archive_Conector-3_XC13_A°"))
42 Conector4_XC13_Nm = CStr(SmartTags("DB_Archive_Conector-4_XC13_Nm"))
43 Conector4_XC13_A = CStr(SmartTags("DB_Archive_Conector-4_XC13_A°"))
44 Metal_Plug_XC13_Nm = CStr(SmartTags("DB_Archive_Metal_Plug_XC13_Nm"))
45 Metal_Plug_XC13_A = CStr(SmartTags("DB_Archive_Metal_Plug_XC13_A°"))
46 P_Sensor_XC13_Nm = CStr(SmartTags("DB_Archive_P_Sensor_XC13_Nm"))
47 P_and_T_Sensor_XC13_Nm = CStr(SmartTags("DB_Archive_P_Sensor_XC13_A°"
))
48 P_and_T_Sensor_XC13_A = CStr(SmartTags(
"DB_Archive_P-and-T_Sensor_XC13_Nm"))
49 Status_Code_WS60 = SmartTags("DB_Archive_Status_Code_WS60")
50 P_Sensor_XC13_A = CStr(SmartTags("DB_Archive_P_Sensor_XC13_A°"))
51
52
53 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
54 If Oke = 1 And Nok = 0 Then
55 Statee = "OK"
56 ElseIf Oke = 0 And Nok = 1 Then
57 Statee = "NOK"
58 Else
59 Statee = "Error"
60 End If
73
Annexes
61 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
62
63 ' Open data source
64 On Error Resume Next
65 conn.ConnectionString = "Provider=SQLOLEDB;Data Source=WISSAL\WINCC;"
& _
66 "Initial Catalog=database;" & _
67 "Integrated Security=SSPI;" & _
68 "DSN=Data_base;"
69 conn.Open
70 On Error GoTo 0
71
72
73 If conn.State = 1 Then
74 If SmartTags("DB_Archive_Status_WSn-1_WS60") = 2 Then
75 Dim cmdExist, rs, cmdSelect
76 Set cmdExist = CreateObject("ADODB.Command")
77 cmdExist.ActiveConnection = conn
78 cmdExist.CommandText = "SELECT COUNT(*) FROM Table_Wiss WHERE QRCode
= '" & matrix & "'"
79
80 On Error Resume Next
81 Set rs = cmdExist.Execute
82 On Error GoTo 0
83
84 If Not rs Is Nothing Then
85 Dim recordCount,etat
86 recordCount = rs.Fields(0).Value
87
88 If recordCount > 0 Then
89 Set cmdSelect = CreateObject("ADODB.Command")
90 cmdSelect.ActiveConnection = conn
91 cmdSelect.CommandText = "SELECT State_WS60 FROM Table_Wiss
WHERE QRCode = '" & matrix & "'"
92
93 On Error Resume Next
94 Set rs = cmdSelect.Execute
95 On Error GoTo 0
96
97 If Not rs.EOF Then
98 etat = Trim(rs.Fields("State_WS60").Value)
99
100 If IsNull(etat) Then
101 cmdInsert.ActiveConnection = conn
102 cmdInsert.CommandText = "UPDATE Table_Wiss SET
State_WS60 = '" & Statee & "' ,Time_In_WS60 = '" &
Time_in & "', Time_Out_WS60 = '" & Time_out & "' ,
Sensor_F28_Nm = '"&Sensor_F28_Nm &"' ,Sensor_F28_A =
'" & Sensor_F28_A & "' , Conector_F28_Nm = '" &
Conector_F28_Nm & "' , Conector_F28_A = '" &
Conector_F28_A & "' , Heater_Conector_F28_Nm = '" &
Heater_Conector_F28_Nm & "' , Heater_Conector_F28_A =
'" & Heater_Conector_F28_A & "' ,
Thread_Conector_F28_Nm = '" & Thread_Conector_F28_Nm &
"' , Thread_Conector_F28_A = '" &
Thread_Conector_F28_A & "' , Conector1_XC13_Nm = '" &
Conector1_XC13_Nm &"' , Conector1_XC13_A = '" &
Conector1_XC13_A & "' , Conector2_XC13_Nm = '" &
Conector2_XC13_Nm & "' ,Conector2_XC13_A = '" &
Conector2_XC13_A & "' ,Conector3_XC13_Nm = '" &
Conector3_XC13_Nm & "' , Conector3_XC13_A = '" &
Conector3_XC13_A & "' ,Conector4_XC13_Nm = '" &
Conector4_XC13_Nm & "' , Conector4_XC13_A = '" &
Conector4_XC13_A & "' , Metal_Plug_XC13_Nm = '" &
Metal_Plug_XC13_Nm & "' , Metal_Plug_XC13_A = '" &
Metal_Plug_XC13_A & "' , P_Sensor_XC13_Nm = '" &
P_Sensor_XC13_Nm & "' , P_Sensor_XC13_A = '" &
P_Sensor_XC13_A & "' , P_and_T_Sensor_XC13_Nm = '" &
P_and_T_Sensor_XC13_Nm & "' , P_and_T_Sensor_XC13_A =
'" & P_and_T_Sensor_XC13_A & "' , Status_Code_WS60 =
'" & Status_Code_WS60 & "' WHERE QRCode = '" &
matrix & "'"
74
Annexes
75
Annexes
Annexe P
1
2
3 Sub Archive_WS70()
4 If SmartTags("DB_Gestion_Archivage_Top_Archive") = 1 Then
5 Dim conn, cmdInsert
6 Set conn = CreateObject("ADODB.Connection")
7 Set cmdInsert = CreateObject("ADODB.Command")
8
9 Dim Statee, Oke, Nok, Time_in, Time_out
10 Statee = SmartTags("Statee2_ws70")
11 Oke = SmartTags("DB_Gestion_Archivage_Part_Ok")
12 Nok = SmartTags("DB_Gestion_Archivage_Part_NOK")
13 Time_in = SmartTags("DB_Gestion_Archivage_Time_In")
14 Time_out = SmartTags("DB_Gestion_Archivage_Time_Out")
15 Dim matrix, Pression_Pre_Filter, Pression_Filter, Status_code_WS70
16 matrix = SmartTags("DB_Gestion_Archivage_DataMatrix")
17 Pression_Pre_Filter = SmartTags("DB_Gestion_Archivage_Pression_Pre-Filter")
18 Pression_Filter = SmartTags("DB_Gestion_Archivage_Pression_Filter")
19 Status_code_WS70 = SmartTags("DB_Gestion_Archivage_Status_Code")
20
21
22 If Oke = 1 And Nok = 0 Then
23 Statee = "OK"
24 ElseIf Oke = 0 And Nok = 1 Then
25 Statee = "NOK"
26 Else
27 Statee = "Error"
28 End If
29
30 On Error Resume Next
31 conn.ConnectionString = "Provider=SQLOLEDB;Data Source=WISSAL\WINCC;" & _
32 "Initial Catalog=database;" & _
33 "Integrated Security=SSPI;" & _
34 "DSN=Data_base;"
35 conn.Open
36 On Error GoTo 0
37
38
39 If conn.State = 1 Then
40
41 If SmartTags("DB_Gestion_Archivage_Status_WSn-1") = 2 Then
42 Dim cmdExist, rs, cmdSelect
43 Set cmdExist = CreateObject("ADODB.Command")
44 cmdExist.ActiveConnection = conn
45 cmdExist.CommandText = "SELECT COUNT(*) FROM Table_Wiss WHERE QRCode
= '" & matrix & "'"
46
47 On Error Resume Next
48 Set rs = cmdExist.Execute
49 On Error GoTo 0
50
51 If Not rs Is Nothing Then
52 Dim recordCount, etat
53 recordCount = rs.Fields(0).Value
54
55 If recordCount > 0 Then
56 Set cmdSelect = CreateObject("ADODB.Command")
57 cmdSelect.ActiveConnection = conn
58 cmdSelect.CommandText = "SELECT State_WS70 FROM Table_Wiss
WHERE QRCode = '" & matrix & "'"
59
60 On Error Resume Next
61 Set rs = cmdSelect.Execute
62 On Error GoTo 0
63
64 If Not rs.EOF Then
65 etat = Trim(rs.Fields("State_WS70").Value)
66
67 If IsNull(etat) Then
68 cmdInsert.ActiveConnection = conn
69 cmdInsert.CommandText = "UPDATE Table_Wiss SET
State_WS70 = '" & Statee & "', Time_In_WS70 = '" &
Time_in & "', Time_Out_WS70 = '" & Time_out & "' ,
76
Annexes
77
Annexes
Annexe Q
78
Annexes
1
2
3 Sub Archive_WS80()
4
5 If SmartTags("Archive_Top_Archive") = 1 Then
6 ' Create objects
7 Dim conn, cmdInsert
8 Set conn = CreateObject("ADODB.Connection")
9 Set cmdInsert = CreateObject("ADODB.Command")
10
11 ' Read values from SmartTags
12 Dim Statee, Status_code_WS80, Oke, Nok, Time_in, Time_out
13 Dim matrix, VOLTAGE_P_XC13, VOLTAGE_P_T_XC13, WD_TEMP_XC13, P_T_sensor_XC13,
WD_SOLENOID_XC13, Temp_Sensor_Ohm_AG, Heater_Ohm_AG, Temp_Senso_Ohm_CE
14
15 Statee = SmartTags("Statee2_ws80")
16 Oke = SmartTags("Archive_Part_Ok")
17 Nok = SmartTags("Archive_Part_NOK")
18 Time_in = SmartTags("Archive_Time_In")
19 Time_out = SmartTags("Archive_Time_Out")
20
21 matrix = SmartTags("Archive_DataMatrix")
22 Temp_Sensor_Ohm_AG = CStr(SmartTags("Archive_Temp_Sensor_Ohm_AG"))
23 Heater_Ohm_AG = CStr(SmartTags("Archive_Heater_Ohm_AG"))
24 Temp_Senso_Ohm_CE = CStr(SmartTags("Archive_Temp_Senso_Ohm_CE"))
25 P_T_sensor_XC13 = CStr(SmartTags("Archive_P&T_sensor_XC13"))
26 WD_TEMP_XC13 = CStr(SmartTags("Archive_WD_TEMP_XC13"))
27 WD_SOLENOID_XC13 = CStr(SmartTags("Archive_WD_SOLENOID_XC13"))
28 VOLTAGE_P_XC13 = CStr(SmartTags("Archive_VOLTAGE_P_XC13"))
29 VOLTAGE_P_T_XC13 = CStr(SmartTags("Archive_VOLTAGE_P_T_XC13"))
30 Status_code_WS80 = SmartTags("Archive_STATUS")
31
32
33 If Oke = 1 And Nok = 0 Then
34 Statee = "OK"
35 ElseIf Oke = 0 And Nok = 1 Then
36 Statee = "NOK"
37 Else
38 Statee = "Error"
39 End If
40
41
42 On Error Resume Next
43 conn.ConnectionString = "Provider=SQLOLEDB;Data Source=WISSAL\WINCC;" & _
44 "Initial Catalog=database;" & _
45 "Integrated Security=SSPI;" & _
46 "DSN=Data_base;"
47 conn.Open
48 On Error GoTo 0
49
50 If conn.State = 1 Then
51
52 If SmartTags("Archive_Status_WSn-1") = 2 Then
53 Dim cmdExist, rs, cmdSelect
54 Set cmdExist = CreateObject("ADODB.Command")
55 cmdExist.ActiveConnection = conn
56 cmdExist.CommandText = "SELECT COUNT(*) FROM Table_Wiss WHERE QRCode
= '" & matrix & "'"
57
58 On Error Resume Next
59 Set rs = cmdExist.Execute
60 On Error GoTo 0
61
62 If Not rs Is Nothing Then
63 Dim recordCount, etat
64 recordCount = rs.Fields(0).Value
65
66 If recordCount > 0 Then
67 Set cmdSelect = CreateObject("ADODB.Command")
68 cmdSelect.ActiveConnection = conn
69 cmdSelect.CommandText = "SELECT State_WS80 FROM Table_Wiss
WHERE QRCode = '" & matrix & "'"
70
79
Annexes
80
Annexes
Annexe R
1 Sub attente(ByVal duree)
2 Dim debut, fin, attentee
3
4 debut = Timer
5 fin = debut + duree
6 attentee = True
7
8 Do While attentee
9 If Timer >= fin Then
10 attentee = False
11 End If
12 Loop
13
14 End Sub
15
16
17 Sub InsertCurrentDate()
18 attente 20 '' 20 sec
19
20 Dim conn, sql
21 Set conn = CreateObject("ADODB.Connection")
22
23 conn.ConnectionString = "Provider=SQLOLEDB;Data Source=WISSAL\WINCC;" & _
24 "Initial Catalog=database;" & _
25 "Integrated Security=SSPI;" & _
26 "DSN=Data_base;"
27 conn.Open
28 sql = "INSERT INTO DateTable (CurrentDate) VALUES (GETDATE());"
29 conn.Execute sql
30
31 conn.Close
32 Set conn = Nothing
33 End Sub
34
35
36 Sub CompareDates()
37 Dim conn, rs, sql, lastDate, currentDate, lastDay, lastMonth, lastYear, currentDay,
currentMonth, currentYear
38 Dim objExcel, objWorkbook, objSheet
39 Dim strSQL, strFilePath, auj
40
41 Set conn = CreateObject("ADODB.Connection")
42 conn.ConnectionString = "Provider=SQLOLEDB;Data Source=WISSAL\WINCC;" & _
43 "Initial Catalog=database;" & _
44 "Integrated Security=SSPI;" & _
45 "DSN=Data_base;"
46 conn.Open
47
48
49 sql = "SELECT TOP 1 CurrentDate FROM DateTable ORDER BY CurrentDate DESC;"
50 Set rs = conn.Execute(sql)
51
52 If Not rs.EOF Then
53 lastDate = rs.Fields("CurrentDate").Value
54
55 lastDay = Day(lastDate)
56 lastMonth = Month(lastDate)
57 lastYear = Year(lastDate)
58
59 currentDate = Now
60
61 currentDay = Day(currentDate)
62 currentMonth = Month(currentDate)
63 currentYear = Year(currentDate)
64
65
66 If currentYear > lastYear Or (currentYear = lastYear And currentMonth >
lastMonth) Or _
67 (currentYear = lastYear And currentMonth = lastMonth And currentDay >
lastDay) Then
68
69
70
81
Annexes
71 'strSQL = "SELECT * FROM Table_Wiss WHERE Time_In_WS10 = '" & lastDate &
"'"
72 Dim ld
73 ld=lastYear & "-" & Right("0" & lastMonth, 2) & "-" & Right("0" & lastDay,
2)
74
75 strSQL = "SELECT * FROM Table_Wiss WHERE CONVERT(VARCHAR(10),
Time_In_WS10, 23) = '" & ld & "'"
76 'MsgBox "= " &ld
77
78 'auj = Day(Now) & Month(Now) & Year(Now)
79 auj = lastDay & lastMonth & lastYear
80 strFilePath = "C:\Users\soula\OneDrive\Bureau\export\SAMM_Production_" &
ld & "_DataHistory.xlsx"
81
82 Set rs = CreateObject("ADODB.Recordset")
83 rs.Open strSQL, conn
84
85 Set objExcel = CreateObject("Excel.Application")
86 objExcel.Visible = True
87 Set objWorkbook = objExcel.Workbooks.Add
88 Set objSheet = objWorkbook.Sheets(1)
89
90 ' Write column headers to Excel
91 Dim colIndex
92 For colIndex = 0 To rs.Fields.Count - 1
93 objSheet.Cells(1, colIndex + 1).Value = rs.Fields(colIndex).Name
94 Next
95
96 ' Write data rows to Excel
97 Dim rowIndex
98 rowIndex = 2
99 Do While Not rs.EOF
100 For colIndex = 0 To rs.Fields.Count - 1
101 objSheet.Cells(rowIndex, colIndex + 1).Value = rs.Fields(colIndex
).Value
102 Next
103 rs.MoveNext
104 rowIndex = rowIndex + 1
105 Loop
106
107
108 objWorkbook.SaveAs strFilePath
109 objWorkbook.Close
110 objExcel.Quit
111
112 MsgBox "Data exported to Excel successfully."
113
114 Else
115 MsgBox "The current date is not greater than the last date."
116 End If
117 Else
118 MsgBox "No records found in DateTable."
119 End If
120
121 rs.Close
122 conn.Close
123 Set rs = Nothing
124 Set conn = Nothing
125 End Sub
126
82
Annexes
Annexe S
1 private void dataGridView2_CellContentClick(object sender,
DataGridViewCellEventArgs e)
2 {
3
4 if (e.RowIndex >= 0 && e.ColumnIndex == 0)
5 {
6 DataGridViewRow clickedRow = dataGridView2.Rows[e.RowIndex];
7 string[] columnNames = {"QRCode", "State_WS10", "Time_In_WS10",
"Time_Out_WS10",............ };
8 List<string> extractedValues = new List<string>();
9 foreach (string columnName in columnNames)
10 {
11 string cellValue = $"{clickedRow.Cells[columnName].Value}";
12 extractedValues.Add(cellValue);
13 }
14 if (_va != null && _va.ToLower() == "regleur")
15 {
16
17 UpdateForm anotherForm = new UpdateForm(extractedValues.ToArray());
18 anotherForm._NameDatabase = this._NameDatabase;
19
20 anotherForm._NameTable = this._NameTable;
21 anotherForm._Data_Source = this._Data_Source;
22 anotherForm.Show();
23 }
24 else
25 {
26 MessageBox.Show("User not found", "Error", MessageBoxButtons.OK,
MessageBoxIcon.Error);
27 }
28 }
29 }
30
31
32
33
34
35 namespace library
36 {
37 public partial class UpdateForm : Form
38 {
39 public string _NameDatabase { get; set; }
40
41 public string _NameTable { get; set; }
42 public string _Data_Source { get; set; }
43
44 private string[] rowDataArray;
45
46 public UpdateForm(string[] rowDataArray)
47 {
48
49 InitializeComponent();
50 this.rowDataArray = rowDataArray;
51 if (rowDataArray[0].Substring(0, 4) == "XC13")
52 {
53 // Add columns to DataGridView
54 dataGridView1.Columns.Add("QRCodeColumn", "QRCode");
55 //dataGridView1.Columns.Add("ReworkColumn", "Rework");
56 <<....>>
57
58 // Add columns for State_WS20
59 dataGridView1.Columns.Add("State_WS20", "State_WS20");
60 <<....>>
61
62 // Add columns for State_WS30
63 dataGridView1.Columns.Add("State_WS30", "State_WS30");
64 <<....>>
65
66 // Add columns for State_WS40
67 dataGridView1.Columns.Add("State_WS40", "State_WS40");
68 <<....>>
69 // Jusqu'à State_WS80
70
83
Annexes
71
72 dataGridView1.Rows.Add();
73
74 dataGridView1.Rows[0].Cells["QRCodeColumn"].Value = rowDataArray[0];
75 dataGridView1.Rows[0].Cells["nameColumn"].Value = rowDataArray[1];
76 <<....>>
77 dataGridView1.Rows[0].Cells["Status_code_WS80"].Value = rowDataArray[
117];
78
79
80 }
81 else if (rowDataArray[0].Substring(0, 4) == "F28A")
82 {
83 dataGridView1.Columns.Add("QRCodeColumn", "QRCode");
84 <<....>>
85 dataGridView1.Columns.Add("Status_code_WS80", "Status_code_WS80");
86 dataGridView1.Rows.Add();
87
88 dataGridView1.Rows[0].Cells["QRCodeColumn"].Value = rowDataArray[0];
89 <<....>>
90 dataGridView1.Rows[0].Cells["Status_code_WS80"].Value = rowDataArray[
117];
91
92 }
93 else if (rowDataArray[0].Substring(0, 4) == "F28C")
94 {
95
96 dataGridView1.Columns.Add("QRCodeColumn", "QRCode");
97 <<....>>
98 dataGridView1.Columns.Add("Status_code_WS80", "Status_code_WS80");
99
100 dataGridView1.Rows.Add();
101
102 dataGridView1.Rows[0].Cells["QRCodeColumn"].Value = rowDataArray[0];
103 <<....>>
104 dataGridView1.Rows[0].Cells["Status_code_WS80"].Value = rowDataArray[
117];
105
106
107 }
108
109 }
110
111 private void button2_Click(object sender, EventArgs e)
112 {
113
114
115 string connectionString = @"Data Source=" + _Data_Source + ";Initial
Catalog=" + _NameDatabase + ";Integrated Security=True";
116
117 if (rowDataArray[0].Substring(0, 4) == "XC13")
118 {
119 string query = "UPDATE "+ _NameTable + " SET State_WS10 = @state,
Time_In_WS10 = @time_in, Time_Out_WS10 = @time_out, " +
120 <<....>>
121 "Status_Code_WS20 = @Status_Code_WS20 WHERE QRCode = @qrCode";
122 using (SqlConnection connection = new SqlConnection(connectionString))
123 {
124
125 connection.Open();
126
127 foreach (DataGridViewRow row in dataGridView1.Rows)
128 {
129 string qrCode = row.Cells["QRCodeColumn"].Value?.ToString();
130
131
132 string name = row.Cells["NameColumn"].Value?.ToString();
133 <<....>>
134 string Status_code_WS80 = row.Cells["Status_code_WS80"].Value
?.ToString();
135
136
137 if (!string.IsNullOrEmpty(qrCode))
84
Annexes
138 {
139 SqlCommand command = new SqlCommand(query, connection);
140 command.Parameters.AddWithValue("@qrCode", qrCode);
141 <<....>>
142 command.Parameters.AddWithValue("@Status_code_WS80",
Status_code_WS80);
143 command.ExecuteNonQuery();
144 }
145 }
146 }
147
148 connection.Close();
149 MessageBox.Show("Data updated successfully.", "Success",
MessageBoxButtons.OK, MessageBoxIcon.Information);
150 }
151
152
153
154 else if (rowDataArray[0].Substring(0, 4) == "F28A")
155 {
156 string query = "UPDATE "+ _NameTable + " SET State_WS10 = @state,
Time_In_WS10 = @time_in, Time_Out_WS10 = @time_out, " +
157 <<....>>
158 "Status_Code_WS20 = @Status_Code_WS20 WHERE QRCode = @qrCode";
159
160
161 try
162 {
163 using (SqlConnection connection = new SqlConnection(connectionString))
164 {
165
166 connection.Open();
167
168 foreach (DataGridViewRow row in dataGridView1.Rows)
169 {
170 string qrCode = row.Cells["QRCodeColumn"].Value?.ToString();
171
172
173 string name = row.Cells["NameColumn"].Value?.ToString();
174 <<....>>
175 string Status_code_WS80 = row.Cells["Status_code_WS80"].Value
?.ToString();
176 if (!string.IsNullOrEmpty(qrCode))
177 {
178 SqlCommand command = new SqlCommand(query, connection);
179 command.Parameters.AddWithValue("@qrCode", qrCode);
180 <<....>>
181 command.Parameters.AddWithValue("@Status_code_WS80",
Status_code_WS80);
182
183 command.ExecuteNonQuery();
184 }
185 }
186 }
187
188 connection.Close();
189 MessageBox.Show("Data updated successfully.", "Success",
MessageBoxButtons.OK, MessageBoxIcon.Information);
190 }
191
192
193
194
195
196 catch (Exception ex)
197 {
198 MessageBox.Show("Error updating data: " + ex.Message, "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
199 }
200 }
201 else if (rowDataArray[0].Substring(0, 4) == "F28C")
202 {
203 string query = "UPDATE "+ _NameTable +" SET State_WS10 = @state,
85
Annexes
86
Annexes
Annexe T
1 //*********** Affichage des données
**************************************************************************************
*********************
2 private void DataHistory_Load(object sender, EventArgs e)
3 {
4 using (cn = new SqlConnection(@"Data Source=" + _Data_Source + ";Initial
Catalog=" + _NameDatabase + ";Integrated Security=True"))
5 {
6 if (cn.State == ConnectionState.Closed)
7 cn.Open();
8
9 if (!string.IsNullOrEmpty(_NameTable))
10 {
11 using (DataTable dt = new DataTable(_NameTable))
12 {
13 string query = "SELECT * FROM " + _NameTable;
14 using (SqlCommand cmd = new SqlCommand(query, cn))
15 {
16 SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(cmd);
17 sqlDataAdapter.Fill(dt);
18 dataGridView2.DataSource = dt;
19 }
20 }
21 }
22 else
23 {
24 }
25 }
26 }
27
28
29 //********************** Filtrer les données selon la version
***********************************************************************************
30 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
31 {
32
33 try
34 {
35 using (cn = new SqlConnection(@"Data Source=" + _Data_Source +
";Initial Catalog=" + _NameDatabase + ";Integrated Security=True"))
36 {
37 if (cn.State == ConnectionState.Closed)
38 cn.Open();
39 using (DataTable dt1 = new DataTable(_NameTable))
40 {
41 if (comboBox1.SelectedItem.ToString() == "ALL")
42 {
43 using (SqlCommand cmd = new SqlCommand("SELECT * FROM " +
_NameTable, cn))
44 {
45 SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(cmd
);
46 sqlDataAdapter.Fill(dt1);
47 dataGridView2.DataSource = dt1;
48 }
49 }
50 else
51 {
52 //using (SqlCommand cmd = new SqlCommand("SELECT * FROM
Table_1 o ",cn))
53 using (SqlCommand cmd = new SqlCommand("SELECT * FROM "+
_NameTable + " WHERE LEFT(QRCode, 4) = @Version", cn))
54 {
55 cmd.Parameters.AddWithValue("@Version", comboBox1.
SelectedItem.ToString());
56 SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(cmd
);
57 sqlDataAdapter.Fill(dt1);
58 dataGridView2.DataSource = dt1;
59 }
60 }
61
62
87
Annexes
63 }
64 cn.Close();
65 }
66 }
67
68 catch (Exception ex)
69 {
70 MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK,
MessageBoxIcon.Error);
71 }
72
73
74 }
75
76 //*****************************Filtrage des données entre deux dates
***************************************************************************
77
78 private void button1_Click(object sender, EventArgs e)
79 {
80
81 {
82
83 string query = "SELECT * FROM "+_NameTable +" WHERE Time_In_WS10
BETWEEN @fromdate AND @todate";
84 using (cn = new SqlConnection(@"Data Source=" + _Data_Source +
";Initial Catalog=" + _NameDatabase + ";Integrated Security=True"))
85
86 {
87 if (cn.State == ConnectionState.Closed)
88 cn.Open();
89
90 using (DataTable dt = new DataTable(_NameTable))
91 {
92 using (SqlCommand cmd = new SqlCommand(query, cn))
93 {
94 cmd.Parameters.AddWithValue("@fromdate", FromD.Value);
95 cmd.Parameters.AddWithValue("@todate", ToD.Value);
96 SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(cmd);
97 sqlDataAdapter.Fill(dt);
98 dataGridView2.DataSource = dt;
99 }
100
101 }
102
103 cn.Close();
104 MessageBox.Show("Data Loaded successfully!", "Success",
MessageBoxButtons.OK, MessageBoxIcon.Information);
105 }
106 }
107 catch (Exception ex)
108 {
109 MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK,
MessageBoxIcon.Error);
110 }
111 }
112
113 //**************************** Chercher une pièce
*************************************************************************************
*********
114
115 private void find_Click(object sender, EventArgs e)
116 {
117 try
118 {
119 string query = "SELECT * FROM "+ _NameTable +" WHERE QRCode = @QrCode "
;
120 using (cn = new SqlConnection(@"Data Source=" + _Data_Source +
";Initial Catalog=" + _NameDatabase + ";Integrated Security=True"))
121 {
122 if (cn.State == ConnectionState.Closed)
123 cn.Open();
124
125 using (DataTable dt = new DataTable(_NameTable))
88
Annexes
126 {
127 using (SqlCommand cmd = new SqlCommand(query, cn))
128 {
129 cmd.Parameters.AddWithValue("@QrCode", QRCode.Text);
130 SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(cmd);
131 sqlDataAdapter.Fill(dt);
132 dataGridView2.DataSource = dt;
133 }
134
135 }
136
137 cn.Close();
138 MessageBox.Show("DONE !", "Success", MessageBoxButtons.OK,
MessageBoxIcon.Information);
139 }
140 }
141 catch (Exception ex)
142 {
143 MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK,
MessageBoxIcon.Error);
144 }
145 }
146 //********************** Sans Filtre
**************************************************************************************
*****************
147 private void linkLabel2_LinkClicked(object sender,
LinkLabelLinkClickedEventArgs e)
148 {
149 try
150 {
151 string selectedColumnName = comboBox2.SelectedItem?.ToString();
152
153 if (string.IsNullOrWhiteSpace(selectedColumnName))
154 {
155 MessageBox.Show("Please select a column from the ComboBox.",
"Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
156 return;
157 }
158
159 string query = $"SELECT * FROM "+ _NameTable + " WHERE
{selectedColumnName} = @QrCode";
160 using (cn = new SqlConnection(@"Data Source=" + _Data_Source +
";Initial Catalog=" + _NameDatabase + ";Integrated Security=True"))
161 {
162 if (cn.State == ConnectionState.Closed)
163 cn.Open();
164
165 using (DataTable dt = new DataTable(_NameTable))
166 {
167 using (SqlCommand cmd = new SqlCommand(query, cn))
168 {
169 cmd.Parameters.AddWithValue("@QrCode", textBox1.Text);
170
171 SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(cmd);
172
173 sqlDataAdapter.Fill(dt);
174 dataGridView2.DataSource = dt;
175 }
176
177 }
178 cn.Close();
179 MessageBox.Show("DONE !", "Success", MessageBoxButtons.OK,
MessageBoxIcon.Information);
180 }
181 }
182 catch (Exception ex)
183 {
184 MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK,
MessageBoxIcon.Error);
185 }
186 }
187
89
Annexes
Annexe U
1 //************************************ Export Code
*****************************************
2
3 private void Export_Click(object sender, EventArgs e)
4 {
5 using (export dateRangeForm = new export())
6 {
7 if (dateRangeForm.ShowDialog() == DialogResult.OK)
8 {
9 DateTime startDate = dateRangeForm.StartDate;
10 DateTime endDate = dateRangeForm.EndDate;
11
12 _ThreadExport = new Thread(() => ThreadExport(startDate, endDate));
13 _ThreadExport.Start();
14 _ThreadExport.IsBackground = true;
15 }
16 }
17 }
18
19
20 private Thread _ThreadExport = null;
21
22 private void ThreadExport(DateTime startDate, DateTime endDate)
23 {
24 Microsoft.Office.Interop.Excel._Application app = null;
25 Microsoft.Office.Interop.Excel._Workbook workbook = null;
26 Microsoft.Office.Interop.Excel._Worksheet worksheet = null;
27
28 try
29 {
30 app = new Microsoft.Office.Interop.Excel.Application();
31 workbook = app.Workbooks.Add(Type.Missing);
32 worksheet = workbook.ActiveSheet;
33 app.Visible = true;
34
35
36 Microsoft.Office.Interop.Excel.Range head = worksheet.get_Range("A1",
"C1");
37 head.MergeCells = true;
38 head.Value2 = "Stations Data History ";
39 head.Font.Color = Color.White;
40 head.Font.Bold = true;
41 head.Font.Name = "Tahoma";
42 head.Font.Size = "12";
43 head.Interior.Color = System.Drawing.ColorTranslator.ToOle(System.
Drawing.Color.Red);
44 head.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.
xlHAlignCenter;
45 Microsoft.Office.Interop.Excel.Range title = worksheet.get_Range("A2",
"C2");
46 title.MergeCells = true;
47 title.Value2 = "Data export";
48 title.Font.Color = Color.Blue;
49 title.Font.Bold = true;
50 title.Font.Name = "Tahoma";
51 title.Font.Size = "13";
52 title.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.
xlHAlignCenter;
53 int rowIndex = 3;
54 int colIndex = 1;
55 for (int i = 1; i <= dataGridView2.Columns.Count; i++)
56 {
57 worksheet.Cells[rowIndex, colIndex++] = dataGridView2.Columns[i - 1
].HeaderText;
58 }
59 foreach (DataGridViewRow row in dataGridView2.Rows)
60 {
61 DateTime dateValue;
62 if (row.Cells["Time_In_WS10"].Value != null &&
63 DateTime.TryParse(row.Cells["Time_In_WS10"].Value.ToString(),
out dateValue) &&
64 dateValue >= startDate && dateValue <= endDate)
65 {
90
Annexes
66 colIndex = 1;
67 rowIndex++;
68
69 foreach (DataGridViewCell cell in row.Cells)
70 {
71 worksheet.Cells[rowIndex, colIndex++] = cell.Value != null ?
cell.Value.ToString() : "";
72 }
73 }
74 }
75 // Save the Excel file
76 SaveFileDialog saveDialog = new SaveFileDialog();
77 saveDialog.Filter = "Excel files (*.xlsx)|*.xlsx|All files (*.*)|*.*";
78 saveDialog.FilterIndex = 2;
79 string startDateFormatted = startDate.ToString("yyyyMMdd");
80 string endDateFormatted = endDate.ToString("yyyyMMdd");
81 saveDialog.FileName = $"Production
Samm_{startDateFormatted}_to_{endDateFormatted}";
82 workbook.SaveAs(saveDialog.FileName);
83 app.Quit();
84 MessageBox.Show("Export Successful");
85
86 System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
87 System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
88 System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
89
90 }
91 catch (Exception ex)
92 {
93 // MessageBox.Show("Error occurred while exporting data: " + ex.Message);
94 }
95
96 }
97
98
99
100 //**************** ExportForm
**********************************************************
101 public partial class export : Form
102 {
103 public DateTime StartDate { get; private set; }
104 public DateTime EndDate { get; private set; }
105
106
107
108 private void button1_Click(object sender, EventArgs e)
109 {
110 StartDate = dateTimePicker1.Value;
111 EndDate = dateTimePicker2.Value;
112 DialogResult = DialogResult.OK;
113 Close();
114 }
115
116 private void button2_Click(object sender, EventArgs e)
117 {
118 this.Close();
119 }
120 }
121
91
Annexes
92