S7 300 Steuerung per IPS

Hallo,

kann einer von euch einem Newbie wie mir vielleicht erklären wie ich meine Programmierung der S7 in IPS „übertragen“ kann?
In der S7 habe ich die komplette Steuerung meiner Rollläden integriert, diese würde ich jetzt gerne in IPS auslesen und auch steuern können. Was muss ich tun um die einzelnen Variablen der S7 über IPS ansprechen zu können?
Die Verbindung zur S7 habe ich bereits angelegt.

z.B. ist bei mir in der S7 „DB101.dbx0.0“ Rollladen Fenster 1 hoch und „DB101.dbx0.1“ Rollladen Fenster 1 runter

Wie kann ich an diesem Beispiel dies jetzt abbilden das ich diesen Rollladen auch über das Webfront steuern kann?:confused:

Kann mir hier bitte jemand helfen?

Hallo MaBu,

du legst zuerst eine S7-Instanz an.

Danach kannst du im Skript so auf diese Instanz zugreifen:

<?
$S7_Instanz_ID   = 28444 /*[SPS\SPS 315DB_schreiben]*/  ;

//index0   = VARIABLENBEZEICHNUNG in IPS
//index1.0 = TYP          (0=bit, 1=byte, 2=word, 3=dword,
//                         4=ShortInt, 5=SmallInt, 6=Integer, 7=Real)
//index1.1 = AREA         (0=SystemInfo, 1=SystemFlags,
//                         2=AnalogInput CPU200, 3=AnalogOutput CPU200,
//                         4=Input, 5=Output, 6=Flags, 7=Datablock,
//                         8=InstanzDaten, 9=LokaleDaten, 10=UnknownedArea
//                         11=Zaehler, 12=Timer, 13=PEW/PAW)
//index1.2 = AREAADDRESS  (Baustein)
//index1.3 = ADDRES       (StartByte)
//index1.4 = BIT          (Bit = wird nur bei TYP=0 verarbeitet)

$S7_VAR_ID =array(0,7,2,40,2); //DB2.DBX40.2    Variable in SPS siehe Beschreibung oben

 			S7_SetType        ($S7_Instanz_ID,$S7_VAR_ID[0]);
         S7_SetArea        ($S7_Instanz_ID,$S7_VAR_ID[1]);
         S7_SetAreaAddress ($S7_Instanz_ID,$S7_VAR_ID[2]);
         S7_SetAddress     ($S7_Instanz_ID,$S7_VAR_ID[3]);
         S7_SetBit         ($S7_Instanz_ID,$S7_VAR_ID[4]);
			S7_SetPoller      ($S7_Instanz_ID,0);
IPS_ApplyChanges($S7_Instanz_ID);

S7_WriteBit($S7_Instanz_ID, False);    // setzt die Variable auf Null
S7_WriteBit($S7_Instanz_ID, True);    // setzt die Variable auf Eins 
?>

Gruß
Tommy

Hallo Tommy,

hab das mal versucht, klappt aber leider nicht.

Habe die S7 Instanz angelegt, dann legt er automatisch ne Variable Boolean an.

Danach habe das Skript so angelegt

 <?
$S7_Instanz_ID   = 26952;

//index0   = VARIABLENBEZEICHNUNG in IPS
//index1.0 = TYP          (0=bit, 1=byte, 2=word, 3=dword,
//                         4=ShortInt, 5=SmallInt, 6=Integer, 7=Real)
//index1.1 = AREA         (0=SystemInfo, 1=SystemFlags,
//                         2=AnalogInput CPU200, 3=AnalogOutput CPU200,
//                         4=Input, 5=Output, 6=Flags, 7=Datablock,
//                         8=InstanzDaten, 9=LokaleDaten, 10=UnknownedArea
//                         11=Zaehler, 12=Timer, 13=PEW/PAW)
//index1.2 = AREAADDRESS  (Baustein)
//index1.3 = ADDRES       (StartByte)
//index1.4 = BIT          (Bit = wird nur bei TYP=0 verarbeitet)

$S7_VAR_ID =array(0,7,101,0,0); //DB101.DBX0.0    Variable in SPS siehe Beschreibung oben

             S7_SetType        ($S7_Instanz_ID,$S7_VAR_ID[0]);
         S7_SetArea        ($S7_Instanz_ID,$S7_VAR_ID[1]);
         S7_SetAreaAddress ($S7_Instanz_ID,$S7_VAR_ID[2]);
         S7_SetAddress     ($S7_Instanz_ID,$S7_VAR_ID[3]);
         S7_SetBit         ($S7_Instanz_ID,$S7_VAR_ID[4]);
            S7_SetPoller      ($S7_Instanz_ID,0);
IPS_ApplyChanges($S7_Instanz_ID);

S7_WriteBit($S7_Instanz_ID, False);    // setzt die Variable auf Null
S7_WriteBit($S7_Instanz_ID, True);    // setzt die Variable auf Eins
?>

Und ausgeführt, aber nichts passiert.

Was kann ich noch versuchen?

Gruß
Marc

Hallo MaBu,

Kannst du die Variable in der Instanz direkt ändern? Dazu einfach deine Daten „DB101.DBX0.0“ in die entsprechenden Dialogfelder eingeben auf übernehmen gehen. Dann kannst du im Testcenter direkt Ein und Aus schalten. Du schaltest im Skript nacheinander Aus und wieder Ein! Hier sollte halt nur ein Befehl stehen! Wie ist die SPS angebunden?

Gruß Tommy

Hallo Tommy,

vielen Dank für deine Hilfe! :slight_smile:

S7 ist per MPI angebunden.
Leider geht das in der Variablen direkt auch nicht. Also am Rolladen tut sich einfach nichts.
Kann ich irgendwo sehen ob überhaupt irgendwas an die S7 gesendet wird?

Habs jetzt mal so eingerichtet:

und führe das Skript von Hand aus, das Skript hab ich jetzt angepasst das ich eine jeweils eine Zeile also ein oder aus auskommentiert hab
Rauf:

$S7_Instanz_ID   = 48278 /*[Siemens S7\Rollläden\EG\DB101]*/ ;

//index0   = VARIABLENBEZEICHNUNG in IPS
//index1.0 = TYP          (0=bit, 1=byte, 2=word, 3=dword,
//                         4=ShortInt, 5=SmallInt, 6=Integer, 7=Real)
//index1.1 = AREA         (0=SystemInfo, 1=SystemFlags,
//                         2=AnalogInput CPU200, 3=AnalogOutput CPU200,
//                         4=Input, 5=Output, 6=Flags, 7=Datablock,
//                         8=InstanzDaten, 9=LokaleDaten, 10=UnknownedArea
//                         11=Zaehler, 12=Timer, 13=PEW/PAW)
//index1.2 = AREAADDRESS  (Baustein)
//index1.3 = ADDRES       (StartByte)
//index1.4 = BIT          (Bit = wird nur bei TYP=0 verarbeitet)

$S7_VAR_ID =array(0,7,101,0,0); //DB101.DBX0.0    Variable in SPS siehe Beschreibung oben

             S7_SetType        ($S7_Instanz_ID,$S7_VAR_ID[0]);
         S7_SetArea        ($S7_Instanz_ID,$S7_VAR_ID[1]);
         S7_SetAreaAddress ($S7_Instanz_ID,$S7_VAR_ID[2]);
         S7_SetAddress     ($S7_Instanz_ID,$S7_VAR_ID[3]);
         S7_SetBit         ($S7_Instanz_ID,$S7_VAR_ID[4]);
            S7_SetPoller      ($S7_Instanz_ID,0);
IPS_ApplyChanges($S7_Instanz_ID);

S7_WriteBit($S7_Instanz_ID, False);    // setzt die Variable auf Null
//S7_WriteBit($S7_Instanz_ID, True);    // setzt die Variable auf Eins
?>

runter:

<?
$S7_Instanz_ID   = 48278 /*[Siemens S7\Rollläden\EG\DB101]*/ ;

//index0   = VARIABLENBEZEICHNUNG in IPS
//index1.0 = TYP          (0=bit, 1=byte, 2=word, 3=dword,
//                         4=ShortInt, 5=SmallInt, 6=Integer, 7=Real)
//index1.1 = AREA         (0=SystemInfo, 1=SystemFlags,
//                         2=AnalogInput CPU200, 3=AnalogOutput CPU200,
//                         4=Input, 5=Output, 6=Flags, 7=Datablock,
//                         8=InstanzDaten, 9=LokaleDaten, 10=UnknownedArea
//                         11=Zaehler, 12=Timer, 13=PEW/PAW)
//index1.2 = AREAADDRESS  (Baustein)
//index1.3 = ADDRES       (StartByte)
//index1.4 = BIT          (Bit = wird nur bei TYP=0 verarbeitet)

$S7_VAR_ID =array(0,7,101,0,1); //DB101.DBX0.1    Variable in SPS siehe Beschreibung oben

             S7_SetType        ($S7_Instanz_ID,$S7_VAR_ID[0]);
         S7_SetArea        ($S7_Instanz_ID,$S7_VAR_ID[1]);
         S7_SetAreaAddress ($S7_Instanz_ID,$S7_VAR_ID[2]);
         S7_SetAddress     ($S7_Instanz_ID,$S7_VAR_ID[3]);
         S7_SetBit         ($S7_Instanz_ID,$S7_VAR_ID[4]);
            S7_SetPoller      ($S7_Instanz_ID,0);
IPS_ApplyChanges($S7_Instanz_ID);

//S7_WriteBit($S7_Instanz_ID, False);    // setzt die Variable auf Null
S7_WriteBit($S7_Instanz_ID, True);    // setzt die Variable auf Eins
?>

Ist das Richtig das ich in der Instanz die Area Address auf 101 geändert habe?

Sorry für die vielen Fragen :rolleyes:

Gruß
Marc

Hi Tommy,

was mir auch gerade noch auffällt, es werden auch keine Änderungen egal ob über Skript oder direkt über die Instanz in den Meldungen dokumentiert.

Hallo MaBu,
Was für ein Adapter setzt du ein? Wie sieht hier die Config in IPS aus?
Usb-Adapter gehen glaube ich nicht. Ich habe einen Net-Link Pro von Helmholz.

Gruss Tommy

Ich habe einen USB- MPI Adapter von eb*y. Funktioniert.
Ich habe das Ansteuern über Merker gelöst. Funktioniert wunderbar.

Gruß
David

ich hab nen originalen Siemens MPI Adapter 6ES 972 0CB20 0XA0

Config sieht so aus:

Hallo MabU;

das sollte eigentlich so gehen, da die Konfiguration ja gültig ist. Kannst Du Variablen aus der SPS lesen? Also eine Variable (z.B. MW10) in einer neuen Instanz anlegen und Intervall auf 1000 ms. Damit solltest du eigentlich einen Wert in IPS haben. Wie sieht dein SPS Programm aus? Kannst du dort über eine Variablentabelle mit deinenb Bits die Rollos steuern?
Vielleicht werden die Bits ja von deinem SPS Programm übersteuert (überschrieben)!

Gruß Tommy

Hallo Tommy,

jetzt geht’s, bzw. ging schon die ganze Zeit.
Kollege von mir hat die S7 so programmiert das der Rollladentaster 2 Funktionen hat, kurzer Druck unter 1s automatik Betrieb, länger Handbetrieb. Somit hat die S7 immer gewartet und nichts getan.
Wenn ich im Skript jetzt auf true und gleich wieder auf false setze dann gehts kleines Problem große Wirkung :slight_smile:

Vielen dank für deine Hilfe.

Gruß
Marc

Hallo Marc,

da lag ich mit meiner Vermutung das es am SPS Programm liegt gar nicht so falsch.

Ich habe meine Jalousiesteuerung auch in der SPS. Die Steuerung ist mit der OSCAT-Library programmiert. Das funktioniert ganz gut und ich kann hier sogar auf Positionen die ich von IPS vorgebe fahren und sehe wo die Jalousie gerade steht! Wenn IPS nicht steuert dann läuft die Steuerung autark in der SPS über Zeiten. Zur Zeit übersteuert das SPS-Programm IPS, d.h. dass Zeitprogramm in der SPS hat vorrang. Für die Komfortfunktionen fehlt einfach die Zeit.
Vielleicht eine Überlegung Wert das noch mal zu ändern.

Gruß und ein schönes Restwochenende
Tommy

Hallo Tommy
Ich habe gerade gelesen, dass Du Deine S7 mit OSCAT am Laufen hast. Das hatte ich auch mal vor, nur konnte ich einige Module nicht verwenden, da man ja alles in SFC machen muss. Wie hast Du das geloest?
Gruss Christoph