Source code for pychron.hardware.core.communicators.gpib_communicator

# ===============================================================================
# Copyright 2011 Jake Ross
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ===============================================================================

# ============= enthought library imports =======================
# from traits.api import HasTraits, on_trait_change, Str, Int, Float, Button
# from traitsui.api import View, Item, Group, HGroup, VGroup

# ============= standard library imports ========================
# ============= local library imports  ==========================
from pychron.hardware.core.communicators.communicator import (
    Communicator,
    remove_eol_func,
)
from pychron.hardware.core.communicators.visa import resource_manager


[docs]class GpibCommunicator(Communicator): """ uses PyVisa as main interface to GPIB. currently (8/27/14) need to use a 32bit python version. The NI488.2 framework does not work with a 64bit distribution """ primary_address = 0 secondary_address = 0 def open(self, *args, **kw): self.debug("openning gpib communicator") self.handle = resource_manager.get_instrument( "GPIB{}::{}::INSTR".format(self.primary_address, self.secondary_address) ) if self.handle is not None: self.simulation = False return True def load(self, config, path, **kw): self.set_attribute( config, "primary_address", "Communications", "primary_address" ) self.set_attribute( config, "secondary_address", "Communications", "secondary_address", optional=False, ) return True def trigger(self): self.handle.trigger() def ask(self, cmd, remove_eol=True, verbose=False): re = self.handle.query(cmd) if remove_eol: re = remove_eol_func(re) return re def tell(self, cmd, verbose=False): self.handle.write(cmd)
# address = 16 # # def load(self, config, path): # return True # # def open(self, *args, **kw): # try: # self.handle = cdll.LoadLibrary(NI_PATH) # except: # return False # # self.dev_handle = self.handle.ibdev(0, self.address, 0, 4, 1, 0) # return True # # print self.dev_handle # # if self.dev_handle < 0: # # self.simulation = True # # else: # # self.simulation = False # # # # # # print self.simulation, 'fff' # # return not self.simulation # # def ask(self, cmd, verbose=True, *args, **kw): # # self.handle.ibask(self.dev_handle) # if self.handle is None: # if verbose: # self.info('no handle {}'.format(cmd.strip())) # return # # self._lock.acquire() # r = '' # retries = 5 # i = 0 # while len(r) == 0 and i < retries: # self._write(cmd) # time.sleep(0.05) # r = self._read() # # i += 1 # # if verbose: # self.log_response(cmd, r) # # self.handle.ibclr(self.dev_handle) # self._lock.release() # # return r # # def tell(self, *args, **kw): # self.write(*args, **kw) # # def write(self, cmd, verbose=True, *args, **kw): # # self._write(cmd, *args, **kw) # if verbose: # self.info(cmd) # # def _write(self, cmd, *args, **kw): # if self.simulation: # pass # else: # cmd += self._terminator # self.handle.ibwrt(self.dev_handle, cmd, len(cmd)) # # def _read(self): # if self.simulation: # pass # else: # b = create_string_buffer('\0' * 4096) # retries = 10 # i = 0 # while len(b.value) == 0 and i <= retries: # self.handle.ibrd(self.dev_handle, b, 4096) # i += 1 # return b.value.strip() # # if __name__ == '__main__': # g = GPIBCommunicator() # g.open() # # print g.tell('1HX') # # print g.ask('2TP?') # ============= EOF ====================================