EPICS Home

Experimental Physics and Industrial Control System


 
1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  <20132014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024  Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  <20132014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: RE: header files in snc code
From: Mark Rivers <[email protected]>
To: "'Tim Mooney'" <[email protected]>, Pierrick Hanlet <[email protected]>
Cc: Tech Talk <[email protected]>
Date: Fri, 8 Feb 2013 20:20:38 +0000

Here’s an example of one:

 

corvette:motor/motorApp/NewportSrc>more trajectoryScan.h

/* trajectoryScan.h

*

 * This file is included in MM4005_trajectoryScan.st and XPS_trajectoryScan.st to

* ensure consistency and minimize duplication of code.

*/

 

 

/* State codes for Build, Read and Execute. Careful, these must match the

* corresponding MBBI records, but there is no way to check this */

#define BUILD_STATE_DONE            0

#define BUILD_STATE_BUSY            1

#define READ_STATE_DONE             0

#define READ_STATE_BUSY             1

#define EXECUTE_STATE_DONE          0

#define EXECUTE_STATE_MOVE_START    1

#define EXECUTE_STATE_EXECUTING     2

#define EXECUTE_STATE_FLYBACK       3

 

/* Status codes for Build, Execute and Read */

#define STATUS_UNDEFINED 0

#define STATUS_SUCCESS   1

#define STATUS_FAILURE   2

#define STATUS_ABORT     3

#define STATUS_TIMEOUT   4

 

/* Time modes */

#define TIME_MODE_TOTAL         0

#define TIME_MODE_PER_ELEMENT   1

 

/* Move modes */

#define MOVE_MODE_RELATIVE   0

#define MOVE_MODE_ABSOLUTE   1

#define MOVE_MODE_HYBRID     2

 

/* The maximum number of axes per controller.  If this is changed from 8

* then many assign statements in this file must be changed */

#define MAX_AXES 8

 

/* Define PVs */

int     debugLevel;  assign debugLevel   to "{P}{R}DebugLevel.VAL";

monitor debugLevel;

int     numAxes;     assign numAxes      to "{P}{R}NumAxes.VAL";

monitor numAxes;

int     nelements;   assign nelements    to "{P}{R}Nelements.VAL";

monitor nelements;

int     npulses;     assign npulses      to "{P}{R}Npulses.VAL";

monitor npulses;

int     startPulses; assign startPulses  to "{P}{R}StartPulses.VAL";

monitor startPulses;

int     endPulses;   assign endPulses    to "{P}{R}EndPulses.VAL";

monitor endPulses;

int     nactual;     assign nactual      to "{P}{R}Nactual.VAL";

int     moveMode;    assign moveMode     to "{P}{R}MoveMode.VAL";   

monitor moveMode;

double  time;        assign time         to "{P}{R}Time.VAL";     

monitor time;

double  timeScale;   assign timeScale    to "{P}{R}TimeScale.VAL";

monitor timeScale;

int     timeMode;    assign timeMode     to "{P}{R}TimeMode.VAL";   

monitor timeMode;

double  accel;       assign accel        to "{P}{R}Accel.VAL";    

monitor accel;

int     build;       assign build        to "{P}{R}Build.VAL";    

monitor build;

int     buildState;  assign buildState   to "{P}{R}BuildState.VAL";

int     buildStatus; assign buildStatus  to "{P}{R}BuildStatus.VAL";

string  buildMessage;assign buildMessage to "{P}{R}BuildMessage.VAL";

int     simMode;     assign simMode      to "{P}{R}SimMode.VAL";  

monitor simMode;

int     execute;     assign execute      to "{P}{R}Execute.VAL";  

monitor execute;

int     execState;   assign execState    to "{P}{R}ExecState.VAL"; 

monitor execState;

int     execStatus;  assign execStatus   to "{P}{R}ExecStatus.VAL";  

string  execMessage; assign execMessage  to "{P}{R}ExecMessage.VAL";

int     abort;       assign abort        to "{P}{R}Abort.VAL";  

monitor abort;

int     readback;    assign readback     to "{P}{R}Readback.VAL";  

monitor readback;

int     readState;   assign readState    to "{P}{R}ReadState.VAL";  

int     readStatus;  assign readStatus   to "{P}{R}ReadStatus.VAL";  

string  readMessage; assign readMessage  to "{P}{R}ReadMessage.VAL";

double  timeTrajectory[MAX_ELEMENTS];

assign  timeTrajectory to  "{P}{R}TimeTraj.VAL";

monitor timeTrajectory;

string  trajectoryFile; assign trajectoryFile to "{P}{R}TrajectoryFile.VAL";

monitor trajectoryFile;

 

int     moveAxis[MAX_AXES];

assign  moveAxis     to

        {"{P}{R}M1Move.VAL",

         "{P}{R}M2Move.VAL",

         "{P}{R}M3Move.VAL",

         "{P}{R}M4Move.VAL",

         "{P}{R}M5Move.VAL",

         "{P}{R}M6Move.VAL",

         "{P}{R}M7Move.VAL",

         "{P}{R}M8Move.VAL"};

monitor moveAxis;

 

double  motorTrajectory[MAX_AXES][MAX_ELEMENTS];

assign  motorTrajectory to

        {"{P}{R}M1Traj.VAL",

         "{P}{R}M2Traj.VAL",

         "{P}{R}M3Traj.VAL",

         "{P}{R}M4Traj.VAL",

         "{P}{R}M5Traj.VAL",

         "{P}{R}M6Traj.VAL",

         "{P}{R}M7Traj.VAL",

         "{P}{R}M8Traj.VAL"};

monitor motorTrajectory;

 

double  motorReadbacks[MAX_AXES][MAX_PULSES];

assign  motorReadbacks to

        {"{P}{R}M1Actual.VAL",

         "{P}{R}M2Actual.VAL",

         "{P}{R}M3Actual.VAL",

         "{P}{R}M4Actual.VAL",

         "{P}{R}M5Actual.VAL",

         "{P}{R}M6Actual.VAL",

         "{P}{R}M7Actual.VAL",

         "{P}{R}M8Actual.VAL"};

 

double  motorError[MAX_AXES][MAX_PULSES];

assign  motorError  to

        {"{P}{R}M1Error.VAL",

         "{P}{R}M2Error.VAL",

         "{P}{R}M3Error.VAL",

         "{P}{R}M4Error.VAL",

         "{P}{R}M5Error.VAL",

         "{P}{R}M6Error.VAL",

         "{P}{R}M7Error.VAL",

         "{P}{R}M8Error.VAL"};

 

double  motorCurrent[MAX_AXES];

assign  motorCurrent to

        {"{P}{R}M1Current.VAL",

         "{P}{R}M2Current.VAL",

         "{P}{R}M3Current.VAL",

         "{P}{R}M4Current.VAL",

         "{P}{R}M5Current.VAL",

         "{P}{R}M6Current.VAL",

         "{P}{R}M7Current.VAL",

         "{P}{R}M8Current.VAL"};

 

double  motorMDVS[MAX_AXES];

assign  motorMDVS   to

        {"{P}{R}M1MDVS.VAL",

         "{P}{R}M2MDVS.VAL",

         "{P}{R}M3MDVS.VAL",

         "{P}{R}M4MDVS.VAL",

         "{P}{R}M5MDVS.VAL",

         "{P}{R}M6MDVS.VAL",

         "{P}{R}M7MDVS.VAL",

         "{P}{R}M8MDVS.VAL"};

monitor motorMDVS;

 

double  motorMDVA[MAX_AXES];

assign  motorMDVA   to

        {"{P}{R}M1MDVA.VAL",

         "{P}{R}M2MDVA.VAL",

         "{P}{R}M3MDVA.VAL",

         "{P}{R}M4MDVA.VAL",

         "{P}{R}M5MDVA.VAL",

         "{P}{R}M6MDVA.VAL",

         "{P}{R}M7MDVA.VAL",

         "{P}{R}M8MDVA.VAL"};

 

int     motorMDVE[MAX_AXES];

assign  motorMDVE   to

        {"{P}{R}M1MDVE.VAL",

         "{P}{R}M2MDVE.VAL",

         "{P}{R}M3MDVE.VAL",

         "{P}{R}M4MDVE.VAL",

         "{P}{R}M5MDVE.VAL",

         "{P}{R}M6MDVE.VAL",

         "{P}{R}M7MDVE.VAL",

         "{P}{R}M8MDVE.VAL"};

 

double  motorMVA[MAX_AXES];

assign  motorMVA    to

        {"{P}{R}M1MVA.VAL",

         "{P}{R}M2MVA.VAL",

         "{P}{R}M3MVA.VAL",

         "{P}{R}M4MVA.VAL",

         "{P}{R}M5MVA.VAL",

         "{P}{R}M6MVA.VAL",

         "{P}{R}M7MVA.VAL",

         "{P}{R}M8MVA.VAL"};

 

int     motorMVE[MAX_AXES];

assign  motorMVE    to

        {"{P}{R}M1MVE.VAL",

         "{P}{R}M2MVE.VAL",

         "{P}{R}M3MVE.VAL",

         "{P}{R}M4MVE.VAL",

         "{P}{R}M5MVE.VAL",

         "{P}{R}M6MVE.VAL",

         "{P}{R}M7MVE.VAL",

         "{P}{R}M8MVE.VAL"};

 

double  motorMAA[MAX_AXES];

assign  motorMAA    to

        {"{P}{R}M1MAA.VAL",

         "{P}{R}M2MAA.VAL",

         "{P}{R}M3MAA.VAL",

         "{P}{R}M4MAA.VAL",

         "{P}{R}M5MAA.VAL",

         "{P}{R}M6MAA.VAL",

         "{P}{R}M7MAA.VAL",

         "{P}{R}M8MAA.VAL"};

 

int     motorMAE[MAX_AXES];

assign  motorMAE    to

        {"{P}{R}M1MAE.VAL",

         "{P}{R}M2MAE.VAL",

         "{P}{R}M3MAE.VAL",

         "{P}{R}M4MAE.VAL",

         "{P}{R}M5MAE.VAL",

         "{P}{R}M6MAE.VAL",

         "{P}{R}M7MAE.VAL",

         "{P}{R}M8MAE.VAL"};

 

/* We don't assign the EPICS motors here because there may be fewer than

 * MAX_AXES actually in use. */

double  epicsMotorPos[MAX_AXES];

assign  epicsMotorPos to {"","","","","","","",""};

monitor epicsMotorPos;

 

double  epicsMotorDir[MAX_AXES];

assign  epicsMotorDir to {"","","","","","","",""};

monitor epicsMotorDir;

 

double  epicsMotorOff[MAX_AXES];

assign  epicsMotorOff to {"","","","","","","",""};

monitor epicsMotorOff;

 

double  epicsMotorDone[MAX_AXES];

assign  epicsMotorDone to {"","","","","","","",""};

monitor epicsMotorDone;

 

 

evflag buildMon;        sync build      buildMon;

evflag executeMon;      sync execute    executeMon;

evflag execStateMon;    sync execState  execStateMon;

evflag abortMon;        sync abort      abortMon;

evflag readbackMon;     sync readback   readbackMon;

evflag nelementsMon;    sync nelements  nelementsMon;

evflag motorMDVSMon;    sync motorMDVS  motorMDVSMon;

 

Mark

 

 

From: [email protected] [mailto:[email protected]] On Behalf Of Tim Mooney
Sent: Friday, February 08, 2013 12:51 PM
To: Pierrick Hanlet
Cc: Tech Talk
Subject: Re: header files in snc code

 

Hi Pierrick,

 

Yes, you can do this.  Don't escape the '#include "filename.h"' with "%%", because in this case you /do/ want the state-notation-language compiler to see the header file.

 

Tim


From: "Pierrick Hanlet" <[email protected]>
To: "Tech Talk" <[email protected]>
Sent: Friday, February 8, 2013 12:04:27 PM
Subject: header files in snc code

Hi,
I'm building a state machine in which I will have ~100 variables which I will monitor
and to which I will write.  I would like to make my source code more clear by putting
this list in a header file.  I could not find anything in the documentation other than
including a c-style header file with the appropriate "%%".  Can I add a header file
in which I make all of the assignments and monitors?
Thank you,
Pierrick

--
"Whether you think you can or think you can't, either way, you are correct" -- Henry Ford
_______________________________________________________________
Pierrick Hanlet
IIT/Fermilab
+1-630-840-5555 (FNAL)
+1-312-567-5745 (IIT)
+1-630-697-8758/+44-79-48-860-197 (US/UK mobile)

 


References:
header files in snc code Pierrick Hanlet
Re: header files in snc code Tim Mooney

Navigate by Date:
Prev: Re: header files in snc code Tim Mooney
Next: RE: Problem with mca R7.2 and Rontec XFlash Mark Rivers
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  <20132014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
Navigate by Thread:
Prev: Re: header files in snc code Tim Mooney
Next: How to set property 'items' of ComboBox from a javascript in CSS BOY Xinyu.Wu
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  <20132014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024