コード例 #1
0
 def __init__(self, boardList):
     self.boardList = boardList
     #pv created to place VPD demand voltages
     self.placevalues = builder.boolOut("VPDplacevalues",
                                        ZNAM=0,
                                        ONAM=1,
                                        HIGH=0.1,
                                        on_update=self.place_voltages)
     #pv created to turn VPD voltages to 0
     self.turnvoltageoff = builder.boolOut("turnoffVPD",
                                           ZNAM=0,
                                           ONAM=1,
                                           HIGH=0.1,
                                           on_update=self.turnoff_VPD)
     self.activefile = 1
     self.dictionary = {}
     self.chooseFile = builder.longOut("VPD_setting",
                                       initial_value=self.activefile,
                                       on_update=self.request_change)
     self.reload = builder.boolOut("reload_VPD",
                                   ZNAM=0,
                                   ONAM=1,
                                   HIGH=0.1,
                                   on_update=self.reload_dictionary)
     self.fileInUse = builder.stringIn("VPDfilestatus")
     self.listofstringIns = []
     self.maximum = 10
     for i in range(self.maximum):
         self.listofstringIns.append(
             builder.stringIn("VPDfile" + str(i + 1)))
コード例 #2
0
def build_typed_pvs():
    """Build generic PVs"""
    dynamic_pvs = {}

    builder.aOut('AO:STATIC', **ANALOGUE_VALUES)
    builder.aIn('AI:STATIC', **ANALOGUE_VALUES)
    dynamic_pvs.update({
        builder.aOut('AO:DYNAMIC', **ANALOGUE_VALUES):
        lambda pv: increment(pv, 10)})

    builder.longOut('LONGO:STATIC',**LONG_VALUES)
    builder.longIn('LONGI:STATIC',**LONG_VALUES)
    dynamic_pvs.update({
        builder.aOut('LONGO:DYNAMIC', **LONG_VALUES):
        lambda pv: increment(pv, 10)})

    builder.boolOut('BOOLO:STATIC', **BOOLEAN_VALUES)
    builder.boolIn('BOOLI:STATIC', **BOOLEAN_VALUES)
    dynamic_pvs.update({
        builder.boolOut('BOOLO:DYNAMIC', **BOOLEAN_VALUES):
        lambda pv: increment(pv, 1)})

    builder.stringOut('STRINGO:STATIC', initial_value=STRINGS[0])
    builder.stringIn('STRINGI:STATIC', initial_value=STRINGS[0])
    dynamic_pvs.update({
        builder.stringOut('STRINGO:DYNAMIC', initial_value=STRINGS[0]):
        update_string})

    enum_pv = builder.mbbOut('MBBO:STATIC', *STRINGS, initial_value=0)
    enum_pv = builder.mbbIn('MBBI:STATIC', *STRINGS, initial_value=0)
    dynamic_pvs.update({
        builder.mbbOut('MBBO:DYNAMIC', *STRINGS, initial_value=0):
        lambda pv: increment(pv, len(STRINGS) - 1)})
    return lambda: update_pvs(dynamic_pvs)
コード例 #3
0
 def __init__(self, boardList):
     self.boardList = boardList
     #create pv to place BBC voltages
     self.placevalues = builder.boolOut("BBCplacevalues",
                                        ZNAM=0,
                                        ONAM=1,
                                        HIGH=0.1,
                                        on_update=self.place_voltages)
     self.diction_ary = {}
     self.activefile = 1
     self.chooseFile = builder.longOut("BBC_setting",
                                       initial_value=self.activefile,
                                       on_update=self.request_change)
     #create pv to reload dictionary if changes were made according to the files where demand voltages
     #are retrieved from
     self.reload = builder.boolOut("reload_BBC",
                                   ZNAM=0,
                                   ONAM=1,
                                   HIGH=0.1,
                                   on_update=self.reload_dictionary)
     #create pv to retrieve file status of BBC
     self.fileInUse = builder.stringIn("BBCfilestatus")
     #create pv to set BBC voltages to zero
     self.turnoffBBC = builder.boolOut("BBCturnoff",
                                       ZNAM=0,
                                       ONAM=1,
                                       HIGH=0.1,
                                       on_update=self.turnoff_BBC)
     self.listofstringIns = []
     self.maximum = 10
     for i in range(self.maximum):
         self.listofstringIns.append(
             builder.stringIn("BBCfile" + str(i + 1)))
コード例 #4
0
 def __init__(self, machine, name):
     builder.SetDeviceName(name)
     self.com = ModbusClient(host=machine, port=4000, auto_open=True)  #4000
     self.com.mode(constants.MODBUS_RTU)
     stat = self.com.open()
     self.pv_stat = builder.aIn("stat")
     self.pv_stat.PREC = 1
     self.pv_stat.LOPR = 0
     self.pv_stat.HOPR = 100
     self.pv_temp = builder.aIn("temp")
     self.pv_temp.PREC = 1
     self.pv_temp.LOPR = 0
     self.pv_temp.HOPR = 100
     self.pv_humi = builder.aIn("humidity")
     self.pv_humi.PREC = 1
     self.pv_humi.LOPR = 0
     self.pv_humi.HOPR = 100
     self.pv_humi.HSV = "MINOR"
     self.pv_humi.HHSV = "MAJOR"
     self.pv_humi.HIGH = 45
     self.pv_humi.HIHI = 50
     self.pv_flow = builder.aIn("flow")
     self.pv_flow.PREC = 0
     self.pv_flow.LOPR = 0
     self.pv_flow.HOPR = 600
     self.pv_flow.LOLO = 250
     self.pv_flow.LOW = 300
     self.pv_flow.HIGH = 480
     self.pv_flow.HIHI = 520
     self.pv_flow.LSV = "MINOR"
     self.pv_flow.LLSV = "MAJOR"
     self.pv_flow.HSV = "MINOR"
     self.pv_flow.HHSV = "MAJOR"
     self.stat_pv = builder.boolIn("status",
                                   ZNAM="off",
                                   ONAM="on",
                                   DESC=name)
     self.stat_pv.ZSV = "MAJOR"
     self.pv_on = builder.boolOut("on",
                                  ZNAM="0",
                                  ONAM="1",
                                  HIGH=0.1,
                                  on_update=self.turnOn)
     self.pv_off = builder.boolOut("off",
                                   ZNAM="0",
                                   ONAM="1",
                                   HIGH=0.1,
                                   on_update=self.turnOff)
     self.busy = False
     self.pv_act = builder.boolOut("activity", ZNAM="0", ONAM="1", HIGH=1)
     self.pv_was_on = builder.boolOut("was_on",
                                      ZNAM="0",
                                      ONAM="1",
                                      HIGH=1.5)
     self.pv_was_off = builder.boolOut("was_off",
                                       ZNAM="0",
                                       ONAM="1",
                                       HIGH=1.5)
     self.id_temp = 0
     self.id_stat = 1
コード例 #5
0
    def test_blocking_global_flag_creates_attributes(self):
        """Test that the global blocking flag creates the expected attributes"""
        SetBlocking(True)
        bo1 = builder.boolOut("OUTREC1")
        self.check_record_blocking_attributes(bo1)

        SetBlocking(False)
        bo2 = builder.boolOut("OUTREC2")
        assert bo2._blocking is False

        bo3 = builder.boolOut("OUTREC3", blocking=True)
        self.check_record_blocking_attributes(bo3)
コード例 #6
0
 def __init__(self, boardList):
     self.boardList = boardList
     self.placevalues = builder.boolOut("PPHVplacevalues",
                                        ZNAM=0,
                                        ONAM=1,
                                        HIGH=0.1,
                                        on_update=self.place_voltages)
     self.turnvoltageoff = builder.boolOut("turnoffPPHV",
                                           ZNAM=0,
                                           ONAM=1,
                                           HIGH=0.1,
                                           on_update=self.turnoff_PPHV)
     self.indicator = builder.boolIn("indicator", ZNAM=0, ONAM=1)
コード例 #7
0
 def __init__(self, boardList):
     self.boardList = boardList
     #create pv to place BBC voltages
     self.placevalues = builder.boolOut("BBCplacevalues",
                                        ZNAM=0,
                                        ONAM=1,
                                        HIGH=0.1,
                                        on_update=self.place_voltages)
コード例 #8
0
 def __init__(self, port):
   #telnet communication to lecroy
   self.com = lecroy_com(port)
   #number of boards and channels per board
   self.nbd = 1
   self.nchan = 8
   #offset in board numbering
   self.bdofs = 12
   #list of board objects
   self.bdlist = []
   for ibd in range(self.nbd):
     self.bdlist.append(board(ibd, self.nchan, self.bdofs, self.com))
   #configuration file
   self.confnam = "config.csv"
   self.cframe = pandas.read_csv(self.confnam)
   #watchdog timer with 10 sec timeout
   self.wdt = watchdog(10, self.bdlist)
   self.wdt.start()
   #mainframe PVs
   self.hvstat_pv = builder.boolIn("hvstat", ZNAM="OFF", ONAM="ON")
   self.hvon_pv = builder.boolOut("hvon", ZNAM=0, ONAM=1, HIGH=0.1, initial_value=0, on_update=self.do_on)
   self.hvoff_pv = builder.boolOut("hvoff", ZNAM=0, ONAM=1, HIGH=0.1, initial_value=0, on_update=self.do_off)
   self.link_pv = builder.boolOut("link", ZNAM=0, ONAM=1, HIGH=0.7, initial_value=0)
コード例 #9
0
ファイル: TPC.py プロジェクト: star-controls/tpc-grid-leak
    def __init__(self, ip):
        self.readData = builder.boolOut('readData',
                                        on_update=self.place_voltages,
                                        HIGH=0.1)
        self.on = builder.boolOut('on', on_update=self.turnOn, HIGH=0.1)
        self.off = builder.boolOut('off', on_update=self.turnOff, HIGH=0.1)
        self.avrgVolt = builder.aIn('avrgVolt')
        self.avrgTemp = builder.longIn('avrgTemp')
        self.avrgVoltInner = builder.aIn('avrgVoltInner')
        self.avrgVoltOuter = builder.aIn('avrgVoltOuter')
        self.marker = builder.longIn('marker')
        self.setVoltInner_pv = builder.aOut("setVoltInner",
                                            on_update=self.setVoltInner)
        self.setVoltOuter_pv = builder.aOut("setVoltOuter",
                                            on_update=self.setVoltOuter)
        self.write_voltages_pv = builder.boolOut("write_voltages",
                                                 on_update=self.write_voltages,
                                                 HIGH=0.1)
        self.datacsv = "data.csv"
        self.reset = builder.boolOut("reset", on_update=self.Reset, HIGH=0.1)
        self.adj_current_pv = builder.boolOut("adj_current",
                                              on_update=self.adj_current,
                                              HIGH=0.1)
        self.adj_msg = "Last done: "
        self.adj_stat_pv = builder.stringIn("adj_stat",
                                            initial_value=self.adj_msg +
                                            "none")

        self.chlist = []
        self.wboard, self.wch = 0, 0
        self.ip = ip
        self.dictWiener, self.dictTPC = {}, {}

        #snmp 5.8 for user defined precision in current readings, compiled according to
        # http://file.wiener-d.com/software/net-snmp/net-snmp-CompileForExtendedPrecision-2015-03-06.txt
        self.snmpwalk = "/usr/local/Net-SNMP_5-8/code/apps/snmpwalk"
        self.snmpset = "/usr/local/Net-SNMP_5-8/code/apps/snmpset -v 2c -c seCrET " + self.ip + " WIENER-CRATE-MIB::"

        file = open("file.txt", "w")
        file.write(
            "TPC sector \t TPC channel \t WIENER board \t WIENER channel \n")
        for self.i in xrange(1, 25):  # sector
            for self.j in xrange(2):  # channel
                a = '{0} \t\t {1} \t\t {2} \t\t {3} \n'.format(
                    self.i, self.j, self.wboard, self.wch)
                file.write(a)
                self.chlist.append(
                    Channel(self.i, self.j, self.wboard, self.wch,
                            self.snmpset))
                self.dictWiener[(self.wboard, self.wch)] = self.chlist[-1]
                self.dictTPC[(self.i, self.j)] = self.chlist[-1]
                self.wch += 1
                if (self.wch > 15):
                    self.wboard += 1
                    self.wch = 0
        file.close()
        print "Before start, you have to Load Voltage from file through Load Voltage button "
コード例 #10
0
ファイル: imadj.py プロジェクト: star-controls/caenMonit
 def __init__(self):
     print "Initializing the current calibration"
     self.caen_imon_val = []
     self.caen_imadj_val = []
     for ibd in xrange(0, 16, 2):
         for ich in xrange(24):
             pvnam = "SY4527:{0:02d}:{1:03d}:".format(ibd, ich)
             self.caen_imon_val.append(pvnam + "IMon.VAL")
             self.caen_imadj_val.append(pvnam + "ImAdj.VAL")
     self.run_calib_pv = boolOut("run_calib",
                                 on_update=self.run_calib,
                                 HIGH=0.1)
     self.msg = "Last done: "
     self.calib_stat_pv = stringIn("calib_stat",
                                   initial_value=self.msg + "none")
コード例 #11
0
 def __init__(self, boardList):
     self.boardList = boardList
     #PVs are created to carry out the functions defined below
     self.placevalues = builder.boolOut("ZDCplacevalues",
                                        ZNAM=0,
                                        ONAM=1,
                                        HIGH=0.1,
                                        on_update=self.place_voltages)
     self.turnvoltageoff = builder.boolOut("turnoffZDC",
                                           ZNAM=0,
                                           ONAM=1,
                                           HIGH=0.1,
                                           on_update=self.turnoff_ZDC)
     self.placevalues_ZDCSMD = builder.boolOut(
         "ZDCSMDplacevalues",
         ZNAM=0,
         ONAM=1,
         HIGH=0.1,
         on_update=self.place_voltages_ZDCSMD)
     self.turnSDMoff = builder.boolOut("turnoffSMD",
                                       ZNAM=0,
                                       ONAM=1,
                                       HIGH=0.1,
                                       on_update=self.turnoff_ZDCSMD)
コード例 #12
0
 def __init__(self, boardList, relay):
     self.relay = relay
     self.boardList = boardList
     self.bdbegin = 0
     self.bdend = 15
     self.cnbegin = 0
     self.cnend = 15
     #these pvs were created because the user can pick from a range of boards and channels to
     #change their limits
     self.ACboardb = builder.longOut("ACBbegin", initial_value=self.bdbegin)
     self.ACboarde = builder.longOut("ACBend", initial_value=self.bdend)
     self.ACchanb = builder.longOut("ACCbegin", initial_value=self.cnbegin)
     self.ACchane = builder.longOut("ACCend", initial_value=self.cnend)
     #this pv holds the new value for the limit
     self.actrip = builder.aOut("ac_tripval", initial_value=10)
     #this pv will be a button that the user can press to confirm their changes
     self.setactrip = builder.boolOut("setactrip",
                                      ZNAM=0,
                                      ONAM=1,
                                      HIGH=0.1,
                                      on_update=self.set_limits)
コード例 #13
0
 def __init__(self, ip):
     self.ip = ip
     self.boards = [1, 3, 5, 7]
     self.channels = [0, 1, 2, 3, 4, 5]
     self.lib = ctypes.cdll.LoadLibrary(
         '/home/mtd/CAENHVWrapper-5.82/lib/x64/libcaenhvwrapper.so.5.82')
     self.handle = ctypes.c_int(0)
     #self.result0 = self.lib.CAENHV_InitSystem(2, 0, self.ip, "admin", "admin", ctypes.byref(self.handle)) # for CAEN SY4527
     self.result0 = self.lib.CAENHV_InitSystem(
         0, 0, self.ip, "admin", "admin",
         ctypes.byref(self.handle))  # for CAEN SY1527
     print "MTD is using {0} boards".format(len(self.boards))
     #### Read INITIAL values for self.on and self.standby ####
     try:
         self.values = {}
         with open("init_val.txt", "r") as f:
             for line in f:
                 variable, value = line.split(",")
                 self.values[variable] = value.strip("\n")
     except:
         print "!!! init_val.txt not found, setting default values !!!"
         self.values = {
             "MTD:HV:SectorSwitch": 0,
             "MTD:HV:Standby": 0
         }  # Setting default values
     finally:
         self.init_standby = int(self.values["MTD:HV:Standby"])
         self.init_switch = int(self.values["MTD:HV:SectorSwitch"])
     #### Process Variables creation ####
     self.standby = builder.boolOut("Standby",
                                    on_update=self.Standby,
                                    always_update=True,
                                    ZNAM="FULL",
                                    ONAM="StandBy",
                                    initial_value=self.init_standby)
     self.full = builder.boolOut("full", on_update=self.full, HIGH=0.1)
     #self.off = builder.boolOut('off', on_update=self.turnOff, HIGH=0.1)
     #self.on = builder.boolOut('on', on_update=self.turnOn, HIGH=0.1)
     self.on = builder.boolOut('SectorSwitch',
                               on_update=self.Switch,
                               always_update=True,
                               ZNAM="OFF",
                               ONAM="ON",
                               initial_value=self.init_switch)
     self.boardlist_temp = []  # Board Temperature list
     self.boardlist_stat = []  # Board Status list
     self.chanlist = []
     for i in range(0, len(self.boards)):
         if self.boards[i] == 1 or self.boards[i] == 5:
             base_PV_temp = "Negative:{0}:Temp".format(self.boards[i])
             base_PV_stat = "Negative:{0}:status".format(self.boards[i])
         else:
             base_PV_temp = "Positive:{0}:Temp".format(self.boards[i])
             base_PV_stat = "Positive:{0}:status".format(self.boards[i])
         self.boardlist_temp.append(builder.aIn(base_PV_temp))
         self.boardlist_stat.append(
             builder.mbbIn(base_PV_stat, ("All good", 0),
                           ("Power-failure", 1), ("Firmware error", 2),
                           ("HV calib error", 3), ("Temtp calib error", 4),
                           ("Under temp", 5), ("Over temp", 6)))
         for j in range(0, len(self.channels)):
             self.chanlist.append(
                 Channel(self.boards[i], self.channels[j], self.lib,
                         self.handle))
コード例 #14
0
ファイル: Channel.py プロジェクト: star-controls/MTD
 def __init__(self, bdlist, channel, lib, handle):
     self.bdlist = bdlist
     self.channel = channel
     self.lib = lib
     self.handle = handle
     # Process Variables
     if self.bdlist == 1 or self.bdlist == 5:
         base_PV = "Negative:{0}:{1}:".format(self.bdlist, self.channel)
     else:
         base_PV = "Positive:{0}:{1}:".format(self.bdlist, self.channel)
     self.readVol = builder.aIn(
         base_PV + "vmon",
         LOPR=0,
         HOPR=8000,
         LOW=6200,
         LOLO=6000,
         LLSV="MAJOR",
         LSV="MINOR",
         EGU="V",
     )
     self.readCur = builder.aIn(base_PV + "imon",
                                LOPR=0,
                                HOPR=100,
                                PREC=2,
                                HIHI=20,
                                HIGH=15,
                                HHSV="MAJOR",
                                HSV="MINOR",
                                EGU="muA")
     self.readStatus = builder.mbbIn(
         base_PV + "status", ("Off", 0), ("On", 1), ("Ramping Up", 2),
         ("Ramping Down", 3), ("Over-Current", 4, "MAJOR"),
         ("Over-Voltage", 5, "MAJOR"), ("Under-Voltage", 6, "MAJOR"),
         ("External Trip", 7, "MAJOR"), ("Max V", 8, "MAJOR"),
         ("Ext. Disable", 9, "MAJOR"), ("Internal Trip", 10, "MAJOR"),
         ("Calib. Error", 11, "MINOR"), ("Unplugged", 12, "MINOR"),
         ("reserved forced to 0", 13, "MAJOR"),
         ("OverVoltage Protection", 14, "MAJOR"),
         ("PowerFail", 15, "MAJOR"), ("Temperature Error", 16, "MAJOR"))
     #self.setOn = builder.boolOut(base_PV+'setOn', on_update=self.setOn, HIGH=1, always_update=True)
     #self.setOff = builder.boolOut(base_PV+'setOff', on_update=self.setOff, HIGH=1, always_update=True)
     self.setVol = builder.aOut(
         base_PV + 'v0set',
         LOPR=0,
         HOPR=8000,
         EGU="V",
         initial_value=self.getFloatParameter("V0Set"),
         on_update=self.setV0Set,
         always_update=True)
     self.setMaxVol = builder.aOut(
         base_PV + 'setMaxVol',
         LOPR=0,
         HOPR=8000,
         EGU="V",
         initial_value=self.getFloatParameter("SVMax"),
         on_update=self.setSVMax,
         always_update=True)
     self.setRampUp = builder.aOut(
         base_PV + 'setRampUp',
         LOPR=0,
         HOPR=50,
         EGU="V/s",
         initial_value=self.getFloatParameter("RUp"),
         on_update=self.setRUp,
         always_update=True)
     self.setRampDown = builder.aOut(
         base_PV + 'setRampDown',
         LOPR=0,
         HOPR=50,
         EGU="V/s",
         initial_value=self.getFloatParameter("RDWn"),
         on_update=self.setRDWn,
         always_update=True)
     self.setTripI = builder.aOut(
         base_PV + 'setTripI',
         LOPR=0,
         HOPR=90,
         PREC=2,
         EGU="muA",
         initial_value=self.getFloatParameter("I0Set"),
         on_update=self.setI0Set,
         always_update=True)
     self.setTripTime = builder.aOut(
         base_PV + 'setTripTime',
         LOPR=0,
         HOPR=90,
         PREC=1,
         EGU="s",
         initial_value=self.getFloatParameter("Trip"),
         on_update=self.setTrip,
         always_update=True)
     self.pwOnOff = builder.boolOut(base_PV + "pwonoff",
                                    on_update=self.slideOnOff,
                                    ZNAM="OFF",
                                    ONAM="ON",
                                    always_update=True)
コード例 #15
0
 def __init__(self,boardList):
   self.boardList = boardList
   #pv created to place VPD demand voltages
   self.placevalues = builder.boolOut("VPDplacevalues",ZNAM = 0, ONAM = 1, HIGH = 0.1, on_update=self.place_voltages)
   #pv created to turn VPD voltages to 0   
   self.turnvoltageoff = builder.boolOut("turnoffVPD",ZNAM = 0, ONAM = 1, HIGH = 0.1, on_update=self.turnoff_VPD)
コード例 #16
0
 def __init__(self, bdlist, channel, lib, handle):
     self.bdlist = bdlist
     self.channel = channel
     self.lib = lib
     self.handle = handle
     # Process Variables
     base_PV = "{0}:{1}:".format(self.bdlist, self.channel)
     self.readVol = builder.aIn(base_PV + "vmon",
                                LOPR=0,
                                HOPR=2000,
                                EGU="V")
     self.readCur = builder.aIn(base_PV + "imon",
                                LOPR=0,
                                HOPR=3,
                                PREC=2,
                                HIHI=2,
                                HIGH=1.5,
                                HHSV="MAJOR",
                                HSV="MINOR",
                                EGU="muA")
     self.readStatus = builder.longIn(base_PV + "status")
     self.setOn = builder.boolOut(base_PV + 'setOn',
                                  on_update=self.setOn,
                                  HIGH=1)
     self.setOff = builder.boolOut(base_PV + 'setOff',
                                   on_update=self.setOff,
                                   HIGH=1)
     self.setVol = builder.aOut(
         base_PV + 'setVol',
         LOPR=0,
         HOPR=2000,
         EGU="V",
         initial_value=self.getFloatParameter("V0Set"),
         on_update=self.setV0Set)
     self.setMaxVol = builder.aOut(
         base_PV + 'setMaxVol',
         LOPR=0,
         HOPR=2000,
         EGU="V",
         initial_value=self.getFloatParameter("SVMax"),
         on_update=self.setSVMax)
     self.setRampUp = builder.aOut(
         base_PV + 'setRampUp',
         LOPR=0,
         HOPR=50,
         EGU="V/s",
         initial_value=self.getFloatParameter("RUp"),
         on_update=self.setRUp)
     self.setRampDown = builder.aOut(
         base_PV + 'setRampDown',
         LOPR=0,
         HOPR=50,
         EGU="V/s",
         initial_value=self.getFloatParameter("RDWn"),
         on_update=self.setRDWn)
     self.setTripI = builder.aOut(
         base_PV + 'setTripI',
         LOPR=0,
         HOPR=90,
         PREC=2,
         EGU="muA",
         initial_value=self.getFloatParameter("I0Set"),
         on_update=self.setI0Set)
     self.setTripTime = builder.aOut(
         base_PV + 'setTripTime',
         LOPR=0,
         HOPR=90,
         PREC=1,
         EGU="s",
         initial_value=self.getFloatParameter("Trip"),
         on_update=self.setTrip)
コード例 #17
0
    def __init__(self, sect_num, chann_num, wboard, wch, snmpset):
        self.sect_num = sect_num
        self.chann_num = chann_num
        self.wboard = wboard
        self.wch = wch
        self.cmdtemplate = snmpset
        base_PV = '{0:02d}:{1:d}:'.format(self.sect_num, self.chann_num)

        # Features of the channels
        self.volt = builder.aOut(base_PV + 'setVoltage',
                                 on_update=self.setVoltage)
        self.curt = builder.aOut(base_PV + 'setCurrent',
                                 on_update=self.setCurrent)
        self.wboardpv = builder.longIn(base_PV + 'wboardpv',
                                       initial_value=self.wboard)
        self.wchpv = builder.longIn(base_PV + 'wchpv', initial_value=self.wch)
        self.setOn = builder.boolOut(base_PV + 'setOn',
                                     on_update=self.setOn,
                                     HIGH=0.1)
        self.setOff = builder.boolOut(base_PV + 'setOff',
                                      on_update=self.setOff,
                                      HIGH=0.1)
        self.readVol = builder.aIn(base_PV + 'readVol', PREC=1)
        if (self.chann_num == 0):
            self.readVol.LOPR = 100
            self.readVol.HOPR = 130
            self.readVol.HIHI = 125
            self.readVol.HIGH = 120
            self.readVol.LOW = 110
            self.readVol.LOLO = 105
            self.readVol.LSV = "MINOR"
            self.readVol.LLSV = "MAJOR"
            self.readVol.HSV = "MINOR"
            self.readVol.HHSV = "MAJOR"
        if (self.chann_num == 1):
            self.readVol.LOPR = 400
            self.readVol.HOPR = 500
            self.readVol.HIHI = 470
            self.readVol.HIGH = 460
            self.readVol.LOW = 440
            self.readVol.LOLO = 430
            self.readVol.LSV = "MINOR"
            self.readVol.LLSV = "MAJOR"
            self.readVol.HSV = "MINOR"
            self.readVol.HHSV = "MAJOR"
        self.readTem = builder.longIn(base_PV + 'readTem')
        self.imon_read = 0.  # measured current from ISEG
        self.imon_adj = 0.  # adjustment to the measured current
        self.readCurr = builder.aIn(base_PV + 'readCurr', PREC=3)
        self.status = builder.longIn(base_PV + 'status')
        self.setReset = builder.boolOut(base_PV + 'setReset',
                                        on_update=self.setReset,
                                        HIGH=0.1)

        if (self.wboard == 0):
            self.a = str(self.wch)
        else:
            if (self.wboard != 0 and self.wch > 9):
                self.a = str(self.wboard) + str(self.wch)
            else:
                self.a = str(self.wboard) + '0' + str(self.wch)