mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Fr 26.04.2024 05:45 Benutzername: Passwort: Auto-Login

Thema: [php] serielle schnittstelle & programm ausführen vom 31.05.2005


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> [php] serielle schnittstelle & programm ausführen
Seite: 1, 2, 3  Weiter
Autor Nachricht
caZpa
Account gelöscht Threadersteller


Ort: -

Verfasst Di 31.05.2005 15:11
Titel

[php] serielle schnittstelle & programm ausführen

Antworten mit Zitat Zum Seitenanfang

ich möchte daten an die serielle schnittstelle senden und empfangen.
hardware die ich für das projekt benötige, bekomme ich später erst.
daher weiß ich grad nicht, wie ich testen kann ob das funktioniert...

der code sieht so aus:
Code:
$comport = "COM1";
$string = "Hallo Schnittstelle!\n";
$buffer = "";

$pointer = fopen($comport,"w");
if(fwrite($pointer, $string) == strlen($string)) echo 'erfolgreich an <b>' . $comport . '</b> gesendet.';
while(!feof($pointer)) {
      $buffer .= fgets($pointer, 4096);
      $buffer .= "<br>";
}
fclose($pointer);

echo '<br>';

if($buffer > 0){
      echo 'Daten von <b>' . $comport . '</b> empfangen:<br><i>' . $buffer;
}else{
      echo 'keine Daten von <b>' . $comport . '</b> empfangen.';
}

die ausgabe sieht so aus:
Zitat:
erfolgreich an COM1 gesendet.
keine Daten von COM1 empfangen.

wüsste jetzt schon gerne obs funktioniert...

naja... jedenfalls soll das script wie folgt ablaufen:
erst ein programm ausführen
dies sendet daten über die schnittstelle an nen µC
diese daten abfangen, interpretieren und in ner db speichern.
ggf kommen daten zurück. diese auch abfangen und handlen.

jetzt versuche ich erstmaldie daten die ich sende, auch wieder
von der schnittstelle auszulesen...
ich glaube dafür muss ich 2 scripte parallel laufen lassen oder?
eines das an der schnittstelle 'lauscht'
und das andere sendet die daten...

aber bin z.zt. noch etwas ratlos

//zum ausführen eines programms:
das funktioniert auch nicht...
Code:
$WshShell = new COM("WScript.Shell");
$oExec = $WshShell->Run("notepad.exe", 3, true);


Code:
exec("start c:\\winnt\\notepad.exe");

funktionier beides nicht... versteh ich nicht...
weil mit safe_mode ist auch alles klar

///oh, seh grad:
Code:
>/dev/null 2>&1

in der funktion exec() lässt das script nicht auf beendigung
der programms warten... damit könnte man das mit den 2 parallel
laufenden scripten vielleicht umgehen...


Zuletzt bearbeitet von am Di 31.05.2005 15:12, insgesamt 1-mal bearbeitet
 
caZpa
Account gelöscht Threadersteller


Ort: -

Verfasst Di 31.05.2005 16:58
Titel

Antworten mit Zitat Zum Seitenanfang

hmm...

ich frag lieber mal in kleinen häppchen *zwinker*

erstes häppchen:
habe per null-modem kabel beide seriellen schnittstellen miteineander verbunden.
an den ersten port sende ich; und der zweite soll dann auswerten:

Code:
$comport1 = "COM1";
$comport2 = "COM2"; 
$string = "Hallo Schnittstelle!\n";
$buffer = "";

$pOut = fopen($comport1,"w");
$pRead = fopen($comport2,"w");
if(fwrite($pOut, $string) == strlen($string)) echo 'erfolgreich an <b>' . $comport1 . '</b> gesendet.';

while(!feof($pRead)) {
      $buffer .= fgets($pRead, 4096);
      $buffer .= "<br>";
}

fclose($pOut);
fclose($pRead);

$buffer ist aber noch leer... wahrscheinlich weil das nicht zeitgleich ist oder?
die daten werden gesendet- und wenn sie gelesen werden sollen sind sie schon wieder weg

wie kann ich das syncron machen?

häppchen nr 2:
wie kann ich eine datei ausführen? wenn sie auf dem server liegt und lokal. wär beides ganz gut...

danke schön
Lächel
 
Anzeige
Anzeige
Glas

Dabei seit: 24.05.2003
Ort: Bremen
Alter: 41
Geschlecht: Männlich
Verfasst Di 31.05.2005 17:01
Titel

Antworten mit Zitat Zum Seitenanfang

Zu 1.) erstmal nix - muss ich mir erstmal selbst reinziehn ... is mir auch ehrlich gesagt neu gewesen, das PHP nen comport öffnen kann. Aber coole Geschichte.

Zu 2.) Naja, entweder exec(); (was ja nicht zu gehen schein bei dir), oder system() ... ?!
  View user's profile Private Nachricht senden
karmacoder

Dabei seit: 15.04.2002
Ort: Fürth
Alter: 42
Geschlecht: Männlich
Verfasst Di 31.05.2005 17:45
Titel

Antworten mit Zitat Zum Seitenanfang

1. benutzt du jetzt windows oder linux - oben sind unkompatible codebeispiele aus beidem, ich habe das gefühl du weist nicht wirklich was du vorhast.
2. unter linux werden hardwareteile auch als datei abgebildet und man kann tatsächlich davon lesen/schreiben, unter windows ist mir solches nicht bekannt. mit einem entsprechenden treiber wäre das aber sicherlich möglich.
3. php kann auch threads/forken aber du solltest dir umbeding zu mutex/semaphore einlesen bevor du 2 paralele programme auf eine ressource laufen läst. auf wikipedia ist dazu oft gutes material zu finden.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
gtz

Dabei seit: 15.04.2002
Ort: -
Alter: 48
Geschlecht: Männlich
Verfasst Di 31.05.2005 17:54
Titel

Antworten mit Zitat Zum Seitenanfang

so wie du den kram da oben bastelst, öffnest du files.

lies im php manual auf php.net die kommentare zu fopen.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
caZpa
Account gelöscht Threadersteller


Ort: -

Verfasst Mi 01.06.2005 08:11
Titel

Antworten mit Zitat Zum Seitenanfang

ja kuhl
thx gtz!

habe gedacht, das geht so, weil ich das hier gefunden hab

du meintest wahrscheinlich das hier:
Code:
// Use this code to write directly to the COM1 serial port
   // First, you want to set the mode of the port. You need to set
   // it only once; it will remain the same until you reboot.
   // Note: the backticks on the following line will execute the
   // DOS 'mode' command from within PHP
   `mode com1: BAUD=9600 PARITY=N data=8 stop=1 xon=off`;
   $fp = fopen ("COM1:", "w+");
   if (!$fp) {
       echo "Uh-oh. Port not opened.";
   } else {
       $e = chr(27);
       $string  = $e . "A" . $e . "H300";
       $string .= $e . "V100" . $e . "XL1SATO";
       $string .= $e . "Q1" . $e . "Z";
       echo $string;
       fputs ($fp, $string );
       fclose ($fp);
   }


super, jetzt kann ich weitermachen
Lächel


Zuletzt bearbeitet von am Mi 01.06.2005 08:12, insgesamt 1-mal bearbeitet
 
caZpa
Account gelöscht Threadersteller


Ort: -

Verfasst Mi 01.06.2005 12:32
Titel

Antworten mit Zitat Zum Seitenanfang

Code:
`mode com1: BAUD=9600 PARITY=N data=8 stop=1 xon=off`;
$fp1 = fopen ($comport1, "w+");
   
if (!$fp1) {
 echo "Uh-oh. Port 1 not opened.";
} else {
 $e = chr(27);
 $string  = $e . "A" . $e . "H300";
 $string .= $e . "V100" . $e . "XL1SATO";
 $string .= $e . "Q1" . $e . "Z";
 echo $string;
 echo fwrite ($fp1, $string ); //line x²
 fclose ($fp1);
}


Zitat:
Warning: fopen(COM2:) [function.fopen]: failed to open stream: Permission denied in bla.php on line x
AH300V100XL1SATOQ1Z
Fatal error: Maximum execution time of 30 seconds exceeded in bla.php on line x²


mit gehts um den 2. fehler. der erste is klar.
wodurch wird der verursacht?
 
Skyw4lker

Dabei seit: 30.08.2004
Ort: Bergisch Gladbach
Alter: 43
Geschlecht: Männlich
Verfasst Mi 01.06.2005 13:28
Titel

Antworten mit Zitat Zum Seitenanfang

vielleicht braucht das php script länger als sein timeout zulässt um die daten an den port zu senden?
  View user's profile Private Nachricht senden
 
Ähnliche Themen COM-Port kurzschließen --> Programm ausführen
ICQ Schnittstelle
Wetterdaten-Schnittstelle
schnittstelle navigation und flash
Schnittstelle eShop zu Lexware
XML Schnittstelle in mysql Datenbank eintragen
Neues Thema eröffnen   Neue Antwort erstellen Seite: 1, 2, 3  Weiter
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.