sx Modbus Projekt

Verzeichnisstruktur

  ls -R cModbus01/
  cModbus01/:
  build  CMakeLists.txt  cModbus01.kdev4  main.cpp  sxlib

  cModbus01/build:
  build.ninja     CMakeFiles           compile_commands.json  sxlib
  CMakeCache.txt  cmake_install.cmake  main

  cModbus01/build/CMakeFiles:
  3.31.6             CMakeConfigureLog.yaml  pkgRedirects  TargetDirectories.txt
  cmake.check_cache  main.dir                rules.ninja

  cModbus01/build/CMakeFiles/3.31.6:
  CMakeCCompiler.cmake               CMakeSystem.cmake
  CMakeCXXCompiler.cmake             CompilerIdC
  CMakeDetermineCompilerABI_C.bin    CompilerIdCXX
  CMakeDetermineCompilerABI_CXX.bin

  cModbus01/build/CMakeFiles/3.31.6/CompilerIdC:
  a.out  CMakeCCompilerId.c  tmp

  cModbus01/build/CMakeFiles/3.31.6/CompilerIdC/tmp:

  cModbus01/build/CMakeFiles/3.31.6/CompilerIdCXX:
  a.out  CMakeCXXCompilerId.cpp  tmp

  cModbus01/build/CMakeFiles/3.31.6/CompilerIdCXX/tmp:

  cModbus01/build/CMakeFiles/main.dir:
  main.cpp.o

  cModbus01/build/CMakeFiles/pkgRedirects:

  cModbus01/build/sxlib:
  CMakeFiles  cmake_install.cmake  libsxmbus.a

  cModbus01/build/sxlib/CMakeFiles:
  sxmbus.dir

  cModbus01/build/sxlib/CMakeFiles/sxmbus.dir:
  sxmbus.cpp.o

  cModbus01/sxlib:
  CMakeLists.txt  sxmbus.cpp  sxmbus.h

CMakelists.txt

cModbus01/CMakeLists.txt

  cmake_minimum_required(VERSION 3.0)
  project(cModbus01)

  find_package(PkgConfig REQUIRED)
  pkg_check_modules(MODBUS REQUIRED libmodbus)

  include_directories(${MODBUS_INCLUDE_DIRS})

  add_executable(main main.cpp)
  target_compile_options(main PRIVATE ${MODBUS_CFLAGS_OTHER})
  target_link_libraries(main PRIVATE ${MODBUS_LIBRARIES})
  add_subdirectory(sxlib)

cModbus01/sxlib/CMakeLists.txt

  # Erstelle eine Bibliothek aus sxmbus
  add_library(sxmbus STATIC
      sxmbus.cpp
      sxmbus.h  # Falls du die Header-Datei direkt bündeln willst, üblicher wäre hier nur cpp; geben wir hier bewusst an
  )

  # Falls die Header-Datei nicht direkt von der Bibliothek aus kompiliert wird,
  # nutze target_sources statt direkt im add_library-Befehl:
  # target_sources(sxmbus PRIVATE sxmbus.cpp)

  # Include-Verzeichnis hinzufügen
  target_include_directories(sxmbus PUBLIC
      ${CMAKE_CURRENT_SOURCE_DIR}
  )

  # Abhängigkeiten/Compiler-Optionen (falls nötig)
  # target_compile_features(sxmbus PUBLIC cxx_std_17)

Programmdateien

cModbus01/main.cpp

#include 
#include  
#include 

int main(void)
{

}

cModbus01/sxlib/sxmbus.cpp

  #include "sxmbus.h"

  #include  // ggf. entfernen
  #include 

  SXMBus::SXMBus()
      : status_(0)
  {
  }

  SXMBus::~SXMBus()
  {
      deinit();
  }

  bool SXMBus::init()
  {
      // TODO: deine Initialisierung hier
      // z.B. Öffnen von Ports, Config laden
      status_ = 1; // Beispielwert
      return true;
  }

  void SXMBus::deinit()
  {
      // TODO: Aufräumen
      status_ = 0;
  }

  bool SXMBus::sendMessage(const std::string& id, const std::string& payload)
  {
      // TODO: Implementierung des Sendens
      // Beispiel-Debug-Ausgabe
      std::cout << "SXMBus::sendMessage - id: " << id << ", payload: " << payload << "\n";
      return true;
  }

  bool SXMBus::receiveMessage(std::string& id, std::string& payload)
  {
      // TODO: Implementierung des Empfangs
      // Beispiel-Daten (nur Platzhalter)
      id = "0x01";
      payload = "example";
      return true;
  }

  int SXMBus::getStatus() const
  {
      return status_;
  }

cModbus01/sxlib/sxmbus.h

  #ifndef SXMBUS_H
  #define SXMBUS_H

  #include 

  class SXMBus {
  public:
      // Konstruktor/Destruktor
      SXMBus();
      ~SXMBus();

      // Init/Setup
      bool init(); // z.B. Initialisierung des Busses
      void deinit();

      // Beispiel-Funktionen (anpassen an dein Vorhaben)
      bool sendMessage(const std::string& id, const std::string& payload);
      bool receiveMessage(std::string& id, std::string& payload);

      // Zugriff auf interne Daten (optional, je nach Bedarf)
      int getStatus() const;

  private:
      // interne Member
      int status_;
      // ggf. Handles/Ruffer/etc.
  };

  #endif // SXMBUS_H