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()