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

Seite 15 von 16 ErsteErste ... 513141516 LetzteLetzte
Ergebnis 141 bis 150 von 156

Thema: PHP + Siemens PLC

  1. #141
    Registriert seit
    20.04.2016
    Beiträge
    1
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hello,

    Thank for you website

    I need to connect s7plc.php to my siemens S7 1200 and it currently does not work

    The solution that works is this one :

    Code:
    <?php$host    = "192.168.1.201";
    $port    = 2000;
    $messages = "Hello Server";
    
    
    // create socket
    $socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
    // connect to server
    $result = socket_connect($socket, $host, $port) or die("Could not connect to server\n");  
    // send string to server
    socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");
    // get server response
    $result = socket_read ($socket, 1024) or die("Could not read server response\n");
    echo "Reply From Server  :".$result;
    // close socket
    socket_close($socket);
    ?>
    With this code how to write and read just one value in a DB ?

    DBNAME = Data_rcv [DB11]
    LINE 2 = R_No
    DATA TYPE = Char
    VALUE = A

    Thank you and sorry I speak french in belgium

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

    Standard

    Hi,

    if you want to use this php class to connect to a S7-1200, you have to set in the connection parameters rack=0 and slot=1.
    In the hardware configuration of the 1200 you have to enable put/get communication if you are using a 1200 with a new Firmware (V4). And you can only get access to not-optimized datablocks.
    Die Genialität einer Konstruktion liegt in ihrer Einfachheit – Kompliziert bauen kann jeder.

    (Sergei Pawlowitsch Koroljow, sowjetischer Konstrukteur von Raketen und Weltraumpionier)

  3. #143
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    9.526
    Danke
    807
    Erhielt 2.801 Danke für 2.262 Beiträge

    Standard

    Is on the S7-1200 a TCP-Server (passive TCP-Connection) running on port 2000?

    If you want connect for S7-Protokoll (put/get) then I guess you have to connect to port 102.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  4. #144
    Registriert seit
    06.11.2003
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Thomas_v2.1,

    Das ist ja echt eine geile Klasse, Respekt. Habe da aber mal eine Frage, ist es möglich auch einen String zu übertragen, in der Klasse sind nur Typen bis 4 Byte angegeben.

    Gruß Marvin

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

    Standard

    Prinzipiell ja, du musst dir nur eine eigene Funktion schreiben welche das Längenbyte im S7-Stringkopf ausliest, und die Anzahl an Bytes dann als String interpretiert.

    Problematisch könnten nur lange Strings werden, z.B. welche mit 254 Zeichen (256 Bytes gesamt). Mit dieser php-Klasse aus diesem Thread kannst du nur Blockgrößen bis zu einer maximalen Größe lesen, und dieser hängt von der CPU ab. Bei einer 300er CPU mit einer PDU von 240 Bytes, kannst du höchstens 222 Bytes am Stück lesen. Das Aufteilen auf mehrere Anfragen und zusammenfügen der Antworten musst du darum selber machen.

    Beispielsweise hast du einen String[254] in DB1 ab Adresse 0.0.
    Abfrage 1 liest 222 Bytes ab DB1.DBB0, Abfrage 2 liest die restlichen 34 (256-222) ab DB1.DBB222.
    Die Genialität einer Konstruktion liegt in ihrer Einfachheit – Kompliziert bauen kann jeder.

    (Sergei Pawlowitsch Koroljow, sowjetischer Konstrukteur von Raketen und Weltraumpionier)

  6. #146
    Registriert seit
    06.11.2003
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Klingt ja schon mal super, gibt es irgendwo eine freie Doku wie so ein Telegramm auszusehen hat? Hast DU was dagegen, wenn ich ein wenig an Deinen Script weiterbaue? Würde gerne die Konfigs aus einer MYSql DB holen und nicht aus den cdv Dateien.

    Gruß Marvin

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

    Standard

    Die eigentliche Kommunikation steckt in der s7plc.php. Wenn du mit ReadBytes einen Bereich liest, kannst du mit dem ergebnis[0] auf das erste Byte zugreifen usw. Du musst dich überhaupt nicht darum kümmern wie die Kommunikation funktioniert. Du musst nur wissen wie ein String in der S7 abgelegt wird, und wie du in php dir einen php-String aus einzelnen Bytes zusammensetzen kannst.
    Du kannst mit der Klasse machen was du willst, ich verwende die sowieso nicht.
    Die Genialität einer Konstruktion liegt in ihrer Einfachheit – Kompliziert bauen kann jeder.

    (Sergei Pawlowitsch Koroljow, sowjetischer Konstrukteur von Raketen und Weltraumpionier)

  8. #148
    Registriert seit
    06.11.2003
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Super Danke für die Info

  9. #149
    Registriert seit
    12.07.2015
    Beiträge
    7
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi,
    I'm trying to toggle an ausgang (in stead of toggle a datablock bit, which works perfectly btw ) for at least one cycle.
    In my plc I have 48 ausgangen (Q0.0 to Q5.7)

    for example I want to change the value of Q0.4

    I have added a line to config_blocks.csv: "Plc1Ausgangen;Plc1;A;0,0;6" (Blockname;Station;Bereich;DbNummer;Startadresse;Anzahl)
    and to config_tags.csv: "LichtKeukenEiland;Plc1Ausgangen;bool;0;4" (Tagname;Blockname;Datentyp;Byteoffset;Bitoffset)
    (without the quotes off course)

    What am I doing wrong here?

  10. #150
    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
    In general it works to write an output (tested).

    This line should have a semicolon as separator, and not a comma
    From:
    "Plc1Ausgangen;Plc1;A;0,0;6"
    to:
    "Plc1Ausgangen;Plc1;A;0;0;6"


    Have you checked the cross reference to A0.4 / AB0 / AW0 / AD0 if they are accessed from anywhere else in your program?
    What type of CPU are you using, and what type of output card is at the first 6 output bytes?

    In my opinion it's not a good style to write directly to outputs from a visualisation. I would write to a defined datablock, and then assign the datablock bits to the output bits.
    Die Genialität einer Konstruktion liegt in ihrer Einfachheit – Kompliziert bauen kann jeder.

    (Sergei Pawlowitsch Koroljow, sowjetischer Konstrukteur von Raketen und Weltraumpionier)

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

    Jooster (05.09.2016)

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