Komunikation ESP32 via Modbus TCP mit Siemens LOGO

Hallo
Ich habe mir hier aus dem Forum schon etwas kopiert.
Hier das LOGO Prog

Im Anhang der Progcode
Ich habe keine Modbusverbindung.
Wo liegt mein Fehler

Gruß
Henrik


#if defined(ESP8266)
 #include <ESP8266WiFi.h>
#elif defined(ESP32)
 #include <WiFi.h>
#else
#error "Unsupported platform"
#endif
#include <ModbusTCP.h>



const int REG = 0;               // Modbus Hreg Offset
IPAddress remote(192, 168, 1, 110);  // Address of Modbus Slave device
ModbusTCP mb;  //ModbusTCP object

void setup() {
  Serial.begin(115200);
  WiFi.begin("SSID", "PW");
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
 
  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  mb.client();
}

void loop() {
  if (mb.isConnected(remote)) {   // Check if connection to Modbus Slave is established
    Serial.println("Modbus_ok");  
    uint16_t trans = mb.writeCoil(remote, REG, true);  // Initiate Read Hreg from Modbus Server
    while(mb.isTransaction(trans)) {  // Check if transaction is active
      mb.task();
      delay(10);
    }
  } else {
    Serial.println("Modbus_nicht_ok"); 
    mb.connect(remote);           // Try to connect if no connection
  }
  delay(100);
}

Ich habe aktuell das lesen hin bekommen.
Jetzt möchte ich zum gleichen Modbus Teilnehmer auch schreiben.
Wer hat dazu eine Lösung


#ifdef ESP8266
 #include <ESP8266WiFi.h>
#else //ESP32
 #include <WiFi.h>
#endif
#include <ModbusIP_ESP8266.h>

//Modbus Registers Offsets
const int SENSOR_HREG = 0;

//ModbusIP object
ModbusIP mb;

long ts;

void setup() {
    Serial.begin(115200);
 
   WiFi.begin("SSID", "PW");
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }

    Serial.println("");
    Serial.println("WiFi connected");  
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());

    mb.server();		//Start Modbus IP
    // Add SENSOR_IREG register - Use addIreg() for analog Inputs
    mb.addHreg(SENSOR_HREG);

    ts = millis();
}

void loop() {
   //Call once inside loop() - all magic here
   mb.task();

   //Read each two seconds
   if (millis() > ts + 2000) {
       ts = millis();
       //Setting raw value (0-1024)
       mb.Hreg(SENSOR_HREG, ts);
   }
   delay(10);
}

Ich kenne die lib nicht , jedoch sieht es für mich so aus als müsstest du nun ein weiteres hreg registrieren, und dieses später einfach via
Myword = mb.Hreg(adressOffsetOnModbus);
Vom Stack holen

Auf der Siemens musst du den Offset halt mit fc6 beschreiben.

Top.
Es funktioniert!!
Dankeschön.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.