Vai al contenuto
PLC Forum


Snap 7 Python Logo siemens


labri95

Messaggi consigliati


devi fare in modo che la tua applicazione sia libera cioè che puoi gestire pulsanti e tutto il resto e mandare messaggi al logo e questo lo puoi fare nel main thread che viene lanciato quando parte l'applicazione.Ogni programma crea un processo ed ogni processo ha un thread principale .

Poi con un thread secondario gestisci la lettura in modo asincrono per evitare di bloccare l'applicazione.Metti che non arriva niente si blocca tutto per cui thread per la lettura.

Poi c'e' un altro problema , almeno in C#, che in realtà no ne' un problema di linguaggio ma di gestione dei threads. i controlli che sui , ossia pulsanti , finestrelle etc , sono create nel thread principale e non possono essere usate da altri thread.Per cui devi creare un delegato legato ad un evento , questo sempre in .NET , ma anche in java di JVM o Dalvik machine in android. Stessa cosa in C++ .Adesso io python lo uso raramente, è potente e molto utile in campo scientifico etc però lavoro prevalentemente in C/C++, C# e Java su linux o android. Se mi mandi in pvt la tua mail di mando degli appunti che trattano il multithreading in python .

comunque meglio python 50 miliardi di volte del basic o VB 

 

Link al commento
Condividi su altri siti

  • 3 weeks later...

non riesco a capire dove sbaglio. 

sto cercando di monitorare un uscita attraverso il Thread di python

quando avvio il programma  tipo questo:

 

class Valore(Thread):    
    def __init__(self):        
        Thread.__init__ (self)
        self.daemon = True
        self.start()        
    def run(self):
        while True:            
            plc=snap7.client.Client()
            plc.connect("192.168.1.102",0,1)
            area = 0x82                                   
            start = 0

            length = 1                                     
            bit = 1                                        
            data = plc.read_area(area,0,start,length)             
            plc.read_area(area,0,start,length)
            print ("read1Q1:",get_bool(data,0,bit))
            time.sleep(1)         
        
Valore()
 

riesco a fare circa 10 letture dopo di che ottengo questo tipo di errore:

 

ERROR:snap7.common:b' ISO : An error occurred during recv TCP : Connection timed out'
Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python3.4/threading.py", line 920, in _bootstrap_inner
    self.run()
  File "/home/pi/salav3.py", line 45, in run
    plc.connect("192.168.1.102",0,1)
  File "/usr/local/lib/python3.4/dist-packages/snap7/client.py", line 25, in f
    check_error(code, context="client")
  File "/usr/local/lib/python3.4/dist-packages/snap7/common.py", line 65, in check_error
    raise Snap7Exception(error)
snap7.snap7exceptions.Snap7Exception: b' ISO : An error occurred during recv TCP : Connection timed out'

Link al commento
Condividi su altri siti

  • 1 year later...
  • Livio Orsini locked this discussione
Ospite
Questa discussione è chiusa alle risposte.
×
×
  • Crea nuovo/a...