From f15c5bb13878d5bcc9fa3cd1de346f9e10e2a1b3 Mon Sep 17 00:00:00 2001
From: Kevin Peterson <kmpeters@anl.gov>
Date: Thu, 11 Oct 2012 19:41:14 +0000
Subject: [PATCH] Added enable PV to allow the lab transform to be disabled.

git-svn-id: https://subversion.xray.aps.anl.gov/kmp/transform/trunk@351 f095f811-4e88-6c84-d33e-e382bdb4531c
---
 launch_medm       | 11 ++++----
 myLabTransform.py | 12 +++++----
 transform.db      |  8 ++++++
 transform.py      | 66 ++++++++++++++++++++++++++++++-----------------
 4 files changed, 63 insertions(+), 34 deletions(-)

diff --git a/launch_medm b/launch_medm
index 3d90452..8c7ca18 100644
--- a/launch_medm
+++ b/launch_medm
@@ -1,7 +1,8 @@
 #setenv EPICS_DISPLAY_PATH /APSshare/epics/synApps_5_5/support/all_adl
-medm -x -attach -macro "P=kmp2:,M1=m1,M2=m2,M3=m3" motor3x.adl &
+medm -x -attach -macro "P=kmp3:,M1=m1,M2=m2,M3=m3" motor3x.adl &
 sleep 4.0
-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 &
+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 &
+
diff --git a/myLabTransform.py b/myLabTransform.py
index bdd1705..746752f 100644
--- a/myLabTransform.py
+++ b/myLabTransform.py
@@ -51,11 +51,13 @@ class myTransform(transform.transform):
     return retval.tolist()[0]
 
 if __name__ == "__main__":
-  prefix = 'kmp2:'
-  #!prefix = 'kmp3:'
+  #!prefix = 'kmp2:'
+  prefix = 'kmp3:'
+  labStr = 'lab'
   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') ]
-  print realMotors, transformMotors, softMotors
-  MyTrans = myTransform(realMotors, transformMotors, softMotors)
+  softMotors = ["%s%s:%s" % (prefix, labStr, x) for x in ('m1', 'm2', 'm3') ]
+  enablePv = "%s%s:enable" % (prefix, labStr)
+  print realMotors, transformMotors, softMotors, enablePv
+  MyTrans = myTransform(realMotors, transformMotors, softMotors, enablePv)
   MyTrans.main()
diff --git a/transform.db b/transform.db
index 3242c0f..d8c4fb7 100644
--- a/transform.db
+++ b/transform.db
@@ -1,3 +1,11 @@
+record(bo,"$(P)$(S):enable")
+{
+  field(DESC,"Enable/disable transform")
+  field(ZNAM,"Disabled")
+  field(ONAM,"Enabled")
+  field(VAL, "1")
+}
+
 record(motor,"$(P)$(S):m1")
 {
   field(DTYP,"Soft Channel")
diff --git a/transform.py b/transform.py
index 5d5b3e7..58ac932 100644
--- a/transform.py
+++ b/transform.py
@@ -4,7 +4,7 @@ import epics
 from time import sleep
 
 class transform:
-  def __init__(self, (m1, m2, m3), (t1, t2, t3), (tm1, tm2, tm3)):
+  def __init__(self, (m1, m2, m3), (t1, t2, t3), (tm1, tm2, tm3), enable):
     """ 
     real motors (to be transformed): m1, m2, m3
     transform motors: t1, t2, t3
@@ -26,6 +26,7 @@ class transform:
     self.abortFlag = False
     self.initCompleteFlag = False
     self.syncInProgress = False
+
     
     ### PVs to set
     
@@ -73,6 +74,9 @@ class transform:
 
     ### PVs to monitor
 
+    # Calculation enable PV
+    self.enablePv = epics.PV(enable, callback=self.enableCallback)
+
     # real motor RBV (for calculating transformed position)
     self.m_rbv = []
     for m in (m1, m2, m3):
@@ -131,6 +135,14 @@ class transform:
 
   ### Callback functions (to be called when PV values change--only set flags that are watched in main loop)
 
+  def enableCallback(self, **kw):
+    if kw['value'] == 1:
+      self.enableFlag = True
+      print "Transform is enabled."
+    else:
+      self.enableFlag = False
+      print "Transform is diabled."
+
   def driveCallback(self, **kw):
     #!print "driveCallback:\n", "  ", kw['pvname'], kw['value']
     if self.initCompleteFlag == True and self.syncInProgress == False:
@@ -321,33 +333,39 @@ class transform:
       
       if self.abortFlag == True:
         break
-      # The order of these if statements is important. The ones that appear first take precendence.
-      if self.reinitFlag == True:
-        #!print "idle: resyncing after reconnect"
-	#!print "  self.reinitFlag = ", self.reinitFlag
-	self.resyncAfterReconnect()
-      if self.stopMotorsFlag == True:
-        #!print "idle: stop motors"
-        self.stopMotors()
-      if self.moveSoftMotorFlag == True:
-        #!print "idle: move motors"
-        self.moveMotors()
-      if self.dmovChangeFlag == True:
-	#!print "idle: update dmov"
-        self.updateDmov()
-      if self.updateReadbackFlag == True:
-        #!print "idle: update readback"
-        self.updateReadbacks()
-      if self.syncSoftTargetFlag == True:
-        #!print "idle: sync soft targets"
-	self.syncSoftTargets()
+      
+      if self.enableFlag == True:
+        # The order of these if statements is important. The ones that appear first take precendence.
+        if self.reinitFlag == True:
+          #!print "idle: resyncing after reconnect"
+	  #!print "  self.reinitFlag = ", self.reinitFlag
+	  self.resyncAfterReconnect()
+        if self.stopMotorsFlag == True:
+          #!print "idle: stop motors"
+          self.stopMotors()
+        if self.moveSoftMotorFlag == True:
+          #!print "idle: move motors"
+          self.moveMotors()
+        if self.dmovChangeFlag == True:
+	  #!print "idle: update dmov"
+          self.updateDmov()
+        if self.updateReadbackFlag == True:
+          #!print "idle: update readback"
+          self.updateReadbacks()
+        if self.syncSoftTargetFlag == True:
+          #!print "idle: sync soft targets"
+	  self.syncSoftTargets()
+      else:
+        pass
 
 if __name__ == "__main__":
   prefix = 'kmp2:'
+  labStr = 'lab'
   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') ]
-  print realMotors, transformMotors, softMotors
-  MyTrans = transform(realMotors, transformMotors, softMotors)
+  softMotors = ["%s%s:%s" % (prefix, labStr, x) for x in ('m1', 'm2', 'm3') ]
+  enablePv = "%s%s:enable" % (prefix, labStr)
+  print realMotors, transformMotors, softMotors, enablePv
+  MyTrans = transform(realMotors, transformMotors, softMotors, enablePv)
   MyTrans.main()
 
-- 
GitLab