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

Re: XPort und DL-Tool Kategorie: Sonstige Hardware (von André H. - 3.01.2010 12:20)
Als Antwort auf Re: XPort und DL-Tool von Volker - 31.12.2009 13:01
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, C-Control II Station, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.1
Hallo Volker,

> bin schon ein Stück weitergekommen. Mein aktuelles Verständnis:
> - Programm-DL über LAN(XPort) geht nicht, wenn der Hostmode über die Taster am Applicationboard
> eingeleitet wird
> - Man muss z.B. den Testthread von André schon auf der cc2 laufen haben (Siehe unten).
> Dieser funktioniert bei mir aber irgendwie nicht.

Es darf nur ein Thread gleichzeitig auf Hwcom zugreifen.
Der Thread aus der Html-Hilfe ist nur ein Beispiel.

> - Noch eine Frage: Der Waithost-Thread sollte doch nur laufen, wenn auch ein Programm übertragen
> werden soll, oder?

Nein.
Die Routinen müssen in Deine Kommunikationsroutinen eingebunden werden.

> Denn sonst würde er ja in die "normale" RS232 Kommunikation eingreifen, wenn das erste Byte den
> Wert 254 hat, oder?

Das sollen die Routinen auch.

> - Nach meinem Verständnis würde ich dann z.B. über einen Taster den Waithost-Thread starten,
> um einen Programm-DL über LAN(XPort)durchzuführen

Falsch.
Es darf nur einen Kommunikationsthread für Hwcom geben.
Schau Dir in der HTML-Hilfe zum DL-Tool das zweite Beispiel an.

Ach ja, bitte nutze bitte die Code-Tags, wenn Du Quellcode postest.

Hier ein Link zu einem Testprogramm zum Laden von Programmen:
XPort-Ladetest.zip
Es enthält auch die Pa�wortfunktion zum Schutz vor unberechtigten
Versuchen, Programme zu laden.

Hier ein kleines Beispiel von Laderoutinen zusammen mit anderen Kommunikationsroutinen:
thread com
{byte x,y,z[2],hk;long timer;
 byte indata[32];
 string p;
 hwcom.init();
 hwcom.setbuf(var.buffer,2080);
 hwcom.setspeed(8);
 hwcom.flush();
 wtimer=system.timer();
 loop
 {
  while(!hwcom.rxd())
  {// EMail-Versand bei bestimmten Ereignissen.
   if var.sendmail and system.timer()-wtimer>2000 sendmail(var.sendmail-1);
   yield;
  }
  x=hwcom.get();
  timer=system.timer();
  if x==254
  {
   x=hwcom.receive(z,1,250);
   if z[0]==254 and x==1
    {
     var.backupCounter();  //Counter-Werte speichern
     quit 1;  // Hostmode einleiten (normal)
    }
   if z[0]==253 and x==1
    {
     hwcom.print("pwd");        //PaÃ?wortanforderung senden
     str.clear(p);
     getPWD(p,15000);           //PaÃ?wort empfangen, Timeout nach 15sek.
     if strx.comp("geheim",p)   //PaÃ?wort prüfen
      {
       var.backupCounter();  //Counter-Werte speichern
       hwcom.print("ok");       //bei korrektem PaÃ?wort "ok" senden
       quit 261;// Hostmode einleiten XPort
      }
     hwcom.print("false");      //bei falschem PaÃ?wort oder timeout "false" senden
     hwcom.flush();
     continue;
    }
  }
  else
  if x=='W' WebData();// Web/XPort
  else
  if x=='t' setTime();//Zeit setzen
  else
  if x=='J' JSON();//Datensatz im JSON-Format senden
  else
  if x=='C'//Counter Clear
   {
    timer=system.timer();
    loop
    {
     if hwcom.rxd()
      {
       x=hwcom.get();
       if x=='c'
       {
        var.Laufzeit[0]=0;
        var.Laufzeit[1]=0;
        var.Standzeit[0]=0;
        var.Standzeit[1]=0;
        var.backupCounter();
       }
       else
       if x=='M'
       {
        var.sendmail=1;
       }
       else
       if x=='N'
       {
        var.sendmail=2;
       }
       else break;
      }
      if system.timer()-timer>=1000 break;
      yield;
     }
   }
  else
  if x=='m' Menue();
  else
  if x==' ' Status();
  else
  if x=='s' // Ausgänge setzen
   {
    timer=system.timer();
    loop
    {
     if hwcom.rxd()
      {
       x=hwcom.get();
       if x=='1' or x=='2'  // Ausgang
       {hk=x-0x31;
        timer=system.timer();
        loop
        {
         if hwcom.rxd()
         {
          x=hwcom.get();// Hand(0, 1)
          if x=='1' ports.set(14+hk,1);
          else
          if x=='0' ports.set(14+hk,0);
          break;
         }
         if system.timer()-timer>=1000 break;
         yield;
        }
        break;
       }
       else break;

      }
      if system.timer()-timer>=1000 break;
      yield;
     }
    wtimer=system.timer();
   }
  else
  if x==255
   {
    hwcom.init();
    hwcom.setbuf(var.buffer,2080);
    hwcom.setspeed(8);
    hwcom.flush();
   }
 }
}

Dies ist kein vollständiges Programm.
Der Empfangspuffer ist grö�er als 1056Byte, da dies in diesem Projekt erforderlich ist.
Wichtig ist nur, daÃ? der Empfagspuffer mindestens 1056Byte.
Es ist zwar kein Webserver enthalten, allerdings mehrere verschiedene
Kommunikationsarten:
- Es werden EMails versendet. Das Versenden findet aber nur statt, wenn mind. 2sek.
  lang keine Kommunikation stattgefunden hat.
- Verschiede Daten, die von auÃ?en angefordert werden.
  Darunter einen Datensatz für ein PHP-Skript, aber auch für eine Datenerfassung im
  JSON-Format.
- Abfragen und Setzen von Uhrzeit über PHP-Skript während dem Anfordern von Daten.
- Löschen von Counter, darunter auch das definierte Auslösen vom Mailversand.
- Interface für Hyperterminal mit Menü 'm', und Ausgabe des aktuellen Staus ' ', sowie gezieltes
  Triggern von Ausgängen.

Das Einbinden der Webserverfunktion ist hier prinzipiell auch möglich:
Nur mu�t Du hier auf "ET" statt auf "GET" prüfen, da das erste Zeichen bereits abgefragt wurde.
Statt einem strx.comp(s,"GET / HTTP/1.1") würdest Du hier
strx.comp(s,"ET / HTTP/1.1") schreiben.
Vorher würdest Du natürlich noch mit einem if x=='G' { } verzweigen.

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: XPort und DL-Tool (von Volker - 5.01.2010 11:25)