Passaggio eseguibile tra due PC

di il
2 risposte

Passaggio eseguibile tra due PC

Buongiorno a tutti,
Sono un programmatore PLC ed esperienza pari a zero con Python. Per un progetto di lavoro ho dovuto scrivere un codice Python per passare la posizione di una ruota filtri (dispositivo HID) ad un PLC Siemens della serie 1200. Lavorando sul PC di sviluppo ( Windows 11 x64 ) su IDE PyCharm Community Edition (2023.1.4) con interprete Python 3.10.7 ho scritto, collaudato e convertito il codice in formato.exe utilizzando "pyinstaller --onefile".
Fin qui tutto ok, ma quando passo l'exe sul PC del cliente (Windows 11 x64, IDE PyCharm Community Edition (2023.1.4), Python 3.10.7) mi ritrovo il codice che gira benissimo in IDE ma l'eseguibile non funziona, come mai?

Utilizzo all'interno dello script le librerie snap7.dll e HID.

Grazie in anticipo.


import hid
import snap7
import struct
import logging

# Configura il logger
logging.basicConfig(filename='log.txt', level=logging.DEBUG)

plc = snap7.client.Client(lib_location="C:\SIF\Smoke_Analysis\TEMP\FilterWheel\Sorgenti\dll\snap7.dll")
plc.connect('192.168.0.1', 0, 1)
state = plc.get_cpu_state()
logging.debug(f'Stato PLC: {state}')

Device = hid.Device(vid=0x1278, pid=0x0920)

start_address = 100
length = 1

try:
    if Device:
        logging.debug("Ruota Filtri Connessa.")
    else:
        logging.warning("Ruota Filtri Disconnessa.")

    previous_data = None

    while True:
        data = Device.read(1)
        if data:
            if data[0] != previous_data:
                logging.info("Filtro Selezionato: %s", data[0])
                previous_data = data[0]

                def writeMemory(start_address, length, data):
                    try:
                        plc.mb_write(start_address, length, bytearray(struct.pack('B', data[0])))
                        logging.debug("MB100: %s", data[0])
                    except Exception as e:
                        logging.error(f"Errore durante la scrittura in memoria: {str(e)}")

                writeMemory(start_address, length, data)

except Exception as e:
    logging.error(f"Si è verificato un errore generale: {str(e)}")


finally:
    Device.close()

2 Risposte

  • Re: Passaggio eseguibile tra due PC

    Oltre a provare a trasportare l'exe dal pc di sviluppo a quello del cliente hai provato a compilarlo sul pc del cliente? 

    non và e basta oppure di torna qualche messaggio?

  • Re: Passaggio eseguibile tra due PC

    Un programma non è fatto di solo exe…

    Controlla se nella macchina ci sono tutti i files necessari e nelle posizioni opportune.

    28/03/2024 - don993 ha scritto:


    plc.connect('192.168.0.1', 0, 1) state = plc.get_cpu_state() logging.debug(f'Stato PLC: {state}') Device = hid.Device(vid=0x1278, pid=0x0920)

    Io tutta sta roba la infilerei su un file di configurazione crittato e li passerei come variabili all'avvio del programma.

    Se cambia l'ip che fai? Riapri il programma e cambi l'ip? E se cambia qualcos'altro?

Devi accedere o registrarti per scrivere nel forum
2 risposte