Siemens/Vipa S7 goes IPS, aber User zu dumm

Hallo Zusammen,

ich habe die V2 beta installiert und eine S7 „erfolgreich“ angebunden.
siehe
http://www.ipsymcon.de/forum/f18/ip-symcon-v2-beta-version-4850/index10.html#post46580

leider komme ich nun nicht mehr weiter.

wie kann ich Datenbausteine erstellen, lesen, abfragen und diese in die vorhandene Steuerung einbinden?

wie hier beschrieben:

Allerdings stehe ich da nun mehr SPS-seitig vollkommen auf dem schlauch, wie ich mein S7-Programm so zurecht gerückt bekomme, das ich mit den Eingängen und mit einer Datenübertragung von IPS schalten kann und die Zustände auch wieder ausgelesen bekomme. Ich denke das ist ein strukturelles Problem. Ich habe noch keine blassen Schimmer, wie der neue Ablauf aussehen soll.
Momentan ist es einfach Eingang Tastet–> schaltet Ausgang in Selbsthaltung bis nächster Tasteingang kommt.

Hier müsste dann vermutlich ein DB o.ä. dazwischen, der von dem Eingang oder einer Variable in IPS gesteuert wird. Oder würde dieser auch wieder direkt von der SPS überschrieben werden ?

Also Ihr seht, die Verwirrung ist nun komplett

Viele Grüße
Bastelfrosch

Na dann plauder ich mal aus dem Nähkästchen. Ich bin nämlich einer solchen externen die SPS’n programmieren.
Wenn du ne Selbsthaltung hast, wirst du ein SR oder RS Flipflop eingesetzt haben.
Dieses Flipflop bedient normalerweise einen Merker. Diesen könntest du jetzt mit IPS auslesen und neu schreiben.
Idealerweise macht man das mit einem Bit in einem Austausch DB. Für deine Anwendung reicht aber direkt das Fliflop-Bit (hier M100.2) zu bearbeiten.
Ich hab mal ein kleines Bild angehangen.
Wichtig ist, dass man aber nur auf Anforderung sendet und nicht ständig das mit aus IPS überschreibt.

Eine Alternative wäre ein extra „Togglebit“ zu machen, das aber auch von IPS wieder zurückgesetzt werden muss. Hier hat man dann auch den seperaten Visu-DB (hier DB10)
Siehe Bild 2.

Man kann das beliebig verkomplizieren. Vielleicht möchtest du einen AUTO-Hand Schalter bauen, der zwischen IPS und Taste umschaltet. :smiley:

P.S.: Die Beispiele sind aus der hohlen Hand und sind nur als grobes Beispiel zu verstehen. Kann man nämlich auch schöner machen. :wink:

cu…

Flankenschalter.jpg

Hallo Mc Fly,

ich habe das anders gemacht. Habe einen FB geschrieben und diesen in allen FCs entsprechend aufgerufen und nur noch die Ein- und Ausgänge drangemacht.
Habe mal in der Anlage die Grundfunktion des FBs gedruckt.
Kann ich hier auch ansetzen? ICh muss gestehen, Deine FCs kann ich nicht so ganz nachvollziehen. Ich werde mir die gleich mal in den Simulator laden und schauen, was dann passiert. Sieht für mcih aber auf den ersten und zweiten Blick so aus, als ob ich nicht mit dem gleichen Taster auch wieder ausschalten kann.

FB1.pdf (4.34 KB)

… dies sind die notwendigen Befehle um etwas in die SPS zu schreiben:

$id_s7_db132 = 53047;
$id_s7_out168 = 54835;

$db = 65535;
$out = 255;

S7_WriteByte($id_s7_db132, $db);
S7_WriteWord($id_s7_in168, $out);

Hallo Steiner,

wenn ich die SPS richtig verbunden habe, bei der Instanz den Test machen kann und auch ein byte in einen Datenbaustein bekomme, müsste dann dies nicht auch mit verändern der Variable funktionieren?

Bei mir klappt aber noch nicht mal die Abfrage der Variable! Was mache ich denn nur falsch?

Gruß

Bastelfrosch

Hm, mal abgesehen davon, das ich nie 4 gleiche Ein- und Ausgänge auf eine SPS legen würde. Könnte ich mir sowas vorstellen (siehe Anhang).
Wobei du den EINAUS-gang „Zustand“ in einen DB oder Merker legen könntest.
Dann hast du direkt eine Variable für den Zustand und könntest sie auch Eventgesteuert beschreiben wie steiner geschrieben hat.

Das Du ein XOR für ein Flipflop benutzt ist interresant, in meinen Augen aber etwas unübersichtlich. Bei einem richtigen Flipflop sieht man direkt beide Pfade (für EIN und für AUS).

P.S.: Bei der Variant gewinnt bei gleichzeitiger Betätigung der „alles aus“ Merker. Soll der „Panik“ Merker gewinnen müsste man ein RS-Flipflop einsetzen.

cu…

FB1.pdf (7.35 KB)

Achso, solltest du den FB z.b. 8mal aufrufen, könntest du alle „Zustände“ in ein Byte legen und von IPS in einem Schlag beschreiben. Wenn du denn alle Zustaände zusammen schalten willst.

cu…

Es reicht nicht die Variable zu ändern. Du musst die Funktion die steiner gepostet hat aufrufen.

cu…

Es reicht nicht die Variable zu ändern

… doch, doch - es geht - ich habe es gerade ausprobiert:

$id_regen = 57614;
SetValue($id_regen , FALSE);

… und schon schien die Sonne …

Ich meinte die Varialen-Änderung bei wo oben steht Abfragen,Verändern,leeren

da passiert bei mir gar nichts, im Testfenster der zugehörigen Instanz aber sehr wohl

[QUOTE=McFly;46595]Hm, mal abgesehen davon, das ich nie 4 gleiche Ein- und Ausgänge auf eine SPS legen würde.

was spricht Deiner Meinung nach dagegen? Ich hatte dies gedacht, wenn ich z.B. Die Wohnzimmerlampen (3Stück) von 2 oder 3 Stellen schalten möchte

Das Du ein XOR für ein Flipflop benutzt ist interresant, in meinen Augen aber etwas unübersichtlich. Bei einem richtigen Flipflop sieht man direkt beide Pfade (für EIN und für AUS).

Das mit dem XOR, war so fast das Einzige, was ich aus meinem SPS-Kurs behalten habe, fand ich schön kurz :-))

P.S.: Bei der Variant gewinnt bei gleichzeitiger Betätigung der „alles aus“ Merker. Soll der „Panik“ Merker gewinnen müsste man ein RS-Flipflop einsetzen.

OK, aber macht glaube ich hier nichts.

Habe es gerade noch mal via script versucht, gleiche Reaktion, der Status im Fenster der Variable ändert sich, bei der SPS leider nicht

Ich wollte den DB1.dbx0.0 ansprechen und habe bei der Instanz eingegeben :

Datentyp Byte
area ; Datablock
Area Adress 0
Adresse 0

wobei mir area adress nicht sagt :frowning:

Hallo steiner, hallo McFly,

mit dem script geht es !!! Ich kann also damit in die Datenbank schreiben.
Jetzt habe ich auch verstanden, das die Werte-Änderung bei Value nur zu Testzwecken in IPS selbst gedacht ist und alles andere per script gemacht werden muss.
Das ist dann das mit dem Wald und den Bäumen :slight_smile:

Nun hätte ich wahrscheinlich noch eine Dumme Frage:
Da die Kommunikation nur auf Byte-Ebene läuft, ich aber ja eigentlich nur bits schreiben möchte, muss ich dann für jeden zu schaltenden Befehl einen eigenen DB mit 8bits nehmen, obwohl ich ja nur 0 und 1 schalten möchte?

Ansonsten habe ich ja das Problem, wenn ich in DB1 eine 2 schreibe, weil ich gerne DB1.DBX1.1 auf Status 1 setzen möchte, automatisch DB1.DBX1.0 auf 0 stehen, oder?

Erst einmal an dieser Stellen VIELEN DANK für die Hilfe!!:slight_smile:

Gruß

bastelfrosch

Hallo Zusammen,

nachdem ich das Schreiben auf die SPS hinbekommen habe, stehe ich wieder vor einem Rätsel:
Ich versuche mit folgendem Script die Variabel valueID1 auszulesen und dann auf die SPS einen entsprechenden Wert (0 oder 1) zu schreiben.
Obwohl direkt die richtigen Kommentare angehängt werden, zeigt mir das Script als Inhalt des ValueID1 nur 17944 und nicht 0 oder 1
Wo liegt denn hier mein Denkfehler ?

<?

$valueID1=17944/[Siemens S7-2\Siemens SPS Halter\Ausgabe Stati\S7-DB1\VALUE-DB1]/;
$DB1=56871 /[Siemens S7-2\Siemens SPS Halter\Ausgabe Stati\S7-DB1]/;
if ($valueID1 == 0)
( S7_WriteByte($DB1,1)
);
else
( S7_WriteByte($DB1,0)
);
echo $valueID1
// Hier erhalte ich nur 17944 statt den Inhalt der Variable

?>

Vielen lieben Dank
bastelfrosch

Hallo bastelfrosch,

muß es nicht so aussehen…

$valueID1=GetValue(17944);
.
.
.

Gruß

Ja, das war es natürlich :smiley:

VIELEN DANK

Gruß

Bastelfrosch

Da hab ich doch glatt verpasst, das da jetzt was geht mit der S7 und IP SYMCON

Leider kann ich zur Kommunikation nicht wirklich viel sagen.
Aber ein Bit in der SPS zu toggeln funzt so am Kürzesten :slight_smile:


U E1.0 
FP M100.0 
X A1.0 
= A1.0 

Hallo Zusammen,

dank Eurer tatkräftigen Unstützung, habe ich das Schreiben und Lesen von Merkern in der SPS nun hinbekommen. (siehe angehängtes PDF bzgl. des erstellten FBs). Allerding geht das nicht, wenn ich statt der Merker ein Datenbit nehmen möchte. Statt z.B. M15.6, DBB15.DBX0.6. Ich denke aber, es liegt mehr SPS-Seitig, das ich die DB gar nicht richtig schreiben kann, wenn ich die DB in Step7 öffne, kann ich diese nicht editieren und es sind auch keine Platzhalter für das entsprechende Bit vorhanden.
@edison, Du hast doch ein wenig Erfahrung mit Step 7. kannst Du mir da einen Tip geben?

ICh habe für die Bit-Byte-Umsetzung beim Lesen und Schreiben die Scripte von steiner verwendet. Klappt soweit auch ganz gut. Leider sind das ja nun einige Scripte, die in IPS dann rumliegen. Wird es eine Möglichkeit geben, Kommentare bzgl. Feldbeschreibungen in einer weiteren Zeile einzugeben, damit man außer der automatisch erstellten Bezeichnung die Scripte und Variablen besser zuordnen kann?

Vielen Dank

bastelfrosch

FB6.pdf (4.49 KB)

Hallo Zusammen,

seit dem heutigen Update klappt das Rückschreiben der Bits auf ein Byte nicht mehr (Fehlermeldung Varible wurde als nur Lesen markiert)
Ich weiss aber nicht, wo ich diesen Schreibschutz herausnehmen kann. War in der Version von letzer Woche nicht drin

Hier das Script von Steiner

<?
$id_db70_0 = 25933 /*[Siemens S7\MB10\Value-MB10]*/;
$db_value = GetValue($id_db70_0);           // bestehenden Wert lesen
$bit_value = GetValue(28548 /*[Siemens  S7\MB10\Value-MB10\Value-MB10_Bit0]*/);       // Bit > Trigger
$varname = IPS_GetName(28548 /*[Siemens  S7\MB10\Value-MB10\Value-MB10_Bit0]*/);

$pos = strpos($varname, "Bit");
if ($pos === False) {
    echo "not found";
    return;
}else{
    $pos = substr($varname, $pos+3, 1);
    echo "Pos: $pos
";
}

if($bit_value){
    $db_value |= (1 << $pos);
} else {
    $db_value &= ~(1 << $pos);
}

echo "Byte: $db_value
";
SetValue($id_db70_0, $db_value);


S7_WriteByte(46839 /*[Siemens S7\MB10]*/, $db_value);

?>

PS mit der farblichen Markierung war es übersichtlicher; hätte ich auch gerne wieder:)

Gruß
Bastelfrosch

Hallo Zusammen,
hat keiner eine schlaue Idee?