Rocky99 Inserito: 30 novembre 2019 Segnala Share Inserito: 30 novembre 2019 Ciao a tutti, premetto che sono nuovo di PLC, conosco il python e raspberry ma poco la programmazione dei PLC. Ebbene ho installato la libreria python SNAP7 su raspberry abbastanza facilmente, riesco a connettermi correttamente in TCP da raspberry al plc LOGO! ma non capisco adesso come individuare le AREE di memoria (Q1,WW, ecc. ) su cui lanciare le mie chiamate col python . ESEMPIO : Se lancio questo script python l'output di test ottengo il seguente output su raspberry : #!/usr/bin/env python # -*- coding: utf-8 -*- from time import sleep import snap7 from snap7.util import * plc = snap7.client.Client() plc.connect('192.168.25.810',0,1) area1 = 0x83 # srvAreaMK area2 = 0x82 # srvAreaPA area3 = 0x81 # srvAreaPE start = 0 length = 4 float1=plc.read_area(area1,0,start,length) float2=plc.read_area(area2,0,start,length) float3=plc.read_area(area3,0,start,length) print "Area=MK, [0,4]={}".format(get_real(float1,0)) print "Area=PA, [0,4]={}".format(get_real(float2,0)) print "Area=PE, [0,4]={}".format(get_real(float3,0)) plc.disconnect() Con quest'altro script python l'output è il seguente: #!/usr/bin/env python # -*- coding: utf-8 -*- from time import sleep import snap7 from snap7.util import * import struct import time ##creo l'oggetto PLC plc = snap7.client.Client() #TCP Parametri di connessione plc.connect("192.168.25.810',0,1) area = 0x83 ## Definisco l'area "Q MEMORY" start = 1 ## 0=da Q1 a Q8 | 1=da Q9 a Q16 | 2=da Q17 a Q24 length = 1 ## lunghrezza in byte di lettura+ bit = 0 ## numero del bit che si vuole leggere while True: time.sleep(1.0) data = plc.read_area(area,0,start,length) ## leggo lo stato di Q1 print "Q11:",get_bool(data,0,bit) ## stampo lo stato di Q1 plc.disconnect() NOTE: Preciso che non ho le sorgenti del software caricato sul PLC, come faccio a capire su quali le aree di MEMORIA (bit, ecc.) stanno funzionando i miei ingressi logici (I1,I2,ecc.) sul PLC? Confido in voi tutti per un aiuto Intanto grazie Link al commento Condividi su altri siti More sharing options...
max.bocca Inserita: 1 dicembre 2019 Segnala Share Inserita: 1 dicembre 2019 Secondo me la lettura fatta dallo script è relativa alla Q9, in quanto start=1 puntata il byte 1 se vuoi vedere la Q1 il byte è 0 e il bit è 0, non capisco perché poi con il print non scriva Q1!!! Per fare le prove ti consiglio di avere un logo con un programma noto, io faccio ho sempre usato questo approccio, quando devo restare delle interconnessioni. Link al commento Condividi su altri siti More sharing options...
Rocky99 Inserita: 1 dicembre 2019 Autore Segnala Share Inserita: 1 dicembre 2019 2 ore fa, max.bocca ha scritto: Secondo me la lettura fatta dallo script è relativa alla Q9, in quanto start=1 puntata il byte 1 se vuoi vedere la Q1 il byte è 0 e il bit è 0, non capisco perché poi con il print non scriva Q1!!! Per fare le prove ti consiglio di avere un logo con un programma noto, io faccio ho sempre usato questo approccio, quando devo restare delle interconnessioni. Fatta la modifica, punto su AREA Q1, ma output sempre di tipo "FALSE": #!/usr/bin/env python # -*- coding: utf-8 -*- from time import sleep import snap7 from snap7.util import * import struct import time ##creo l'oggetto PLC plc = snap7.client.Client() #TCP Parametri di connessione plc.connect("192.168.654.875",0,1) ##AREA DI MEMORIA Q## area_Q = 0x82 ## Definisco l'area di MEMORIA del PLC -------> 0x82=Q MEMORY start = 0 ## 0=da Q1 a Q8 | 1=da Q9 a Q16 | 2=da Q17 a Q24 length = 1 ## lunghrezza in byte di lettura+ bit = 0 ## numero del bit che si vuole leggere ##AREA INGRESSI I1,I2,I3, ecc. ## area_I1 = 0x8 ...=???????? ## Definisco l'area "I MEMORY" start = 0 ## 0=da Q1 a Q8 | 1=da Q9 a Q16 | 2=da Q17 a Q24 length = 1 ## lunghrezza in byte di lettura+ bit = 0 ## numero del bit che si vuole leggere while True: time.sleep(1.0) data = plc.read_area(area_Q,0,start,length) ## leggo lo stato di Q1 #data = plc.db_read(db,0,1) print "Q1:",get_bool(data,0,bit) ## stampo lo stato di Q1 #print data plc.disconnect() OUTPUT: Se volessi puntare all'area degli ingressi I1,I2,I3,ecc. su che area di bite mi dovre spostare-dirottare la mia chiamata python??? Qualcuno saprebbe indicare la mappatura delle aree di MEMORIA completa su cui indirizzare le chiamate python relative agli 8 ingressi (I1,I2,I3, ecc.) e alle 4 uscite RELE del LOGO!8?? Ve ne sarei grato grazie 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