#!/usr/bin/python3 __author__ = "Michael Rest" __date__ = "1 June 2009" __email__ = "michi@rosstein.de" __version__ = "$Revision: 1.0 $"[11:-2] import pydave3 from davedefs import * from DB_MariaDB import DBMaria from datetime import datetime from time import sleep from select import select import sys import os import string import signal params = ['DGBM8_12-M', 'DGBM8_12-D', 'DGBM8_12-W', 'DGBM8_12-T', 'DGBM8_34-M', 'DGBM8_34-D', 'DGBM8_34-W', 'DGBM8_34-T', 'M6-F', 'M6-S', 'M8-F', 'M8-S', 'Kombimutter-M', 'Kombimutter-D', 'Kombimutter-W', 'Kombimutter-T', 'Blindniet-F', 'Blindniet-S'] def loglimits (msg): """ log relevant messages in logfile and print if loglevel is reached """ file = open ("/var/log/bde/limits.log", "a") dt = datetime.now () file.write ("%4d-%02d-%02d %02d:%02d:%02d.%06d: " %(dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.microsecond)), file.write (msg + "\n") file.close () def pydavecon (): #for _id, _name, _proto, _addr, _port, _mpi, _rack, _slot in [[5,'H6L1', 'ISO_TCP', '192.168.100.73', 102, 3, 0, 4]]: _proto, _addr, _port, _mpi, _rack, _slot, _rsid1, _rsid2, _rrack, _rslot, _rmpi = ['ISO_TCP', '192.168.6.80', 102, 0, 0, 2, 0, 0, 0, 0, 0] daveinst = pydave3 pydave3.OpenSocket (_proto, _addr, _port, _mpi, _rack, _slot, _rsid1, _rsid2, _rrack, _rslot, _rmpi) #routingSubnetFirst, routingSubnetSecond, routingRack, routingSlot return daveinst def getlimits (daveinst): retval = {} param = 0 for i in range (0, 12): offset = i * 4 temp = pydave3.ReadBytes (daveAreas["DB"], 450, offset, 4) valmin = (temp [0] << 8) + temp [1] valmax = (temp [2] << 8) + temp [3] retval [params[param]] = [valmin, valmax, 450, offset] param += 1 for i in range (0, 6): offset = i * 4 temp = pydave3.ReadBytes (daveAreas["DB"], 451, offset, 4) valmin = (temp [0] << 8) + temp [1] valmax = (temp [2] << 8) + temp [3] retval [params[param]] = [valmin, valmax, 451, offset] param += 1 return retval def setlimit (daveinst, dbnr, offset, minval, maxval): val = [minval >> 8, minval & 255, maxval >> 8, maxval & 255] pydave3.WriteBytes (daveAreas["DB"], dbnr, offset, 4, val) def disconnect (daveinst): daveinst.DisconnectPLC () if __name__ == '__main__': dbconn = DBMaria ('bde', 'bde', 'eczema-orleans-queuing-surplus', '/tmp/talog.sql') dblimits = dbconn.getactuallimits () try: daveinst = pydavecon () plclimits = getlimits (daveinst) except: exit (0) # setlimit (daveinst, dbnr, offset, dbmin, dbmax) for param in plclimits: dbmin, dbmax = dblimits [param] plcmin, plcmax, dbnr, offset = plclimits [param] #print ("Parameter: %s, DB-%d Offset %d" % (param, dbnr, offset)) #print ("DB: %d - %d" % (dbmin, dbmax)) #print ("PLC %d - %d" % (plcmin, plcmax)) if (dbmin != plcmin or dbmax != plcmax): #print ("Limits different") loglimits ("New Limits from DB for %s: Min: %d Max: %d" % (param, dbmin, dbmax)) setlimit (daveinst, dbnr, offset, dbmin, dbmax) disconnect (daveinst)