Skocz do zawartości

Problem z komunikacją Siemens LOGO!-ESP8266 przez ModBus


Pomocna odpowiedź

Napisano

Witam wszystkich. Jak w tytule mam problem z nawiązaniem komunikacji pomiędzy tymi dwoma urządzeniami.

Chcę przesłać sobie wartość analogową z A0 z ESP8266 do sterownika LOGO!

Znalazłem na GitHub gotowca który przesyła zmienne Coil Status i Input Status (w dwie strony) i on jak najbardziej działa.

Kod gotowca z ESP I LOGO:

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

//Modbus Registers Offsets
const int LED_COIL = 9; // in LOGO is nr 10
const int LED_COIL2 = 10;// in LOGO is nr 11

//ModbusIP object
ModbusIP mb;

// Callback function for write (set) Coil. Returns value to store.
uint16_t cbLed(TRegister* reg, uint16_t val) {
  //get value from LOGO input 1
  
    //Serial.println(val);

  // send back to relay in LOGO module
  mb.Coil(LED_COIL2, val);

  return val;
}

// Callback function for client connect. Returns true to allow connection.
bool cbConn(IPAddress ip) {
  Serial.println(ip);
  return true;
}

void setup() {
  Serial.begin(115200);
// Set your Static IP address
IPAddress ip(192, 168, 0, 200);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress dns(8, 8, 8, 8);   //optional
IPAddress secondaryDNS(8, 8, 4, 4); //

WiFi.config(ip, dns, gateway, subnet);

  WiFi.begin("XXX", "XXX");

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

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

  mb.onConnect(cbConn);   // Add callback on connection event
  mb.server();

  
  mb.addCoil(LED_COIL);  // Add Coil. input 1 in LOGO
  mb.addCoil(LED_COIL2);// Add Coil. relay 1 in LOGO
  mb.onSetCoil(LED_COIL, cbLed); // Add callback on Coil LED_COIL value set
}

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

 

1448513943_2022-11-0713_41_35-LOGO!SoftComfort1.thumb.jpg.82f0da98cf328025478fd34e7d71bed4.jpg

Na tej samej bibliotece jest szkic IP-server-AnalogInput z którego chciałbym skorzystać:

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

//Modbus Registers Offsets
const int SENSOR_IREG = 100;

//ModbusIP object
ModbusIP mb;

long ts;

void setup() {
    Serial.begin(115200);
 
    WiFi.begin("pp26a", "izj.1109");
    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.addIreg(SENSOR_IREG);

    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.Ireg(SENSOR_IREG, analogRead(A0));
   }
    Serial.println(analogRead(A0));
   delay(10);
}

i wydawało mi się, że jak zmienię w LogoSoftComfort:  IP (bo tutaj po wgraniu jest inne), ModBus type na IR i ModBus adress to wszystko powinno zacząć działać.

(Port chyba zostaje tam sam, domyślny 502, a w unit ID nie wiem co wpisać).

Niestety to nie działa, 2 dzień szukam rozwiązania. Próbowałem podejrzeć rejestry ModBusa w ModScan32 ale wyświetla następujący błąd:

1213563838_2022-11-0714_02_57-ModScan32-ModSca1.thumb.png.aeb17cff726fc4fe9edf27d374fed253.png

Próbowałem też w MTesterze ale to samo.

Co ciekawe zmiana IP po obu stronach na działającym programie też psuje komunikacje,  co jest dla mnie czymś zupełnie niezrozumiałym.

Tak samo to, że mogę pingować obydwa urządzenia w CMD ale nie widzę ich już w liście podłączonych urządzeń w ustawieniach routera.

Czy mógłby mnie ktoś nakierować na rozwiązanie problemu? Proszę o wyrozumiałość pierwszy raz pracuję z ModBusem.

Link do używanej biblioteki: https://github.com/emelianov/modbus-esp8266

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...