Autor Thema: PHP-Programmierung u. Kommunikation via EASY_COM.dll  (Gelesen 80081 mal)

Offline Peter_Pig

  • Jr. Member
  • **
  • Beiträge: 48
PHP-Programmierung u. Kommunikation via EASY_COM.dll
« am: Mai 24, 2010, 13:57:51 Nachmittag »
Hallo,

weiss jemand ob man, über die COM-extension, von PHP aus auf den Moeller OPC-Server zugreifen kann?

Wie sieht es mit der Easy_Com.dll aus? Ist diese OLE-fähig?

Links zu Doku und/oder Beispiele sind herzlich willkommen.

Besten Dank im Voraus.

Peter

Offline holzwurm

  • Jr. Member
  • **
  • Beiträge: 36
Re: PHP-Programmierung u. Kommunikation via EASY_COM.dll
« Antwort #1 am: Juni 09, 2010, 23:47:28 Nachmittag »
Keine Ahnung ob der OPC-Server das kann.

Für die DLL hab ich mir ein kleines Programm geschrieben damit ich die easy über einen TCP-Port aus ansprechen kann. Das geht über PHP ganz hervorragend, ich baue mir damit gerade meine Visualisierung.

Gruss
Dietmar
« Letzte Änderung: Juni 28, 2010, 13:32:05 Nachmittag von admin »

Offline Peter_Pig

  • Jr. Member
  • **
  • Beiträge: 48
Re: PHP-Programmierung u. Kommunikation via EASY_COM.dll
« Antwort #2 am: Juni 19, 2010, 00:19:21 Vormittag »
Hi Dietmar,

da bist Du mir ja ein gutes Stück voraus.

Welche Sprache hast Du für dein Programm verwendet?

Ich wollte wissen ob PHP die DLL (wenn nicht den OPC Srever) direkt verwenden kann.

 :-\ ....  :-X .... mhhhmpf ....  ich kann es mir nicht verdrücken zu fragen : hast Du in Erwägung gezogen Dein "kleines Programm" zu veröffentlichen?

Danke im Voraus

Peter
« Letzte Änderung: Juni 28, 2010, 13:32:35 Nachmittag von admin »

Offline holzwurm

  • Jr. Member
  • **
  • Beiträge: 36
Re: PHP-Programmierung u. Kommunikation via EASY_COM.dll
« Antwort #3 am: Juni 19, 2010, 11:31:43 Vormittag »
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);

« Letzte Änderung: Juni 28, 2010, 13:32:50 Nachmittag von admin »

Offline Peter_Pig

  • Jr. Member
  • **
  • Beiträge: 48
Re: PHP-Programmierung u. Kommunikation via EASY_COM.dll
« Antwort #4 am: Juni 24, 2010, 01:25:01 Vormittag »
Danke!

Es ist toll, dass Du  mich (uns) dein "kleines Programm" testen lässt.

Leider bin ich seit einigen Tagen auf Auslandsreise, und meine U-Schiene mit 822er ist Zuhause geblieben.

Ich hatte auch Schwierigkeiten mit Hotel-WiFi...  :'( ... deshalb kommt es erst heute zum Download (andere haben es früher geschafft) und zur Antwort.

Mach Dir keinen Kopf wegen der Doku. Ich melde mich sobald ich ("nicht" oder "doch") weiterkomme.

Woran ich arbeite? ... ich will rausfinden was eine herkömmliche WAMP-Umgebung und ein EasyRelay zusammen alles anstellen können.

Ich bin der Klimmzüge der (herkömmlichen) SPS Programmierer satt.

Man hört voneinander.


Gruß

Peter

« Letzte Änderung: Juni 28, 2010, 13:33:09 Nachmittag von admin »

Offline holzwurm

  • Jr. Member
  • **
  • Beiträge: 36
Re: PHP-Programmierung u. Kommunikation via EASY_COM.dll
« Antwort #5 am: Juni 24, 2010, 22:35:41 Nachmittag »
Da kann ich dir am WE mal ein zwei Screenshots machen  ;) von dem was ich schon mit dem Wamp realisert habe.

Allerdings benutze ich das bisher nur:
 - um Einstellungen für die Wochenschaltuhren zu machen
 - Über ein Webinterface Rolladen und Licht zu betätigen
 - Temperaturen zu erfassen und anzeigen zu lassen

mal sehen was einem dann noch so alles einfällt.

Gruss
Dietmar

PS: Ich hab eins vergessen: Du brauchst natürlich die Runtimes von MS (Net irgendwas) damit das Program läuft.
« Letzte Änderung: Juni 28, 2010, 13:33:20 Nachmittag von admin »

Offline holzwurm

  • Jr. Member
  • **
  • Beiträge: 36
Re: PHP-Programmierung u. Kommunikation via EASY_COM.dll
« Antwort #6 am: Juni 25, 2010, 08:30:08 Vormittag »
hier mal wie besprochen zwei Screenshots.
« Letzte Änderung: Juni 28, 2010, 13:33:32 Nachmittag von admin »

Offline Peter_Pig

  • Jr. Member
  • **
  • Beiträge: 48
Re: PHP-Programmierung u. Kommunikation via EASY_COM.dll
« Antwort #7 am: Juni 26, 2010, 00:37:54 Vormittag »
 :o ... das sieht hervorragend aus!

 ;) ... was setzt denn "Party" für Einstellungen? (Klimaanlage=100%, Licht=10%, Rolladen=0%)

Spass bei Seite, es sieht echt gut aus.

Zeigen die Grundriss-Grafiken "nur" Zustände an oder lassen die auch schalten (z.B. durch Klick auf die Lampe).

Dann sehe ich auch eine Art Wetter-Vorhersage rechts unten ... ich denke wohl, dass sie aus irgend einem Web-Dienst stammen könnte. Kannst Du bereits diese Daten benutzen um z.B. die Rollläden runterzulassen wenn "Sonne" angesagt ist?

Ich kann es kaum abwarten deinen easyServer daheim zu testen....

Ich werde berichten.

Danke für Deine Hilfe.

Peter
« Letzte Änderung: Juni 28, 2010, 13:33:46 Nachmittag von admin »

Offline holzwurm

  • Jr. Member
  • **
  • Beiträge: 36
Re: PHP-Programmierung u. Kommunikation via EASY_COM.dll
« Antwort #8 am: Juni 26, 2010, 15:25:54 Nachmittag »
wie gesagt: ich bin gerade bei der Entwicklung,
nicht alles was da zu sehen ist hat schon eine Funktion und gefeiert wirt halt erst am Schluss  ;).

Die Hintergrund Graphik und die Icons sind getrennt. Die Icons liegen als Link vor dem Grundrissbild
und können zur direkten Ansteuerung genutzt werden.
Die Icons machen beides, zeigen einmal den Status ob die Lampe an oder aus ist
und über das Anklicken kann ich dann die Lampe zum Beispiel an bzw. aus schalten.
Auf dem Bild ist jetzt nur das Icon für AUS zu sehen, bei AN kommt dann ein Icon mit leuchtendem Symbol.
Bei den Rolladen läßt sich nur die jeweilige Aktion ansteuern.

Aussehen tut es schon ganz gut, steckt aber auch ne menge Arbeit dahinter bis man das ganze soweit hat.
Zumindestens wenn man keine Erfahrung im PHP-Programmieren hat.
Bisher hatte ich die ganze Konfiguration fest im Programmcode bzw. Konfigurationsdateien hinterlegt.
Da ich aber eh den mySQL im Wamp habe und mitlerweile auch ein wenig gelernt habe wie man damit arbeitet, bin ich gerade dabei nur noch den Rahmen für die Darstellung vorzugeben und die ganze Konfiguration in dem mySQL-Server abzulegen und konfigurierbar zu machen, sodass Anpassungen leicht möglich sind, allerdings liegen da noch ein paar kleinere Steine auf dem Weg.  

Das mit dem Wetter steht auch auf der Liste, aber ganz weit hinten, erstmal muss der Rest fertig werden.
Die Darstellung des Wetters war nur ne Spielerei die ich getestet hab.


gruss
Dietmar
« Letzte Änderung: Juni 28, 2010, 13:34:01 Nachmittag von admin »

Offline Peter_Pig

  • Jr. Member
  • **
  • Beiträge: 48
Re: PHP-Programmierung u. Kommunikation via EASY_COM.dll
« Antwort #9 am: Juni 27, 2010, 02:05:02 Vormittag »
Also, ich bin kein Genie im PHP/MySQL oder sonstwas, habe aber sehr viel damit rumgespielt, für andere Zwecke und würde mich sehr freuen, wenn ich Dir irgendwie behilflich sein könnte - vor allen Dingen im Gegenzug zu deiner bereits geleisteten Hilfe.

Abgesehen davon : meine Frage (und thema dieses "topics") Kann PHP auf den OPC-server zugreifen? scheint sich ja inzwischen erfreulicherweise zugunsten der DLL gelöst zu haben.

Vielleicht sollten wir die Diskussion (!?) in das geeignete Thema umsiedeln :

http://easy-forum.net/index.php?board=50.0

Die Entscheidung überlasse ich Dir.

Gruss,

Peter





« Letzte Änderung: Juni 28, 2010, 13:35:12 Nachmittag von admin »

Offline admin

  • Administrator
  • Full Member
  • *****
  • Beiträge: 149
Re: PHP-Programmierung u. Kommunikation via EASY_COM.dll
« Antwort #10 am: Juni 28, 2010, 13:38:12 Nachmittag »
Done !
Auf Euren Wunsch hin
von [Kann PHP auf den OPC-server zugreifen?]
 in  [PHP-Programmierung u. Kommunikation via EASY_COM.dll]
umbenannt und entsprechend verschoben.
LG

admin

Offline holzwurm

  • Jr. Member
  • **
  • Beiträge: 36
Re: PHP-Programmierung u. Kommunikation via EASY_COM.dll
« Antwort #11 am: Juni 28, 2010, 17:03:27 Nachmittag »
Prima,
herzlichen dank.
Dietmar

Offline Peter_Pig

  • Jr. Member
  • **
  • Beiträge: 48
Re: PHP-Programmierung u. Kommunikation via EASY_COM.dll
« Antwort #12 am: Juni 29, 2010, 23:41:50 Nachmittag »
 :) gut gemacht, Admin.

Dietmar, ich bin wieder glücklich daheim angekommen und hoffe ein paar Tage Zeit zum Testen zu haben.

Ich kann es garnicht abwarten.

 ;)

Gruss,

Peter

Offline Peter_Pig

  • Jr. Member
  • **
  • Beiträge: 48
Re: PHP-Programmierung u. Kommunikation via EASY_COM.dll
« Antwort #13 am: Juli 01, 2010, 21:16:04 Nachmittag »
So, nun ist es soweit : endlich habe ich Daheim mit deinem easyTCP-Server spielen können, Dietmar.

Mein "Versuchsaufbau" besteht aus :

1 x Easy 822 DC
1 x USB-CAB
1 x Laptop mit

    Vista Home Premium (SP2)
    WampServer 2.0 (Apache 2.2.8, PHP 5.2.6, MySQL 5.0.51b)
    easyTCP-Server 0.1 (Dietmar's kleines Programm)

Auf die 822er habe ich für diese Tests ein leeres Programm geladen, jedoch mit Remanenz auf MB1 bis 96. So kann ich mit der EasySoft im Nachhinein nachsehen ob das auch alles stimmt, was der easyTCP-Server berichtet.

Installation und Konfiguration des easyTCP-Servers hat easy (wie denn sonst?) geklappt.

Wie von Dir angekündigt hat es auch geklappt, die 822er Uhr mit "Read 0 clock" zu lesen und mit "Write 0 clock" (ohne Übergabeparameter) mit der PC-Uhr zu synchronisieren.

Merker und Merker-Byte habe ich auch lesen können, jedoch nur Merker schreiben. Vielleicht habe ich eine falsche Syntax verwendet um MB, MW und MDW zu schreiben. Du hattest ja angedeutet, dass das u.U. noch nicht ganz klappt.

Halt mich bitte auf dem Laufenden. Ich werde solange hiermit weiter experimentieren... vielleicht kann ich ja irgendwann etwas vorzeigen.

Besten Dank,

Peter

$easyserver= "127.0.0.1"; //Serveradresse
 $easyport = "8000";
 
  
 $fp = @fsockopen($easyserver, $easyport, $errno, $errstr, 3);
 
 If ($fp == False){
 
           echo "$errstr ($errno) <br />";
 
 }else{
 
         if(isset($_GET["anw"])){

       $out = $_GET["anw"];
       fwrite($fp, $out." \n");
      
echo fread($fp, 255);

       }else{

       $out = "Read 0 clock \n";
       fwrite($fp, $out);
      
echo fread($fp, 255);
      }
      fclose($fp);
 }
 
?>

Einfach die gewünschte Anweisung als query-string an die URL hängen, z.B.: ?anw=Read 0 M1
« Letzte Änderung: Juli 01, 2010, 23:01:09 Nachmittag von Peter_Pig »

Offline holzwurm

  • Jr. Member
  • **
  • Beiträge: 36
Re: PHP-Programmierung u. Kommunikation via EASY_COM.dll
« Antwort #14 am: Juli 03, 2010, 10:45:19 Vormittag »
Hallo Peter,

schön das es so einfach geklappt hat.
Es kann sein das ich das Schreiben noch nicht für alle Bereiche realisert habe bzw. noch ein Bug drin ist. Ich habe bisher nur die Dinge fertig gestellt bzw. getestet, die ich im Moment selber brauche.

Wenn ich dazu komme werde ich heute Abend mal in den Quellcode schauen, wie das für die MB aussieht.

Was steht denn in dem DOS-Fenster von dem TCP-IP-Server bzw. welche Meldung bekommst du wenn du den Befehl absetzt?

Gruss
Dietmar

PS: Aber die MB bzw. MW steht mit als nächstes auf dem Plan, da ich das für meine Analogdimmer brauche.