Test 4 - Druhý pokus s čidlem teploměru (016i)

Co všechno tento test obsahuje?

Formát příkazové pakety z Coache - 8 bajtů

adresa  data v číselné formě
0x00    xx xx 0b 80 0c 32 0b 00

Přílohy

Výpis paměti EEPROM teploměru 016i (93103839)

adresa  data v číselné formě                            v ASCII
0x00    01 3C 01 02 A8 08 29 81 54 65 6D 70 65 72 61 74 .<....).Temperat
0x10    75 72 65 00 00 00 00 00 00 00 00 00 54 65 6D 70 ure.........Temp
0x20    00 00 00 00 00 00 00 00 01 45 0A 01 00 00 80 3F .........E.....?
0x30    00 00 80 3F B4 00 00 00 01 0E 01 00 00 90 C1 00 ...?............
0x40    00 DC 42 0D 03 00 00 00 90 C1 D4 9B 5E 42 00 00 ..B.........^B..
0x50    00 00 28 B0 43 29 00 00 00 00 00 90 C1 D4 9B 5E ..(.C).........^
0x60    42 00 00 00 00 28 B0 43 29 00 00 00 00 00 90 C1 B....(.C).......
0x70    D4 9B 5E 42 00 00 00 00 28 B0 43 29 00 00 00 92 ..^B....(.C)....

Zdá se, že se výpis nijak neliší od prvního pokusu tohoto testu, tudíž jsem tento druhý pokus provedl úplně zbytečně. Myslel jsem si, že jsem ztratil všechna data z toho prvního pokusu, proto jsem ho provedl podruhé, ale mýlil jsem se.

Aby tento dokument nebyl úplně zbytečný, poskytuji zde zdrojový kód programu napsaný v Pythonu, který dokáže z .pcapng souborů extrahovat data paměti EEPROM inteligentního čidla:

import sys, pcapng

f = open(sys.argv[1], "rb")

scanner = pcapng.FileScanner(f)

def printf(fmt, *args):
    print(fmt % (args), end = "")

eeprom_blocks = [None] * 128
scanning = 0

for block in scanner:
    if isinstance(block, pcapng.blocks.EnhancedPacket):
        if block.packet_len == 128:
            if block._raw[0x54 + 2] == 1:
                printf("Nalezen výpis EEPROM:")
                scanning = 1

            eeprom_blocks[scanning] = block

            if scanning > 0:
                scanning += 1

            if scanning == 128:
                scanning = 0

                for y in range(8):
                    printf("\n0x%02X    ", y * 16)

                    for x in range(16):
                        printf("%02X ", eeprom_blocks[x + y * 16]._raw[0x54 + 1])

                    for x in range(16):
                        val = eeprom_blocks[x + y * 16]._raw[0x54 + 1]

                        if val >= 0x20 and val < 0x7F:
                            printf("%c", val)
                        else:
                            printf(".")

                printf("\n\n")

Tento program ke správné funkci potřebuje modul python-pcapng.

Záznamy

4th_test_att_2.pcapng - soubor záznamu z Wiresharku

4th_test_att_2.mkv - videozáznam

Manuály k čidlům

manual_016i.pdf - manuál k teploměru 016i (stažený od CMA)