|
From: <ma...@us...> - 2011-05-08 20:26:17
|
Revision: 323
http://openautomation.svn.sourceforge.net/openautomation/?rev=323&view=rev
Author: mayerch
Date: 2011-05-08 20:26:11 +0000 (Sun, 08 May 2011)
Log Message:
-----------
Updated Logic Server to run the two sample snippets.
The output ("log") is currently still written to stdout, the routing to a live display in the Logic Editor is still missing
Modified Paths:
--------------
PyWireGate/trunk/logic_server/LogicImportJSON.py
PyWireGate/trunk/logic_server/LogicLibrary.py
PyWireGate/trunk/logic_server/LogicServer.py
PyWireGate/trunk/logic_server/TaskManager.py
Modified: PyWireGate/trunk/logic_server/LogicImportJSON.py
===================================================================
--- PyWireGate/trunk/logic_server/LogicImportJSON.py 2011-05-07 19:39:44 UTC (rev 322)
+++ PyWireGate/trunk/logic_server/LogicImportJSON.py 2011-05-08 20:26:11 UTC (rev 323)
@@ -43,34 +43,34 @@
# only afterwards
if block.hasState():
G.add_node( name + '.state' )
- for p in block.outPorts():
- if block.outPortNameHasState( p[0] ):
- stateupdate += " self.%s_%s = %s_%s_next\n" % ( name, p[0], name, p[0] )
+ for p in range(len(block.outPorts())):
+ if block.outPortNumberHasState( p ):
+ stateupdate += " self.%s_%s = %s_%s_next\n" % ( name, p, name, p )
for signal in loaddict['signals']:
b = loaddict['blocks']
- if lib[ loaddict['blocks'][ signal[0] ]['type'] ].outPortNameHasState( signal[1] ):
+ if lib[ loaddict['blocks'][ signal[0] ]['type'] ].outPortNumberHasState( signal[1] ):
G.add_edge( signal[0] + '.state', signal[2], { 'ports': ( signal[1], signal[3] ), 'start': signal[0] } )
else:
G.add_edge( signal[0], signal[2], { 'ports': ( signal[1], signal[3] ), 'start': signal[0] } )
-
+
intructionOrder = nx.topological_sort(G)
-
+
for instruction in intructionOrder:
if not instruction in loaddict['blocks']:
continue # ignore the virtual state nodes
libBlock = lib[ loaddict['blocks'][ instruction ]['type'] ]
ins = []
- for i in libBlock.inPorts():
+ for i in range(len(libBlock.inPorts())):
for e in G.in_edges_iter( instruction, True ):
if e[2]['ports'][1] == i:
- if lib[ loaddict['blocks'][ e[2]['start'] ]['type'] ].outPortNameHasState( e[2]['ports'][0] ):
+ if lib[ loaddict['blocks'][ e[2]['start'] ]['type'] ].outPortNumberHasState( e[2]['ports'][0] ):
ins.append( "self.%s_%s" % ( e[2]['start'], e[2]['ports'][0] ) )
else:
ins.append( "%s_%s" % ( e[2]['start'], e[2]['ports'][0] ) )
outs = []
- for o in libBlock.outPorts():
- outs.append( "%s_%s" % (instruction, o[0]) )
+ for o in range(len(libBlock.outPorts())):
+ outs.append( "%s_%s" % (instruction, o) )
params = []
for p in G.node[instruction]['parameters']:
paramName = "%s_%s" % (instruction, p)
@@ -90,10 +90,12 @@
%s
%s
def run( self, globalVariables ):
+ inspector = {}
__dt = globalVariables['__dt']
__time = globalVariables['__elapsedTime']
%s
%s
+ return inspector
""" % ( parameter, init, program, stateupdate )
if printCode:
Modified: PyWireGate/trunk/logic_server/LogicLibrary.py
===================================================================
--- PyWireGate/trunk/logic_server/LogicLibrary.py 2011-05-07 19:39:44 UTC (rev 322)
+++ PyWireGate/trunk/logic_server/LogicLibrary.py 2011-05-08 20:26:11 UTC (rev 323)
@@ -32,7 +32,8 @@
_outPorts = []
_parameters = []
_drawingInstructions = ""
- _codingInstructions = lambda s, n, i, o, p: ( None, "print __time,',','\"%%s\"' %% globalVariables['__name'],',','%s',',',%s" % ( n, i[0]) )
+ #_codingInstructions = lambda s, n, i, o, p: ( None, "print __time,',','\"%%s\"' %% globalVariables['__name'],',','%s',',',%s" % ( n, i[0]) )
+ _codingInstructions = lambda s, n, i, o, p: ( None, "inspector['%s'] = %s" % ( n, i[0]) )
class GainBlock( LogicModule.LogicModule ):
_name = "gain"
Modified: PyWireGate/trunk/logic_server/LogicServer.py
===================================================================
--- PyWireGate/trunk/logic_server/LogicServer.py 2011-05-07 19:39:44 UTC (rev 322)
+++ PyWireGate/trunk/logic_server/LogicServer.py 2011-05-08 20:26:11 UTC (rev 323)
@@ -66,17 +66,20 @@
def run(self):
# Load logik.json
- exec LogicImportJSON.get( self._parent.scriptpath + '/logik.json' )
+ exec LogicImportJSON.get( self._parent.scriptpath + '/logik.json', True )
self.Logik1 = LogikClass
# Load logik2.json - and show code and diagram
- exec LogicImportJSON.get( self._parent.scriptpath + '/logik2.json' )
+ exec LogicImportJSON.get( self._parent.scriptpath + '/logik2.json', True )
self.Logik2 = LogikClass
- cnt = 0
- while self.isrunning:
- if cnt == 60 and self.isrunning:
- self.statistics()
- if self.isrunning:
- cnt +=1
- self.idle(5)
+ t = TaskManager.TaskManager(self)
+ t.addInterval( 'Interval 1 - 75 ms Task', 0.075 )
+ t.addInterval( 'Interval 2 - 10 ms Task', 0.010 )
+ t.addTask( 'Interval 1 - 75 ms Task', 'Logik1', self.Logik1 )
+ t.addTask( 'Interval 2 - 10 ms Task', 'Logik2', self.Logik2 )
+ t.start()
+ while True:
+ for m in iter( t.getMessage, None ):
+ print m
+ time.sleep( 0.1 )
\ No newline at end of file
Modified: PyWireGate/trunk/logic_server/TaskManager.py
===================================================================
--- PyWireGate/trunk/logic_server/TaskManager.py 2011-05-07 19:39:44 UTC (rev 322)
+++ PyWireGate/trunk/logic_server/TaskManager.py 2011-05-08 20:26:11 UTC (rev 323)
@@ -17,7 +17,8 @@
## if not, see <http://www.gnu.de/documents/gpl-3.0.de.html>.
# A task manager that runs the little code snippets
-from multiprocessing import Process, Queue as mpQueue
+#from multiprocessing import Process, Queue as mpQueue
+import threading
import Queue
import time
@@ -25,26 +26,38 @@
"""The task manager that called all programs in the defined order at the
specified interval"""
taskList = {}
+ inspection = Queue.Queue()
+ def __init__( self, parent ):
+ self._parent = parent
+
def addInterval( self, name, interval ):
if name in self.taskList:
raise # Name already in interval list!
- q = mpQueue()
+ #q = mpQueue()
+ q = Queue.Queue()
self.taskList[name] = [ None, interval, q, [] ]
def addTask( self, interval, name, code ):
if interval in self.taskList:
- self.taskList[ interval ][3].append( code )
+ self.taskList[ interval ][3].append( [name, code] )
else:
raise # interval doesn't exist
+ def getMessage( self ):
+ try:
+ return self.inspection.get( False )
+ except Queue.Empty:
+ return
+
def start( self ):
# start the task handling
self.startTime = time.time() # only *nix is interesting here
for i in self.taskList:
interval = self.taskList[ i ][1]
q = self.taskList[ i ][2]
- self.taskList[ i ][0] = Process( target = self.aIntervall, args = ( i, interval, q, self.startTime ) )
+ #self.taskList[ i ][0] = Process( target = self.aIntervall, args = ( i, interval, q, self.startTime ) )
+ self.taskList[ i ][0] = threading.Thread( target = self.aIntervall, args = ( i, interval, q, self.inspection, self.startTime ) )
self.taskList[ i ][0].start()
def stop( self ):
@@ -53,7 +66,7 @@
self.taskList[ i ][2].put( 'STOP' )
self.taskList[ i ][0].join()
- def aIntervall( self, name, interval, q, startTime ):
+ def aIntervall( self, name, interval, q, inspection, startTime ):
globalVariables = {
'__name' : name,
'__interval' : interval,
@@ -63,20 +76,21 @@
}
# initialize the classes
for i in range( len( self.taskList[ name ][3] )):
- print i, self.taskList[ name ][3][i]
- self.taskList[ name ][3][i] = self.taskList[ name ][3][i]( globalVariables )
+ self.taskList[ name ][3][i][1] = self.taskList[ name ][3][i][1]( globalVariables )
# main loop
while 1:
__elapsedTime = time.time() - startTime
globalVariables['__dt'] = __elapsedTime - globalVariables['__elapsedTime']
globalVariables['__elapsedTime'] = __elapsedTime
+ #print 'XX', self.taskList[ name ][3]
for i in self.taskList[ name ][3]:
- i.run( globalVariables )
+ inspector = i[1].run( globalVariables )
+ inspection.put( (name, i[0], inspector) )
try:
message = q.get( True, interval )
except Queue.Empty:
continue # just start next iteration immediately
-
+
if 'STOP' == message:
break
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|