-> Hier kostenlos registrieren
hab ich mir auch gedacht. Kann man Siemens mit so einem Thema konfrontieren?
Zuletzt bearbeitet:
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>S7 PLC Testseite</title>
<script src="http://code.jquery.com/jquery-2.1.0.min.js"></script>
</head>
<body>
<h1>S7 PLC Testseite</h1>
<input type='button' value='Ein / Aus' class='schalter' typ='DB' db='100' byte='0' bit='0' bit-value='1' />
<script>
$(document).on('click', 'input.schalter', function() {
var typ = $(this).attr('typ');
var db = $(this).attr('db');
var byte = $(this).attr('byte');
var bit = $(this).attr('bit');
var bitval = $(this).attr('bit-value');
$(document).load('plc.php?function=bit', {'typ':typ, 'db':db, 'byte':byte, 'bit':bit, 'bit-value':bitval});
$(this).attr('bit-value', bitval^1); // xor bit to toggle value
});
</script>
<br /><br />
<input type='button' value='Ein' class='taster' typ='DB' db='100' byte='0' bit='0' bit-value='1' />
<input type='button' value='Aus' class='taster' typ='DB' db='100' byte='0' bit='0' bit-value='0' />
<script>
$(document).on('click', 'input.taster', function() {
var typ = $(this).attr('typ');
var db = $(this).attr('db');
var byte = $(this).attr('byte');
var bit = $(this).attr('bit');
var bitval = $(this).attr('bit-value');
$(document).load('plc.php?function=bit', {'typ':typ, 'db':db, 'byte':byte, 'bit':bit, 'bit-value':bitval});
$(this).attr('bit-value', bitval); // xor bit to toggle value
});
</script>
</body>
</html>
<?php
include_once ("s7plc.php");
$PLC_IP = "0.0.0.0"; // IP-Adresse der SPS
$plc = new S7PLC("S7300", $PLC_IP, 0, 2, "TestPLC");
try {
if ($plc->Open() == 0) {
if ($_GET['function'] == 'bit') {
// Write Bits
$typ = isset($_POST["typ"]) ? $_POST["typ"] : 0;
$db = isset($_POST["db"]) ? $_POST["db"] : 0;
$byte = isset($_POST["byte"]) ? $_POST["byte"] : 0;
$bit = isset($_POST["bit"]) ? $_POST["bit"] : 0;
$bitval = isset($_POST["bit-value"]) ? $_POST["bit-value"] : 0;
$plc->WriteBit($typ, $db, $byte, $bit, $bitval);
}
} else {
echo "<p>Konnte keine Verbindung zur SPS (IP:".$PLC_IP.") aufbauen!</p>\n";
}
} catch (Exception $e) {
echo "<p>Konnte keine Verbindung zur SPS (IP:".$PLC_IP.") aufbauen!</p>\n";
}
?>
$plc = new S7PLC('S7400', 'xxx.xxx.xxx.xxx', 0, 3, 'S400 Test');
$plc->Open();
$plcdata = $plc->ReadBytes('A', 0, 81, 1);
$plc->Close();
$byte = ascii_to_bin($plcdata);
$bit = substr($byte, 0, 1);
echo $bit;
$.post("deine.php", {bit: 1}, function(data) {
//alles was du in der php Datei ausgibst landet in data
alert(data);
//kannst du auch schön in der php Dateu als json konvertieren und mit "data = $.parseJSON(data);" hier parsen.
});
$(document).ready(function() {
loadData();
function loadData() {
$('#output').load('plc.php?function=read-bit', { 'datatyp':'A', 'db':0, 'byte':2, 'bit':0}, function() {
setTimeout(loadData, 250);
});
}
});
[Datenbereich]
DbNummer;Start;AnzahlBytes
100;0;20
[Symbole]
Symbol; Typ; Byteoffset; Bitoffset
MesswertReal1; Real; 0; 0
MesswertReal2; Real; 4; 0
BitMeldung1; Bool; 8;0
BitMeldung2; Bool; 8;1
BitMeldung3; Bool; 8;2
ZustandInt1; Int; 10;0
ZustandInt2; Int; 12;0
{
"MesswertReal1": 2.5,
"MesswertReal1": 123.4,
"BitMeldung1" : true,
"BitMeldung2" : false,
"BitMeldung3" : false,
"ZustandInt1" : 123,
"ZustandInt2" : 456
}
Ich habe mal einen kleinen Zusatz für die s7plc-Klasse programmiert, nach dem Schema was ich in #107 vorgeschlagen hatte.
Für die Konfiguration gibt es drei CSV-Dateien:
1) Stationskonfiguration mit Name, Ip-Adresse, Rack und Slot
2) Blockkonfiguration: Das sind die Blöcke die aus der SPS gelesen werden sollen. Ein Block kann maximal 222 Bytes groß sein
3) Tagliste: Hier werden die symbolschen Tagnamen aufgelistet. Die Adressen beziehen sich auf die Offsets der Blockkonfiguration
Bei einer Anfrage werden alle Tags der Tagliste abgefragt und die Daten als json-Datensatz zurückgegeben.
Schreiben funktioniert ebenfalls über json-Datensatz.
In der Demo gibt es eine Testseite in der alle konfigurierten Tags abgefragt werden und die Daten in einer Tabelle aufgelistet werden. Es können auch in der Tabelle Werte geschrieben werden.
Benötigt man nur eine einfache Liste um sich ein paar Werte anzusehen oder einzustellen, muss nur noch parametriert werden, d.h. die Einträge in den csv-Dateien anpassen.
Wenn man sich auf seinem Android-Gerät einen Webserver installiert (gibts als App), kann man das Ganze direkt auf seinem Smartfon/Tablet etc. laufen lassen.
Für Bavilo ist auch eine Bit-Auslese Funktion enthalten ;-)
Das Programm ist nur als - wenn auch funktionsfähiges - Beispiel zu verstehen! Die Verwendung erfolgt auf eigene Gefahr!
Anhang anzeigen 24091
Was soll den Qualität darstellen?
[FONT=fixedsys]SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
var data = JSON.parse(xmlhttp.responseText);
[/FONT][FONT=fixedsys]-----------^[/FONT]
"<br /> <b>Fatal error</b>: Call to undefined function socket_create() in <b>s7plc.php</b> on line <b>115</b><br /> "
Wir verwenden essentielle Cookies, damit diese Website funktioniert, und optionale Cookies, um den Komfort bei der Nutzung zu verbessern.
Siehe weitere Informationen und konfiguriere deine Einstellungen