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

Seite 14 von 16 ErsteErste ... 41213141516 LetzteLetzte
Ergebnis 131 bis 140 von 156

Thema: PHP + Siemens PLC

  1. #131
    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 irgendeiner Version hier im Thread waren auch diverse Konvertierungsfunktionen enthalten, um die Werte aus dem Ergebnis-String zu extrahieren.

    Für DINT sollte es sowas sein:
    Code:
    function getS32At($str, $pos)
    {
    	$val = unpack("l", $str[$pos + 3] . $str[$pos + 2] . $str[$pos + 1] . $str[$pos]);
    	return $val[1];	
    }
    Aufrufen dann z.B. mit:
    Code:
    $data = $plc->ReadBytes('DB', 23, 0, 4);
    $wert = getS32At($data, 0);
    Das sollte dann der Wert von DB23.DBD0 als vorzeichenbehafteter Integerwert sein.

  2. #132
    Registriert seit
    21.09.2011
    Beiträge
    13
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Juhu, mit der Konvertierungsfunktion kommt der korrekter Wert nun.
    Danke, danke, danke.

    Dass dies ein Binärstring ist, warum bin ich da nicht selber drauf gekommen?

    Danke nochmals, liebe Grüße
    Frank

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

    Standard

    Hello guys,

    I'm not a plc programmer nor a pc programmer (just a "power"-electrician) so this might be a newbie question for this forum (but i still remember some plc&pc programming from a long time ago):

    For my domotica at home I used this for example for a light controlled with one pushbutton:

    dom.jpg

    Now my question:

    Do i HAVE TO work with data blocks to read and send my I/O via ethernet on my php-server?
    If yes: how would you program it into your plc?
    I suppose like this:

    dom2.jpg
    Now the question: how would you edit the config_blocks.csv and the config_tags.csv files to make this particular one-pushbutton-light working?

    And if i DO NOT HAVE to use DataBlocks to read/write my I/O: How would you edit the .csv and/or .php files to make this particular function work?

    Sorry for my english confusion but my German language is even far worse
    Geändert von Jooster (14.11.2015 um 12:58 Uhr)

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

    Standard

    I would recommend to use datablocks, because then you have a defined interface between the program and the HMI.
    You can use the datablock address in the same manner as you have used the digital input.
    For example, if you use DB1 for HMI interface, and you add at address DBX0.0 a command to toogle the light, then you could replace I0.0 with DB1.DBX0.0 and it should work.

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

    Jooster (17.11.2015)

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

    Standard

    Thank you that works really nice


    Is there an easy way to just read/write a bool/bit in the DB1? (without using AJAX or JSON or any complicated PHP stuff )

    something like:


    Code:
    <html>
     <head>
      <title>PHP Test</title>
     </head>
     <body>
     
     <?php
     include 's7plc.php';
     echo "The current state of this light is: " ReadBytes( "DB", "1", "0", "0");
     echo "<a href='' onclick=" WriteBit( 'DB', '1', '0', '0', '1') ">Switch light on</a>";
     ?>
     
     </body>
    </html>
    Geändert von Jooster (17.11.2015 um 20:35 Uhr)

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

    Standard

    You can do it in this way. Tha Ajax/Json stuff is only on top of the basic connection class.

    See examples in previous posts in this thread, like this:
    PHP + Siemens PLC

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

    Standard

    thanks the WriteBit function worked out of the box
    the ReadBytes function i had to add this middle line to s7plc.php:

    Code:
    $recv = substr ($recv,  $offs + 25);
    $recv = str_pad(decbin(ord($recv)),8, "0", STR_PAD_LEFT);
    return $recv;

  9. #138
    Registriert seit
    01.12.2015
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Zusammen,

    ich habe leider ein Problem mit dem Script (S7sps.php) von Thomas Wiens (Version vom 20.1.2010).

    Auslesen und schreiben von Bits klappt wunderbar. Habe nur ein Problem Bytes zu schreiben wenn ich einen "Value" übergebe schreib er den Zahlenwert auch in das angegebene Byte.

    Aber, leider schreibt er nur bis zur Zahl 9 (also die ersten 4 Bits). Im zweiten Bit Paket (4-7) beschreibt er einfach mal das Bit 4 und 5 auch wenn ich nur eine "1" übergebe.

    z.B.

    Wert = 1 = 00110001

    Wert = 9 = 00111001

    Wert = 10 = 00110001

    Hab schon ein paar Sachen im Script (S7sps.php) ausprobiert. Aber konnte leider nichts erreichen.

    Vielleicht kann mir ja hier jemand weiterhelfen?

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

    Standard

    Wie packst du die Daten denn in das Sendetelegramm? Wenn ich mich recht entsinne, hatte ich bisher nur Funktionen um 16 Bit Integer zu schreiben.

    Du brauchst zwei passende Funktionen die auch nur ein 8-Bit Integer schreiben, wie
    Code:
    function putU8($val)
    {
    	$str = pack("C", $val);
    	return $str;
    }
    
    function getU8At($str, $pos)
    {
    	$val = unpack("C", $str[$pos]);
    	return $val[1];
    }
    und dann schreiben mit
    Code:
    $write_packet = "";
    $write_packet .= putU8(100);
    $write_packet .= putU8(200);
    $plc->WriteBytes("DB" , 1, 0, $write_packet);
    schreibt 100 an DB1.DBB0 und 200 an DB2.DBB1.

    Das funktioniert.

  11. #140
    Registriert seit
    01.12.2015
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke für die schnelle Antwort!!

    Wenn du der Autor dieses Scripts bist, muss ich dir auch erstmal danke. Bin gerade erstmal richtig damit am arbeiten aber läuft wirklich super und ist für mich bis jetzt konkurrenzlos.

    Wenn es auch mal eine neuere Version gibt bin ich sehr dran Interessiert.

    Aber jetzt mal zum Problem.

    Eigentlich wollte ich auch einen 16 Bit Integer schreiben Dachte aber die Funktion wäre hauptsächlich dafür gedacht einzelne Bytes zu schreiben.

    Aaaaaber... Jetzt läuft es. Dank dir! Top. Vielen Dank!

    Der Fehler war eigentlich ganz simpel. Bis jetzt musst ich mich noch nicht mit dem packen von Daten beschäftigen.

    $sps_value = pack("n", $sps_value);
    $wert = $plc->WriteBytes($sps_type, $sps_DB, $sps_byteadr, $sps_value);

    Problem gelöst. Nochmals Danke!!

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