Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 2 von 16 ErsteErste 123412 ... LetzteLetzte
Ergebnis 11 bis 20 von 156

Thema: PHP + Siemens PLC

  1. #11
    Registriert seit
    29.03.2004
    Beiträge
    5.172
    Danke
    129
    Erhielt 1.506 Danke für 1.107 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Also ich kenne die Vipa Kisten nicht näher.

    Zumindest steht im Datenblatt dass die Onboard-Ethernet Schnittstelle zumindest 2 PG/OP-Verbindungen kann.
    Ein OP (zumindest eins von Siemens) nutzt normalerweise die gleiche Kommunikation wie mein php-Skript im Anhang, libnodave, und auch die OPC-Server die ich so kenne. Ich taufe das mal S7-Kommunikation.

    Ich würde behaupten es funktioniert, aber wenn du die SPS zu Hause hast ist das doch schnell gemacht. IP Adresse einstellen und ab gehts...

  2. #12
    Registriert seit
    10.01.2008
    Ort
    Mildensee
    Beiträge
    47
    Danke
    18
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ....die Verbindung scheint wohl zu stehen da nur die Meldung kommt "Fehler beim lesen der Daten" aber so in etwa (wenn man Daten lesen kann) habe ich mir das vorgestellt. Würde ja am liebsten selber ein wenig probieren aber da fehlt mir die Erfahrung in php.

    Zum Vorgang habe DB101 eingefügt DBB 0 mit B#16#80 beschrieben. Manager geschlossen.



    Grüße,
    TH


    lese gerade nochmal! Du ließt ein Array ein? habe damit noch nicht gearbeitet! wie füllt man es mit Daten aus der CPU? und wie wird es deklariert?
    Geändert von torstenh (04.01.2010 um 15:49 Uhr)

  3. #13
    Registriert seit
    29.03.2004
    Beiträge
    5.172
    Danke
    129
    Erhielt 1.506 Danke für 1.107 Beiträge

    Standard

    Zitat Zitat von torstenh Beitrag anzeigen
    ....die Verbindung scheint wohl zu stehen da nur die Meldung kommt "Fehler beim lesen der Daten" aber so in etwa (wenn man Daten lesen kann) habe ich mir das vorgestellt. Würde ja am liebsten selber ein wenig probieren aber da fehlt mir die Erfahrung in php.

    Zum Vorgang habe DB101 eingefügt DBB 0 mit B#16#80 beschrieben. Manager geschlossen.
    Wenn du mein Beispiel einfach so kopiert hast, muss der DB101 mindestens 6 Bytes lang sein, da diese Anzahl an Bytes am Stück gelesen werden.
    [PHP]
    $plcdata = $plc->ReadBytes(0, $db, $startbyte, $numBytes);
    [/PHP]$db ist die Datenbausteinnummer die gelesen wird
    $startbyte die Startadresse (z.B. DBB0)
    $numBytes sind die Anzahl der Bytes die gelesen werden sollen. Bei 6 werden DBB0-DBB5 gelesen.

    Zitat Zitat von torstenh Beitrag anzeigen
    lese gerade nochmal! Du ließt ein Array ein? habe damit noch nicht gearbeitet! wie füllt man es mit Daten aus der CPU? und wie wird es deklariert?
    Der Rückgabewert der Funktion ist ein Array. Wie der DB in der SPS aufbgebaut ist, ist völlig egal.
    Also wenn DB101 ab DBB0 6 Bytes gelesen werden (wie in meinem Beispiel), hast du in
    $plcdata[0] -> DB101.DBB0
    $plcdata[1] -> DB101.DBB1
    $plcdata[2] -> DB101.DBB2
    .
    .
    stehen.

  4. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    torstenh (04.01.2010)

  5. #14
    Registriert seit
    10.01.2008
    Ort
    Mildensee
    Beiträge
    47
    Danke
    18
    Erhielt 0 Danke für 0 Beiträge

    Standard

    .....hatte da wohl was missverstanden. Ich dachte das Array wird in der CPU zusammengesetzt. Deinen Code hatte ich nur überflogen und festgestellt das ich noch sehr viel lesen muss!
    Aber es funktioniert!!!!
    http://poetnitz.homeip.net/webseite/s7plc.php
    hier das Ergebnis!

    Grüße,
    TH
    Zitieren Zitieren Danke für die Erklärung  

  6. #15
    Registriert seit
    10.01.2008
    Ort
    Mildensee
    Beiträge
    47
    Danke
    18
    Erhielt 0 Danke für 0 Beiträge

    Standard

    .....kann man auch in die CPU schreiben? könntest du mir da auch behilflich sein? brauche eigentlich nur ein Beispiel und würde dann versuchen mich mal selber durch zu wühlen.


    Grüße,
    TH

  7. #16
    Registriert seit
    29.03.2004
    Beiträge
    5.172
    Danke
    129
    Erhielt 1.506 Danke für 1.107 Beiträge

    Standard

    Zitat Zitat von torstenh Beitrag anzeigen
    .....kann man auch in die CPU schreiben? könntest du mir da auch behilflich sein? brauche eigentlich nur ein Beispiel und würde dann versuchen mich mal selber durch zu wühlen.
    Schreiben geht auch, nur nicht mit dem Stand was ich die gestern gepostet habe. Da habe ich nur schnell die Funktionen zum Verbindungsaufbau und zum Lesen reingetippt. Das ist auch das zweite Mal dass ich überhaupt was in php programmiere.

    Wenn du so ein bißchen was von C bzw. C# verstehst, kannst du dir ja mal den Code von S7.Net ( http://s7net.codeplex.com/ ) oder libnodave ansehen und die Telegramme an die SPS in php nachprogrammieren. Ich habe ein Plugin für Wireshark geschrieben, da kann man seine SPS-Netzwerkkommunikation recht gut mit debuggen (mal hier im Forum suchen).
    Vielleicht habe ich die nächsten Tage aber mal etwas Zeit um die restlichen Funktionen zu ergänzen.

    Kleiner Hinweis:
    Wenn du das Skript so roh auf deinem Webserver laufen lässt, solltest du bedenken dass jeder Seitenaufruf einen Verbindungsauf- und abbau zur SPS nach sich zieht. Da deine SPS nur 2 Verbindungsressourcen hat, können sich die Seite maximal 2 Benutzer gleichzeitig aufrufen.
    Und im jetzigen Programmstand kannst du maximal 240 Bytes mit einer Abfrage auslesen.
    Viel Spaß!

  8. #17
    Registriert seit
    10.01.2008
    Ort
    Mildensee
    Beiträge
    47
    Danke
    18
    Erhielt 0 Danke für 0 Beiträge

    Daumen hoch

    das reicht mir aus! bin nur ein Benutzer! und es soll auch nicht offen sein! noch nicht! war nur ein Test! wetere Funktionen möchte ich dann gern in PHP nachprogrammieren.
    Aber es ist schon genau das was ich wollte. Schreiben auf die CPU wäre nur ein Punkt auf dem i . Lesen war mir erst einmal wichtiger um einen Status zu bekommen und diesen in Variablen. Vielleicht polle ich auch den Status und speichere ihn zyklisch in ein xml File. Dieses kann ich dann weiter verarbeiten. Aber das weiß ich noch nicht so richtig wie ich weiter vorgehen. Eine Umwandlung der Hexwerte ist ja in php auch kein Problem. Mal sehen, aber der Startschuss ist erst einmal getan dank Deiner Hilfe!

    Nochmals herzlichen Dank dafür!

    Ja, wenn Du Zeit findest! ich nehme Dir alles ab!
    mir persönlich hilft ein kleiner Denkanstoß immer sehr viel weiter!

    Grüße,
    TH

  9. #18
    Registriert seit
    10.01.2008
    Ort
    Mildensee
    Beiträge
    47
    Danke
    18
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ......ich bekomme das "schreiben" nicht hin. Da fehlt mir noch einiges. Mir fehlt einfach der Ansatz.


    Grüße,
    TH

  10. #19
    Registriert seit
    29.03.2004
    Beiträge
    5.172
    Danke
    129
    Erhielt 1.506 Danke für 1.107 Beiträge

    Standard

    Zitat Zitat von torstenh Beitrag anzeigen
    ......ich bekomme das "schreiben" nicht hin. Da fehlt mir noch einiges. Mir fehlt einfach der Ansatz.
    Wie weit bist du denn gekommen?

    So ein bißchen weitergemacht habe ich schon.
    Also ich könnte dir einen Zwischenstand per PN zuschicken. Eine Funktion zum Schreiben habe ich dort drin, und auch ein paar Konvertierungsfunktionen um gelesene Daten z.B. in php integer/float etc. umzuwandeln.

    Ich habe aber auch den Rückgabewert von ReadBytes von einem Array auf String geändert, da wie ich feststellen musste, in php ein Array immer als assoziatives Array gehandhabt wird - mit dem sich daraus resultierenden Overhead. Außerdem spart es zwei Konvertierungen, da die php Socket-Funktionen auch einen String zurückgeben.
    Du wirst also evtl. was ändern müssen wenn du schon was herum programmiert hast.

    Wie hast du denn vor die Daten auf deiner Webseite darzustellen?
    Mir schwebt ja vor, um diese s7plc Klasse einen Soap-Server zu schreiben, auf den dann ganz Web2.0 mäßig mit Ajax auf die Daten zugegriffen werden kann.
    Optimal wäre dass dies symbolisch geschieht. Da bin ich auch gerade bei, aus einem Step7-Projekt eine Symboltabelle mit allen Adressen (soweit sie symbolisch angelegt sind) automatisch zu generieren. Der Inat OPC-Server kann ja auch sowas...

  11. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    torstenh (11.01.2010)

  12. #20
    Registriert seit
    10.01.2008
    Ort
    Mildensee
    Beiträge
    47
    Danke
    18
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi,

    so richtig habe ich noch nichts auf die Beine gestellt. Ich weiß eben nicht wie ich anfangen soll. Ich habe mir zwar die Codes durchgelesen und teilweise verstanden aber ich komme mit der Implementierung in php nicht zurecht, Wie schon geagt, da fehlt mir noch einiges.
    Also weiß ich auch nicht wie ich das anfangen soll. Die Darstellung dachte ich mir mit Symbolen. Das heißt, wenn ich die Daten lesen und das Array mit explode in einzellne Variablen aufteile habe ich alle Bits die ich benötige. Dann mit if else eine Grafik laden und diese darstellen. Des weiteren benutze ich die pChart Klasse. Mit dieser kann man recht gut Diagramme darstellen. Ein Beispiel auf meiner neuen Seite. Die ist aber noch nicht fertig also noch komplett in der Bearbeitung.
    http://poetnitz.homeip.net/webseite/raum/index.php
    Dort findest du einige Diagramme. Hier lese ich eben xml und txt Files ein. Des weiteren lese ich auch Webseite (natürlich mit Genehmigung!) ein und werte diese aus. Steuerungseitig würde ich eben wenn ich es benötige die Schnittstelle öffnen, Daten einlesen und auswerten. Das schreiben auf die CPU ist g......l. und man will ja nicht auf der Hälfte stehenbleiben. Aber gedacht habe ich mir das eben so; zu ändernde Variable einlesen, vergleichen und gegebenenfalls Wert neu schreiben. Ja ein Ansatz von dir zum schreiben per PN wäre Klasse. Dann wüsste ich wo und wie ich ansetzen muss.
    Wie schon bemerkt, php ist serverseitig, da muss man ein wenig umdenken aber es geht.
    Was das Array angeht, du musst nicht unbedingt die Indizes benennen. Wenn du ein Array ohne Indizes auslesen möchtest geht das nummerisch. Ich komme da immer ein wenig durcheinander da die letzt geschriebene Variable oder Wert mit der Nummer $variable[0] ausgegeben wird aber das bekommt man mit der sort Funktion auch in den Griff. oder ist das garnicht Deine Problem?

    Grüße,
    Torsten
    Geändert von torstenh (11.01.2010 um 01:23 Uhr)

Ähnliche Themen

  1. Antworten: 17
    Letzter Beitrag: 18.11.2010, 16:36

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •