Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

CANbus <-> ModBUS (TCP) - Gateway

Andy83
2019-01-15
2019-05-06
  • Andy83 - 2019-01-15

    Hi, ich habe paar Schwierigkeiten auf meinen Raspberry Pi 3 (Model B+) die CANbus Werte auszulesen bzw. zu senden. Unten eine kurze Übersicht meine Konfiguration, ich hoffe ihr könnt mir helfen:

    KONFIGURATION:
    - Raspberry Pi 3 (Mod.B+) + Waveshare RS485+CAN Hat -> CANbus funktioniert im LXTerminal, bin mir aber nicht sicher ob der CANbus in Codesys tatsächlich läuft (siehe unten)

    • ROTEX Wärmepumpe HPSU über CAN-L + CAN-H an o.g. CAN Hat angeschlossen – Die WP kommuniziert über den CAN-Bus in der 11-Bit-Variante (Basisformat), siehe unteren Link
      Google Translate

    • Siemens Logo SPS -> mittels ModBUS TCP an Codesys = Ich kann Werte auslesen (siehe unten)

    SITUATION / PROBLEM:

    Im LXTerminal sende ich folgendes (Wasserdruck):
    can0 10A [7] 31 00 1C 00 00 00 00

    Und bekomme folgendes zurück:
    can0 180 [7] 22 0A 1C 05 14 00 00

    Hier ist das 4. Und 5. Byte für mich interessant (05 14), bedeutet 0514 hex -> dez = 1300 / 10 => 1,30 bar

    Das Problem bei mir ist, dass ich es im Codesys nicht schaffe die o.g. Befehle zu senden und empfangen!
    Ich habe bis dato nur mit ModBUS gearbeitet und komme nicht drauf wo ich den Identifier + DLC + Datenfelder (7 Byte) einstellen bzw. übermitteln und auslesen kann!

    ZIEL:
    Möchte nur paar Werte (Temperaturen, Wärmemenge, Modus, etc.) aus der Wärmepumpe an die Logo SPS über den PI übertragen.

    Also wie kann ich im Codesys am einfachsten so eine Art Gateway CANbus <-> ModBUS herstellen?

    Habe mir das so vorgestellt, 1x in der Minute den Befehl z.B. für Wasserdruck (siehe oben) in CANbus senden. Auf Antwort warten und dann die Werte über Codesys an ModBUS senden, so dass die LogoSPS die auslesen kann.

    Ich bin es gewohnt in FBS (Funktionsbausteinsprache) zu arbeiten, gibt es hier eine Möglichkeit?

    IMG: Bild

    IMG: Bild

     

    Related

    Talk.ru: 7

  • eschwellinger

    eschwellinger - 2019-01-16

    Hi,
    denke du musst mit diesem Beispiel loslegen:

    https://store.codesys.com/can-bus-example.html

    CANbusAPIExample.project
    Damit kann man CANlayer 2 Kommunikation machen, denke das ist was du dafür brauchst... also CAN Telegramme empfangen und verwenden.

    Grüße
    Edwin

     
  • Andy83 - 2019-02-03

    Hallo Edwin,

    besten Dank für den Tipp. Habe es aus beruflichen Gründen erst dieses Wochenende geschafft meinem Projekt wider zu widmen.
    Hab das Paket bzw. Beispiel eingespielt, nur leider bringe ich es nicht zum Laufen. Der CANBus selber scheint zu laufen, nur finde ich nirgends die Blöcke z.B. „CANDriver_11bit (FB) / CANSender / CANSingleIdReceiver …“ aus der „CANBus Example“ PDF-Anleitung.

    Ich wäre euch sehr dankbar wenn mir jemand helfen könnte, gibt es evtl. eine Schritt für Schritt Anleitung hierfür? DANKE!

     
  • Andy83 - 2019-02-10

    Hi, habe nach langen hin und her festgestellt, dass ich einen blöden Fehler gemacht habe. Ich habe anstelle „CANBus Example“ das „CANopen Example“ Package installiert.

    Habe nun das „CANbusAPIExample“ geladen uns so wie es ausschaut ist die CANbus Verbindung zu der Wärmepumpe hergestellt. Zumindest wird unter „g_countMsg_ST“ die Anzahl der Nachrichten mitgezählt, die mit der Anzahl unter LxTerminal mit „candump can0“ übereinstimmt.

    Leider schaffe ich es nicht bestimmte Werte unter z.B. ID/Identifier „can0 180 [7]“ auszulesen (siehe meinen ersten Post), was mache ich hier falsch (HEX / DEZ / DWORD???)?
    - Habe im „CAN.RECEIVER_SINGLE_ID“ unter „dwCanId“ folgendes eingestellt „16#180“ (HEX?)-> bekomme bzw. finde nirgends die Werte!?
    - Habe im „CAN.RECEIVER_SINGLE_ID“ unter „dwCanId“ folgendes eingestellt „16#384“ (DEZ?) -> bekomme bzw. finde nirgends die Werte!?

    Wo werden die Werte dann ausgegeben, bzw. wo kann ich die auslesen?

     

    Related

    Talk.ru: 7

  • Andy83 - 2019-05-05

    Hi, ich bin langsam am Verzweifeln, ich schaffe es nicht bestimmte Werte bzw. Nachrichten aus dem CANbus auszulesen (siehe CANbus Transfer im rechten Fenster), wie bereits beschrieben scheint die Kommunikation mit dem Raspberry zu funktionieren, da die Nachrichten brav mitgezählt werden (siehe g_countMsg_ST im linken Fenster).

    Ich habe schon das „ganze“ Forum durchsucht, die Dokumentation (CANBus_Example_de.pdf _.pdf durchgelesen, bin aber leider nicht weitergekommen!
    Im Anhang findet Ihr auch mein derzeitiges Projekt, wenn euch das was hilft.

    **Ich brauche eure Unterstützung, hoffentlich kann mir einer von euch helfen bzw. erklären wie ich die o.g. IDENTIFIER einstelle und Werte auslese, DANKE! **

    IMG: Bild

    2019 02 10 CANbusAPIExample API_2 0x180.project [208.14 KiB]

     
  • dkugler - 2019-05-06

    Originally created by: D. Kugler

    ich würde an deiner Stelle als erstes mal die Einträge Can-Bus, CanOpen-Manager und CanOpen_Device aus dem Projektbaum entfernen.
    Aktuell wird ansonsten ein CanOpen Bus gestartet und gleichzeitig in Diener ST_PRG nochmal ein CanDriver für Kommunikation auf Layer2!
    Entweder CanOpen oder Layer2 aber nicht beides gleichzeitig, soweit ich das beurteilen kann, beißt sich das.

     

Log in to post a comment.