Example #1
0
def read_and_save(device, i_addr, i_subaddr, i_leng, file):
    global frames
    data_list = device.read_from_rt(i_addr, i_subaddr, i_leng)
    data_str = ""
    i = 0
    for i in range(50):
        # print("%04X" % device.answer_word)
        if (device.answer_word & 0xF800 == device.command_word & 0xF800) & (
            (device.answer_word & 0x0008) == 0):
            break
        else:
            data_str = "{:.3f}; R; ".format(time.perf_counter()) \
                       + "CW 0x{:04X}; ".format(device.command_word & 0xFFFF) \
                       + "AW 0x{:04X}; ".format(device.answer_word & 0xFFFF) + "RT busy %d times\t" % (i+1)
            data_list = device.read_from_rt(i_addr, i_subaddr, i_leng)
            time.sleep(0.05)
    # busy check
    if "RT busy" in data_str:
        frames.busy_cnt += 1
    #
    crc16_new = crc16.calc(data_list[0:len(data_list) - 1],
                           len(data_list) - 1,
                           endian="big")
    crc16_old = data_list[len(data_list) - 1]
    crc16_state = "CRC OK" if crc16_new == crc16_old else "CRC BAD"
    # CRC_BAD check
    if crc16_new != crc16_old:
        frames.crc_bad_cnt += 1
    # total_calc
    frames.total_cnt += 1
    data_str += "{:.3f}; R; ".format(time.perf_counter()) \
               + "CW 0x{:04X}; ".format(device.command_word & 0xFFFF) + "AW 0x{:04X}: ".format(device.answer_word & 0xFFFF)
    for var in data_list:
        data_str += "{:04X} ".format(var)
    data_str += "; {1:04X}; {0:s};\n".format(crc16_state, crc16_new)
    #
    if file:
        file.write(data_str)
    return data_str[0:len(data_str) - 1], data_list
Example #2
0
 def computed_crc(self):
     return crc16.calc(self.data_for_crc())
Example #3
0
 def test_crc_computation(self):
     msg = "1f01482a10030e0100".decode('hex')
     crc = crc16.calc(msg)
     self.assertEqual(crc, 0x802c)
Example #4
0
 def test_crc_computation(self):
     msg = "1f01482a10030e0100".decode("hex")
     crc = crc16.calc(msg)
     self.assertEqual(crc, 0x802c)
Example #5
0
 def test_crc_computation(self):
     msg = "1f00ee8628030e0100".decode("hex")
     crc = crc16.calc(msg)
     self.assertEqual(crc, 0x00d8)
Example #6
0
 def computed_crc(self):
     return crc16.calc(self.data_for_crc())
Example #7
0
def frame_parcer(frame):
    with data_lock:
        data = []
        while len(frame) < 31:
            frame.append(0xFEFE)
            pass
        if frame[0] == 0x0F0D:  # проверка на метку кадра
            if frame[1] == frame_definer(modificator=0, dev_num=0,
                                         type=15):  # Системный кадр
                #
                data.append(["Метка кадра", "0x%04X" % frame[0]])
                data.append(["Определитель", "0x%04X" % frame[1]])
                data.append(["Номер кадра, шт", "%d" % frame[2]])
                data.append(
                    ["Время кадра, с",
                     "%d" % ((frame[3] << 16) + frame[4])])
                #
                data.append(["Ток МБКАП, мА", "%d" % frame[5]])
                data.append(["Ток ЦМ, мА", "%d" % frame[6]])
                data.append(["Ток МПП27, мА", "%d" % frame[7]])
                data.append(["Ток МПП100, мА", "%d" % frame[8]])
                data.append(["Ток ДИР, мА", "%d" % frame[9]])
                data.append(["Ток ДНТ, мА", "%d" % frame[10]])
                data.append(["Ток АДИИ, мА", "%d" % frame[11]])
                #
                data.append(["Указатель чтения", "%d" % frame[12]])
                data.append(["Указатель записи", "%d" % frame[13]])
                #
                data.append(["Ошибки МКО", "%d" % frame[14]])
                data.append(["Счетчик включений", "%d" % frame[15]])
                #
                data.append(
                    ["Разность времени, c",
                     "%d" % c_int16(frame[16]).value])
                data.append(["Кол-во синхрон., шт", "%d" % (frame[17] & 0xFF)])
                sync_time = (frame[18] << 16) + frame[18]
                data.append(["Время синхр.,с", "%d" % sync_time])
                data.append(["СТМ", "%d" % (frame[20] & 0xFF)])
                #
                data.append(["Ошибки ВШ", "%d" % ((frame[21] >> 8) & 0xFF)])
                data.append(["Неответы ВШ", "%d" % ((frame[21]) & 0xFF)])
                data.append(
                    ["Статус работы ВШ",
                     "0х%02X" % ((frame[22] >> 8) & 0xFF)])
                data.append(
                    ["Статус неответов ВШ",
                     "0х%02X" % (frame[22] & 0xFF)])
                #
                data.append(["Температура", "%d" % frame[23]])
                operating_time = (frame[24] << 16) + frame[25]
                data.append(
                    ["Время наработки, ч",
                     "%.3f" % (operating_time / 3600)])
                data.append(["Интервал измерения", "%d" % frame[26]])
                data.append(["Системный интервал", "%d" % frame[27]])
                #
                data.append(
                    ["Состояние т.з",
                     "0x%02X" % ((frame[28] >> 8) & 0xFF)])
                data.append(
                    ["Статус т.з",
                     "0x%02X" % ((frame[28] >> 0) & 0xFF)])
                #
                data.append(["АДИИ ФК", "%02X" % ((frame[29] >> 8) & 0xFF)])
                data.append(["АДИИ режим", "%02X" % ((frame[29] >> 8) & 0xFF)])
                data.append(["АДии интервал, с", "%d" % frame[30]])
                #
                data.append(["CRC-16", "0x%04X" % crc16.calc(frame, 32)])
                pass
            elif frame[1] == frame_definer(
                    modificator=0, dev_num=0,
                    type=1) or frame[1] == frame_definer(
                        modificator=0, dev_num=0, type=2):  # Кадры МПП
                # подготовка
                if (frame[1] & 0xF) == 1:
                    mpp_num, a, b = 1, 1, 0
                elif (frame[1] & 0xF) == 1:
                    mpp_num, a, b = 2, 1, 0
                else:
                    mpp_num, a, b = 5, 1, 0
                #
                #
                data.append(["Метка кадра", "0x%04X" % frame[0]])
                data.append(["Определитель", "0x%04X" % frame[1]])
                data.append(["Номер кадра, шт", "%d" % frame[2]])
                data.append(
                    ["Время кадра, с",
                     "%d" % ((frame[3] << 16) + frame[4])])
                #
                data.append(["Кол-во измерений, шт", "%d" % frame[5]])
                data.append(["Уставка, В", "%d" % frame[6]])
                #
                data.append([
                    "Время регистрации, с",
                    "%d" % ((frame[7] << 16) + frame[8])
                ])
                data.append([
                    "Время регистрации, мкс",
                    "%d" % ((frame[9] << 16) + frame[10])
                ])
                data.append([
                    "Длительность, с",
                    "%.3g" % (((frame[11] << 16) + frame[12]) * (10**-6) / 40)
                ])
                data.append(["Переход через 0, шт", "%d" % frame[13]])
                data.append(["Пиковое значение, В", "%.3g" % (a * frame[14])])
                data.append([
                    "Мощность, В*с",
                    "%.3g" % (a * ((frame[15] << 16) + frame[16]) *
                              (10**-6) / 40)
                ])
                data.append(["Среднее, В", "%.3g" % (a * frame[17] + b)])
                data.append(["Шум, В", "%.3g" % (a * frame[18])])
                #
                data.append([
                    "Время регистрации, с",
                    "%d" % ((frame[19] << 16) + frame[20])
                ])
                data.append([
                    "Время регистрации, мкс",
                    "%d" % ((frame[21] << 16) + frame[22])
                ])
                data.append([
                    "Длительность, с",
                    "%.3g" % (((frame[23] << 16) + frame[24]) * (10**-6) / 40)
                ])
                data.append(["Переход через 0, шт", "%d" % frame[25]])
                data.append(["Пиковое значение, В", "%.3g" % (a * frame[26])])
                data.append([
                    "Мощность, В*с",
                    "%.3g" % (a * ((frame[27] << 16) + frame[28]) *
                              (10**-6) / 40)
                ])
                data.append(["Среднее, В", "%.3g" % (a * frame[29] + b)])
                data.append(["Шум, В", "%.3g" % (a * frame[30])])
                #
                data.append(["CRC-16", "0x%04X" % crc16.calc(frame, 32)])
                pass
            elif frame[1] == frame_definer(modificator=0, dev_num=0,
                                           type=3):  # Кадры ДИР
                # подготовка
                cal_dir_a = [1, 1, 1, 1]
                cal_dir_b = [0, 0, 0, 0]
                cal_resistor = 52000  # Ом
                cal_temp_a = [1, 1, 1, 1]
                cal_temp_b = [0, 0, 0, 0]
                #
                data.append(["Метка кадра", "0x%04X" % frame[0]])
                data.append(["Определитель", "0x%04X" % frame[1]])
                data.append(["Номер кадра, шт", "%d" % frame[2]])
                data.append(
                    ["Время кадра, с",
                     "%d" % ((frame[3] << 16) + frame[4])])
                #
                for meas in range(2):  # пробегаемся по 2м измерениям
                    for chan in range(4):  # пробегаемся по 4м каналам
                        current = (
                            cal_dir_a[chan] * frame[5 + 3 * chan + 12 * meas] +
                            cal_dir_b[chan]) / cal_resistor
                        data.append([
                            "%d-%d: Ток, мкА" % (meas + 1, chan + 1),
                            "%.1f" % current
                        ])
                        radiation = (
                            cal_dir_a[chan] * frame[6 + 3 * chan + 12 * meas] +
                            cal_dir_b[chan])
                        data.append([
                            "%d-%d: Доза, В" % (meas + 1, chan + 1),
                            "%.3f" % radiation
                        ])
                        temperature = cal_temp_a[chan] * frame[
                            7 + 3 * chan + 12 * meas] + cal_temp_b[chan]
                        data.append([
                            "%d-%d: Темп., °С" % (meas + 1, chan + 1),
                            "%.2f" % temperature
                        ])
                        pass
                    pass
                #
                data.append(["Резерв", "0x%04X" % frame[31]])
                #
                data.append(["CRC-16", "0x%04X" % crc16.calc(frame, 32)])
                pass
            elif frame[1] == frame_definer(modificator=0, dev_num=0,
                                           type=4):  # Кадр ДНТ
                # подготовка
                cal_dnt_a = [1, 1, 1, 1]
                cal_dnt_b = [0, 0, 0, 0]
                #
                data.append(["Метка кадра", "0x%04X" % frame[0]])
                data.append(["Определитель", "0x%04X" % frame[1]])
                data.append(["Номер кадра, шт", "%d" % frame[2]])
                data.append(
                    ["Время кадра, с",
                     "%d" % ((frame[3] << 16) + frame[4])])
                #
                for meas in range(12):  # пробегаемся по 12-ти измерениям
                    ku = (frame[6 + 2 * meas] >> 8) & 0x03
                    current = cal_dnt_a[ku] * frame[5 +
                                                    2 * meas] + cal_dnt_b[ku]
                    temp = c_int8((frame[6 + 2 * meas] >> 8) & 0x03).value
                    data.append(
                        ["%d: Ток, мкА" % (meas + 1),
                         "%.3E" % current])
                    data.append(["%d: КУ, В" % (meas + 1), "%d" % 10**ku])
                    data.append(["%d: Темп., °С" % (meas + 1), "%d" % temp])
                    pass
                data.append(
                    ["Напряжение, В",
                     "%d" % ((frame[29] >> 8) & 0xFF)])
                data.append(["№ смены, шт.", "%d" % (frame[29] & 0xFF)])
                data.append(["Изм. интервал, с", "%.3g" % frame[30]])
                #
                data.append(["CRC-16", "0x%04X" % crc16.calc(frame, 32)])
                pass
            elif frame[1] == frame_definer(modificator=0, dev_num=0,
                                           type=5):  # Кадр АДИИ
                # подготовка
                cal_dnt_a = [1, 1, 1, 1]
                cal_dnt_b = [0, 0, 0, 0]
                #
                data.append(["Метка кадра", "0x%04X" % frame[0]])
                data.append(["Определитель", "0x%04X" % frame[1]])
                data.append(["Номер кадра, шт", "%d" % frame[2]])
                data.append(
                    ["Время кадра, с",
                     "%d" % ((frame[3] << 16) + frame[4])])
                #
                data.append([
                    "Счетчик 1",
                    "%d" % ((frame[5] << 16) + ((frame[6] & 0xFF) >> 8))
                ])
                data.append([
                    "Счетчик 2",
                    "%d" % (((frame[6] & 0xFF) << 16) + frame[7])
                ])
                data.append([
                    "Счетчик 3",
                    "%d" % ((frame[8] << 16) + ((frame[9] & 0xFF) >> 8))
                ])
                data.append([
                    "Счетчик 4",
                    "%d" % (((frame[9] & 0xFF) << 16) + frame[10])
                ])
                data.append([
                    "Счетчик 5",
                    "%d" % ((frame[11] << 16) + ((frame[12] & 0xFF) >> 8))
                ])
                data.append([
                    "Счетчик 6",
                    "%d" % (((frame[12] & 0xFF) << 16) + frame[13])
                ])
                data.append([
                    "Счетчик 7",
                    "%d" % ((frame[14] << 16) + ((frame[15] & 0xFF) >> 8))
                ])
                data.append([
                    "Счетчик 8",
                    "%d" % (((frame[15] & 0xFF) << 16) + frame[16])
                ])
                data.append([
                    "Счетчик 9",
                    "%d" % ((frame[17] << 16) + ((frame[18] & 0xFF) >> 8))
                ])
                data.append([
                    "Счетчик 10",
                    "%d" % (((frame[18] & 0xFF) << 16) + frame[19])
                ])
                data.append([
                    "Счетчик 11",
                    "%d" % ((frame[20] << 16) + ((frame[21] & 0xFF) >> 8))
                ])
                data.append([
                    "Счетчик 12",
                    "%d" % (((frame[21] & 0xFF) << 16) + frame[22])
                ])
                data.append([
                    "Счетчик 13",
                    "%d" % ((frame[23] << 16) + ((frame[24] & 0xFF) >> 8))
                ])
                data.append([
                    "Счетчик 14",
                    "%d" % (((frame[24] & 0xFF) << 16) + frame[25])
                ])
                data.append(["Счетчик 15", "%d" % frame[26]])
                data.append(["Счетчик 16", "%d" % frame[27]])
                data.append(["Счетчик 17", "%d" % frame[28]])
                data.append(["Счетчик 18", "%d" % frame[29]])
                data.append(["Счетчик 19", "%d" % frame[30]])
                #
                data.append(["CRC-16", "0x%04X" % crc16.calc(frame, 32)])
                pass
            else:
                data.append(["Неизвестный определитель", "0"])
        else:
            data.append(["Данные не распознаны", "0"])
        return data