Witajcie.
Mam maly problem, z ktorym walcze od kilku dni.
Pisze program, ktory ma za zadanei odczytywac temperatury i zapisywac wyniki w pliku tekstowym.
Ponadto chcialem aby program wysylal na ftp ostatni pomiar (najbardziej aktualny), ktory umieszczony jest w osobnym pliku tymczasowym.
Pomiar temperatury realizowany jest poprzez wywolanie zewnetrznego programu do odczytu temperatur co 1 minute, przy pomocy timera.
Po odczycie temperatur i utworzeniu pliku tymczasowego, program ma sie polaczyc do ftp i wyslac ten plik na serwer. To zadanie powinno rowniez byc realizowane przez ttimera oraz idFTP.
Problem pojawia się gdy dołącze procedure wysylania pliku (60B) na serwer.
I to tez nie zawsze. Czasem działa przez kilka godzin bez przerwy, a czasem po 15 minutach juz się wykrzacza w taki sposob, ze nie odczytuje temperatur i nie zapisuje nic do plikow.
Najczestszy błąd to przekroczony czas serwera.
Czy mozna w jakis sposob ograniczyc czas proby połączenia sie do ftp przy uzyciu komponentu idFtp, tak aby jesli nie połączy się przez np. 20sek, olał sprawe i sprobował później?
Obecnie program działa na moim laptopie, ale będzie transferowany na stacjonarny komputer z UPSem.
Teraz pytanie takie, jak sprawdzic czy jest połączenie z netem??
Dzisiaj miałem sytuacje taką, ze prąd wyłączyli, komputer działał, net (router) nie, pomiary były realizowane.
Programik chciał wysłać plik na serwer i się wywalil.
procedure TMainForm.Timer1Timer(Sender: TObject);
begin
// realizowanie odczytów temperatur oraz tworzenie plikow
czy_wysylac:=true; // jesli plik z danymi jest poprawny sprobuj go wyslac
Timer2.enabled:=true; // wiadomo co to jest :):)
end;
Drgui timer ktory co pewien czas ma wysylac plik na serwer wyglada tak:
procedure TMainForm.Timer2Timer(Sender: TObject);
begin
if czy_wysylac then begin
idftp1.Password:='...';
idftp1.Username:='...';
idftp1.Host:='...';
try
idftp1.Connect(true,-1);
finally
idftp1.Disconnect;
Timer2.enabled:=false;
end;
end;
end;
No i sama procedurka wysylania:
procedure TMainForm.IdFTP1AfterClientLogin(Sender: TObject);
begin
if idftp1.Connected then
idftp1.Put('d:\delphi\temperatury\dane\net.txt','/public_html/strony/pomiary.txt', false);
end;
Czasy Timerow to:
Timer1.Interval:=60000;
Timer2.Interval:=10000;
Jeśli ktoś wie jak pomoc, to prosze o jakieś wskazówki.
Pozdrawiam
Maciej Płokarz
SonErgo