www.mikrocontroller.net

Forum: PC-Programmierung RS232 mit PHP


Autor: Jonny Obivan (-geo-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

Immer wieder stellt sich die Frage, wie man eine mikrokontrollerbasierte 
Schaltung an das Internet "anschließen" kann. Da die meisten 
Mikrokontroller per serieller Schnittstelle mit der Außenwelt 
kommunizieren, scheint die Anbindung der seriellen Schnittstelle (RS232) 
ans Internet eine spannende Option zu sein. Es gibt hierbei eine menge 
Möglichkeiten. Eine Möglichkeit ist durch so genannte CGI Programme 
gegeben, die auf dem Server liegen und dann durch einen Browseraufruf 
eines Clients gestartet werden. Diese Programme werden meist mit c 
geschrieben.

Da ich im Rahmen eines kleineren Projekts auf CGI Programme verzichten 
wollte und hierbei auf die simple und höchst flexible Sprache PHP 
zurückgreifen wollte, recherchierte ich im Netz nach Möglichkeiten die 
serielle Schnittstelle per PHP anzusprechen. Nach längerer Suche 
entdeckte ich hie und da Codeschnipsel die aufzeigten wie so etwas geht. 
Da diese Suche recht mühsam war und ich denke, dass auch andere Leute 
Interesse an dieser Option haben könnten, stelle ich die Lösung mal hier 
ins Netz.

Nach längerer Herumprobiererei hatte ich alles zusammen und packte die 
Erkenntnisse in 2 kleine Funktionen: Eine zum Senden und eine zum 
Empfangen. Am Schluss zeige ich beispielhaft einen Aufruf dieser 
Funktionen.

Hinweis: Es kann selbstverständlich nur die serielle Schnittstelle des 
Servers angesprochen werden! Für einen Zugriff auf die Schnittstelle 
eines Clients hat man keine Zugriffsrechte!



<?php

//Funktion zum Einstellen der seriellen Schnittstelle

    function rs232init($com,$bautrate)
    {
    `mode $com: BAUD=$bautrate PARITY=N data=8 stop=1 xon=off`;
    }

//Funktion zum Senden


    function senden($comport,$zeichen)
    {

         $fp = fopen ("$comport", "w+");
         if (!$fp)
          {
             echo "Port zum Schreiben nicht geöffnet!";
          }
        else {
                fputs ($fp, $zeichen);
                 fclose ($fp);
                }
    }

    //Funktion zum Empfangen

    function lesen($comport2,$sekunden)
    {

       $buffer = "";

       $fp2 = fopen ("$comport2", "r+");
         if (!$fp2)
         {
       echo "Port zum lesen nicht geöffnet";
       }
    else
      {
      sleep($sekunden);
             $buffer .= fgets($fp2, 4096);
            }
          return $buffer;
          fclose ($fp2);
}

// Beispielaufrufe

   rs232init(com2,"9600"); // Com2 öffnen mit Bautrate 9600 Baut
   senden(com2,"hallo"); // den Text “Hallo” auf den comport 2 schreiben
   $lese = lesen(com2,"2"); // 2 Sekunden lang Daten von Comport2 
empfangen und in die Variable $lese schreiben
  echo $lese;   „“ //Variable $lese ausgeben

?>

Autor: Jonny Obivan (-geo-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ah ich sehe grade das bei den Beispielaufrufen die 
Anführungsstrichelchen bei com2 fehlen. also "com2" schreiben beim 
Funktionsaufruf.

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nur ein paar infos am rande.........

http://www.mikrocontroller.net/articles/Ports_benu...

da hab ich das ganze vor einiger zeit mal beschrieben.. zumindest unter 
linux gehts so

http://www.mikrocontroller.net/articles/Ports_benu...

da ist das windows-zeugs beschrieben... zumindest kann mans so für alle 
ports machen.. für die rs232 gibts extra funktionen zum initialisieren.. 
habe ich hier im forum irgendwann mal schon beschrieben...

ob ein fopen("com1") wirklich immer geht bezweifle ich... lieber 
fopen("\\.\com1")... zumindest meint das die knowledge-base von m$

Schnittstellen-initialisierung unter posix habe ich oben beschrieben.. 
wie das unter windows eleganter geht weis ich nicht...

73

Autor: Latissimo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, ein sehr interessanter Beitrag!!!

Wenn ich mit einem yC digitale Ausg. schalten will, wie mache ich die 
Übertragung per seriell? (Hardwaremäßig ist mir das klar, wie ich zb. 
von RS232 auf UART komme...)

Ich meine, werde ich dann einfach ein Byte senden, in dem die 
Informationen als einzelne Bits gesendet werden, die ich dann auf 
einen(oder von mir aus auch mehrere) Ports schreibe?

Oder habe ich mit nem yC auch die Möglichkeit, strings zu vergleichen? 
Geht sowas mit C? dann brauche ich bestimmt entsprechende Headers oder?

Autor: mooo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Funktioniert das mit dem ansteuern der schnittstelle auch mit xammp 
unter windows? habe es grade versucht, hat irgendwas noch nicht 
geklappt. was genau muss ich denn an dem code noch verändern um comport3 
anzusprechen. außerdem verstehe ich nicht an welcher stelle $comport und 
$zeichen als eine variable bestimmt wurden?

mfg

Autor: verzweifelter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mhh bei mir krieg ichs einfach nicht zum laufen.. jedesmal Permission 
denied... muss ich evtl irgendwelche Rechte setzen, dass ich überhaupt 
auf die rs232 zugreifen kann?

Autor: vielleicht so (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Firma (www.ajaxup.com) hat einen Proxy geschrieben, der einen 
Socket auf RS232 umleitet. Ja. man kann das auch selbst schreiben, aber 
bis man irgendwie komfortabel arbeiten kann geht doch einige Zeit weg. 
Ich hab dann einen Webserver fuer einen Atmel gescrieben, der ueber die 
serielle Schnittstelle laeuft. Im wesentlichen geht es darum, auf GET 
Anfragen des Browsers mit einer Webseite zu antworten. In 95% aller 
Faelle ist eine Ethernetanbindung Overkill.

Autor: verzweifelter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohje ich versteh nur Bahnhof.. ich hab nur ein paar PHP und C 
Kenntnisse.
Eigentlich will ich am MC eine Temperatur auswerten und diese dann über 
UART an die RS232 schicken (funktioniert schon)
Nun will ich diese irgendwie in php reinkriegen das ich ne kleine page 
machen kann auf denen die aktuellen Temperaturen ausgegeben werden.. am 
besten möglichst unkompliziert. =)

Autor: verzweifelter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich suche immernoch, hab mittlerweile gefühlte 5000 Seiten durch und den 
Code in zig abgewandelten Varianten wiedergefunden, es gibt sogar Leute 
bei denen es auch nicht funktioniert, aber eine vernünfige Antwort woran 
es liegt hab ich bis jetzt noch nicht gelesen.. was ne Schei*e

Autor: vielleicht so (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PHP ist serverseitig. Da ist nichts mit schicken, sondern eher mit 
abholen, beim Server. Du benoetigst einen Webserver, der die Anfragen an 
einen Server auswertet und dabei die gewuenschten Daten zurueckliefert.

Autor: Jonny Obivan (-geo-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe den Code bislang nur auf einem Rechner laufen gehabt. Dort hat 
der Code funktioniert. Ich benutze einen USB-->RS232 Wandler. Ob das 
einen Unterschied zur konventionellen RS232 macht, weiß ich allerdings 
nicht. Ferner nutze ich den Apache Webserver den es als XAMPP 
Komplettpacket gibt. Warum der Code teilweise bei anderen Leuten nicht 
funktiniert weiß ich nicht. Diese Frage konnte auch im Laufe einiger 
Diskussionen nicht gelöst werden. Wenn jemand eine eindeutige Antwort 
hat, wäre das natürlich toll wenn er die hier posten könnte (würde mich 
sehr interessieren).

Wenn PHP nicht funktioniert bietet sich die Programmierung eines 
CGI-Programmes an, welches dann die RS232 abfragt. Das habe ich jedoch 
bislang noch nicht gemacht. Das CGI Programm entspricht einer EXE Datei, 
die in ein entsprechendes Verzeichnis des Webservers kommt und dann 
aufgerufen wird. Kann man mit C++, VB oder so programmieren.

Gruß
Jonny

Autor: uzfg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es funktioniert warscheinlich wegen der Berechtigung der RS232 
Schnittstelle nicht, entweder der Webserveruser muß als Gruppe berechtig 
sein, die Schnittstelle zu benutzen, oder es muß ein chown auf den 
Webbenutzer gemacht werden.

Autor: Jonny Obivan (-geo-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ uzfg,

wie kann ich dem Server denn beibringen, dass er die Berechtigung hat 
auf die RS232 zuzugreifen? Ich nutze Windows XP.

Autor: verzweifelter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@vielleicht so

Das ist soweit klar, meine Idee ist folgende: Im Keller will ich die 
Temperaturen von Heizung, Solarkollektoren usw. aufnehmen (mit dem MC)
Die einzelnen Temperaturwerte wollte ich dann an die serielle 
Schnittstelle schicken. (möglicherweise an einen Server im Keller).
Die Daten die ich aufnehme wollte ich über eine Hausinterne "Homepage" 
allen zugänglich machen, soweit der Plan, bin natürlich immer offen für 
andere Ideen. Diese lag nur nahe weil ich schonmal ein bischen was in 
PHP gemacht habe und ich es für eine gute Möglichkeit halte die Daten 
quasi zu verteilen.

@Jonny

Vielleicht liegt es auch an der PHP-Version bzw. der des Xammp oder die 
Rechte die Xampp hat um auf irgendwas zuzugreifen, das hab ich in nem 
anderem Forum aufgeschnappt (natürlich gabs da auch keine Lösung)

@all die Suchen

Evtl. könnte auch dies eine Alternative sein:

http://www.easyvitools.com/phpserial/index.html

"This is a loadable extension for PHP running on Windows implementing 
serial port handling and communications. Once installed in PHP 
environment you can programm PHP applications to control serial device 
hosted on server from remote location; these devices can be anything 
from video switcher, cameras pan/tilt, ham radios, media players, home 
automation boxes, GSM modems/terminals (send/receive SMS), only your 
imagination and needs are the limits."

hierbei handelt es sich um eine PHP-Erweiterung, so daß man über 
Funktionen auf die Schnittstelle zugreifen kann. Habs aber noch nicht 
ausprobiert..

Autor: verzweifelter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
JA JA JA!!! Ein erster Erfolg... ich empfange was, zwar ein großer 
Haufen Scheisse und Zeichen aber immerhin in einer Reihenfolge ;)... 
aber woran kann das nun wieder liegen? ich schicke einfach einzelne 
Zeichen A-Z 1-9 und mit der Funktion nehm ich nen string auf von 512 
zeichen...

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ich schicke einfach einzelne Zeichen A-Z 1-9 und mit der
> Funktion nehm ich nen string auf von 512 zeichen...

Hat dein Mikrocontroller genug RAM? 512 Zeichen belegen immerhin 
mindestens 512 Bytes, dein Controller sollte also wenigstens 1kB RAM 
besitzen.

Autor: verzweifelter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also ich hab nur so einen codeschnippsel mit dem man einzelne chars 
schicken kann.. und das mach ich halt immer nacheinander.. hab mal ein 
bischen rumgetestet.. das einzige was ich rausfinden konnte ist das wenn 
das serielle kabel nicht eingestöpselt ist auch nichts ankommt.. hmm 
weiss nicht so richtig wo ich ansetzen sollte hab mir die codes 
zusammengeklaut.. hilft nichts, muss ich mich möglicherweise doch mit 
befassen ;)

Autor: Joachim R. (bastelbaer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt für PHP auch noch die dio-Erweiterung (http://de2.php.net/dio). 
Damit wirds zumindest unter Linux einfacher die serielle Schnittstelle 
anzusprechen, obs auch unter Windoof läuft, weiss ich allerdings nicht. 
Hier mal ein Beispiel:

  $fd = dio_open('/dev/ttyS0', O_RDWR | O_NOCTTY | O_NONBLOCK);
  dio_fcntl($fd, F_SETFL, O_SYNC);
  dio_tcsetattr($fd, array('baud' => 9600,
                           'bits' => 8,
                           'stop'  => 1,
                           'parity' => 0));

  $Sende="Dies ist ein Test";
  dio_write($fd,$Sende);
  dio_close($fd);

Lesen geht entsprechend mit dio_read.

Autor: verzweifelter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was müsste man denn statt /dev/ttyS0 eintragen? com1 oder sowas?

Autor: eni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.phpclasses.org/browse/package/3679.html

lesen klappt mit dieser klasse gut unter windoof nur mit senden ist 
mühsam..

doch fast alle klassen in diesem stil bauen auf dio auf.. weiss nicht ob 
das in xampp mit drin ist.. musst vielleicht php neu kompilieren, mit 
--enable-dio

http://www.php.net/manual/de/install.windows.building.php

Autor: eni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DAS ist die Lösung für dich: 
http://www.easyvitools.com/phpserial/index.html (funktioniert bei mir 
mit nem atmel und windows super)

Autor: Jonny Obivan (-geo-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Eni,

herzlichen Dank für den Link! Ich habe mir das Packet mal runtergeladen. 
Wenn ich mal Zeit finde, werde ich einen Test durchführen. Das Ganze ist 
auch sehr gut dokumentiert. Ist sicher für einige Leute interessant.

Grüße
Jonny

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> JA JA JA!!! Ein erster Erfolg... ich empfange was, zwar ein großer
> Haufen Scheisse und Zeichen aber immerhin in einer Reihenfolge ;)...
> aber woran kann das nun wieder liegen? ich schicke einfach einzelne
> Zeichen A-Z 1-9 und mit der Funktion nehm ich nen string auf von 512
> zeichen...

[...]

> das einzige was ich rausfinden konnte ist das wenn
> das serielle kabel nicht eingestöpselt ist auch nichts ankommt..

Da muss ich doch sofort an verschiedene Baudraten bei Sender/Empfänger 
denken... evtl. auch andere Einstellungen zu Start-, Stop- oder 
Parity-Bits.

Autor: Martinkoell (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey Jonny, tolle Sache was du da ausgearbeitet hast!
Aber ich hab da eine Frage:

Sagen wir ich lasse ein PHP-Script in einem eigenen Frame rennen, das 
dauernd die RS232 ausliest. Nun, nach 30 Sekunden wird das Ganze sowieso 
abgebrochen, da ja die Max. Runtime erreicht ist und es wird auch nie 
Information dargestellt, weil geparst wird die Seite ja erst, NACHDEM 
der ganze PHP-Quellcode durchgearbeitet wurde..
Was soll ich da machen?
Doch mit Java?
(Frameset deswegen, damit die Leute trotzdem noch auf der Page arbeiten 
können. Liegt dann was am COM an, wird n <meta> gotourl ausgeführt und 
im URL-GET die Variable übertragen.

Bitte HILLFFEEE!!! xD

Lg Martin

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Aktivitäten für die serielle Schnittstelle in kleine, kurze 
PHP-Blöcke zerlegen und mit einem clientseitigen JavaScript diese per 
XMLHttpRequest aufrufen.

Dann ist kein Neuladen und auch kein Frameset erforderlich.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielleicht so wrote:
> Eine Firma (www.ajaxup.com) hat einen Proxy geschrieben, der einen
> Socket auf RS232 umleitet. Ja. man kann das auch selbst schreiben, aber
> bis man irgendwie komfortabel arbeiten kann geht doch einige Zeit weg.
Da braucht man nix zu programmieren für, da braucht man lediglich socat 
auf der Kommandozeile aufzurufen...

Rufus: Im Gegenzug schließt man mit dem AJAX-Gerümpel aber auch alle 
nicht topaktuellen Browser aus... ob das für so ne Minianwendung Sinn 
macht, muss man abwägen.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Im Gegenzug schließt man mit dem AJAX-Gerümpel aber auch alle
> nicht topaktuellen Browser aus...

Definiere "nicht topaktuell". Gibts noch Leute, die mit Mosaic unterwegs 
sind? XMLHttpRequest sollten doch eigentlich alle Browser der letzten 
... hmm ... fünf Jahre oder so kennen.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Internet Explorer und Firefox und Opera sind aber nicht "alle" Browser.
Viele benutzen noch gerne Lynx, W3M, Links und andres konsolenbasiertes 
Zeugs, weils superschnell ist. Ansonsten haben (immer noch) viele 
JavaScript abgestellt und so weiter.
Wenns nicht ABSOLUT nötig ist, lieber nen Bogen um Ajax drumrum 
machen...

Autor: Joachim Mueller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auweia, ist wohl doch nicht so einfach. Ich würde auch gerne auch 
serverseitig via PHP auf der RS232 Daten ausgeben. (Soll eine 
Web-Messenger werden. Infos über Webseite an LED Lauflicht). 
Programmieren bin ich leider nicht so fit. Gibts sonst noch Ideen?

Danke
joachim

Autor: Feadi F. (feadi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
<?php

exec('mode com1: baud=9600 data=8 stop=1 parity=n xon=on');
// execute 'help mode' in command line of Windows for help

$fd = dio_open('com1:', O_RDWR);

while (1) {

  $data = dio_read($fd, 256);

  if ($data) {
     echo $data;
  }
}

?>

Code von: http://www.php.net/manual/en/function.dio-tcsetattr.php

Autor: Sven Stefan (stepp64) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da ich derzeit mal wieder probiere die COM-Schnittstelle über PHP 
anzusprechen, möchte ich hier nochmals nachfragen.

Wie schon vor einigen Wochen erhalte ich wieder den selben Fehler:

fopen(COM2:) [function.fopen]: failed to open stream: Permission denied

Irgendwie öffnet er zwar die COM, der Browser bleibt aber hängen bzw. 
produziert diesen Fehler. Das Senden klappt nur das Lesen nicht. Hier 
mal der Code:
  `mode COM2: BAUD=9600 PARITY=N data=8 stop=1 xon=off`;

   $fp = fopen ("COM2:", "w+");

   sleep(5);

   $string = fgets($fp);

   echo "Empfangen: ".$string."<br>";
   
   $string  = "I000";
   echo "Test: ".$string; 
   if (!$fp)    echo "Port not opened.";
   else       fputs ($fp, $string );          
   
   fclose($fp);

Das ist natürlich nur auf das Wesentliche beschränkt, da ich im Moment 
nur teste. Das komische ist, dass das Lesen auch schon mal ging. Nach 
einem Neuboot des PC nun aber nicht mehr. Ich habe auch schon mit den 
Seriell Extension von http://www.easyvitools.com herumprobiert. Damit 
ging es zwar, da ist aber eine lange störende Wartezeit eingebaut. Die 
dio Funktionen scheiden auch aus, da ich da php neu kompilieren müsste 
und da weis ich nicht wie das geht unter XAMPP von Windows.

Falls ihr also inzwischen Lösungen gefunden habt, dann wäre ich sehr 
daran interessiert. Mein Vorhaben ist einfach nur über eine WEB Seite 
mit einem µC zu kommunizieren, welcher an der COM2: des XAMPP-Servers 
angeschlossen ist.

Sven

Autor: golem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich suche gerade nach einer Lösung ein serielle Schnittstelle unter 
linux mit PHP abzufragen. Wenn ich den oben genannten codeschipsel von 
php.net
benutzen möchte , dann wird

exec('mode com1: baud=9600 data=8 stop=1 parity=n xon=on');

durch

exec('stty -F /dev/ttyUSB0 19200');

ersetze, dann klappt das für "normale" serielle Übertragungen auch.
Nur habe ich das Problem, das ich die RTS Leitung vor der kommunikation 
mit dem Sensor auf high setzten muß. Was leider mit stty nicht geht.
Hat da jemand eine Lösung? Muß aber leider mit PHP sein, da das gesammte 
Heimautomatisierungsprojekt schon unter PHP-CLI läuft.

Gruß Golem

PS: @ Sven Stefan

fopen(COM2:) [function.fopen]: failed to open stream: Permission denied

das könnte daran liegen, das der apache unter Windows als user SYSTEM 
läuft, setze den in den Diensteeinstellungen mal auf einen Anderen 
Benutzer, der zugriff auf sie serielle schnittstelle hat.

Autor: Hinrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
kämpfe auch gerade damit, RS-Sgnale in PHP (WIN-XP, soll später aber 
auch auf LINUX laufen einzulesen. Schreiben geht, aber beim Lesen gibts 
ein Problem:

    function lesen($comport7,$sekunden)
    {
       $buffer = "";
       $fp2 = fopen ("$comport7", "r+");
         if (!$fp2)
         {
       echo "Port zum lesen nicht geöffnet";
       }
    else
      {
      sleep($sekunden);
             $buffer .= fgets($fp2, 4096);
            }
          return $buffer;
          fclose ($fp2);
}

Durch den Sleep Befehl, versetze ich die Kiste in den Schlaf, der Port 
wird abgehört und der Rest ist blockiert.

Ich hab das früher mit VB gemacht. Dort wird einEreignis ("OnComm") 
ausgelöst, dan werden die Daten abgefragt und verarbeitet. Gibt'sowas 
irgendwie unter PHP ?

Bau mir ne Hausautomation, mit Barebone PC, der mit Linux, pche und php 
laufen soll.

Autor: golem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo  Hinrich,

Unter win wirdt du da mit dem Sleep befehl nicht weit kommen, der hält 
die Verarbeitung wirklich so lange an, bis die zeit abgelaufen ist.

Ich habe alle Module z.B. X-10 oder DMX unter Linux per fork in eigene 
Prozesse gepackt untereinander kommunizieren diese per Shared Memory und 
per User Signal kann dabei ein sleep unterbrochen werden. Das alles 
funktioniert unter windosw nicht.

Autor: Sebastian S. (bachelor)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,

habe mir eine Extension für PHP unter Windows geschrieben mit der ich 
auf die Serielle Schnittstelle zugreifen kann.

Dazu muss man nur die DLL in der php.ini einbinden und los gehts.
php.ini
extension="C:\"Pfad"\php_custom_ext.dll"

Code in PHP
  $str = openRS232(1); //Rückgabe boolean, Parameter Nr. des Com Ports

  $data = readRS232(); //Lesen wenn keine Daten vorhanden kommt ETX (Ascii 3)

  closeRS232();

Wie man ein Extension für PHP schreibt findet ihr unter:
http://devzone.zend.com/article/1021

Gerne könnt ihr die Projekt-Datei haben und noch das schreiben auf RS232 
ergänzen. Einfach melden!

Gruß S

Autor: Abdul K. (ehydra) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm Sebastian. Wo ist der Unterschied zu 
Beitrag "Re: RS232 mit PHP" ?

Autor: He Kn (mr_sol)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibts dafür eine Demo oder Beispiel zum Nachvollziehen?

Autor: recently (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo RS232-Fans,

wenn ich das obige lese und meine eigenen Googleleien dazu nehme, 
schließe ich daraus, dass es für PHP auf Windows keine standardmäßige 
Möglichkeit zum Lesen von der seriellen Schnittstelle gibt. Es geht nur 
mit einer gekauften oder selber programmierten PHP-Extension oder einem 
"Seriell-TCP/IP-Workarround".

@eni: Ich habe auch die php_serial.class von phpclasses.org ausprobiert. 
Da bekommt man unter XP bei einem Leseversuch eine Fehlermeldung, siehe 
Quellcode:
trigger_error("Reading serial port is not implemented for Windows", E_USER_WARNING);
    return false;

Schade ...,

Mit freundlichen Grüßen
recently

Autor: bluppdidupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde ja generell lieber ein seperates Tool/Dienst schreiben der den 
RS232-Kram erledigt und die Daten in eine Datenbank schreibt, die ein 
php-skript dann ausliest.
Dann braucht der Webserver keine Berechtigungen für den COM-Port und man 
hat keine Probleme wenn die PHP-Seite mehrfach aufgerufen wird.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.