def running(self): info("Starting IOC...") from CAServer import casget, casput, casdel, casmonitor from time import time from sleep import sleep for name in self.PV_names: PV_name = self.PV_name(name) casmonitor(PV_name, callback=self.monitor) while not self.running_cancelled: t = time() for name in self.PV_names: if time() - self.last_updated(name) > self.update_period(name): PV_name = self.PV_name(name) value = getattr(self.object, name) ##info("%s=%r" % (PV_name,value)) casput(PV_name, self.transform(name, value), update=False) self.set_update_time(name) if not self.running_cancelled: sleep(t + self.min_update_period - time()) for name in self.names: PV_name = self.PV_name(name) casdel(PV_name)
def startup(self): from CAServer import casput,casmonitor from CA import caput,camonitor from numpy import nan casput(self.prefix+".ENABLE",self.intervention_enabled) casput(self.prefix+'.RUNNING', self.running) casput(self.prefix+".KILL",value = 'write password to kill the process') casput(self.prefix+".LIST_ALL_PVS",value = self.get_pv_list()) # Monitor client-writable PVs. casmonitor(self.prefix+".KILL",callback=self.monitor)
def CAserver_init(self): from CAServer import casget, casput self.running = False self.CA_update_t = 0.3 casput(self.prefix + '.RUNNING', self.running) casput(self.prefix + '.UPDATE_T', self.CA_update_t) #controls casput(self.prefix + ".broadcast_period", self.broadcast_period) #indicators casput(self.prefix + ".pressure_upstream", nan) casput(self.prefix + ".pressure_downstream", nan) casput(self.prefix + ".pressure_barometric", nan) casput(self.prefix + ".temperature_hutch", nan) #monitors casmonitor(self.prefix + ".broadcast_period", callback=self.monitor) try: casput(self.prefix + '.SOCKET', self.socket) except: error(traceback.format_exc())
def run(self): """Run EPICS IOC""" from CAServer import casput, casmonitor, casdel from numpy import isfinite, nan from time import time from sleep import sleep self.running = True casput(self.prefix + ".SCAN", self.SCAN) casput(self.prefix + ".DESC", "State") casput(self.prefix + ".EGU", "") # Monitor client-writable PVs. casmonitor(self.prefix + ".SCAN", callback=self.monitor) casmonitor(self.prefix + ".VAL", callback=self.monitor) was_online = False while self.running: if self.SCAN > 0 and isfinite(self.SCAN): SCAN = self.SCAN online = Ramsey_RF_driver.online if online: if online and not was_online: info("Reading configuration...") casput(self.prefix + ".COMM", Ramsey_RF_driver.COMM) casput(self.prefix + ".SCANT", nan) t = time() casput(self.prefix + ".VAL", float(Ramsey_RF_driver.VAL)) sleep(t + 1.0 * SCAN - time()) casput(self.prefix + ".SCANT", time() - t) # post actual scan time for diagnostics else: casput(self.prefix + ".VAL", nan) sleep(SCAN) was_online = online else: casput(self.prefix + ".SCANT", nan) sleep(0.1) casdel(self.prefix)
def startup(self): from CAServer import casput,casmonitor from CA import caput,camonitor from numpy import nan casput(self.prefix+".MEAN_TOP",nan) casput(self.prefix+".MEAN_BOTTOM",nan) casput(self.prefix+".MEAN_MIDDLE",nan) casput(self.prefix+".MEAN",nan) casput(self.prefix+".RBV",nan) casput(self.prefix+".STDEV",nan) casput(self.prefix+".VAL",nan) casput(self.prefix+".ENABLE",self.intervention_enabled) casput(self.prefix+'.RUNNING', self.running) casput(self.prefix+".KILL",value = 'write password to kill the process') casput(self.prefix+".processID",value = os.getpid()) casput(self.prefix+".computer_name",value = computer_name) casput(self.prefix+".ip_address",value = ip_address) casput(self.prefix+".LIST_ALL_PVS",value = self.get_pv_list()) # Monitor client-writable PVs. casmonitor(self.prefix+".KILL",callback=self.monitor)
def run(self): """Run EPICS IOC""" from CAServer import casput, casmonitor, casdel from numpy import isfinite, isnan from time import time self.running = True casput(self.prefix + ".SCAN", self.SCAN) casput(self.prefix + ".DESC", "Temp") casput(self.prefix + ".EGU", "C") # Monitor client-writable PVs. casmonitor(self.prefix + ".SCAN", callback=self.monitor) casmonitor(self.prefix + ".MFILTER", callback=self.monitor) casmonitor(self.prefix + ".IFILTER", callback=self.monitor) casmonitor(self.prefix + ".TCTYPE", callback=self.monitor) while self.running: if self.SCAN > 0 and isfinite(self.SCAN): if time() - self.last_valid_reply > 10: if not isnan(thermocouple_driver.VAL): info("Reading configuration") casput(self.prefix + ".COMM", thermocouple_driver.COMM) casput(self.prefix + ".MFILTER", thermocouple_driver.MFILTER) casput(self.prefix + ".IFILTER", thermocouple_driver.IFILTER) casput(self.prefix + ".TCTYPE", thermocouple_driver.TCTYPE) t = time() VAL = thermocouple_driver.VAL if not isnan(VAL): self.last_valid_reply = time() casput(self.prefix + ".VAL", VAL) sleep(t + 1.00 * self.SCAN - time()) casput(self.prefix + ".SCANT", time() - t) # post actual scan time for diagnostics else: casput(self.prefix + ".SCANT", nan) sleep(0.1) casdel(self.prefix)
def update(self): from CAServer import casput, casmonitor from configuration_driver import configuration for prop in self.global_properties: PV_name = (self.prefix + "." + prop).upper() value = self.getattr(configuration, prop, expand=True) if value is not None: casput(PV_name, value, update=False) casmonitor(PV_name, callback=self.monitor) for conf in configuration.configurations: for prop in self.configuration_properties: PV_name = (self.prefix + "." + conf.name + "." + prop).upper() value = self.getattr(conf, prop, expand=True) if value is not None: casput(PV_name, value, update=False) casmonitor(PV_name, callback=self.monitor) for prop in self.motor_properties: for motor_num in range(0, conf.n_motors): PV_name = (self.prefix + "." + conf.name + ".MOTOR" + str(motor_num + 1) + "." + prop).upper() value = self.getitem(self.getattr(conf, prop), motor_num) if value is not None: casput(PV_name, value, update=False) casmonitor(PV_name, callback=self.monitor)
def run(self): """Run EPICS IOC""" from CAServer import casput, casmonitor, casdel from numpy import isfinite from time import time self.running = True # Initialization casput(self.prefix + ".SCAN", self.scan_time) casput(self.prefix + ".SPMG", 3) # 0:Stop,1:Pause,2:Move,3:Go for i in range(0, self.N): casput(self.prefix + "%d.AOUT" % (i + 1), "") # ASCII output string to device casput(self.prefix + "%d.AINP" % (i + 1), "") # ASCII input string from device # Static PVs for i in range(0, self.N): casput(self.prefix + "%d:VOLUME.DESC" % (i + 1), "Pump%d" % (i + 1)) casput(self.prefix + "%d:VOLUME.EGU" % (i + 1), "uL") casput(self.prefix + "%d:PORT.DESC" % (i + 1), "Valve%d" % (i + 1)) casput(self.prefix + "%d:PORT.EGU" % (i + 1), "OIB") casput(self.prefix + "%d:VOLUME.CNEN" % (i + 1), 1) casput(self.prefix + "%d:PORT.CNEN" % (i + 1), 1) # Monitor client-writable PVs casmonitor(self.prefix + ".SCAN", callback=self.monitor) casmonitor(self.prefix + ".SPMG", callback=self.monitor) for i in range(0, self.N): casmonitor(self.prefix + "%d.AOUT" % (i + 1), callback=self.monitor) casmonitor(self.prefix + "%d.AINP" % (i + 1), callback=self.monitor) casmonitor(self.prefix + "%d:VOLUME.VAL" % (i + 1), callback=self.monitor) casmonitor(self.prefix + "%d:VOLUME.VELO" % (i + 1), callback=self.monitor) casmonitor(self.prefix + "%d:PORT.VAL" % (i + 1), callback=self.monitor) casmonitor(self.prefix + "%d:VOLUME.STOP" % (i + 1), callback=self.monitor) casmonitor(self.prefix + "%d:PORT.STOP" % (i + 1), callback=self.monitor) while self.running: if self.scan_time > 0 and isfinite(self.scan_time): for i in range(0, self.N): if comm_ports.max_time_between_replies[i] > 10: comm_ports.max_time_between_replies[i] = 0 debug("Reading pump %d configuration" % (i + 1)) casput(self.prefix + "%d:VOLUME.VAL" % (i + 1), volumes.values([i])[0]) casput(self.prefix + "%d:VOLUME.LLM" % (i + 1), volumes.low_limits([i])[0]) casput(self.prefix + "%d:VOLUME.HLM" % (i + 1), volumes.high_limits([i])[0]) casput(self.prefix + "%d:PORT.VAL" % (i + 1), ports.values([i])[0]) t = time() values = volumes.values(range(0, self.N)) for i in range(0, self.N): casput(self.prefix + "%d:VOLUME.RBV" % (i + 1), values[i]) self.process_command_queue() values = ports.values(range(0, self.N)) for i in range(0, self.N): casput(self.prefix + "%d:PORT.RBV" % (i + 1), values[i]) self.process_command_queue() moving = volumes.moving(range(0, self.N)) for i in range(0, self.N): casput(self.prefix + "%d:VOLUME.DMOV" % (i + 1), not moving[i]) casput(self.prefix + "%d:PORT.DMOV" % (i + 1), not moving[i]) self.process_command_queue() speeds = volumes.speeds(range(0, self.N)) for i in range(0, self.N): casput(self.prefix + "%d:VOLUME.VELO" % (i + 1), speeds[i]) self.process_command_queue() sleep(t + 1 * self.scan_time - time()) casput(self.prefix + ".SCANT", time() - t) # post actual scan time for diagnostics else: casput(self.prefix + ".SCANT", nan) sleep(0.1) casdel(self.prefix)
def init(self): """ define parameters for current operation initializes image analyzer """ from optical_image_analyzer import image_analyzer image_analyzer.init() from CAServer import casput, casmonitor from CA import caput, camonitor from numpy import nan info('initializing the %s server' % self.prefix) casput(self.prefix + ".RBV", nan) casput(self.prefix + ".VAL", nan) casput(self.prefix + ".MEAN_TOP", nan) casput(self.prefix + ".MEAN_BOTTOM", nan) casput(self.prefix + ".MEAN_MIDDLE", nan) casput(self.prefix + ".MEAN", nan) casput(self.prefix + ".STDEV", nan) casput(self.prefix + '.RUNNING', self.running) #changable control parameters casput(self.prefix + '.region_offset_x', self.region_offset_x) casput(self.prefix + '.region_size_x', self.region_size_x) casput(self.prefix + '.region_offset_y', self.region_offset_y) casput(self.prefix + '.region_size_y', self.region_size_y) casput(self.prefix + '.warning', self.warning) casput(self.prefix + '.warning_threshold', self.warning_threshold) casput(self.prefix + ".KILL", value='write password to kill the process') #PV with a list of all process variable registered at the current Channel Access Server casput(self.prefix + ".LIST_ALL_PVS", value=self.get_pv_list()) # Monitor client-writable PVs. casmonitor(self.prefix + ".KILL", callback=self.monitor) casmonitor(self.prefix + ".region_size_x", callback=self.monitor) casmonitor(self.prefix + ".region_offset_x", callback=self.monitor) casmonitor(self.prefix + ".region_size_y", callback=self.monitor) casmonitor(self.prefix + ".region_offset_y", callback=self.monitor) casmonitor(self.prefix + ".warning_threshold", callback=self.monitor)
def monitors_setup(self): """Monitor client-writable PVs.""" from CAServer import casmonitor, casput for name in self.property_names: PV_name = self.prefix + name.upper() casmonitor(PV_name, callback=self.monitor)
def startup(self): from CAServer import casput,casmonitor from CA import caput,camonitor from numpy import nan #self.P_default , self.I_default , self.D_default = 1.0,0.316,0.562 #print('startup with prefix = %r' %self.prefix) casput(self.prefix+".SCAN",self.SCAN) casput(self.prefix+".DESC",value = "Temperature server IOC: a System Layer server that orchestrates setting on Lightwave IOC and Oasis IOC.", update = False) casput(self.prefix+".EGU",value = "C") # Set defaults casput(self.prefix+".VAL",value = nan) casput(self.prefix+".VAL_ADV",value = nan) casput(self.prefix+".RBV",value = nan) casput(self.prefix+".P",value = nan) casput(self.prefix+".I",value = nan) casput(self.prefix+".TIME_POINTS",self.time_points) casput(self.prefix+".TEMP_POINTS",self.temp_points) casput(self.prefix+".FAULTS"," ") casput(self.prefix+".DMOV",value = nan) casput(self.prefix+".KILL",value = 'write password to kill the process') casput(self.prefix+".P_default",value = self.P_default) casput(self.prefix+".I_default",value = self.I_default) casput(self.prefix+".D_default",value = self.D_default) casput(self.prefix+".oasis_slave",value = self.oasis_slave) casput(self.prefix+".temperature_oasis_switch",value = self.temperature_oasis_switch) casput(self.prefix+".idle_temperature_oasis",value = self.idle_temperature_oasis) casput(self.prefix+".temperature_oasis_limit_high",value = self.temperature_oasis_limit_high) casput(self.prefix+".oasis_headstart_time",value = self.oasis_headstart_time) casput(self.prefix+".lightwave_prefix",value = self.lightwave_prefix) casput(self.prefix+".oasis_prefix",value = self.oasis_prefix) casput(self.prefix+".set_point_update_period",value = self.set_point_update_period) casput(self.prefix+".oasis_RBV",value = nan) casput(self.prefix+".oasis_VAL",value = nan) #PV with a list of all process variable registered at the current Channel Access Server casput(self.prefix+".LIST_ALL_PVS",value = self.get_pv_list()) # Monitor client-writable PVs. casmonitor(self.prefix+".VAL",callback=self.monitor) casmonitor(self.prefix+".VAL_ADV",callback=self.monitor) casmonitor(self.prefix+".TIME_POINTS",callback=self.monitor) casmonitor(self.prefix+".TEMP_POINTS",callback=self.monitor) casmonitor(self.prefix+".KILL",callback=self.monitor) casmonitor(self.prefix+".P_default",callback=self.monitor) casmonitor(self.prefix+".I_default",callback=self.monitor) casmonitor(self.prefix+".D_default",callback=self.monitor) casmonitor(self.prefix+".oasis_slave",callback=self.monitor) casmonitor(self.prefix+".temperature_oasis_switch",callback=self.monitor) casmonitor(self.prefix+".idle_temperature_oasis",callback=self.monitor) casmonitor(self.prefix+".temperature_oasis_limit_high",callback=self.monitor) casmonitor(self.prefix+".oasis_headstart_time",callback=self.monitor) casmonitor(self.prefix+".lightwave_prefix",callback=self.monitor) casmonitor(self.prefix+".oasis_prefix",callback=self.monitor) casmonitor(self.prefix+".set_point_update_period",callback=self.monitor) ############################################################################# ## Monitor server-writable PVs that come other servers ## Monitor Timing system IOC from timing_system import timing_system camonitor(timing_system.acquiring.PV_name,callback=self.on_acquire) ## Lightwave Temperature controller server prefix = self.lightwave_prefix camonitor(prefix+".VAL",callback=self.lightwave_monitor) camonitor(prefix+".RBV",callback=self.lightwave_monitor) camonitor(prefix+".P",callback=self.lightwave_monitor) camonitor(prefix+".I",callback=self.lightwave_monitor) camonitor(prefix+".DMOV",callback=self.lightwave_monitor) ## Oasis chiller server prefix = self.oasis_prefix camonitor(prefix+".VAL",callback=self.oasis_monitor) camonitor(prefix+".RBV",callback=self.oasis_monitor) ## Create local circular buffers from circular_buffer_LL import Server self.buffers = {} self.buffers['oasis_RBV'] = Server(size = (2,1*3600*2) , var_type = 'float64') self.buffers['oasis_VAL'] = Server(size = (2,1*3600*2) , var_type = 'float64') self.buffers['oasis_FAULTS'] = Server(size = (2,1*3600*2) , var_type = 'float64') self.buffers['lightwave_RBV'] = Server(size = (2,1*3600*2) , var_type = 'float64') self.buffers['lightwave_P'] = Server(size = (2,1*3600*2) , var_type = 'float64') self.buffers['lightwave_I'] = Server(size = (2,1*3600*2) , var_type = 'float64') self.buffers['lightwave_VAL'] = Server(size = (2,1*3600*2) , var_type = 'float64')
def run(self): """Start EPICS IOC for temperature controller (does not return)""" self.running = True casput(self.prefix + ".SCAN", self.scan_time) casput(self.prefix + ".DESC", "Temp") casput(self.prefix + ".EGU", "C") casput(self.prefix + ".BAUD", lightwave_temperature_controller.baudrate.value) # Complex Actions casput(self.prefix + ".ACTION", '') # Monitor client-writable PVs. casmonitor(self.prefix + ".SCAN", callback=self.monitor) casmonitor(self.prefix + ".BAUD", callback=self.monitor) casmonitor(self.prefix + ".VAL", callback=self.monitor) casmonitor(self.prefix + ".CNEN", callback=self.monitor) casmonitor(self.prefix + ".PIDCOF", callback=self.monitor) casmonitor(self.prefix + ".PCOF", callback=self.monitor) casmonitor(self.prefix + ".ICOF", callback=self.monitor) casmonitor(self.prefix + ".DCOF", callback=self.monitor) casmonitor(self.prefix + ".RDBD", callback=self.monitor) casmonitor(self.prefix + ".NSAM", callback=self.monitor) casmonitor(self.prefix + ".IHLM", callback=self.monitor) casmonitor(self.prefix + ".ILLM", callback=self.monitor) casmonitor(self.prefix + ".TENA", callback=self.monitor) casmonitor(self.prefix + ".P1SP", callback=self.monitor) casmonitor(self.prefix + ".P1EP", callback=self.monitor) casmonitor(self.prefix + ".P1SI", callback=self.monitor) while self.running: if self.scan_time > 0 and isfinite(self.scan_time): if lightwave_temperature_controller.max_time_between_replies > 10: lightwave_temperature_controller.max_time_between_replies = 0 info("Reading configuration") casput(self.prefix + ".COMM", lightwave_temperature_controller.port_name, update=False) #casput(self.prefix+".VAL",lightwave_temperature_controller.setT.value) casput(self.prefix + ".CNEN", lightwave_temperature_controller.enabled.value, update=False) casput(self.prefix + ".PIDCOF", lightwave_temperature_controller.feedback_loop.PID, update=False) casput( self.prefix + ".PCOF", lightwave_temperature_controller.feedback_loop.P.value, update=False) casput( self.prefix + ".ICOF", lightwave_temperature_controller.feedback_loop.I.value, update=False) casput( self.prefix + ".DCOF", lightwave_temperature_controller.feedback_loop.D.value, update=False) casput(self.prefix + ".RDBD", lightwave_temperature_controller. stabilization_threshold, update=False) casput(self.prefix + ".NSAM", lightwave_temperature_controller. stabilization_nsamples, update=False) casput(self.prefix + ".IHLM", lightwave_temperature_controller.current_high_limit, update=False) casput(self.prefix + ".ILLM", lightwave_temperature_controller.current_low_limit, update=False) casput(self.prefix + ".TENA", lightwave_temperature_controller.trigger_enabled, update=False) casput(self.prefix + ".ID", lightwave_temperature_controller.id, update=False) casput(self.prefix + ".P1SP", lightwave_temperature_controller.trigger_start, update=False) casput(self.prefix + ".P1EP", lightwave_temperature_controller.trigger_stop, update=False) casput(self.prefix + ".P1SI", lightwave_temperature_controller.trigger_stepsize, update=False) casput(self.prefix + ".processID", value=os.getpid(), update=False) casput(self.prefix + ".computer_name", value=computer_name, update=False) t = time() casput( self.prefix + ".RBV", lightwave_temperature_controller.actual_temperature.value, update=True) casput(self.prefix + ".DMOV", lightwave_temperature_controller.stable, update=False) sleep(t + 0.25 * self.scan_time - time()) casput(self.prefix + ".I", lightwave_temperature_controller.current.value, update=True) sleep(t + 0.50 * self.scan_time - time()) casput(self.prefix + ".P", lightwave_temperature_controller.power.value, update=True) sleep(t + 0.75 * self.scan_time - time()) ##if casget(self.prefix+".TENA"): # Set point may change on trigger. casput(self.prefix + ".VAL", lightwave_temperature_controller.setT.value, update=False) sleep(t + 1.00 * self.scan_time - time()) casput(self.prefix + ".SCANT", time() - t, update=False) # post actual scan time for diagnostics else: casput(self.prefix + ".SCANT", nan, update=False) sleep(0.1) casdel(self.prefix)
def startup(self): from CAServer import casput, casmonitor from numpy import nan casput(self.prefix + ".SCAN", oasis_chiller_driver.wait_time) casput(self.prefix + ".DESC", "Temp") casput(self.prefix + ".EGU", "C") # Set defaults casput(self.prefix + ".VAL", nan) casput(self.prefix + ".RBV", nan) casput(self.prefix + ".LLM", nan) casput(self.prefix + ".HLM", nan) casput(self.prefix + ".P1", nan) casput(self.prefix + ".I1", nan) casput(self.prefix + ".D1", nan) casput(self.prefix + ".P2", nan) casput(self.prefix + ".I2", nan) casput(self.prefix + ".D2", nan) casput(self.prefix + ".faults", " ") casput(self.prefix + ".fault_code", 0) casput(self.prefix + ".COMM", " ") casput(self.prefix + ".SCANT", nan) # Monitor client-writable PVs. casmonitor(self.prefix + ".SCAN", callback=self.monitor) casmonitor(self.prefix + ".VAL", callback=self.monitor) casmonitor(self.prefix + ".LLM", callback=self.monitor) casmonitor(self.prefix + ".HLM", callback=self.monitor) casmonitor(self.prefix + ".P1", callback=self.monitor) casmonitor(self.prefix + ".I1", callback=self.monitor) casmonitor(self.prefix + ".D1", callback=self.monitor) casmonitor(self.prefix + ".P2", callback=self.monitor) casmonitor(self.prefix + ".I2", callback=self.monitor) casmonitor(self.prefix + ".D2", callback=self.monitor)