Exemplo n.º 1
0
    def __init__(self, *args):
        super(TestFbpWindow, self).__init__(*args)
        uic.loadUi('wizard.ui', self)

        self._initialize_widgets()
        self._initialize_signals()
        self._list_serial_ports()

        self._current_ps_id = {
            'Fonte 1': 1,
            'Fonte 2': 2,
            'Fonte 3': 3,
            'Fonte 4': 4,
            'Todas': 5
        }
        self._bsmp_var = {
            'soft_intlk': 25,
            'hard_intlk': 26,
            'iload': 27,
            'vload': 28,
            'vdclink': 29,
            'temp': 30,
            'digital_pot': 35
        }

        self._drs = SerialDRS()
Exemplo n.º 2
0
    def __init__(self):
        QThread.__init__(self)

        self._drs = SerialDRS()
        self._baudrate = '6000000'
        self._is_active = False
        self._screen_readings = {
            'setpoint': 0.0,
            'reference': 0.0,
            'slowref_counter': 0,
            'syncpulse_counter': 0,
            'iload_1': 0.0,
            'iload_2': 0.0,
            'vload': 0.0,
            'vcapbank': 0.0,
            'induc_temp': 0.0,
            'igbt_temp': 0.0,
            'duty_cycle': 0,
            'soft_intlk': 0,
            'hard_intlk': 0,
            'fwr_version': ''
        }

        self._hard_interlocks = [
            'Falha nos drivers do módulo', 'Sub-tensão no DCLINK',
            'Sobre-tensão no DCLINK', 'Sobre-tensão na carga',
            'Sobre-corrente na carga'
        ]

        self._soft_interlocks = [
            'Falha leitura DCCT 2', 'Falha leitura DCCT 1',
            'Alta diferença entre DCCTs', 'Falha DCCT 2', 'Falha DCCT 1',
            'Sobre-temperatura nos indutores',
            'Sobre-temperatura nos indutores'
        ]
Exemplo n.º 3
0
    def __init__(self):
        QThread.__init__(self)
        self._comport = None
        self._baudrate = None
        self._boardsinfo = []
        self._nHRADC = None
        self._led = None

        self.drs = SerialDRS()
        self.source = KrohnHite523_GPIB()
        self.dmm = Keysight3458A_GPIB()

        self.refVal = {'GND': 0,
                       'Vref_bipolar_p': 5,
                       'Vref_bipolar_n': -5,
                       'Temp': -0.35,
                       'Vin_bipolar_p': 10,
                       'Vin_bipolar_n': -10,
                       'Iin_bipolar_p': 0.05,
                       'Iin_bipolar_n': -0.05
                       }

        self.refTol = {'GND': 0.02,
                       'Vref_bipolar_p': 0.02,
                       'Vref_bipolar_n': 0.02,
                       'Temp': 0.1,
                       'Vin_bipolar_p': 0.02,
                       'Vin_bipolar_n': 0.02,
                       'Iin_bipolar_p': 0.0003,
                       'Iin_bipolar_n': 0.0003}
Exemplo n.º 4
0
 def __init__(self, comport=None, baudrate=None, serial_number=None):
     QThread.__init__(self)
     self._comport = comport
     self._baudarate = baudrate
     self._serial_number = serial_number
     #self._serial_port = serial.Serial()
     self.FBP = SerialDRS()
Exemplo n.º 5
0
 def __init__(self):
     QThread.__init__(self)
     self._comport = None
     self._baudarate = None
     self._serial_number = []
     self._ps_address = 1
     self.FBP = SerialDRS()
Exemplo n.º 6
0
 def __init__(self, comport=None, baudrate=None,
                 mod0=None, mod1=None, mod2=None, mod3=None):
     QThread.__init__(self)
     self._comport = comport
     self._baudarate = baudrate
     self._serial_mod0 = mod0
     self._serial_mod1 = mod1
     self._serial_mod2 = mod2
     self._serial_mod3 = mod3
     self._serial_port = serial.Serial()
     self._active_interlocks = ''
     self.FBP = SerialDRS()
Exemplo n.º 7
0
    def __init__(self,
                 comport=None,
                 baudrate=None,
                 serial_number=None,
                 variant=None):
        QThread.__init__(self)
        self._comport = comport
        self._baudarate = baudrate
        self._serial_number = serial_number
        self._variant = variant
        self.FBP = SerialDRS()

        self._load_current = [0, 0, 2, 4, 6, 8, 10, -10, -8, -6, -4, -2]
Exemplo n.º 8
0
    def __init__(self, comport=None, baudrate=None, serial_number=None):
        QThread.__init__(self)
        self._comport = comport
        self._baudarate = baudrate
        self._serial_number = serial_number
        self._led = None
        self._buzzer = None
        self._details = ""
        self._loopback_fail = "\n"
        self._index_res_ok = 3

        self._send_partial_data = False

        self._udc = SerialDRS()
Exemplo n.º 9
0
    def __init__(self):
        self._baudrate = '6000000'
        self._drs = SerialDRS()
        self._is_active = False

        self._screen_readings = {
            'readback': 0.0,
            'slowref_counter': 0,
            'syncpulse_counter': 0,
            'iload_1': 0.0,
            'iload_2': 0.0,
            'vload': 0.0,
            'vcapbank': 0.0,
            'induc_temp': 0.0,
            'igbt_temp': 0.0,
            'duty_cycle': 0,
            'soft_intlk': 0,
            'hard_intlk': 0
        }
Exemplo n.º 10
0
    def __init__(self):
        QThread.__init__(self)

        self._comport = None
        self._baudrate = None

        self._serial_mod0 = None
        self._serial_mod1 = None
        self._serial_mod2 = None
        self._serial_mod3 = None
        self._serial_list = []

        self._variant_list = []

        self._nHRADC = None

        self._led = None

        self.drs = SerialDRS()
        self.source = KrohnHite523_GPIB()
        self.dmm = Keysight3458A_GPIB()
Exemplo n.º 11
0
    def __init__(self):
        QThread.__init__(self)

        self._is_active = False
        self._baudrate = '6000000'
        #self._baudrate = '115200'
        self._drs = SerialDRS()

        self._screen_readings = {
            'digital_pot_read': 0.0,
            'fault_status': 0,
            'intlk': 0,
            'vdclink_1': 0.0,
            'vdclink_2': 0.0,
            'vdclink_3': 0.0,
            'vdclink_4': 0.0
        }

        self._interlocks = [
            'Sobre tensão na fonte 3', 'Sobre-tensão na fonte 2',
            'Sobre-tensão na fonte 1', 'Interlock externo', 'Sensor de fumaça',
            'Falha Fonte 3', 'Falha Fonte 2', 'Falha Fonte 1'
        ]
Exemplo n.º 12
0
class FacAcdc:
    def __init__(self):
        self._baudrate = '6000000'
        self._drs = SerialDRS()
        self._is_active = False

        self._screen_readings = {
            'readback': 0.0,
            'slowref_counter': 0,
            'syncpulse_counter': 0,
            'iload_1': 0.0,
            'iload_2': 0.0,
            'vload': 0.0,
            'vcapbank': 0.0,
            'induc_temp': 0.0,
            'igbt_temp': 0.0,
            'duty_cycle': 0,
            'soft_intlk': 0,
            'hard_intlk': 0
        }

    @property
    def is_active(self):
        return self._is_active

    def connect_serial(self, com_port):
        res = False
        if com_port is not None:
            res = self._drs.Connect(com_port, self._baudrate)
            self._is_active = True
        return res

    def disconnect_serial(self):
        res = self._drs.Disconnect()
        self._is_active = False
        return res

    def turn_on(self):
        res = self._drs.turn_on()
        return res

    def turn_off(self):
        res = self._drs.turn_off()
        return res

    def open_loop(self):
        res = self._drs.open_loop()
        return res

    def close_loop(self):
        res = self._drs.close_loop()
        return res

    def soft_intlk_info(self):
        pass

    def soft_intlk_reset(self):
        pass

    def hard_intlk_info(self):
        pass

    def hard_intlk_reset(self):
        pass

    def update_params(self):
        pass
Exemplo n.º 13
0
class DCCTTest(QThread):
    test_complete = pyqtSignal(bool)
    update_gui = pyqtSignal(str)
    connection_lost = pyqtSignal()

    def __init__(self,
                 comport=None,
                 baudrate=None,
                 serial_number=None,
                 variant=None):
        QThread.__init__(self)
        self._comport = comport
        self._baudarate = baudrate
        self._serial_number = serial_number
        self._variant = variant
        self.FBP = SerialDRS()

        self._load_current = [0, 0, 2, 4, 6, 8, 10, -10, -8, -6, -4, -2]

    @property
    def serial_number(self):
        return self._serial_number

    @serial_number.setter
    def serial_number(self, value):
        self._serial_number = value

    @property
    def variant(self):
        return self._variant

    @variant.setter
    def variant(self, value):
        self._variant = value

    @property
    def comport(self):
        return self._comport

    @comport.setter
    def comport(self, value):
        self._comport = value

    @property
    def baudrate(self):
        return self._baudarate

    @baudrate.setter
    def baudrate(self, value):
        self._baudrate = value

    def open_serial_port(self):
        if self._comport is None or self._baudrate is None:
            return False
        else:
            self.FBP.SetSlaveAdd(5)
            return self.FBP.Connect(self._comport, self._baudrate)

    def test_communication(self):
        result = (False, False
                  )  # Result for communication test and aux power supply

        try:
            print('##########################')
            print(self.FBP.Write_sigGen_Aux(1))
            time.sleep(5)

            test_package = self.FBP.Read_ps_Model()

            if (test_package[0] == 0) and (test_package[1] == 17) and (
                    test_package[2] == 512) and (test_package[3]
                                                 == 14) and (test_package[4]
                                                             == 223):
                result = (True, True)
            else:
                result = (False, False)

            self.FBP.Read_ps_SoftInterlocks()
            self.FBP.Read_ps_HardInterlocks()

        except:
            result = (False, False)

        return result

    def _test_sequence(self):
        result = False
        list_log = []
        current_DCCT = []
        current_DCCT1 = []
        current_DCCT2 = []

        dcct = DCCT()
        dcct.serial_number = self._serial_number
        dcct.variant = self._variant
        res = self._send_to_server(dcct)

        print(dcct.variant)
        if res:
            #TODO: Sequencia de Testes

            if self.FBP.Read_ps_SoftInterlocks() is not 0:
                if round(self.FBP.Read_iMod1()) == 0 and round(self.FBP.Read_iMod2()) == 0\
                   and round(self.FBP.Read_iMod3()) == 0 and round(self.FBP.Read_iMod4()) == 0:
                    print('Resetando Interlocks...')
                    self.FBP.ResetInterlocks()

                else:
                    print(
                        'Jiga com problemas! Verifique os Soft interlocks ativos...'
                    )

            if self.FBP.Read_ps_HardInterlocks() is not 0:
                if round(self.FBP.Read_iMod1()) == 0 and round(self.FBP.Read_iMod2()) == 0\
                   and round(self.FBP.Read_iMod3()) == 0 and round(self.FBP.Read_iMod4()) == 0:
                    print('Resetando Interlocks...')
                    self.FBP.ResetInterlocks()

                else:
                    print(
                        'Jiga com problemas! Verifique os Hard interlocks ativos...'
                    )

            print('variante ' + str(self._variant))
            if self._variant == 'DCCT-CONF-A':
                list_log.append(DCCTLog())
                list_log.append(DCCTLog())

                current_DCCT1.append(self.FBP.Read_iMod3(
                ))  # medidas de corrente com fonte desligada
                current_DCCT2.append(self.FBP.Read_iMod4(
                ))  # medidas de corrente com fonte desligada

                time.sleep(1)
                self.FBP.TurnOn(0b0001)
                time.sleep(1)

                if self.FBP.Read_ps_OnOff() is not 1:
                    print('ERRO! O MÓDULO NÃO LIGOU CORRETAMENTE!!!')
                    self.update_gui.emit(
                        'O módulo da Jiga não ligou corretamente. Desligue a jiga reinicie o teste!!!'
                    )

                else:
                    self.update_gui.emit('Fonte ligada')
                    time.sleep(1)
                    self.FBP.ClosedLoop(0b0001)
                    self.update_gui.emit('Malha fechada')
                    time.sleep(1)

                    self.FBP.Read_ps_SoftInterlocks()
                    self.FBP.Read_ps_HardInterlocks()

                    for i in range(1, len(self._load_current)):
                        self.FBP.SetISlowRef(self._load_current[i])
                        time.sleep(1)

                        self.update_gui.emit(
                            'Testando DCCTs com corrente de ' +
                            str(self._load_current[i]) + 'A')
                        self.update_gui.emit(
                            '            Corrente de saida do modulo padrao: '
                            + str(round(self.FBP.Read_iMod1())) + 'A')

                        compare_mod1 = round(self.FBP.Read_iMod1())

                        if not self._load_current[i] == compare_mod1:
                            self.update_gui.emit(str(self._load_current[i]))
                            self.update_gui.emit(str(compare_mod1))
                            self.update_gui.emit(
                                '\nMAU FUNCIONAMENTO NO TESTE: CIRCUITO ABERTO OU DEFEITO NO MODULO PADRAO\n'
                            )

                        time.sleep(30)  # Alterar para 30s
                        self.update_gui.emit('            Corrente DCCT1: ' +
                                             str(self.FBP.Read_iMod3()) + 'A')
                        self.update_gui.emit('            Corrente DCCT2: ' +
                                             str(self.FBP.Read_iMod4()) + 'A')
                        print(self.FBP.Read_iMod3())
                        print(self.FBP.Read_iMod4())
                        current_DCCT1.append(self.FBP.Read_iMod3())
                        current_DCCT2.append(self.FBP.Read_iMod4())

                    self.FBP.Read_ps_SoftInterlocks()
                    self.FBP.Read_ps_HardInterlocks()

                    current_DCCT.append(current_DCCT1)
                    current_DCCT.append(current_DCCT2)

                    for j in range(0, 2):
                        for k in range(0, len(self._load_current)):
                            if round(current_DCCT[j]
                                     [k]) == self._load_current[k]:
                                string_result = 'Aprovado'
                                result = True
                            else:
                                string_result = 'Reprovado'
                                result = False
                                break
                        list_log[j].test_result = string_result
                        self.update_gui.emit('DCCT' + str(j + 1) + ' ' +
                                             str(list_log[j].test_result))

                    for l in range(2):
                        list_log[l].iload_off = current_DCCT[l][0]
                        list_log[l].iload0 = current_DCCT[l][1]
                        list_log[l].iload1 = current_DCCT[l][2]
                        list_log[l].iload2 = current_DCCT[l][3]
                        list_log[l].iload3 = current_DCCT[l][4]
                        list_log[l].iload4 = current_DCCT[l][5]
                        list_log[l].iload5 = current_DCCT[l][6]
                        list_log[l].iload6 = current_DCCT[l][7]
                        list_log[l].iload7 = current_DCCT[l][8]
                        list_log[l].iload8 = current_DCCT[l][9]
                        list_log[l].iload9 = current_DCCT[l][10]
                        list_log[l].iload10 = current_DCCT[l][11]
                        list_log[l].id_canal_dcct = l + 1
                        list_log[l].serial_number_dcct = self._serial_number

                    if self._send_to_server(list_log[0]):
                        self.update_gui.emit('Dados enviados para o servidor')
                    else:
                        self.update_gui.emit(
                            'Erro no envio de dados para o servidor')

                    if self._send_to_server(list_log[1]):
                        self.update_gui.emit('Dados enviados para o servidor')
                    else:
                        self.update_gui.emit(
                            'Erro no envio de dados para o servidor')

            elif self._variant == 'DCCT-CONF-B':
                list_log.append(DCCTLog())
                list_log.append(None)

                current_DCCT1.append(self.FBP.Read_iMod3(
                ))  # medidas de corrente com fonte desligada

                time.sleep(1)
                self.FBP.TurnOn(0b0001)
                time.sleep(1)

                if self.FBP.Read_ps_OnOff() is not 1:
                    print('ERRO! O MÓDULO NÃO LIGOU CORRETAMENTE!!!')
                    self.update_gui.emit(
                        'O módulo da Jiga não ligou corretamente. Desligue a jiga e reinicie o teste!!!'
                    )

                else:
                    self.update_gui.emit('Fonte ligada')
                    time.sleep(1)
                    self.FBP.ClosedLoop(0b0001)
                    self.update_gui.emit('Malha fechada')
                    time.sleep(1)

                    self.FBP.Read_ps_SoftInterlocks()
                    self.FBP.Read_ps_HardInterlocks()

                    for i in range(1, len(self._load_current)):
                        self.FBP.SetISlowRef(self._load_current[i])
                        time.sleep(1)

                        self.update_gui.emit(
                            'Testando DCCTs com corrente de ' +
                            str(self._load_current[i]) + 'A')
                        self.update_gui.emit(
                            '            Corrente de saida do modulo padrao: '
                            + str(round(self.FBP.Read_iMod1())) + 'A')

                        compare_mod1 = round(self.FBP.Read_iMod1())

                        if not self._load_current[i] == compare_mod1:
                            self.update_gui.emit(str(self._load_current[i]))
                            self.update_gui.emit(str(compare_mod1))
                            self.update_gui.emit(
                                '\nMAU FUNCIONAMENTO NO TESTE: CIRCUITO ABERTO OU DEFEITO NO MODULO PADRAO\n'
                            )

                        time.sleep(30)  # Alterar para 30s
                        self.update_gui.emit('            Corrente DCCT1: ' +
                                             str(self.FBP.Read_iMod3()) + 'A')
                        current_DCCT1.append(self.FBP.Read_iMod3())

                    for j in range(0, len(self._load_current)):
                        if round(current_DCCT1[j]) == self._load_current[j]:
                            string_result = 'Aprovado'
                            result = True
                        else:
                            string_result = 'Reprovado'
                            result = False
                            break
                    list_log[0].test_result = string_result
                    self.update_gui.emit('DCCT1 ' +
                                         str(list_log[0].test_result))

                    list_log[0].iload_off = current_DCCT1[0]
                    list_log[0].iload0 = current_DCCT1[1]
                    list_log[0].iload1 = current_DCCT1[2]
                    list_log[0].iload2 = current_DCCT1[3]
                    list_log[0].iload3 = current_DCCT1[4]
                    list_log[0].iload4 = current_DCCT1[5]
                    list_log[0].iload5 = current_DCCT1[6]
                    list_log[0].iload6 = current_DCCT1[7]
                    list_log[0].iload7 = current_DCCT1[8]
                    list_log[0].iload8 = current_DCCT1[9]
                    list_log[0].iload9 = current_DCCT1[10]
                    list_log[0].iload10 = current_DCCT1[11]
                    list_log[0].id_canal_dcct = 1
                    list_log[0].serial_number_dcct = self._serial_number

                    if self._send_to_server(list_log[0]):
                        self.update_gui.emit('Dados enviados para o servidor')
                    else:
                        self.update_gui.emit(
                            'Erro no envio de dados para o servidor')

                self.FBP.TurnOff(0b0001)

        self.test_complete.emit(result)

    def _send_to_server(self, item):
        client = ElpWebClient()
        client_data = item.data
        client_method = item.method
        client_response = client.do_request(client_method, client_data)
        print(client_response)
        server_status = self._parse_response(client_response)
        return server_status

    def _parse_response(self, response):
        res_key = 'StatusCode'
        err_key = 'error'

        if res_key in response.keys() and err_key not in response.keys():
            return True
        else:
            return False

    def run(self):
        self._test_sequence()
Exemplo n.º 14
0
class RackTest(QThread):
    test_complete       = pyqtSignal(bool)
    update_gui          = pyqtSignal(str)
    connection_lost     = pyqtSignal()

    def __init__(self, comport=None, baudrate=None, serial_number=None):
        QThread.__init__(self)
        self._comport = comport
        self._baudarate = baudrate
        self._serial_number = serial_number
        #self._serial_port = serial.Serial()
        self.FBP = SerialDRS()

    @property
    def serial_number(self):
        return self._serial_number

    @serial_number.setter
    def serial_number(self, value):
        self._serial_number = value

    @property
    def comport(self):
        return self._comport

    @comport.setter
    def comport(self, value):
        self._comport = value

    @property
    def baudrate(self):
        return self._baudarate

    @baudrate.setter
    def baudrate(self, value):
        self._baudrate = value

    def open_serial_port(self):
        if self._comport is None or self._baudrate is None:
            return False
        else:
            self.FBP.SetSlaveAdd(5)
            return self.FBP.Connect(self._comport, self._baudrate)

    def test_communication(self):
        result = False     # Result for communication test

        try:
            self.FBP.Write_sigGen_Aux(0)
            test_package = self.FBP.Read_ps_Model()
            if (test_package[0] == 0) and (test_package[1] == 17) and (test_package[2] == 512) and (test_package[3] == 14) and (test_package[4] == 223):
                result = True
            else:
                result = False
        except:
            result = False

        return result

    def _test_sequence(self):
        result     = True
        test_setup = False
        list_iout0 = []
        list_iout1 = []
        list_iout2 = []
        list_iout3 = []

        rack = Rack()
        rack.serial_number = self._serial_number
        res = self._send_to_server(rack)

        if res:
            #TODO: Sequencia de Testes

            self.FBP.Write_sigGen_Aux(0) # Usando 0 modulos de potência
            log = RackLog()

            for i in range(0, 10):
                list_iout0.append(self.FBP.Read_iMod1())
                list_iout1.append(self.FBP.Read_iMod2())
                list_iout2.append(self.FBP.Read_iMod3())
                list_iout3.append(self.FBP.Read_iMod4())
                self.update_gui.emit('aguarde 5 segundos para o início da ' + str(i+1) + ' leitura')
                time.sleep(5) # Alterar para 60s
                self.update_gui.emit('leitura ' + str(i+1) + ':')
                self.update_gui.emit('iout0 = ' + str(list_iout0[i]) + ' A')
                self.update_gui.emit('iout1 = ' + str(list_iout1[i]) + ' A')
                self.update_gui.emit('iout2 = ' + str(list_iout2[i]) + ' A')
                self.update_gui.emit('iout3 = ' + str(list_iout3[i]) + ' A')

                if (abs(round(list_iout0[i]))>=12) or (abs(round(list_iout1[i]))>=12) \
                    or (abs(round(list_iout2[i]))>=12) or (abs(round(list_iout3[i]))>=12):
                    self.update_gui.emit('ERRO: REPITA O PROCEDIMENTO DE CONEXÕES DO BASTIDOR E INICIE UM NOVO TESTE')
                    test_setup = False
                    break
                else:
                    test_setup = True

            if test_setup:
                for j in range(0, 10):
                    if (round(list_iout0[j])==-2) and (round(list_iout1[j])==1) and (round(list_iout2[j])==-3) and ((round(list_iout3[j]) == 3) or (round(list_iout3[j]) == 2)):
                        if result:
                            log.test_result = 'Aprovado'
                            result = True
                    else:
                        log.test_result = 'Reprovado'
                        result = False

                if result:
                    self.update_gui.emit('Aprovado')
                else:
                    self.update_gui.emit('Reprovado')

                log.iout0       = sum(list_iout0)/len(list_iout0)
                log.iout1       = sum(list_iout1)/len(list_iout1)
                log.iout2       = sum(list_iout2)/len(list_iout2)
                log.iout3       = sum(list_iout3)/len(list_iout3)
                log.delta_iout0 = max(list_iout0) - min(list_iout0)
                log.delta_iout1 = max(list_iout1) - min(list_iout1)
                log.delta_iout2 = max(list_iout2) - min(list_iout2)
                log.delta_iout3 = max(list_iout3) - min(list_iout3)

                log.serial_number_rack = self._serial_number
                log.details            = ""

                if self._send_to_server(log):
                    self.update_gui.emit('Dados enviados para o servidor')
                else:
                    self.update_gui.emit('Erro no envio de dados para o servidor')

                # ao finalizar, emitir signals
                self.test_complete.emit(result)

    def _send_to_server(self, item):
        client = ElpWebClient()
        client_data = item.data
        client_method = item.method
        client_response = client.do_request(client_method, client_data)
        server_status = self._parse_response(client_response)
        return server_status

    def _parse_response(self, response):
        res_key = 'StatusCode'
        err_key = 'error'

        if res_key in response.keys() and err_key not in response.keys():
            return True
        else:
            return False

    def run(self):
        self._test_sequence()
Exemplo n.º 15
0
class HRADCCalib(QThread):

    calib_complete = pyqtSignal(bool)
    update_gui = pyqtSignal(str)
    connection_lost = pyqtSignal()

    device = {'HRADC': 1, 'DM': 2}
    bytesFormat = {'Uint16': 'H', 'Uint32': 'L', 'Uint64': 'Q', 'float': 'f'}
    ufmOffset = {
        'serial': 0,
        'calibdate': 4,
        'variant': 9,
        'rburden': 10,
        'calibtemp': 12,
        'vin_gain': 14,
        'vin_offset': 16,
        'iin_gain': 18,
        'iin_offset': 20,
        'vref_p': 22,
        'vref_n': 24,
        'gnd': 26
    }
    hradcVariant = {'HRADC-FBP': 0, 'HRADC-FAX': 1}
    hradcInputTypes = [
        'GND', 'Vref_bipolar_p', 'Vref_bipolar_n', 'Temp', 'Vin_bipolar',
        'Iin_bipolar'
    ]

    # DMM param
    nplc = 10
    dmmSampleCount = 4

    # DC Source param
    settlingTime = 2

    vin_lsb = 20 / pow(2, 18)
    vin_step = vin_lsb / 4
    vin_max = 10.2

    iin_lsb = 0.1 / pow(2, 18)
    iin_step = iin_lsb / 3
    iin_max = 0.051

    warmup_min = 20  # 0.084 # 20 minutes

    def __init__(self):
        QThread.__init__(self)

        self._comport = None
        self._baudrate = None

        self._serial_mod0 = None
        self._serial_mod1 = None
        self._serial_mod2 = None
        self._serial_mod3 = None
        self._serial_list = []

        self._variant_list = []

        self._nHRADC = None

        self._led = None

        self.drs = SerialDRS()
        self.source = KrohnHite523_GPIB()
        self.dmm = Keysight3458A_GPIB()

    @property
    def comport(self):
        return self._comport

    @comport.setter
    def comport(self, value):
        self._comport = value

    @property
    def baudrate(self):
        return self._baudrate

    @baudrate.setter
    def baudrate(self, value):
        self._baudrate = value

    @property
    def serial_list(self):
        return self._serial_list

    @serial_list.setter
    def serial_list(self, value_list):
        self._serial_list = value_list

    @property
    def variant_list(self):
        return self._variant_list

    @variant_list.setter
    def variant_list(self, value_list):
        self._variant_list = value_list

    @property
    def serial_mod0(self):
        return self._serial_mod0

    @serial_mod0.setter
    def serial_mod0(self, value):
        self._serial_mod0 = value

    @property
    def serial_mod1(self):
        return self._serial_mod1

    @serial_mod1.setter
    def serial_mod1(self, value):
        self._serial_mod1 = value

    @property
    def serial_mod2(self):
        return self._serial_mod2

    @serial_mod2.setter
    def serial_mod2(self, value):
        self._serial_mod2 = value

    @property
    def serial_mod3(self):
        return self._serial_mod3

    @serial_mod3.setter
    def serial_mod3(self, value):
        self._serial_mod3 = value

    @property
    def nHRADC(self):
        return self._nHRADC

    @nHRADC.setter
    def nHRADC(self, value):
        self._nHRADC = value

    def _timeout(self):
        print('\nFim do warm-up\n')

    def open_serial_port(self):
        if self._comport is None or self._baudrate is None:
            return False
        else:
            self.dmm.Connect('GPIB0::22::INSTR')
            self.source.Connect('GPIB0::25::INSTR')

            self.source.DisableOutput()
            #self.source.Reset()
            self.source.LOFloatChassis('F')
            self.source.OutputTermination(0)
            self.source.SetVoltageLimit(2)
            self.source.SetOutput(0, 'V')

            self.dmm.InitDefault()
            self.dmm.SetMeasurementType('DCV', 10)
            self.dmm.SetMultipointMeas(self.dmmSampleCount)

            return self.drs.Connect(self._comport, self._baudrate)

    def test_communication(self):

        try:
            test_package = self.drs.Read_ps_Model()
            print(test_package)
            if (test_package[0] == 0) and (test_package[1] == 17) and (
                    test_package[2] == 512) and (test_package[3]
                                                 == 10) and (test_package[4]
                                                             == 227):
                print('TRUE')
                return True

            print('FALSE')
            return False

        except:
            print('EXCEPT')
            return False

    def _calib_sequence(self):

        print(
            '\n\n\n\n**********************************************************************************************************'
        )
        print('                                            Valeeendoooo!!!')
        print(
            '**********************************************************************************************************\n'
        )

        t0 = time.perf_counter()

        print(self.serial_list)
        print(self.variant_list)
        """
        fig = plt.figure()

        # HRADC samples
        ax1   = fig.add_subplot(2,2,1)
        ax1.ticklabel_format(useOffset = False)
        ax1.set_ylabel('HRADC Samples [LSB]')
        ax1.grid()

        # Samples histogram
        ax2   = fig.add_subplot(2,2,2)
        ax2.ticklabel_format(useOffset = False)

        ax3   = fig.add_subplot(2,2,3)    # HRADC mean Vs DMM mean
        ax3_2 = ax3.twinx()
        ax4   = fig.add_subplot(2,2,4)    # HRADC std Vs DMM std
        ax4_2 = ax4.twinx()
        """

        print('\nInicializando equipamentos...\n')
        self.update_gui.emit('Inicializando equipamentos...')
        self.source.DisableOutput()
        self.source.LOFloatChassis('F')
        self.source.OutputTermination(0)
        self.source.SetVoltageLimit(2)
        self.source.SetOutput(0, 'V')

        self.dmm.InitDefault()
        self.dmm.SetMeasurementType('DCV', 10)
        self.dmm.SetMultipointMeas(self.dmmSampleCount)

        self.nHRADC = 4 - self.serial_list.count(None)

        t = ' placas' if self.nHRADC > 1 else ' placa'
        t2 = 'Inicializando calibracao de ' + str(
            self.nHRADC) + t + ' HRADC...'
        print(t2 + '\n')
        self.update_gui.emit(t2)

        self.drs.Config_nHRADC(self.nHRADC)
        time.sleep(1)

        print('Resetando' + t + '...\n')
        self.update_gui.emit('Resetando' + t + '...')
        self.drs.ResetHRADCBoards(1)
        time.sleep(1)
        self.drs.ResetHRADCBoards(0)
        time.sleep(1)
        self.drs.OpMode(1)  # Para enviar amostras sem conversao
        time.sleep(0.5)

        print('Configurando backplane...\n')
        self.update_gui.emit('Configurando backplane...')
        self.drs.SelectHRADCBoard(0)
        time.sleep(0.5)
        self.drs.SelectTestSource('Vin_bipolar')
        time.sleep(0.5)

        print('Configurando' + t + ' em Vref_bipolar_p...\n')
        self.update_gui.emit('Configurando' + t + ' em Vref_bipolar_p...')
        for slot in range(self.nHRADC):
            self.drs.ConfigHRADC(slot, 100000, 'Vref_bipolar_p', 0, 0)
            time.sleep(1)

        print('Iniciando warm-up...\n')
        self.update_gui.emit('Iniciando warm-up...\n')
        self.drs.EnableHRADCSampling()

        t = Timer(self.warmup_min * 60, self._timeout)
        t.start()

        while (t.is_alive()):
            print(time.strftime("%H:%M:%S", time.localtime()))
            time.sleep(1)
        self.drs.DisableHRADCSampling()
        time.sleep(1)

        #########################
        #### ITERAR AQUI!!! #####
        #########################

        for slot in range(self.nHRADC):
            #slot = 0

            log = HRADCLogCalib()
            ufmdata_16 = []
            emptyBuff = np.array([])

            log.serial_number_hradc = self.serial_list[slot]
            variant = self.variant_list[slot]

            print('************ Iniciando a calibracao do slot #' + str(slot) +
                  ' ( S/N: ' + str(log.serial_number_hradc) + ' / ' + variant +
                  ') ************\n')
            self.update_gui.emit('*** INICIANDO CALIBRACAO DO SLOT #' +
                                 str(slot) + ' ( S/N: ' +
                                 str(log.serial_number_hradc) + ' / ' +
                                 variant + ') ***')

            self.source.DisableOutput()
            self.source.SetOutput(0, 'V')
            self.dmm.SetMeasurementType('DCV', 10)

            self.drs.SelectTestSource('Vin_bipolar')
            time.sleep(0.5)
            self.drs.SelectHRADCBoard(slot)
            time.sleep(0.5)

            print('*****************************************')
            print('****** Iniciando calibracao Vin... ******')
            print('*****************************************\n')

            self.drs.ConfigHRADC(slot, 100000, 'Vin_bipolar', 0, 0)
            time.sleep(1)
            self.drs.EnableHRADCSampling()
            time.sleep(0.5)

            ################################################
            print('     *** Configurando Vin -FS ... ***\n')
            ################################################
            self.update_gui.emit('  Encontrando fundo de escala -Vin...')

            sourceOut = -9.9
            self.source.EnableOutput()

            while True:
                sourceOut = self._saturate(sourceOut, -self.vin_max,
                                           self.vin_max)

                # if any HRADC samples != 0, set source lower
                print('sourceOut = ' + str(sourceOut) + ' V\n')
                self.source.SetOutput(sourceOut, 'V')
                time.sleep(self.settlingTime)

                self.drs.EnableSamplesBuffer()
                time.sleep(1)
                self.drs.DisableSamplesBuffer()
                time.sleep(1)

                sampHRADC = np.array(self.drs.Recv_samplesBuffer_blocks(0))
                print(sampHRADC)

                if np.array_equal(sampHRADC, emptyBuff):
                    print(
                        '\n************** FALHA SAMPLES BUFFER **************\n'
                    )
                    self.source.DisableOutput()
                    self.DisableHRADCSampling()
                    return

                meanHRADC = sampHRADC.mean()
                stdHRADC = sampHRADC.std()

                deltaFS = meanHRADC * self.vin_lsb
                inc = deltaFS if deltaFS > self.vin_lsb else self.vin_lsb

                print('\nmax    meanHRADC   stdHRADC    inc')
                print(
                    str(sampHRADC.max()) + '    ' + str(meanHRADC) + '    ' +
                    str(stdHRADC) + '    ' + str(inc) + '\n')

                if ((sampHRADC == 0).all()):
                    break

                sourceOut -= inc

            vin_negFS = np.array(self.dmm.ReadMeasurementPoints()).mean()
            print('Vin -FS: ' + str(vin_negFS) + ' V\n')

            #################################################
            print('\n     *** Procurando Vin T[1] ... ***\n')
            #################################################
            self.update_gui.emit('  Procurando Vin T[1]...')

            sumNonFSCodes = 0
            T_1 = vin_negFS

            while True:

                # Increment source output
                sourceOut += self.vin_step
                sourceOut = self._saturate(sourceOut, -self.vin_max,
                                           self.vin_max)
                print('sourceOut = ' + str(sourceOut) + ' V\n')
                self.source.SetOutput(sourceOut, 'V')
                time.sleep(self.settlingTime)

                # Start measurements
                self.dmm.TrigMultipointMeas()
                self.drs.EnableSamplesBuffer()
                time.sleep(1)
                self.drs.DisableSamplesBuffer()
                time.sleep(1)

                sampHRADC = np.array(self.drs.Recv_samplesBuffer_allblocks())
                print(sampHRADC)

                meanHRADC = sampHRADC.mean()
                stdHRADC = sampHRADC.std()

                print('\nmax    meanHRADC   stdHRADC')
                print(
                    str(sampHRADC.max()) + '    ' + str(meanHRADC) + '    ' +
                    str(stdHRADC) + '\n')

                if np.array_equal(sampHRADC, emptyBuff):
                    print(
                        '\n************** FALHA SAMPLES BUFFER **************\n'
                    )
                    self.source.DisableOutput()
                    self.DisableHRADCSampling()
                    return

                #T_1 = np.array(DMM.ReadMeasurementPoints()).mean()
                old_T_1 = T_1
                T_1 = np.array(self.dmm.GetMultipointMeas()).mean()

                # Repeat if more than 50% HRADC samples == 0
                old_sumNonFSCodes = sumNonFSCodes
                sumNonFSCodes = sum(sampHRADC > 0)
                print('DMM T[1]     "non-FS codes"')
                print(str(T_1) + '      ' + str(sumNonFSCodes) + '\n')
                if (sumNonFSCodes >= len(sampHRADC) / 2):
                    break

            T_1 = (old_T_1 * old_sumNonFSCodes +
                   T_1 * sumNonFSCodes) / (old_sumNonFSCodes + sumNonFSCodes)

            print('*** Vin T[1]: ' + str(T_1) + ' V ***\n\n')

            ################################################
            print('     *** Configurando Vin +FS ... ***\n')
            ################################################
            self.update_gui.emit('  Encontrando fundo de escala +Vin...')

            sourceOut = 9.9

            while True:
                sourceOut = self._saturate(sourceOut, -self.vin_max,
                                           self.vin_max)

                # if any HRADC samples != 0, set source lower
                print('sourceOut = ' + str(sourceOut) + ' V\n')
                self.source.SetOutput(sourceOut, 'V')
                time.sleep(self.settlingTime)

                self.drs.EnableSamplesBuffer()
                time.sleep(1)
                self.drs.DisableSamplesBuffer()
                time.sleep(1)

                sampHRADC = np.array(self.drs.Recv_samplesBuffer_blocks(0))
                print(sampHRADC)

                if np.array_equal(sampHRADC, emptyBuff):
                    print(
                        '\n************** FALHA SAMPLES BUFFER **************\n'
                    )
                    self.source.DisableOutput()
                    self.DisableHRADCSampling()
                    return

                meanHRADC = sampHRADC.mean()
                stdHRADC = sampHRADC.std()

                deltaFS = 20 - meanHRADC * self.vin_lsb
                inc = deltaFS if deltaFS > self.vin_lsb else self.vin_lsb

                print('\nmin    meanHRADC   stdHRADC    inc')
                print(
                    str(sampHRADC.min()) + '    ' + str(meanHRADC) + '    ' +
                    str(stdHRADC) + '    ' + str(inc) + '\n')

                if ((sampHRADC == 0x3FFFF).all()):
                    break

                sourceOut += inc

            vin_posFS = np.array(self.dmm.ReadMeasurementPoints()).mean()
            print('Vin +FS: ' + str(vin_posFS) + ' V\n')

            ###################################################
            print('\n     *** Procurando Vin T[end] ... ***\n')
            ###################################################
            self.update_gui.emit('  Procurando Vin T[end]...')

            sumNonFSCodes = 0
            T_end = vin_posFS

            while True:

                # Decrement source output
                sourceOut -= self.vin_step
                sourceOut = self._saturate(sourceOut, -self.vin_max,
                                           self.vin_max)
                print('sourceOut = ' + str(sourceOut) + ' V\n')
                self.source.SetOutput(sourceOut, 'V')
                time.sleep(self.settlingTime)

                # Start measurements
                self.dmm.TrigMultipointMeas()
                self.drs.EnableSamplesBuffer()
                time.sleep(1)
                self.drs.DisableSamplesBuffer()
                time.sleep(1)

                sampHRADC = np.array(self.drs.Recv_samplesBuffer_allblocks())
                print(sampHRADC)

                meanHRADC = sampHRADC.mean()
                stdHRADC = sampHRADC.std()

                print('\nmin    meanHRADC   stdHRADC')
                print(
                    str(sampHRADC.min()) + '    ' + str(meanHRADC) + '    ' +
                    str(stdHRADC) + '\n')

                if np.array_equal(sampHRADC, emptyBuff):
                    print(
                        '\n************** FALHA SAMPLES BUFFER **************\n'
                    )
                    self.source.DisableOutput()
                    self.DisableHRADCSampling()
                    return

                #T_end = np.array(DMM.ReadMeasurementPoints()).mean()
                old_T_end = T_end
                T_end = np.array(self.dmm.GetMultipointMeas()).mean()

                # Repeat if more than 50% HRADC samples == 0
                old_sumNonFSCodes = sumNonFSCodes
                sumNonFSCodes = sum(sampHRADC < 0x3FFFF)
                print('DMM T[end]     "non-FS codes"')
                print(str(T_end) + '      ' + str(sumNonFSCodes) + '\n')
                if (sumNonFSCodes >= len(sampHRADC) / 2):
                    break

            T_end = (old_T_end * old_sumNonFSCodes + T_end * sumNonFSCodes) / (
                old_sumNonFSCodes + sumNonFSCodes)

            print('*** Vin T[end]: ' + str(T_end) + ' V ***')
            print('*** Vin T[1]: ' + str(T_1) + ' V ***\n')

            log.vin_gain = (T_end - T_1) / (20 - self.vin_lsb)
            log.vin_offset = T_1 - log.vin_gain * (-10 + self.vin_lsb / 2)

            print('  Vin Gain: ' + str(log.vin_gain))
            print('  Vin Offset: ' + str(log.vin_offset))
            print('\nTempo de execucao: ' +
                  str((time.perf_counter() - t0) / 60) + ' min\n\n')

            self.source.SetOutput(0, 'V')
            self.source.DisableOutput()
            self.drs.DisableHRADCSampling()
            time.sleep(1)

            print('*********************************')
            print('****** Medindo referencias ******')
            print('*********************************\n')

            print('  Medindo +Vref...\n')
            self.update_gui.emit('  Medindo +Vref...')

            self.drs.ConfigHRADC(slot, 100000, 'Vref_bipolar_p', 0, 0)
            time.sleep(1)
            self.drs.EnableHRADCSampling()
            time.sleep(0.5)
            self.drs.EnableSamplesBuffer()
            time.sleep(0.5)
            self.drs.DisableSamplesBuffer()
            time.sleep(0.5)
            self.drs.DisableHRADCSampling()
            time.sleep(0.5)

            sampHRADC = np.array(self.drs.Recv_samplesBuffer_allblocks())
            print(sampHRADC)

            if np.array_equal(sampHRADC, emptyBuff):
                print('\n************** FALHA SAMPLES BUFFER **************\n')
                self.source.DisableOutput()
                self.DisableHRADCSampling()
                return

            log.vref_p = self._convertVinSample(sampHRADC.mean())
            print('\n+Vref = ' + str(log.vref_p) + ' V\n')

            print('  Medindo -Vref...\n')
            self.update_gui.emit('  Medindo -Vref...')

            self.drs.ConfigHRADC(slot, 100000, 'Vref_bipolar_n', 0, 0)
            time.sleep(1)
            self.drs.EnableHRADCSampling()
            time.sleep(0.5)
            self.drs.EnableSamplesBuffer()
            time.sleep(0.5)
            self.drs.DisableSamplesBuffer()
            time.sleep(0.5)
            self.drs.DisableHRADCSampling()
            time.sleep(0.5)

            sampHRADC = np.array(self.drs.Recv_samplesBuffer_allblocks())
            print(sampHRADC)

            if np.array_equal(sampHRADC, emptyBuff):
                print('\n************** FALHA SAMPLES BUFFER **************\n')
                self.source.DisableOutput()
                self.DisableHRADCSampling()
                return

            log.vref_n = self._convertVinSample(sampHRADC.mean())
            print('\n-Vref = ' + str(log.vref_n) + ' V\n')

            print('  Medindo GND...\n')
            self.update_gui.emit('  Medindo GND...')

            self.drs.ConfigHRADC(slot, 100000, 'GND', 0, 0)
            time.sleep(1)
            self.drs.EnableHRADCSampling()
            time.sleep(0.5)
            self.drs.EnableSamplesBuffer()
            time.sleep(0.5)
            self.drs.DisableSamplesBuffer()
            time.sleep(0.5)
            self.drs.DisableHRADCSampling()
            time.sleep(0.5)

            sampHRADC = np.array(self.drs.Recv_samplesBuffer_allblocks())
            print(sampHRADC)

            if np.array_equal(sampHRADC, emptyBuff):
                print('\n************** FALHA SAMPLES BUFFER **************\n')
                self.source.DisableOutput()
                self.DisableHRADCSampling()
                return

            log.gnd = self._convertVinSample(sampHRADC.mean())
            print('\nGND = ' + str(log.gnd) + ' V\n\n')

            print('**********************************')
            print('****** Medindo temperaturas ******')
            print('**********************************\n')

            self.update_gui.emit('  Medindo temperaturas...')

            self.drs.ConfigHRADC(slot, 100000, 'Temp', 0, 0)
            time.sleep(1)
            self.drs.EnableHRADCSampling()
            time.sleep(0.5)
            self.drs.EnableSamplesBuffer()
            time.sleep(0.5)
            self.drs.DisableSamplesBuffer()
            time.sleep(0.5)
            self.drs.DisableHRADCSampling()
            time.sleep(0.5)

            sampHRADC = np.array(self.drs.Recv_samplesBuffer_blocks(0))

            if np.array_equal(sampHRADC, emptyBuff):
                print('\n************** FALHA SAMPLES BUFFER **************\n')
                self.source.DisableOutput()
                self.DisableHRADCSampling()
                return

            log.temperature_hradc = -100 * self._convertVinSample(
                sampHRADC.mean())
            log.temperature_power_supply = self.source.GetTemperature()
            log.temperature_dmm = self.dmm.GetTemperature()

            print('HRADC Temp = ' + str(log.temperature_hradc) + ' oC')
            print('Source Temp = ' + str(log.temperature_power_supply) + ' oC')
            print('DMM Temp = ' + str(log.temperature_dmm) + ' oC\n')

            if variant == 'HRADC-FBP':

                print('*****************************************')
                print('****** Iniciando calibracao Iin... ******')
                print('*****************************************\n')

                self.dmm.SetMeasurementType('DCI', 0.05)
                self.source.SetOutput(0, 'I')
                self.drs.SelectTestSource('Iin_bipolar')
                time.sleep(0.5)
                self.drs.ConfigHRADC(slot, 100000, 'Iin_bipolar', 0, 0)
                time.sleep(1)
                self.drs.EnableHRADCSampling()
                time.sleep(0.5)

                ################################################
                print('     *** Configurando Iin -FS ... ***\n')
                ################################################
                self.update_gui.emit('  Encontrando fundo de escala -Iin...')

                sourceOut = -0.0495
                self.source.EnableOutput()

                while True:
                    sourceOut = self._saturate(sourceOut, -self.iin_max,
                                               self.iin_max)

                    # if any HRADC samples != 0, set source lower
                    print('sourceOut = ' + str(sourceOut) + ' A\n')
                    self.source.SetOutput(sourceOut, 'I')
                    time.sleep(self.settlingTime)

                    self.drs.EnableSamplesBuffer()
                    time.sleep(1)
                    self.drs.DisableSamplesBuffer()
                    time.sleep(1)

                    sampHRADC = np.array(self.drs.Recv_samplesBuffer_blocks(0))
                    print(sampHRADC)

                    if np.array_equal(sampHRADC, emptyBuff):
                        print(
                            '\n************** FALHA SAMPLES BUFFER **************\n'
                        )
                        self.source.DisableOutput()
                        self.DisableHRADCSampling()
                        return

                    meanHRADC = sampHRADC.mean()
                    stdHRADC = sampHRADC.std()

                    deltaFS = meanHRADC * self.iin_lsb
                    inc = deltaFS if deltaFS > self.iin_lsb else self.iin_lsb

                    print('\nmax    meanHRADC   stdHRADC    inc')
                    print(
                        str(sampHRADC.max()) + '    ' + str(meanHRADC) +
                        '    ' + str(stdHRADC) + '    ' + str(inc) + '\n')

                    #if((sampHRADC == 0).all()):
                    if (sum(sampHRADC == 0) >= len(sampHRADC) * 0.9):
                        break

                    sourceOut -= inc

                iin_negFS = np.array(self.dmm.ReadMeasurementPoints()).mean()
                print('Iin -FS: ' + str(iin_negFS) + ' A\n')

                #################################################
                print('\n     *** Procurando Iin T[1] ... ***\n')
                #################################################
                self.update_gui.emit('  Procurando Iin T[1]...')

                sumNonFSCodes = 0
                T_1 = iin_negFS

                while True:

                    # Increment source output
                    sourceOut += self.iin_step
                    sourceOut = self._saturate(sourceOut, -self.iin_max,
                                               self.iin_max)
                    print('sourceOut = ' + str(sourceOut) + ' A\n')
                    self.source.SetOutput(sourceOut, 'I')
                    time.sleep(self.settlingTime)

                    # Start measurements
                    self.dmm.TrigMultipointMeas()
                    self.drs.EnableSamplesBuffer()
                    time.sleep(1)
                    self.drs.DisableSamplesBuffer()
                    time.sleep(1)

                    sampHRADC = np.array(
                        self.drs.Recv_samplesBuffer_allblocks())
                    print(sampHRADC)

                    meanHRADC = sampHRADC.mean()
                    stdHRADC = sampHRADC.std()

                    print('\nmax    meanHRADC   stdHRADC')
                    print(
                        str(sampHRADC.max()) + '    ' + str(meanHRADC) +
                        '    ' + str(stdHRADC) + '\n')

                    if np.array_equal(sampHRADC, emptyBuff):
                        print(
                            '\n************** FALHA SAMPLES BUFFER **************\n'
                        )
                        self.source.DisableOutput()
                        self.DisableHRADCSampling()
                        return

                    #T_1 = np.array(DMM.ReadMeasurementPoints()).mean()
                    old_T_1 = T_1
                    T_1 = np.array(self.dmm.GetMultipointMeas()).mean()

                    # Repeat if more than 50% HRADC samples == 0
                    old_sumNonFSCodes = sumNonFSCodes
                    sumNonFSCodes = sum(sampHRADC > 0)
                    print('DMM T[1]     "non-FS codes"')
                    print(str(T_1) + '      ' + str(sumNonFSCodes) + '\n')
                    if (sumNonFSCodes >= len(sampHRADC) / 2):
                        break

                T_1 = (old_T_1 * old_sumNonFSCodes + T_1 * sumNonFSCodes) / (
                    old_sumNonFSCodes + sumNonFSCodes)

                print('*** Iin T[1]: ' + str(T_1) + ' A ***\n\n')

                ################################################
                print('     *** Configurando Iin +FS ... ***\n')
                ################################################
                self.update_gui.emit('  Encontrando fundo de escala +Iin...')

                sourceOut = 0.0495

                while True:
                    sourceOut = self._saturate(sourceOut, -self.iin_max,
                                               self.iin_max)

                    # if any HRADC samples != 0, set source lower
                    print('sourceOut = ' + str(sourceOut) + ' A\n')
                    self.source.SetOutput(sourceOut, 'I')
                    time.sleep(self.settlingTime)

                    self.drs.EnableSamplesBuffer()
                    time.sleep(1)
                    self.drs.DisableSamplesBuffer()
                    time.sleep(1)

                    sampHRADC = np.array(self.drs.Recv_samplesBuffer_blocks(0))
                    print(sampHRADC)

                    if np.array_equal(sampHRADC, emptyBuff):
                        print(
                            '\n************** FALHA SAMPLES BUFFER **************\n'
                        )
                        self.source.DisableOutput()
                        self.DisableHRADCSampling()
                        return

                    meanHRADC = sampHRADC.mean()
                    stdHRADC = sampHRADC.std()

                    deltaFS = 0.1 - meanHRADC * self.iin_lsb
                    inc = deltaFS if deltaFS > self.iin_lsb else self.iin_lsb

                    print('\nmin    meanHRADC   stdHRADC    inc')
                    print(
                        str(sampHRADC.min()) + '    ' + str(meanHRADC) +
                        '    ' + str(stdHRADC) + '    ' + str(inc) + '\n')

                    #if((sampHRADC == 0x3FFFF).all()):
                    if (sum(sampHRADC == 0x3FFFF) >= len(sampHRADC) * 0.9):
                        break

                    sourceOut += inc

                iin_posFS = np.array(self.dmm.ReadMeasurementPoints()).mean()
                print('Iin +FS: ' + str(iin_posFS) + ' A\n')

                ###################################################
                print('\n     *** Procurando Iin T[end] ... ***\n')
                ###################################################
                self.update_gui.emit('  Procurando Iin T[end]...')

                sumNonFSCodes = 0
                T_end = iin_posFS

                while True:

                    # Decrement source output
                    sourceOut -= self.iin_step
                    sourceOut = self._saturate(sourceOut, -self.iin_max,
                                               self.iin_max)
                    print('sourceOut = ' + str(sourceOut) + ' A\n')
                    self.source.SetOutput(sourceOut, 'I')
                    time.sleep(self.settlingTime)

                    # Start measurements
                    self.dmm.TrigMultipointMeas()
                    self.drs.EnableSamplesBuffer()
                    time.sleep(1)
                    self.drs.DisableSamplesBuffer()
                    time.sleep(1)

                    sampHRADC = np.array(
                        self.drs.Recv_samplesBuffer_allblocks())
                    print(sampHRADC)

                    meanHRADC = sampHRADC.mean()
                    stdHRADC = sampHRADC.std()

                    print('\nmin    meanHRADC   stdHRADC')
                    print(
                        str(sampHRADC.min()) + '    ' + str(meanHRADC) +
                        '    ' + str(stdHRADC) + '\n')

                    if np.array_equal(sampHRADC, emptyBuff):
                        print(
                            '\n************** FALHA SAMPLES BUFFER **************\n'
                        )
                        self.source.DisableOutput()
                        self.DisableHRADCSampling()
                        return

                    #T_end = np.array(DMM.ReadMeasurementPoints()).mean()
                    old_T_end = T_end
                    T_end = np.array(self.dmm.GetMultipointMeas()).mean()

                    # Repeat if more than 50% HRADC samples == 0
                    old_sumNonFSCodes = sumNonFSCodes
                    sumNonFSCodes = sum(sampHRADC < 0x3FFFF)
                    print('DMM T[end]     "non-FS codes"')
                    print(str(T_end) + '      ' + str(sumNonFSCodes) + '\n')
                    if (sumNonFSCodes >= len(sampHRADC) / 2):
                        break

                T_end = (old_T_end * old_sumNonFSCodes + T_end *
                         sumNonFSCodes) / (old_sumNonFSCodes + sumNonFSCodes)

                print('*** Iin T[end]: ' + str(T_end) + ' A ***')
                print('*** Iin T[1]: ' + str(T_1) + ' A ***\n')

                log.iin_gain = (T_end - T_1) / (0.1 - self.iin_lsb)
                log.iin_offset = T_1 - log.iin_gain * (-0.05 +
                                                       self.iin_lsb / 2)

            else:
                log.iin_gain = 0
                log.iin_offset = 0

            self.source.SetOutput(0, 'V')
            self.source.DisableOutput()
            self.drs.DisableHRADCSampling()
            time.sleep(1)

            print('************************************')
            print('****** Salvando resultados... ******')
            print('************************************\n')

            print('Configurando placa em modo UFM...')
            self.update_gui.emit('  Configurando placa em modo UFM...')
            #slot = slot - 1
            self.drs.ConfigHRADCOpMode(slot, 1)
            time.sleep(0.5)

            print('\Salvando resultados da calibracao na placa HRADC...')
            self.update_gui.emit(
                '  Salvando resultados da calibracao na placa HRADC...')
            data = time.localtime()
            # Day
            ufmdata_16 = self._convertToUint16List(data.tm_mday, 'Uint16')
            for i in range(len(ufmdata_16)):
                self.drs.WriteHRADC_UFM(slot, i + self.ufmOffset['calibdate'],
                                        ufmdata_16[i])
                time.sleep(0.1)
            # Month
            ufmdata_16 = self._convertToUint16List(data.tm_mon, 'Uint16')
            for i in range(len(ufmdata_16)):
                self.drs.WriteHRADC_UFM(slot,
                                        i + self.ufmOffset['calibdate'] + 1,
                                        ufmdata_16[i])
                time.sleep(0.1)
            # Year
            ufmdata_16 = self._convertToUint16List(data.tm_year, 'Uint16')
            for i in range(len(ufmdata_16)):
                self.drs.WriteHRADC_UFM(slot,
                                        i + self.ufmOffset['calibdate'] + 2,
                                        ufmdata_16[i])
                time.sleep(0.1)
            # Hour
            ufmdata_16 = self._convertToUint16List(data.tm_hour, 'Uint16')
            for i in range(len(ufmdata_16)):
                self.drs.WriteHRADC_UFM(slot,
                                        i + self.ufmOffset['calibdate'] + 3,
                                        ufmdata_16[i])
                time.sleep(0.1)
            # Minutes
            ufmdata_16 = self._convertToUint16List(data.tm_min, 'Uint16')
            for i in range(len(ufmdata_16)):
                self.drs.WriteHRADC_UFM(slot,
                                        i + self.ufmOffset['calibdate'] + 4,
                                        ufmdata_16[i])
                time.sleep(0.1)
            # HRADC Temperature
            ufmdata_16 = self._convertToUint16List(log.temperature_hradc,
                                                   'float')
            for i in range(len(ufmdata_16)):
                self.drs.WriteHRADC_UFM(slot, i + self.ufmOffset['calibtemp'],
                                        ufmdata_16[i])
                time.sleep(0.1)
            # Vin gain
            ufmdata_16 = self._convertToUint16List(log.vin_gain, 'float')
            for i in range(len(ufmdata_16)):
                self.drs.WriteHRADC_UFM(slot, i + self.ufmOffset['vin_gain'],
                                        ufmdata_16[i])
                time.sleep(0.1)
            # Vin offset
            ufmdata_16 = self._convertToUint16List(log.vin_offset, 'float')
            for i in range(len(ufmdata_16)):
                self.drs.WriteHRADC_UFM(slot, i + self.ufmOffset['vin_offset'],
                                        ufmdata_16[i])
                time.sleep(0.1)
            # Iin gain
            ufmdata_16 = self._convertToUint16List(log.iin_gain, 'float')
            for i in range(len(ufmdata_16)):
                self.drs.WriteHRADC_UFM(slot, i + self.ufmOffset['iin_gain'],
                                        ufmdata_16[i])
                time.sleep(0.1)
            # Iin offset
            ufmdata_16 = self._convertToUint16List(log.iin_offset, 'float')
            for i in range(len(ufmdata_16)):
                self.drs.WriteHRADC_UFM(slot, i + self.ufmOffset['iin_offset'],
                                        ufmdata_16[i])
                time.sleep(0.1)
            # +Vref
            ufmdata_16 = self._convertToUint16List(log.vref_p, 'float')
            for i in range(len(ufmdata_16)):
                self.drs.WriteHRADC_UFM(slot, i + self.ufmOffset['vref_p'],
                                        ufmdata_16[i])
                time.sleep(0.1)
            # -Vref
            ufmdata_16 = self._convertToUint16List(log.vref_n, 'float')
            for i in range(len(ufmdata_16)):
                self.drs.WriteHRADC_UFM(slot, i + self.ufmOffset['vref_n'],
                                        ufmdata_16[i])
                time.sleep(0.1)
            # GND
            ufmdata_16 = self._convertToUint16List(log.gnd, 'float')
            for i in range(len(ufmdata_16)):
                self.drs.WriteHRADC_UFM(slot, i + self.ufmOffset['gnd'],
                                        ufmdata_16[i])
                time.sleep(0.1)

            self.drs.ReadHRADC_BoardData(slot)
            time.sleep(1)

            print('Configurando placa em modo Sampling...')
            self.update_gui.emit('  Configurando placa em modo Sampling...')
            self.drs.ConfigHRADCOpMode(slot, 0)
            time.sleep(0.5)

            print('Enviando dados ao servidor...\n')
            self.update_gui.emit('  Enviando dados ao servidor...')
            log_res = self._send_to_server(log)

            print('\n\n*****************************************')
            print('******         RESULTADOS          ******')
            print('*****************************************\n')

            print('  Vin Gain: ' + str(log.vin_gain))
            print('  Vin Offset: ' + str(log.vin_offset))

            print('  Iin Gain: ' + str(log.iin_gain))
            print('  Iin Offset: ' + str(log.iin_offset))

            print('  +Vref = ' + str(log.vref_p) + ' V')
            print('  -Vref = ' + str(log.vref_n) + ' V')
            print('  GND = ' + str(log.gnd) + ' V\n')

            print('  HRADC Temp = ' + str(log.temperature_hradc) + ' oC')
            print('  Source Temp = ' + str(log.temperature_power_supply) +
                  ' oC')
            print('  DMM Temp = ' + str(log.temperature_dmm) + ' oC\n')

            deltaT = time.perf_counter() - t0
            print('  Tempo de execucao: ' + str(deltaT / 60) + ' min\n\n')

            self.update_gui.emit('\n  Resultados:\n')
            self.update_gui.emit('    Vin Gain: ' + str(log.vin_gain))
            self.update_gui.emit('    Vin Offset: ' + str(log.vin_offset))
            self.update_gui.emit('')
            self.update_gui.emit('    Iin Gain: ' + str(log.iin_gain))
            self.update_gui.emit('    Iin Offset: ' + str(log.iin_offset))
            self.update_gui.emit('')
            self.update_gui.emit('    +Vref = ' + str(log.vref_p) + ' V')
            self.update_gui.emit('    -Vref = ' + str(log.vref_n) + ' V')
            self.update_gui.emit('    GND = ' + str(log.gnd) + ' V')
            self.update_gui.emit('')
            self.update_gui.emit('    HRADC Temp = ' +
                                 str(log.temperature_hradc) + ' oC')
            self.update_gui.emit('    Source Temp = ' +
                                 str(log.temperature_power_supply) + ' oC')
            self.update_gui.emit('    DMM Temp = ' + str(log.temperature_dmm) +
                                 ' oC')
            self.update_gui.emit('')
            self.update_gui.emit('    Tempo de execucao: ' + str(deltaT / 60) +
                                 ' min')
            self.update_gui.emit('*** CALIBRACAO DO SLOT #' + str(slot) +
                                 ' ENCERRADA! ***\n\n')

        self.update_gui.emit('Fim do procedimento de calibração\n\n')
        self.calib_complete.emit(log_res)

    def _send_to_server(self, item):
        client = ElpWebClient()
        client_data = item.data
        print(client_data)
        client_method = item.method
        client_response = client.do_request(client_method, client_data)
        server_status = self._parse_response(client_response)
        print(client_response)
        return server_status

    def _parse_response(self, response):
        res_key = 'StatusCode'
        err_key = 'error'

        if res_key in response.keys() and err_key not in response.keys():
            return True
        else:
            return False

    def _convertToUint16List(self, val, format):

        val_16 = []
        val_b = struct.pack(self.bytesFormat[format], val)
        print(val_b)
        for i in range(0, len(val_b), 2):
            val_16.append(struct.unpack('H', val_b[i:i + 2])[0])
        print(val_16)
        return val_16

    def _configBoardsToTest(self, board, inputType):
        for slot in range(self.nHRADC):
            if slot == board['slot']:
                self.drs.ConfigHRADC(slot, 100000, inputType, 0, 0)
            else:
                self.drs.ConfigHRADC(slot, 100000, 'GND', 0, 0)

    def _saturate(self, val, min, max):
        if val > max:
            return max
        elif val < min:
            return min
        return val

    def _convertVinSample(self, sample):
        val = (sample - 131072) * self.vin_lsb
        return val

    def _convertIinSample(self, sample):
        val = (sample - 131072) * self.iin_lsb
        return val

    def run(self):
        self._calib_sequence()
Exemplo n.º 16
0
class FacDcdc(QThread):

    update_gui = pyqtSignal(dict)

    def __init__(self):
        QThread.__init__(self)

        self._drs = SerialDRS()
        self._baudrate = '6000000'
        self._is_active = False
        self._screen_readings = {
            'setpoint': 0.0,
            'reference': 0.0,
            'slowref_counter': 0,
            'syncpulse_counter': 0,
            'iload_1': 0.0,
            'iload_2': 0.0,
            'vload': 0.0,
            'vcapbank': 0.0,
            'induc_temp': 0.0,
            'igbt_temp': 0.0,
            'duty_cycle': 0,
            'soft_intlk': 0,
            'hard_intlk': 0,
            'fwr_version': ''
        }

        self._hard_interlocks = [
            'Falha nos drivers do módulo', 'Sub-tensão no DCLINK',
            'Sobre-tensão no DCLINK', 'Sobre-tensão na carga',
            'Sobre-corrente na carga'
        ]

        self._soft_interlocks = [
            'Falha leitura DCCT 2', 'Falha leitura DCCT 1',
            'Alta diferença entre DCCTs', 'Falha DCCT 2', 'Falha DCCT 1',
            'Sobre-temperatura nos indutores',
            'Sobre-temperatura nos indutores'
        ]

    @property
    def is_active(self):
        return self._is_active

    def connect_serial(self, com_port):
        res = False
        if com_port is not None:
            res = self._drs.Connect(com_port, self._baudrate)
            self._is_active = True
        return res

    def disconnect_serial(self):
        res = self._drs.Disconnect()
        self._is_active = False
        return res

    def turn_on(self):
        try:
            self._drs.turn_on()
        except:
            pass

    def turn_off(self):
        try:
            self._drs.turn_off()
        except:
            pass

    def open_loop(self):
        try:
            self._drs.open_loop()
        except:
            pass

    def close_loop(self):
        try:
            self._drs.close_loop()
        except:
            pass

    def enable_siggen(self):
        try:
            self._drs.enable_siggen()
        except:
            pass

    def disable_siggen(self):
        try:
            self._drs.disable_siggen()
        except:
            pass

    def soft_intlk_reset(self):
        pass

    def hard_intlk_reset(self):
        pass

    def send_setpoint(self, value):
        res = self._drs.set_slowref(value)

    def check_interlocks(self):
        res = True
        intlk = self._drs.read_bsmp_variable(26, 'uint32_t')
        if intlk is 0:
            res = False
        return res

    def update_params(self):
        try:
            self._screen_readings['setpoint'] = round(
                self._drs.read_bsmp_variable(1, 'float'), 3)
            self._screen_readings['reference'] = round(
                self._drs.read_bsmp_variable(2, 'float'), 3)
            self._screen_readings[
                'slowref_counter'] = self._drs.read_bsmp_variable(
                    4, 'uint32_t')
            self._screen_readings[
                'syncpulse_counter'] = self._drs.read_bsmp_variable(
                    5, 'uint32_t')
            self._screen_readings['soft_intlk'] = self._drs.read_bsmp_variable(
                25, 'uint32_t')
            self._screen_readings['hard_intlk'] = self._drs.read_bsmp_variable(
                26, 'uint32_t')
            self._screen_readings['iload_1'] = round(
                self._drs.read_bsmp_variable(27, 'float'), 3)
            self._screen_readings['iload_2'] = round(
                self._drs.read_bsmp_variable(28, 'float'), 3)
            self._screen_readings['vload'] = round(
                self._drs.read_bsmp_variable(29, 'float'), 3)
            self._screen_readings['vcapbank'] = round(
                self._drs.read_bsmp_variable(30, 'float'), 3)
            self._screen_readings['induc_temp'] = round(
                self._drs.read_bsmp_variable(31, 'float'), 3)
            self._screen_readings['igbt_temp'] = round(
                self._drs.read_bsmp_variable(32, 'float'), 3)
            self._screen_readings['duty_cycle'] = round(
                self._drs.read_bsmp_variable(33, 'float'), 3)
            self._screen_readings[
                'fwr_version'] = self._drs.read_udc_arm_version()
            self.update_gui.emit(self._screen_readings)
        except:
            pass

    def get_hard_intlk_list(self, bitmask):
        bitfield = self._get_bitfield(bitmask)
        mask = bitfield[len(bitfield) - len(self._hard_interlocks):]
        filtered = itertools.compress(self._hard_interlocks, mask)
        return list(filtered)

    def get_soft_intlk_list(self, bitmask):
        bitfield = self._get_bitfield(bitmask)
        mask = bitfield[len(bitfield) - len(self._soft_interlocks):]
        filtered = itertools.compress(self._soft_interlocks, mask)
        return list(filtered)

    def _get_bitfield(self, bitmask):
        bitfield = [int(bit)
                    for bit in bin(bitmask)[2:]]  # [2:] to remove '0b'
        return bitfield
Exemplo n.º 17
0
class BurnInTest(QThread):
    test_complete = pyqtSignal(bool)
    update_gui = pyqtSignal(str)
    current_state = pyqtSignal(str)
    connection_lost = pyqtSignal()

    test = {'Normal': 1, 'Burn-In': 2}

    def __init__(self):
        QThread.__init__(self)
        self._comport = None
        self._baudarate = None
        self._serial_number = []
        self._ps_address = 1
        self.FBP = SerialDRS()

    @property
    def serial_number(self):
        return self._serial_number

    @serial_number.setter
    def serial_number(self, value):
        self._serial_number = value

    @property
    def comport(self):
        return self._comport

    @comport.setter
    def comport(self, value):
        self._comport = value

    @property
    def baudrate(self):
        return self._baudarate

    @baudrate.setter
    def baudrate(self, value):
        self._baudrate = value

    def open_serial_port(self):
        if self._comport is None or self._baudrate is None:
            return False
        else:
            return self.FBP.Connect(self._comport, self._baudrate)

    def test_communication(self, ps_address):
        result = False
        self.FBP.SetSlaveAdd(ps_address)
        time.sleep(1)

        try:
            self.FBP.Config_nHRADC(4)  # alterar para 4
            # self.FBP.Write_sigGen_Aux(1) # alterar para 4
            time.sleep(5)
            test_package = self.FBP.Read_ps_Model()
            time.sleep(1)

            if (test_package[0] ==   0) and \
               (test_package[1] ==  17) and \
               (test_package[2] == 512) and \
               (test_package[3] ==  14) and \
               (test_package[4] == 223):
                result = True
            else:
                result = False
        except:
            result = False
            print('Falha na comunicação')

        return result

    def find_address(self):
        test_address = 1

        while (self.test_communication(test_address) == False):
            print(test_address)
            test_address = test_address + 1

        print('o endereço da fonte é: ' + str(test_address))
        return test_address

    def set_address(self):
        write_gui = []
        ps_address = self.find_address()
        time.sleep(0.5)

        self.FBP.SetSlaveAdd(ps_address)
        time.sleep(1)

        if self.test_communication(ps_address):
            self.FBP.SetRSAddress(self._ps_address)
            time.sleep(1)

            if self.test_communication(self._ps_address):
                write_gui.append(str(self._ps_address))
                write_gui.append('endereço ' + str(self._ps_address) +
                                 ' gravado com sucesso')
                print('endereço ' + str(self._ps_address) +
                      ' gravado com sucesso')
                self._ps_address = self._ps_address + 1
            else:
                write_gui.append('erro na gravação do endereço')
                print('erro na gravação do endereço')

        return write_gui

    def _test_sequence(self):
        self.current_state.emit('Desligado')

        print('##################################################')
        print('##################################################')
        print(self._serial_number)
        print('##################################################')
        print('##################################################')

        test_current = [7,
                        -7]  # alterar para 10 e -10, adequação à carga da WEG

        for set_current in test_current:
            for ps_turnOn in self._serial_number:
                if self.test_communication(
                        self._serial_number.index(ps_turnOn) + 1):
                    self.FBP.SetSlaveAdd(
                        self._serial_number.index(ps_turnOn) + 1)
                    time.sleep(1)
                    self.FBP.Config_nHRADC(4)  # alterar para 4
                    time.sleep(5)

                    self.update_gui.emit(
                        'Realizando auto-tuning dos módulos de potência...')
                    self.update_gui.emit(
                        '                                                         auto-tuning módulo 1...'
                    )
                    duty_mod1 = self._auto_tuning(set_current, 1)
                    self.update_gui.emit(
                        '                                                         auto-tuning módulo 2...'
                    )
                    duty_mod2 = self._auto_tuning(set_current, 2)
                    self.update_gui.emit(
                        '                                                         auto-tuning módulo 3...'
                    )
                    duty_mod3 = self._auto_tuning(set_current, 3)
                    self.update_gui.emit(
                        '                                                         auto-tuning módulo 4...'
                    )
                    duty_mod4 = self._auto_tuning(set_current, 4)

                    self.update_gui.emit(
                        'Ligando fontes e setando correntes para ' +
                        str(set_current) + ' A')
                    time.sleep(1)
                    self.FBP.ResetInterlocks()
                    time.sleep(0.5)
                    self.FBP.TurnOn(0b1111)  # alterar para 0b1111
                    time.sleep(1)
                    self.FBP.SetISlowRefx4(duty_mod1, duty_mod2, duty_mod3,
                                           duty_mod4)
                    time.sleep(0.5)
                    self.current_state.emit(str(set_current) + 'A')

                    if (abs(self.FBP.Read_iMod1()) > 12) or \
                       (abs(self.FBP.Read_iMod2()) > 12) or \
                       (abs(self.FBP.Read_iMod3()) > 12) or \
                       (abs(self.FBP.Read_iMod4()) > 12) or \
                       (round(self.FBP.Read_iMod1()) == 0) or \
                       (round(self.FBP.Read_iMod2()) == 0) or \
                       (round(self.FBP.Read_iMod3()) == 0) or \
                       (round(self.FBP.Read_iMod4()) == 0):
                        self.update_gui.emit(
                            'ERRO! REINICIE O TESTE E AS FONTES')
                        time.sleep(10)
                        raise NameError('ERRO! REINICIE O TESTE E AS FONTES')

                else:
                    self.update_gui.emit('Endereço não encontrado')
                    print('Endereço não encontrado')

            for a in range(72):  # alterar para 72
                for ps_under_test in self._serial_number:
                    result = True
                    ps = PowerSupply()
                    ps.serial_number = ps_under_test
                    res = self._send_to_server(ps)
                    self.update_gui.emit('Medição da fonte de número serial '\
                                         + str(ps_under_test))
                    self.update_gui.emit('')

                    if self.test_communication(
                            self._serial_number.index(ps_under_test) + 1):
                        if res:
                            #TODO: Sequencia de Testes

                            for i in range(4):  # Alterar para 4
                                self.update_gui.emit(
                                    'Iniciando medições do módulo ' +
                                    str(i + 1))
                                self.update_gui.emit('')
                                test = True
                                MeasureList = self._save_AllMeasurements\
                                (self._serial_number.index(ps_under_test) + 1, i)
                                '''########## Verificando resultado da corrente de saída ##########'''
                                '''################################################################'''
                                self.update_gui.emit(
                                    '          Corrente de saída: ' +
                                    str(MeasureList[0]))
                                if (set_current - 1.5) <= set_current <= (
                                        set_current + 1.5):
                                    self.update_gui.emit(
                                        '          Leitura da corrente de saída OK'
                                    )
                                    if test:
                                        test = True
                                else:
                                    test = False
                                    self.update_gui.emit(
                                        '          Leitura da corrente de saída NOK'
                                    )
                                self.update_gui.emit('')
                                '''################################################################'''
                                '''########### Verificando resultado da tensão de saída ###########'''
                                '''################################################################'''
                                self.update_gui.emit(
                                    '          Tensão de saída: ' +
                                    str(MeasureList[1]))
                                if set_current > 0:
                                    if 1 <= round(MeasureList[1]) <= 14:
                                        self.update_gui.emit(
                                            '          Leitura da tensão de saída OK'
                                        )
                                        if test:
                                            test = True
                                    else:
                                        test = False
                                        self.update_gui.emit(
                                            '          Leitura da tensão de saída NOK'
                                        )

                                elif set_current < 0:
                                    if -14 <= round(MeasureList[1]) <= -1:
                                        self.update_gui.emit(
                                            '          Leitura da tensão de saída OK'
                                        )
                                        if test:
                                            test = True
                                    else:
                                        test = False
                                        self.update_gui.emit(
                                            '          Leitura da tensão de saída NOK'
                                        )
                                self.update_gui.emit('')
                                '''################################################################'''
                                '''########## Verificando resultado da tensão de entrada ##########'''
                                '''################################################################'''
                                self.update_gui.emit(
                                    '          Tensão de entrada: ' +
                                    str(MeasureList[2]))
                                if 6 <= round(MeasureList[2]) <= 16:
                                    self.update_gui.emit(
                                        '          Leitura da tensão de entrada OK'
                                    )
                                    if test:
                                        test = True
                                else:
                                    test = False
                                    self.update_gui.emit(
                                        '          Leitura da tensão de entrada NOK'
                                    )
                                self.update_gui.emit('')
                                '''################################################################'''
                                '''############# Verificando resultado da temperatura #############'''
                                '''################################################################'''
                                self.update_gui.emit(
                                    '          Temperatura: ' +
                                    str(MeasureList[3]))
                                if (MeasureList[3] < 110) or (MeasureList[3]
                                                              == 127):
                                    self.update_gui.emit(
                                        '          Leitura da temperatura OK')
                                    if test:
                                        test = True
                                else:
                                    test = False
                                    self.update_gui.emit(
                                        '          Leitura da temperatura NOK')
                                self.update_gui.emit('')
                                '''################################################################'''

                                if set_current == test_current[0]:
                                    log = PowerSupplyLog()
                                    log.test_type = self.test['Burn-In']
                                    log.id_canal_power_supply = i + 1
                                    if test:
                                        log.test_result = 'Aprovado'
                                        self.update_gui.emit(
                                            '          MÓDULO ' + str(i + 1) +
                                            ' OK')
                                        self.update_gui.emit('')
                                    else:
                                        log.test_result = 'Reprovado'
                                        self.update_gui.emit(
                                            '          MÓDULO ' + str(i + 1) +
                                            ' NOK')
                                        self.update_gui.emit('')
                                    log.serial_number_power_supply = ps_under_test
                                    log.iout0 = MeasureList[0]
                                    log.vout0 = MeasureList[1]
                                    log.vdclink0 = MeasureList[2]
                                    log.temperatura0 = MeasureList[3]

                                    log.details = ''

                                    for _softinterlock in self._read_SoftInterlock(
                                            self.FBP.Read_ps_SoftInterlocks()):
                                        log.details = log.details + _softinterlock + '\t'

                                    for _hardinterlock in self._read_HardInterlock(
                                            self.FBP.Read_ps_HardInterlocks()):
                                        log.details = log.details + _hardinterlock + '\t'

                                    result = self._send_to_server(log)

                                elif set_current == test_current[1]:
                                    log = PowerSupplyLog()
                                    log.test_type = self.test['Burn-In']
                                    log.id_canal_power_supply = i + 1
                                    if test:
                                        log.test_result = 'Aprovado'
                                    else:
                                        log.test_result = 'Reprovado'
                                    log.serial_number_power_supply = ps_under_test
                                    log.iout1 = MeasureList[0]
                                    log.vout1 = MeasureList[1]
                                    log.vdclink1 = MeasureList[2]
                                    log.temperatura1 = MeasureList[3]

                                    log.details = ''

                                    for _softinterlock in self._read_SoftInterlock(
                                            self.FBP.Read_ps_SoftInterlocks()):
                                        log.details = log.details + _softinterlock + '\t'

                                    for _hardinterlock in self._read_HardInterlock(
                                            self.FBP.Read_ps_HardInterlocks()):
                                        log.details = log.details + _hardinterlock + '\t'

                                    result = self._send_to_server(log)

                            self.update_gui.emit(
                                '          Interlocks Ativos:')
                            for softinterlock in self._read_SoftInterlock(
                                    self.FBP.Read_ps_SoftInterlocks()):
                                self.update_gui.emit('          ' +
                                                     softinterlock)
                            for hardinterlock in self._read_HardInterlock(
                                    self.FBP.Read_ps_HardInterlocks()):
                                self.update_gui.emit('          ' +
                                                     hardinterlock)
                            self.update_gui.emit('')
                            self.update_gui.emit(
                                '*********************************************************'
                            )
                    else:
                        self.update_gui.emit('Endereço não encontrado')
                        print('Endereço não encontrado')
                if test:
                    if result:
                        result = True
                else:
                    result = False

                time.sleep(600)  #Alterar para 600

        self.test_complete.emit(result)
        self.update_gui.emit('FIM DO TESTE!')

        for ps_turnOff in self._serial_number:
            self.FBP.SetSlaveAdd(self._serial_number.index(ps_turnOff) + 1)
            time.sleep(1)
            self.FBP.TurnOff(15)
            time.sleep(1)

    def _save_AllMeasurements(self, address, module):
        self.FBP.SetSlaveAdd(address)
        time.sleep(1)
        Measurement = []

        if module == 0:
            Measurement.append(self.FBP.Read_iMod1())
            time.sleep(0.1)
            Measurement.append(self.FBP.Read_vOutMod1())
            time.sleep(0.1)
            Measurement.append(self.FBP.Read_vDCMod1())
            time.sleep(0.1)
            Measurement.append(self.FBP.Read_temp1())
            time.sleep(0.1)

        elif module == 1:
            Measurement.append(self.FBP.Read_iMod2())
            time.sleep(0.1)
            Measurement.append(self.FBP.Read_vOutMod2())
            time.sleep(0.1)
            Measurement.append(self.FBP.Read_vDCMod2())
            time.sleep(0.1)
            Measurement.append(self.FBP.Read_temp2())
            time.sleep(0.1)

        elif module == 2:
            Measurement.append(self.FBP.Read_iMod3())
            time.sleep(0.1)
            Measurement.append(self.FBP.Read_vOutMod3())
            time.sleep(0.1)
            Measurement.append(self.FBP.Read_vDCMod3())
            time.sleep(0.1)
            Measurement.append(self.FBP.Read_temp3())
            time.sleep(0.1)

        elif module == 3:
            Measurement.append(self.FBP.Read_iMod4())
            time.sleep(0.1)
            Measurement.append(self.FBP.Read_vOutMod4())
            time.sleep(0.1)
            Measurement.append(self.FBP.Read_vDCMod4())
            time.sleep(0.1)
            Measurement.append(self.FBP.Read_temp4())
            time.sleep(0.1)

        return Measurement

    def _read_SoftInterlock(self, int_interlock):
        SoftInterlockList = ['N/A', 'Sobre-tensao na carga 1', 'N/A', \
                             'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A',\
                             'Sobre-tensao na carga 2', 'N/A',        \
                             'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A',\
                             'Sobre-tensao na carga 3', 'N/A',        \
                             'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A',\
                             'Sobre-tensao na carga 4', 'N/A',        \
                             'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A']

        op_bin = 1
        ActiveSoftInterlocks = []

        print('Soft Interlocks ativos:')

        for i in range(len('{0:b}'.format(int_interlock))):
            if (int_interlock & (op_bin << i)) == 2**i:
                ActiveSoftInterlocks.append(SoftInterlockList[i])
                print(SoftInterlockList[i])
        print(
            '-------------------------------------------------------------------'
        )

        return ActiveSoftInterlocks

    def _read_HardInterlock(self, int_interlock):
        HardInterlockList = ['Sobre-corrente na carga 1', 'N/A',                   \
                             'Sobre-tensao no DC-Link do modulo 1',                \
                             'Sub-tensao no DC-Link do modulo 1',                  \
                             'Falha no rele de entrada do DC-Link do modulo 1',    \
                             'Falha no fusivel de entrada do DC-Link do modulo 1', \
                             'Falha nos drivers do modulo 1',                      \
                             'Sobre-temperatura no modulo 1',                      \
                             'Sobre-corrente na carga 2', 'N/A',                   \
                             'Sobre-tensao no DC-Link do modulo 2',                \
                             'Sub-tensao no DC-Link do modulo 2',                  \
                             'Falha no rele de entrada do DC-Link do modulo 2',    \
                             'Falha no fusivel de entrada do DC-Link do modulo 2', \
                             'Falha nos drivers do modulo 2',                      \
                             'Sobre-temperatura no modulo 2',                      \
                             'Sobre-corrente na carga 3', 'N\A',                   \
                             'Sobre-tensao no DC-Link do modulo 3',                \
                             'Sub-tensao no DC-Link do modulo 3',                  \
                             'Falha no rele de entrada no DC-Link do modulo 3',    \
                             'Falha no fusivel de entrada do DC-Link do modulo 3', \
                             'Falha nos drivers do modulo 3',                      \
                             'Sobre-temperatura no modulo 3',                      \
                             'Sobre-corrente na carga 4', 'N/A',                   \
                             'Sobre-tensao no DC-Link do modulo 4',                \
                             'Sub-tensao no DC-Link do modulo 4',                  \
                             'Falha no rele de entrada do DC-Link do modulo 4',    \
                             'Falha no fusivel de entrada do DC-Link do modulo 4', \
                             'Falha nos drivers do modulo 4',                      \
                             'Sobre-temperatura no modulo 4']
        op_bin = 1
        ActiveHardInterlocks = []

        print('Hard Interlocks ativos:')

        for i in range(len('{0:b}'.format(int_interlock))):
            if (int_interlock & (op_bin << i)) == 2**i:
                ActiveHardInterlocks.append(HardInterlockList[i])
                print(HardInterlockList[i])
        print(
            '-------------------------------------------------------------------'
        )

        return ActiveHardInterlocks

    def _auto_tuning(self, current, module):
        if current > 0:
            duty = [20, 30]
        elif current < 0:
            duty = [-20, -30]
        iout = []
        vout = []
        iref = []

        print(
            '\n####################### Auto tuning #######################\n')
        if module == 1:
            print('\nIniciando auto-tuning do modulo 1...')
            self.FBP.TurnOn(0b0001)
            time.sleep(1)
            self.FBP.SetISlowRefx4(duty[0], 0, 0, 0)
            time.sleep(5)
            iout.append(self.FBP.Read_iMod1())
            time.sleep(0.1)
            vout.append(self.FBP.Read_vOutMod1())
            time.sleep(0.1)
            iref.append(self.FBP.Read_iRef1())
            time.sleep(5)

            self.FBP.SetISlowRefx4(duty[1], 0, 0, 0)
            time.sleep(5)
            iout.append(self.FBP.Read_iMod1())
            time.sleep(0.1)
            vout.append(self.FBP.Read_vOutMod1())
            time.sleep(0.1)
            iref.append(self.FBP.Read_iRef1())
            time.sleep(1)
            self.FBP.TurnOff(1)
            time.sleep(5)

        elif module == 2:
            print('\nIniciando auto-tuning do modulo 2...')
            self.FBP.TurnOn(0b0010)
            time.sleep(1)
            self.FBP.SetISlowRefx4(0, duty[0], 0, 0)
            time.sleep(5)
            iout.append(self.FBP.Read_iMod2())
            time.sleep(0.1)
            vout.append(self.FBP.Read_vOutMod2())
            time.sleep(0.1)
            iref.append(self.FBP.Read_iRef2())
            time.sleep(5)

            self.FBP.SetISlowRefx4(0, duty[1], 0, 0)
            time.sleep(5)
            iout.append(self.FBP.Read_iMod2())
            time.sleep(0.1)
            vout.append(self.FBP.Read_vOutMod2())
            time.sleep(0.1)
            iref.append(self.FBP.Read_iRef2())
            time.sleep(1)
            self.FBP.TurnOff(0b0010)
            time.sleep(5)

        elif module == 3:
            print('\nIniciando auto-tuning do modulo 3...')
            self.FBP.TurnOn(0b0100)
            time.sleep(1)
            self.FBP.SetISlowRefx4(0, 0, duty[0], 0)
            time.sleep(5)
            iout.append(self.FBP.Read_iMod3())
            time.sleep(0.1)
            vout.append(self.FBP.Read_vOutMod3())
            time.sleep(0.1)
            iref.append(self.FBP.Read_iRef3())
            time.sleep(5)

            self.FBP.SetISlowRefx4(0, 0, duty[1], 0)
            time.sleep(5)
            iout.append(self.FBP.Read_iMod3())
            time.sleep(0.1)
            vout.append(self.FBP.Read_vOutMod3())
            time.sleep(0.1)
            iref.append(self.FBP.Read_iRef3())
            time.sleep(1)
            self.FBP.TurnOff(0b0100)
            time.sleep(5)

        elif module == 4:
            print('\nIniciando auto-tuning do modulo 4...')
            self.FBP.TurnOn(0b1000)
            time.sleep(1)
            self.FBP.SetISlowRefx4(0, 0, 0, duty[0])
            time.sleep(5)
            iout.append(self.FBP.Read_iMod4())
            time.sleep(0.1)
            vout.append(self.FBP.Read_vOutMod4())
            time.sleep(0.1)
            iref.append(self.FBP.Read_iRef4())
            time.sleep(5)

            self.FBP.SetISlowRefx4(0, 0, 0, duty[1])
            time.sleep(5)
            iout.append(self.FBP.Read_iMod4())
            time.sleep(0.1)
            vout.append(self.FBP.Read_vOutMod4())
            time.sleep(0.1)
            iref.append(self.FBP.Read_iRef4())
            time.sleep(1)
            self.FBP.TurnOff(0b1000)
            time.sleep(5)

        print('iref:')
        print(iref)
        print('corrente de saída:')
        print(iout)
        print('tensão de saída:')
        print(vout)

        m = (iout[1] - iout[0]) / (duty[1] - duty[0])
        print('coef. angular:')
        print(m)

        if m == 0:
            self.update_gui.emit('ERRO! REINICIE O TESTE E AS FONTES')
            time.sleep(10)
            raise NameError('ERRO! REINICIE O TESTE E AS FONTES')

        b = (-m) * duty[0] + iout[0]
        set_duty = (current - b) / m
        set_duty = round(set_duty, 2)
        print('duty cicle:')
        print(set_duty)

        if abs(set_duty) > 95:
            self.update_gui.emit('ERRO! REINICIE O TESTE E AS FONTES')
            time.sleep(10)
            raise NameError('ERRO! REINICIE O TESTE E AS FONTES')

        return set_duty

    def _send_to_server(self, item):
        client = ElpWebClient()
        client_data = item.data
        client_method = item.method
        client_response = client.do_request(client_method, client_data)
        server_status = self._parse_response(client_response)
        return server_status

    def _parse_response(self, response):
        res_key = 'StatusCode'
        err_key = 'error'

        if res_key in response.keys() and err_key not in response.keys():
            return True
        else:
            return False

    def run(self):
        self._test_sequence()
Exemplo n.º 18
0
from common.pydrs import SerialDRS
from datetime import datetime

import time
import visa

drs = SerialDRS()
now = datetime.now()

################################################################################
####################### LENDO ARQUIVO DE CONFIGURAÇÃO ##########################
################################################################################
_cfile = open('lintest_config.csv', 'r')
config = _cfile.read()
_cfile.close()

config = config.split(';')

for i in config:
    config[config.index(i)] = config[config.index(i)].split('|')

for j in config:
    if config[config.index(j)][0] == 'COMPort':
        drs_port = config[config.index(j)][1]
        drs_port = drs_port.replace('\n', '')
        drs_port = drs_port.split(',')

        if len(drs_port) == 1:
            drs_port = drs_port[0]

    elif config[config.index(j)][0] == 'InstAddr':
Exemplo n.º 19
0
from common.pydrs import SerialDRS
from datetime import datetime
import time

drs = SerialDRS()
now = datetime.now()

drs_port = 'COM11'
drs_addr = 1
bastidor = '1041182348'
WarmUpTime = 3 * 3600
StepTime = 30

nbits = 18

idc_list = [10, 0, -10]
module_list = ['modulo 1', 'modulo 2', 'modulo 3', 'modulo 4']


################################################################################
def init_module(drs_port, drs_addr, module, idc):
    print('Inicializando módulo...')
    drs.Connect(drs_port)
    time.sleep(1)
    drs.SetSlaveAdd(drs_addr)
    time.sleep(1)
    drs.Config_nHRADC(4)
    time.sleep(5)

    if module == 'modulo 1':
        drs.TurnOn(1)
Exemplo n.º 20
0
class HRADCTest(QThread):

    test_complete       = pyqtSignal(list)
    update_gui          = pyqtSignal(str)
    connection_lost     = pyqtSignal()

    device = {'HRADC':1, 'DM':2}
    bytesFormat = {'Uint16': 'H', 'Uint32': 'L', 'Uint64': 'Q', 'float': 'f'}
    ufmOffset = {'serial': 0, 'calibdate': 4, 'variant': 9, 'rburden': 10}
    hradcVariant = {'HRADC-FBP': 0, 'HRADC-FAX': 1}
    hradcInputTypes = ['GND', 'Vref_bipolar_p', 'Vref_bipolar_n', 'Temp',
                       'Vin_bipolar_p', 'Vin_bipolar_n', 'Iin_bipolar_p','Iin_bipolar_n']

    def __init__(self):
        QThread.__init__(self)
        self._comport = None
        self._baudrate = None
        self._boardsinfo = []
        self._nHRADC = None
        self._led = None

        self.drs = SerialDRS()
        self.source = KrohnHite523_GPIB()
        self.dmm = Keysight3458A_GPIB()

        self.refVal = {'GND': 0,
                       'Vref_bipolar_p': 5,
                       'Vref_bipolar_n': -5,
                       'Temp': -0.35,
                       'Vin_bipolar_p': 10,
                       'Vin_bipolar_n': -10,
                       'Iin_bipolar_p': 0.05,
                       'Iin_bipolar_n': -0.05
                       }

        self.refTol = {'GND': 0.02,
                       'Vref_bipolar_p': 0.02,
                       'Vref_bipolar_n': 0.02,
                       'Temp': 0.1,
                       'Vin_bipolar_p': 0.02,
                       'Vin_bipolar_n': 0.02,
                       'Iin_bipolar_p': 0.0003,
                       'Iin_bipolar_n': 0.0003}

    @property
    def comport(self):
        return self._comport

    @comport.setter
    def comport(self, value):
        self._comport = value

    @property
    def baudrate(self):
        return self._baudrate

    @baudrate.setter
    def baudrate(self, value):
        self._baudrate = value

    @property
    def serial_number(self):
        return self._serial_number

    @serial_number.setter
    def serial_number(self, value):
        self._serial_number = value

    @property
    def led(self):
        return self._led

    @led.setter
    def led(self, value):
        self._led = value

    @property
    def firmware_error(self):
        return self._firmware_error

    @firmware_error.setter
    def firmware_error(self, value):
        self._firmware_error = value

    def open_serial_port(self):
        if self._comport is None or self._baudrate is None:
            return False
        else:
            self.dmm.Connect('GPIB0::22::INSTR')
            self.source.Connect('GPIB0::25::INSTR')

            self.source.DisableOutput()
            self.source.Reset()
            self.source.LOFloatChassis('F')
            self.source.OutputTermination(0)
            self.source.SetVoltageLimit(2)
            self.source.SetOutput(0,'V')

            self.dmm.InitDefault()
            self.dmm.SetMeasurementType('DCV',10)
            self.dmm.SetMultipointMeas(3)

            return self.drs.Connect(self._comport, self._baudrate)

    def test_communication(self,slot):

        try:
            test_package = self.drs.Read_ps_Model()
            print(test_package)
            if (test_package[0] == 0) and (test_package[1] == 17) and (test_package[2] == 512) and (test_package[3] == 10) and (test_package[4] == 227):
                print('Comunicando com HRADC...')
                self.drs.Config_nHRADC(slot)
                time.sleep(1)
                print('Resetando HRADC...')
                self.drs.ResetHRADCBoards(1)
                time.sleep(1)
                self.drs.ResetHRADCBoards(0)
                time.sleep(1)
                print('Configurando HRADC...\n')
                self.drs.ConfigHRADC(slot-1,100000,'GND',0,0)
                time.sleep(0.1)
                print('Habilita SamplesBuffer...\n')
                self.drs.EnableSamplesBuffer()
                time.sleep(0.1)
                print('Habilita Sampling...\n')
                self.drs.EnableHRADCSampling()
                time.sleep(1)
                print('Desabilita SamplesBuffer...\n')
                self.drs.DisableSamplesBuffer()
                time.sleep(0.1)
                print('Desabilita Sampling...\n')
                self.drs.DisableHRADCSampling()
                time.sleep(0.1)
                print('Le SamplesBuffer...\n')
                buff = np.array(self.drs.Recv_samplesBuffer_blocks(0))
                print(buff)
                hradcMean = buff.mean()
                print(hradcMean)
                if abs(hradcMean) < self.refTol['GND']:
                    print('TRUE')
                    return True

                print('FALSE')
                return False

        except:
            print('EXCEPT')
            self.drs.DisableHRADCSampling()
            return False

    def _test_sequence(self):

        print('\n ### Valendo! ###\n')

        self.nHRADC = max([board['slot'] for board in self._boardsinfo])

        t = ' placas' if self.nHRADC > 1 else ' placa'
        t2 = 'Inicializando teste de ' + str(self.nHRADC) +  t + ' HRADC...'
        print(t2 + '\n')
        self.update_gui.emit(t2)

        print(self._boardsinfo)

        print('Configurando nHRADC...\n')
        self.update_gui.emit('Configurando nHRADC...')
        self.drs.Config_nHRADC(self.nHRADC)
        time.sleep(1)

        print('Resetando HRADC...\n')
        self.update_gui.emit('Resetando nHRADC...')
        self.drs.ResetHRADCBoards(1)
        time.sleep(1)
        self.drs.ResetHRADCBoards(0)
        log_res = []

        print('Començando a ler boardsinfo...\n')
        self.update_gui.emit('Començando a ler boardsinfo...')

        for board in self._boardsinfo:

            print('\n******************************************')
            print('***************   Slot ' + str(board['slot']) + '   ***************')
            print('******************************************\n\n')
            print(board)
            self.update_gui.emit('SLOT #' + str(board['slot']) + ' ( S/N: ' + str(board['serial']) + ' / ' + str(board['variant']) + ')')

            hradc = HRADC()
            ufmdata_16 = []
            emptyBuff = np.array([])

            hradc.serial_number = board['serial']
            hradc.variant = board['variant']
            hradc.burden_amplifier = "INA141"

            if hradc.variant == 'HRADC-FBP':
                hradc.burden_res = 20.0
                hradc.cut_frequency = 48228.7
                hradc.filter_order = 1

            print('\nEnviando ao servidor dados desta placa...\n')
            self.update_gui.emit('  Enviando ao servidor dados desta placa...')
            res = self._send_to_server(hradc)

            print('\nInicializando equipamentos...\n')
            self.update_gui.emit('  Inicializando equipamentos...')
            self.source.DisableOutput()
            self.source.Reset()
            self.source.LOFloatChassis('F')
            self.source.OutputTermination(0)
            self.source.SetVoltageLimit(2)
            self.source.SetOutput(-10,'V')

            self.dmm.InitDefault()
            self.dmm.SetMeasurementType('DCV',10)
            self.dmm.SetMultipointMeas(3)

            if res:
                print(res)
                print('\n')

                log_hradc = HRADCLog()
                log_hradc.serial_number_hradc = board['serial']
                log_hradc.device = self.device['HRADC']
                log_hradc.test_result = "Aprovado"
                log_hradc.details = board['pre_tests']
                log_hradc_list = []

                log_dm = HRADCLog()
                log_dm.serial_number_hradc = board['serial']
                log_dm.device = self.device['DM']
                log_dm.test_result = "Aprovado"
                log_dm_list = []

                if board['slot'] > 0:

                    print('Configurando placa em UFM mode...')
                    self.update_gui.emit('  Configurando placa em UFM mode...')
                    #slot = slot - 1
                    slot = board['slot'] - 1

                    self.drs.ConfigHRADCOpMode(slot,1)
                    time.sleep(0.5)

                    print('\nEnviando serial number...')
                    self.update_gui.emit('  Enviando serial number...')
                    # Send serial number
                    ufmdata_16 = self._convertToUint16List(board['serial'],'Uint64')
                    for i in range(len(ufmdata_16)):
                        self.drs.WriteHRADC_UFM(slot,i+self.ufmOffset['serial'],ufmdata_16[i])
                        time.sleep(0.1)

                    print('\nEnviando variante...')
                    self.update_gui.emit('  Enviando variante...')
                    # Send variant
                    ufmdata_16 = self._convertToUint16List(self.hradcVariant[board['variant']],'Uint16')
                    for i in range(len(ufmdata_16)):
                        self.drs.WriteHRADC_UFM(slot,i+self.ufmOffset['variant'],ufmdata_16[i])
                        time.sleep(0.1)

                    print('\nEnviando rburden...')
                    self.update_gui.emit('  Enviando Rburden...')
                    # Send Rburden
                    ufmdata_16 = self._convertToUint16List(hradc.burden_res,'float')
                    for i in range(len(ufmdata_16)):
                        self.drs.WriteHRADC_UFM(slot,i+self.ufmOffset['rburden'],ufmdata_16[i])
                        time.sleep(0.1)

                    '''
                    print('Lendo byte')
                    time.sleep(0.5)
                    self.drs.ReadHRADC_UFM(slot,0)
                    '''

                    print('  Colocando a placa em Sampling mode...')
                    self.update_gui.emit('  Colocando a placa em Sampling mode...')
                    self.drs.ConfigHRADCOpMode(slot,0)
                    time.sleep(0.5)
                    self._configBoardsToTest(board,'GND')
                    time.sleep(0.5)
                    self.drs.SelectHRADCBoard(slot)
                    time.sleep(0.1)

                    for signalType in self.hradcInputTypes:

                        unit = ' V'

                        if(signalType == 'Vin_bipolar_p')|(signalType == 'Vin_bipolar_n'):
                            inputType = 'Vin_bipolar'
                        elif(signalType == 'Iin_bipolar_p')|(signalType == 'Iin_bipolar_n'):
                            inputType = 'Iin_bipolar'
                            unit = ' A'
                        else:
                            inputType = signalType

                        if not (hradc.variant == 'HRADC-FAX' and inputType == 'Iin_bipolar'):

                            print('\n - ' + signalType + ' -')
                            self.update_gui.emit('  - ' + signalType + ' -')

                            self.drs.ConfigHRADC(slot,100000,inputType,0,0)
                            time.sleep(0.1)

                            self.drs.SelectTestSource(inputType)
                            time.sleep(0.1)

                            if signalType == 'Vin_bipolar_p':
                                self.source.SetOutput(10,'V')
                                self.source.EnableOutput()
                            elif signalType == 'Vin_bipolar_n':
                                self.source.SetOutput(-10,'V')
                                self.source.EnableOutput()
                            elif signalType == 'Iin_bipolar_p':
                                self.dmm.SetMeasurementType('DCI',0.05)
                                self.source.SetOutput(0.05,'I')
                                self.source.EnableOutput()
                            elif signalType == 'Iin_bipolar_n':
                                self.dmm.SetMeasurementType('DCI',0.05)
                                self.source.SetOutput(-0.05,'I')
                                self.source.EnableOutput()
                            else:
                                self.source.DisableOutput()
                                self.source.SetOutput(0,'V')

                            self.drs.EnableSamplesBuffer()
                            time.sleep(1)

                            self.drs.EnableHRADCSampling()
                            time.sleep(1)

                            self.drs.DisableSamplesBuffer()
                            time.sleep(0.5)

                            buff = np.array(self.drs.Recv_samplesBuffer_blocks(0))
                            if np.array_equal(buff,emptyBuff):
                                print('\n************** FALHA SAMPLES BUFFER **************\n')
                                self.update_gui.emit('\n *** ERRO: Falha Samples Buffer ***\n')
                                self.source.DisableOutput()
                                return
                            #log_hradc.gnd = buff.mean()
                            log_hradc_list.append(buff.mean())

                            buff = np.array(self.dmm.ReadMeasurementPoints())
                            if np.array_equal(buff,emptyBuff):
                                print('\n************** FALHA SAMPLES BUFFER **************\n')
                                self.update_gui.emit('\n *** ERRO: Falha Samples Buffer ***\n')
                                self.source.DisableOutput()
                                return
                            #log_dm.gnd = buff.mean()
                            log_dm_list.append(buff.mean())

                            self.drs.DisableHRADCSampling()
                            time.sleep(0.1)

                            self.source.DisableOutput()

                            print('HRADC: ' + str(log_hradc_list[-1]) + unit)
                            print('DMM: ' + str(log_dm_list[-1]) + unit + '\n')

                            self.update_gui.emit('  HRADC: ' + str(log_hradc_list[-1]) + unit)
                            self.update_gui.emit('  DMM: ' + str(log_dm_list[-1]) + unit + '\n')

                            if abs(log_hradc_list[-1] - self.refVal[signalType]) > self.refTol[signalType]:
                                log_hradc.test_result = "Reprovado"
                                print('HRADC Reprovado: ' + signalType)
                                self.update_gui.emit('  *** HRADC Reprovado! ***')

                            if abs(log_dm_list[-1] - self.refVal[signalType]) > self.refTol[signalType]:
                                log_dm.test_result = "Reprovado"
                                print('DMM Reprovcado: ' + signalType)
                                self.update_gui.emit('  *** DMM Reprovado! ***')

                        else:
                            log_hradc_list.append(0)
                            log_dm_list.append(0)

                    print('\nSalvando log e enviando ao servidor...')
                    self.update_gui.emit('  Salvando log e enviando ao servidor...')

                    log_hradc._iin_n = log_hradc_list.pop()
                    log_hradc._iin_p = log_hradc_list.pop()
                    log_hradc._vin_n = log_hradc_list.pop()
                    log_hradc._vin_p = log_hradc_list.pop()
                    log_hradc._temperature = log_hradc_list.pop()
                    log_hradc._vref_n = log_hradc_list.pop()
                    log_hradc._vref_p = log_hradc_list.pop()
                    log_hradc._gnd = log_hradc_list.pop()
                    log_hradc.details = board['pre_tests']

                    log_dm._iin_n = log_dm_list.pop()
                    log_dm._iin_p = log_dm_list.pop()
                    log_dm._vin_n = log_dm_list.pop()
                    log_dm._vin_p = log_dm_list.pop()
                    log_dm._temperature = log_dm_list.pop()
                    log_dm._vref_n = log_dm_list.pop()
                    log_dm._vref_p = log_dm_list.pop()
                    log_dm._gnd = log_dm_list.pop()
                    log_dm.details = board['pre_tests']

                    log_hradc_serverstatus = self._send_to_server(log_hradc)
                    log_dm_serverstatus = self._send_to_server(log_dm)

                    if (log_hradc.test_result == "Reprovado") or (log_dm.test_result == "Reprovado"):
                        log_res.append("Reprovado")
                    else:
                        log_res.append("Aprovado")

                else:
                    print('Salvando log de placa reprovada e enviando ao servidor...')
                    self.update_gui.emit('  Salvando log de placa reprovada e enviando ao servidor...')
                    log_hradc.test_result = "Reprovado"
                    log_hradc.details = board['pre_tests']

                    log_hradc_serverstatus = self._send_to_server(log_hradc)

            else:
                print('Falha de comunicacao com servidor!')
                self.update_gui.emit('*** ERRO: Falha de comunicacao com servidor! ***')

                # TODO: incluir falha de comunicacao com servidor no sinal log_res
                #log_res.append('')


        # Quando o teste terminar emitir o resultado em uma lista de objetos
        # do tipo HRADCLog

        self.source.DisableOutput()
        self.source.SetOutput(0,'V')

        print('\nEnviando sinal ao app...')
        self.update_gui.emit('Enviando sinal ao app...')

        for i in range(4 - len(log_res)):
            log_res.append(None)
        print('\nlog_res:' + str(log_res))
        self.test_complete.emit(log_res)


    def _send_to_server(self, item):
        client = ElpWebClient()
        client_data = item.data
        print('client_data:\n')
        print(client_data)
        client_method = item.method
        client_response = client.do_request(client_method, client_data)
        server_status = self._parse_response(client_response)
        print(client_response)
        return server_status

    def _parse_response(self, response):
        res_key = 'StatusCode'
        err_key = 'error'

        if res_key in response.keys() and err_key not in response.keys():
            return True
        else:
            return False

    def _convertToUint16List(self, val, format):

        val_16 = []
        val_b = struct.pack(self.bytesFormat[format],val)
        print(val_b)
        for i in range(0,len(val_b),2):
            val_16.append(struct.unpack('H',val_b[i:i+2])[0])
        print(val_16)
        return val_16

    def _configBoardsToTest(self,board,inputType):
        for slot in range(self.nHRADC):
            if slot == board['slot']:
                self.drs.ConfigHRADC(slot,100000,inputType,0,0)
            else:
                self.drs.ConfigHRADC(slot,100000,'GND',0,0)

    def run(self):
        self._test_sequence()
Exemplo n.º 21
0
class TestFbpWindow(QWidget):
    def __init__(self, *args):
        super(TestFbpWindow, self).__init__(*args)
        uic.loadUi('wizard.ui', self)

        self._initialize_widgets()
        self._initialize_signals()
        self._list_serial_ports()

        self._current_ps_id = {
            'Fonte 1': 1,
            'Fonte 2': 2,
            'Fonte 3': 3,
            'Fonte 4': 4,
            'Todas': 5
        }
        self._bsmp_var = {
            'soft_intlk': 25,
            'hard_intlk': 26,
            'iload': 27,
            'vload': 28,
            'vdclink': 29,
            'temp': 30,
            'digital_pot': 35
        }

        self._drs = SerialDRS()

    def _initialize_widgets(self):
        self.pb_disconnect.setEnabled(False)
        self.pb_off_1.setEnabled(False)
        self.pb_off_2.setEnabled(False)
        self.pb_off_3.setEnabled(False)
        self.pb_off_4.setEnabled(False)
        self.pb_open_loop_1.setEnabled(False)
        self.pb_open_loop_2.setEnabled(False)
        self.pb_open_loop_3.setEnabled(False)
        self.pb_open_loop_4.setEnabled(False)
        self.le_iload_1.setReadOnly(True)
        self.le_iload_2.setReadOnly(True)
        self.le_iload_3.setReadOnly(True)
        self.le_iload_4.setReadOnly(True)
        self.le_vload_1.setReadOnly(True)
        self.le_vload_2.setReadOnly(True)
        self.le_vload_3.setReadOnly(True)
        self.le_vload_4.setReadOnly(True)
        self.le_vdclink_1.setReadOnly(True)
        self.le_vdclink_2.setReadOnly(True)
        self.le_vdclink_3.setReadOnly(True)
        self.le_vdclink_4.setReadOnly(True)
        self.le_temp_1.setReadOnly(True)
        self.le_temp_2.setReadOnly(True)
        self.le_temp_3.setReadOnly(True)
        self.le_temp_4.setReadOnly(True)
        self.le_intlk.setReadOnly(True)
        #self.combo_iref_id.addItems(['Fonte 1', 'Fonte 2', 'Fonte 3',
        #                            'Fonte 4', 'Todas'])
        self.combo_iref_id.addItems(
            ['Fonte 1', 'Fonte 2', 'Fonte 3', 'Fonte 4'])
        self.combo_intlk_id.addItems(
            ['Fonte 1', 'Fonte 2', 'Fonte 3', 'Fonte 4'])
        self.le_digital_pot_write.setText(str(self.sl_digital_pot.value()))

    def _initialize_signals(self):
        self.pb_connect.clicked.connect(self._connect_serial)
        self.pb_disconnect.clicked.connect(self._disconnect_serial)
        self.pb_on_1.clicked.connect(self._turn_on_1)
        self.pb_on_2.clicked.connect(self._turn_on_2)
        self.pb_on_3.clicked.connect(self._turn_on_3)
        self.pb_on_4.clicked.connect(self._turn_on_4)
        self.pb_off_1.clicked.connect(self._turn_off_1)
        self.pb_off_2.clicked.connect(self._turn_off_2)
        self.pb_off_3.clicked.connect(self._turn_off_3)
        self.pb_off_4.clicked.connect(self._turn_off_4)
        self.pb_open_loop_1.clicked.connect(self._open_loop_1)
        self.pb_open_loop_2.clicked.connect(self._open_loop_2)
        self.pb_open_loop_3.clicked.connect(self._open_loop_3)
        self.pb_open_loop_4.clicked.connect(self._open_loop_4)
        self.pb_close_loop_1.clicked.connect(self._close_loop_1)
        self.pb_close_loop_2.clicked.connect(self._close_loop_2)
        self.pb_close_loop_3.clicked.connect(self._close_loop_3)
        self.pb_close_loop_4.clicked.connect(self._close_loop_4)
        self.pb_send_iref.clicked.connect(self._send_iref)
        self.pb_read_intlk.clicked.connect(self._read_intlk)
        self.pb_reset_intlk.clicked.connect(self._reset_intlk)
        self.pb_iload_1.clicked.connect(self._read_iload_1)
        self.pb_iload_2.clicked.connect(self._read_iload_2)
        self.pb_iload_3.clicked.connect(self._read_iload_3)
        self.pb_iload_4.clicked.connect(self._read_iload_4)
        self.pb_vload_1.clicked.connect(self._read_vload_1)
        self.pb_vload_2.clicked.connect(self._read_vload_2)
        self.pb_vload_3.clicked.connect(self._read_vload_3)
        self.pb_vload_4.clicked.connect(self._read_vload_4)
        self.pb_vdclink_1.clicked.connect(self._read_vdclink_1)
        self.pb_vdclink_2.clicked.connect(self._read_vdclink_2)
        self.pb_vdclink_3.clicked.connect(self._read_vdclink_3)
        self.pb_vdclink_4.clicked.connect(self._read_vdclink_4)
        self.pb_temp_1.clicked.connect(self._read_temp_1)
        self.pb_temp_2.clicked.connect(self._read_temp_2)
        self.pb_temp_3.clicked.connect(self._read_temp_3)
        self.pb_temp_4.clicked.connect(self._read_temp_4)
        self.pb_digital_pot_read.clicked.connect(self._read_digital_pot)
        self.sl_digital_pot.valueChanged.connect(self._update_digital_pot)

    def _list_serial_ports(self):
        if sys.platform.startswith('win'):
            ports = ['COM%s' % (i + 1) for i in range(256)]
        elif sys.platform.startswith('linux') or sys.platform.startswith(
                'cygwin'):
            ports = glob.glob('/dev/tty[A-Za-z]*')
        elif sys.platform.startswith('darwin'):
            ports = glob.glob('/dev/tty.*')
        else:
            raise EnvironmentError('Unsuported platform')

        for port in ports:
            try:
                s = serial.Serial(port)
                s.close()
                self.combo_com.addItem(port)
            except (OSError, serial.SerialException):
                pass

    """*************************************************
    ******************* PyQt Slots *********************
    *************************************************"""

    @pyqtSlot()
    def _connect_serial(self):
        try:
            port = str(self.combo_com.currentText())
            baud = '6000000'
            con = self._drs.Connect(port, baud)
            print(con)
            if con:
                self.pb_connect.setEnabled(False)
                self.pb_disconnect.setEnabled(True)
                self.combo_com.setEnabled(False)
            else:
                self.pb_disconnect.setEnabled(False)
                self.pb_connect.setEnabled(True)
                self.combo_com.setEnabled(True)
        except:
            pass

    @pyqtSlot()
    def _disconnect_serial(self):
        try:
            self._drs.Disconnect()
            self.pb_disconnect.setEnabled(False)
            self.pb_connect.setEnabled(True)
            self.combo_com.setEnabled(True)
        except:
            pass

    @pyqtSlot()
    def _turn_on_1(self):
        self._drs.SetSlaveAdd(1)
        try:
            self._drs.turn_on()
            self.pb_on_1.setEnabled(False)
            self.pb_off_1.setEnabled(True)
        except:
            pass

    @pyqtSlot()
    def _turn_on_2(self):
        self._drs.SetSlaveAdd(2)
        try:
            self._drs.turn_on()
            self.pb_on_2.setEnabled(False)
            self.pb_off_2.setEnabled(True)
        except:
            pass

    @pyqtSlot()
    def _turn_on_3(self):
        self._drs.SetSlaveAdd(3)
        try:
            self._drs.turn_on()
            self.pb_on_3.setEnabled(False)
            self.pb_off_3.setEnabled(True)
        except:
            pass

    @pyqtSlot()
    def _turn_on_4(self):
        self._drs.SetSlaveAdd(4)
        try:
            self._drs.turn_on()
            self.pb_on_4.setEnabled(False)
            self.pb_off_4.setEnabled(True)
        except:
            pass

    @pyqtSlot()
    def _turn_off_1(self):
        self._drs.SetSlaveAdd(1)
        try:
            self._drs.turn_off()
            self.pb_on_1.setEnabled(True)
            self.pb_off_1.setEnabled(False)
        except:
            pass

    @pyqtSlot()
    def _turn_off_2(self):
        self._drs.SetSlaveAdd(2)
        self.pb_on_2.setEnabled(True)
        self.pb_off_2.setEnabled(False)
        try:
            self._drs.turn_off()
        except:
            pass

    @pyqtSlot()
    def _turn_off_3(self):
        self._drs.SetSlaveAdd(3)
        try:
            self._drs.turn_off()
            self.pb_on_3.setEnabled(True)
            self.pb_off_3.setEnabled(False)
        except:
            pass

    @pyqtSlot()
    def _turn_off_4(self):
        self._drs.SetSlaveAdd(4)
        try:
            self._drs.turn_off()
            self.pb_on_4.setEnabled(True)
            self.pb_off_4.setEnabled(False)
        except:
            pass

    @pyqtSlot()
    def _open_loop_1(self):
        self._drs.SetSlaveAdd(1)
        try:
            self._drs.open_loop()
            self.pb_open_loop_1.setEnabled(False)
            self.pb_close_loop_1.setEnabled(True)
        except:
            pass

    @pyqtSlot()
    def _open_loop_2(self):
        self._drs.SetSlaveAdd(2)
        try:
            self._drs.open_loop()
            self.pb_open_loop_2.setEnabled(False)
            self.pb_close_loop_2.setEnabled(True)
        except:
            pass

    @pyqtSlot()
    def _open_loop_3(self):
        self._drs.SetSlaveAdd(3)
        try:
            self._drs.open_loop()
            self.pb_open_loop_3.setEnabled(False)
            self.pb_close_loop_3.setEnabled(True)
        except:
            pass

    @pyqtSlot()
    def _open_loop_4(self):
        self._drs.SetSlaveAdd(4)
        try:
            self._drs.open_loop()
            self.pb_open_loop_4.setEnabled(False)
            self.pb_close_loop_4.setEnabled(True)
        except:
            pass

    @pyqtSlot()
    def _close_loop_1(self):
        self._drs.SetSlaveAdd(1)
        try:
            self._drs.closed_loop()
            self.pb_open_loop_1.setEnabled(True)
            self.pb_close_loop_1.setEnabled(False)
        except:
            pass

    @pyqtSlot()
    def _close_loop_2(self):
        self._drs.SetSlaveAdd(2)
        try:
            self._drs.closed_loop()
            self.pb_open_loop_2.setEnabled(True)
            self.pb_close_loop_2.setEnabled(False)
        except:
            pass

    @pyqtSlot()
    def _close_loop_3(self):
        self._drs.SetSlaveAdd(3)
        try:
            self._drs.closed_loop()
            self.pb_open_loop_3.setEnabled(True)
            self.pb_close_loop_3.setEnabled(False)
        except:
            pass

    @pyqtSlot()
    def _close_loop_4(self):
        self._drs.SetSlaveAdd(4)
        try:
            self._drs.closed_loop()
            self.pb_open_loop_4.setEnabled(True)
            self.pb_close_loop_4.setEnabled(False)
        except:
            pass

    @pyqtSlot()
    def _send_iref(self):
        ps = str(self.combo_iref_id.currentText())
        if ps == 'Todas':
            try:
                ref = float(self.le_iref.text())
                self._drs.set_slowref_fbp(ref)
            except:
                pass
        else:
            add = self._current_ps_id[ps]
            try:
                self._drs.SetSlaveAdd(add)
                ref = float(self.le_iref.text())
                self._drs.set_slowref(ref)
            except:
                pass

    @pyqtSlot()
    def _read_intlk(self):
        ps = self.combo_intlk_id.currentText()
        try:
            add = self._current_ps_id[ps]
            self._drs.SetSlaveAdd(add)
            print(add)
            i = self._drs.read_bsmp_variable(self._bsmp_var['hard_intlk'],
                                             'uint16_t', 0)
            print(1)
            self.le_intlk.setText(str(i))
        except:
            pass

    @pyqtSlot()
    def _reset_intlk(self):
        ps = self.combo_intlk_id.currentText()
        try:
            add = self._current_ps_id[ps]
            self._drs.SetSlaveAdd(ps)
            intlk = self._drs.ResetInterlocks()
            self.le_intlk.clear()
        except:
            pass

    @pyqtSlot()
    def _read_iload_1(self):
        try:
            self._drs.SetSlaveAdd(1)
            i = self._drs.read_bsmp_variable(self._bsmp_var['iload'], 'float',
                                             0)
            self.le_iload_1.setText(str(round(i, 4)))
        except:
            pass

    @pyqtSlot()
    def _read_iload_2(self):
        try:
            self._drs.SetSlaveAdd(2)
            i = self._drs.read_bsmp_variable(self._bsmp_var['iload'], 'float',
                                             0)
            self.le_iload_2.setText(str(round(i, 4)))
        except:
            pass

    @pyqtSlot()
    def _read_iload_3(self):
        try:
            self._drs.SetSlaveAdd(3)
            i = self._drs.read_bsmp_variable(self._bsmp_var['iload'], 'float',
                                             0)
            self.le_iload_3.setText(str(round(i, 4)))
        except:
            pass

    @pyqtSlot()
    def _read_iload_4(self):
        try:
            self._drs.SetSlaveAdd(4)
            i = self._drs.read_bsmp_variable(self._bsmp_var['iload'], 'float',
                                             0)
            self.le_iload_4.setText(str(round(i, 4)))
        except:
            pass

    @pyqtSlot()
    def _read_vload_1(self):
        try:
            self._drs.SetSlaveAdd(1)
            v = self._drs.read_bsmp_variable(self._bsmp_var['vload'], 'float',
                                             0)
            self.le_vload_1.setText(str(round(v, 4)))
        except:
            pass

    @pyqtSlot()
    def _read_vload_2(self):
        try:
            self._drs.SetSlaveAdd(2)
            v = self._drs.read_bsmp_variable(self._bsmp_var['vload'], 'float',
                                             0)
            self.le_vload_2.setText(str(round(v, 4)))
        except:
            pass

    @pyqtSlot()
    def _read_vload_3(self):
        try:
            self._drs.SetSlaveAdd(3)
            v = self._drs.read_bsmp_variable(self._bsmp_var['vload'], 'float',
                                             0)
            self.le_vload_3.setText(str(round(v, 4)))
        except:
            pass

    @pyqtSlot()
    def _read_vload_4(self):
        try:
            self._drs.SetSlaveAdd(4)
            v = self._drs.read_bsmp_variable(self._bsmp_var['vload'], 'float',
                                             0)
            self.le_vload_4.setText(str(round(v, 4)))
        except:
            pass

    @pyqtSlot()
    def _read_vdclink_1(self):
        try:
            self._drs.SetSlaveAdd(1)
            v = self._drs.read_bsmp_variable(self._bsmp_var['vdclink'],
                                             'float', 0)
            self.le_vdclink_1.setText(str(round(v, 4)))
        except:
            pass

    @pyqtSlot()
    def _read_vdclink_2(self):
        try:
            self._drs.SetSlaveAdd(2)
            v = self._drs.read_bsmp_variable(self._bsmp_var['vdclink'],
                                             'float', 0)
            self.le_vdclink_2.setText(str(round(v, 4)))
        except:
            pass

    @pyqtSlot()
    def _read_vdclink_3(self):
        try:
            self._drs.SetSlaveAdd(3)
            v = self._drs.read_bsmp_variable(self._bsmp_var['vdclink'],
                                             'float', 0)
            self.le_vdclink_3.setText(str(round(v, 4)))
        except:
            pass

    @pyqtSlot()
    def _read_vdclink_4(self):
        try:
            self._drs.SetSlaveAdd(4)
            v = self._drs.read_bsmp_variable(self._bsmp_var['vdclink'],
                                             'float', 0)
            self.le_vdclink_4.setText(str(round(v, 4)))
        except:
            pass

    @pyqtSlot()
    def _read_temp_1(self):
        try:
            self._drs.SetSlaveAdd(1)
            t = self._drs.read_bsmp_variable(self._bsmp_var['temp'], 'float',
                                             0)
            self.le_temp_1.setText(str(round(t, 4)))
        except:
            pass

    @pyqtSlot()
    def _read_temp_2(self):
        try:
            self._drs.SetSlaveAdd(2)
            t = self._drs.read_bsmp_variable(self._bsmp_var['temp'], 'float',
                                             0)
            self.le_temp_2.setText(str(round(t, 4)))
        except:
            pass

    @pyqtSlot()
    def _read_temp_3(self):
        try:
            self._drs.SetSlaveAdd(3)
            t = self._drs.read_bsmp_variable(self._bsmp_var['temp'], 'float',
                                             0)
            self.le_temp_3.setText(str(round(t, 4)))
        except:
            pass

    @pyqtSlot()
    def _read_temp_4(self):
        try:
            self._drs.SetSlaveAdd(4)
            t = self._drs.read_bsmp_variable(self._bsmp_var['temp'], 'float',
                                             0)
            self.le_temp_4.setText(str(round(t, 4)))
        except:
            pass

    @pyqtSlot()
    def _update_digital_pot(self):
        pot_val = self.sl_digital_pot.value()
        self.le_digital_pot_write.setText(str(pot_val))

        write_voltage = (6.0 / 100) * pot_val

        self._drs.write_digital_pot_voltage(write_voltage)
        read_voltage = self._drs.read_bsmp_variable(
            self._bsmp_var['digital_pot'], 'float', 0)
        self.le_digital_pot_read.setText(str(read_voltage))

    @pyqtSlot()
    def _read_digital_pot(self):
        read_voltage = self._drs.read_bsmp_variable(
            self._bsmp_var['digital_pot'], 'float', 0)
        self.le_digital_pot_read.setText(str(read_voltage))
Exemplo n.º 22
0
class FbpDclink(QThread):

    update_gui = pyqtSignal(dict)

    def __init__(self):
        QThread.__init__(self)

        self._is_active = False
        self._baudrate = '6000000'
        #self._baudrate = '115200'
        self._drs = SerialDRS()

        self._screen_readings = {
            'digital_pot_read': 0.0,
            'fault_status': 0,
            'intlk': 0,
            'vdclink_1': 0.0,
            'vdclink_2': 0.0,
            'vdclink_3': 0.0,
            'vdclink_4': 0.0
        }

        self._interlocks = [
            'Sobre tensão na fonte 3', 'Sobre-tensão na fonte 2',
            'Sobre-tensão na fonte 1', 'Interlock externo', 'Sensor de fumaça',
            'Falha Fonte 3', 'Falha Fonte 2', 'Falha Fonte 1'
        ]

    @property
    def is_active(self):
        return self._is_active

    def connect_serial(self, com_port):
        if com_port is not None:
            res = self._drs.Connect(com_port, self._baudrate)
            self._drs.SetSlaveAdd(20)
        return res

    def disconnect_serial(self):
        res = self._drs.Disconnect()
        return res

    def turn_on(self):
        res = self._drs.turn_on()
        self._is_active = True
        return res

    def turn_off(self):
        res = self._drs.turn_off()
        self._is_active = False
        return res

    def intlk_reset(self):
        self._drs.reset_interlocks()

    def write_reference_voltage(self, val):
        self._drs.set_slowref(val)

    def check_interlocks(self):
        res = True
        intlk = self._drs.read_bsmp_variable(26, 'uint32_t')
        if intlk is 0:
            res = False
        return res

    def get_current_reference(self):
        ref = int(self._drs.read_bsmp_variable(2, 'float'))
        return ref

    def update_params(self):
        try:
            self._screen_readings['vdclink_2'] = round(
                self._drs.read_bsmp_variable(30, 'float'), 3)
        except:
            pass

        try:
            self._screen_readings['digital_pot_read'] = round(
                self._drs.read_bsmp_variable(28, 'float'), 3)
        except:
            pass

        try:
            self._screen_readings['intlk'] = self._drs.read_bsmp_variable(
                26, 'uint32_t')
        except:
            pass

        try:
            self._screen_readings['vdclink_1'] = round(
                self._drs.read_bsmp_variable(29, 'float'), 3)
        except:
            pass

        try:
            self._screen_readings['vdclink_3'] = round(
                self._drs.read_bsmp_variable(31, 'float'), 3)
        except:
            pass

        try:
            self._screen_readings[
                'fault_status'] = self._drs.read_bsmp_variable(27, 'uint16_t')
        except:
            pass

        print(self._screen_readings)
        self.update_gui.emit(self._screen_readings)

    def get_intlk_list(self, bitmask):
        bitfield = self._get_bitfield(bitmask)
        mask = bitfield[len(bitfield) - len(self._interlocks):]
        filtered = itertools.compress(self._interlocks, mask)
        return list(filtered)

    def _get_bitfield(self, bitmask):
        bitfield = [int(bit)
                    for bit in bin(bitmask)[2:]]  # [2:] to remove '0b'
        return bitfield
Exemplo n.º 23
0
class PowerSupplyTest(QThread):
    test_complete = pyqtSignal(bool)
    update_gui = pyqtSignal(str)
    connection_lost = pyqtSignal()

    def __init__(self,
                 comport=None,
                 baudrate=None,
                 serial_number=None,
                 variant=None):
        QThread.__init__(self)
        self._comport = comport
        self._baudarate = baudrate
        self._serial_number = serial_number
        self._serial_port = serial.Serial()
        self.FBP = SerialDRS()

    @property
    def serial_number(self):
        return self._serial_number

    @serial_number.setter
    def serial_number(self, value):
        self._serial_number = value

    @property
    def comport(self):
        return self._comport

    @comport.setter
    def comport(self, value):
        self._comport = value

    @property
    def baudrate(self):
        return self._baudarate

    @baudrate.setter
    def baudrate(self, value):
        self._baudrate = value

    def open_serial_port(self):
        if self._comport is None or self._baudrate is None:
            return False
        else:
            self._serial_port.baudrate = self._baudrate
            self._serial_port.port = self._comport
            return self.FBP.Connect(self._comport, self._baudrate)

    def test_communication(self):
        result = (False, False
                  )  # Result for communication test and aux power supply
        test = []
        #TODO: Communication test

        for i in range(2):
            try:
                if i == 0:
                    print('Configurando UDC da Fonte...')
                    self.FBP.SetSlaveAdd(1)  # Endereço do controlador
                    time.sleep(0.5)
                    self.FBP.Config_nHRADC(4)
                elif i == 1:
                    print('Configurando UDC da jiga...')
                    self.FBP.SetSlaveAdd(5)  # Endereço do controlador
                    time.sleep(0.5)
                    self.FBP.Write_sigGen_Aux(0)  # Usando 4 fontes no bastidor
                    # em teste e 0 na jiga bastidor

                time.sleep(5)
                test_package = self.FBP.Read_ps_Model()

                if (test_package[0] == 0)   and (test_package[1] == 17) and \
                   (test_package[2] == 512) and (test_package[3] == 14) and \
                   (test_package[4] == 223):
                    test.append(True)
                else:
                    test.append(False)
            except:
                print('ERRO!!!')
                test.append(False)

            print(
                '###########################################################')
            print('Interlocks no teste de comunicação:')
            self.FBP.Read_ps_SoftInterlocks()
            self.FBP.Read_ps_HardInterlocks()

        if test == [True, True]:
            result = (True, True)
        else:
            result = (False, False)
        return result

    def _test_sequence(self):
        result = True
        send_to_server_result = False
        OnOff = ['Reprovado' for i in range(4)]
        MeasDCLink = [[] for j in range(4)]
        MeasVout = [[] for k in range(4)]
        MeasTemp = [[] for l in range(4)]
        MeasCurr = [[[] for m in range(5)] for n in range(4)]
        compare_current = [
            4, -4, 5, 10, -10
        ]  # [0] e [1] alterados para adequação do novo ciclo de trabalho

        LimDCLink = [14, 16]  # valores limite para o DC Link
        LimVout = [
            5, 7.5
        ]  # valores limite para tensão de saída alterar para LimVout[0] = 0.6 e LimVout[1] =  1
        LimTemp = 60  # valor limite para temperatura

        # If serial connection is lost
        if not self._serial_port.is_open:
            self.connection_lost.emit()
            #TODO: Encerra testes

        ps = PowerSupply()
        ps.serial_number = self._serial_number
        res = self._send_to_server(ps)

        if res:
            self.FBP.SetSlaveAdd(1)  # Bastidor em teste
            time.sleep(1)
            self.FBP.ResetInterlocks()
            time.sleep(5)
            # self.FBP.TurnOff(0b1111)
            # time.sleep(5)
            '''########################### Teste Liga/Desliga ###########################'''
            '''##########################################################################'''
            self.update_gui.emit(
                'Iniciando teste liga/desliga dos módulos de potência...')
            for module in range(4):
                self.FBP.TurnOn(2**module)
                time.sleep(1)
                # self.FBP.OpenLoop(2**module)
                # time.sleep(1)

                if self.FBP.Read_ps_OnOff() == 2**module:
                    OnOff[module] = 'OK'
                else:
                    self.update_gui.emit('O módulo ' + str(module + 1) +
                                         ' não ligou corretamente')
                    OnOff[module] = 'NOK'
                time.sleep(1)

                self.FBP.TurnOff(2**module)

                if self.FBP.Read_ps_OnOff() == 0:
                    if OnOff[module] == 'OK':
                        OnOff[module] = 'OK'
                else:
                    OnOff[module] = 'NOK'
                    self.update_gui.emit('O módulo ' + str(module + 1) +
                                         ' não desligou corretamente')
                time.sleep(1)
            '''##########################################################################'''

            self.FBP.Read_ps_SoftInterlocks()
            self.FBP.Read_ps_HardInterlocks()

            self.FBP.TurnOn(0b1111)  # liga todos os módulos
            time.sleep(5)
            self.FBP.OpenLoop(0b1111)  # todos os módulos em malha aberta

            if (abs(self.FBP.Read_iMod1()) > 12) or \
               (abs(self.FBP.Read_iMod2()) > 12) or \
               (abs(self.FBP.Read_iMod3()) > 12) or \
               (abs(self.FBP.Read_iMod4()) > 12):
                self.update_gui.emit('ERRO! REINICIE O TESTE E AS FONTES')
                time.sleep(10)
                raise NameError('ERRO! REINICIE O TESTE E AS FONTES')
            time.sleep(1)
            '''################## Teste em Malha Aberta com 21.5% #######################'''
            '''##########################################################################'''
            self.update_gui.emit('Iniciando teste com módulos a 4A...')
            self.FBP.ClosedLoop(15)
            time.sleep(1)
            for module in range(4):
                if module == 0:
                    self.FBP.SetISlowRefx4(4, 0, 0, 0)  # ciclo de trabalho
                elif module == 1:  # alterado para 21.5%
                    self.FBP.SetISlowRefx4(0, 4, 0, 0)  # ciclo de trabalho
                elif module == 2:  # alterado para 21.5%
                    self.FBP.SetISlowRefx4(0, 0, 4, 0)  # ciclo de trabalho
                elif module == 3:  # alterado para 22,575%
                    self.FBP.SetISlowRefx4(0, 0, 0, 4)  # ciclo de trabalho
                    # alterado para 21.5%

                # o teste original pedia um ciclo de trabalho de 20%, contudo
                # foi necessário alter o teste para trabalhar em malha aberta
                # devido a uma alteração na carga

                time.sleep(2)

                if (abs(self.FBP.Read_iMod1()) > 12) or \
                   (abs(self.FBP.Read_iMod2()) > 12) or \
                   (abs(self.FBP.Read_iMod3()) > 12) or \
                   (abs(self.FBP.Read_iMod4()) > 12):
                    self.update_gui.emit('ERRO! REINICIE O TESTE E AS FONTES')
                    time.sleep(10)
                    raise NameError('ERRO! REINICIE O TESTE E AS FONTES')
                time.sleep(1)

                MeasureList = self._save_CurrentMeasurement(module)

                for current in MeasureList:
                    MeasCurr[module][0].append(current)

                time.sleep(1)
                self.FBP.SetSlaveAdd(1)  # bastidor em teste

                print('mod1: ' + str(self.FBP.Read_iMod1()))
                time.sleep(0.1)
                print('mod2: ' + str(self.FBP.Read_iMod2()))
                time.sleep(0.1)
                print('mod3: ' + str(self.FBP.Read_iMod3()))
                time.sleep(0.1)
                print('mod4: ' + str(self.FBP.Read_iMod4()) + '\n')
                time.sleep(0.1)

                # self.FBP.ConfigWfmRef(module+1, 0) # ajusta 0 o ciclo de trabalho apenas para o modulo testado
                if module == 0 or module == 1 or module == 2 or module == 3:
                    self.FBP.SetISlowRefx4(0, 0, 0, 0)

                time.sleep(2)
            '''##########################################################################'''

            self.FBP.Read_ps_SoftInterlocks()
            self.FBP.Read_ps_HardInterlocks()
            '''################## Teste em Malha Aberta com -21.5% ######################'''
            '''##########################################################################'''
            self.update_gui.emit('Iniciando teste com módulos a -4A...')
            self.FBP.ClosedLoop(15)
            time.sleep(1)
            for module in range(4):
                if module == 0:
                    self.FBP.SetISlowRefx4(-4, 0, 0, 0)  # ciclo de trabalho
                elif module == 1:  # alterado para 21.5%
                    self.FBP.SetISlowRefx4(0, -4, 0, 0)  # ciclo de trabalho
                elif module == 2:  # alterado para 21.5%
                    self.FBP.SetISlowRefx4(0, 0, -4, 0)  # ciclo de trabalho
                elif module == 3:  # alterado para 22,575%
                    self.FBP.SetISlowRefx4(0, 0, 0, -4)  # ciclo de trabalho
                    # alterado para 21.5%

                # o teste original pedia um ciclo de trabalho de 20%, contudo
                # foi necessário alter o teste para trabalhar em malha aberta
                # devido a uma alteração na carga

                time.sleep(2)

                MeasureList = self._save_CurrentMeasurement(module)

                for current in MeasureList:
                    MeasCurr[module][1].append(current)

                time.sleep(1)
                self.FBP.SetSlaveAdd(1)  # bastidor em teste

                print('mod1: ' + str(self.FBP.Read_iMod1()))
                time.sleep(0.1)
                print('mod2: ' + str(self.FBP.Read_iMod2()))
                time.sleep(0.1)
                print('mod3: ' + str(self.FBP.Read_iMod3()))
                time.sleep(0.1)
                print('mod4: ' + str(self.FBP.Read_iMod4()) + '\n')
                time.sleep(0.1)

                if module == 0 or module == 1 or module == 2 or module == 3:
                    self.FBP.SetISlowRefx4(0, 0, 0, 0)
                time.sleep(2)
            '''##########################################################################'''

            self.FBP.Read_ps_SoftInterlocks()
            self.FBP.Read_ps_HardInterlocks()
            '''#################### Teste em Malha Fechada com 5A #######################'''
            '''##########################################################################'''
            self.update_gui.emit(
                'Iniciando teste com módulos em malha fechada a 5A...')

            for module in range(4):
                self.FBP.ClosedLoop(15)
                time.sleep(1)
                if module == 0:
                    self.FBP.SetISlowRefx4(5, 0, 0, 0)
                elif module == 1:
                    self.FBP.SetISlowRefx4(0, 5, 0, 0)
                elif module == 2:
                    self.FBP.SetISlowRefx4(0, 0, 5, 0)
                elif module == 3:
                    self.FBP.SetISlowRefx4(0, 0, 0, 5)
                time.sleep(2)

                if (abs(self.FBP.Read_iMod1()) > 12) or \
                   (abs(self.FBP.Read_iMod2()) > 12) or \
                   (abs(self.FBP.Read_iMod3()) > 12) or \
                   (abs(self.FBP.Read_iMod4()) > 12):
                    self.update_gui.emit('ERRO! REINICIE O TESTE E AS FONTES')
                    time.sleep(10)
                    raise NameError('ERRO! REINICIE O TESTE E AS FONTES')
                time.sleep(1)

                MeasureList = self._save_CurrentMeasurement(module)

                print('mod1: ' + str(self.FBP.Read_iMod1()))
                time.sleep(0.1)
                print('mod2: ' + str(self.FBP.Read_iMod2()))
                time.sleep(0.1)
                print('mod3: ' + str(self.FBP.Read_iMod3()))
                time.sleep(0.1)
                print('mod4: ' + str(self.FBP.Read_iMod4()) + '\n')
                time.sleep(0.1)

                for current in MeasureList:
                    MeasCurr[module][2].append(current)

                self.FBP.SetSlaveAdd(1)

                if module == 0 or module == 1 or module == 2 or module == 3:
                    self.FBP.SetISlowRefx4(0, 0, 0, 0)
                time.sleep(2)
                self.FBP.OpenLoop(15)
                time.sleep(2)
            '''##########################################################################'''

            self.FBP.Read_ps_SoftInterlocks()
            self.FBP.Read_ps_HardInterlocks()
            '''################### Teste em Malha Fechada com 10A #######################'''
            '''##########################################################################'''
            self.update_gui.emit(
                'Iniciando teste com módulos em malha fechada a 10A...')
            self.FBP.ClosedLoop(0b1111)
            time.sleep(2)
            self.FBP.OpMode(0)
            time.sleep(2)
            self.FBP.SetISlowRefx4(10, 10, 10, 10)
            time.sleep(1)

            for module in range(4):
                time.sleep(5)
                MeasureList = self._save_CurrentMeasurement(module)
                for current in MeasureList:
                    MeasCurr[module][3].append(current)

            self.FBP.SetSlaveAdd(1)

            print('mod1: ' + str(self.FBP.Read_iMod1()))
            time.sleep(0.1)
            print('mod2: ' + str(self.FBP.Read_iMod2()))
            time.sleep(0.1)
            print('mod3: ' + str(self.FBP.Read_iMod3()))
            time.sleep(0.1)
            print('mod4: ' + str(self.FBP.Read_iMod4()) + '\n')
            time.sleep(0.1)
            '''##########################################################################'''

            print('Interlocks Ativos: ')
            self.FBP.Read_ps_SoftInterlocks()
            self.FBP.Read_ps_HardInterlocks()

            self.update_gui.emit(
                'Realizando medidas de tensão do DC-Link, tensão de saída e temperatura'
            )
            for o in range(8):
                time.sleep(30)  # alterar tempo para 30s
                MeasDCLink[0].append(self.FBP.Read_vDCMod1())
                time.sleep(0.1)
                MeasDCLink[1].append(self.FBP.Read_vDCMod2())
                time.sleep(0.1)
                MeasDCLink[2].append(self.FBP.Read_vDCMod3())
                time.sleep(0.1)
                MeasDCLink[3].append(self.FBP.Read_vDCMod4())
                time.sleep(0.1)

                MeasVout[0].append(self.FBP.Read_vOutMod1())
                time.sleep(0.1)
                MeasVout[1].append(self.FBP.Read_vOutMod2())
                time.sleep(0.1)
                MeasVout[2].append(self.FBP.Read_vOutMod3())
                time.sleep(0.1)
                MeasVout[3].append(self.FBP.Read_vOutMod4())
                time.sleep(0.1)

                MeasTemp[0].append(self.FBP.Read_temp1())
                time.sleep(0.1)
                MeasTemp[1].append(self.FBP.Read_temp2())
                time.sleep(0.1)
                MeasTemp[2].append(self.FBP.Read_temp3())
                time.sleep(0.1)
                MeasTemp[3].append(self.FBP.Read_temp4())
                time.sleep(0.1)

            self.FBP.SetSlaveAdd(1)
            '''################### Teste em Malha Fechada com -10A ######################'''
            '''##########################################################################'''
            self.update_gui.emit(
                'Iniciando teste com módulos em malha fechada a -10A...')
            self.FBP.SetISlowRefx4(0, 0, 0, 0)
            time.sleep(0.5)
            self.FBP.SetISlowRefx4(-10, -10, -10, -10)

            for module in range(4):
                time.sleep(5)
                MeasureList = self._save_CurrentMeasurement(module)
                for current in MeasureList:
                    MeasCurr[module][4].append(current)

            self.FBP.SetSlaveAdd(1)

            print('mod1: ' + str(self.FBP.Read_iMod1()))
            time.sleep(0.1)
            print('mod2: ' + str(self.FBP.Read_iMod2()))
            time.sleep(0.1)
            print('mod3: ' + str(self.FBP.Read_iMod3()))
            time.sleep(0.1)
            print('mod4: ' + str(self.FBP.Read_iMod4()) + '\n')
            time.sleep(0.1)
            '''##########################################################################'''

            self.FBP.Read_ps_SoftInterlocks()
            self.FBP.Read_ps_HardInterlocks()

            self.update_gui.emit(
                'Realizando medidas de tensão do DC-Link, tensão de saída e temperatura'
            )
            for p in range(8):
                time.sleep(30)  # alterar tempo para 30s
                MeasDCLink[0].append(self.FBP.Read_vDCMod1())
                time.sleep(0.1)
                MeasDCLink[1].append(self.FBP.Read_vDCMod2())
                time.sleep(0.1)
                MeasDCLink[2].append(self.FBP.Read_vDCMod3())
                time.sleep(0.1)
                MeasDCLink[3].append(self.FBP.Read_vDCMod4())
                time.sleep(0.1)

                MeasVout[0].append(self.FBP.Read_vOutMod1())
                time.sleep(0.1)
                MeasVout[1].append(self.FBP.Read_vOutMod2())
                time.sleep(0.1)
                MeasVout[2].append(self.FBP.Read_vOutMod3())
                time.sleep(0.1)
                MeasVout[3].append(self.FBP.Read_vOutMod4())
                time.sleep(0.1)

                MeasTemp[0].append(self.FBP.Read_temp1())
                time.sleep(0.1)
                MeasTemp[1].append(self.FBP.Read_temp2())
                time.sleep(0.1)
                MeasTemp[2].append(self.FBP.Read_temp3())
                time.sleep(0.1)
                MeasTemp[3].append(self.FBP.Read_temp4())
                time.sleep(0.1)

            self.FBP.SetSlaveAdd(1)

            self.FBP.SetISlowRefx4(0, 0, 0, 0)
            time.sleep(1)
            self.FBP.TurnOff(0b1111)

            for module in range(4):
                log = PowerSupplyLog()
                log.id_canal_power_supply = module + 1

                test = [True for p in range(9)]
                n = 0
                temp_exceeded = 0

                self.update_gui.emit('')
                self.update_gui.emit('Verificando resultados do módulo '\
                                     + str(module + 1) + '...')
                '''-------------------------------------------------------------'''
                for a in compare_current:
                    for b in MeasCurr[module][n]:
                        if a == round(b):
                            if test[n]:
                                test[n] = True
                        else:
                            test[n] = False
                    if test[n]:
                        self.update_gui.emit('      Aprovado no teste ' +
                                             str(compare_current.index(a) +
                                                 1) + ' de corrente de saída')
                    else:
                        self.update_gui.emit('      Reprovado no teste ' +
                                             str(compare_current.index(a) +
                                                 1) + ' de corrente de saída')
                    n = n + 1
                '''-------------------------------------------------------------'''
                '''-------------------------------------------------------------'''
                for c in MeasDCLink[module]:
                    if (LimDCLink[0] <= round(c)) and (round(c) <=
                                                       LimDCLink[1]):
                        if test[5]:
                            test[5] = True
                    else:
                        test[5] = False
                if test[5]:
                    self.update_gui.emit(
                        '      Aprovado no teste de leitura da tensão do DC Link'
                    )
                else:
                    self.update_gui.emit(
                        '      Reprovado no teste de leitura da tensão do DC Link'
                    )
                '''-------------------------------------------------------------'''
                '''-------------------------------------------------------------'''

                for d in MeasTemp[module]:
                    if d <= LimTemp:
                        if test[6]:
                            test[6] = True

                    elif d == 127:
                        temp_exceeded = 127
                        test[6] = False

                    elif (d >= LimTemp) and (d != 127):
                        # if d == 127:
                        # test[6] = True
                        # temp_exceeded = 127
                        test[6] = False

                if test[6]:
                    self.update_gui.emit(
                        '      Aprovado no teste de leitura da temperatura')
                else:
                    if temp_exceeded == 127:
                        self.update_gui.emit(
                            '      Aprovado no teste de leitura da temperatura com ressalvas'
                        )
                        test[6] = True
                    else:
                        self.update_gui.emit(
                            '      Reprovado no teste de leitura de temperatura'
                        )
                '''-------------------------------------------------------------'''
                '''-------------------------------------------------------------'''

                for e in range(0, len(MeasVout[module]) - 8):
                    if (LimVout[0] < MeasVout[module][e]) and (
                            MeasVout[module][e] < LimVout[1]):
                        if test[7]:
                            test[7] = True
                    else:
                        test[7] = False
                if test[7]:
                    self.update_gui.emit(
                        '      Aprovado no teste 1 de leitura da tensão de saída '
                    )
                else:
                    self.update_gui.emit(
                        '      Reprovado no teste 1 de leitura da tensão de saída'
                    )
                '''-------------------------------------------------------------'''
                '''-------------------------------------------------------------'''
                for f in range(8, len(MeasVout[module])):
                    if (-LimVout[1] < MeasVout[module][f]) and (
                            MeasVout[module][f] < -LimVout[0]):
                        if test[8]:
                            test[8] = True
                    else:
                        test[8] = False
                if test[8]:
                    self.update_gui.emit(
                        '      Aprovado no teste 2 de leitura da tensão de saída'
                    )
                else:
                    self.update_gui.emit(
                        '      Reprovado no teste 2 de leitura da tensão de saída'
                    )
                '''-------------------------------------------------------------'''
                print('\n')
                print(test)
                print('\n')
                if test == [True for g in range(9)]:
                    if result:
                        result = True
                    log.test_result = 'Aprovado'
                else:
                    log.test_result = 'Reprovado'
                    result = False

                log.result_test_on_off = OnOff[module]
                log.serial_number_power_supply = self._serial_number
                log.iout0 = MeasCurr[module][3][0]
                log.iout1 = MeasCurr[module][4][0]
                log.vout0 = MeasVout[module][7]
                log.vout1 = MeasVout[module][15]
                log.vdclink0 = MeasDCLink[module][7]
                log.vdclink1 = MeasDCLink[module][15]
                log.temperatura0 = MeasTemp[module][7]
                log.temperatura1 = MeasTemp[module][15]
                log.iout_add_20_duty_cycle = MeasCurr[module][0][0]
                log.iout_less_20_duty_cycle = MeasCurr[module][1][0]

                log.details = 'SoftInterlocks ativos: ' + str(self.FBP.Read_ps_SoftInterlocks()) + \
                              ' HardInterlocks ativos: ' + str(self.FBP.Read_ps_HardInterlocks())

                if temp_exceeded == 127:
                    log.details = log.details + ' (false_read 127 degrees Celsius)'

                send_to_server_result = self._send_to_server(log)

        self.update_gui.emit('')
        self.update_gui.emit('Interlocks Ativos:')
        for softinterlock in self._read_SoftInterlock(
                self.FBP.Read_ps_SoftInterlocks()):
            self.update_gui.emit(softinterlock)
        for hardinterlock in self._read_HardInterlock(
                self.FBP.Read_ps_HardInterlocks()):
            self.update_gui.emit(hardinterlock)
        print('--------------------------------------------\n')

        self.test_complete.emit(result)

    def _save_CurrentMeasurement(self, module):

        Measurement = []

        if module == 0:
            self.FBP.SetSlaveAdd(1)  # bastidor em teste
            Measurement.append(self.FBP.Read_iMod1(
            ))  # corrente de saída lida pelo bastidor testado
            time.sleep(0.1)
            self.FBP.SetSlaveAdd(5)  # jiga bastidor
            Measurement.append(self.FBP.Read_iMod1()
                               )  # corrente de saída lida pela jiga bastidor
            time.sleep(0.1)

        elif module == 1:
            self.FBP.SetSlaveAdd(1)  # bastidor em teste
            Measurement.append(self.FBP.Read_iMod2(
            ))  # corrente de saída lida pelo bastidor testado
            time.sleep(0.1)
            self.FBP.SetSlaveAdd(5)  # jiga bastidor
            Measurement.append(self.FBP.Read_iMod2()
                               )  # corrente de saída lida pela jiga bastidor
            time.sleep(0.1)

        elif module == 2:
            self.FBP.SetSlaveAdd(1)  # bastidor em teste
            Measurement.append(self.FBP.Read_iMod3(
            ))  # corrente de saída lida pelo bastidor testado
            time.sleep(0.1)
            self.FBP.SetSlaveAdd(5)  # jiga bastidor
            Measurement.append(self.FBP.Read_iMod3()
                               )  # corrente de saída lida pela jiga bastidor
            time.sleep(0.1)

        elif module == 3:
            self.FBP.SetSlaveAdd(1)  # bastidor em teste
            Measurement.append(self.FBP.Read_iMod4(
            ))  # corrente de saída lida pelo bastidor testado
            time.sleep(0.1)
            self.FBP.SetSlaveAdd(5)  # jiga bastidor
            Measurement.append(self.FBP.Read_iMod4()
                               )  # corrente de saída lida pela jiga bastidor
            time.sleep(0.1)

        return Measurement

    def _send_to_server(self, item):
        client = ElpWebClient()
        client_data = item.data
        print(client_data)
        client_method = item.method
        client_response = client.do_request(client_method, client_data)
        print(client_response)
        server_status = self._parse_response(client_response)
        return server_status

    def _parse_response(self, response):
        res_key = 'StatusCode'
        err_key = 'error'

        if res_key in response.keys() and err_key not in response.keys():
            return True
        else:
            return False

    def run(self):
        self._test_sequence()
        #pass

    def _read_SoftInterlock(self, int_interlock):
        SoftInterlockList = ['N/A', 'Sobre-tensão na carga 1', 'N/A', \
                             'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A',\
                             'Sobre-tensão na carga 2', 'N/A',        \
                             'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A',\
                             'Sobre-tensão na carga 3', 'N/A',        \
                             'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A',\
                             'Sobre-tensão na carga 4', 'N/A',        \
                             'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A']

        op_bin = 1
        ActiveSoftInterlocks = []

        for i in range(len('{0:b}'.format(int_interlock))):
            if (int_interlock & (op_bin << i)) == 2**i:
                ActiveSoftInterlocks.append(SoftInterlockList[i])

        return ActiveSoftInterlocks

    def _read_HardInterlock(self, int_interlock):
        HardInterlockList = ['Sobre-corrente na carga 1', 'N/A',                   \
                             'Sobre-tensão no DC-Link do módulo 1',                \
                             'Sub-tensão no DC-Link do módulo 1',                  \
                             'Falha no relé de entrada do DC-Link do módulo 1',    \
                             'Falha no fusível de entrada do DC-Link do módulo 1', \
                             'Falha nos drivers do módulo 1',                      \
                             'Sobre-temperatura no módulo 1',                      \
                             'Sobre-corrente na carga 2', 'N/A',                   \
                             'Sobre-tensão no DC-Link do módulo 2',                \
                             'Sub-tensão no DC-Link do módulo 2',                  \
                             'Falha no relé de entrada do DC-Link do módulo 2',    \
                             'Falha no fusível de entrada do DC-Link do módulo 2', \
                             'Falha nos drivers do módulo 2',                      \
                             'Sobre-temperatura no módulo 2',                      \
                             'Sobre-corrente na carga 3', 'N\A',                   \
                             'Sobre-tensão no DC-Link do módulo 3',                \
                             'Sub-tensão no DC-Link do módulo 3',                  \
                             'Falha no relé de entrada no DC-Link do módulo 3',    \
                             'Falha no fusível de entrada do DC-Link do módulo 3', \
                             'Falha nos drivers do módulo 3',                      \
                             'Sobre-temperatura no módulo 3',                      \
                             'Sobre-corrente na carga 4', 'N/A',                   \
                             'Sobre-tensão no DC-Link do módulo 4',                \
                             'Sub-tensão no DC-Link do módulo 4',                  \
                             'Falha no relé de entrada do DC-Link do módulo 4',    \
                             'Falha no fusível de entrada do DC-Link do módulo 4', \
                             'Falha nos drivers do módulo 4',                      \
                             'Sobre-temperatura no módulo 4']
        op_bin = 1
        ActiveHardInterlocks = []

        for i in range(len('{0:b}'.format(int_interlock))):
            if (int_interlock & (op_bin << i)) == 2**i:
                ActiveHardInterlocks.append(HardInterlockList[i])

        return ActiveHardInterlocks
Exemplo n.º 24
0
class PowerModuleTest(QThread):
    test_complete       = pyqtSignal(list)
    update_gui          = pyqtSignal(str)
    connection_lost     = pyqtSignal()

    def __init__(self, comport=None, baudrate=None,
                    mod0=None, mod1=None, mod2=None, mod3=None):
        QThread.__init__(self)
        self._comport = comport
        self._baudarate = baudrate
        self._serial_mod0 = mod0
        self._serial_mod1 = mod1
        self._serial_mod2 = mod2
        self._serial_mod3 = mod3
        self._serial_port = serial.Serial()
        self._active_interlocks = ''
        self.FBP = SerialDRS()


    @property
    def comport(self):
        return self._comport

    @comport.setter
    def comport(self, value):
        self._comport = value

    @property
    def baudrate(self):
        return self._baudarate

    @baudrate.setter
    def baudrate(self, value):
        self._baudrate = value

    @property
    def serial_mod0(self):
        return self._serial_mod0

    @serial_mod0.setter
    def serial_mod0(self, value):
        self._serial_mod0 = value

    @property
    def serial_mod1(self):
        return self._serial_mod1

    @serial_mod1.setter
    def serial_mod1(self, value):
        self._serial_mod1 = value

    @property
    def serial_mod2(self):
        return self._serial_mod2

    @serial_mod2.setter
    def serial_mod2(self, value):
        self._serial_mod2 = value

    @property
    def serial_mod3(self):
        return self._serial_mod3

    @serial_mod3.setter
    def serial_mod3(self, value):
        self._serial_mod3 = value

    def open_serial_port(self):
        if self._comport is None or self._baudrate is None:
            return False
        else:
            self._serial_port.baudrate  = self._baudrate
            self._serial_port.port      = self._comport
            self.FBP.SetSlaveAdd(5)
            return self.FBP.Connect(self._comport, self._baudrate)

    def test_communication(self):
        # Resultado teste de comunicação para os 4 modulos
        time.sleep(30)
        n_mod  = 0
        result = ''
        serial = [self._serial_mod0, self._serial_mod1, self._serial_mod2,
                    self._serial_mod3]

        for j in range(0, len(serial)):
            if serial[j] != None:
                n_mod = n_mod+1
        try:
            self.FBP.Write_sigGen_Aux(n_mod)
            test_package = self.FBP.Read_ps_Model()

            if (test_package[0] == 0)   and \
               (test_package[1] == 17)  and \
               (test_package[2] == 512) and \
               (test_package[3] == 14)  and \
               (test_package[4] == 223):
               result = 'OK'

               #---------------------verifica interlocks 1----------------------
               print(self.FBP.Read_ps_SoftInterlocks())
               print(self.FBP.Read_ps_HardInterlocks())
               #----------------------------------------------------------------
               self.FBP.ResetInterlocks()
            else:
                result = 'Falha'
        except:
            result = 'Falha'

        return result

    def _test_sequence(self):
        response = [None for i in range(4)]

        serial = [self._serial_mod0, self._serial_mod1, self._serial_mod2,
                    self._serial_mod3]

        mod_result1      = [[] for j in range(4)] # para medidas de iout
        mod_result2      = [[] for k in range(4)] # para medidas de vout
        mod_result3      = [[] for l in range(4)] # para medidas de temperatura
        mod_result4      = [[] for m in range(4)] # para medidas de dclink
        load_current     = ['turnedOff', 0, 23.5, 43.5, -43.5, -23.5] # correntes setadas
        compare_current  = [0, 0, 5, 10, -10, -5] # para comparar medidas de correntes

        if not self._serial_port.is_open:
            self.connection_lost.emit()
            #TODO: Encerra testes

        '''###########################################################'''
        '''Número de modulos conectados para inicializar o controlador'''
        '''###########################################################'''
        n_mod = 0
        for o in range(0, len(serial)):
            if serial[o] != None:
                n_mod = n_mod+1
        self.FBP.Write_sigGen_Aux(n_mod)
        '''###########################################################'''
        '''###########################################################'''


        '''###############################################################################'''
        '''Setando todos os valores de corrente e salvando resultados na matriz mod_result'''
        '''###############################################################################'''

        sum_mod = 0
        for module in serial:
            if module is not None:
                sum_mod = sum_mod + (2 ** serial.index(module))

        print('sum_mod enviado para UDC: ' + str(sum_mod) + '\n')

        #---------------------verifica interlocks 2----------------------
        print(self.FBP.Read_ps_SoftInterlocks())
        print(self.FBP.Read_ps_HardInterlocks())
        # self._active_interlocks = 'self._active_interlocks +\
        # '2-'  + soft + '-' + hard + '  ''
        #----------------------------------------------------------------

        for set_current in load_current:
            if set_current == 'turnedOff':
                self.FBP.TurnOff(sum_mod)
                self.update_gui.emit('Iniciando medições com modulos desligados')

                #---------------------verifica interlocks 3----------------------
                print(self.FBP.Read_ps_SoftInterlocks())
                print(self.FBP.Read_ps_HardInterlocks())
                # self._active_interlocks = self._active_interlocks +\
                # '3-'  + soft + '-' + hard + '  '
                #----------------------------------------------------------------

                time.sleep(30) # Alterar para 2 min
            else:
                self.FBP.TurnOn(sum_mod)
                time.sleep(1)
                self.FBP.OpenLoop(sum_mod)
                time.sleep(1)
                self.update_gui.emit('Iniciando medições com modulos ligados a '\
                                    + str(compare_current[load_current.index(set_current)]) + 'A')
                self.FBP.SetISlowRef(0.25 * set_current)
                time.sleep(0.5)
                self.FBP.SetISlowRef(0.5 * set_current)
                time.sleep(0.5)
                self.FBP.SetISlowRef(set_current)

                #---------------------verifica interlocks 4 - 8-----------------
                print(self.FBP.Read_ps_SoftInterlocks())
                print(self.FBP.Read_ps_HardInterlocks())
                index = str(load_current.index(set_current) + 3)

                # self._active_interlocks = self._active_interlocks\
                # + index + '-' + soft + '-' + hard + '  '
                #---------------------------------------------------------------
                if abs(self.FBP.Read_iMod1()) > 12 or \
                   abs(self.FBP.Read_iMod2()) > 12 or \
                   abs(self.FBP.Read_iMod3()) > 12 or \
                   abs(self.FBP.Read_iMod4()) > 12:
                    self.update_gui.emit('ERRO DE LEITURA DAS CORRENTES, DESLIGUE A JIGA E REINICIE O TESTE')
                    break
                time.sleep(30) # Alterar para 2 min

            if serial[0] != None:
                mod_result1[0].append(self.FBP.Read_iMod1())
                self.update_gui.emit('       corrente de saída do módulo 1: ' + str(mod_result1[0][load_current.index(set_current)]))
                time.sleep(0.1)
                mod_result2[0].append(self.FBP.Read_vOutMod1())
                self.update_gui.emit('       tensão de saída do módulo 1:   ' + str(mod_result2[0][load_current.index(set_current)]))
                time.sleep(0.1)
                mod_result3[0].append(self.FBP.Read_temp1())
                self.update_gui.emit('       temperatura do módulo 1:         ' + str(mod_result3[0][load_current.index(set_current)]))
                time.sleep(0.1)
                mod_result4[0].append(self.FBP.Read_vDCMod1())
                self.update_gui.emit('       tensão de entrada do módulo 1: ' + str(mod_result4[0][load_current.index(set_current)]))
                time.sleep(0.1)
                self.update_gui.emit('')

            if serial[1] != None:
                mod_result1[1].append(self.FBP.Read_iMod2())
                self.update_gui.emit('       corrente de saída do módulo 2: ' + str(mod_result1[1][load_current.index(set_current)]))
                time.sleep(0.1)
                mod_result2[1].append(self.FBP.Read_vOutMod2())
                self.update_gui.emit('       tensão de saída do módulo 2:   ' + str(mod_result2[1][load_current.index(set_current)]))
                time.sleep(0.1)
                mod_result3[1].append(self.FBP.Read_temp2())
                self.update_gui.emit('       temperatura do módulo 2:         ' + str(mod_result3[1][load_current.index(set_current)]))
                time.sleep(0.1)
                mod_result4[1].append(self.FBP.Read_vDCMod2())
                self.update_gui.emit('       tensão de entrada do módulo 2: ' + str(mod_result4[1][load_current.index(set_current)]))
                time.sleep(0.1)
                self.update_gui.emit('')

            if serial[2] != None:
                mod_result1[2].append(self.FBP.Read_iMod3())
                self.update_gui.emit('       corrente de saída do módulo 3: ' + str(mod_result1[2][load_current.index(set_current)]))
                time.sleep(0.1)
                mod_result2[2].append(self.FBP.Read_vOutMod3())
                self.update_gui.emit('       tensão de saída do módulo 3:   ' + str(mod_result2[2][load_current.index(set_current)]))
                time.sleep(0.1)
                mod_result3[2].append(self.FBP.Read_temp3())
                self.update_gui.emit('       temperatura do módulo 3:         ' + str(mod_result3[2][load_current.index(set_current)]))
                time.sleep(0.1)
                mod_result4[2].append(self.FBP.Read_vDCMod3())
                self.update_gui.emit('       tensão de entrada do módulo 3: ' + str(mod_result4[2][load_current.index(set_current)]))
                time.sleep(0.1)
                self.update_gui.emit('')

            if serial[3] != None:
                mod_result1[3].append(self.FBP.Read_iMod4())
                self.update_gui.emit('       corrente de saída do módulo 4: ' + str(mod_result1[3][load_current.index(set_current)]))
                time.sleep(0.1)
                mod_result2[3].append(self.FBP.Read_vOutMod4())
                self.update_gui.emit('       tensão de saída do módulo 4:   ' + str(mod_result2[3][load_current.index(set_current)]))
                time.sleep(0.1)
                mod_result3[3].append(self.FBP.Read_temp4())
                self.update_gui.emit('       temperatura do módulo 4:         ' + str(mod_result3[3][load_current.index(set_current)]))
                time.sleep(0.1)
                mod_result4[3].append(self.FBP.Read_vDCMod4())
                self.update_gui.emit('       tensão de entrada do módulo 4: ' + str(mod_result4[3][load_current.index(set_current)]))
                time.sleep(0.1)
                self.update_gui.emit('')

        self.FBP.TurnOff(sum_mod)
        '''###############################################################################'''
        '''###############################################################################'''

        for item in serial:
            if item is not None:

                power_module = PowerModule()
                power_module.serial_number = item
                res = self._send_to_server(power_module)

                test = [True for p in range(4)]

                if res:
                    self.update_gui.emit('')
                    self.update_gui.emit('Verificando resultados do modulo '\
                                        + str(serial.index(item)+1) + '...')
                    log = PowerModuleLog()
                    log.serial_number_power_module = item

                    # TODO: Faz os testes e seta os atributos de log
                    for q in range(0, len(mod_result1[serial.index(item)])):
                        if round(mod_result1[serial.index(item)][q]) == \
                           compare_current[q]:
                            if test[0]:
                                test[0] = True
                        else:
                            test[0] = False
                    if test[0]:
                        self.update_gui.emit('      Aprovado no teste de corrente de saída')
                    else:
                        self.update_gui.emit('      Reprovado no teste de corrente de saída')

                    if round(mod_result2[serial.index(item)][0]) == 0     and \
                       round(mod_result2[serial.index(item)][1]) == 0     and \
                             2 < mod_result2[serial.index(item)][2] < 3.5   and \
                             5 < mod_result2[serial.index(item)][3] < 6   and \
                             -6 < mod_result2[serial.index(item)][4] < -5 and \
                             -3.5 < mod_result2[serial.index(item)][5] < -2:
                        test[1] = True
                    else:
                        test[1] = False
                    if test[1]:
                        self.update_gui.emit('      Aprovado no teste de tensão de saída')
                    else:
                        self.update_gui.emit('      Reprovado no teste de tensão de saída')

                    for r in range(0, len(mod_result3[serial.index(item)])):
                        if mod_result3[serial.index(item)][r] < 90:
                            if test[2]:
                                test[2] = True
                        else:
                            test[2] = False
                    if test[2]:
                        self.update_gui.emit('      Aprovado no teste de leitura da temperatura')
                    else:
                        self.update_gui.emit('      Reprovado no teste de leitura da temperatura')

                    for s in range(0, len(mod_result4[serial.index(item)])):
                        if round(mod_result4[serial.index(item)][s]) == 15:
                            if test[3]:
                                test[3] = True
                        else:
                            test[3] = False
                    if test[3]:
                        self.update_gui.emit('      Aprovado no teste de leitura da tensão de entrada')
                    else:
                        self.update_gui.emit('      Reprovado no teste de leitura da tensão de entrada')

                    if test == [True for t in range(4)]:
                        log.test_result = 'Aprovado'
                        response[serial.index(item)] = True
                    else:
                        log.test_result = 'Reprovado'
                        response[serial.index(item)] = False

                    log.iload0 = mod_result1[serial.index(item)][0]
                    log.iload1 = mod_result1[serial.index(item)][1]
                    log.iload2 = mod_result1[serial.index(item)][2]
                    log.iload3 = mod_result1[serial.index(item)][3]
                    log.iload4 = mod_result1[serial.index(item)][4]
                    log.iload5 = mod_result1[serial.index(item)][5]

                    log.vload0 = mod_result2[serial.index(item)][0]
                    log.vload1 = mod_result2[serial.index(item)][1]
                    log.vload2 = mod_result2[serial.index(item)][2]
                    log.vload3 = mod_result2[serial.index(item)][3]
                    log.vload4 = mod_result2[serial.index(item)][4]
                    log.vload5 = mod_result2[serial.index(item)][5]

                    log.vdclink0 = mod_result4[serial.index(item)][0]
                    log.vdclink1 = mod_result4[serial.index(item)][1]
                    log.vdclink2 = mod_result4[serial.index(item)][2]
                    log.vdclink3 = mod_result4[serial.index(item)][3]
                    log.vdclink4 = mod_result4[serial.index(item)][4]
                    log.vdclink5 = mod_result4[serial.index(item)][5]

                    log.temperatura0 = mod_result3[serial.index(item)][0]
                    log.temperatura1 = mod_result3[serial.index(item)][1]
                    log.temperatura2 = mod_result3[serial.index(item)][2]
                    log.temperatura3 = mod_result3[serial.index(item)][3]
                    log.temperatura4 = mod_result3[serial.index(item)][4]
                    log.temperatura5 = mod_result3[serial.index(item)][5]

                    log.details = 'SoftInterlocks ativos: ' + str(self.FBP.Read_ps_SoftInterlocks()) + \
                                  ' HardInterlocks ativos: ' + str(self.FBP.Read_ps_HardInterlocks())

                    print(log.data)
                    self.update_gui.emit('modulo ' + str(serial.index(item)+1)\
                                        + ' ' + log.test_result)
                    log_res = self._send_to_server(log)
                    self._active_interlocks = ''

                    #response[serial.index(item)] = log_res

            # Quando o teste terminar emitir o resultado em uma lista de objetos
            # do tipo PowerModuleLog

            self.test_complete.emit(response)

        self.update_gui.emit('')
        self.update_gui.emit('Interlocks Ativos:')

        for softinterlock in self._read_SoftInterlock(self.FBP.Read_ps_SoftInterlocks()):
            self.update_gui.emit(softinterlock)
        for hardinterlock in self._read_HardInterlock(self.FBP.Read_ps_HardInterlocks()):
            self.update_gui.emit(hardinterlock)
        print('--------------------------------------------\n')

    def _send_to_server(self, item):
        client = ElpWebClient()
        client_data = item.data
        print(client_data)
        client_method = item.method
        client_response = client.do_request(client_method, client_data)
        print(client_response)
        server_status = self._parse_response(client_response)
        return server_status

    def _parse_response(self, response):
        res_key = 'StatusCode'
        err_key = 'error'

        if res_key in response.keys() and err_key not in response.keys():
            return True
        else:
            return False

    def run(self):
        self._test_sequence()
        #pass

    def _read_SoftInterlock(self, int_interlock):
        SoftInterlockList = ['N/A', 'Sobre-tensão na carga 1', 'N/A', \
                             'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A',\
                             'Sobre-tensão na carga 2', 'N/A',        \
                             'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A',\
                             'Sobre-tensão na carga 3', 'N/A',        \
                             'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A',\
                             'Sobre-tensão na carga 4', 'N/A',        \
                             'N/A', 'N/A', 'N/A', 'N/A', 'N/A', 'N/A']

        op_bin = 1
        ActiveSoftInterlocks = []

        for i in range(len('{0:b}'.format(int_interlock))):
            if (int_interlock & (op_bin << i)) == 2**i:
                ActiveSoftInterlocks.append(SoftInterlockList[i])

        return ActiveSoftInterlocks

    def _read_HardInterlock(self, int_interlock):
        HardInterlockList = ['Sobre-corrente na carga 1', 'N/A',                   \
                             'Sobre-tensão no DC-Link do módulo 1',                \
                             'Sub-tensão no DC-Link do módulo 1',                  \
                             'Falha no relé de entrada do DC-Link do módulo 1',    \
                             'Falha no fusível de entrada do DC-Link do módulo 1', \
                             'Falha nos drivers do módulo 1',                      \
                             'Sobre-temperatura no módulo 1',                      \
                             'Sobre-corrente na carga 2', 'N/A',                   \
                             'Sobre-tensão no DC-Link do módulo 2',                \
                             'Sub-tensão no DC-Link do módulo 2',                  \
                             'Falha no relé de entrada do DC-Link do módulo 2',    \
                             'Falha no fusível de entrada do DC-Link do módulo 2', \
                             'Falha nos drivers do módulo 2',                      \
                             'Sobre-temperatura no módulo 2',                      \
                             'Sobre-corrente na carga 3', 'N\A',                   \
                             'Sobre-tensão no DC-Link do módulo 3',                \
                             'Sub-tensão no DC-Link do módulo 3',                  \
                             'Falha no relé de entrada no DC-Link do módulo 3',    \
                             'Falha no fusível de entrada do DC-Link do módulo 3', \
                             'Falha nos drivers do módulo 3',                      \
                             'Sobre-temperatura no módulo 3',                      \
                             'Sobre-corrente na carga 4', 'N/A',                   \
                             'Sobre-tensão no DC-Link do módulo 4',                \
                             'Sub-tensão no DC-Link do módulo 4',                  \
                             'Falha no relé de entrada do DC-Link do módulo 4',    \
                             'Falha no fusível de entrada do DC-Link do módulo 4', \
                             'Falha nos drivers do módulo 4',                      \
                             'Sobre-temperatura no módulo 4']
        op_bin = 1
        ActiveHardInterlocks = []

        for i in range(len('{0:b}'.format(int_interlock))):
            if (int_interlock & (op_bin << i)) == 2**i:
                ActiveHardInterlocks.append(HardInterlockList[i])

        return ActiveHardInterlocks
Exemplo n.º 25
0
from common.pydrs import SerialDRS
from datetime import datetime
import time

drs = SerialDRS()
now = datetime.now()

drs_port = 'COM11'

BastidorList = ['1041182343', '1041182349']
module_list = ['modulo 1', 'modulo 2', 'modulo 3', 'modulo 4']

PS_List = [1, 2, 3, 4]
SetTestList = [10, 0, -10]
SetCurrentList = [0, 10, 0, -10, 0]

WarmUpTime = 2 * 3600
StepTime = 60

# o teste dura 50 horas (em média) com um WarmUpTime de 2 horas e um StepTime de 60 min

print(str(now.day) + ',' + str(now.hour) + ':' + str(now.minute))

for bastidor in BastidorList:
    print('\nConfigurando DRS e ligando módulos de potência do bastidor NS.:' +
          str(bastidor) + '...\n')
    drs.Connect(drs_port)
    time.sleep(1)
    drs.SetSlaveAdd(BastidorList.index(bastidor) + 1)
    time.sleep(1)
    drs.Config_nHRADC(4)
Exemplo n.º 26
0
from common.pydrs import SerialDRS
from datetime import datetime

import time
import visa

# Arquivo de configuração
import crosstalk_config as conf

drs = SerialDRS()
now = datetime.now()

# https://www.topster.pt/texto-para-ascii/doom.html

print(' _____ ______  _   _ ______  _____    _____  _     ______ ')
print('|  __ \| ___ \| | | || ___ )|  _  |  |  ___|| |    | ___ )')
print('| |  \/| |_/ /| | | || |_/ /| | | |  | |__  | |    | |_/ /')
print('| | __ |    / | | | ||  __/ | | | |  |  __| | |    |  __/ ')
print('| |_\ \| |\ \ | |_| || |    \ \_/ /  | |___ | |____| |    ')
print(' \____/\_| \_| \___/ \_|     \___/   \____/ \_____/\_|    ')
time.sleep(3)

print(
    ' _____                                  _____         _  _     _               '
)
print(
    '/  __ \                                |_   _|       | || |   (_)              '
)
print(
    '| /  \/ _ __   ___   ___   ___  ______   | |    __ _ | || | __ _  _ __    __ _ '
)
Exemplo n.º 27
0
from common.pydrs import SerialDRS
from DSOX_3024A import DSOX_3024A_USB
import time

drs = SerialDRS()
dso = DSOX_3024A_USB()

################################################################################
####################### LENDO ARQUIVO DE CONFIGURAÇÃO ##########################
################################################################################
_cfile = open('rippletest_config.csv', 'r')
config = _cfile.read()
_cfile.close()

config = config.split(';')

for i in config:
    config[config.index(i)] = config[config.index(i)].split('|')

for j in config:
    if config[config.index(j)][0] == 'COMPort':
        drs_port = config[config.index(j)][1]
        drs_port = drs_port.replace('\n', '')
        drs_port = drs_port.split(',')

        if len(drs_port) == 1:
            drs_port = drs_port[0]

    elif config[config.index(j)][0] == 'UdcAddr':
        drs_addr = config[config.index(j)][1]
        drs_addr = drs_addr.replace('\n', '')
Exemplo n.º 28
0
class UDCTest(QThread):
    DISAPPROVED = "Falha"
    APPROVED = "OK"
    START_TEST = 0
    READ_RESULT = 1
    SUCESS = 0
    FAIL = 1
    SLEEP_TIME = 1

    test_complete = pyqtSignal(bool)
    update_gui = pyqtSignal(str)
    connection_lost = pyqtSignal()

    send_partial_complete = pyqtSignal()

    buzzer_signal = pyqtSignal(str)
    led_signal = pyqtSignal(str)
    eeprom = pyqtSignal(str)
    flash = pyqtSignal(str)
    ram = pyqtSignal(str)
    adc = pyqtSignal(list)
    rtc = pyqtSignal(str)
    sensor_temp = pyqtSignal(str)
    rs485 = pyqtSignal(str)
    isol_plane = pyqtSignal(str)
    io_expander = pyqtSignal(str)
    ethernet_ping = pyqtSignal(str)
    loopback = pyqtSignal(str)

    def __init__(self, comport=None, baudrate=None, serial_number=None):
        QThread.__init__(self)
        self._comport = comport
        self._baudarate = baudrate
        self._serial_number = serial_number
        self._led = None
        self._buzzer = None
        self._details = ""
        self._loopback_fail = "\n"
        self._index_res_ok = 3

        self._send_partial_data = False

        self._udc = SerialDRS()

    @property
    def send_partial_data(self):
        return self._send_partial_data

    @send_partial_data.setter
    def send_partial_data(self, value):
        self._send_partial_data = value

    @property
    def serial_number(self):
        return self._serial_number

    @serial_number.setter
    def serial_number(self, value):
        self._serial_number = value

    @property
    def led(self):
        return self._led

    @led.setter
    def led(self, value):
        self._led = value

    @property
    def buzzer(self):
        return self._buzzer

    @buzzer.setter
    def buzzer(self, value):
        self._buzzer = value

    @property
    def details(self):
        return self._details

    @details.setter
    def details(self, value):
        self._details = value

    @property
    def comport(self):
        return self._comport

    @comport.setter
    def comport(self, value):
        self._comport = value

    @property
    def baudrate(self):
        return self._baudarate

    @baudrate.setter
    def baudrate(self, value):
        self._baudrate = value

    def open_serial_port(self):
        if self._comport is None or self._baudrate is None:
            return False
        else:
            return self._udc.Connect(self._comport, self._baudrate)

    def close_serial_port(self):
        if self._udc.is_open():
            self._udc.Disconnect()

    def test_communication(self):
        time.sleep(0.2)
        res = self._udc.UdcComTest(self.START_TEST, self.START_TEST)
        print("Retorno teste com")
        print(res)
        if len(res) > 0:
            if res[3] is self.START_TEST:
                return True
            else:
                return False
        else:
            return False

    def test_led(self):
        self.update_gui.emit("Testando Leds...")
        self._udc.UdcLedTest(self.START_TEST)
        self.update_gui.emit("Leds Testados")

    def test_buzzer(self):
        self.update_gui.emit("Testando Buzzer...")
        self._udc.UdcBuzzerTest(self.START_TEST)
        self.update_gui.emit("Buzzer Testado")

    def _test_eeprom(self):
        self.update_gui.emit("Testando EEPROM...")
        serial_str_list = list(str(self._serial_number))
        serial_int_list = []
        for item in serial_str_list:
            serial_int_list.append(int(item))
        result = self.DISAPPROVED
        self._udc.UdcEepromTest(self.START_TEST, serial_int_list)
        time.sleep(self.SLEEP_TIME)
        response = self._udc.UdcEepromTest(self.READ_RESULT, serial_int_list)

        print("Retorno Eeprom")
        print(response)

        if (response is not None) and (len(response) > 3):
            if response[self._index_res_ok] is self.SUCESS:
                result = self.APPROVED
            else:
                result = self.DISAPPROVED
        else:
            result = self.DISAPPROVED

        self.eeprom.emit(result)
        self.update_gui.emit(result)
        return (result is self.APPROVED)

    def _test_flash(self):
        self.update_gui.emit("Testando Flash...")
        result = self.DISAPPROVED
        self._udc.UdcFlashTest(self.START_TEST)
        time.sleep(self.SLEEP_TIME)
        response = self._udc.UdcFlashTest(self.READ_RESULT)

        print("Retorno Flash")
        print(response)

        if (response is not None) and (len(response) > 3):
            if response[self._index_res_ok] is self.SUCESS:
                result = self.APPROVED
            else:
                result = self.DISAPPROVED
        else:
            result = self.DISAPPROVED
        self.flash.emit(result)
        self.update_gui.emit(result)
        return (result is self.APPROVED)

    def _test_ram(self):
        self.update_gui.emit("Testando RAM...")
        result = self.DISAPPROVED
        self._udc.UdcRamTest(self.START_TEST)
        time.sleep(self.SLEEP_TIME)
        response = self._udc.UdcRamTest(self.READ_RESULT)

        print("Retorno Ram")
        print(response)

        if (response is not None) and (len(response) > 3):
            if response[self._index_res_ok] is self.SUCESS:
                result = self.APPROVED
            else:
                result = self.DISAPPROVED
        else:
            result = self.DISAPPROVED
        self.ram.emit(result)
        self.update_gui.emit(result)
        return (result is self.APPROVED)

    def _test_adc(self):
        result = [self.DISAPPROVED for i in range(8)]
        result_bool = [False for i in range(8)]
        for i in range(1, 9):
            self.update_gui.emit("Testando ADC Canal " + str(i))
            self._udc.UdcAdcTest(self.START_TEST, i)
            time.sleep(self.SLEEP_TIME)
            response = self._udc.UdcAdcTest(self.READ_RESULT, i)
            if (response is not None) and (len(response) > 3):
                if response[self._index_res_ok] is self.SUCESS:
                    result[i - 1] = self.APPROVED
                else:
                    result[i - 1] = self.DISAPPROVED
            else:
                result[i - 1] = self.DISAPPROVED
            self.update_gui.emit(result[i - 1])
        self.adc.emit(result)
        for i in range(8):
            if result[i] is self.APPROVED:
                result_bool[i] = True
        return result_bool

    def _test_rtc(self):
        self.update_gui.emit("Testando RTC...")
        result = self.DISAPPROVED
        self._udc.UdcRtcTest(self.START_TEST)
        time.sleep(self.SLEEP_TIME)
        response = self._udc.UdcRtcTest(self.READ_RESULT)
        if (response is not None) and (len(response) > 3):
            if response[self._index_res_ok] is self.SUCESS:
                result = self.APPROVED
            else:
                result = self.DISAPPROVED
        else:
            result = self.DISAPPROVED
        self.rtc.emit(result)
        self.update_gui.emit(result)
        return (result is self.APPROVED)

    def _test_temperature_sensor(self):
        self.update_gui.emit("Testando Sensor de Temperatura...")
        result = self.DISAPPROVED
        self._udc.UdcSensorTempTest(self.START_TEST)
        time.sleep(self.SLEEP_TIME)
        response = self._udc.UdcSensorTempTest(self.READ_RESULT)
        if (response is not None) and (len(response) > 3):
            if response[self._index_res_ok] is self.SUCESS:
                result = self.APPROVED
            else:
                result = self.DISAPPROVED
        else:
            result = self.DISAPPROVED
        self.sensor_temp.emit(result)
        self.update_gui.emit(result)
        return (result is self.APPROVED)

    def _test_rs485(self):
        self.update_gui.emit("Testando UART/RS485...")
        result = self.DISAPPROVED
        self._udc.UdcUartTest(self.START_TEST)
        time.sleep(self.SLEEP_TIME)
        response = self._udc.UdcUartTest(self.READ_RESULT)
        if (response is not None) and (len(response) > 3):
            if response[self._index_res_ok] is self.SUCESS:
                result = self.APPROVED
            else:
                result = self.DISAPPROVED
        else:
            result = self.DISAPPROVED
        self.rs485.emit(result)
        self.update_gui.emit(result)
        return (result is self.APPROVED)

    def _test_alim_isol_plane(self):
        self.update_gui.emit("Testando Alimentação Plano Isolado...")
        result = self.DISAPPROVED
        self._udc.UdcIsoPlaneTest(self.START_TEST)
        time.sleep(self.SLEEP_TIME)
        response = self._udc.UdcIsoPlaneTest(self.READ_RESULT)
        if (response is not None) and (len(response) > 3):
            if response[self._index_res_ok] is self.SUCESS:
                result = self.APPROVED
            else:
                result = self.DISAPPROVED
        else:
            result = self.DISAPPROVED
        self.isol_plane.emit(result)
        self.update_gui.emit(result)
        return (result is self.APPROVED)

    def _test_io_expander(self):
        self.update_gui.emit("Testando Expansor de I/O...")
        result = self.DISAPPROVED
        self._udc.UdcIoExpanderTest(self.START_TEST)
        time.sleep(self.SLEEP_TIME)
        response = self._udc.UdcIoExpanderTest(self.READ_RESULT)
        if (response is not None) and (len(response) > 3):
            if response[self._index_res_ok] is self.SUCESS:
                result = self.APPROVED
            else:
                result = self.DISAPPROVED
        else:
            result = self.DISAPPROVED
        self.io_expander.emit(result)
        self.update_gui.emit(result)
        return (result is self.APPROVED)

    def _test_ethernet_ping(self):
        self.update_gui.emit("Testando Ping Ethernet...")
        host = "192.168.1.4"
        if platform.system().lower() == "windows":
            ping_str = "-n 1"
        else:
            ping_str = "-c 1"
        resposta = os.system("ping " + ping_str + " " + host)
        if resposta is 0:
            self.ethernet_ping.emit(self.APPROVED)
            self.update_gui.emit(self.APPROVED)
            return True
        else:
            self.ethernet_ping.emit(self.DISAPPROVED)
            self.update_gui.emit(self.DISAPPROVED)
            return False

    def _test_periph_loopback(self):
        self._loopback_fail = "\t"
        self.update_gui.emit("Testando Loopbacks...")
        result = self.DISAPPROVED
        result_bool = [False for i in range(32)]
        for i in range(1, 33):
            self.update_gui.emit("Testando Loopback canal " + str(i))
            self._udc.UdcLoopBackTest(self.START_TEST, i)
            time.sleep(self.SLEEP_TIME)
            response = self._udc.UdcLoopBackTest(self.READ_RESULT, i)
            if (response is not None) and (len(response) > 3):
                if response[self._index_res_ok] is self.SUCESS:
                    result_bool[i - 1] = True
                    self.update_gui.emit(self.APPROVED)
                else:
                    result_bool[i - 1] = False
                    self._loopback_fail += "Erro Canal " + str(i) + '\t'
                    self.update_gui.emit(self.DISAPPROVED)
            else:
                result_bool[i - 1] = False
                self._loopback_fail += "Erro Canal " + str(i) + '\t'
                self.update_gui.emit(self.DISAPPROVED)
        if False in result_bool:
            result = self.DISAPPROVED
        else:
            result = self.APPROVED

        self.loopback.emit(result)
        return (result is self.APPROVED)

    def _test_sequence(self):
        result = False

        self.update_gui.emit("Iniciando Testes...")
        test_res_io_expander = self._test_io_expander()
        test_res_eeprom = self._test_eeprom()
        test_res_flash = self._test_flash()
        test_res_ram = self._test_ram()
        test_res_rtc = self._test_rtc()
        test_res_temp = self._test_temperature_sensor()
        test_res_isol_plane = self._test_alim_isol_plane()
        test_res_adc = self._test_adc()
        test_res_uart = self._test_rs485()
        test_res_loopback = self._test_periph_loopback()
        test_res_ethern_ping = self._test_ethernet_ping()

        udc = UDC()
        udc.serial_number = self._serial_number

        self.update_gui.emit("Cadastrando UDC no Servidor...")
        res = self._send_to_server(udc)

        if res:
            self.update_gui.emit("UDC Cadastrado com Sucesso!")

            log = UDCLog()
            log.serial_number_udc = self._serial_number
            if test_res_io_expander:
                log.io_expander = self.APPROVED
            else:
                log.io_expander = self.DISAPPROVED

            if self._led:
                log.leds = self.APPROVED
            else:
                log.leds = self.DISAPPROVED

            if self._buzzer:
                log.buzzer = self.APPROVED
            else:
                log.buzzer = self.DISAPPROVED

            if test_res_eeprom:
                log.eeprom = self.APPROVED
            else:
                log.eeprom = self.DISAPPROVED

            if test_res_flash:
                log.flash = self.APPROVED
            else:
                log.flash = self.DISAPPROVED

            if test_res_ram:
                log.ram = self.APPROVED
            else:
                log.ram = self.DISAPPROVED

            if test_res_rtc:
                log.rtc = self.APPROVED
            else:
                log.rtc = self.DISAPPROVED

            if test_res_uart:
                log.uart = self.APPROVED
            else:
                log.uart = self.DISAPPROVED

            if test_res_temp:
                log.temperature_sensor = self.APPROVED
            else:
                log.temperature_sensor = self.DISAPPROVED

            if test_res_isol_plane:
                log.control_aliment_isol_plane = self.APPROVED
            else:
                log.control_aliment_isol_plane = self.DISAPPROVED

            if test_res_ethern_ping:
                log.ethernet_ping = self.APPROVED
            else:
                log.ethernet_ping = self.DISAPPROVED

            if test_res_adc[0]:
                log.adc_ch_1 = self.APPROVED
            else:
                log.adc_ch_1 = self.DISAPPROVED

            if test_res_adc[1]:
                log.adc_ch_2 = self.APPROVED
            else:
                log.adc_ch_2 = self.DISAPPROVED

            if test_res_adc[2]:
                log.adc_ch_3 = self.APPROVED
            else:
                log.adc_ch_3 = self.DISAPPROVED

            if test_res_adc[3]:
                log.adc_ch_4 = self.APPROVED
            else:
                log.adc_ch_4 = self.DISAPPROVED

            if test_res_adc[4]:
                log.adc_ch_5 = self.APPROVED
            else:
                log.adc_ch_5 = self.DISAPPROVED

            if test_res_adc[5]:
                log.adc_ch_6 = self.APPROVED
            else:
                log.adc_ch_6 = self.DISAPPROVED

            if test_res_adc[6]:
                log.adc_ch_7 = self.APPROVED
            else:
                log.adc_ch_7 = self.DISAPPROVED

            if test_res_adc[7]:
                log.adc_ch_8 = self.APPROVED
            else:
                log.adc_ch_8 = self.DISAPPROVED

            if test_res_loopback:
                log.loopback = self.APPROVED
            else:
                log.loopback = self.DISAPPROVED + self._loopback_fail

            if test_res_io_expander and self._led and self._buzzer and \
                test_res_eeprom and test_res_flash and test_res_ram and \
                test_res_rtc and test_res_temp and test_res_isol_plane and \
                test_res_adc and test_res_uart and test_res_loopback and \
                test_res_ethern_ping and \
                test_res_adc[0] and test_res_adc[1] and test_res_adc[2] and \
                test_res_adc[3] and test_res_adc[4] and test_res_adc[5] and \
                test_res_adc[6] and test_res_adc[7]:
                log.test_result = 'Aprovado'
                result = True
            else:
                log.test_result = 'Reprovado'
                result = False

            self.update_gui.emit("Enviando dados de teste...")
            server_response = self._send_to_server(log)
            if server_response:
                self.update_gui.emit("Dados Enviados com Sucesso!")
            else:
                self.update_gui.emit("Erro ao enviar dados")
            self.test_complete.emit(result)

        else:
            self.update_gui.emit("Erro ao Cadastrar UDC no servidor!")

    def _send_partial(self):
        udc = UDC()
        udc.serial_number = self._serial_number
        log = UDCLog()
        log.serial_number_udc = self._serial_number
        log.test_result = 'Reprovado'
        log.details = self._details
        res = self._send_to_server(udc)
        if res:
            self._send_to_server(log)
        self.send_partial_complete.emit()

    def _send_to_server(self, item):
        client = ElpWebClient()
        client_data = item.data
        client_method = item.method
        client_response = client.do_request(client_method, client_data)
        server_status = self._parse_response(client_response)
        return server_status

    def _parse_response(self, response):
        res_key = 'StatusCode'
        err_key = 'error'

        if res_key in response.keys() and err_key not in response.keys():
            return True
        else:
            return False

    def run(self):
        if self._send_partial_data:
            self._send_partial()
        else:
            self._test_sequence()
        self._udc.Disconnect()