Hallo Peter,
da meine Programmierrärigkeiten bereits einige Jahre (ups die sind sogar schon 2-Stellig) zurück liegen und ich keien Lust hatte mich in C einzuarbeiten, hab ich das mit Visual Basic 2008 gemacht. Damit ist die ganze TCP-IP-Kommunikation sehr einfach zu realisieren.
Ich kann das Programm zur Verfügung stellen, ABER ich hab im Moment nur die Dinge realisert bzw. getestet die ich bisher benötigt habe und nicht alle Funktionen der DLL, die Fehlerbearbeitung ist sicherlich auch noch zu verbessern.
Da es keine Dokumentation gibt, werde ich da erst noch ein zwei Zeilen zu Papier bringen müssen wie das ganze genutzt werden kann.
Hier eine Kurzform, für eine ausführlichere Beschreibung brauche ich etwas mehr Zeit, da komme ich aber dann erst nächste Woche zu.
Der easyServer ist ein Standalone-Anwendung die einfach nur gestartet werden muss.
Dazu gibt es noch ein XML-File über das die Konfiguration vorgenommen werden kann
(Achtung: In der Version die ich hochgeladen hab sind ein paar der Parameter für Tests abgeschaltet, ich muss das ganze nochmal neu kompilieren mit den Parametern dafür gilt aber das gleiche wie für die Dokumentation)
Dei Anwendung geht davon aus das die Datei im gleichen Pfad liegt und auf den angebenen Namen hört. Einstellungen für den Comport, die Baudrate und für das Logfile können vorgenommen werden. Die Parameter für den TCP-Port werden im Moment ignoriert und es ist der Port 8000 fest eingestellt. Die DLL muss auch in dem Verzeichnis von dem Programm liegen.
Wenn der Server läuft einfach eine Telnet Verbindung auf den Port 8000 herstellen und dann können Befehle an die easy gesendet werden.
Die Verbindung geht aus PHP direkt mit dem Befehl "fsockopen" und die einzelnen Befehle können dann über "fwrite" gesendet bzw "fread" gelesen werden.
Die Synthax ist dabei wie folgt:
<Befehl> <NetId> <Baustein> <Wert>
<Befehl> kann READ oder WRITE lauten.
<NetID> ist die ID der easy, also 0 für die lokale oder 1-8 für die easys im Net.
Achtung hier findet keine im Vorfeld keine Überprüfung statt ob dei ID vorhanden ist.
<Baustein> Hier wird dann der Baustein ausgewählt.
Mögliche Werte sind zur Zeit:
CLOCK - auslesen oder setzen der Uhr (kein Parameter bei Write setzt die Uhr auf die PC-Zeit)
Mx - Merker lesen oder setzen, bei write muss dann noch der <Wert> ergänzt werden
Ix - Eingänge lesen (write nicht möglich)
Qx - Ausgänge lesen (write nicht möglich)
Rx und Sx für die Erweiterungseingänge und Ausgänge geht auch
MWx, MDx, MBx sind auch möglich, habe ich aber noch nicht vollständig getestet.
Wochen und Jahresschaltuhren gehen auch, da muss ich aber die Synthax nochmal raussuchen.
Zurück wird dann folgendes geliefert <Errorcode> <Ergebnis>
<Errorcode> - liefert 0 für OK, ansonsten die Errorcodes der DLL bzw. weitere Werte bei Synthaxfehlern
<Ergebnis> - da steht halt das drin was man wissen will bzw. eventuell ein Text zum Errorcode.
Viel Spaß beim Testen.
Sobald ich das mit der Visualisierung fertig habe werde ich das Projekt hier mal insgesamt fertig habe werde ich das hier vorstellen, da ich das aber in meiner kargen Freizeit erstelle, kann das dauern.
Was wirst du mit deinem Programm realisieren, vieleicht kann man sich ja gegenseitig befruchten?
Gruss
Dietmar
PS: wenn du die Befehle per PHP sendest muss am Ende jedes Befehls noch ein " /n" angehängt werden, sonst wartet der Server auf weitere Eingaben.
hier ein kleines Beispiel um die Uhrzeiten zu lesen.
$nr_of_easyclients = 4;
$easyserver= "xxx.xxx.xxx.xxx"; //Serveradresse
$easyport = "8000";
$fp = fsockopen($easyserver, $easyport, $errno, $errstr, 30);
If ($fp == False)
{
echo "$errstr ($errno) <br /> \n";
}
else
{
for ($easy=1; $easy<= $nr_of_easyclients; $easy++)
{
$out = "Read " .$easy. " clock \n";
fwrite($fp, $out);
echo fread($fp, 26);
}
}
fclose($fp);