I am using FRAM memory to store values in and i have just noticed that i have not got any error trapping in that module, i am also using a 3rd party module, not sure if this could be a problem but it looks straight forward enough, below that i have also included my code for reading and writing to the FRAM, just started to add error trapping, not completed write section yet(apologies for any poor programming but i am learning Python)
#!/usr/bin/env python
# SDL_Pi_FRAM.py Python Driver Code
# SwitchDoc Labs 02/16/2014
# V 1.2
from datetime import datetime
import time
import smbus
class SDL_Pi_FRAM():
###########################
# SDL_Pi_FRAM Code
###########################
def __init__(self, twi=1, addr=0x50):
self._bus = smbus.SMBus(twi)
self._addr = addr
def write8(self, address, data):
#print "addr =0x%x address = 0x%x data = 0x%x " % (self._addr, address, data)
self._bus.write_i2c_block_data(self._addr,address>>8, [address%256, data])
def read8(self, address):
self._bus.write_i2c_block_data(self._addr,address>>8, [address%256])
returndata = self._bus.read_byte(self._addr) # this will read at the current address pointer, which we on the previous line
#print "addr = 0x%x address = 0x%x %i returndata = 0x%x " % (self._addr, address, address, returndata)
return returndata
import sys
import SDL_Pi_FRAM
import glob as gn
import time
import datetime
import logging
logging.basicConfig(level=logging.ERROR,
format='%(asctime)s %(levelname)s %(message)s',
filename='/home/pi/share/Data_Collection/errlog.log',
filemode='a')
def W():
def MEMWrite (x,y,z):
for q in range (y,z): #clear slot first
fram.write8(q, 0)
for letter in str(x):
fram.write8(y, ord(letter))
y+=1
#print(time.time())
fram = SDL_Pi_FRAM.SDL_Pi_FRAM(addr = 0x50)
try:
MEMWrite(gn.batchA,0,9)
except BaseException as e:
logging.error("FRAM Memory write error for batchA " + str(e))
MEMWrite(gn.batchB,10,19)
MEMWrite(gn.totalA,20,29)
MEMWrite(gn.totalB,30,39)
MEMWrite(gn.Job,40,49)
MEMWrite(gn.TargetCycle,50,59)
MEMWrite(gn.MachineName,60,69)
MEMWrite(gn.ShiftCyclesInAuto,70,79)
MEMWrite(gn.Shift,80,89)
MEMWrite(gn.QtyShiftMade,90,99)
MEMWrite(gn.ShiftDateTime,100,119)
MEMWrite(gn.PartCode,120,169)
MEMWrite(gn.myStatus,170,179)
#print(time.time())
def R():
def MEMRead (y,z): #value, start memory, end memory
myStr=""
for a in range(y,z):
v=chr(fram.read8(a))
if ord(v)!=0: #if char is not "_" as this is used to clear locations
myStr+=v
return myStr
fram = SDL_Pi_FRAM.SDL_Pi_FRAM(addr = 0x50)
try:
gn.batchA=int(MEMRead(0,9))
except ValueError:
gn.batchA=0
logging.error("FRAM Memory read error for BatchA " + str(ValueError))
try:
gn.batchB=int(MEMRead(10,19))
except ValueError:
gn.batchB=0
logging.error("FRAM Memory read error for BatchB " + str(ValueError))
try:
gn.totalA=int(MEMRead(20,29))
except ValueError:
gn.totalA=0
logging.error("FRAM Memory read error for totalA " + str(ValueError))
try:
gn.totalB=int(MEMRead(30,39))
except ValueError:
gn.totalB=0
logging.error("FRAM Memory read error for totalB " + str(ValueError))
try:
gn.Job=MEMRead(40,49)
except ValueError:
gn.Job='000000'
logging.error("FRAM Memory read error for Job " + str(ValueError))
try:
gn.TargetCycle=MEMRead(50,59)
except ValueError:
gn.TargetCycle=0.0
logging.error("FRAM Memory read error for TargetCycle " + str(ValueError))
try:
gn.MachineName=MEMRead(60,69)
except ValueError:
gn.MachineName='Not Set'
logging.error("FRAM Memory read error for MachineName " + str(ValueError))
try:
gn.ShiftCyclesInAuto=MEMRead(70,79)
except ValueError:
gn.ShiftCyclesInAuto=0
logging.error("FRAM Memory read error for ShiftCyclesInAuto " + str(ValueError))
try:
gn.Shift=MEMRead(80,89)
except ValueError:
gn.Shift='?'
logging.error("FRAM Memory read error for Shift " + str(ValueError))
try:
gn.QtyShiftMade=MEMRead(90,99)
except ValueError:
gn.QtyShiftMade=0
logging.error("FRAM Memory read error for QtyShiftMade " + str(ValueError))
try:
gn.ShiftDateTime=MEMRead(100,119)
except ValueError:
gn.ShiftDateTime=str(datetime.date.today())
logging.error("FRAM Memory read error for ShiftDateTime " + str(ValueError))
try:
gn.PartCode=MEMRead(120,169)
if gn.PartCode=='':
gn.PartCode='No Part Code Set'
except ValueError:
gn.PartCode='No PartCode Set'
logging.error("FRAM Memory read error for PartCode " + str(ValueError))
try:
gn.myStatus=MEMRead(170,179)
if gn.myStatus=='':
gn.myStatus='7'
except ValueError:
gn.myStatus='7'
logging.error("FRAM Memory read error for Status " + str(ValueError))