g+
g+ Communities
Argonne National Laboratory

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  Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  <20132014 
<== Date ==> <== Thread ==>

Subject: RE: header files in snc code
From: Mark Rivers <rivers@cars.uchicago.edu>
To: "'Tim Mooney'" <mooney@aps.anl.gov>, Pierrick Hanlet <hanlet@fnal.gov>
Cc: Tech Talk <tech-talk@aps.anl.gov>
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: tech-talk-bounces@aps.anl.gov [mailto:tech-talk-bounces@aps.anl.gov] 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" <hanlet@fnal.gov>
To: "Tech Talk" <tech-talk@aps.anl.gov>
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 
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 
ANJ, 31 Jan 2014 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· EPICSv4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·