From 840062a2df75bcac0fe5d6d3879e72d4da30f98d Mon Sep 17 00:00:00 2001
From: Kevin Peterson <kmpeters@anl.gov>
Date: Wed, 11 Apr 2012 18:04:02 +0000
Subject: [PATCH] Switched back to kmp2 (now properly patched for syncing). 
 Changed debug messages to focus on DMOV now.  Still syncing soft motor
 targets at end of every move.

git-svn-id: https://subversion.xray.aps.anl.gov/kmp/transform/trunk@263 f095f811-4e88-6c84-d33e-e382bdb4531c
---
 launch_medm       | 10 ++++-----
 myLabTransform.py |  4 ++--
 transform.py      | 56 +++++++++++++++++++++++++++--------------------
 3 files changed, 39 insertions(+), 31 deletions(-)

diff --git a/launch_medm b/launch_medm
index 3a2827d..3d90452 100644
--- a/launch_medm
+++ b/launch_medm
@@ -1,7 +1,7 @@
 #setenv EPICS_DISPLAY_PATH /APSshare/epics/synApps_5_5/support/all_adl
-medm -x -attach -macro "P=kmp3:,M1=m1,M2=m2,M3=m3" motor3x.adl &
+medm -x -attach -macro "P=kmp2:,M1=m1,M2=m2,M3=m3" motor3x.adl &
 sleep 4.0
-medm -x -attach -macro "P=kmp3:,M1=m4,M2=m5,M3=m6" motor3x.adl &
-medm -x -attach -macro "P=kmp3:,M1=lab:m1,M2=lab:m2,M3=lab:m3" motor3x.adl &
-medm -x -attach -macro "P=kmp3:,M=m1" ~/epics/synAppsSVN/support/motor/motorApp/op/adl/motorx_all.adl &
-medm -x -attach -macro "P=kmp3:lab:,M=m1" ~/epics/synAppsSVN/support/motor/motorApp/op/adl/motorx_all.adl &
+medm -x -attach -macro "P=kmp2:,M1=m4,M2=m5,M3=m6" motor3x.adl &
+medm -x -attach -macro "P=kmp2:,M1=lab:m1,M2=lab:m2,M3=lab:m3" motor3x.adl &
+medm -x -attach -macro "P=kmp2:,M=m1" ~/epics/synAppsSVN/support/motor/motorApp/op/adl/motorx_all.adl &
+medm -x -attach -macro "P=kmp2:lab:,M=m1" ~/epics/synAppsSVN/support/motor/motorApp/op/adl/motorx_all.adl &
diff --git a/myLabTransform.py b/myLabTransform.py
index 1f073a3..bdd1705 100644
--- a/myLabTransform.py
+++ b/myLabTransform.py
@@ -51,8 +51,8 @@ class myTransform(transform.transform):
     return retval.tolist()[0]
 
 if __name__ == "__main__":
-  #!prefix = 'kmp2:'
-  prefix = 'kmp3:'
+  prefix = 'kmp2:'
+  #!prefix = 'kmp3:'
   realMotors = ["%s%s" % (prefix, x) for x in ('m1', 'm2', 'm3') ]
   transformMotors = ["%s%s" % (prefix, x) for x in ('m4', 'm5', 'm6') ]
   softMotors = ["%s%s" % (prefix, x) for x in ('lab:m1', 'lab:m2', 'lab:m3') ]
diff --git a/transform.py b/transform.py
index 6a7df7c..ae10cf1 100644
--- a/transform.py
+++ b/transform.py
@@ -21,6 +21,7 @@ class transform:
     self.stopMotorsFlag = False
     self.syncSoftTargetFlag = False
     self.reinitFlag = False
+    # Is only used if SYNC should happen conditionally
     self.softMotorInitiatedMove = False
     self.abortFlag = False
     self.initCompleteFlag = False
@@ -126,11 +127,27 @@ class transform:
   ### Callback functions (to be called when PV values change--only set flags that are watched in main loop)
 
   def driveCallback(self, **kw):
-    print "driveCallback:\n", "  ", kw['pvname'], kw['value']
+    #!print "driveCallback:\n", "  ", kw['pvname'], kw['value']
+
+    #!print "_ updateReadbackFlag =", self.updateReadbackFlag
+    #!print "_ dmovChangeFlag =", self.dmovChangeFlag
+    #!print "_ moveSoftMotorFlag =", self.moveSoftMotorFlag
+    #!print "_ stopMotorsFlag =", self.stopMotorsFlag
+    #!print "_ syncSoftTargetFlag =", self.syncSoftTargetFlag
+    #!print "_ reinitFlag =", self.reinitFlag
+    #!print "_ softMotorInitiatedMove =", self.softMotorInitiatedMove
+    #!print "_ abortFlag =", self.abortFlag
+    #!print "_ initCompeteFlag =", self.initCompleteFlag
+    #!print "_ syncInProgress =", self.syncInProgress
+
     if self.initCompleteFlag == True and self.syncInProgress == False:
       self.moveSoftMotorFlag = True
       self.softMotorInitiatedMove = True
-
+      #!print "  move real motors because NOT syncing"
+    else:
+      #!print "  not moving real motors because a sync is in progress or initializing"
+      pass
+      
   def rdbkCallback(self, **kw):
     #!print "rdbkCallback:\n", "  ", kw['pvname'], kw['value']
     self.updateReadbackFlag = True
@@ -141,7 +158,7 @@ class transform:
     	self.stopMotorsFlag = True
 
   def dmovCallback(self, **kw):
-    #!print "dmovCallback:\n", "  ", kw['pvname'], kw['value']
+    print "dmovCallback:\n", "  ", kw['pvname'], kw['value']
     self.dmovChangeFlag = True
 
   def connectionCallback(self, **kw):
@@ -164,7 +181,7 @@ class transform:
     # Do the forward transform
     tm_positions = self.fwdTrans(m_positions, t_positions)
     
-    print "updating readbacks:", tm_positions
+    #!print "updating readbacks:", tm_positions
     
     # Write the soft (transformed) readback positions
     for i in range(len(tm_positions)):
@@ -174,7 +191,6 @@ class transform:
   
   # This is only useful if LOCK = YES  
   def syncSoftTargets(self):
-    print "softMotorInitiatedMove =", self.softMotorInitiatedMove
     # Synchronize soft targets if a real motor initated the move 
     #!if self.softMotorInitiatedMove == False:
     # Always sync soft-motor target position (is this bad for spec?)
@@ -183,25 +199,16 @@ class transform:
       self.syncInProgress = True
 
       # The following sleep is required to prevent problems when making small moves
-      sleep(0.05)
-      #!#tm_positions = [x.get() for x in self.tm_rbv]
-      #!### MAYBE SHOULD RECALCULATE BASED ON REAL MOTORS INSTEAD
-      #!m_positions = [x.get() for x in self.m_val]
-      #!t_positions = [x.get() for x in self.t_rbv]
-    
-      #!# Do the forward transform
-      #!tm_positions = self.fwdTrans(m_positions, t_positions)
-    
-      #!#!print "syncing these target positions:", tm_positions
+      ###sleep(0.05)
     
       for i in range(len(self.tm_rbv)):
-        print i
+        #!print i
         self.tm_sync[i].put(1)
 	# A delay is necessary before setting syncInProgress to False
-	sleep(0.05)
-	#!self.tm_proc[i].put(1)
+	###sleep(0.05)
       
       #
+      sleep(0.1)
       self.syncInProgress = False
       
     # For soft-motor-initiate moves don't do anything
@@ -218,7 +225,7 @@ class transform:
     m_dmovs = [x.get() for x in self.m_dmov]
     t_dmovs = [x.get() for x in self.t_dmov]
     
-    #!print m_dmovs, t_dmovs
+    print m_dmovs, t_dmovs
     
     # Determine if any motors are moving
     if ( ( 0 in m_dmovs ) or ( 0 in t_dmovs ) ):
@@ -230,7 +237,7 @@ class transform:
       
     # Write the soft (transformed) dmovs
     for i in range(len(self.tm_dmov)):
-      #!print "setting dmov for tm%i to %i" % (i, dmov)
+      print "setting dmov for tm%i to %i" % (i, dmov)
       self.tm_dmov[i].put(dmov)
     
     ### Sanity check
@@ -258,6 +265,7 @@ class transform:
     
     # Write the real motor target positions
     for i in range(len(self.m_val)):
+      #!print "Actually changing the real motor target positions"
       self.m_val[i].put(m_positions[i])
       # also manually the dmov since this needs to be in sync very quickly
       self.tm_dmov[i].put(0)
@@ -318,16 +326,16 @@ class transform:
         #!print "idle: stop motors"
         self.stopMotors()
       if self.moveSoftMotorFlag == True:
-        print "idle: move motors"
+        #!print "idle: move motors"
         self.moveMotors()
       if self.dmovChangeFlag == True:
-	print "idle: update dmov"
+	#!print "idle: update dmov"
         self.updateDmov()
       if self.updateReadbackFlag == True:
-        print "idle: update readback"
+        #!print "idle: update readback"
         self.updateReadbacks()
       if self.syncSoftTargetFlag == True:
-        print "idle: sync soft targets"
+        #!print "idle: sync soft targets"
 	self.syncSoftTargets()
 
 if __name__ == "__main__":
-- 
GitLab