Vai al contenuto
PLC Forum


SNAP7 PYTHON vs SIEMENS LOGO! 8.2 : come individuare le aree di memoria dei vari ingressi attivi su software PLC??


Rocky99

Messaggi consigliati

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

 

image.png.7f8371e651df7f7c7dd228d0ca504a80.png

 

 

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

 

image.png.208ce15ba058d350bc89a9b93cf1e7fe.png

 

 

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?

 

image.png.7dcfaab2bc71bd59f6fe8c88e86c38b5.png

Confido in voi tutti per un aiuto

Intanto grazie

 

 


 

client_2_output.png

Link al commento
Condividi su altri siti


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

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:

image.png.da95a928e34fcce90f7f8b1e46659a6b.png

 

 

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

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