Daten aus C Programm an HTML



  • Ist schon klar, hast Du wenigstens einen link auf ein Tutorial.

    Da ich C/C++ Programmiere ist die ganze Web Programmiersprache sehr
    gewöhnungsbedürftig für mich.



  • <HEAD>
    <SCRIPT language="JavaScript">
    <!--hide
    function newtext()
    {
      document.myform.mytext.value="Hey! I have changed!";
      setTimeout("moretext()",1000);
     }
    function moretext()
    {
      document.myform.mytext.value="I just change with the time!";
    }
    
    //-->
    </SCRIPT>
    </HEAD>
    
    <BODY>
    <FORM name="myform">
    <INPUT type="text" name="mytext" value="Not Much Here." size="30">
    &nbsp;&nbsp;
    <INPUT TYPE="button" name="but1" value="Click!" onClick="newtext()">
    </FORM>
    

    Habe hier mal einen Code gefunden, hier wird ein Timer aufgezogen der
    dann nach 1000ms die Funktion moretext ausführt.

    Gibt es da nicht eine Funtion z.B. SetTimer die nun periodisch eine Funktion
    ausführt?



  • Probiere mal in der Richtung

    function moretext()
    {
      document.myform.submit();
    }
    


  • Hallo,

    1. wenn man voraus richtig schreibt, wird es auch vom Forum angenommen 😉
    2. @hermes Was hindert dich daran, in deinem C-Programm einfach die HTML-Datei direkt zu beschreiben bzw. jeweils die aktuellen Inhalte hineinzuschreiben?



  • voraus vorraus vorrraus 🙂



  • árn[y]ék schrieb:

    Hallo,
    2. @hermes Was hindert dich daran, in deinem C-Programm einfach die HTML-Datei direkt zu beschreiben bzw. jeweils die aktuellen Inhalte hineinzuschreiben?

    So mache ich es momentan.

    Nur um immer die aktuellen Daten zu sehen muss ich die Webseite immer wieder
    aufrischen.

    Das sollte aber automatisch laufen mit einem Timer und einem TimerEvent.

    JavaScript bietet so etwas aber nicht.

    http://javascript-workshop.de/buch/01.html //Ganz nett gemacht

    Oder ich habe es nicht gefunden.

    Desweiteren sollten natürlich auch Daten an das C Programm übermittelt
    werden.



  • Hallo,

    bin nun soweit das mein HTML Code einen script in C unter linux ausführt, dieser liest via RS232 die Uhrzeit des Gerätes die dann angezeigt wird.
    Leider muss ich den srcript immer wieder ausführen(meta tag) um die Uhrzeit zu
    aktualisieren.

    <html>
    	<head>
    	</head>
    	<body bgcolor="#E0E0E0">
    		<form action="/cgi-bin/NTG2007" method="get">
    			<p><input type="submit" value="Get Time"></p>
    		</form>
    	</body>
    </html>
    
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include "\Workspace\NTG2007\Uart\Uart.h"
    #include "\Workspace\NTG2007\TestUart\TestUart.h"
    static unsigned char GetBuffer[255];
    static int Lenght;
    int main(void)
    {
        const char Port[] = {"/dev/ttyS2"};
        unsigned char GetTime[] = {0x68,0x0a,0x0a,0x68,0x0a,0x70,0x01,0x90,0x5a,0x10,0x01,0x01,0x02,0x06,0x09,0x7e,0x16};	
    	char *data;
    	int FdUart2;	
    	printf("Content-type: text/html\n\n");
    	printf("<meta http-equiv=\"refresh\" content=\"1; URL=/cgi-bin/NTG2007\" />");	
    	data = getenv("QUERY_STRING");	
    	FdUart2 = InitUart(Port,38400);
    	if(FdUart2 == -1)
    	{		
    		printf("Open Error:");printf(Port);printf("\n");
    		return 0;
    	}
    	else
    	{		
    		WriteUart(FdUart2,GetTime,sizeof(GetTime));
    		usleep(100000);		
    		Lenght = ReadUart(FdUart2,GetBuffer,255);
            printf("<h1>NTG Time %02d:%02d:%02d</h1>",GetBuffer[18],GetBuffer[19],GetBuffer[20]);
    	}
    
    	CloseUart(FdUart2);
    	return 0;
    }
    

    Gibt es da nun nicht eine Möglichkeit das die HTML Seite ein Fenster Object
    an das C Script sendet in dem dann die Uhrzeit eingetragen wird?
    z.B. HtmlObject->Text = Time oder so ähnlich.



  • hermes schrieb:

    Gibt es da nun nicht eine Möglichkeit das die HTML Seite ein Fenster Object
    an das C Script sendet in dem dann die Uhrzeit eingetragen wird?
    z.B. HtmlObject->Text = Time oder so ähnlich.

    Nein, eine Aktualisierung kann nur sozusagen von der Webseite aus ausgeführt werden, dein C-Programm (der Server) hat keinen Zugriff auf die Seite (den Client), nachdem diese einmal übertragen wurde.
    Um nicht die ganze Seite neu laden zu müssen kannst du mit Hilfe von Javascript im Hintergrund Anfragen an das C-Programm schicken und mit der Antwort den angezeigten Text aktualisieren. Diese Technik nennt sich Ajax, darunter solltest du etwas finden.



  • <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html lang="de">
    <head><title>JavaScript-Beispiel</title>
    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
    <script type="text/javascript">
    function IncDec (Wert) 
    {
     var Temp = Wert;
     if (!IncDec.Zahl)
    	 IncDec.Zahl=1; 
     else 
     {
     	if(Wert == 1)
      		IncDec.Zahl++;	
    	else if(IncDec.Zahl != 0)
      		IncDec.Zahl--;	
    
     }
     document.getElementById("ergebnis").firstChild.data = IncDec.Zahl;
     document.getElementById("zahl").firstChild.data = Temp; 
    }
    </script>
    </head>
    <body> 
    <h1>Java Script Beispielx</h1>
    <td><input type="button" value="Inc" onclick="IncDec(1)"></td> 
    <td><input type="button" value="Dec" onclick="IncDec(2)"></td> 
    <p id="ergebnis">0 </p>
    <p id="zahl">0 </p>
    </body>
    </html>
    

    Hier mal ein Java Script, auf Inc oder Dec Click wird die Funktion IncDec
    ausgeführt. Ich möchte nun aber nicht ständig ein Button drücken, wie
    kann ich dafür sorgen das die Funktion 1 mal pro Sekunde automatisch ausgeführt wird.



  • <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html lang="de">
    <head><title>JavaScript-Beispiel</title>
    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
    <script type="text/javascript">
    function IncDec (Wert) 
    {
     	var Temp = Wert;
     	if (!IncDec.Zahl)
    		IncDec.Zahl=1; 
     	else 
     	{
     		if(Wert == 1)
      			IncDec.Zahl++;	
    		else if(IncDec.Zahl != 0)
      			IncDec.Zahl--;	
    
     	}
     	document.getElementById("ergebnis").firstChild.data = IncDec.Zahl;
     	document.getElementById("zahl").firstChild.data = Temp; 
     }
    </script>
    </head>
    
    [b]<body onload="window.setInterval('IncDec(1)',1000)">[/b]
    <h1>Java Script Beispielx</h1>
    <td><input type="button" value="Inc" onclick="IncDec(1)"></td> 
    <td><input type="button" value="Dec" onclick="IncDec(2)"></td> 
    <p id="ergebnis">0 </p>
    <p id="zahl">0 </p>
    </script>
    </body>
    </html>
    

    So wird die Funktion IncDec(1) 1x pro secunde ausgeführt.



  • <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html lang="de">
    <head><title>Ajax JavaScript-Beispiel</title>
    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
    </head>
    <script type="text/javascript" src="jquery-1.2.6.js"></script>       
    <script language="JavaScript">
    function IncDec (Wert) 
    {
       	$("#y").load("Test.html");
    }
    </script>
    <body onload="window.setInterval('IncDec(1)',100)">
    <form name="Test">
    <div id="y"><b></b></div>
    
    </form>
    </body>
    </html>
    
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include "\Workspace\NTG2007\Uart\Uart.h"
    #include "\Workspace\NTG2007\TestUart\TestUart.h"
    static unsigned char GetBuffer[255];
    static int Lenght;
    FILE *File;
    int n;
    char Test[200];
    int main(void)
    {
        const char Port[] = {"/dev/ttyS2"};
        unsigned char GetTime[] = {0x68,0x0a,0x0a,0x68,0x0a,0x70,0x01,0x90,0x5a,0x10,0x01,0x01,0x02,0x06,0x09,0x7e,0x16};	
    	char *data;
    	int FdUart2;	
    	FdUart2 = InitUart(Port,38400);
    	if(FdUart2 == -1)
    	{		
    		printf("Open Error:");printf(Port);printf("\n");
    		return 0;
    	}
    	else
    	{	
    
    		while(1)
    		{	
    			WriteUart(FdUart2,GetTime,sizeof(GetTime));
    			sleep(1);		
    			Lenght = ReadUart(FdUart2,GetBuffer,255);
    			File = fopen("/www/Test.html","r+");
    			n = sprintf(Test,"<p>NTG2007 Time: <input type=\"text\"value=\"%02d:%02d:%02d\" size=\"5\" >",GetBuffer[18],GetBuffer[19],GetBuffer[20]);			
    			fwrite(Test,1,n,File); 	
    			fclose(File);
    		}	
    	}
    
    	CloseUart(FdUart2);
    
    	return 0;
    }
    

    Habe mir mal jquery-1.2.6.js http://docs.jquery.com/Main_Page besorgt.

    Nun schreibt mein C Prog die Daten nach Test.html und $("#y").load("Test.html") fügt das ganze nach <div id="y"><b> hier </b></div>
    ein, es wird nicht mehr die ganze Seite neu geladen.

    Das ganze muss in <script type="text/javascript" src="jquery-1.2.6.js"></script> eingetragen werden.
    jquery-1.2.6.js befindet sich im gleichen Ordner wie index.html, muss aber
    nicht. Wird ein anderer Ordner benutzt muss src=".... entsprechend angepasst
    werden.

    Zum testen braucht man natürlich kein C Prog, man kann Test.html auch mit
    einem Editor ändern.
    Die Änderungen werden dann auf der Webseite sichtbar.



  • Das sieht schon gut aus.
    Eventuell könntest du auch die Abfrage der Schnittstelle nur bei Anfragen durch die Webseite durchführen, anstatt das Programm ständig laufen zu lassen, aber das ist eine Frage des genauen Einsatzzwecks.



  • hermes schrieb:

    Ist schon klar, hast Du wenigstens einen link auf ein Tutorial.

    Da ich C/C++ Programmiere ist die ganze Web Programmiersprache sehr
    gewöhnungsbedürftig für mich.

    Warum Programmierst Du nicht in Perl/Python oder Java/Ruby oder TCL/Visual Basic oder eine andere Kombination aus 2 Programmiersprachen. Warum ausgerechnet C/C++ 😉 😃 . Ich bevorzuge normalerweise C++ statt C.



  • tntnet schrieb:

    Warum Programmierst Du nicht in Perl/Python oder Java/Ruby oder TCL/Visual Basic oder eine andere Kombination aus 2 Programmiersprachen. Warum ausgerechnet C/C++ 😉 😃 . Ich bevorzuge normalerweise C++ statt C.

    Da ich µController in C sowie Assembler programmiere und passende Windows Anwendungen mit dem Borland Builder in C++. Was spricht dagegen.

    Ausserdem lassen sich die meisten µController aufgrund von Speichermangel nicht
    in C++ programmieren.

    Als weitere Sprache würde ich dann eher Java bevorzugen, ich finde z.B. Perl
    äußerst gewöhnungsbedürftig.



  • hermes schrieb:

    tntnet schrieb:

    Warum Programmierst Du nicht in Perl/Python oder Java/Ruby oder TCL/Visual Basic oder eine andere Kombination aus 2 Programmiersprachen. Warum ausgerechnet C/C++ 😉 😃 . Ich bevorzuge normalerweise C++ statt C.

    Da ich µController in C sowie Assembler programmiere und passende Windows Anwendungen mit dem Borland Builder in C++. Was spricht dagegen.

    Ausserdem lassen sich die meisten µController aufgrund von Speichermangel nicht
    in C++ programmieren.

    Als weitere Sprache würde ich dann eher Java bevorzugen, ich finde z.B. Perl
    äußerst gewöhnungsbedürftig.

    Ich glaube, Du hast mich falsch verstanden. Um es noch deutlicher zu schreiben: Es gibt keine Programmiersprace C/C++, auch wenn man es immer wieder liest. Man programmiert nicht in C/C++. Man programmiert in C oder man programmiert mit C++. Das wird immer wieder durcheinander gebracht. Man kann natürlich auch in C und C++ programmieren. Dann sollte man es aber auch so schreiben.



  • tntnet schrieb:

    Man kann natürlich auch in C und C++ programmieren. Dann sollte man es aber auch so schreiben.

    So habe ich das auch gemeint 🙂


Anmelden zum Antworten