Verbindung Arduino S7-1200 mit Settimino

Hallo Forum,

ich möchte gerne einen Arduino ( UNO ) mit einer S7-1200 verbinden um Daten auszutauschen.
Ich habe auf Settimino aufgesetzte ( V1.1.0 ) und scheitere daran das die examples nicht kompiliert
werden können.
Ich kann mit dem Fehler leider nichts anfangen - kann mir bitte jemand helfen ?

Vielen Dank
Gruss
olmuk

Error Settimino.pdf (57.8 KB)

Hallo,

es wir eine Lib geben die scheint zu fehlen

#include ....

Das war auch mein erster Gedanke, aber :

#include <SPI.h>
#include <Ethernet.h>
#include "Settimino.h"

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 
  0x90, 0xA2, 0xDA, 0x0F, 0x08, 0xE11 };
  
IPAddress Local(192,168,4,11); // Local Address
IPAddress PLC(192,168,4,50);   // PLC Address

S7Client Client;

//----------------------------------------------------------------------
// Setup : Init Ethernet and Serial port
//----------------------------------------------------------------------
void setup() {
    // Open serial communications and wait for port to open:
    Serial.begin(9600);
     //while (!Serial) {
     // ; // wait for serial port to connect. Needed for Leonardo only
    //}
    // Start the Ethernet Library
    Ethernet.begin(mac, Local);
    // Setup Time, someone said me to leave 2000 because some 
    // rubbish compatible boards are a bit deaf.
    delay(2000); 
    Serial.println(Ethernet.localIP());
}
//----------------------------------------------------------------------
// Connects to the PLC
//----------------------------------------------------------------------
bool Connect()
{
//      Client.ConnectTo(PLC, 0x03, 0x02);
    Client.SetConnectionParams(PLC, 0x03, 0x02);
    int Result=Client.Connect();
    Serial.print("Connecting to ");Serial.println(PLC);  
    if (Result==0) 
    {
      Serial.print("Connected ! PDU Length = ");Serial.println(Client.GetPDULength());
    }
    else
      Serial.println("Connection error");
    return Result==0;
}
//----------------------------------------------------------------------
// Prints the Error number
//----------------------------------------------------------------------
void CheckError(int ErrNo)
{
  Serial.print("Error No. 0x");
  Serial.println(ErrNo, HEX);
  
  // Checks if it's a Severe Error => we need to disconnect
  if (ErrNo & 0x00FF)
  {
    Serial.println("SEVERE ERROR, disconnecting.");
    Client.Disconnect(); 
  }
}
//----------------------------------------------------------------------
// Main Loop
//----------------------------------------------------------------------
void loop() 
{
  int Result, Status;
  
  // Connection
  while (!Client.Connected)
  {
    if (!Connect())
      delay(500);
  }
  
  Result = Client.GetPlcStatus(&Status);
  if (Result==0)
  {
    if (Status==S7CpuStatusRun)
    {
      Serial.println("STOPPING THE CPU");
      Client.PlcStop();
    }
    else
    {
      Serial.println("STARTING THE CPU");
      Client.PlcStart();  
    }
  }
  else
    CheckError(Result);
    
  delay(3000);  
}

Sobald ich ändere von S7Client Client auf S7Client Client() kommen andere Fehler.
Ich bin leider nicht so firm in der IDE / C usw.

Fehlermeldungen sind doch auch Text. Wieso muss man die in Bilder/PDF verpacken? Damit so wenig Leute wie möglich sie lesen können?
Setze sie in Codetags als Text hier rein.

Deine S7Client-Lib wird wohl nicht includiert.

Gruß Tommy

Schon mal S7Client Client(0); oder S7Client Client(_S7WIRED); probiert?

0xE11 ist kein Byte.

Hallo Thommy,
ich dachte das mit dem Bild ich alles relevante einfange.
Und die meisten können mit pdf nix anfangen

Nochmal an Thommy, da wurde etwas von meiner Nachricht abgeschnitten - sorry.

Das pdf sollte doch allen geläufig sein, oder ?

Das ist aber nicht das Thema, ich werde es ändern.

Warum kann das includieren fehlschlagen und würde das nicht gemeldet ?

Gruss
olmuk

@agmue :
Das ist aus der Vorlage, mhhhh.
Kannst Du mir bitte den Zusammenhang der blauen Anmerkungen erläutern?

Es macht immer Sinn, in die Beispiele zu schauen. Da finde ich dann:

// S7Client will create a WiFiClient as TCP Client
S7Client Client(_S7WIFI);

// S7Client will create an EthernetClient as TCP Client
S7Client Client(_S7WIRED);

Ein Client() ohne Parameter kommt nicht vor.

In Settimino.h finde ich noch die zugehörigen Werte und den Constructor:

#define _S7WIRED 0
#define _S7WIFI  1
...
 //S7Client();
 S7Client(int Media);

Das könnte darauf hindeuten, daß früher kein Parameter verwendet wurde, was in alten Beispielen noch vorkommen könnte.

Tja das geht mir leider ab und ich muss mir das mühsam reinziehen.
Werde es morgen probieren - vielen Dank.

Moin,
ja das war es definitiv, zumindest der WIRED Weg funktioniert (erst PC ) - vielen Dank.

Ich werde das weiterverfolgen da ich auf der SPS-Seite das abbilden kann
und dann eine entprechende Vorlage erzeugen kann.s

Die Kombination SPS und AVR ist absolut reizvoll, spätestens mit Expressif um
z.B. Sensordaten und den I2C zu nutzen.

Jetzt werden wohl wieder welche schimpfen das das Geklicke bei der SPS
unter Ihrem Niveau ist. Als Beispiel habe ich mir mit diversen Verzögerungen
im Arduino einen abgebrochen - SPS fuppt das sofort.

Es geht weiter .....

olmuk:
Jetzt werden wohl wieder welche schimpfen das das Geklicke bei der SPS
unter Ihrem Niveau ist. Als Beispiel habe ich mir mit diversen Verzögerungen
im Arduino einen abgebrochen - SPS fuppt das sofort.

naja, das hat nichts mit Niveau oder schimpfen zu tun.

Es ist halt die Frage, was man alles mit dem Produkt mitkauft. Die erste SPS (S7, Logo, was auch immer) + Programmierkabel + Software die du mir für 5USD beschaffen kannst, nehme ich sofort wenn's zumindest ein englisches Manual und eine Community dahinter gibt und lege das Arduino Gedöns zur Seite. You get what you pay for. Bei 5USD ist das halt nicht viel.

Irgendwo in den weiten des Internets wird es wohl auch ein Clicki-Bunt IDE für AVR's geben, vieleicht sogar für den Arduino Bootloader.

Klar der Preis für den Einstieg ist absolut ein Thema - ich kann durch meine berufliche Umgebung
da anders drauf zugreifen.

Ich hatte nur noch im Ohr das ich woanders mal abgekänzelt wurde da ( aus Ihrer Meinung
heraus ) die SPS-Programmierung ja nichts mit Programmierung zu tun hat und nur Logik-Bausteine
zusammen klickt.

Hat alles seine Berechtigung und die Industrie braucht Lieferfähigkeit und aftersale service

Ich kann die soweit sagen das es auch einwandfrei mit den ESP8266 und mit ESP32 läuft.
Ich bin dabei mit eine Haus/Heizungsteuerung damit bauen. Als CPU habe ich eine 1211C mit mit RS485 CP und die ESP als Remote IO´s laufen. Ich bin auf der SPS bei Siemens weil es beruflich halt passt und zusammen mit einer KINCO HMI läuft alles perfekt ohne große Klimmzüge.
Es läuft alles soweit. Ich habe schreib und Lesezugriffe auf die SPS probiert und es passt.
Gruß
DerDani

olmuk:

  • vielen Dank.

Bitte gerne.

Hurra noch einer !

Ich hatte heute nur den PC angepingt und es kam etwas durch.
Brauchst Du für die 1211C einen CB1241 RS485 oder willst Du nur die PN frei haben ?

Gruss
olmuk

Ich nutze Modbus RTU via CP um mich mit erinnern Mega2560 zu unterhalten. Der PN hängt am RouterRouter (7490 Fritze)
Ein Kinco MT4434TE 7" touch via Wlan / PN an der CPU und zwei 8266 via Wlan und settmino. Die ESP sollen mmeine Remote IOs werden mit ein bisschen Intelligenz.
Gruß
DerDani

Hallo Dani,

danke für die Info - mit PN direkt bekomme ich Daten die ich allerdings
noch nicht zuordnen kann ( LSB und MSB ist klar ).
Liest Du E/A direkt ein oder wird alles in ein DB rangiert zur Übergabe?
Ich finde die Beschreibung nicht so pralle.

Kannst Du mir mit einem code weiterhelfen ?

Gruss
olmuk

Welches TIA nutzt du? Ich nutze V14 SP1
Ich greife nicht auf die E/As direkt zu. Ich habe mit einen DB für jede "Remote" Station gemacht. Die Daten schreibe ich in die DBs (meistens Int).
Ich habe leider nur ein V3.x CPU dadurch sind einige Befehle nicht vorhanden aber mit Move_blk kann man gut arbeiten.
Bei mir bleibt die SPS-Chef und die anderen schreiben/lesen selbständig. Die Verbindung läuft ja über die "HMI-Port" TSAP 00.20.
Ich kann nicht von der SPS auf die E/As der ESPs zugreifen sondern das muss man in den "Arduinos" machen.
Ich kann mal mit dem Code schauen. Bisher habe ich noch keine großen Details gemacht aber das Grundprinzip arbeitet. Wie gesagt einen Arduino mit Netzwerk Karte habe ich nicht drauf sondern nur die ESPs mit WLAN.

Ein bisschen Input:
Link

Gruß
DerDani

Ich nutze auch 14 Sp1 und spiele schon mit V15. Letztendlich ist mein Ziel die ESP´s einzubinden in eine 1200 oder 1500.
Was wäre denn mit Get und Put zu arbeiten von Seiten der SPS ?

Ich glaube das settimino ab 2016 nicht mehr angefasst wurde da die examples so nicht rund sind,
aber das kann ja auch an mir liegen.
Ich lebe halt in der SPS-Welt und habe so meine Problemchen mit C ( zumindest springt mir das nicht ins Auge und ist daher mühsam ).

Weiterhin möchte ich nichts einfach übernehmen, sonder es verstehen.

Und zum Schluss : Was hälst Dunvon IOT 2020/2040?