
| 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 | ||
| ||
|
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: | ||