def __init__(self, parent, server_record=None, field_name=None, nf=None,
        function=None, args=None, id=-1, pos=wx.DefaultPosition,
        size=wx.DefaultSize, style=0, name=wx.TextCtrlNameStr,
        validator=wx.DefaultValidator):

        # Adding wx.TE_PROCESS_ENTER to the style causes the
        # widget to generate wx.EVT_TEXT_ENTER events when
        # the Enter key is pressed.

        style = style | wx.TE_PROCESS_ENTER

        wx.TextCtrl.__init__(self, parent, id=id, value=wx.EmptyString, pos=pos,
            size=size, style=style, validator=validator)

        self.parent = parent

        if nf is None:
            self.nf = mp.Net( server_record, field_name )
        else:
            self.nf = nf

        # Test for the existence of the network field.
        try:
            self.nf.get()
        except mp.Not_Found_Error:
            self.SetValue( "NOT FOUND" )
            self.Enable(False)
            return

        # Disable the widget if the network field is read only.
        read_only = self.nf.get_attribute(mp.MXNA_READ_ONLY)

        if read_only:
            self.Enable(False)

        # Arrange for automatic updates of the value.
        if function is None:
            function = mpwx._ValueEntry_update

        self.nf.add_to_value_changed_list(self, function, args)

        # Grab scaling values from callback args
        self.local_scale, self.local_offset, self.remote_scale, self.remote_offset = args

        # Typing keys in the entry field will change the color.
        self.Bind(wx.EVT_TEXT, self.OnText)

        # <Enter> keystrokes will change the value of the MX field.
        self.Bind(wx.EVT_TEXT_ENTER, self.OnEnter)
Пример #2
0
        Called on the mx_timer, refreshes mx values in the GUI by calling
        wait_for_messages on the database.
        """
        self.mx_database.wait_for_messages(0.01)


if __name__ == '__main__':
    try:
        # First try to get the name from an environment variable.
        database_filename = os.environ["MXDATABASE"]
    except:
        # If the environment variable does not exist, construct
        # the filename for the default MX database.
        mxdir = utils.get_mxdir()
        database_filename = os.path.join(mxdir, "etc", "mxmotor.dat")
        database_filename = os.path.normpath(database_filename)

    mx_database = mp.setup_database(database_filename)
    mx_database.set_plot_enable(2)
    mx_database.set_program_name("switch_monos")

    # mx_database = None

    app = wx.App()
    frame = SWMonosFrame(None,
                         mx_database,
                         parent=None,
                         title='Test Switch Monos')
    frame.Show()
    app.MainLoop()
Пример #3
0
###mp_package_dir = [ "/home/lavender/mxdev/0.56.0/mp/libMp" ]

mp_package_dir = [ mxdir + "lib/mp" ]

#  Add the Mp package directory to the module load path.

sys.path[:0] = mp_package_dir

#  Load the Mp package.

import Mp

#  Read in the MX database used by this example.

record_list = Mp.setup_database( database_filename )

#  Find the devices to be used by the scan.

energy_motor_record = record_list.get_record("energy")

i_zero_record = record_list.get_record("Io")

i_trans_record = record_list.get_record("It")

timer_record = record_list.get_record("timer1")

#  Setup the scan parameters for a copper K edge scan.

start = 8950.0		# in eV
step_size = 1.0		# in eV
Пример #4
0
import sys
sys.path[:0] = ["/opt/mx/lib/mp"]

import Mp
import MpCa

input_signal_name = "i0"
output_pv_name = "ID18:SteeringGoodness"
timer_name = "joerger_timer"

measurement_time = 1.0  # in seconds

print "Setting up.  Please wait..."

mx_database = Mp.setup_database("/opt/mx/etc/mxmotor.dat")

input_signal = mx_database.get_record(input_signal_name)

output_pv = MpCa.PV(output_pv_name)

timer = mx_database.get_record(timer_name)

print "Copying steering signal from '%s' to '%s' using timer '%s'" % \
 ( input_signal_name, output_pv_name, timer_name )

while 1:
    timer.clear()

    timer.start(measurement_time)
Пример #5
0
    def __init__(self,
                 motor_name,
                 mx_database,
                 parent,
                 panel_id=wx.ID_ANY,
                 panel_name=''):
        """
        Initializes the custom panel. Important parameters here are the
        ``motor_name``, and the ``mx_database``.

        :param str motor_name: The motor name in the Mx database.

        :param Mp.RecordList mx_database: The database instance from Mp.

        :param wx.Window parent: Parent class for the panel.

        :param int panel_id: wx ID for the panel.

        :param str panel_name: Name for the panel.
        """
        wx.Panel.__init__(self, parent, panel_id, name=panel_name)
        self.mx_database = mx_database
        self.motor_name = motor_name
        self.motor = self.mx_database.get_record(self.motor_name)
        self.mtr_type = self.motor.get_field('mx_type')
        self.scale = float(self.motor.get_field('scale'))
        self.offset = float(self.motor.get_field('offset'))

        self._enabled = True
        self.scan_frame = None

        # if platform.system() == 'Darwin':
        #     font = self.GetFont()
        # else:
        #     font = wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)
        # # self.SetFont(font)
        font = self.GetFont()
        self.vert_size = font.GetPixelSize()[1] + 5

        self.is_epics = False
        self.is_slit_mtr = False

        self.epics_motor = None

        if self.mtr_type == 'epics_motor':
            self.is_epics = True

            self.epics_pv_name = self.motor.get_field('epics_record_name')

            self.epics_motor = epics.Motor(self.epics_pv_name)

            self.pos_pv = self.epics_motor.PV('RBV')

            # self.limit_pv = mpca.PV("{}.LVIO".format(self.epics_pv_name))
            # self.callback = self.limit_pv.add_callback(mpca.DBE_VALUE,
            #     custom_widgets.on_epics_limit, (self.limit_pv, self))
            # self.limit_pv = self.epics_motor.PV('LVIO')

            if self.scale > 0:
                nlimit = "LLM"
                plimit = "HLM"
            else:
                nlimit = "HLM"
                plimit = "LLM"

            self.nlimit_pv = self.epics_motor.PV(nlimit)
            self.plimit_pv = self.epics_motor.PV(plimit)

            self.set_pv = self.epics_motor.PV('SET')

            self.pos_pv.get()
            # self.limit_pv.get()
            self.nlimit_pv.get()
            self.plimit_pv.get()
            self.set_pv.get()

            self.epics_motor.add_callback('LVIO', self._on_epics_soft_limit)
            self.epics_motor.add_callback('HLS', self._on_epics_hard_limit)
            self.epics_motor.add_callback('LLS', self._on_epics_hard_limit)
            self.epics_motor.add_callback('SPMG', self._on_epics_disable)

        if self.mtr_type == 'network_motor':
            self.server_record_name = self.motor.get_field('server_record')
            self.remote_record_name = self.motor.get_field(
                'remote_record_name')
            self.server_record = self.mx_database.get_record(
                self.server_record_name)

            self.remote_offset = mp.Net(
                self.server_record,
                '{}.offset'.format(self.remote_record_name))
            self.remote_scale = mp.Net(
                self.server_record, '{}.scale'.format(self.remote_record_name))

            remote_type_name = '{}.mx_type'.format(self.remote_record_name)
            remote_type = mp.Net(self.server_record, remote_type_name)

            r_type = remote_type.get()
            try:
                str(r_type)
            except Exception:
                r_type = ''

            if r_type == 'slit_motor':
                self.is_slit_mtr = True

        top_sizer = self._create_layout()

        self.SetSizer(top_sizer)
Пример #6
0
###mp_package_dir = [ "/home/lavender/mxdev/0.56.0/mp/libMp" ]

mp_package_dir = [ mxdir + "lib/mp" ]

#  Add the Mp package directory to the module load path.

sys.path[:0] = mp_package_dir

#  Load the Mp package.

import Mp

#  Read in the MX database used by this example.

record_list = Mp.setup_database( database_filename )

#  Find the devices to be used by the scan.

energy_motor_record = record_list.get_record("energy")

i_zero_record = record_list.get_record("Io")

i_trans_record = record_list.get_record("It")

timer_record = record_list.get_record("timer1")

#  Setup the scan parameters for a copper K edge scan.

start = 8950.0		# in eV
step_size = 1.0		# in eV