Experimental Physics and Industrial Control System
|
> Out of curiosity why did this happen? why do I have to call the
base class functions?
The base class asynMotorController::writeInt32() is what handles the STOP and SPMG fields, as
well as many other fields. If you don't call that method then changes to those fields will be ignored. When you implement a virtual method in your derived class then your derived class method is called, rather than the base class method. But in drivers
like this you need to call the base class method if the parameter you were passed is not one that your derived class handles.
Mark
From: Abdalla Ahmad <Abdalla.Ahmad at sesame.org.jo>
Sent: Thursday, September 29, 2022 8:03 AM
To: Mark Rivers <rivers at cars.uchicago.edu>; tech-talk at aps.anl.gov <tech-talk at aps.anl.gov>
Subject: RE: asynMotorController weird behavior when using any read/write interface mask
Thanks Mark. I will test it and get back to you.
Out of curiosity why did this happen? why do I have to call the base class functions?
Best Regards
Abdalla.
From: Mark Rivers <rivers at cars.uchicago.edu>
Sent: Thursday, September 29, 2022 3:52 PM
To: tech-talk at aps.anl.gov; Abdalla Ahmad <Abdalla.Ahmad at sesame.org.jo>
Subject: Re: asynMotorController weird behavior when using any read/write interface mask
I suspect the problem is that in your writeInt32 and readInt32 methods you have forgotten that you must call the base class method (asynMotorController::writeInt32 or readInt32) for
any parameters that are not specific to your derived class. That would cause SPMG and STOP not to work.
Here is an example of how to do it:
Hi
Recently we got the chance to control the SMC Taurus rotary stage using the motorMicos motor record module. One of my updates was to read and write limit switches status. The command’s argument is an integer value (0-2), I implemented readIn32
and writeInt32 interfaces as usual. When moving the motor, after a while the RBV field does not update, STOP and SPMG fields do not work (The motor doesn’t stop), and it the GUI gives me “Controller Error”. When the motor reaches its destination, the controller
error clears and the RBV field is updated accordingly. I tried empty readInt32 and writeInt32 functions with only “return asynSuccess” and the behavior is still there. When I removed those interfaces, the controller works fine. To make those commands work
I moved the writeReadController and writeController functions to the poll thread and the motor works fine, motor stops at command and the RBV field is updated. Any clue on what I have missed?
Thanks!
Abdalla.
|
- References:
- asynMotorController weird behavior when using any read/write interface mask Abdalla Ahmad via Tech-talk
- Re: asynMotorController weird behavior when using any read/write interface mask Mark Rivers via Tech-talk
- RE: asynMotorController weird behavior when using any read/write interface mask Abdalla Ahmad via Tech-talk
- Navigate by Date:
- Prev:
RE: asynMotorController weird behavior when using any read/write interface mask Abdalla Ahmad via Tech-talk
- Next:
Re: DMOV flag problem with soft motor Kevin Peterson via Tech-talk
- 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
- Navigate by Thread:
- Prev:
RE: asynMotorController weird behavior when using any read/write interface mask Abdalla Ahmad via Tech-talk
- Next:
RE: asynMotorController weird behavior when using any read/write interface mask Abdalla Ahmad via Tech-talk
- 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
|
ANJ, 06 Oct 2022 |
·
Home
·
News
·
About
·
Base
·
Modules
·
Extensions
·
Distributions
·
Download
·
·
Search
·
EPICS V4
·
IRMIS
·
Talk
·
Bugs
·
Documents
·
Links
·
Licensing
·
|