Partyarti777
Level-1
- Beiträge
- 3
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Hallo Leute,
ein Kollege und ich haben für die Schule ein Projekt am laufen. In diesem Projekt müssen wir eine HMI-Software mit WinCC OA auf dem Raspberry Pi zum laufen bringen, die auf eine S7-1500 per Modbus/TCP zugreift und Daten lesen bzw. schreiben kann (Tanksteuerung mit 2 Tanks, Ventilen, Pumpen und Füllständen).
Die HMI-Software greift auf ein Projekt auf der SPS zu, dass wir selber schreiben müssen. Dazu haben wir erstmal eine Verbindung per Modbus mit den Bausteinen von der Siemens Seite hergestellt, die vorprogrammiert und parametriert sind (der Beitrag heißt: "Wie programmieren und parametrieren Sie die Modbus/TCP-Kommunikation zwischen S7-1500 CPU und S7-1200 CPU?").
Von diesem Bausteinen verwenden wir nur den "MB_SERVER" und die dazugehörigen DB´s. Dieser reicht anscheinend um mit der HMI Daten auszulesen und zu schreiben.
Der MB_SERVER-Baustein verwendet ein Holding Register (Array of ...), dass bei uns z.B als Array of Bool festgelegt ist. Die Verbindung ist da und zwei in WinCC OA erstellte Schalter können einen Ausgang von der SPS lesen und schreiben (0/I) (in WinCC OA: Referenz M.1.3.0, read multiple registers, Eingang, Polling). Der Status im MB-SERVER ist auf 7006 - Data is being received.
Es gibt ja verschiedene Funktionscodes in Modbus und wir denken, dass wir das soweit verstanden haben, allerdings verstehen wir dass mit den Adressbereichen nicht und wo man diese parametrieren kann.
Jetzt hab ich ein paar Fragen:
Wo stellt man die Adressbereiche mit den verschiedenen Datentypen ein?
Oder
Wie kriegen wir ein weiteres "Holding Register", indem wir andere Datentypen (Uint, Real) schreiben können? In der vorgefertigten DB ist ein Register in dem Arrays von 0 bis .... erstellt werden können (holdingRegister[0] ....[1]... usw.) und alle diese Arrays haben dann den gleichen Datentyp wie oben eingestellt (bei uns Bool).
Dann gibt es noch ein Problem mit den Daten in den Arrays. Schalter_1 z.B. wird in das holdingRegister[8] geschrieben und Schalter_2 in das holdingRegister[9]. Ist Schalter_1 auf "1", steht eine "1" im Register. Schaltet man Schalter_2 noch dazu auf "1", wird das Array [8] wieder auf 0 gesetzt und das Array [9] geht auf 1. Genauso ist es andersrum - es können also nicht 2 Arrays gleichzeitig auf "1" sein. Gibt es da eine Möglichkeit das mehrere Arrays auf "high" geschrieben werden können?
Ahnung von dem Ganzem haben wir so gut wie gar nicht und bis Mitte Januar müssten wir von der Schule aus zumindest mehrere Datentypen schreiben bzw. lesen können.
Nach schon etlichen unnötigen Stunden die wir für das Projekt investiert haben, hoffen wir dass uns hier jemand zur Seite stehen kann der sowas in der Art schon einmal gemacht hat.
Jede Hilfe und Verweise auf hilfreiche Seiten nehmen wir gerne an - Gruß
ein Kollege und ich haben für die Schule ein Projekt am laufen. In diesem Projekt müssen wir eine HMI-Software mit WinCC OA auf dem Raspberry Pi zum laufen bringen, die auf eine S7-1500 per Modbus/TCP zugreift und Daten lesen bzw. schreiben kann (Tanksteuerung mit 2 Tanks, Ventilen, Pumpen und Füllständen).
Die HMI-Software greift auf ein Projekt auf der SPS zu, dass wir selber schreiben müssen. Dazu haben wir erstmal eine Verbindung per Modbus mit den Bausteinen von der Siemens Seite hergestellt, die vorprogrammiert und parametriert sind (der Beitrag heißt: "Wie programmieren und parametrieren Sie die Modbus/TCP-Kommunikation zwischen S7-1500 CPU und S7-1200 CPU?").
Von diesem Bausteinen verwenden wir nur den "MB_SERVER" und die dazugehörigen DB´s. Dieser reicht anscheinend um mit der HMI Daten auszulesen und zu schreiben.
Der MB_SERVER-Baustein verwendet ein Holding Register (Array of ...), dass bei uns z.B als Array of Bool festgelegt ist. Die Verbindung ist da und zwei in WinCC OA erstellte Schalter können einen Ausgang von der SPS lesen und schreiben (0/I) (in WinCC OA: Referenz M.1.3.0, read multiple registers, Eingang, Polling). Der Status im MB-SERVER ist auf 7006 - Data is being received.
Es gibt ja verschiedene Funktionscodes in Modbus und wir denken, dass wir das soweit verstanden haben, allerdings verstehen wir dass mit den Adressbereichen nicht und wo man diese parametrieren kann.
Jetzt hab ich ein paar Fragen:
Wo stellt man die Adressbereiche mit den verschiedenen Datentypen ein?
Oder
Wie kriegen wir ein weiteres "Holding Register", indem wir andere Datentypen (Uint, Real) schreiben können? In der vorgefertigten DB ist ein Register in dem Arrays von 0 bis .... erstellt werden können (holdingRegister[0] ....[1]... usw.) und alle diese Arrays haben dann den gleichen Datentyp wie oben eingestellt (bei uns Bool).
Dann gibt es noch ein Problem mit den Daten in den Arrays. Schalter_1 z.B. wird in das holdingRegister[8] geschrieben und Schalter_2 in das holdingRegister[9]. Ist Schalter_1 auf "1", steht eine "1" im Register. Schaltet man Schalter_2 noch dazu auf "1", wird das Array [8] wieder auf 0 gesetzt und das Array [9] geht auf 1. Genauso ist es andersrum - es können also nicht 2 Arrays gleichzeitig auf "1" sein. Gibt es da eine Möglichkeit das mehrere Arrays auf "high" geschrieben werden können?
Ahnung von dem Ganzem haben wir so gut wie gar nicht und bis Mitte Januar müssten wir von der Schule aus zumindest mehrere Datentypen schreiben bzw. lesen können.
Nach schon etlichen unnötigen Stunden die wir für das Projekt investiert haben, hoffen wir dass uns hier jemand zur Seite stehen kann der sowas in der Art schon einmal gemacht hat.
Jede Hilfe und Verweise auf hilfreiche Seiten nehmen wir gerne an - Gruß
Zuletzt bearbeitet: