import snap7.client
from snap7.snap7types import *
from snap7.util import *
class DBObject(object):
pass
offsets = { "Bool":2,"Int": 2,"Real":4,"DInt":6,"String":256}
db=\
"""
Temperature Real 0.0
Cold Bool 4.0
RPis_to_Buy Int 6.0
Db_test_String String 8.0
"""
def DBRead(plc,db_num,length,dbitems):
data = plc.read_area(areas['DB'],db_num,0,length)
obj = DBObject()
for item in dbitems:
value = None
offset = int(item['bytebit'].split('.')[0])
if item['datatype']=='Real':
value = get_real(data,offset)
if item['datatype']=='Bool':
bit =int(item['bytebit'].split('.')[1])
value = get_bool(data,offset,bit)
if item['datatype']=='Int':
value = get_int(data, offset)
if item['datatype']=='String':
value = get_string(data, offset)
obj.__setattr__(item['name'], value)
return obj
def get_db_size(array,bytekey,datatypekey):
seq,length = [x[bytekey] for x in array],[x[datatypekey] for x in array]
idx = seq.index(max(seq))
lastByte = int(max(seq).split('.')[0])+(offsets[length[idx]])
return lastByte
if __name__ == "__main__":
plc = snap7.client.Client()
plc.connect('10.10.55.109',0,0)
itemlist = filter(lambda a: a!='',db.split('\n'))
deliminator='\t'
items = [
{
"name":x.split(deliminator)[0],
"datatype":x.split(deliminator)[1],
"bytebit":x.split(deliminator)[2]
} for x in itemlist
]
#get length of datablock
length = get_db_size(items,'bytebit','datatype')
meh = DBRead(plc,10,length,items)
print """
Cold:\t\t\t{}
Tempeature:\t\t{}
RPis_to_Buy:\t{}
Db_test_String:\t{}
""".format(meh.Cold,meh.Temperature,meh.RPis_to_Buy,meh.Db_test_String)
plc.disconnect();
Monday, February 29, 2016
Raspberry Pi - Python Snap7 - Mapping and Reading Datablocks
Wednesday, February 3, 2016
Python Snap7 S7-1200 Simple Reading/Writing Memory Example
import snap7.client as c
from snap7.util import *
from snap7.snap7types import *
def ReadMemory(plc,byte,bit,datatype):
result = plc.read_area(areas['MK'],0,byte,datatype)
if datatype==S7WLBit:
return get_bool(result,0,bit)
elif datatype==S7WLByte or datatype==S7WLWord:
return get_int(result,0)
elif datatype==S7WLReal:
return get_real(result,0)
elif datatype==S7WLDWord:
return get_dword(result,0)
else:
return None
def WriteMemory(plc,byte,bit,datatype,value):
result = plc.read_area(areas['MK'],0,byte,datatype)
if datatype==S7WLBit:
set_bool(result,0,bit,value)
elif datatype==S7WLByte or datatype==S7WLWord:
set_int(result,0,value)
elif datatype==S7WLReal:
set_real(result,0,value)
elif datatype==S7WLDWord:
set_dword(result,0,value)
plc.write_area(areas["MK"],0,byte,result)
if __name__=="__main__":
plc = c.Client()
plc.connect('10.10.54.2',0,1)
print ReadMemory(plc,420,0,S7WLReal)
WriteMemory(plc,420,0,S7WLReal,3.141592)
print ReadMemory(plc,420,0,S7WLReal)
#DONE!!
Tuesday, February 2, 2016
25+ Raspberry Compatible 1-Wire Host Boards/Hats
| Image | Name / Link | Channels (Buses) | Extras | Price | Price per channel |
|---|---|---|---|---|---|
| 1-Wire Driver DS2482-800 |
8 ch. | --- | £21.05 | £2.63 / ch | |
![]() |
1-Wire Interface Module |
1 ch. | --- | £5.93 | £5.93 / ch |
| R-Pi i2c 1-Wire OWFS Expansion Module | 1 ch. | --- | £17.99 | £17.99 / ch | |
| I2C counter / 1-wire board |
8 ch. | 6x 16 bit Counter inputs | £69.99 | £8.75 / ch | |
| Com Pi | 1 ch. | RS232 Port | £12.99 | £12.99 / ch | |
![]() |
1 Wire Pi Plus | 1 ch. | --- | £12 | £12 / ch |
![]() |
RP1 1-Wire GPIO Host Adapter | 1 ch. | --- | £7.95 | £7.95 / ch |
| RPI2 1-Wire Host Adapter | 1 ch. | --- | £14 | £13.95 / ch | |
| RPI3 v1 1-Wire Host Adapter | 8 ch. | RTC | £33 | £4.12 / ch | |
![]() |
RPI3 v2 1-Wire Host Adapter | 8 ch. | RTC | £33 | £4.12 / ch |
![]() |
AbioWire+ | 17 ch. | --- | £42 | £5.25 / ch |
![]() |
1-Wire Mini Host | 8 ch. | --- | £15.26 | £1.90 / ch |
![]() |
1-Wire Automation System | 8 ch. | expansion slot | £114 | £14.25 / ch |
| Raspberry Pi -9 Channel 1-Wire Board | 9 ch. | RTC | £33 | £3.66 / ch | |
![]() |
IoT-1Wire-1 module Board | 8 ch. | --- | £34 | £4.25 / ch |
![]() |
IoT-1Wire-1 module Board | 1 ch. (5 ports) | --- | £24 | £24 / ch |
![]() |
4 USB Hub & I2C AD/DA - 1-Wire Board | 1 ch. | RTC, 10bit ADC, 8bit DAC, 4 USB Hub | £52 | £52 / ch |
![]() |
7 USB Hub & I2C AD/DA - 1-Wire Board | 1 ch. | 10bit ADC / 8bit DAC, 7 USB Hub | £58 | £58 / ch |
![]() |
Step Motor & I2C 1-Wire Board | 1 ch. | 8 ch output / step motor output | £21 | £21 / ch |
![]() |
One-Wire 17 Channels | 17 ch. | --- | £46.99 | £2.76 / ch |
![]() |
USB to One Wire converter | 1 ch. | --- | $24.60 | $24.60 / ch |
![]() |
S4: USB / 1-Wire Interface Card | 1 ch. | --- | €39 | €39 / ch |
![]() |
USB to 1-Wire RJ11 | 1 ch. | --- | £26 | £26 / ch |
![]() |
I2C 1 Wire Click | 8 ch. | --- | £19.45 | £2.43 / ch |
| UART to 1 Wire Adapter (Retired) | 1 ch. | --- | --- | --- | |
![]() |
UniPi Expansion Board | 1 ch. | Relays, Inputs, Outputs, Analog In/Out 0-10v | $134 | $134 / ch |
| PIGATOR Onewire | 1 ch. | RTC, uplink header for expansion | £60 | £60 / ch | |
Subscribe to:
Comments (Atom)























