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>
|