Giuseppe Signorella Inserito: 27 gennaio 2015 Segnala Inserito: 27 gennaio 2015 Ho la necessità di esportare, in un qualunque formato (csv, txt, doc, pdf) dei dati di produzione di un impianto. Sapete se è presente una funzione che faccia già questo con wincc advanced, oppure tocca crearla? Grazie
pigroplc Inserita: 28 gennaio 2015 Segnala Inserita: 28 gennaio 2015 La domanda è alquanto generica, io penso che se WinCC Advanced è un mix fra il Flexible e WinCC (come avevo visto in passato) la funzione te la devi creare tramite script. A suo tempo ricordo di aver già affrontato questo argomento, prova a cercare sempre in questo forum HMI
dott.cicala Inserita: 28 gennaio 2015 Segnala Inserita: 28 gennaio 2015 io per farla facile creo un set di dati e poi lo esporto in csv con la relativa funzione. La funzione la attivi al verificarsi di un qualsiasi evento.
Giuseppe Signorella Inserita: 28 gennaio 2015 Autore Segnala Inserita: 28 gennaio 2015 io per farla facile creo un set di dati e poi lo esporto in csv con la relativa funzione. La funzione la attivi al verificarsi di un qualsiasi evento. Ti riferisci alla funzione archivi o qualche altra cosa? Se ti riferisci alla funzione archivi, il problema è che non consente la gestione delle stringhe. Io ho la necessità di poter esportare anche il nome del cliente che in quel momento è stato processato e i nomi dei componenti realizzati (con una serie di dati). I nomi dei componenti lavorati cambiano in funzione del cliente. Grazie
dott.cicala Inserita: 28 gennaio 2015 Segnala Inserita: 28 gennaio 2015 No, mi riferisco alle ricette Ti crei una ricetta che contiene un set di dati, nel set di dati puoi salvare anche le stringhe. crei due eventi: uno per salvare/aggiornare i dati nel set di dati un'altro per esportarlo. Ci sono due funzioni specifiche, compreso esporta set dati in csv. Non sarà una finezza, ma è a costo zero e tempo minimo di sviluppo...il set di dati può anche essere salvato/esportato su un qualsiasi percorso di rete. Le funzioni le puoi attivare con gli "ordini del controllore" e danno un valore di ritorno. Se l'operazione non è a ciclo continuo, ma ogni tot tempo, va bene, altrimenti bisogna pensare a qualcosa di un po' più complesso. Gli archivi ...sono un po' scomodi e hanno vari limiti.
pigroplc Inserita: 29 gennaio 2015 Segnala Inserita: 29 gennaio 2015 Dim fso, MyFile, today_string On Error Resume Next Set fso = CreateObject("Scripting.FileSystemObject") today_string = CStr(Year(Now))&"_"& CStr(Month(Now))&"_"& CStr(Day(Now)) Set MyFile = fso.GetFile("C:\Storage Card\production.xls") ' source file MyFile.Copy ("C:\Storage\" & today_string & "_" & "production" & ".xls") 'copy to destination file MyFile.Delete 'then delete the old one Dim objFileSystem, blank, fs 'dichiara le variabili Set objFileSystem = CreateObject("Scripting.FileSystemObject")'dichiara le proprietà del file Set fs = objFileSystem.CreateTextFile ("C:\Storage Card\production.xls",True) 'file create, eventually overwritten and ascii default blank=" " 'fs.WriteLine("Report day" + ";" + "Report hour" + ";" + "Operator name" + ";" + "Program number" + ";" + "Program description" + ";" + "Quantity set point" + ";" + "Elapsed" + ";" + "Produced" + ";" + "Total Production"): fs.WriteLine("Report day" + ";" + "Report hour" + ";" + "Operator name" + ";" + "Program number" + ";" + "Program description" + ";" + ";" + "Produced" + ";" + "Total Production"): fs.Close 'chiudi il file Dim objFileSystem, fs, fso, a, f, objFileSize, operatore, blank, trigger, strNomeFile 'dichiara le variabili trigger=0 SmartTags("DB_HMI_Variabili_Globali.iarchivio1")=trigger 'azzera il trigger di memorizzazione report operatore = SmartTags("nome_login_record") 'aggiorna il nome dell'operatore 'costruzione dell'header se il file non esiste strNomeFile= "C:\Storage Card\production.xls" ' Verifica che il file esista If S_blnEsisteFile(strNomeFile) = True Then 'il file esiste Set objFileSystem = CreateObject("Scripting.FileSystemObject") Set objFileSize = objFileSystem.GetFile ("C:\Storage Card\production.xls") f = objFileSize.Size 'lettura delle dimensioni del file Else ' il file non esiste Call Header()'prepara header End If Set fso = CreateObject("Scripting.FileSystemObject") Set fs = fso.OpenTextFile ("C:\Storage Card\production.xls",8) 'apre il file e scrive alla fine file (comando=8) ascii default blank=" " fs.WriteLine ( " "+ CStr (Date)+ ";" + CStr(Time) + ";" + operatore + ";" + CStr(SmartTags("FC_hmi.u64minuti")) + ";" + CStr(SmartTags("DB_HMI_Variabili_Globali.nomeprogramma"))+ ";" + CStr(SmartTags("DB_HMI_Variabili_Globali.i32totalesequenza1")) + ";" + CStr(SmartTags("DB_HMI_Variabili_Globali.i32totaleproduzione"))+ " "): fs.Close 'chiudi il file Call ShowSystemAlarm("Prodution.xls Report di produzione aggiornato correttamente") If (f <= 10150000) Then 'controlla la lunghezza prima di scrivere Else 'rinomina il file nella cartella C:\Storage Card\ e non perdi il record!!!!!!!!!! Call S_rename_1 End If Questo è un esempio di come gestire un report di produzione. Il primo rinomina il file S_Rename , il secondo è la creazione del file con intestazione Header, il terzo compila il file. più facile di così .......
Giuseppe Signorella Inserita: 30 gennaio 2015 Autore Segnala Inserita: 30 gennaio 2015 (modificato) Grazie per l'esempio. Ma fammi capire meglio: il secondo è la creazione del file con intestazione Header, Eseguo lo script e genero il file, Il primo rinomina il file S_Rename Perchè rinominarlo? se posso crearne un'altro con un nuovo nome? E' solo un esempio nel caso volessi rinominare un file esistente? Grazie Modificato: 30 gennaio 2015 da Giuseppe Signorella
Giuseppe Signorella Inserita: 30 gennaio 2015 Autore Segnala Inserita: 30 gennaio 2015 Ora ho compreso, Prima viene creato il file sempre con lo stesso nome,poi viene aperto e scritto, ed infine viene rinominato utilizzando la data di creazione.
pigroplc Inserita: 30 gennaio 2015 Segnala Inserita: 30 gennaio 2015 Si, in genere preferisco frammentare i files, verificata una dimensione che mi sono dato come massimo, rinomino il file in modo da avere una serie di files che poi ogni xxx mesi si autocancellano, così prevengo anche la più remota ipotesi di riempimento dell'HD. Lo script Header non fa altro che creare la prima riga con le descrizoni che mi interessano e se lo vedi su Excel vedi il significato delle tabelle. Il trigger che fa partire lo script principale è su evento ed è settato in lettura continua. Se il valore del tag è maggiore di 1 io eseguo lo script. Da Simotion invece il tag viene settato = 2 quando il ciclo automatico termina il ciclo, quindi esegue l'incremento dei contatori. Cerca di aggiornare sempre PRIMA i contatori, e quando sei sicuro che il controllore ha acquisito il valore aggiornato lanci lo script. Io utilizzo di solito un timer di un paio di secondi.
Giuseppe Signorella Inserita: 30 gennaio 2015 Autore Segnala Inserita: 30 gennaio 2015 Ho testato il tuo script e funziona bene. L'unico inconveniente che ho riscontrato è stato l'allineamento. Tutti i dati della medesima riga vengono inseriti in una sola cella. Sarà per via del formato dell'estensione che è xsl e per il fattore di separazione dei dati. (la virgola). Alla fine ho utilizzato questo metodo: Riporto per semplicità solo parte del codice: 'Dichiarazione delle variabili Dim oExcel Dim oBook Dim oSheet Dim today_string Dim File_name Set oExcel = CreateObject("Excel.Application") Set oBook = oExcel.Workbooks.Add 'Assemblo la data per utilizzarla come parte del nome del file today_string = CStr(Year(Now))&"_"& CStr(Month(Now))&"_"& CStr(Day(Now)) Set oSheet = oBook.Worksheets(1) 'Stampo un testo a mio piacimento nella cella n° A1 oSheet.Range("A1").Value = "Cliente" 'Stampo nella cella A2 un valore contenuto all'interno di una variabile utilizzata nel progetto . . ' Evidenzio in grassetto il valore contenuto in un certo numero di caselle oSheet.Range("A1:A11").Font.Bold = True . . . 'Salvo il tutto in un file di formato xlsx 'Il file prende il nome del cliente che ho lavorato con la data precedentemente rilevata oBook.SaveAs "C:\Storage\" & today_string & "_" & HmiRuntime.SmartTags("Generico_Ricetta_Name client")& ".xlsx" oExcel.Quit End Sub Molto semplice e funzionale. Sopratutto perchè viene salvato con il formato xlsx che è quello utilizzato da excel 2010-2013. L'allineamento è perfetto in quanto si scrive direttamente nella casella selezionata. Se il file esiste, o qualche cosa non va a buon fine è proprio la classica finestra di windows ad informarci che il file esiste. Volendo anche il percorso con cui salvare il file può essere selezionato mediante variabile.
pigroplc Inserita: 30 gennaio 2015 Segnala Inserita: 30 gennaio 2015 L'inconveniente di avere tutto in una cella l'avevo risolto selezionando il punto e virgola come separatore delle celle, in fase di apertura. Non sapendo esattamente quanto tu dovevi fare, ho messo quanto era funzionante nei miei applicativi come esempio. Se uno invece vuole comporre un file excel esistono degli esempi sul sito Siemens che si rifacevano ancora a Protool che facilmente potevano essere migrati su WinCC Flex, quindi adesso al tuo Advanced. A suo tempo avevo fatto un po' di esempi qualora mi fossero serviti. Tutta roba relegata in qualche cartella inutilizzata perché nessuno me la chiese.
tommyengeneer Inserita: 19 agosto 2015 Segnala Inserita: 19 agosto 2015 scusate, volevo capire anche io come risolvere il mio problema. Quello che voglio fare io è aprire un file excel e tramite un tasto di start iniziare a registrare le variabili I/O del PLC S7-300 Siemens ed interrompere la stessa tramite il tasto Stop. Qualcuno può suggerirmi come fare? Grazie Mille
pigroplc Inserita: 24 agosto 2015 Segnala Inserita: 24 agosto 2015 (modificato) Excel_2008.zip Ho allegato il file di prove che avevo fatto a suo tempo ovviamente depurato di altre cose a me riconducibili.C'è ovviamente da lavorarci su, prende spunto da un esempio Siemens sopra menzionato. Modificato: 24 agosto 2015 da pigroplc
simonegr Inserita: 20 febbraio 2020 Segnala Inserita: 20 febbraio 2020 Buongiorno, Sto guardando gli script che ha creato per fare un report di produzione su Excel, non sono molto esperto di programmazione Visual Basic per winccadvaced, ho fatto copia e incolla degli script che lei pubblicò su PLC Forum e li ho chiamati: Header S_Rename_1 E l'altro con un nome generico, però ho un errore nella riga If S_blnEsisteFile(strNomeFile) = True Then 'il file esiste dove il S_blnEsisteFile non so cosa sia mi può aiutare ? Grazie mille
pigroplc Inserita: 21 febbraio 2020 Segnala Inserita: 21 febbraio 2020 (modificato) 15 ore fa, simonegr ha scritto: opia e incolla degli script che lei pubblicò su PLC Forum darsi del tu nel forum come prima regola.... 😃 15 ore fa, simonegr ha scritto: riga If S_blnEsisteFile(strNomeFile) = True è lo script che verifica se il file esiste o no. Siccome la sintassi cambia col tipo di windows devi stare molto attento a errori di runtime come prima cosa. quindi: 1) che pannello hai 2) se hai un pannello con WinCE puoi anche sostituire la call di un altro script col seguente codice: ' Verifica che il file esista Set fs = CreateObject("FileCtl.File") fs.Open "\Storage Card SD\Contaore_text.csv",1 '1=lettura 2= scrittura f=fs.lof fs.Close ' se il file non esiste lo crea e gli scrive zero If f = 0 Then 'il file non esiste fs.Open "\Storage Card SD\Contaore_text.csv",2 '1=lettura 2= scrittura fs.LinePrint 0 'scrivi il campo con zero fs.Close End If in questo caso vado a gestire un contaore indipendentemente da azzeramenti truffaldini/involontari nel PLC per tua cultura ti consiglio di studiare il manuale da scaricare nel link qui sotto: https://support.industry.siemens.com/cs/document/109764540/simatic-wincc-wincc-engineering-v15-–-programming-reference?dti=0&dl=en&lc=it-IT Modificato: 21 febbraio 2020 da pigroplc
simonegr Inserita: 24 febbraio 2020 Segnala Inserita: 24 febbraio 2020 Grazie mille Pigroplc, è mia abitudine non dare del tu, ma ci provo. Io ho un PC con Windows 10 che ha la funzione solamente di visualizzare su un monitor grande i dati di produzione e salvare gli stessi in un file excel
pigroplc Inserita: 24 febbraio 2020 Segnala Inserita: 24 febbraio 2020 1 ora fa, simonegr ha scritto: Io ho un PC con Windows 10 quindi la sintassi che lavora per i pannelli che montano WinCE non fa per te! prova a guardare questa discussione: https://support.industry.siemens.com/tf//ww/en/posts/wincc-advanced-writing-to-excel-with-vbscript/154697?page=0&pageSize=10
Cialtrone Inserita: 24 febbraio 2020 Segnala Inserita: 24 febbraio 2020 Tanto per chiarire: negli archivi si possono scrivere anche stringhe se sono abbinate a messaggi di allarme. Io ho fatto archiviazioni con stringhe creando delle classi di segnalazione apposite e poi archiviando gli allarmi (solo di quella classe). Questo per chi non avesse dimestichezza con gli script.
stressedbyplc Inserita: 27 novembre 2020 Segnala Inserita: 27 novembre 2020 Buongiorno a tutti, leggo spesso i vostri post ma è la prima volta scrivo. Scusate se riprendo la discussione dopo diverso tempo ma ho un problema e non trovo una soluzione o quanto meno uno spunto. Devo archiviare, tramite VBScript, in un file xls o csv tramite un TP700 alcune variabili lette dal PLC e non ho nessun problema fino a quando lo faccio su USB. Quello che non riesco a fare è scrivere su un file in remoto su un PC (o NAS) che richiede il login utente. Come posso nello script dopo aver inserito il path inserire anche il nome utente e la password? Di seguito posto la parte di codice che ho già scritto (Windows 10 Pro; S7-300, TIA V13 SP2). Ringrazio chiunque possa darmi anche solo un suggerimento ... 'Definizione della cartella destinazione FolderWay = "\\192.168.9.213\public\nome_utente\Survey" 'Login per l'accesso alla cartella di rete ???? Set ObjectWay = CreateObject ("Scripting.FileSystemObject") ...
pigroplc Inserita: 27 novembre 2020 Segnala Inserita: 27 novembre 2020 (modificato) è vietato dal regolamento riprendere discussioni vecchie. Dovresti aprire una nuova discussione ********** N.d. M. E sempre vietato accodarsi ad un'altra discussione, cfr. punto "s" del regolamento. Modificato: 27 novembre 2020 da Livio Orsini
Messaggi consigliati