Sauvegarde de changement variable VBScript

Forum traitant des automates industriels de marque Siemens.
AnissaUchiha
Apprend le binaire
Apprend le binaire
Messages : 7
Inscription : 14 févr. 2019, 10:18

Sauvegarde de changement variable VBScript

Message par AnissaUchiha »

Bonjour , je suis entrein de créer un fichier Excel qui permet d'enregistrer les action de l'utilisateur sur écran HMI. Pour l'instant c'est un code test avec seulement 2 BP avant de l'adapter sur une machine. Mon projet est fonctionnel et écrit tout les secondes sur le fichier l'état de mes 2 BP. Seulement j'aimerai qu'il écrive sur le fichier excel SEULEMENT quand une des variables CHANGE D'ETAT (et non toutes les secondes car le fichier se remplis vite). C'est pour savoir s'il y a une possibilité de le faire avec les "Archives" si pas , un autre moyen ? Merci


Voici mes 3 scripts ==>

Code : Tout sélectionner

Sub Continue()

Dim EcritureContinue 
Dim FolderWay , ObjectWay , FileName , File , FileExist, header , value ,  currentTime ' Declaration des variables
FolderWay = "C:\Users\agher\Downloads\Henallux Automatique\3ème bloc\STAGE\ExcelExemple"  'Là ou l'on veut enregistrer le fichier Excel sous un nom
Set ObjectWay = CreateObject ("Scripting.FileSystemObject") 'Creation d'un object pour voir si le dossier est créé ou pas
'Si le dossier n'existe pas, on le créer.
If Not ObjectWay.FolderExists(FolderWay) Then 
	ObjectWay.CreateFolder FolderWay
End If   
	 
'FileName = Year(Now()) & "_" & Month(Now()) &"_" & Day(Now()) & "-" & Hour(Time) & "_" & Minute(Time) & "_" & Second(Time) & ".csv" 
FileName =  "EnregistrementValeur.csv" 
Set File = CreateObject ("Scripting.FileSystemObject") ' Creation d'un object pour voir si le fichier est créé ou pas
FileExist = File.FileExists(FolderWay & "\" &FileName) ' On créer une variable qui indique le chemin du fichier

'Si le fichier n'existe pas, on le créer
If FileExist = False Then 
	'On créer le fichier
	File.CreateTextFile(FolderWay & "\" &FileName)    
	
	'On créer maintenant les en-têtes du fichier Excel
	Set header = File.OpenTextFile(FolderWay & "\" &FileName, 8) ' Le 8 signifie "ouvrir le dossier et écrire à la fin"  
	header.WriteLine("Temps ; ActionA ; ActionB")
	header.Close 'Pas oublier de fermer quand on a fini sinon la suite se fera dans les headers
	
	'On vide l'objet
	Set File = Nothing
End If
Do 
	Call WriteDataToExcel (value, currentTime, File, FolderWay, FileName)  
	EcritureContinue = SmartTags("BpStopLog") 'J'appel le 1er script
	Call Delay 
Loop While ( EcritureContinue = False) ' tant que le BPSTOPLOG vaut 0 , on continue d'écrire

 

End Sub

Code : Tout sélectionner

Sub Delay()
Dim time1, time2
time1= Now
time2= Now + TimeValue ("0:00:01")
	Do Until time1>= time2
		time1= Now()
	Loop

End Sub

Code : Tout sélectionner

Sub WriteDataToExcel(ByRef value, ByRef currentTime, ByRef File, ByRef FolderWay, ByRef FileName)

currentTime = Hour(Time) & ":" & Minute(Time) & ":" & Second(Time) 
 
Set File = CreateObject ("Scripting.FileSystemObject")
Set value = File.OpenTextFile(FolderWay & "\" &FileName, 8)
value.WriteLine ( currentTime & ";" & SmartTags("ActionA") & ";" & SmartTags("ResetActionA")) ' ";" sépare les collonnes dans Excel

    

value.Close 
  
End Sub
Avatar de l’utilisateur
ProfnovA
Créateur de langage
Créateur de langage
Messages : 525
Inscription : 21 oct. 2015, 08:21

Re: Sauvegarde de changement variable VBScript

Message par ProfnovA »

Quel logiciel utilises-tu? WinCC?

Ça me parait pas viable car un appui sur BP durera moins qu'une seconde et ne sera pas vu, de plus tu vas créer des fichiers pour rien.
Il vaudrait mieux lancer un script d'écriture (ton script WriteDataToExcel) à l'appui et au relâchement.
AnissaUchiha
Apprend le binaire
Apprend le binaire
Messages : 7
Inscription : 14 févr. 2019, 10:18

Re: Sauvegarde de changement variable VBScript

Message par AnissaUchiha »

ProfnovA a écrit : 14 févr. 2019, 11:57 Quel logiciel utilises-tu? WinCC?

Ça me parait pas viable car un appui sur BP durera moins qu'une seconde et ne sera pas vu, de plus tu vas créer des fichiers pour rien.
Il vaudrait mieux lancer un script d'écriture (ton script WriteDataToExcel) à l'appui et au relâchement.

Oui sur WinCC
Je lance mon script à l'ouverture de l'HMI et il se ferme à la fermeture de celui-ci. De toute façon le delay d'une seconde sera supprimé dès que j'ai trouvé le moyen de faire l'écriture seulement sur changement de la variable :) . Si je met tout sur mon WriteData , il va a chaque fois verifier si le dossier existe ect pour chaque écriture. Autant le faire qu'une fois non?
Même si l'appuie vaut plus d'une seconde sur le fichier excel j'ai bien mon changement d'état.
Avatar de l’utilisateur
ProfnovA
Créateur de langage
Créateur de langage
Messages : 525
Inscription : 21 oct. 2015, 08:21

Re: Sauvegarde de changement variable VBScript

Message par ProfnovA »

AnissaUchiha a écrit : 14 févr. 2019, 15:25
ProfnovA a écrit : 14 févr. 2019, 11:57 Quel logiciel utilises-tu? WinCC?

Ça me parait pas viable car un appui sur BP durera moins qu'une seconde et ne sera pas vu, de plus tu vas créer des fichiers pour rien.
Il vaudrait mieux lancer un script d'écriture (ton script WriteDataToExcel) à l'appui et au relâchement.

Oui sur WinCC
Je lance mon script à l'ouverture de l'HMI et il se ferme à la fermeture de celui-ci. De toute façon le delay d'une seconde sera supprimé dès que j'ai trouvé le moyen de faire l'écriture seulement sur changement de la variable :) . Si je met tout sur mon WriteData , il va a chaque fois verifier si le dossier existe ect pour chaque écriture. Autant le faire qu'une fois non?
Non, tu ouvres le fichier, tu écris dedans et tu le refermes, ça sollicitera moins le PC.
AnissaUchiha
Apprend le binaire
Apprend le binaire
Messages : 7
Inscription : 14 févr. 2019, 10:18

Re: Sauvegarde de changement variable VBScript

Message par AnissaUchiha »

Là comme le code est écris je l'ouvre qu'une fois , je fait mes écritures et il se ferme. Je préfère faire plein de script et faire des CALL sur le principal, je m'en sort mieux et c'est plus lisible.
Peut etre je vais changer plus tard quand je l'aurai adapter sur une machine.
Mais pour l'instant j'aimerai régler l'écriture seulement sur changement de variable ^^
Avatar de l’utilisateur
ProfnovA
Créateur de langage
Créateur de langage
Messages : 525
Inscription : 21 oct. 2015, 08:21

Re: Sauvegarde de changement variable VBScript

Message par ProfnovA »

Dans l'idée, il te faut une variable pour mémoriser l'état précédent, du genre

Si BP <> BP-1
{
écrire fichier
}
BP-1 = BP
AnissaUchiha
Apprend le binaire
Apprend le binaire
Messages : 7
Inscription : 14 févr. 2019, 10:18

Re: Sauvegarde de changement variable VBScript

Message par AnissaUchiha »

J'ai trouvé la solution pour ceux que ça interesse. Je lance le script "FichierDossier" au démarrage de l'HMI (évènement de l'écran) et pour faire une écriture sur changement de variable je devais simplement appeler le script WriteToData sur chacun de mes BP sur HMI (dans leur évènement).

Code : Tout sélectionner

Sub FichierDossier()

Dim EcritureContinue 
Dim FolderWay , ObjectWay , FileName , File , FileExist, header ' Declaration des variables
FolderWay = "C:\Users\agher\Downloads\Henallux Automatique\3ème bloc\STAGE\ExcelExemple"  'Là ou l'on veut enregistrer le fichier Excel sous un nom
Set ObjectWay = CreateObject ("Scripting.FileSystemObject") 'Creation d'un object pour voir si le dossier est créé ou pas
'Si le dossier n'existe pas, on le créer.
If Not ObjectWay.FolderExists(FolderWay) Then 
	ObjectWay.CreateFolder FolderWay
End If   
	 
FileName =  Day(Now()) & "_" & Month(Now()) &"_" &  Year(Now())    & ".csv" 
'FileName =  "EnregistrementValeur.csv" 
Set File = CreateObject ("Scripting.FileSystemObject") ' Creation d'un object pour voir si le fichier est créé ou pas
FileExist = File.FileExists(FolderWay & "\" &FileName) ' On créer une variable qui indique le chemin du fichier

'Si le fichier n'existe pas, on le créer
If FileExist = False Then 
	'On créer le fichier
	File.CreateTextFile(FolderWay & "\" &FileName)    
	
	'On créer maintenant les en-têtes du fichier Excel
	Set header = File.OpenTextFile(FolderWay & "\" &FileName, 8) ' Le 8 signifie "ouvrir le dossier et écrire à la fin"  
	header.WriteLine("Temps ; ActionA ; ActionB")
	header.Close 'Pas oublier de fermer quand on a fini sinon la suite se fera dans les headers
	'On vide l'objet
	Set File = Nothing
End If

End Sub

Code : Tout sélectionner

Sub WriteDataToExcel()
Dim value, currentTime, File, FolderWay, FileName

FolderWay = "C:\Users\agher\Downloads\Henallux Automatique\3ème bloc\STAGE\ExcelExemple"
'FileName =  "EnregistrementValeur.csv"
FileName =  Day(Now()) & "_" & Month(Now()) &"_" &  Year(Now()) & ".csv"
 
currentTime = Hour(Time) & ":" & Minute(Time) & ":" & Second(Time) 
 
Set File = CreateObject ("Scripting.FileSystemObject")
Set value = File.OpenTextFile(FolderWay & "\" &FileName, 8)
value.WriteLine ( currentTime & ";" & SmartTags("ActionA") & ";" & SmartTags("ResetActionA")) ' ";" sépare les colonnes dans Excel

value.Close 
  
End Sub
Répondre