Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




WinCC: Problema creazione text file VBS


Messaggi consigliati

Inserito:

Salve a tutti,

sto scrivendo uno script in vbs su WinCC 2008 SP3 per salvare su un file di testo il valore di una variabile stringa (come sapete non si possono usare le funzioni di archiviazione per le variabili di tipo stringa).

Lo script è il seguente

Dim fs, f, FName, Header, ts

FName = "C:\Ark\CP\testUserLog.txt"

Header = "Login time;User_Name"

Set fs = CreateObject("Scripting.FileSystemObject")

fs.CreateTextFile FName

'f.open FName, 8

'Il giro è fatto... sistema lo script e ci siamo
If Not fs.FileExists(FName) Then
	fs.CreateTextFile FName
End If

Set f = fs.GetFile(FName)
Set ts = f.OpenAsTextStream (8,-2)

If ts.Size(FName) = 0 Then
	ts.WriteLine(Header)
End If		

ts.WriteLine(CStr(Now) & ";" & CStr(SmartTags("User_Name")))

ts.Close	

Set f = Nothing
Set fs = Nothing
Set ts = Nothing

La variabile "User_Name" è quella da salvare nel file di testo (tipo della variabile: stringa)

 

Qualcuno mi può aiutare?

 

Grazie


Inserita:

Lo script viene richiamato ad ogni cambio del valore della variabile "User_Name"

 

 

Sample.PNG

Inserita:

User_Name è una variabile interna oppure appoggiata al PLC? Se è una variabile interna NON funziona.

Io faccio così per tenere traccia dei login:

nella schedulazione all'evento cambio utente io lancio un job

nel job faccio girare la funzione leggiNomeUtente in modo da appoggiare il nome ad un tag

dopo faccio girare uno script in modo da tenere traccia dell'ultimo accesso con la sintassi:

 

Dim user 

GetUserName user							' Read User name

If user = "" Then							' If no user log on 
  											' then doing nothing
Else										' else refresh the username for the production record
	SmartTags("nome_login_record") = user  	'login name for production record purposes							
End If

 

Inserita:

User_Name è una variabile interna oppure appoggiata al PLC? Se è una variabile interna NON funziona.

Io faccio così per tenere traccia dei login:

nella schedulazione all'evento cambio utente io lancio un job

nel job faccio girare la funzione leggiNomeUtente in modo da appoggiare il nome ad un tag

dopo faccio girare uno script in modo da tenere traccia dell'ultimo accesso con la sintassi:

 

è esattamente quello che faccio anche io per tenere traccia dei login. Il problema è il tipo della variabile User_Name, che mi costringe a dover creare uno script che crea un file per  dove salvare di volta in volta (ogni cambio valore della variabile) il suo valore.
Quindi dici che essendo User_Name una variabile interna non mi richiama lo script quando all'evento "Cambio Valore" lo inserisco?

Inserita:

Esatto. Ti riporto il testo dal sito di mamma Siemens:

2.	Perché non viene eseguita la funzione di sistema sull’evento "Variazione di valore" su una variabile interna?

L’esecuzione di funzioni di sistema che siano progettate sull’evento "Variazione di valore" con variabili interne viene bloccata tramite variazione di valore in uno script (Loop breaker).
Eccezione

Con variazione di valore di una variabile su un campo di I/O la funzione viene eseguita.
Rimedio

Eseguire la funzione di sistema direttamente nello script opp. utilizzare una variabile esterna (Power Tag) con collegamento al controllore.

Il mio consiglio è quello di collegare un tag del PLC (anche una word per esempio) e forzarlo = 2 con il famoso job. Il tag ovviamente deve essere in lettura continua e deve avere come limiti 0 e 1 (inferiore e superiore). Nelle proprietà del tag metti in esecuzione lo script al superamento del valore superiore.

In ultimo, nello script azzeri il famoso tag alla fine esecuzione, in modo da eseguire lo script una volta sola.

Inserita:

Potresti essere più specifico?

Perdonami ma sono un web designer trapiantato nel mondo PLC... Riesci a farmi qualche screenshot con la configurazione che deve avere il tag?

Inserita:

Perdonami ma sono un web designer trapiantato nel mondo PLC...

.... Ma chi te l'ha fatto fare???? Devi aver fatto qualcosa di male per migrare nella automazione! :smile: :smile::smile:

nello script questo tag poi lo devi mettere = 0 altrimenti continua a ciclare.

 

letturacontinua.png

limiti.png

Inserita:

Alla fine ho risolto lo stesso.. Visto che nella mia supervisione avevo diversi plc collegati, ho associato la variabile ad un plc a caso e l'ho puntata su un indirizzo fittizzio.. Funziona ahahaha 

Inserita:

Forse non mi sono spiegato bene, ma la necessità di puntare un tag NON INTERNO era già menzionata nella mia risposta al thread n'5.

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...