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

Seite 13 von 16 ErsteErste ... 31112131415 ... LetzteLetzte
Ergebnis 121 bis 130 von 156

Thema: PHP + Siemens PLC

  1. #121
    Registriert seit
    13.03.2006
    Beiträge
    422
    Danke
    5
    Erhielt 41 Danke für 41 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Alfikind Beitrag anzeigen
    Warning: socket_read() [function.socket-read]: unable to read from socket [0]: Ein nicht blockierender Socketvorgang konnte nicht sofort ausgeführt werden.
    in C:\webroot\S7\s7plc.php on line 193
    Hier hat schon mal jemand etwas zu dem Thema geschrieben.
    http://computer.wer-weiss-was.de/php...blocking-nicht

    Was macht
    s7plc.php on line 193
    denn so?

  2. #122
    Registriert seit
    08.08.2011
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    In der Zeile 193 steht:
    191: socket_write($this->mSocket,$msg,strlen($msg));
    192: $buf="";
    193:
    $buf=socket_read($this->mSocket,22);

  3. #123
    Registriert seit
    13.03.2006
    Beiträge
    422
    Danke
    5
    Erhielt 41 Danke für 41 Beiträge

    Standard

    Zitat Zitat von Alfikind Beitrag anzeigen
    In der Zeile 193 steht:
    191: socket_write($this->mSocket,$msg,strlen($msg));
    192: $buf="";
    193:
    $buf=socket_read($this->mSocket,22);
    Auf den Request in Zeile 191 scheint keine Antwort zu kommen.
    VIelleicht kann man dem Problem ja mit
    https://www.wireshark.org/
    näher rücken.

  4. #124
    Registriert seit
    21.09.2011
    Beiträge
    13
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo zusammen,
    danke erst einmal für diese tolle Implementation.

    Ich habe hier eine S7-1200 bei der ich den Ausgang A1.1 auslese:
    Code:
    $plc = new S7PLC('S7400', '192.168.130.71', 0, 1, 'Test');
    $plc->ReadBytes('A', 0, 1, 1);
    Funktioniert super. Nun habe ich eine weitere S7-1200, welche ich genau so auslese, natürlich mit andere IP:
    Code:
    $plc = new S7PLC('S7400', '192.168.130.75', 0, 1, 'Test');
    $plc->ReadBytes('A', 0, 1, 1);
    Hier bekomme ich keinerlei Rückgabe von der Funktion "ReadBytes", nur die Fehlermeldung:
    Code:
    Notice: Uninitialized string offset: 21 in /var/www/html/test/s7plc_db/s7plc.php on line 290
    Die erste SPS hat die Firmware V3.0, die zweite V4.1 - könnte es vielleicht daran liegen?
    Muß ich eventuell erst den Zugriff erlauben?

    lg
    Frank

  5. #125
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.069
    Danke
    399
    Erhielt 617 Danke für 464 Beiträge

    Standard

    Bim mir ziemlich sicher dass du bei der CPU unter Hardware / Schutz / Verbindungsmechanismen den
    "Zugriff über PUT/GET-Kommunikation durch entfernten Partner (PLC, HMI, OPC, ...) erlauben"
    manuell aktivieren musst.

    Das ist zwischen v3 und v4 unterschiedlich.
    Geändert von RONIN (27.05.2015 um 09:51 Uhr)
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  6. #126
    Registriert seit
    21.09.2011
    Beiträge
    13
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    100 Punkte VOLLTREFFER !

    Das wars, Danke für den Tipp! Es funktioniert jetzt auch.

    lg
    Frank

  7. #127
    Registriert seit
    21.09.2011
    Beiträge
    13
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Sorry, jetzt muß ich doch noch mal fragen:

    Ich habe einen Datenbaustein Datenbaustein_1[DB1]:
    Zeile 1 ist mit "Static" benannt, darunter befinden sich 20 Einträge.
    Es werden die Typen Time, Byte, UDInt und Word verwendet.
    Mit der Abfrage
    Code:
    $plc->ReadBytes('DB', 1, 0, 20);
    erhalte ich leider keine Werte. Was mache ich falsch?

    Im Parameter-Teil des Telegramms gibt es Time, UDInt nicht (s7plc.php Zeile 31 ff)

    lg
    Frank

  8. #128
    Registriert seit
    21.09.2011
    Beiträge
    13
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    So, bin etwas weiter gekommen:

    Der Datenbaustein ist mit "optimierten Bausteinzugriff". Damit symbolisch und nicht direkt adressierbar.
    Habe nun einen 2. Datenbaustein (DB23) angelegt ohne optimierten Bausteinzugriff.

    Für 0.0 habe ich den Typ DInt angelegt und den Wert 1234 gesetzt. Ich lese vom DB23 an Adresse 0 für DInt (4 bytes) aus:
    Code:
    $plcdata = $plc->ReadBytes('DB', 23, 0, 4);
    mittels der Funktion ascii_to_bin erhalte ich:
    00000000 00000000 00000100 00111111 was aber Dezimal 1078 entspricht und nicht wie erwartet 1234

    Was könnte da schief gehen?

  9. #129
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    9.555
    Danke
    825
    Erhielt 2.825 Danke für 2.274 Beiträge

    Standard

    Zitat Zitat von digidax Beitrag anzeigen
    Für 0.0 habe ich den Typ DInt angelegt und den Wert 1234 gesetzt. Ich lese vom DB23 an Adresse 0 für DInt (4 bytes) aus:
    Code:
    $plcdata = $plc->ReadBytes('DB', 23, 0, 4);
    mittels der Funktion ascii_to_bin erhalte ich:
    00000000 00000000 00000100 00111111 was aber Dezimal 1078 entspricht und nicht wie erwartet 1234
    Das letzte Bit ist 1 --> ungerade Zahl! Es kann also nicht 1234 sein, aber auch nicht 1078. Es entspricht tatsächlich 1087 dezimal.

    Wozu wandelst Du mit der Funktion ascii_to_bin? Ohne Wandlung solltest Du 1234 erhalten.
    Kannst Du beobachten, daß in DB23.DBD0 tatsächlich 1234 dezimal drinsteht? Vielleicht hast Du Überschneidungen und irgendwo wird das DBW2 überschrieben?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  10. #130
    Registriert seit
    21.09.2011
    Beiträge
    13
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Du hast vollkommen Recht, hatte einen Zahlendreher, die Ausgabe ist 1087.

    Das Script sieht nun so aus;

    Code:
    <?
    include("s7plc.php");
    
    $plc = new S7PLC('S7400', '192.168.130.75', 0, 1, 'Test');
    $plc->Open();
    
    echo $plc->ReadBytes('DB', 23, 0, 4);
    
    $plc->Close();
    ?>
    Der Datenbaustein:
    DB23.jpg

    Als Augabe erhalte ich mit diesem Script im Browser: Ò


    Der Datenbaustein ist autark, vom Programm aus wird weder gelesen noch geschrieben.
    Ich schreibe die 1234 per "Operand steuern".
    Wie finde ich heraus, ob es Überschneidungen gibt? Sorry für die dumme Frage, ich wechsel gerade von 10 Jahren S7-200 auf die 1200er.

    lg und Danke für die Hilfe,
    Frank

Ä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
  •