Vai al contenuto
PLC Forum


Download su pc di file csv creato con datalog


Spand

Messaggi consigliati

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


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

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: da Mister_X_
Link al commento
Condividi su altri siti

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

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

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

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

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