PHP + Siemens PLC

Supi

Erstmal danke für das PHP-Script. Genau das habe ich gesucht. Grundstruktur habe ich nun, nur keine CPU, gibt es ne Software mit der ich eine CPU mit TCP/IP-Verbindung simulieren kann? (hab nur den Uralt-Simulator von der Siemens, also der kannst net). Geht das net mit ACControl?!

Mit freundlichen Grüßen,
Hawkster
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe sowas schon mal mit der IBH SoftSPS Demoversion gemacht. Die geht zwar nach glaube einer halben Stunde in Stop, antwortet aber trotzdem weiter auf Telegramme.
 
Ich habe das gerade noch einmal ausprobiert mit Libnodave über ISO_TCP, funktioniert. Es könnte sein, dass du bei dir den Dienst "Simatic IEPG Help Service" in der Systemsteuerung deaktivieren musst. Dieser scheint auch den für ISO_TCP benötigten Port 102 zu benutzen. Wird die SPS später als der Dienst gestartet, kann diese dann nicht mehr auf dem Port hören.
 
So, habe jetzt mal diese S7.Net-Klasse analysiert... auffällig ist nun folgendes...

Code:
  byte b = (byte)Read(DataType.DataBlock, mDB, mByte, VarType.Byte, 1);  
  if ((int)value == 1)
    b = (byte)(b | (byte)Math.Pow(2, mBit)); // Bit setzen
  else
    b = (byte)(b & (b ^ (byte)Math.Pow(2, mBit))); // Bit rücksetzen
  return Write(DataType.DataBlock, mDB, mByte, (byte)b);

Wenn ich den Code richtig Interpretiere setzt er hier kein Bit, sondern ließt zuvor das byte ein, modifiziert die Information und schreibt ein byte zurück...

Geht das auch anders das Defintiv nur ein Bit geschrieben wird oder muss man den Umweg mit dem Byte gehen.

Ich frage, weil mein erster Gedanke nun ist: Was passiert, wenn genau in dem Moment, wo ich das Byte gelesen habe um es zu modifizieren, die SPS auch etwas verändert, und ich durch das zurückschreiben die Information von der SPS überschreibe...

Mit freundlichen Grüßen,
Hawkster
 
Wenn ich den Code richtig Interpretiere setzt er hier kein Bit, sondern ließt zuvor das byte ein, modifiziert die Information und schreibt ein byte zurück...

Geht das auch anders das Defintiv nur ein Bit geschrieben wird oder muss man den Umweg mit dem Byte gehen.

Ich frage, weil mein erster Gedanke nun ist: Was passiert, wenn genau in dem Moment, wo ich das Byte gelesen habe um es zu modifizieren, die SPS auch etwas verändert, und ich durch das zurückschreiben die Information von der SPS überschreibe...

Hallo,
das habe ich letztens auch schon gesehen. Vielleicht sollte man dem Autor das mal mitteilen. Ich sehe das mit dem Einlesen und schreiben auch kritisch, ich würde das so zumindest nicht einsetzen. Außer man legt sich einen eigenen Befehls-Bereich an.

Es gibt aber Funktionen um direkt einzelne Bits zu schreiben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok, dachte schon ich irre mich. Versuch mich nunmal im kompletten Abtippen der einen Klasse in PHP. Mal schauen ob das funktioniert. Und das Nachziehen der "Bit-Steuer-Funktion" sollte ja nicht das Problem darstellen.

Mit freundlichen Grüßen,
Hawkster
 
Wissen ist Macht, nicht wissen macht nichts ...

Hallo,

Thomas_v2.1 schrieb:
Vielleicht sollte man dem Autor das mal mitteilen.

Ich bin mir sicher, der Autor kennt diese Problematik. Der via Protokoll ansprechbare kleinste Datentyp ist aber nunmal ein Byte ... Und somit ist es zum Schreiben eines Bits erforderlich, das das ganze Byte gelesen werden muss und zum Rückschreiben eines bestimmten Bits eben die anderen Bits maskiert werden müssen, da eben auch nur byteweise geschrieben werden kann.
War aber schon in der S5 so, man hat beim großen, grünen Riesen irgendwie vergessen, diesen Mangel zu beheben.

Hawkster schrieb:
Was passiert, wenn genau in dem Moment, wo ich das Byte gelesen habe um es zu modifizieren, die SPS auch etwas verändert, und ich durch das zurückschreiben die Information von der SPS überschreibe...

Die Antwort dazu hat Thomas schon gegeben :

Thomas_v2.1 schrieb:
Außer man legt sich einen eigenen Befehls-Bereich an.

Genau, das ist etwas, was man bei der SPS-Programmierung berücksichtigen muss. Man muss dieses Verhalten beim Setzen von Bits aber kennen ...;)

Gruß

Question_mark
 
Ich bin mir sicher, der Autor kennt diese Problematik. Der via Protokoll ansprechbare kleinste Datentyp ist aber nunmal ein Byte ... Und somit ist es zum Schreiben eines Bits erforderlich, das das ganze Byte gelesen werden muss und zum Rückschreiben eines bestimmten Bits eben die anderen Bits maskiert werden müssen, da eben auch nur byteweise geschrieben werden kann.

Du solltest dein Wissen zur Kommunikation bei einer S7 mal etwas auffrischen, denn es gibt sehr wohl die Möglichkeit einzelne Bits zu schreiben.

Ergänzung:
Bits lesen geht natürlich auch, aber da macht es keinen Sinn, da die Telegrammlänge die gleiche ist als wenn man gleich ein ganzes Byte liest und dann das Bit im Programm ausmaskiert. Beim Schreiben wird als Adresse das Bit angegeben, die Datenlänge ist aber 1 Byte, in dem dann eine 1 für true, und 0 für false drin steht.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Mach hier keinen Glaubenskrieg über OS oder IDE

Hallo,

Thomas_v2.1 schrieb:
Wirf einfach einen Blick in Libnodave (achne, du kannst ja kein C, weil das ja total überholt ist), oder lad dir Wireshark runter, pack meine S7-Protokoll dll ins Verzeichnis und scheide mit...

Hast Du irgendein Problem mit mir ? Ich habe Dich gefragt, wie das im S7 Protokoll geht ... Und Deine rotzige Antwort kannst Du Dir gerne sparen, klar ?

Thomas_v2.1 schrieb:
(achne, du kannst ja kein C, weil das ja total überholt ist)

Nur um mal Dein Weltbild wieder zu aktualisieren :

Ja, ich kann eigentlich ganz gut mit ANSI-C und C++ umgehen, ist aber nicht wirklich für mich die erste Wahl zur produktiven Erstellung von Programmen. Auch wenn es Dir nicht gefällt.

Gruß

Question_mark
 
SQL4Automation wäre eine Alternative. Kostet zwar auch was, benötigt jedoch keinen OPC-Server und du hast vollen Zugriff auf die SQLDatenbank. Die Siemens Bibliothek wird Anfangs März verfügbar sein. CoDeSys SPSen, Stäubli, Kuka und Bosch Rexroth Roboter werden bereits unterstützt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Thomas_V2.1,

bin gerade dabei meiner Hausautomatisierung eine Weboberfläche zu verpassen, und bin über dein Php-Script zum auslesen einer S7 gestolpert.
Hab dieses auch erweitern können, Konvertierungsfunktionen und so weiter.
Das funktioniert auch alles wunderbar, nur das schrieben in die S7 bekomme ich einfach nicht hin. So wie ich gelesen hab, hast du ja diese Funktion geschrieben.
Jetzt meine bescheidene Frage, könnest du einen PHP-Anfänger dieses Script zukommen lassen oder hier veröffentlichen?


Michael
 
schreiben...

da ich das schreiben auch gebraucht habe, hab Ich mal was realisiert...

Bei mir gehts...
 

Anhänge

  • s7plc.zip
    2,3 KB · Aufrufe: 129
Zurück
Oben