PICan 2 integer über CAN-Bus an Canape

  • Hallo Leute,


    ich möchte eine Zahl zyklisch über den CAN an Canape von Vektor schicken. Die Zahl in data1 hat einen Wert von 0-800.

    Ich hatte es mit http://skpang.co.uk/catalog/im…rrypi/pi_2/PICAN2UG12.pdf eingerichtet und wollte es so verschicken:


    import can
    bus = can.interface.Bus(channel='can0', bustype='socketcan_native')
    msg = can.Message(arbitration_id=0x7de, data=data1, extended_id=False)
    bus.send(msg)

    aber dabei kommt der Fehler, dass data1 keine Liste ist und len() nur listen verarbeiten kann. Wie übergebe ich dem jetzt eine Liste bzw. wie kann ich eine einfache Zahl übermitteln?


    Grüße:/

  • prince_of

    Changed the title of the thread from “PICan 2” to “PICan 2 integer über CAN-Bus an Canape”.
  • Hier der ganze Code und im Bild die Fehlermeldung wenn ich versuche aus data1 eine list zu machen. Der CAN-Bus möchte 8 Zahlen übermitteln und deswegen kann er keine 10 senden. (data1=10). Aber wie kann ich die so darstellen data1=[ 0,0,0,0,0,0,1,0]. oder wird das so überhaupt gemacht? Wie wird eine Zahl bei CAN übermittelt damit der Interpreter es als 10 versteht?

  • sry, war der alte Code, hatte da noch was eingefügt. Danke schonmal für versuchen zu helfen :). Ich hoffe ich hab jetzt alles hochgestellt

  • und wieder passt der Code nicht mit der Fehlermeldung :no_sad::no_sad:


    Jedenfalls...os.system() soll nicht mehr verwendet werden -> besser die Verwendung von subprocess

    Das Skript kannst du auch als root starten, dann musst du kein sudo in den Befehlen verwenden


    Dein Skript musst/solltest du in einzelne Funktionen aufteilen.

  • komisch, bei mir ist die Zeile 76 bus.send(msg) wo die Fehlermeldung auch drauf verweist und wenn ich genau das Skript laufen lasse kommt der Fehler.

  • nicht genau das, aber ein sehr ähnliches:


    Im Anhang sieht du ein Foto, das zeigt, dass es bis 11 geht, dann aber nicht mehr.

    Das zweite Foto, mit python3 test2.py ist das Skript aus deinem Link.

  • Im Anhang sieht du ein Foto, das zeigt, dass es bis 11 geht, dann aber nicht mehr.

    Nö darunter steht eine 12 auch noch ;)

    Die Fehlgeschlagene Übertragung wurde wohl wiederholt. Die Ursache liegt evtl an einer zu Hohen Baudrate. Verringer diese mal.


    Zum 2. Bild, da musst du wohl den passenden Typ des Can Bus auswählen

    Code
    1. # Using specific buses works similar:
    2. # bus = can.interface.Bus(bustype='socketcan', channel='vcan0', bitrate=250000)
    3. # bus = can.interface.Bus(bustype='pcan', channel='PCAN_USBBUS1', bitrate=250000)
    4. # bus = can.interface.Bus(bustype='ixxat', channel=0, bitrate=250000)
    5. # bus = can.interface.Bus(bustype='vector', app_name='CANalyzer', channel=0, bitrate=250000)
    6. # ...
  • Perfekt. Danke es funktioniert :)!! Danke Danke Danke. Habe den Bus ausgewählt und dann musste ich noch Löten auf CAN löten. Das habe ich wohl überlesen als ich das Datasheet gelesen habe. Danke Hofei für die Hilfe.


    Da kommen mir aber noch zwei Fragen auf, ich möchte ein Zeitstempel der in ms läuft übergeben. Wie kann ich diese große Zahl in die 8 Byte zerlegen? Gibts da eine Funktion für?

    Die zweite Frage ist, der überträgt jetzt unsigned int, also keine negativen Zahlen, wie kann ich das ändern? Wenn ich das auf int änder, ändert sich meine Größe von einem Byte auf 128

  • Da kommen mir aber noch zwei Fragen auf, ich möchte ein Zeitstempel der in ms läuft übergeben. Wie kann ich diese große Zahl in die 8 Byte zerlegen? Gibts da eine Funktion für?

    Die zweite Frage ist, der überträgt jetzt unsigned int, also keine negativen Zahlen, wie kann ich das ändern? Wenn ich das auf int änder, ändert sich meine Größe von einem Byte auf 128

    Musst du da überhaupt was beachten? Macht das nicht die Schnittstelle? Schon probiert einfach mal eine negative Zahl zu senden?

    Ebenso einfach mal ein Datetimeobjekt versuchen zu übertragen

  • Nein, leider nicht. Wenn ich -1 habe, dann schmeißt er mir einen Fehler mit "Range o-255". Zudem muss ich die 800 in 2 Bytes aufteilen, so dass im ersten Byte die 255 stehen.

  • Also darin hab ich leider zu wenig Erfahrung, hab dieses CAN Bus Interface auch nicht zu Hause.

    Warte nochmals kurz ob sich ein anderer meldet und dir weiterhelfen kann.


    Ansonsten Eröffne evtl einen neuen Thread wo sich auch die Titelüberschrift genau um das dreht...vll kommt dadurch nochmals Hilfe.


    Deine verlinkte PDF in #1 ist nicht mehr erreichbar. Steht evtl dadrin zu dem Thema etwas?

  • Nein, leider steht da nichts drin. Ich werde es mal mit try and error ausprobieren ;). Aber danke nochmal, dass du mir geholfen hast und geduldig warst :)