//Autor Regine Breuer
//programmiert in Delphi 6 unter WIN98
//Das Programm dient dem Einlesen von Wetterdaten des
//Wettersensors DFT 1MV der Firma Reinhardt
//Die Kommunikation erfolgt über die serielle Schnittstelle mit Hilfe
//des AsyncPro von Turbopower
//Standarseinstellungen: 19200Baud, 8Datenbits,0 Paritätsbit,1 Stopbit
//Zuerst muss der entsprechende Comport gewählt, anschließend verbunden
//werden
//Nach dem Verbinden erfolgt das automatische Setzen der Wettersensoruhr
//mittels Befehl: !uSSMMSSTTMMJJ
//danach wird der Sensor mittels !S4 stumm geschaltet
// Es werden nun in fünfminütigem Takt Daten eingelesen; hierzu wird
//jedes mal der Befehl ?u verwendet (einen Datensatz senden)
//12.12.04
//TIMER FUNKTIONIERT NICHT
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OoMisc, AdPort, StdCtrls, ExtCtrls;
type
TForm1 =
class(TForm)
ApdComPort1: TApdComPort;
Button1: TButton;
Button2: TButton;
RadioGroup1: TRadioGroup;
Timer1: TTimer;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Memo1: TMemo;
Timer2: TTimer;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure RadioGroup1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure ApdComPort1TriggerAvail(CP: TObject; Count: Word);
procedure FormClose(Sender: TObject;
var Action: TCloseAction);
procedure Timer2Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Clear;
end;
//Verbinden und Uhrzeit setzen nach Verbindung
procedure TForm1.Button1Click(Sender: TObject);
var s:
string;
zeit:
string;
datum:
string;
stumm:
string;
begin
ApdComPort1.Open :=true;
// Sendebefehl für Uhrzeit einlesen generieren
// Umwandlung '2004' in '04'
// Doppelpunkte und Punkte rausnehmen,
// da so für Sensorbefehl vorgesehen !uSSMMSSTTMMJJ
datum:=formatdatetime('
dd.mm.yy', StrToDate(DateToStr(Now)));
s:= TimeToStr(Now) + datum;
s:=StringReplace(TimeToStr(Now) + datum,'
:','
',[rfReplaceAll]);
s:=StringReplace(s,'
.','
',[rfReplaceAll]);
zeit := '
!u'+ s +#$0d;
if ApdComPort1.OutBuffFree >= Length(zeit)
then //prüfen, ob im Output Buffer
//genügend Platz vorhanden
ApdComPort1.PutString(zeit);
//Befehlsstring senden
sleep(100);
//Sensor stummschalten mittels !s4 Befehl
stumm:= '
!s4' +#$0d;
if ApdComPort1.OutBuffFree >= Length(stumm)
then //prüfen, ob im Output Buffer
ApdComPort1.PutString(stumm);
Timer2.Enabled:= true;
end;
//Trennen
procedure TForm1.Button2Click(Sender: TObject);
begin
ApdComPort1.Open :=False;
end;
//Com Port wählen
procedure TForm1.RadioGroup1Click(Sender: TObject);
//Com Port wählen (1 oder2)
begin
case RadioGroup1.ItemIndex
of
0: ApdComPort1.ComNumber := 1;
1: ApdComPort1.ComNumber := 2;
end;
end;
//Datum/Uhrzeit in Group box
procedure TForm1.Timer1Timer(Sender: TObject);
//GroupBox mit Datum und Uhrzeit
begin //Timer um Detum und Uhrezit zu aktualisieren
Label2.Caption := TimeToStr(Now);
Label1.Caption := DateToStr(Now);
end;
//Sensor in Normalbetrieb schalten per Button Click
procedure TForm1.Button4Click(Sender: TObject);
var normalbetrieb:
string;
begin
normalbetrieb:= '
!s0' +#$0d;
if ApdComPort1.OutBuffFree >= Length(normalbetrieb)
then //prüfen, ob im Output Buffer
ApdComPort1.PutString(normalbetrieb);
end;
//Sensor stumm schalten per Button Click
procedure TForm1.Button5Click(Sender: TObject);
var stumm:
string;
begin
stumm:= '
!s4' +#$0d;
if ApdComPort1.OutBuffFree >= Length(stumm)
then //prüfen, ob im Output Buffer
ApdComPort1.PutString(stumm);
end;
//Befehl per Button Click, um einen Datensatz abzurufen
procedure TForm1.Button6Click(Sender: TObject);
var datensatz:
string;
begin
datensatz:= '
?u' +#$0d;
if ApdComPort1.OutBuffFree >= Length(datensatz)
then //prüfen, ob im Output Buffer
ApdComPort1.PutString(datensatz);
end;
procedure TForm1.Timer2Timer(Sender: TObject);
var datensatz:
string;
begin
datensatz:= '
?u' +#$0d;
if ApdComPort1.OutBuffFree >= Length(datensatz)
then //prüfen, ob im Output Buffer
ApdComPort1.PutString(datensatz);
end;
procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word);
var I : Word;
C: char;
daten :
string ;
f: TextFile;
begin
daten := '
';
AssignFile (f, '
C:\Wetterdaten.txt');
if not FileExists('
C:\Wetterdaten.txt')
then
begin
ReWrite(f);
end else
begin
Append(f);
end;
for I := 1
to Count
do
begin
C := ApdComPort1.GetChar;
daten := daten + C;
sleep(15);
end;
// Daten in Memo schreiben
Memo1.SelText:= daten;
Write(f,daten);
CloseFile(f);
end;
//Formular schließen
procedure TForm1.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Timer2.Enabled:=false;
ApdComPort1.Open:=false;
end;
end.