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)