1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 <2022> 2023 2024 2025 | Index | 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 <2022> 2023 2024 2025 |
<== Date ==> | <== Thread ==> |
---|
Subject: | possible race condition in Newport XPS-Q8 |
From: | "Pearson, Matthew via Tech-talk" <tech-talk at aps.anl.gov> |
To: | "tech-talk at aps.anl.gov" <tech-talk at aps.anl.gov> |
Date: | Fri, 18 Nov 2022 16:48:55 +0000 |
Hi, I don’t really work with these controllers anymore, but I looked into a problem on one of our beamlines yesterday involving a premature callback from a motor record move on one axis on a Newport XPS-Q8 controller, which I don’t recall seeing
before. The axis was requested to move using put_callback. The move() function in XPSAxis.cpp seemed to execute ok and the motorStatusDone parameter was set to zero (which was reflected in the motor record MSTA field). Then in the next poll of
the controller we must have read the XPS axis group status to be ‘not moving’, because it immediately set motorStatusDone=1 and the callback completed. Then the motor started moving and completed the move normally.
So this seems like a race condition in the software on the XPS-Q8. We send a move command and then immediately read the status and it was incorrect. Has anyone seen this before on any flavor of XPS controller? The server where this software is running is unusually heavily loaded, which may have exposed a race condition that has always been there. Anyway, if anyone has seen this, have they tried using the ‘enableMovingMode’ shell function to change the way the ‘move done’ is reported? I suspect that might fix the issue as it waits for a response from the XPS ‘moveSocket_’ to determine
‘move done’, rather than polling the axis group status. Cheers, Matt |