| 1 | <?php
 | 
| 2 | /**
 | 
| 3 | * EIN/AUSGABE ueber COM
 | 
| 4 | *
 | 
| 5 | * Einfache Ein/Ausgabe ueber COM Schnittstelle unter Windows
 | 
| 6 | *
 | 
| 7 | * @V0.1 2011.06.12 Schnittstelle angesprochen
 | 
| 8 | * @V0.2 2011.06.13 Lesen, Schreiben , OOP, Error
 | 
| 9 | * @V0.3 2011.06.14 HTML Ein/Ausgabe
 | 
| 10 | */
 | 
| 11 | 
 | 
| 12 | 
 | 
| 13 | /**
 | 
| 14 | * Error Message Stack
 | 
| 15 | */
 | 
| 16 | class errorMsg {
 | 
| 17 |  static private $aMsg = array();
 | 
| 18 |  static public function setError($p_sMsg = null) {self::$aMsg[] = $p_sMsg;}
 | 
| 19 |  static public function getError() {return self::$aMsg;} 
 | 
| 20 |  static public function isError() {return count(self::$aMsg) ? true : false;}  
 | 
| 21 | }
 | 
| 22 | 
 | 
| 23 | 
 | 
| 24 | 
 | 
| 25 | /**
 | 
| 26 | * I/O uber Schnittstelle
 | 
| 27 | */
 | 
| 28 | class oCOM{ 
 | 
| 29 | 
 | 
| 30 | 
 | 
| 31 | /**
 | 
| 32 | * Konstruktor
 | 
| 33 | *
 | 
| 34 | * Set serial port parameters. Laut Doku: 9600 8-N-1
 | 
| 35 | * Baud rate: 9600
 | 
| 36 | * Parity (das "N" in "8-N-1") - Datenblock auf korrekten Inhalt zu überprüfen
 | 
| 37 | * data - Character length (die "8" in "8-N-1")
 | 
| 38 | * Stop bits (die  "1" in "8-N-1") 
 | 
| 39 | * DTR - Data Terminal Ready 
 | 
| 40 | * RTS - Request to Send [Sendeanforderung]
 | 
| 41 | *
 | 
| 42 | */
 | 
| 43 |  public function __construct()   {
 | 
| 44 |  
 | 
| 45 | $fp1=`mode com2 BAUD=9600 PARITY=N data=8 stop=1 DTR=off  RTS=off`; 
 | 
| 46 | $fp2=`mode com2 BAUD=9600 PARITY=N data=8 stop=1 DTR=off  RTS=off`; 
 | 
| 47 | errorMsg::setError($fp1);
 | 
| 48 | errorMsg::setError($fp2);
 | 
| 49 | }
 | 
| 50 | 
 | 
| 51 | 
 | 
| 52 | /**
 | 
| 53 | * Klasse wird zerstört
 | 
| 54 | *
 | 
| 55 | */
 | 
| 56 |  public function __destruct() {
 | 
| 57 |  }
 | 
| 58 | 
 | 
| 59 | 
 | 
| 60 | /**
 | 
| 61 | * Senden der Daten ueber UART
 | 
| 62 | */
 | 
| 63 | public function send($comport,$zeichen) {
 | 
| 64 |   $this->fp1 = fopen ("$comport", "w+");
 | 
| 65 |   if (!$this->fp1){
 | 
| 66 |    errorMsg::setError("Port zum Schreiben nicht geöffnet!");  
 | 
| 67 |      }
 | 
| 68 |      else {
 | 
| 69 |      fputs ($this->fp1, $zeichen);
 | 
| 70 |      fclose ($this->fp1);
 | 
| 71 |      }
 | 
| 72 | }
 | 
| 73 | 
 | 
| 74 | 
 | 
| 75 | /**
 | 
| 76 | * Lesen der Daten ueber UART
 | 
| 77 | */
 | 
| 78 | public function read($comport2,$sekunde) {
 | 
| 79 |   $buffer = "";
 | 
| 80 |   $this->fp2 = fopen ("$comport2", "r+");
 | 
| 81 |   if (!$this->fp2){
 | 
| 82 |    errorMsg::setError("Port zum lesen nicht geöffnet");  
 | 
| 83 |    }
 | 
| 84 |    else{
 | 
| 85 |      sleep($sekunden);
 | 
| 86 |      $buffer .= fgets($this->fp2, 4096);echo $buffer;echo "x";
 | 
| 87 |    }
 | 
| 88 |    return $buffer;
 | 
| 89 |    fclose ($this->fp2);
 | 
| 90 | }
 | 
| 91 | } //END io
 | 
| 92 | 
 | 
| 93 | 
 | 
| 94 | /**
 | 
| 95 | * 
 | 
| 96 | */
 | 
| 97 | 
 | 
| 98 | $com="COM2";
 | 
| 99 | $input="1";
 | 
| 100 | 
 | 
| 101 | if(isset($_GET["com"]))$com=$_GET["com"];
 | 
| 102 | if(isset($_GET["input"]))$input=$_GET["input"];
 | 
| 103 | 
 | 
| 104 | $oCOM = new oCOM;
 | 
| 105 | $oCOM->send($com,$input);                   // den Ziffer 2 senden
 | 
| 106 | $lese = $oCOM->read($com,"3");       // 2 Sekunden lang Daten von COM2 abfragen
 | 
| 107 | 
 | 
| 108 | ?>
 | 
| 109 | 
 | 
| 110 | 
 | 
| 111 | 
 | 
| 112 | 
 | 
| 113 | 
 | 
| 114 | 
 | 
| 115 | 
 | 
| 116 | 
 | 
| 117 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 | 
| 118 |      "http://www.w3.org/TR/html4/loose.dtd">
 | 
| 119 | <html>
 | 
| 120 | <head>
 | 
| 121 | <title>IO Test</title>
 | 
| 122 | </head>
 | 
| 123 | <body>
 | 
| 124 | <h3>Senden auf COM</h3>
 | 
| 125 | <p>
 | 
| 126 | 
 | 
| 127 |   <form action="com_schnittstelle.php" method="get" enctype="MIME-Typ">
 | 
| 128 |      <label>Schnittstelle: </label>
 | 
| 129 |     <input name="com"type="text" value="COM2">
 | 
| 130 |     <label>Sende Ziffer 0- 9: </label>
 | 
| 131 |     <input name="input"type="text" value="1">
 | 
| 132 |   <input type="submit" value="senden">
 | 
| 133 |   </form>
 | 
| 134 | 
 | 
| 135 | 
 | 
| 136 | <h3>Empfangen von COM</h3>
 | 
| 137 | <code style="white-space:pre-wrap !important;">
 | 
| 138 | <?php
 | 
| 139 | echo "Ergebnis:".$lese;
 | 
| 140 | ?>
 | 
| 141 | </code>
 | 
| 142 | <h3>Error/Log</h3>
 | 
| 143 | <p>
 | 
| 144 | <?php
 | 
| 145 | /**
 | 
| 146 | * wenn Fehlermeldungen existieren, diese ausgeben
 | 
| 147 | */
 | 
| 148 | if (errorMsg::isError()) {
 | 
| 149 |  var_dump(errorMsg::getError());
 | 
| 150 | }
 | 
| 151 | ?>
 | 
| 152 | </p>
 | 
| 153 | </body>
 | 
| 154 | </html>
 |