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 Volker - 5.01.2010 11:25)
Als Antwort auf Re: XPort und DL-Tool von André H. - 3.01.2010 12:20
Ich nutze:
C164CI-ControllerBoard, CC2-Application-Board, 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.


Hallo André,
super, vielen Dank. Jetzt ist mir die Sache Klar.

GruÃ? Volker






    Antwort schreiben


Antworten: