Heim > Backend-Entwicklung > Python-Tutorial > CANBUS-Geschwindigkeitskonverter

CANBUS-Geschwindigkeitskonverter

Mary-Kate Olsen
Freigeben: 2024-10-06 06:08:31
Original
388 Leute haben es durchsucht

CANBUS Speed Converter

Dieses Python-Skript verwendet eine Textdatei, die aus exportierten Werten von Tshark besteht. Diese exportierte Spalte besteht ausschließlich aus jeder CANBUS-Nutzlast, bei der es sich um einen 5-Byte-Hex-Wert handelt. (10 Zeichen) Dieses Programm wandelt CANBUS-Hex-Werte in KPH oder MPH um.

Hier ist der Befehl, den ich verwendet habe, um diese Informationen aus CanID589.pcap zu extrahieren, bei dem es sich selbst um eine von Wireshark exportierte Präparation speziell der CANBUS-ID 589 handelte, die sich auf die Geschwindigkeit bezieht. Es gibt 32 weitere unterschiedliche Arten von CANBUS-IDs, aber mit diesen Werten müssen wir uns im Moment nicht befassen.


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



Nach dem Login kopieren

(-r) liest die vorhandene PCAP-Datei, während (-T Felder) Tshark anweist, bestimmte Felder auszugeben (anstelle vollständiger Paketdetails, Zusammenfassungen oder Rohdaten). Es ist eine Möglichkeit, die Ausgabe anzupassen und nur die gewünschten Informationen zu extrahieren, anstatt alle Paketdaten wegzuwerfen. Die Option -e wird verwendet, um anzugeben, welche Felder aus dem Paket extrahiert werden sollen. In diesem Fall repräsentiert data.data die Datenbytes jedes Pakets. „data.data“ bezieht sich auf den tatsächlichen Inhalt (Payload) der CANBUS-Frames in hexadezimaler Form. Ich musste mit verschiedenen Werten experimentieren, bis die richtigen Daten in die Textdatei exportiert wurden.

Hier ist eine Liste der verschiedenen Felder im Zusammenhang mit dem CAN-Protokoll.

  • can.id: Das CAN-Identifier-Feld (CAN-ID)
  • can.dlc: Datenlängencode (wie viele Datenbytes vorhanden sind)
  • can.data: Die Nutzdaten
  • can.errorframe: CAN-Fehlerrahmen
  • data.data: Die rohen Bytedaten (diese werden von diesem Skript verwendet)

Dies kann auch einzeln für jedes Paket durchgeführt werden, aber ich musste 352 verschiedene Can.ID = "589" (Geschwindigkeit) Pakete durchlaufen


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()




Nach dem Login kopieren

Wenn jemand Fragen, Kommentare, Ergänzungen oder konstruktive Kritik hat, kann er sich gerne an mich wenden. Vielen Dank

Das obige ist der detaillierte Inhalt vonCANBUS-Geschwindigkeitskonverter. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage