Spand Inserito: 13 settembre Segnala Share Inserito: 13 settembre Buongiono, Ho capito che questa cosa non si può fare con Logo, ma non ho capito se si può fare con un 1200/1500, io creo il mio file che ora stò salvando sulla memory card, ma come fare per esportarlo in automatico fuori dalla macchina se non ho un pannello comfort? Con la funzione webserver io vedo il file e rieco a copiarlo manualmente, ma se volessi automatizzare la cosa? Nemmeno in FTP? Grazie Link al commento Condividi su altri siti More sharing options...
Mister_X_ Inserita: 13 settembre Segnala Share Inserita: 13 settembre 28 minutes ago, Spand said: Buongiono, Ho capito che questa cosa non si può fare con Logo, ma non ho capito se si può fare con un 1200/1500, io creo il mio file che ora stò salvando sulla memory card, ma come fare per esportarlo in automatico fuori dalla macchina se non ho un pannello comfort? Con la funzione webserver io vedo il file e rieco a copiarlo manualmente, ma se volessi automatizzare la cosa? Nemmeno in FTP? Grazie A te serviva un file in excel? Perche avevo da un cliente la tua stessa situazione (impianto con plc 1214) e un pc a bordo linea in cui tramite webserver ogni giorno una persona andava a salvarsi il file creato. Ho implementato uno script in Python (installato sul pc che già esisteva) che legge direttamente le variabili dal plc e crea file Excel. Poi loro in qualche modo se lo inviano e lo utilizzano in ufficio. Link al commento Condividi su altri siti More sharing options...
Spand Inserita: 17 settembre Autore Segnala Share Inserita: 17 settembre Buongiorno, Beh si excel o csv andrebbero benissimo, è possibile averlo e poterlo configurare? grazie Link al commento Condividi su altri siti More sharing options...
Mister_X_ Inserita: 18 settembre Segnala Share Inserita: 18 settembre (modificato) 17 hours ago, Spand said: Buongiorno, Beh si excel o csv andrebbero benissimo, è possibile averlo e poterlo configurare? grazie Ecco il codice, te lo allego qui per semplicità, ci sono da cambiare alcuni dati per adattarli alla tua applicazione (ci sono i commenti affianco) Ora che lo riguardo, io avevo aggiunto anche un ulteriore controllo (che forse a te non serve), praticamente leggevo un dato string e volevo che la casella venisse cancellata per intero quando la variabile cambiava (In piu avevo aggiunto al nome del file la data e l'ora) ######################################### import snap7 from snap7.util import get_int, get_bool import openpyxl import time def read_int_from_db(client, db_number, start_address): # Lettura dei dati dal DB data = client.db_read(db_number, start_address, 2) # Un int è lungo 2 byte # Conversione dei dati letti in un intero value = get_int(data, 0) return value def read_bool_from_db(client, db_number, start_address): # Lettura dei dati dal DB data = client.db_read(db_number, start_address, 1) # Un bool è lungo 1 byte # Conversione dei dati letti in un booleano value = get_bool(data, 0, 0) return value def read_string_from_db(client, db_number, start_address, max_length): # Lettura dei dati dal DB data = client.db_read(db_number, start_address, max_length) # Lunghezza massima della stringa # Conversione dei dati letti in una stringa, rimuovendo i caratteri null terminali value = data.rstrip(b'\x00').decode(errors='replace') # Rimuove i caratteri null terminali e gestisce errori di decodifica # print(f"Stringa letta dal PLC: {value}") # Stampa di debug return value def clean_string(input_string): # Rimuove i caratteri non stampabili e i caratteri di controllo cleaned_string = ''.join(char for char in input_string if char.isprintable()) return cleaned_string def sample_values(plc_ip, rack, slot, db_number, start_address, string_start_address, max_string_length, start_address_start, start_address_stop, sample_interval, duration, excel_file): # Creazione del client client = snap7.client.Client() client.connect(plc_ip, rack, slot) # Creazione di un nuovo file Excel workbook = openpyxl.Workbook() sheet = workbook.active sheet.title = "Campionamenti" sheet.append(["Timestamp", "Valore", "Stringa"]) start_time = time.time() while (time.time() - start_time) < duration: # Leggere i dati dal PLC value = read_int_from_db(client, db_number, start_address) string_value = read_string_from_db(client, db_number, string_start_address, max_string_length) timestamp = time.strftime("%Y-%m-%d %H:%M:%S") # Pulizia della stringa cleaned_string_value = clean_string(string_value) # Aggiungere il valore e il timestamp al foglio di lavoro sheet.append([timestamp, value, cleaned_string_value]) # Aspettare l'intervallo di campionamento time.sleep(sample_interval) # Salvare il file Excel workbook.save(excel_file) # Disconnessione dal PLC client.disconnect() # Parametri di esempio plc_ip = '192.168.x.x' # IP del PLC rack = 0 # Rack del PLC slot = 1 # Slot del PLC db_number = 2 # Numero del DB da cui leggere start_address = 0 # Indirizzo di partenza all'interno del DB start_address_start = 2 # Indirizzo della variabile di start sampling nel DB start_address_stop = 3 # Indirizzo della variabile di stop sampling nel DB string_start_address = 10 # Indirizzo di partenza per la stringa nel DB max_string_length = 20 # Lunghezza massima della stringa nel DB sample_interval = 1 # Intervallo di campionamento in secondi duration = 10 # Durata del campionamento in secondi excel_file_template = 'C:/Users/xxx/Desktop/test/campionamenti_{}_{}.xlsx' # Template del nome del file Excel # Eseguire il campionamento in un ciclo continuo run_counter = 1 client = snap7.client.Client() client.connect(plc_ip, rack, slot) try: while True: start_sampling = read_bool_from_db(client, db_number, start_address_start) stop_sampling = read_bool_from_db(client, db_number, start_address_stop) if start_sampling and not stop_sampling: # Aggiungere timestamp e contatore al nome del file per renderlo unico timestamp = time.strftime("%Y%m%d_%H%M") #%S excel_file = excel_file_template.format(timestamp, run_counter) print(f"Salvataggio del file: {excel_file}") # Stampa di debug per verificare il nome del file sample_values(plc_ip, rack, slot, db_number, start_address, string_start_address, max_string_length, start_address_start, start_address_stop, sample_interval, duration, excel_file) print(f"Campionamento {run_counter} completato. I dati sono stati salvati in {excel_file}") run_counter += 1 # Puoi aggiungere una pausa tra un campionamento e l'altro se necessario time.sleep(5) # Pausa di 5 secondi tra un campionamento e l'altro (opzionale) elif stop_sampling: print("Campionamento fermato.") time.sleep(1) # Attendere prima di verificare nuovamente le variabili finally: client.disconnect() Modificato: 18 settembre da Mister_X_ Link al commento Condividi su altri siti More sharing options...
Spand Inserita: 18 settembre Autore Segnala Share Inserita: 18 settembre Grazie Mister_X_ Se non capisco male però tu qui vai a fare una lettura direttamente in una DB del PLC, io invece vorrei lasciare la funzione datalog sul plc che mi crea il file CSV, poi una volta al giorno o alla settimana andare a copiare questi file dalla memory card del plc in una cartella di rete di un mio server aziendale. Non capisco se ci sono delle possibilità di manipolare questi file creati lato PLC o se lato server si può creare un sw che li và a prendere. Grazie delle risposte Link al commento Condividi su altri siti More sharing options...
Mister_X_ Inserita: 18 settembre Segnala Share Inserita: 18 settembre 14 minutes ago, Spand said: Grazie Mister_X_ Se non capisco male però tu qui vai a fare una lettura direttamente in una DB del PLC, io invece vorrei lasciare la funzione datalog sul plc che mi crea il file CSV, poi una volta al giorno o alla settimana andare a copiare questi file dalla memory card del plc in una cartella di rete di un mio server aziendale. Non capisco se ci sono delle possibilità di manipolare questi file creati lato PLC o se lato server si può creare un sw che li và a prendere. Grazie delle risposte Perchè vuoi lasciare la gestione del datalog al plc? Link al commento Condividi su altri siti More sharing options...
Spand Inserita: 18 settembre Autore Segnala Share Inserita: 18 settembre Per una questione di divisione dei compiti, la macchina verrà installata in un reparto produttivo e meno cose lascio in carico al reparto IT aziendale e meglio è. Nella mia logica di funzianamento il log deve essere fatto dal plc che gestisce le logiche di funzionamento. Link al commento Condividi su altri siti More sharing options...
Spand Inserita: 20 settembre Autore Segnala Share Inserita: 20 settembre Scusate se rilancio, ma nessuno mi ha ancora dato una risposta definitiva, si possono o no copiare, spostare i file creati con le funzioni datalog sui plc 1200 e 1500? qualcuno ha già fatto esperienza di questo? Grazie a tutti Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora