Grafik (Thermometer etc.)

Wenn man einen Messwert grafisch darstellen will und nicht die GDI.Lib benutzen möchte oder kann, dann hilft nur selber machen. Hier mal eine Routine, die einen Messwert und die Einheit, sowie die Grenzen und Farbinformationen mitbekommt. Diese Routine stapelt einfach Grafikelemente aufeinander. Je nach Schwellwert werden andere Farben genommen und der aktuelle Messwert seperat dargestellt.

So sieht die Routine aus:

# rot erstes paar, grün 2.Paar, rot 3. Paar, gelb innerhalb Diff 1.-2. und 2.-3.Paar
# letzes Paar -> letzer Wert gibt max. Wert an d.h. auch Einteilung in N Schritten 
# die Farben sind danach definiert. Kein Übergang (gelb) wenn letzer Wert ses vorhergehenden Paare ist der Startwert des nachfolgenden Paares.
$LimitsT = array("0","15","25","35","40","60");  				# Temperatur
$LimitsH = array("0","10","15","60","65","100");  				# Humidity
$Kodierung = array("TLred.png","TLyel.png","TLgreen.png","TLyel.png","TLred.png"); 			# wie sollen Zwischenräume angezeigt werden 
$AnzeigeWert = "TLblack.png";
$Blank = "TLblank.png";
$Zeiger = "TLMarker.png";

function ZeichneTabelle($Messwert,$Einheit,$Grenzen,$Kodierung)
{ GLOBAL $AnzeigeWert, $Blank, $Zeiger;
  $DatenOK = 0; 								# Prüfung der Daten: ok? - ja = 1, nein = 0
  $Fehler = "";									# Hinweis auf Fehler geben
  $anzahl = count($Grenzen);
  $lastDS = $anzahl - 1;
  $Check =  $anzahl / 2;
  if (floor($Check) == ceil($Check)) { $DatenOK = 1; } 			# Gerade anzahl -> ok
    else { $DatenOK = 0; $Fehler .= " ungerade Bereichsparameter / Genzwertdefinitionen <br>" ; }  
  if ( count($Kodierung) == $lastDS) { $DatenOK = 1; }  # Zwischenräume korrespondieren mit Angaben der Grenzen (um eins kleiner)
  else { $DatenOK = 0; $Fehler .= " falsche Anzahl Farbbereiche -> muss mit Genzwertdefinitionen korrespondieren (um eins kleiner)<br>" ; } 
  for ( $i = 0; $i < ($anzahl-1); $i++)
   { $next = $i +1;
     if ($Grenzen[$i] <= $Grenzen[$next]) {$DatenOK = 1;}  # werte aufsteigend, mindestens gleich gross
      else {$DatenOK = 0;  $Fehler .= " Bereichsparameter / Genzwertdefinitionen im Feld $i auf $next nicht grösser / gleich gross<br>"; } 
    }
  
   if ($Messwert <= $Grenzen[$lastDS]) { $DatenOK = 1; } # Messbereichsüberschreitung
    else { $DatenOK = 0; $Fehler .= "Messbereichsüberschreitung  -> Übergebener Messwert größer als Messbereich <br>"; }

  if ($Messwert >= $Grenzen[0]) { $DatenOK = 1; } # Messbereichsunterchreitung
    else { $DatenOK = 0; $Fehler .= "Messbereichsunterschreitung -> Übergebener Messwert kleiner als Messbereich <br>"; }
  if ($DatenOK == 1) 			# nur wenn alle Bedingungen stimmen
   { # Rahmenparameter festlegen
	 $Maxwert = $Grenzen[$anzahl - 1];
     $MinWert = $Grenzen[0];
	 $laufenderWert = $Maxwert; 			# Wird bentöigt um Vergleich mit anzuzeigenden Wert zu machen
 	 $anzeigeWert = round($Messwert);			# abrunden -> hier ganze Zahlen verwendet / geprüft
	 # Ausgabe
	 $Ausgabe = "";
	 $Marker = "";
	 echo "<center><table border='0' cellpadding='0' cellspacing='0' border='0'>";
      
	 for ( $i = ($anzahl-1); $i > 0; $i--)		
	  { $next = $i - 1;
	    $diff = (int)($Grenzen[$i] - $Grenzen[$next] ) ;				
		$Farbe = $Kodierung[$next];							# Welche Farbe -> wurde im Array festgelegt
		for ($d = $diff; $d > 0; $d-- ) 
		 { if ($anzeigeWert == $laufenderWert ) { $Ausgabe .=  "<img src='images/" . $AnzeigeWert . "'><br>";  }  
		   else {  $Ausgabe .= "<img src='images/"  .$Farbe . "'><br>";  }
		   if ($anzeigeWert <> $laufenderWert ) { $Marker .=  "<img src='images/" . $Blank . "'><br>";  }  
		   else {  $Marker .= "<img src='images/"  .$Zeiger . "'><br>";  }
		   $laufenderWert--; 				# ganze Zahlen 
		 }	
	  }
		 # der erste Wert muß seperat nachgetragen werden
		 if ($anzeigeWert == $laufenderWert ) { $Ausgabe .=  "<img src='images/" . $AnzeigeWert . "'><br>";  }  
		 else {  $Ausgabe .= "<img src='images/"  .$Farbe . "'><br>";  }
		 if ($anzeigeWert <> $laufenderWert ) { $Marker .=  "<img src='images/" . $Blank . "'><br>";  }  
		 else {  $Marker .= "<img src='images/"  .$Zeiger . "'><br>";  }

	 # drei Spalten	  
	 echo "<tr><td><img src='images/" . $Blank . "'></td>";
	 echo "<td>" .$Ausgabe . "</td>" . $Marker , "</td></tr>";
     echo "<tr><td colspan='3' align='center'> $Messwert $Einheit </td></tr>";
	 echo "</tbody>";
     echo "</table>";  
   
   } //  if ($DatenOK == 1)
 else 
   { echo "$Fehler";
   } //  if ($DatenOK == 1)

}

Aufgerufen wird das Ganze mit "ZeichneTabelle("<Wert>","°C",$LimitsT,$Kodierung);"
Der <Wert> ist eine Zahl, in dem Falle von Null bis 60.0. Durch $LimitsT und $Kodierung sind die Genzen und deren Farben hier definiert.

Ein Thermometer:


























































































































12.5 °C
Luftfeuchet oder ander prozentuale Werte










































































































































































































67.8 %

Verwendungshinweis: Um das Script zu verwenden einfach diese Datei über den Browser speichern und dann mit einem Texteditor oder Dreamweaver / FirstPage etc. bearbeiten. Das Script darf für jeden frei verwendet werden, soweit der Autor / Quelle genannt wird. Wer nützliche Links / Scripte hat darf die mir auch gerne zur Verfügung stellen..

Home | Autor | eMail | Gästebuch

Bearbeitet und erstellt von Horst - G. Burmester (HGB) ©