Esempio n. 1
0
def newP400m_1v34(source, freq, num):
    ''' (str, int, int) -> str
        
        Корректирует файл прошивки версии 1v34 для Р400м для указанной частоты
        и номера аппарата.
    '''
    def calcCrc1(freq, num):
        ''' (int, int) -> int
            
        Вычисление КС для заданной частоты и номера аппарата. 
        '''
        if (num == 1):
            crc = 64
        elif (num == 2):
            crc = -64
        return crc + 32 * freq

    def calcCrc2(freq, num):
        ''' (int, int) -> int
        
            Вычисление КС для заданной частоты и номера аппарата.
        '''
        if (num == 1):
            crc = -16
        elif (num == 2):
            crc = 16
        return crc + 8 * freq

    def calcFreq(freq):
        ''' (int) -> int
        
            Вычисление значения для частоты.
        '''
        return 32 * freq

    if not isinstance(source, str):
        raise TypeError(u"Ошибочный тип данных 'str'", unicode(type(source)))

    if not isinstance(freq, int):
        raise TypeError(u"Ошибочный тип данных 'freq'", unicode(type(freq)))

    if not isinstance(num, int):
        raise TypeError(u"Ошибочный тип данных 'num'", unicode(type(num)))

    # два байта по адресу '1C49' зависят только от частоты
    fr = my_func.intToStrHex(calcFreq(freq), 4, "le").decode('hex')
    adr = my_func.strHexToInt('1C49')
    source = source[:adr] + fr + source[adr + len(fr):]

    # два байта по адресу '5892' зависят от частоты и номера аппарата
    crc1 = my_func.intToStrHex(calcCrc1(freq, num), 4, "le").decode('hex')
    adr = my_func.strHexToInt('5892')
    source = source[:adr] + crc1 + source[adr + len(crc1):]

    # два байта по адресу '5894' зависят от частоты и номера аппарата
    crc2 = my_func.intToStrHex(calcCrc2(freq, num), 4, "le").decode('hex')
    adr = my_func.strHexToInt('5894')
    source = source[:adr] + crc2 + source[adr + len(crc2):]

    return source
Esempio n. 2
0
def newRZSK_1v30(source, freq, num):
    """ (str, int, int) -> str
        
        Корректирует файл прошивки версии 1v30 для РЗСК для указанной частоты
        и номера аппарата.
    """

    def calcCrc1(freq, num):
        """ (int, int) -> int
            
        Вычисление КС для заданной частоты и номера аппарата. 
        """
        if num == 1:
            crc = -39
        elif num == 2:
            crc = 38
        return crc + 32 * freq

    def calcCrc2(freq, num):
        """ (int, int) -> int
        
            Вычисление КС для заданной частоты и номера аппарата.
        """
        if num == 1:
            crc = 9
        elif num == 2:
            crc = -10
        return crc + 8 * freq

    def calcFreq(freq):
        """ (int) -> int
        
            Вычисление значения для частоты.
        """
        return 16 * freq

    if not isinstance(source, str):
        raise TypeError(u"Ошибочный тип данных 'str'", unicode(type(source)))

    if not isinstance(freq, int):
        raise TypeError(u"Ошибочный тип данных 'freq'", unicode(type(freq)))

    if not isinstance(num, int):
        raise TypeError(u"Ошибочный тип данных 'num'", unicode(type(num)))

    fr = my_func.intToStrHex(calcFreq(freq), 4, "le").decode("hex")
    adr = my_func.strHexToInt("4DE6")
    source = source[:adr] + fr + source[adr + len(fr) :]

    crc1 = my_func.intToStrHex(calcCrc1(freq, num), 4, "le").decode("hex")
    adr = my_func.strHexToInt("7C1E")
    source = source[:adr] + crc1 + source[adr + len(crc1) :]

    crc2 = my_func.intToStrHex(calcCrc2(freq, num), 4, "le").decode("hex")
    adr = my_func.strHexToInt("7C22")
    source = source[:adr] + crc2 + source[adr + len(crc2) :]

    return source
Esempio n. 3
0
def newRZSK_1v30(source, freq, num):
    ''' (str, int, int) -> str
        
        Корректирует файл прошивки версии 1v30 для РЗСК для указанной частоты
        и номера аппарата.
    '''
    def calcCrc1(freq, num):
        ''' (int, int) -> int
            
        Вычисление КС для заданной частоты и номера аппарата. 
        '''
        if (num == 1):
            crc = -39
        elif (num == 2):
            crc = 38
        return crc + 32 * freq

    def calcCrc2(freq, num):
        ''' (int, int) -> int
        
            Вычисление КС для заданной частоты и номера аппарата.
        '''
        if (num == 1):
            crc = 9
        elif (num == 2):
            crc = -10
        return crc + 8 * freq

    def calcFreq(freq):
        ''' (int) -> int
        
            Вычисление значения для частоты.
        '''
        return 16 * freq

    if not isinstance(source, str):
        raise TypeError(u"Ошибочный тип данных 'str'", unicode(type(source)))

    if not isinstance(freq, int):
        raise TypeError(u"Ошибочный тип данных 'freq'", unicode(type(freq)))

    if not isinstance(num, int):
        raise TypeError(u"Ошибочный тип данных 'num'", unicode(type(num)))

    fr = my_func.intToStrHex(calcFreq(freq), 4, "le").decode('hex')
    adr = my_func.strHexToInt('4DE6')
    source = source[:adr] + fr + source[adr + len(fr):]

    crc1 = my_func.intToStrHex(calcCrc1(freq, num), 4, "le").decode('hex')
    adr = my_func.strHexToInt('7C1E')
    source = source[:adr] + crc1 + source[adr + len(crc1):]

    crc2 = my_func.intToStrHex(calcCrc2(freq, num), 4, "le").decode('hex')
    adr = my_func.strHexToInt('7C22')
    source = source[:adr] + crc2 + source[adr + len(crc2):]

    return source
Esempio n. 4
0
def newP400_1v34c(source, freq, num):
    ''' (str, int, int) -> str

        Корректирует файл прошивки версии 1v34c для Р400 для указанной частоты.
        Номер аппарата не используется.
    '''

    #
    def calcFreq(freq):
        ''' (int) -> int
            
        Вычисление КС для заданной частоты. 
        '''
        return 32 * freq

    def calcCrc1(freq, num):
        ''' (int, int) -> int
            
        Вычисление КС для заданной частоты. 
        '''
        return 32 * freq

    def calcCrc2(freq, num):
        ''' (int, int) -> int
        
            Вычисление КС для заданной частоты и номера аппарата.
        '''
        return 8 * freq

    if not isinstance(source, str):
        raise TypeError(u"Ошибочный тип данных 'str'", unicode(type(source)))

    if not isinstance(freq, int):
        raise TypeError(u"Ошибочный тип данных 'freq'", unicode(type(freq)))

    if not isinstance(num, int):
        raise TypeError(u"Ошибочный тип данных 'num'", unicode(type(num)))


    # два байта по адресу '1CDC' зависят от частоты
    fr = my_func.intToStrHex(calcFreq(freq), 4, "le").decode('hex')
    adr = my_func.strHexToInt('1CDC')
    source = source[:adr] + fr + source[adr + len(fr):]

    # два байта по адресу '5845' зависят от частоты
    crc1 = my_func.intToStrHex(calcCrc1(freq, num), 4, "le").decode('hex')
    adr = my_func.strHexToInt('5845')
    source = source[:adr] + crc1 + source[adr + len(crc1):]

    # два байта по адресу '5847' зависят от частоты
    crc2 = my_func.intToStrHex(calcCrc2(freq, num), 4, "le").decode('hex')
    adr = my_func.strHexToInt('5847')
    source = source[:adr] + crc2 + source[adr + len(crc2):]

    return source
Esempio n. 5
0
def newP400_1v34c(source, freq, num):
    ''' (str, int, int) -> str

        Корректирует файл прошивки версии 1v34c для Р400 для указанной частоты.
        Номер аппарата не используется.
    '''

    #
    def calcFreq(freq):
        ''' (int) -> int
            
        Вычисление КС для заданной частоты. 
        '''
        return 32 * freq

    def calcCrc1(freq, num):
        ''' (int, int) -> int
            
        Вычисление КС для заданной частоты. 
        '''
        return 32 * freq

    def calcCrc2(freq, num):
        ''' (int, int) -> int
        
            Вычисление КС для заданной частоты и номера аппарата.
        '''
        return 8 * freq

    if not isinstance(source, str):
        raise TypeError(u"Ошибочный тип данных 'str'", unicode(type(source)))

    if not isinstance(freq, int):
        raise TypeError(u"Ошибочный тип данных 'freq'", unicode(type(freq)))

    if not isinstance(num, int):
        raise TypeError(u"Ошибочный тип данных 'num'", unicode(type(num)))

    # два байта по адресу '1CDC' зависят от частоты
    fr = my_func.intToStrHex(calcFreq(freq), 4, "le").decode('hex')
    adr = my_func.strHexToInt('1CDC')
    source = source[:adr] + fr + source[adr + len(fr):]

    # два байта по адресу '5845' зависят от частоты
    crc1 = my_func.intToStrHex(calcCrc1(freq, num), 4, "le").decode('hex')
    adr = my_func.strHexToInt('5845')
    source = source[:adr] + crc1 + source[adr + len(crc1):]

    # два байта по адресу '5847' зависят от частоты
    crc2 = my_func.intToStrHex(calcCrc2(freq, num), 4, "le").decode('hex')
    adr = my_func.strHexToInt('5847')
    source = source[:adr] + crc2 + source[adr + len(crc2):]

    return source
Esempio n. 6
0
    def testStrHexToInt(self):
        """ (self) -> None
        
            �������� ���������� ������ ������� strHexToInt.
        """
        self.assertEqual(my_func.strHexToInt("CC0"), 3264)
        self.assertEqual(my_func.strHexToInt("CC0", "be"), 3264)
        self.assertEqual(my_func.strHexToInt("12"), 18)
        self.assertEqual(my_func.strHexToInt("0CC0", "le"), 49164)

        self.assertRaises(ValueError, my_func.strHexToInt, "CC0", "d")
        self.assertRaises(TypeError, my_func.strHexToInt, 12)
        self.assertRaises(ValueError, my_func.strHexToInt, ":1")
Esempio n. 7
0
 def newData(self, data):
     ''' (self, list) -> bool
     
         Открытие файла данных нового образца.
     '''
     print data
     
     r = my_func.strHexToInt(data[1])
     print r
     
     uOut = []
     for i in range(self.adjTable.rowCount()):
         val = ''.join(data[2 + i * 4: 2 + i * 4 + 4])
         uOut.append(my_func.strHexToFloat(val, 'le'))
     print uOut
     
     uOut = []
     uOutADC = []
     iOut = []
     iOutADC = []
     rOutADC = []
     
     offset = 2
     for i in range(self.adjTable.rowCount()):
         val = ''.join(data[offset: offset + 4])
         offset += 4
         uOut.append(round(my_func.strHexToFloat(val, 'le'), 1))
         
         val = ''.join(data[offset: offset + 4])
         offset += 4
         uOutADC.append(round(my_func.strHexToFloat(val, 'le'), 1))
         
         val = ''.join(data[offset: offset + 2])
         offset += 2
         iOut.append(my_func.strHexToInt(val, 'le'))
         
         val = ''.join(data[offset: offset + 2])
         offset += 2
         iOutADC.append(my_func.strHexToInt(val, 'le'))
         
         val = ''.join(data[offset: offset + 4])
         offset += 4
         rOutADC.append(round(my_func.strHexToFloat(val, 'le'), 1))
         
     # заполнение таблицы полученными данными
     self.adjTable.clearTable()
     for i in range(len(uOut)):
         data = [uOut[i], uOutADC[i], iOut[i], iOutADC[i], r]
         self.adjTable.addRowData(data)
Esempio n. 8
0
 def openFile(self):
     ''' (self) -> None
         
         Открытие файла данных с последующим заполнением таблицы.
         Если напряжение измеренное прибором = 0, то строка игнорируется.
         В старых файлах первым байтом идет сопротивление = 75Ом.
         В новых структура изменена и первым байтом идет 1.
     '''
     filename = QtGui.QFileDialog.getOpenFileName(self, u"Открыть",
                                     filter="Data Files (*.dat)")
     
     if not filename:
         return
     
     # считывание сожержимого файла
     f = open(filename, 'rb')
     data_bin = f.read()
     f.close()
     
     data = []
     for char in data_bin:
         data.append(my_func.charToStrHex(char))
     del data_bin
     
     # сопротивление
     try:
         r = my_func.strHexToInt(data[0])
     except:
         return
     
     # старыше прошивки - версия 1, новые 2
     # в новых прошивках первым байтом идет 0
     if r == 0:
         self.newData(data)
     else:
         self.oldData(data)
Esempio n. 9
0
def newP400_1v36(source, freq, num):
    ''' (str) -> sr

        Корректирует файл прошивки версии 1v36 для Р400 для указанной частоты
        и номера аппарата.
    '''
    #
    def calcFreq(freq):
        ''' (int) -> int
            
        Вычисление КС для заданной частоты. 
        '''
        return 16 * freq

    def calcCrc1(freq, num):
        ''' (int, int) -> int
            
        Вычисление КС для заданной частоты. 
        '''
        if (num == 1):
            crc = 64
        elif (num == 2):
            crc = -64
        return crc + 32 * freq

    def calcCrc2(freq, num):
        ''' (int, int) -> int
        
            Вычисление КС для заданной частоты и номера аппарата.
        '''
        if (num == 1):
            crc = -16
        elif (num == 2):
            crc = 16
        return crc + 8 * freq

    if not isinstance(source, str):
        raise TypeError(u"Ошибочный тип данных 'str'", unicode(type(source)))

    if not isinstance(freq, int):
        raise TypeError(u"Ошибочный тип данных 'freq'", unicode(type(freq)))

    if not isinstance(num, int):
        raise TypeError(u"Ошибочный тип данных 'num'", unicode(type(num)))


    # два байта  зависят от частоты
    fr = my_func.intToStrHex(calcFreq(freq), 4, "le").decode('hex')
    adr = my_func.strHexToInt('1BEB')
    source = source[:adr] + fr + source[adr + len(fr):]

    # два байта  зависят от частоты и номера аппарата
    crc1 = my_func.intToStrHex(calcCrc1(freq, num), 4, "le").decode('hex')
    adr = my_func.strHexToInt('57EC')
    source = source[:adr] + crc1 + source[adr + len(crc1):]

    # два байта  зависят от частоты и номера аппарата
    crc2 = my_func.intToStrHex(calcCrc2(freq, num), 4, "le").decode('hex')
    adr = my_func.strHexToInt('57EE')
    source = source[:adr] + crc2 + source[adr + len(crc2):]

    return source
Esempio n. 10
0
def newP400_1v30(source, freq, num):
    ''' (str, int, int) -> str

        Корректирует файл прошивки версии 1v30 для Р400 для указанной частоты
        и номера аппарата.
    '''
    # строка '57D0' вычисляется относительно частоты и номера аппарата
    # xx (crc1) (crc2) xx xx xx (crc1, crc2 - двухбайтные)
    # строка '1BD0' зависит от частоты
    # (fr) xx xx xx xx xx xx

    #
    def calcCrc1(freq, num):
        val = freq * 32
        if num == 1:
            val += 64
        elif num == 2:
            val -= 64
        else:
            print u"calcCrc1"
            print u"Значения кроме 1 и 2 не принимаются:", num, type(num)
            raise ValueError
        val = my_func.intToStrHex(val)
        while len(val) < 4:
            val = '0' + val
        val = val[2:] + val[:2]
        return val

    #
    def calcCrc2(freq, num):
        val = freq * 8
        if num == 1:
            val -= 16
        elif num == 2:
            val += 16
        else:
            print u"calcCrc2"
            print u"Значения кроме 1 и 2 не принимаются:", num, type(num)
            raise ValueError
        val = my_func.intToStrHex(val)
        while len(val) < 4:
            val = '0' + val
        val = val[2:] + val[:2]
        return val

    #
    def calcFreq(val):
        val = "%02x0" % val
        if len(val) < 4:
            val = '0' + val
        val = val[2:] + val[:2]
        return val.upper()

    if not isinstance(source, str):
        raise TypeError(u"Ошибочный тип данных 'str'", unicode(type(source)))

    if not isinstance(freq, int):
        raise TypeError(u"Ошибочный тип данных 'freq'", unicode(type(freq)))

    if not isinstance(num, int):
        raise TypeError(u"Ошибочный тип данных 'num'", unicode(type(num)))

    # строка '1BD0' зависит от частоты
    fr = calcFreq(freq).decode('hex')
    adr = my_func.strHexToInt('1BD0')
    source = source[:adr] + fr + source[adr + len(fr):]

    # строка '57D0' вычисляется относительно частоты и номера аппарата
    # xx (crc1) (crc2) xx xx xx (crc1, crc2 - двухбайтные)
    crc1 = calcCrc1(freq, num).decode('hex')
    crc2 = calcCrc2(freq, num).decode('hex')
    adr = my_func.strHexToInt('57D0') + 1
    source = source[:adr] + crc1 + crc2 + source[adr + len(crc1) + len(crc2):]

    return source
Esempio n. 11
0
def newP400m_1v34(source, freq, num):
    """ (str, int, int) -> str
        
        Корректирует файл прошивки версии 1v34 для Р400м для указанной частоты
        и номера аппарата.
    """

    def calcCrc1(freq, num):
        """ (int, int) -> int
            
        Вычисление КС для заданной частоты и номера аппарата. 
        """
        if num == 1:
            crc = 64
        elif num == 2:
            crc = -64
        return crc + 32 * freq

    def calcCrc2(freq, num):
        """ (int, int) -> int
        
            Вычисление КС для заданной частоты и номера аппарата.
        """
        if num == 1:
            crc = -16
        elif num == 2:
            crc = 16
        return crc + 8 * freq

    def calcFreq(freq):
        """ (int) -> int
        
            Вычисление значения для частоты.
        """
        return 32 * freq

    if not isinstance(source, str):
        raise TypeError(u"Ошибочный тип данных 'str'", unicode(type(source)))

    if not isinstance(freq, int):
        raise TypeError(u"Ошибочный тип данных 'freq'", unicode(type(freq)))

    if not isinstance(num, int):
        raise TypeError(u"Ошибочный тип данных 'num'", unicode(type(num)))

    # два байта по адресу '1C49' зависят только от частоты
    fr = my_func.intToStrHex(calcFreq(freq), 4, "le").decode("hex")
    adr = my_func.strHexToInt("1C49")
    source = source[:adr] + fr + source[adr + len(fr) :]

    # два байта по адресу '5892' зависят от частоты и номера аппарата
    crc1 = my_func.intToStrHex(calcCrc1(freq, num), 4, "le").decode("hex")
    adr = my_func.strHexToInt("5892")
    source = source[:adr] + crc1 + source[adr + len(crc1) :]

    # два байта по адресу '5894' зависят от частоты и номера аппарата
    crc2 = my_func.intToStrHex(calcCrc2(freq, num), 4, "le").decode("hex")
    adr = my_func.strHexToInt("5894")
    source = source[:adr] + crc2 + source[adr + len(crc2) :]

    return source
Esempio n. 12
0
def newP400_1v30(source, freq, num):
    ''' (str, int, int) -> str

        Корректирует файл прошивки версии 1v30 для Р400 для указанной частоты
        и номера аппарата.
    '''

    # строка '57D0' вычисляется относительно частоты и номера аппарата
    # xx (crc1) (crc2) xx xx xx (crc1, crc2 - двухбайтные)
    # строка '1BD0' зависит от частоты
    # (fr) xx xx xx xx xx xx

    #
    def calcCrc1(freq, num):
        val = freq * 32
        if num == 1:
            val += 64
        elif num == 2:
            val -= 64
        else:
            print u"calcCrc1"
            print u"Значения кроме 1 и 2 не принимаются:", num, type(num)
            raise ValueError
        val = my_func.intToStrHex(val)
        while len(val) < 4:
            val = '0' + val
        val = val[2:] + val[:2]
        return val

    #
    def calcCrc2(freq, num):
        val = freq * 8
        if num == 1:
            val -= 16
        elif num == 2:
            val += 16
        else:
            print u"calcCrc2"
            print u"Значения кроме 1 и 2 не принимаются:", num, type(num)
            raise ValueError
        val = my_func.intToStrHex(val)
        while len(val) < 4:
            val = '0' + val
        val = val[2:] + val[:2]
        return val

    #
    def calcFreq(val):
        val = "%02x0" % val
        if len(val) < 4:
            val = '0' + val
        val = val[2:] + val[:2]
        return val.upper()

    if not isinstance(source, str):
        raise TypeError(u"Ошибочный тип данных 'str'", unicode(type(source)))

    if not isinstance(freq, int):
        raise TypeError(u"Ошибочный тип данных 'freq'", unicode(type(freq)))

    if not isinstance(num, int):
        raise TypeError(u"Ошибочный тип данных 'num'", unicode(type(num)))

    # строка '1BD0' зависит от частоты
    fr = calcFreq(freq).decode('hex')
    adr = my_func.strHexToInt('1BD0')
    source = source[:adr] + fr + source[adr + len(fr):]

    # строка '57D0' вычисляется относительно частоты и номера аппарата
    # xx (crc1) (crc2) xx xx xx (crc1, crc2 - двухбайтные)
    crc1 = calcCrc1(freq, num).decode('hex')
    crc2 = calcCrc2(freq, num).decode('hex')
    adr = my_func.strHexToInt('57D0') + 1
    source = source[:adr] + crc1 + crc2 + source[adr + len(crc1) + len(crc2):]

    return source
Esempio n. 13
0
    def oldData(self, data):
        ''' (self, list) -> bool
            
            Открытие файла данных старого образца.
        '''
        # сопротивление
        r = my_func.strHexToInt(data[0])
        
        # кол-во измерений для считывания
        numValues = self.adjTable.rowCount()
        
        # напряжения измеренные прибором
        uOut = []
        try:
            for i in range(numValues):
                u = my_func.strHexToInt(data[i + 1])
                if u == 0:
                    break
                uOut.append(float(u))
#            print u"Volatages =", uOut
        except:
            return
        
        # ток измеренный прибором
        iOut = []
        for u in uOut:
            iOut.append(int(round(u * 1000 / r)))
#        print u"Currents =", iOut
        
        # напряжение измеренное МкУМ
        uOutADC = []
        try:
            for i in range(numValues):
                tmp = data[41 + i * 4: 41 + i * 4 + 4]
                tmp = ''.join(tmp)
                tmp = round(my_func.strHexToFloat(tmp, 'le'), 1)
                uOutADC.append(tmp)
        except:
            return
#        print u"ADC vlotages =", uOutADC
        
        # ток имзеренный МкУМ
        iOutADC = []
        try:
            for i in range(numValues):
                tmp = data[201 + i * 2: 201 + i * 2 + 2]
                tmp = ''.join(tmp)
                tmp = my_func.strHexToInt(tmp, 'le')
                iOutADC.append(tmp)
        except:
            return
#        print u'ADC currents =', iOutADC
        
        # сопротивление измеренное МкУМ
        rOutADC = []
        for i in range(numValues):
            if iOutADC[i] != 0:
                tmp = round((1000 * uOutADC[i]) / iOutADC[i], 1)
            else:
                tmp = 1
            rOutADC.append(tmp)
#        print u"ADC resistances =", rOutADC
        
        # заполнение таблицы полученными данными
        self.adjTable.clearTable()
        for i in range(len(uOut)):
            data = [uOut[i], uOutADC[i], iOut[i], iOutADC[i], r]
            self.adjTable.addRowData(data)