Ankündigung

Einklappen
Keine Ankündigung bisher.

Modbus-Anbindung per libmodbus

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [wiregate] Modbus-Anbindung per libmodbus

    Hi,

    ich versuche gerade vom Wiregate aus per Modbus auf meine KWL zu kommen.

    Dafür hab ich mir folgende Dinge aus dem Repository geladen:
    - libmodbus5
    - libmodbus-dev
    - gcc

    Jetzt steh ich vor der Aufgabe meine "leicht eingerosteten" C-Kenntnisse wieder zu aktivieren.

    Für den Anfang würd ichs einfach gern mal schaffen, dass ich ein fix codiertes Register meiner KWL auslese und das Ergebnis am Bildschirm ausgeb.

    Nun findet aber offenbar der gcc die Funktion zum Initialisieren der Modbus-Struktur nicht. Evtl. hat da ja jemand Rat für mich?

    Mein Code sieht dzt. folgendermaßen aus:
    Code:
    #include <stdio.h>
    #include <modbus/modbus-rtu.h>
    
    #define co_device "/dev/usbserial";
    
    int main()
    {
      modbus_t *ctx;
      char *device;
    
      device = co_device;
    
      ctx = modbus_new_rtu(device, 19200, 'N', 8, 1);
    /*  if (ctx == NULL)
      {
        fprintf(stderr, "Unable to create the libmodbus context\n");
        return -1;
      }
      modbux_close(ctx);
      modbus_free(ctx);
    */
    }
    Wenn ich unter /usr/include/modbus nachsehe, gibts dort die Includes:
    - modbus.h
    - modbus-rtu.h
    - modbus-tcp.h
    - modbus-version.h

    Wobei modbus-rtu.h und modbus-tcp.h die modbus.h includen und modbus.h die modbus-version.h
    Ein #include <modbus/modbus-rtu.h> sollte also eigentlich reichen, um die Initialisierung aufzurufen, oder?

    Dann hier noch die Fehlermeldung:
    Code:
    user@wiregate496:~$ gcc test_modbus.c -o test_modbus
    /tmp/ccw1JdAU.o: In function `main':
    test_modbus.c:(.text+0x3f): undefined reference to `modbus_new_rtu'
    collect2: ld returned 1 exit status
    Evtl. hat ja jemand mit mehr C-Erfahrung ne Idee was ich da falsch mach. Google, Hilfe & Co bringen mich da im Moment nicht weiter.

    #2
    Also erstens: nominell hab ich von C keine Ahnung, ich machs nur trotzdem

    Bewährt hat sich folgendes: immer erst das "drumherum" machen, in dem Fall Step 1: Makefile
    Schlimmer noch, es hat sich bewährt es gleich von Anfang an "richtig" zu machen, automake & Co, aber das ist ein Kapitel für sich
    Tipp, falls verfügbar: z.B. Anjuta oder Kdevelop machen dir das ganz schmerzfrei ohne das man die Freakshow erstmal vollständig verstehen muss, Beispiele (die ich auch noch erklären kann): SourceForge.net Repository - [openautomation] Index of /tools/russconnectd/trunk
    Oder noch etwas übersichtlicher: SourceForge.net Repository - [openautomation] Index of /tools/knxdmxd

    -> Es geht nur um Makefile.am und configure.ac, das erleichtert das spätere Handling (Packaging, unterschiedliche Plattformen) etc.pp. jedoch enorm.
    Das eigentliche Zeug (configure, Makefile) wird dann daraus erstellt:
    Code:
    #aclocal
    automake --add-missing
    autoreconf 
    ./configure
    make
    (so oder so ähnlich, meine Kernkopetenz ists auch ned grad..)

    Aber nun, was dir fehlt ist nur
    Code:
    gcc test_modbus.c [B]-lmodbus[/B] -o test_modbus
    um dem linker zu sagen das er die libmodus reinwuschteln muss..

    Makki
    EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
    -> Bitte KEINE PNs!

    Kommentar


      #3
      So einfach und so effektiv. ;-)
      Das -lmodbus hat gefehlt, ja.

      Nun funktioniert zumindest mal das Verbinden und wieder freigeben, nur mit dem Auslesen der Register passt noch was nicht, muss ich mich nächstes Wochenende nochmal dazusetzen.

      @makki: Wieviel Action wärs für dich die neueste Version der libmodbus ins Repository aufzunehmen? Was ich so gelesen hab gibts da die ein bisschen detailiertere Fehlermeldungen.

      Übrigens, im Moment schreib ich mal an einem Testprogrammchen, mit dem ich einfach mal das lesen und schreiben am Modbus ausprobieren will. Sobald ich dann ans "echte" Programm geh, werd ich deine Anregungen gern aufgreifen.

      LG
      Marcus

      Kommentar


        #4
        Das ist kein Akt aber die libmodbus ist mit 3.0.2 Jahre aktueller als in jeglicher Distro

        Also da brauchts schon nen belastbaren Grund, warum man die 3.0.3 (enthält nur fixes für Windoze) nun aufm WG braucht

        Makki
        EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
        -> Bitte KEINE PNs!

        Kommentar


          #5
          OK, ist ein Argument ... muss ich mir dann daheim nochmal ansehen, wieso ich keine ordentlichen Fehlermeldungen bekomm.

          Kommentar


            #6
            Wiegesagt, ich stell sie gerne rein (aber dann muss ichs auch testen) - ich finde in den Release-notes keinen einzigen Grund dafür

            Makki
            EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
            -> Bitte KEINE PNs!

            Kommentar


              #7
              Wie gesagt, ich sehs mir am Wochenende an, wenn ich wieder daheim bin.

              Kommentar


                #8
                Hallo Marcus,

                hast Du Dir mal das https://metacpan.org/source/COSIMO/Protocol-Modbus-0.09 angesehen?

                vG
                Wolfgang

                Kommentar


                  #9
                  Nö, hab ich nicht.

                  Kommentar


                    #10
                    Enervent KWL

                    Morgen !

                    Bin gerade am Auswählen meiner KWL und damit (zwangsweise) mit dem ModBus konfrontiert worden.
                    Enervent gibt zumindest mal Tabellen mir den verfügbaren Datenpunkten raus. (siehe Anhang)
                    Muss man bei Eurem PlugIn (irgendwann, im Endausbau) dann in der Config nur mehr die notwendigen Punkte lt. Tabelle angeben und gut ? Oder stell ich mir die Welt gerade zu einfach vor?

                    Viel beitragen kann ich leider nicht, aber ich komme aus einer ganz brauchbaren Weingegend

                    mfg Nik
                    Angehängte Dateien

                    Kommentar


                      #11
                      Hi,

                      ist ganz witzig, bei mir daheim steht auch eine Enervent, also das Dokument kenn ich. ;-)

                      Plan wäre im Endeffekt, dass man in der Konfiguration die Schnittstellenparameter angibt (Baudrate, Datenbits, Stoppbits, Parity) und welche KNX GA auf welches Modbus Register gemappt wird ... evtl. noch mit Datentypen, aber soweit bin ich leider noch nicht.

                      Soweit der Plan ... ich hoffe mal, dass ich dieses Wochenende ein bisschen zum Arbeiten daran komm ;-)

                      Kommentar


                        #12
                        Ja, so wär der Plan (wobei sich das PDF ja auf eine andere Modbus->KNX bezieht)
                        Aber solange es eine brauchbare Liste der Modbus-Register gibt: ok.

                        Es gibt dafür auch nen Sponsor, ergo, werde da irgendwann aktiv werden - wann ist aber =?
                        (Wenn die Anlage dort läuft..)

                        Makki
                        EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                        -> Bitte KEINE PNs!

                        Kommentar


                          #13
                          Hallo Markus,
                          Wie ist der aktuelle Stand mit der Enervent-Kommunikation?
                          Ich werde die LTR-6 einbauen und wäre bereit mitzuwerkeln...

                          Kommentar


                            #14
                            Hi,

                            um ehrlich zu sein, im Moment liegen die Einzelteile rum und ich komm nicht dazu mir mal ein paar Stunden Zeit zu nehmen und mich da drauf zu stürzen. Da sind im Moment die Prioritäten einfach woanders (z.B.: Kinderzimmer einrichten )

                            Bei meinen ersten Tests zu Beginn dieses Threads hab ichs noch nicht einmal geschafft ein Register auszulesen, ist also noch nicht sonderlich weit fortgeschritten, sofern sich niemand anders das Thema unter den Nagel gerissen hat.

                            Sorry, dass ich keine besseren Nachrichten hab.

                            Kommentar


                              #15
                              Hallo,

                              hat sich an dem Thema in der Zwischenzeit etwas getan?

                              Aktuell kann ich meine Lüftungsanlage per Modbus steuern, allerdings nur per Kommandozeile. Für das Mapping auf KNX Adressen soll nun ein Plugin auf dem vorhandenen WireGate sorgen.

                              Mangels Erfahrung im Erstellen von Plugins / Perl: Gibt es irgendetwas worauf sich aufbauen ließe? Oder zumindest eine Empfehlung für eine Perl-Modul?

                              Und wie bekomme ich z.B. Modbus::Client "richtig" auf das Wiregate? Einfach per CPAN installieren?

                              Christian

                              Kommentar

                              Lädt...
                              X