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();
Pages
▼
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 | |