CreerDatabases
'Déclarartion des variables
Dim conn, rst, SQL, Message,RuntimeStart
'Preparation pour l'acces à la base de données Set conn = CreateObject("ADODB.Connection") Set rst = CreateObject("ADODB.Recordset")
'DSN = Nom de la base de données ODBC configuré conn.Open "Provider=MSDASQL;DSN=WinCCFlexible"
'Message à afficher en cas d'erreur
Message = "La base de donnée existe déjà"
'Gestion d'erreur On Error Resume Next Err.Clear
'Creation de la base de données avec nom associé à l'année et au mois en cours
If Routine = False Then
SQL = "CREATE DATABASE ARCHIVE_" & Month(Now) & "_" & Year(Now) Set rst = conn.execute(SQL)
'Affichage de alarme système si la table de la base existe déjà pour ce mois
If Err.Number <> 0 Then
ShowSystemAlarm Message End If
Routine = True End If
'Liberation de la mémoire Set rst = Nothing
Set conn = Nothing
ArchiverDatabases
'Déclarartion des variables
Dim conn, rst, SQL,Jour, Mois, Annee, Heure, NomTable, i 'Preparation pour l'acces à la base de données
Set conn = CreateObject("ADODB.Connection") Set rst = CreateObject("ADODB.Recordset")
'DSN = Nom de la base de données ODBC configuré conn.Open "Provider=MSDASQL;DSN=WinCCFlexible"
'Après changement du mois, une nouvelle base de données sera crée If (Day(Now)=1) = True And (Hour(Now)=0) = True Then
SQL = "CREATE DATABASE ARCHIVE_" & Month(Now) & "_" & Year(Now) Set rst = conn.execute(SQL)
End If
'Après changement de l'heure, On recupère les données de la date passée 'avant de créer une nouvelle table
Date_Passee = DateAdd("h", -1, Now) Jour= Day(Date_Passee)
Mois = Month(Date_Passee) Annee = Year(Date_Passee)
'le dbo est un "Key word"
NomTable = "[ARCHIVE_" & Mois & "_" & Annee & "].dbo."
NomTable = NomTable & "ARCHIVE_" & Jour & "_" & Mois & "_" & Annee & "_" &
Heure
'Copie des valeurs archivées pendant une heure de temps 'vers la table de la base de données
SQL = "SELECT * INTO " & NomTable & " FROM Archive_Variables0 WHERE TimeString >= '"& CDate(Jour & "/" & Mois & "/" & Annee & " " & Heure &
":0:0") & "' And TimeString <= '"& CDate(Jour & "/" & Mois & "/" & Annee &
" " & Heure & ":59:59") & "'"
'Excécution de la requette SQL Set rst = conn.execute(SQL)
'Les données peuvent être effacer de l'archive après un quart SQL = "DELETE FROM Archive_Variables0"
'Excécution de la requette SQL Set rst = conn.execute(SQL)
'Fermeture de la connexion à la base de donnée conn.Close
'Libération de la memoire Set rst = Nothing
Set conn = Nothing
ChargerArchive
Dim conn,rst, SQL, Message, Jour
'Preparation pour l'acces à la base de données Set conn = CreateObject("ADODB.Connection") Set rst = CreateObject("ADODB.Recordset")
'DSN = Nom de la base de données ODBC configuré conn.Open "Provider=MSDASQL;DSN=WinCCFlexible"
'Message à afficher en cas d'erreur
Message = "la table de la base demandée n'existe pas"
'Gestion d'erreur On Error Resume Next Err.Clear
'Copie des valeurs archivées pendant une heure de temps 'vers la table de la base de données
SQL = "SELECT * From Archive_Variables0"
Set rst = conn.execute(SQL)
'Affichage de alarme système si la table de la base n'existe pas If Err.Number <> 0 Then
ShowSystemAlarm Message Else
'La table de la courbe archivée est éffacée avant de charger l'archive demandée
SQL = "DELETE FROM Archive_Courbes0"
Set rst = conn.execute(SQL)
SQL = "INSERT INTO Archive_Courbes0 SELECT * FROM Archive_Variables0"
Set rst = conn.execute(SQL) End If
conn.Close
'Libération de la mémoire Set rst = Nothing
Set conn = Nothing
'Régler l'affichage de la courbe SmartTags("Courbe") = 0
'Initialiser les champs entrées sorties Sel_Courbe = 1
'Activer le bouton courbe en temps reel SmartTags("CTR") = 1
'Activer le bouton courbe en temps reel SmartTags("CARCH") = 0
ChargerCourbe
Dim conn, rst, SQL, NomTable, Heure, Dates, Message1, Message2, courb, tps, Fin, regle
'Preparation pour l'acces à la base de données Set conn = CreateObject("ADODB.Connection") Set rst = CreateObject("ADODB.Recordset")
'DSN = Nom de la base de données ODBC configuré
Message1 = "L'intervalle de temps a été mal choisi"
Message2 = "la table de la base demandée n'existe pas"
'Gestion d'erreur
For tps = SmartTags("Sel_HDebut") To (SmartTags("Sel_HFin")-1) 'Creation du nom de la table par concatenation
'le dbo est un "Key word"
NomTable = "[ARCHIVE_" & SmartTags("Sel_Mois") & "_" &
SmartTags("Sel_Annee") & "].dbo."
NomTable = NomTable & "ARCHIVE_" & SmartTags("Sel_Jour") & "_" &
SmartTags("Sel_Mois") & "_" & SmartTags("Sel_Annee") & "_" & tps 'Copie des valeurs archivées pendant une heure de temps 'vers la table de la base de données
SQL = "SELECT * From" & NomTable Set rst = conn.execute(SQL)
'Affichage de alarme système si la table de la base n'existe pas If Err.Number <> 0 Then
ShowSystemAlarm Message2 regle = 1
Else
courb = CourbeSelec
If (SmartTags("Courbe") = 0 And tps = SmartTags("Sel_HDebut")) Then
'La table de la courbe est éffacée avant de charger l'archive historique
SQL = "DELETE FROM Archive_Courbes0"
Set rst = conn.execute(SQL) End If
'Copie des données de l'archive historique vers l'archive de courbe
SQL = "INSERT INTO Archive_Courbes0 SELECT * FROM " &
NomTable & " WHERE VarName = '" & courb & "'"
Set rst = conn.execute(SQL) End If
Next
Dates = SmartTags("Sel_Jour") & "/" & SmartTags("Sel_Mois") & "/" &
SmartTags("Sel_Annee")
Heure = SmartTags("Sel_HFin")-1 & ":59:55" ' Fin = CDate(Dates & " " & Heure)
SQL = "UPDATE Archive_Courbes0 SET VarValue = 0 WHERE Timestring >= '"
& Fin & "'"
Set rst = conn.execute(SQL) End If
'Fermeture de la connexion à la base de donnée conn.Close
'Libération de la mémoire Set rst = Nothing
Set conn = Nothing If regle <> 1 Then
'Activer le bouton archive SmartTags("CARCH") = 1
'Régler l'affichage de la courbe
Dates = SmartTags("Sel_Jour") & " " & SmartTags("Sel_Mois") & " " &
SmartTags("Sel_Annee")
SmartTags("Courbe") = CDate(Dates & " " & Heure) End If
Dim Obj, StrScreenName Set Obj = HmiRuntime
StrScreenName = Obj.BaseScreenName If StrScreenName="COURBE DEBITS" Then
ActivateScreen "COURBE DEBITS", 0 End If
If StrScreenName="COURBE DEBITS" Then ActivateScreen "COURBE DEBITS", 0
Else If StrScreenName="TEMPERATURES BROYEUR" Then ActivateScreen "TEMPERATURES BROYEUR", 0
Else If StrScreenName="TEMPERATURES MOTEUR Z1M03M1" Then ActivateScreen "TEMPERATURES MOTEUR Z1M03M1", 0 Else If StrScreenName="INTENSITE" Then
ActivateScreen "INTENSITE", 0
Else If StrScreenName="PROCESS" Then ActivateScreen "PROCESS", 0
Else If StrScreenName="C/K JOURNALIER" Then ActivateScreen "C/K JOURNALIER", 0 Else If StrScreenName="COURBE ADJUVANT"
Then
ActivateScreen "COURBE ADJUVANT", 0 End If
Dim conn, rst, SQL,Jour, Mois, Annee, Heure, NomTable, i 'Preparation pour l'acces à la base de données
Set conn = CreateObject("ADODB.Connection") Set rst = CreateObject("ADODB.Recordset")
'DSN = Nom de la base de données ODBC configuré conn.Open "Provider=MSDASQL;DSN=WinCCFlexible"
'Après changement du mois, une nouvelle base de données sera crée If (Day(Now)=1) = True And (Hour(Now)=0) = True Then
SQL = "CREATE DATABASE ARCHIVE_" & Month(Now) & "_" & Year(Now) Set rst = conn.execute(SQL)
End If
'Après changement de l'heure, On recupère les données de la date passée 'avant de créer une nouvelle table
Date_Passee = DateAdd("h", -1, Now) Jour= Day(Date_Passee)
Mois = Month(Date_Passee) Annee = Year(Date_Passee) Heure = Hour(Date_Passee)
'le dbo est un "Key word"
NomTable = "[ARCHIVE_" & Mois & "_" & Annee & "].dbo."
NomTable = NomTable & "ARCHIVE_" & Jour & "_" & Mois & "_" & Annee & "_" &
Heure
'Copie des valeurs archivées pendant une heure de temps 'vers la table de la base de données
SQL = "SELECT * INTO " & NomTable & " FROM Archive_Variables0 WHERE TimeString >= '"& CDate(Jour & "/" & Mois & "/" & Annee & " " & Heure &
":0:0") & "' And TimeString <= '"& CDate(Jour & "/" & Mois & "/" & Annee &
" " & Heure & ":59:59") & "'"
'Excécution de la requette SQL Set rst = conn.execute(SQL)
'Les données peuvent être effacer de l'archive après un quart SQL = "DELETE FROM Archive_Variables0"
'Excécution de la requette SQL Set rst = conn.execute(SQL)
'Fermeture de la connexion à la base de donnée conn.Close
'Libération de la memoire Set rst = Nothing
Set conn = Nothing
ExporterDatabases
'Déclarartion des variables
Dim conn, rst, SQL, fso, Chemin, kette, NomTable, NomTable_CSV ,Message1 ,Message2, courb, tps
'Preparation pour l'acces à la base de données Set conn = CreateObject("ADODB.Connection") Set rst = CreateObject("ADODB.Recordset")
'DSN = Nom de la base de données ODBC configuré conn.Open "Provider=MSDASQL;DSN=WinCCFlexible"
'Message à afficher en cas d'erreur
Message1 = "L'intervalle de temps a été mal choisi"
Message2 = "la table de la base demandée n'existe pas"
'Fehlerbehandlung 'Error handling On Error Resume Next Err.Clear
courb = CourbeSelec
If (SmartTags("Sel_HDebut")>=SmartTags("Sel_HFin")) Then ShowSystemAlarm Message1
Else
'La table de la courbe est éffacée avant de charger l'archive historique
SQL = "DELETE FROM Archive_Export0"
conn.Execute(SQL)
For tps = SmartTags("Sel_HDebut") To (SmartTags("Sel_HFin")-1) 'Creation du nom de la table par concatenation
'le dbo est un "Key word"
NomTable = "[ARCHIVE_" & SmartTags("Sel_Mois") & "_" &
SmartTags("Sel_Annee") & "].dbo."
SmartTags("Sel_Mois") & "_" & SmartTags("Sel_Annee") & "_" & tps 'Copie des valeurs archivées pendant une heure de temps 'vers la table de la base de données
SQL = "SELECT * From" & NomTable conn.execute(SQL)
'Affichage de alarme système si la table de la base n'existe pas If Err.Number <> 0 Then
ShowSystemAlarm Message2 Else
'Copie des données de l'archive historique vers l'archive de courbe
SQL = "INSERT INTO Archive_Export0 SELECT * FROM " &
NomTable & " WHERE VarName = '" & courb & "'"
conn.execute(SQL) End If
Next End If
'Creer le nom du fichier .CSV
NomTable_CSV = courb & "_" & SmartTags("Sel_Jour") & "_" &
SmartTags("Sel_Mois") & "_" & SmartTags("Sel_Annee") & "_" &
SmartTags("Sel_HDebut") & "_" & SmartTags("Sel_HFin") 'Lire les valeurs de la table
SQL = "SELECT * FROM Archive_Export0"
'Exécuter la requette SQL Set rst = conn.execute(SQL)
'Affichage de alarme système si la table de la base n'existe pas If Err.Number <> 0 Then
ShowSystemAlarm Message2 Else
'Création du fichier .CSV
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists("C:\ARCHIVES\" & NomTable_CSV & ".csv") Then ShowSystemAlarm NomTable_CSV & ".csv existe déjà!"
Else
'Création du chemin du nouveau fichier
Set Chemin = fso.OpenTextFile("C:\ARCHIVES\Template.csv",8,True) If Not(rst.bof And rst.eof) Then 'S'excécute si on entre dans une table exixtant -> BOF = Begin of File; EOF = End of File
rst.movefirst 'Selection de la première ligne kette = ""
'Creation d'une première ligne
kette = kette & Chr(34) & rst.fields(0).name & Chr(34)
& ";" 'Lecture de la colonne 1 -> VarName
kette = kette & Chr(34) & rst.fields(1).name & Chr(34)
& ";" 'Lecture de la colonne 2 -> TimeString
kette = kette & Chr(34) & rst.fields(2).name & Chr(34)
& ";" 'Lecture de la colonne 3 -> VarValue
kette = kette & Chr(34) & rst.fields(3).name & Chr(34)
& ";" 'Lecture de la colonne 4 -> Validity
kette = kette & Chr(34) & rst.fields(4).name & Chr(34) 'Lecture de la colonne 5 -> Time_ms
Chemin.WriteLine kette While Not rst.eof
'Lire le détail des valeurs de chaque ligne
CDate(rst.fields(1).value) & Chr(34) & ";"
kette = kette & rst.fields(2).value & ";"
kette = kette & rst.fields(3).value & ";"
kette = kette & rst.fields(4).value Chemin.WriteLine kette
rst.movenext 'Aller à la ligne suivante Wend
rst.close End If
End If
Chemin.Close
'Renommé le fichier "Template.csv"
Set Chemin = fso.GetFile("C:\ARCHIVES\Template.csv") Chemin.Name = NomTable_CSV & ".csv"
ShowSystemAlarm NomTable_CSV & ".csv a été bien exporté!"
End If
'Fermeture de la connexion à la base de donnée et libérartion de mémoire conn.Close
Set rst = Nothing Set conn = Nothing
CourbeSelec
Dim Obj, StrScreenName, courb Set Obj = HmiRuntime
StrScreenName = Obj.BaseScreenName Select Case SmartTags("Sel_Courbe")
Case 1
If StrScreenName="COURBE DEBITS" Then courb = "COURBE_TOT"
Else If StrScreenName="TEMPERATURES BROYEUR" Then courb = "Z1M01B1_COURBE"
Else If StrScreenName="TEMPERATURES MOTEUR Z1M03M1"
Then
courb = "Z1M03B1_COURBE"
Else If StrScreenName="INTENSITE" Then courb = "U1U06A1_COURBE"
Else If StrScreenName="PROCESS" Then courb = "Z1B01T1_COURBE"
If StrScreenName="COURBE DEBITS" Then courb = "COURBE_GY"
Else If StrScreenName="TEMPERATURES BROYEUR" Then
Else If StrScreenName="TEMPERATURES MOTEUR Z1M03M1"
Then
courb = "Z1M03B2_COURBE"
Else If StrScreenName="INTENSITE" Then courb = "G1U02A1_COURBE"
Else If StrScreenName="PROCESS" Then courb = "Z1M01T3_COURBE"
If StrScreenName="COURBE DEBITS" Then courb = "COURBE_CK"
Else If StrScreenName="TEMPERATURES BROYEUR" Then courb = "Z1M01B3_COURBE"
Else If StrScreenName="TEMPERATURES MOTEUR Z1M03M1"
Then
courb = "Z1M03B3_COURBE"
Else If StrScreenName="INTENSITE" Then courb = "G1M01A1_COURBE"
Else If StrScreenName="PROCESS" Then courb = "Z1P11T2_COURBE"
If StrScreenName="COURBE DEBITS" Then courb = "COURBE_AJ"
Else If StrScreenName="TEMPERATURES BROYEUR" Then courb = "Z1M01B4_COURBE"
Else If StrScreenName="TEMPERATURES MOTEUR Z1M03M1"
Then
courb = "Z1M03B4_COURBE"
Else If StrScreenName="INTENSITE" Then courb = "Z1P05A1_COURBE"
Else If StrScreenName="PROCESS" Then courb = "Z1P05S1_COURBE"
If StrScreenName="COURBE DEBITS" Then courb = "COURBE_FOLA"
Else If StrScreenName="TEMPERATURES BROYEUR" Then courb = "Z1M02B2_COURBE"
Else If StrScreenName="TEMPERATURES MOTEUR Z1M03M1"
Then
courb = "Z1M03B5_COURBE"
Else If StrScreenName="INTENSITE" Then courb = "Z1P11A1_COURBE"
Else If StrScreenName="PROCESS" Then courb = "Z1M01P2_COURBE"
End If End If
Case 6
If StrScreenName="COURBE DEBITS" Then courb = "Oreille_HASLER_Courbe"
Else If StrScreenName="TEMPERATURES BROYEUR" Then courb = "Z1M02B3_COURBE"
End If End If
End Select
'On recupère la valeur de retour de la fonction CourbeSelec = courb 'Valeur de retour
ExporterVersFiche
'Déclarartion des variables
Dim fso, f, MyFile, Clinker, Gypse, Ajout, Alim, Oreille, Pallier, Symetro Dim Moteur, Temp, Depression, Ventilateur, ElectroFiltre, ProdFini, P1P11 Dim Donnees1, Donnees2, Donnees
'Création de l'objet système
Set fso = CreateObject("Scripting.FileSystemObject") 'Création et ouverture du fichier de données
Set MyFile = fso.OpenTextFile("D:\donnees.txt",2,True) 'Enregistrement des données
Clinker = " ;" & Cpt_CK_J & ";"
Gypse = G1J01V1 & ";" & G1M01A1 & "; ;" & Cpt_GY_J & ";"
Ajout = " ;" & Cpt_AJ_J & ";"
Alim = DB_GEN & "; ;"
Oreille = BruitOreille & ";"
Pallier = Z1M01B1 & ";" & Z1M01B2 & ";" & Z1M01B3 & ";" & Z1M01B4 & ";"
Symetro = Z1M02B2 & ";"
Moteur = " " & ";" & Z1M03B4 & ";" & Z1M03B5 & ";" & Z1M03B1 & ";"
Temp = Z1B01T1 & ";" & Z1M01T3 & ";" & Z1P11T2 & ";"
Depression = Z1M01P1 & ";" & Z1M01P2 & ";"
Ventilateur = Z1P05A1 & ";" & Z1P05S1 & ";"
ElectroFiltre = Z1P11E1 & ";" & Z1P11A1 & ";"
ProdFini = " " & ";" & " " & ";" & " " & ";" & " " & ";" & " " & ";"
P1P11 = "Oui" & ";"
Donnees1 = Clinker & Gypse & Ajout & Alim & Oreille & Pallier & Symetro &
Moteur
Donnees2 = Temp & Depression & Ventilateur & ElectroFiltre & ProdFini &
P1P11
Donnees = " ; ; ; ; ;" & Donnees1 & Donnees2 'Ecriture des données dans le fichier texte MyFile.WriteLine(Donnees)
'Fermeture du fichier MyFile.Close
'Ouverture du fichier servant de passerelle
'pour le transfert des données vers le fichier excèl TRACHING TOOL StartProgram "D:\passerelle.xls", "", hmiShowNormal, hmiNo
Script écrit dans Excel
Public Sub Workbook_Open() 'Déclaration des variables
Dim day, heure, mois, annee, Classeur 'Initialisation
cpt = 0
'Récupération de l'heure du mois et de l'année système heure = Hour(Time)
mois = Month(Date) annee = Year(Date)
'Ouverture du fichier de données
Set Classeur = Workbooks.Open(Filename:="D:\CIMENT_FICHES DE PRODUCTION JOURNALIERE_" & mois & "_" & annee & ".xls", WriteResPassword:="ciment") 'Recherche de la date actuelle dans le fichier Tracking tool
For Each c In Workbooks("CIMENT_FICHES DE PRODUCTION JOURNALIERE_" & mois
& "_" & annee & ".xls").Worksheets(1).Range("D1:D1000") If (c.Value <> Date) Then
'Calcul de la cellule de debut de copie i = (cpt + 1) + (heure - 6)
'Ouverture du fichier de données
Set Classeur = Workbooks.Open(Filename:="D:\donnees.txt", Format:=4) 'Copie des données relevées dans le fichier Tracking tool
Workbooks(Workbooks.Count).Sheets("donnees").Range("G1:I1").Copy
Workbooks("CIMENT_FICHES DE PRODUCTION JOURNALIERE_" & mois & "_" & annee
& ".xls").Worksheets(1).Cells(i, 7).PasteSpecial Paste:=xlPasteValues Workbooks(Workbooks.Count).Sheets("donnees").Range("K1").Copy
Workbooks("CIMENT_FICHES DE PRODUCTION JOURNALIERE_" & mois & "_" & annee
& ".xls").Worksheets(1).Cells(i, 11).PasteSpecial Paste:=xlPasteValues Workbooks(Workbooks.Count).Sheets("donnees").Range("M1:N1").Copy
Workbooks("CIMENT_FICHES DE PRODUCTION JOURNALIERE_" & mois & "_" & annee
& ".xls").Worksheets(1).Cells(i, 13).PasteSpecial Paste:=xlPasteValues Workbooks(Workbooks.Count).Sheets("donnees").Range("P1:AP1").Copy
Workbooks("CIMENT_FICHES DE PRODUCTION JOURNALIERE_" & mois & "_" & annee
& ".xls").Worksheets(1).Cells(i, 16).PasteSpecial Paste:=xlPasteValues 'Fermeture et enregistrement des fichiers ouverts
Workbooks(Workbooks.Count).Close
Workbooks("D:\CIMENT_FICHES DE PRODUCTION JOURNALIERE_" & mois & "_" &
annee & ".xls").Save
Workbooks("D:\CIMENT_FICHES DE PRODUCTION JOURNALIERE_" & mois & "_" &
annee & ".xls").Close Application.Quit End Sub