CODESYS - das IEC 61131-3 Programmiersystem
https://forum-de.codesys.com/

CANbus <-> ModBUS (TCP) - Gateway
https://forum-de.codesys.com/viewtopic.php?f=18&t=5894
Seite 1 von 1

Autor:  Andy83 [ Di Jan 15, 2019 4:54 pm ]
Betreff des Beitrags:  CANbus <-> ModBUS (TCP) - Gateway

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

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

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?

Autor:  Edwin Schwellinger [ Mi Jan 16, 2019 4:12 pm ]
Betreff des Beitrags:  Re: CANbus <-> ModBUS (TCP) - Gateway

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

Autor:  Andy83 [ So Feb 03, 2019 4:19 pm ]
Betreff des Beitrags:  Re: CANbus <-> ModBUS (TCP) - Gateway

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!

Autor:  Andy83 [ So Feb 10, 2019 6:14 pm ]
Betreff des Beitrags:  Re: CANbus <-> ModBUS (TCP) - Gateway

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?

Autor:  Andy83 [ So Mai 05, 2019 5:36 pm ]
Betreff des Beitrags:  Re: CANbus <-> ModBUS (TCP) - Gateway

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

Bild

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!

Dateianhänge:
2019-02-10 - CANbusAPIExample - API_2 - 0x180.project [208.14 KiB]
33-mal heruntergeladen

Autor:  D. Kugler [ Mo Mai 06, 2019 9:50 am ]
Betreff des Beitrags:  Re: CANbus <-> ModBUS (TCP) - Gateway

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.

Seite 1 von 1 Alle Zeiten sind UTC
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/