Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penukar Kelajuan CANBUS

Penukar Kelajuan CANBUS

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-06 06:08:31258semak imbas

CANBUS Speed Converter

Skrip python ini menggunakan fail teks yang terdiri daripada nilai yang dieksport daripada Tshark. Lajur yang dieksport ini terdiri daripada setiap muatan CANBUS yang merupakan nilai Hex 5 bait. (10 aksara) Program ini menukar nilai heks CANBUS kepada KPH atau MPH.

Berikut ialah arahan yang saya gunakan untuk mengekstrak maklumat ini daripada CanID589.pcap yang sendiri merupakan pembedahan yang dieksport daripada Wireshark khususnya CANBUS ID 589 yang merujuk kepada kelajuan. Terdapat 32 jenis ID CANBUS yang berbeza tetapi kita tidak perlu bimbang dengan nilai tersebut pada masa ini.


┌──(kali㉿Z3r0)-[/media/sf_Shared_Kali/NCL Doc/scanningrecon]
└─$ tshark -r CanID589.pcap -T fields -e data.data > Data_speed.txt



(-r) membaca fail pcap sedia ada manakala (medan-T) mengarahkan Tshark untuk mengeluarkan medan tertentu (bukannya butiran paket penuh, ringkasan atau data mentah). Ini adalah cara untuk menyesuaikan output, mengekstrak maklumat yang dikehendaki sahaja dan bukannya membuang semua data paket. Pilihan -e digunakan untuk menentukan medan mana dari paket untuk diekstrak. Dalam kes ini, data.data mewakili bait data setiap paket. "data.data" merujuk kepada kandungan sebenar (muatan) bingkai CANBUS dalam bentuk perenambelasan. Saya terpaksa bereksperimen dengan nilai yang berbeza sehingga data yang betul dieksport ke fail teks.

Berikut ialah senarai medan berbeza yang berkaitan dengan protokol CAN.

  • can.id: Medan pengecam CAN (CAN ID)
  • can.dlc: Kod Panjang Data (berapa banyak bait data yang ada)
  • can.data: Data muatan
  • can.errorframe: CAN ralat bingkai
  • data.data: Data bait mentah (inilah yang digunakan skrip ini)

Ini juga boleh dilakukan secara individu untuk setiap paket tetapi saya mempunyai 352 paket Can.ID = "589" (kelajuan) yang berbeza untuk diulang melalui


def format_hex_value(hex_value):
    # Tshark exported specific packets to column data.data unformatted.
    return ' '.join(hex_value[i:i+2] for i in range(0, len(hex_value), 2))

def calculate_speed_from_hex_value(hex_value):
    # 5 byte check 
    if len(hex_value) < 10:
        raise ValueError("Hex value must have at least 10 characters for 5 bytes")

    # Extract the relevant bytes from payload (the last two bytes)
    high_byte = int(hex_value[-4:-2], 16)  
    low_byte = int(hex_value[-2:], 16)

    speed = (high_byte << 8) + low_byte  
    # Example: 00 00 00 04 e1 - (04 << 8) + e1 = 1024 + 225 = 1249

    # Convert speed from centi-KPH to KPH then to MPH
    speed_kph = speed / 100.0  # Assuming the value is in centi-KPH
    speed_mph = speed_kph * 0.621371  # Convert KPH to MPH

    return speed_mph

def main():
    speeds = []

    with open('data_speed.txt', 'r') as file:
        for line in file:
            hex_value = line.strip() 

            if hex_value:  

                formatted_hex_value = format_hex_value(hex_value)
                print(f"Formatted Hex Value: {formatted_hex_value}")  

                try:
                    # Calculate speed and store it in the speeds list
                    speed_mph = calculate_speed_from_hex_value(hex_value)
                    speeds.append(speed_mph)
                    print(f"Calculated Speed: {speed_mph:.2f} MPH")
                except ValueError as e:
                    print(f"Error processing value '{hex_value}': {e}")


    speeds.sort() 
    #Sort lowest to highest

    print("\nFinal Sorted Speeds (MPH):")
    for speed in speeds:
        print(f"{speed:.2f} MPH")

if __name__ == "__main__":
    main()




Jika sesiapa mempunyai sebarang pertanyaan, komen, penambahan atau kritikan membina, sila hubungi saya. Terima kasih

Atas ialah kandungan terperinci Penukar Kelajuan CANBUS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn