Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Die Lösung Kategorie: Verschiedenes (von André H. - 5.08.2006 21:08)
Als Antwort auf Die Lösung von Mark - 3.08.2006 20:09
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.0, OSOPT V3.1
Hallo Mark,

> Ich habe die Handshake-Leitungen am XPort gebrückt und
> in der XPort Config Handshake deaktiviert.
>

Das ist nicht ganz die Lösung.
Die Kommunikation mit dem XPort muÃ? auch mit Handshaking funktionieren.
Wenn Du das Appl.Board nutzt, ist es daher wichtig, da� dort die Jumper für
RTS und CTS gesetzt sind.
Beim XPort mu� dann bei Flowcontrol "CTS/RTS (Hardware)" ausgwählt werden.
Da ich gerade bei den Einstellungen für den XPort bin, hier noch ein paar
Empfehlungen:
Unter "Serial Settings":
- Enable Packing aktivieren
- Flush Mode:
  Input-Buffer: With Active Connect=yes, With Passive Connect=yes, At Time of Disconnect=no
  Output-Buffer: With Active Connect=no, With Passive Connect=no, At Time of Disconnect=yes
Unter "Connection":
- Hard Disconnect=yes
- Inactivity Timeout: 1sec, wenn reiner Webserverbetrieb geplant ist.
  Wenn das bald folgende CC2Net.de-DL-Tool V2.3 für den Programmdownload über
  den XPort benutzt werden soll, dann 5sec bzw. 1 bis 2 sec höher, als
  der Parameter WaitHost im DL-Tool.
  Wenn Programmer über das Internet geladen werden sollen, sollte das Timeout noch höher sein.
  Aber dieses "Unding" muÃ? ich erst testen. Denn durch die hohen Latenzzeiten kann
  das Laden über das Web relativ lange dauern, da nach einem Datenblock
  auf das Echo gewartet werden muÃ?. ;-)

Hier noch mein letztes Testproggie für die CC2 als Webserver:
Es setzt HTTP1.1 voraus.
Der IE macht hier leider immense Probleme, so daÃ? es nicht funktioniert.
Die Ursachen konnte ich noch nicht ganz ausmachen. (Eine scheint aber M$ zu sein. *g*)
Daher funktioniert das nur mit Firefox und andere alternative Browser, die HTTP1.1 beherschen.
Das Programm ist für Debuggingausgaben über ein eDIP240 "vorbereitet".
Daher die eDIP-Aufrufe. Diese können aber einfach entfernt werden, wenn kein eDIP vorhanden ist.

const edipAddr=32;

byte fifo[512],dummy[64];
type togglebuffer
{
 byte buffer[256];
}

togglebuffer out[2];

system.TIME Zeit;

int pos;
byte tog;

function sendbuffer()
{
 if pos
  {
   string t;
   str.clear(t);
   str.putintf(t,pos,-2);
   str.putchar(t,'n');
   hwcom.print2(t);
   out[tog].buffer[pos]='n';
   hwcom.send(out[tog].buffer,pos+1);
   tog=(tog+1) and 1;
   pos=0;
  }
}

function print2(byte s[])
{
 if pos+s[31]>256
  {
   string t;
   str.clear(t);
   str.putintf(t,pos,-2);
   str.putchar(t,'n');
   hwcom.print2(t);
   out[tog].buffer[pos]='n';
   hwcom.send(out[tog].buffer,pos+1);
   tog=(tog+1) and 1;
   pos=0;
  }
 mem.copypos(out[tog].buffer,pos,s,0,s[31]);
 pos=pos+s[31];
}


function print(string s)
{
 print2(s);
/* string t;
 str.clear(t);
 str.putintf(t,str.length(s),-2);
 str.putchar(t,'n');
 hwcom.print2(t);
 hwcom.print2(s);
 hwcom.put('n');
 */

}

function slenset(byte s[], byte len)
{
 s[31]=len;
}

function table()
{string s;
 print("<table>n<tr><td>Zeit:</td>n<td");
 system.gettime(Zeit);
 str.clear(s);
 str.putchar(s,'>');
 str.putintf(s,Zeit.hour,2);
 str.putchar(s,':');
 str.putintf(s,Zeit.minute,2);
 str.putchar(s,':');
 str.putintf(s,Zeit.second,2);
 print2(s);
 print("</td></tr>n<tr><td>Datum:</td>");
 print("n<td>");
 str.clear(s);
 str.putintf(s,system.day(),2);
 str.putchar(s,'.');
 str.putintf(s,system.month(),2);
 str.putchar(s,':');
 str.putintf(s,system.year(),4);
 print2(s);
 print("</td></tr>n</table>n");
}

//----------------------------------------
function inputstr(byte s[]) returns int
//----------------------------------------
{byte i,x;
 i=0;
 x=255;
 for i=0 ... 29
 {
  wait hwcom.rxd();
  x=hwcom.get();
  if x==10 or x==13 break;
  s[i]=x;
 }
 if x==13 hwcom.get();
 s[31]=i;
 mem.fillpos(s,i,30-i,0);
 return i;
}

string s;byte x;
thread main
{
 hwcom.setspeed(8);
 hwcom.setbuf(fifo,512);
 edip.FF(edipAddr);
 loop
 {
  hwcom.flush();

  x=inputstr(s);
//  edip.FF(edipAddr);
//  edip.println(edipAddr,s);
  if strx.comp(s,"GET / HTTP/1.0") or strx.comp(s,"GET / HTTP/1.1") or strx.comp(s,"GET /index.html HTTP/1.1")
   {
    hwcom.print("HTTP/1.1 200 OKn");
    hwcom.print("Server: C-Control IIn");
    hwcom.print("Transfer-Encoding: chunkedn");
    hwcom.print("Content-Type: text/htmlnn");
    print("<html>n<body>n");
    print("<b>C-Control II</b> im Web<br>");
    print("n<font color=red>Es geht!!");
    print("</font><br><br><br>n");
    table();
    print("<a href="/">aktualisieren</a>n");
    print("<br><a href="/beep">beep</a>n");
    print("</body>n</html>rn");
    sendbuffer();
    hwcom.print("0nn");
   }
  else
  if strx.comp(s,"GET /beep HTTP/1.0") or strx.comp(s,"GET /beep HTTP/1.1")
   {
    plm.beep(8);
    hwcom.print("HTTP/1.1 200 OKn");
    hwcom.print("Server: C-Control IIn");
    hwcom.print("Transfer-Encoding: chunkedn");
    hwcom.print("Content-Type: text/htmlnn");
    print("<html>n<body>n");
    print("<b>C-Control II</b> im Web<br>");
    print("n<font color=red>Es geht!!");
    print("</font><br><br><br>n");
    print("Es piept ;-)<br><br>n");
    print("<a href="/beep">nochmal</a>n");
    print("<a href="/">zurück</a>n");
    print("</body>n</html>nrnrn");
    sendbuffer();
    hwcom.print("0nn");
    plm.beep(-1);
   }
  else
  if strx.comp(s,"GET /host HTTP/1.1")
   {
    hwcom.print("HTTP/1.1 200 OKn");
    hwcom.print("Server: C-Control IIn");
    hwcom.print("Transfer-Encoding: chunkedn");
    hwcom.print("Content-Type: text/htmlnn");
    print("<html>n<body>n");
    print("<b>Hostmodus wird eingeleitet!");
    print("</b><br>n<br><br><br>n");
    print("</body>n</html>nrnrn");
    sendbuffer();
    hwcom.print("0nn");
    hwcom.put(0);
    sleep 1000;
    while hwcom.rxd()
    {
     hwcom.receive(s,30,0);
     sleep 10;
    }
    quit 2;
   }
  else
   {
    hwcom.print("HTTP/1.0 404 Not Foundn");
    hwcom.print("Server: C-Control IIn");
    hwcom.print("Content-Length: 10n");
    hwcom.print("Content-Language: den");
    hwcom.print("Content-Type: text/htmln");
    hwcom.print("Connection: closenn");
    hwcom.print("404 Not Foundn");
   }
  hwcom.put(0);
  while hwcom.rxd()
  {
  hwcom.receive(s,30,0);
//   str.clear(s);
//   slenset(s,hwcom.receive(s,30,0));
//   edip.print(edipAddr,s);
//   sleep 200;
  }
 }
}


Und hier noch eine Vorschau für die nötigen Routinen zum Hostmode-Einleiten
für das künftige Download-Tool:


byte x[2];
thread com
{
 wait hwcom.rxd();
 x[0]=hwcom.get();
 if x[0]==254
  {
   x[1]=hwcom.receive(x,1,1000);
   if x[0]==254 and x[1]==1 quit 1;// Hostmode einleiten, normal
   if x[0]==253 and x[1]==1
    {byte buf[1024];          //Erweiterter Empfangspuffer
     hwcom.setbuf(buf,1024);  // Hostmode einleiten XPort
     quit 256;                // Schnittstellenparameter beibehalten
    }
  }

 // Platz für eigene Schnittstellenroutinen ...
// hwcom.flush();
}

thread main
{byte second;
 lcdext.init();
 hwcom.setspeed(8);
 run com;
 loop
 {
  lcdext.line(1);
  lcdext.time(0);
  lcdext.line(2);
  lcdext.date(0);
  wait second!=system.second();
  second=system.second();
 }
}

Hierfür ist dann OSOPT V3.1(b1) Voraussetzung, da erst ab dieser Version
die Möglichkeit besteht, die Schnittstellenparameter für den Hostmode beizubehalten.
Somit kann dann mit bis zu 1kB-Datenblöcken gearbeitet werden, was die �bertragung
wiederum beschleunigt, welche zur TCP/IP verlangsamt wurde. ;-)

MfG André H.



Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten:

Re: Die Lösung (von Mark - 6.08.2006 13:19)