...
- Effectively, you can only develop MPS History Server inside Eclipse on lcls-builder.
- Check out the CVS module physics/mps/mpshist into your workspace in the LCLS VLAN
- From now on, the root of project is referred to as $MPSHIST_ROOT
- Use ant to build the jars.
- Stop the production version of mpshist and run the version in your workspace.
- After you are done, remember to stop you version and run the production version
Dependencies
- ezJCA (version R0-0-10)
- javainterfaces (current version)
- MPS Config
- xal4lcls
- ext.jar (current version)
- xal.jar (current version)
...
- Select $MPSGUI_ROOT/src/edu.stanford.slac.mpshist/MpsHistManager
- Right-click => select Run As... => Java Application
- If you run the app for the first time, it should fail
- Go to Run in the Window menu
- Select "Open Run Dialog..."
- Select "MpsHistManager" in the window on the left
- Select the "Arguments" tab
Enter the following arguments:
Code Block /usr/local/lcls/epics/iocTop/MachineProtection/mpsConfiguration/database/XYZ/mpsdb.sqlite3 password
- XYZ - the current Config version (caget IOC:BSY0:MP01:DBVERS)
- password - the current password (see also #Launch Script)
in the "Program arguments" area. - Stop the production server (see #Start / Stop)
- Start an instance of MPS GUI
- Press "Run"
"Poke" MPS
Code Block caput POSI:EP02:400:MTLM_LGC_BYPV 1
wait 10 seconds!
Code Block caput POSI:EP02:400:MTLM_LGC_BYPV 0
- Check the HistoryViewer tab on the MPS GUI
- Stop MpsHistManager
- Important: start the production server (see #Start / Stop)
...
- Java representation of an MPS message
Code Block |
---|
///****************************************************************************
// * Data Pointers
// ****************************************************************************/
///* Note: The history message header begins at the first byte of TCP Data
// */
//
//#define HISTORY_MESSAGE_HEADER_SECTION_POINTER(_pointerToFullMessage) ((epicsInt8 *)(_pointerToFullMessage) + 0)
//#define HISTORY_MESSAGE_PROTOCOL_VERSION_POINTER(_pointerToHistoryHeader) ((epicsUInt8 *)(_pointerToHistoryHeader) + 0)
//#define HISTORY_MESSAGE_TYPE_POINTER(_pointerToHistoryHeader) ((epicsUInt8 *)(_pointerToHistoryHeader) + 1)
//#define HISTORY_MESSAGE_DATA_SECTION_POINTER(_pointerToHistoryHeader) ((epicsInt8 *)(_pointerToHistoryHeader) + 2)
//
//#define HISTORY_MESSAGE_PROTOCOL_VERSION(_pointerToHistoryHeader) (*HISTORY_MESSAGE_PROTOCOL_VERSION_POINTER(_pointerToHistoryHeader))
//#define HISTORY_MESSAGE_TYPE(_pointerToHistoryHeader) (*HISTORY_MESSAGE_TYPE_POINTER(_pointerToHistoryHeader))
//
///****************************************************************************
// * Super Message
// ****************************************************************************/
///* All history message struct data.
// */
//
//
//
//#define HISTORY_SUPER_MESSAGE_SIZE (16 + MPSHistoryProtocolHeaderSize)
//
//#define HISTORY_SUPER_TIMESTAMP_SECPASTEPOCH_POINTER(_pointerToHistoryData) ((epicsUInt32 *)((_pointerToHistoryData) + 0))
//#define HISTORY_SUPER_TIMESTAMP_NSEC_PULSEID_POINTER(_pointerToHistoryData) ((epicsUInt32 *)((_pointerToHistoryData) + 4))
//#define HISTORY_SUPER_TIMESLOT_POINTER(_pointerToHistoryData) ((epicsUInt8 *)((_pointerToHistoryData) + 8))
//#define HISTORY_SUPER_TYPE_POINTER(_pointerToHistoryData) ((epicsUInt8 *)((_pointerToHistoryData) + 9))
//#define HISTORY_SUPER_ID_POINTER(_pointerToHistoryData) ((epicsUInt32 *)((_pointerToHistoryData) + 10))
//#define HISTORY_SUPER_OLD_VALUE_POINTER(_pointerToHistoryData) ((epicsUInt32 *)((_pointerToHistoryData) + 14))
//#define HISTORY_SUPER_NEW_VALUE_POINTER(_pointerToHistoryData) ((epicsUInt32 *)((_pointerToHistoryData) + 18))
//
//#define HISTORY_SUPER_TIMESTAMP_SECPASTEPOCH(_pointerToHistoryData) (*HISTORY_SUPER_TIMESTAMP_SECPASTEPOCH_POINTER(_pointerToHistoryData))
//#define HISTORY_SUPER_TIMESTAMP_NSEC_PULSEID(_pointerToHistoryData) (*HISTORY_SUPER_TIMESTAMP_NSEC_PULSEID_POINTER(_pointerToHistoryData))
//#define HISTORY_SUPER_TIMESLOT(_pointerToHistoryData) (*HISTORY_SUPER_TIMESLOT_POINTER(_pointerToHistoryData))
//#define HISTORY_SUPER_TYPE(_pointerToHistoryData) (*HISTORY_SUPER_TYPE_POINTER(_pointerToHistoryData))
//#define HISTORY_SUPER_ID(_pointerToHistoryData) (*HISTORY_SUPER_ID_POINTER(_pointerToHistoryData))
//#define HISTORY_SUPER_OLD_VALUE(_pointerToHistoryData) (*HISTORY_SUPER_OLD_VALUE_POINTER(_pointerToHistoryData))
//#define HISTORY_SUPER_NEW_VALUE(_pointerToHistoryData) (*HISTORY_SUPER_NEW_VALUE_POINTER(_pointerToHistoryData))
|
...
- An instance of Runnable that periodically saves messages to the Oracle DB
Eli wrote a PL/SQL procedure that hides (almost) all the details
Code Block BEGIN MPS_HISTORY.MPS_HISTORY_PKG.DML_%s1 (%s2); END;
- %s1 = table name
- %s2 = CSVs in the same order as in the schema with following caveats:
- top-to-bottom = left-to-right
- ignore the ID column
- replace the FKs with enums from the referenced table
...
- Contains (almost) all parameters and settings for the module
Including the address of the MPS IOC that sends messages
Code Block public static final InetSocketAddress SOCKET_ADDRESS = new InetSocketAddress("ioc-bsy0-mp01.slac.stanford.edu", 30000);
...
- Add a note in $MPSHIST_ROOT/RELEASE_NOTES
- Increment the tag version accordingly
- Commit to CVS
- Tag with mpshist-R#-#-#
Check out the tagged version into production
Code Block cd $PHYSICS_TOP/release cvs co -r mpshist-R#-#-# -d mpshist-R#-#-# physics/mps/mpshist
- Select File => New Java project => Create project from existing source
- Select $PHYSICS_TOP/release/mpshist-R#-#-#
- Name the project mpshist-R#-#-#
- Press "Finish"
- Right-click on the new project mpshist-R#-#-# => Export...
- Select Java => JAR file
- Check mpshist-R#-#-# in "Resources to export"
- Check "Export generated class files and resources"
As the export destination, type (and/or select)
Code Block $PHYSICS_TOP/release/mpshist-R#-#-#/jar/mpshist.jar
- Press "Finish"
Move the symbolic link
Code Block cd $PHYSICS_TOP/ rm -rf mpshist; ln -s release/mpshist-R#-#-# mpshist
...
- Only one MPS History Server is active at any time
To start a new server, you must login as laci on lcls-daemon2
Code Block /etc/rc3.d/S99st.mpshist start
To stop a production server, type
Code Block /etc/rc3.d/S99st.mpshist stop
- Wait 10 seconds!
...
- To check for cmlog messages, specify "MPS History" as facility.
Is the server running?
To test whether the Server is running, go as laci to lcls-daemon2
Code Block ps -ef | grep mpshist
- Also, check nohup.out in laci's home directory
Is the server working?
To test whether the server is working, use POSI:EP02:400:MTLM_LGC_BYPV, e.g.
Code Block caput POSI:EP02:400:MTLM_LGC_BYPV 1 caput POSI:EP02:400:MTLM_LGC_BYPV 0
Verify that there is a message in the MPS GUI (not in cmlog).
Reboot
...