Vai al contenuto
PLC Forum


Siemens VBScript, leggere un file CSV senza sapere il nome


MarioVirgilio

Messaggi consigliati

MarioVirgilio

Buon giorno a tutti

Lo script allegato funziona ma la mia esigenza è leggere il file CSV senza sapere il nome (nell'esempio è inserito il nome Estratto)

Mi spiego meglio: sulla USB key ci sarà sempre un solo file CSV di cui non conosco il nome e che dovrei leggere

 

Grazie per la collaborazione

 

image.png.9e7ca7c3a8ceaa20b131c126d8e494e2.png

Link al commento
Condividi su altri siti


puoi dare all'operatore la facoltà di inserire il nome?

se la risposta è SI, basta sostituire il tag ascii col persorso al posto della stringa fissa nella dichiarazione della variabile "Path"

se la risposta è NO, come fai a discriminare quale file leggere, visto che potrebbe darsi ce ne sia più di uno nel modulo di memoria?

 

 

Link al commento
Condividi su altri siti

MarioVirgilio

Grazie e buon giorno

 

Come ho scritto nella USB Key ci sarà sempre un solo file ma con nome diverso

Procedura di lavorazione: Il responsabile caricherà sulla chiavetta il file della ricetta di produzione e la consegnerà all'operatore (spiegato il motivo per cui ci sarà solo un file CSV)

 

Link al commento
Condividi su altri siti

MarioVirgilio,

 

puoi prendere spunto da questo script, invece che ricavarne un file ti ricavi semplicemente un tag interno che poi usi nello script precedente.

Sub PR_Crea_lista_programmi()
' *****************************************************************************************
' LEGGE IL NOME DEI FILE PRESENTI NELLA CARTELLA C:\ippo\Progs E CREA UN FILE
' CONTENENTE I NOMI LETTI
' *****************************************************************************************

Dim Folder, File, Elemfile, Fso, f, Counter, TempStr

Set Fso = CreateObject("Scripting.FileSystemObject")

' Verifica se la cartella esiste, altrimenti la crea
' (serve solo al primo avvio di WinCC al collaudo, evita di creare a mano la cartella)
If Not Fso.FolderExists ("C:\ippo\Progs") Then
	Fso.CreateFolder ("C:\ippo\")
	Fso.CreateFolder ("C:\ippo\Progs")
End If

Set Folder = Fso.GetFolder ("C:\ippo\Progs")
Set File = Folder.Files
Set f = Fso.OpenTextFile("C:\Storage Card\Prog.lst", 2, True)	

' Segnala che la lista è in fase di creazione (serve, eventualmente, per bloccare funzioni o visualizzare
' durante la creazione lista che potrebbe durare qualche secondo in caso di tanti programmi presenti.
SmartTags("Creazione_lista_in_corso") = True


' Legge i file presenti in C:\ippo\Progs.
' Al nome del file letto vengono tolti il percorso (primi 14 caratteri) e l'estensione
' in quanto non è necessario visualizzarlo. A causa di ciò, non va mai cambiato il nome
' del percorso C:\ippo\Progs altrimenti i caratteri iniziali da eliminare non sarebbero più 14.
For Each Elemfile In File
TempStr = Mid(CStr(Elemfile), 15)			' elimina il percorso C:\ippo\Progs (14 caratteri)
TempStr = Left(TempStr, Len(TempStr)-4)		' elimina l'estensione .prg (4 caratteri)
 f.Write TempStr & vbCrLf					' scrive la riga risultante
Next

' Chiude il file in scrittura
f.Close

' Scrive in una variabile quanti programmi (quanti files) sono presenti nella cartella C:\ippo\Progs
SmartTags("ProgrammiPresenti") = File.Count


' libera risorse
Set Fso = Nothing
Set Folder = Nothing
Set File = Nothing
Set f = Nothing

' Segnala che è conclusa la creazione della lista
SmartTags("Creazione_lista_in_corso") = False

 

 

Link al commento
Condividi su altri siti

1 ora fa, MarioVirgilio ha scritto:

Sicuramente così è completo

Io lo uso per generare un file txt che contiene tutte le ricette del relativo impianto. Nel tuo caso non dovrai eliminare l'estensione e non dovrai utilizzare il FOR-NEXT. 

Il tag TempStr invece dovrai copiarlo su un tag da passare allo script che avevi postato.

Link al commento
Condividi su altri siti

MarioVirgilio

Buon giorno

Premetto che non sono un esperto di VBScript

Ho provato lo script inviato e l'unica cosa che ha funzionato è la generazione della cartella Progs

Domande 

- i file delle ricette in CSV (salvati su USB) devo copiarli nella cartella Progs ?

- che tipo di variabile é il tag TempStr ?

- può spiegarmi questo "C:\Storage Card\Prog.lst", 2, True

 

Grazie e buona giornata

 

Link al commento
Condividi su altri siti

23 minuti fa, MarioVirgilio ha scritto:

Ho provato lo script inviato e l'unica cosa che ha funzionato è la generazione della cartella Progs

almeno qualcosa ha funzionato 😃

 

23 minuti fa, MarioVirgilio ha scritto:

i file delle ricette in CSV (salvati su USB) devo copiarli nella cartella Progs ?

NO. questo esempio è una traccia sulla quale lavorare e dovrebbe darti una idea di come fare. 
Dal primo codice che hai allegato io ne ho dedotto che tu avessi dimestichezza di VBS, evidentemente non è così. Nell'esempio io vado a spazzolare una determinata cartella che potrebbe non esserci (per esempio se vado a installare il runtime su un PC nuovo di pacca); in tal caso vado a crearla, ovvio che non ci saranno programmi dentro, del resto da un PC nuovo mica mi aspetto la scienza infusa.
Se invece la cartella esiste, apro il file con il metodo in scrittura e unicode

OpenTextFile

https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-./opentextfile-method

 

 

32 minuti fa, MarioVirgilio ha scritto:

che tipo di variabile é il tag TempStr ?

questa è una variabile stringa che è il risultato della pulizia del percorso ed estensione del file esempio:C:\ippo\Progs\UovoDiColombo.prg
la famosa variabile sarà: UovoDiColombo

 

36 minuti fa, MarioVirgilio ha scritto:

può spiegarmi questo "C:\Storage Card\Prog.lst", 2, True

vedi sopra.

 

Io sono convinto che tu abbia voglia di imparare, quindi ti consiglio di scaricare questo manuale e inizia ad impratichirti

https://support.industry.siemens.com/cs/document/109764540/simatic-wincc-wincc-engineering-v15-–-programming-reference?dti=0&dl=en&lc=it-IT

 

praticamente devi togliere quello che ci sta sopra la riga qui sotto
' Legge i file presenti in C:\ippo\Progs.

 

togli questo

TempStr = Left(TempStr, Len(TempStr)-4)        ' elimina l'estensione .prg (4 caratteri)

altrimenti ti toglie l'estensione

 


ed andare a sostituire questa riga 
 f.Write TempStr & vbCrLf ' scrive la riga risultante

con 

SmartTags("ChiamaloComeVuoi") = TempStr 

ovvio che devi  pure cavare 
f.close  ecc.

 

per fare le prove, SmartTags("ChiamaloComeVuoi") visualizzalo su una pagina così sai se almeno quello è corretto, quindi procedi alla lettura del file come dal tuo script

 

 

Link al commento
Condividi su altri siti

MarioVirgilio

Sempre grazie per la disponibilità

Mi permetta una battuta: nonostante sia prossimo alla pensione mi piace sempre imparare

Nel fine settimana mi divertirò a studiare

Saluti

 

 

Link al commento
Condividi su altri siti

2 ore fa, MarioVirgilio ha scritto:

Mi permetta una battuta: nonostante sia prossimo alla pensione mi piace sempre imparare

MarioVirgilio,

non che io sia un ragazzino, visto che sono più vicino ai 60 che ai 50....

Un paio di cose:
qui sul forum ci si dà tutti del tu, indipendentemente da età o ruolo

visto che sei fresco di script cerca di autoapprendere creandoti delle funzioni semplici. Nel tuo caso io farei la funzione per leggere il nome del file e lo metterei su un tag a video senza fare altro. 

Quando questo funziona correttamente fai il passo successivo, cioè prova ad aprire il file e richiuderlo senza errori. Quando anche questo passo è fatto, adoperati per leggere una riga ecc. ... poi quando tutto funziona posti il codice, così puoi essere utile per qualcun altro. 

Modificato: da pigroplc
Link al commento
Condividi su altri siti

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...