Unit ADDAUnit;{
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º T E C H N I S C H E U N I V E R S I T Ž T C H E M N I T Z º
º º
º Programm zur Ansteuerung des AD/DA-Wandlermoduls mit Einchip- º
º rechner 68HC11 º
º º
º UNIT mit programmspezifischen Ausgaberoutinen º
º º
º Programmierer: Torsten Levin º
º 03 AET 89 º
º TU Chemnitz-Zwickau º
º º
º Chemnitz, Januar-April 1993 º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
h#s 12/02}
INTERFACE
Uses Crt,Graph,maus,Dos,image,windows,Konstant,diagramm,Print,ADDAModul;
function Betriebsart:Boolean;
Procedure XZoom;
Procedure YSkalierung;
Procedure Druckebildschirm;
Procedure DirektAD;
Procedure DirektDA;
procedure ScreenInit;
IMPLEMENTATION
function Betriebsart:Boolean;
Const
Hauptfenster='0..7 Kanal >P< Pause >E/Z< Einmalig/Zyklisch >Return< OK >ESC< Abbruch';
Pausenzeit ='Pausenzeit zwischen den zyklischen Umsetzungen >Return< OK >ESC< Abbruch';
Var
i: Integer;
c : String[1];
Betriebvar : Betriebstyp;
PauseStr : String;
Valtest : Integer;
Kanalvar : Kanaltyp;
Valwert : Real;
Procedure OutKanal;
Var i: Integer;
Begin
for i:=0 to 7 do Schalter(120,140+22*i,Kanalvar[i]);
End;
Procedure Outbetrieb;
Begin
Schalter(240,140,Betriebvar=Einmalig);
Schalter(240,162,Betriebvar=Zyklisch);
End;
function NumKanal:Integer;
var i,ret: Integer;
begin
ret:=0;
for i:=0 to 7 do if Kanalvar[i] then Inc(ret);
NumKanal:=ret;
end;
Begin
Betriebsart:=False;
Kanalvar:=Daten.Kanalnr;
Betriebvar:=Daten.Betriebnr;
str(Daten.Pause,Pausestr);
Openwindow2(100,100,250,220,2,4,'Betriebsart ADU',true);
StatusZeile(HauptFenster);
OutKanal;
OutBetrieb;
for i:=0 to 7 do Begin
Pressknopf2(115,137+22*i,95,18,true);
str(i,c);
setcolor(Daten.Color[3]);
outtextxy(140,143+22*i,'Kanal '+c);
outtextxy(139+48,144+22*i,'_');
End;
OuttextUL(260,143,'Einmalig');
OuttextUL(260,165,'Zyklisch');
RightTextXY(295,200,Pausestr);
Outtextxy(300,200,'[ms]');
Pressknopf(235,137,340,155);
Pressknopf(235,159,340,177);
knopf2(243,220,89,20,'&Pausenzeit',1,3);
knopf2(235,260,105,20,'OK',1,3);
knopf2(235,290,105,20,'Abbruch',1,3);
Pressknopf(235,185,340,250);
Pressknopf(234,184,341,251);
Pressknopf(250,197,297,210);
Repeat
Eingabe2;
{ Until (ord(ta) in [13,27,48..55,69,80,90,101,112,122]) or (mb=1);}
if Hit(#13,235,260,105,20) then begin
if NumKanal=0 then Begin
Fehler(200,200,False,'Es wurde kein','AD-Kanal gew„hlt!',
'Diese Einstellung','ist nicht zul„ssig.');
StatusZeile(HauptFenster);
End else begin
Daten.Kanalnr:=Kanalvar;
Daten.Betriebnr:=Betriebvar;
Betriebsart:=True;
break;
end;
end;
if Hit(#27,235,290,105,20) then break;
if Hit('P',243,220,89,20) then begin
StatusZeile(Pausenzeit);
If edit(250,190,'Pausenzeit',5,0,'Eingabe der Pausenzeit',
'w„hrend der Umsetzung','[ 0 ... 65535 ms ]',PauseStr) Then Begin
Val(PauseStr,ValWert,ValTest);
if Round(ValWert)>65535 then Valwert:=65535;
{ if Pausestr='' then Pausestr:='0';}
Str(Round(Valwert),Pausestr);
bar(252,198,294,209);
RightTextXY(295,200,Pausestr);
Daten.Pause:=Round(ValWert);
End;
StatusZeile(HauptFenster);
End;
if Hit('E',240,140,12,12) then begin
Betriebvar:=Einmalig;
OutBetrieb;
end;
if Hit('Z',240,162,12,12) then begin
Betriebvar:=Zyklisch;
OutBetrieb;
end;
for i:=0 to 7 do if Hit(chr(i+ord('0')),120,140+22*i,12,12) then begin
Kanalvar[i]:=not Kanalvar[i];
If NumKanal>4 Then begin
Kanalvar[i]:=False;
Fehler(200,200,false,'Es k”nnen nur','4 Kan„le gleich-','zeitig angew„hlt','werden!');
StatusZeile(HauptFenster);
End;
outkanal;
end;
Until false;
CloseWindow;
End;
{---Prozedur zum Zoomen in X-Richtung----------------------}
Procedure XZoom;
Const Status=#27' '#26' Bewegen >Leertaste< Wechseln '+
'>N< Normal >Return< OK >ESC< Abbruch';
Var
xpos1,xpos2:Integer;
xmove:^Integer; {Referenz, zeigt entweder auf xpos1 oder auf xpos2}
Procedure OutWerte;
var
c: String[32];
Begin
setfillstyle(1,Daten.Color[1]);
bar(461,59,534,69);
bar(546,59,619,69);
bar(461,44,534,54);
bar(546,44,619,54);
setcolor(Daten.Color[3]);
str(XMasstab*(xpos1-40)+Xmin:5:0,C);
RightTextXY(532,46,c);
str((XMasstab*(xpos1-40)+Xmin)*Daten.Urate:3:3,C);
RightTextXY(532,61,c);
str(XMasstab*(xpos2-40)+Xmin:5:0,C);
RightTextXY(617,46,c);
str((XMasstab*(xpos2-40)+Xmin)*Daten.Urate:3:3,C);
RightTextXY(617,61,c);
End;
procedure DrawLines;
{Zeigt oder entfernt (XorPut!) die Linien an xpos1 und xpos2}
begin
setwritemode(XorPut);
setlinestyle(1,0,0);
setcolor(Daten.Color[1]);
line(xpos1,105,xpos1,370);
setlinestyle(2,0,0);
line(xpos2,105,xpos2,370);
setwritemode(NormalPut);
setlinestyle(0,0,0);
end;
procedure SwapReference;
{Tauscht die Refernz aus}
begin
if xmove=@xpos1 then xmove:=@xpos2 else xmove:=@xpos1;
end;
procedure KeepOrder;
{Sorgt f�r xpos1<=xpos2 und tauscht ggf. auch die Referenz xmove}
var
h: Integer;
begin
if xpos1>xpos2 then begin
h:=xpos2; xpos2:=xpos1; xpos1:=h; {tauschen}
SwapReference;
end;
end;
var
mausvor:Boolean;
Begin
xpos1:=315;
xpos2:=315;
xmove:=@xpos1;
Openwindow2(385,3,245,100,2,4,'X-Zoom',true);
Knopf2(390,77,75,20,'OK',1,3);
Knopf2(470,77,75,20,'Abbruch',1,3);
Knopf2(550,77,75,20,'&Normal',1,3);
pressknopf(460,58,535,70);
pressknopf(545,58,620,70);
pressknopf(460,43,535,55);
pressknopf(545,43,620,55);
backknopf(390,29,625,73);
OutWerte;
StatusZeile(Status);
Outtextxy(482,33,'Von:');
Outtextxy(567,33,'Bis:');
Outtextxy(395,46,'St�tzst.');
Outtextxy(395,61,' t [ms] ');
DrawLines;
Repeat
mausvor:=mb<>0;
Eingabe2;
if Hit(#13,390,77,75,20) then begin
ta:=#13;
Xmax:=Round(XMasstab*(xpos2-40))+Xmin;
Xmin:=Round(XMasstab*(xpos1-40))+Xmin;
If Xmax-Xmin<10 Then Xmax:=Xmin+10;
XAutomatik:=False;
break;
End;
if Hit(#27,470,77,75,20) then begin
DrawLines;
break;
End;
if Hit('N',550,77,75,20) then begin
ta:=#13;
XAutomatik:=True;
break;
End;
if MausInRect(40,106,590,330) and (mb<>0) then begin
DrawLines;
if mausvor then begin
xmove^:=mx;
end else begin
xpos1:=mx; {dr�cken: linke Linie}
xpos2:=mx; {und rechte Linie gleich setzen}
end;
KeepOrder;
DrawLines;
Outwerte;
End;
case ta of
#0: Begin
DrawLines;
Case tahi of
77 : Inc(xmove^); {Pfeil rechts}
75 : Dec(xmove^); {Pfeil links}
116,$51: Inc(xmove^,10); {Strg+Pfeil rechts, Bild Ab}
115,$49: Dec(xmove^,10); {Strg+Pfeil links, Bild Auf}
End;
If xmove^<40 Then xmove^:=40;
If xmove^>630 then xmove^:=630;
KeepOrder;
DrawLines;
OutWerte;
end;
' ': SwapReference;
end{case ta};
Until false;
CloseWindow;
if ta=#13 then MaleKurve;
End;
{---Freie Y-Skalierung des Diagramms-----------------------}
Procedure YSkalierung;
Const Status='>Y< Automatik >I< Minimum >A< Maximum >Return< OK >ESC< Abbruch';
Var
AutoMerk : Boolean;
YmaxMerk,
YminMerk : TReal;
procedure SetAutoMerk(NewAuto:Boolean);
begin
AutoMerk:=NewAuto;
Schalter(202,209,NewAuto);
end;
procedure SetMaxMerk(NewMerk:TReal);
var
C: String[32];
begin
YmaxMerk:=NewMerk;
Str(YmaxMerk:1:2,C);
Setfillstyle(1,Daten.Color[1]);
Bar(326,138,371,148);
Bar(338,155,406,165);
RightTextXY(369,140,C);
Outtextxy(341,157,ByteToBit(Round(YmaxMerk/DAQ)+BipOffset));
end;
procedure SetMinMerk(NewMerk:TReal);
var
C: String[32];
begin
YminMerk:=NewMerk;
Str(YminMerk:1:2,C);
Setfillstyle(1,Daten.Color[1]);
Bar(201,138,246,148);
Bar(213,155,282,165);
RightTextXY(244,140,C);
Outtextxy(216,157,ByteToBit(Round(YminMerk/DAQ)+BipOffset));
end;
var
Test: Integer;
C: String;
Begin
Openwindow2(180,100,260,165,2,4,'Y-Skalierung',true);
Knopf2(210,235,90,20,'OK',1,3);
Knopf2(320,235,90,20,'Abbruch',1,3);
Statuszeile(Status);
Pressknopf(200,137,247,149);
Pressknopf(212,154,283,166);
Pressknopf(190,130,305,195);
Pressknopf(191,131,304,194);
Pressknopf(325,137,372,149);
Pressknopf(337,154,407,166);
Pressknopf(315,130,430,195);
Pressknopf(316,131,429,194);
Pressknopf(195,206,425,224);
Setcolor(Daten.Color[3]);
OuttextUL(227,211,'Y-Skalierungsautomatik');
Outtextxy(255,140,'U [V]');
Outtextxy(380,140,'U [V]');
SetAutoMerk(YAutomatik);
SetMaxMerk(Ymax);
SetMinMerk(Ymin);
Knopf2(200,170,95,20,'M&inimum',1,3);
Knopf2(325,170,95,20,'M&aximum',1,3);
Repeat
Eingabe2;
If Hit('Y',202,209,12,12) Then SetAutoMerk(not Automerk);
If Hit(#13,210,235,90,20) Then Begin
ta:=#13;
YAutomatik:=AutoMerk;
Ymax:=YmaxMerk;
Ymin:=YminMerk;
break;
End;
If Hit(#27,320,235,90,20) Then break;
If Hit('A',325,170,95,20) Then Begin {Maximum}
Str(YmaxMerk:1:2,C);
If edit(250,190,'Y-Maximum',5,1,'GrӇte positive Spannung',
'in 10mV-Schritten','[ 0.05..4.96 V ]',C) Then Begin
Val(C,YmaxMerk,Test);
YmaxMerk:=Round(YmaxMerk*100)/100;
If YmaxMerk<0.05 Then YmaxMerk:=0.05;
If YmaxMerk>4.96 Then YmaxMerk:=4.96;
SetMaxMerk(YmaxMerk);
SetAutoMerk(false);
End;
End;
If Hit('I',200,170,95,20) Then Begin {Minimum}
Str(YminMerk:1:2,C);
If edit(250,190,'Y-Minimum',5,1,'Kleinste negative Spannung',
'in 10mV-Schritten','[ -5..-0.05 V ]',C) Then Begin
Val(C,YminMerk,Test);
YminMerk:=Round(YminMerk*100)/100;
If YminMerk<-5 Then YminMerk:=-5;
If YminMerk>-0.05 Then YminMerk:=-0.05;
SetMinMerk(YminMerk);
SetAutoMerk(False);
End;
End;
Until false;
CloseWindow;
if ta=#13 then begin {OK gedr�ckt}
Beschriften;
Malekurve;
end;
End;
{---Prozedur f�r einen Bildschirmausdruck------------------}
Procedure Druckebildschirm;
Const
Druckfarben : ColorPal=(15,15,0,0,15,0,0,0,0,0,0,0);
Days : array [0..6] of String[10] =(
'Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag');
Var
FarbMerk: ColorPal;
y, m, d, dow : Word;
yc,mc,dc : String[4];
IO : Boolean;
Error : Byte;
function Druckhinweis(X,Y:Integer):Boolean;
Const Status='Ausdrucken des aktuellen Bildschirms >Return< OK >ESC< Abbruch';
Var
C : String[1];
begin
Druckhinweis:=False;
openwindow2(x,y,340,140,2,4,'Bildschirm drucken',True);
putpicture('druck',x+5,y+40);
StatusZeile(Status);
setcolor(Daten.Color[3]);
settextstyle(0,0,1);
If Inst.LPT=1 Then C:='1' else C:='2';
outtextxy(x+80,y+40,'Machen Sie den Drucker an LPT'+C);
outtextxy(x+80,y+55,'fertig. Bei Wahl von OK beginnt');
outtextxy(x+80,y+70,'sofort der Ausdruck. W„hrend des');
outtextxy(x+80,y+85,'Druckens mit >ESC< abbrechen.');
knopf2(x+20,y+110,90,20,'OK',1,3);
knopf2(x+130,y+110,90,20,'Abbruch',1,3);
repeat
eingabe2;
If Hit(#13,x+20,y+110,90,20) Then Begin
Druckhinweis:=True; break;
End;
If Hit(#27,x+130,y+110,90,20) Then break;
Until false;
closewindow;
End;
procedure PutError(Error:Integer);
begin
Case Error of
1: Fehler(200,100,False,'Die Wartezeit','ist abgelaufen.','Der Druckvorgang','wird beendet.');
2: Fehler(200,100,False,'Ausgabefehler','am Drucker!','Der Druckvorgang','wird beendet.');
3: Fehler(200,100,False,'Kein Papier bzw.','Ger„t nicht bereit!','Der Druckvorgang','wird beendet.');
4: Fehler(200,100,False,'Der Drucker zeigt','keine Reaktion!','Der Druckvorgang','wird beendet.');
5: Fehler(200,100,False,'Kein Drucker ge-','funden!','Der Druckvorgang','wird beendet.');
end;
end;
Begin
If Druckhinweis(150,120) then Begin
InitLPT(Inst.LPT,Error);
PutError(Error);
if error=0 then begin
FarbMerk:=Daten.Color;
Daten.Color:=Druckfarben;
clearscreen('AD/DA-Wandlermodul','TU Chemnitz');
GetDate(y,m,d,dow);
str(y,yc);
str(m,mc);
str(d,dc);
StatusZeile('Ausdruck vom '+Days[dow]+', den '+dc+'.'+mc+'.'+yc);
MaleKurvenWin;
MaleKurve;
OutXAchse;
HardCopy(Inst.LPT,Error);
Daten.Color:=FarbMerk;
ScreenInit;
PutError(Error)
End;
End;
End;
{---Direkte AD-Umsetzung-----------------------------------}
Procedure DirektAD;
Const Status='>E< Einmalige Umsetzung >Z< Zyklische Umsetzung >ESC< Abbruch';
StatusZ='Zyklische Umsetzung l„uft... >ESC< Abbruch';
Var
Ende,Okay: Boolean;
KanalNr: Integer;
C: String;
procedure DirektAnzeige;
begin
SetWaitCursor(true);
Okay:=modul(2,AdPrPuffer,0,AdStartAdr,1,4) { starten }
and modul(3,AdPrPuffer,0,0,1,4); { Datum holen }
SetWaitCursor(false);
setfillstyle(1,Daten.Color[1]);
Bar(241,161,469,196);
Bar(241,206,469,234);
str((DirektWert-BipOffset)*DAQ:1:3,C);
setcolor(Daten.Color[3]);
settextStyle(0,0,4);
RightTextXY(435+32,165,C+'V');
settextstyle(0,0,3);
Outtextxy(265,210,ByteToBit(DirektWert));
settextStyle(0,0,0);
end;
Begin
If not IsModulInit('Eine Umsetzung ist','nicht m”glich.') Then exit;
Ende:=False;
Okay:=True;
KanalNr:=1;
if not Auswahl(100,100,'AD-Direktumsetzung',ADKanaldaten,KanalNr)
then exit;
Dec(KanalNr);
openwindow2(150,100,340,200,2,4,
'ADU-Direktbetrieb Kanal '+chr(KanalNr+48),True);
putpicture('ADU',170,150);
knopf2(170,270,90,20,'&Einmalig',1,3);
knopf2(280,270,90,20,'&Zyklisch',1,3);
knopf2(390,270,90,20,'Abbruch',1,3);
pressknopf(230,140,480,245);
pressknopf(231,141,479,244);
pressknopf(240,160,470,197);
pressknopf(240,205,470,235);
setcolor(Daten.Color[3]);
Outtextxy(254,147,'Eingelesener Wert:');
StatusZeile(Status);
SetWaitCursor(true);
Okay:=MapBinaryData(AdPrNameD,AdPrPuffer,AdPrSize)
{ Programmdatei f�r Direkt-Betrieb }
and modul(1,AdPrPuffer,AdPrSize,0,0,4) { Direkt-Programm laden }
and KanalWahl(KanalNr); { Kanal einstellen }
SetWaitCursor(false);
If Okay Then Begin
Repeat
Eingabe2;
{ Until (mb=1) or (Ord(Ta) in [27,69,90,101,122]);}
If Hit('E',170,270,90,20) Then Begin
DirektAnzeige;
End;
If Hit('Z',280,270,90,20) Then Begin
Statuszeile(StatusZ);
openwindow2(250,260,230,50,5,6,'Zyklische AD-Umsetzung',True);
setcolor(Daten.Color[3]);
outtextxy(295,292,'Abbruch mit >ESC<');
repeat
DirektAnzeige;
Taste;
until (ta=#27) or (not Okay);
settextStyle(0,0,0);
Closewindow;
ta:=#1;
Statuszeile(Status);
End;
If Hit(#27,390,270,90,20) Then Begin
SetWaitCursor(true);
Okay:=MapBinaryData(AdPrName,AdPrPuffer,AdPrSize)
{ Progr.datei wieder fuer Normal-Betrieb }
and modul(1,AdPrPuffer,AdPrSize,0,0,4) { AD-Programm laden }
and SStellenEinstellen(Round(Daten.SStellen))
and UrateEinstellen(Daten.Urate);
SetWaitCursor(false);
Ende:=True;
End;
Until Ende or Not Okay;
If Not Okay Then Begin
Fehler(200,150,False,'W„hrend der Um-','setzung ist ein','nicht behebbarer','Fehler aufgetreten');
ModulInit:=False;
End;
End
else FehlerReagiertNicht;
Closewindow;
End;
function ValBin(const s:String):Integer;
{Bin„r-String in Zahl wandeln}
var
i,v:Integer;
begin
v:=0;
for i:=1 to Length(s) do begin
if not (s[i] in ['0','1']) then break;
v:=v+v;
if s[i]='1' then Inc(v);
end;
ValBin:=v;
end;
{---Direkte DA-Umsetzung-----------------------------------}
Procedure DirektDA;
Const Status='0,1 Direkte Eingabe '#24#25+
' Auf/Ab >U< Start der Umsetzung >ESC< Abbruch';
Var
C: String[8]; {h„lt die Bits}
Procedure OutCursor(Stelle:Integer);
Var i : Integer;
Begin
If Stelle>8 Then Stelle:=8;
setcolor(Daten.Color[1]);
settextstyle(0,0,3);
For i:=1 To 8 Do Outtextxy(241+24*i,213,'_');
setcolor(Daten.Color[3]);
Outtextxy(241+24*Stelle,213,'_');
settextstyle(0,0,0);
End;
procedure OutVolt; {die "Volt" stehen in <DirektWert>}
var
c1: string[8];
begin
setfillstyle(1,Daten.Color[1]);
Bar(241,161,469,196);
setcolor(Daten.Color[3]);
str((DirektWert-BipOffset)*DAQ:1:3,C1);
settextStyle(0,0,4);
RightTextXY(435+32,165,C1+'V');
settextstyle(0,0,0);
end;
procedure OutBits; {die "Bits" stehen in <C>}
begin
setfillstyle(1,Daten.Color[1]);
Bar(241,206,469,234);
setcolor(Daten.Color[3]);
settextstyle(0,0,3);
Outtextxy(265,210,C);
settextStyle(0,0,0);
end;
var
Ende,Okay: Boolean;
Begin
If not IsModulInit('Eine Umsetzung ist','nicht m”glich.') Then exit;
Ende:=False;
Okay:=True;
C:='';
openwindow2(150,100,340,200,2,4,'DAU-Direktbetrieb',True);
putpicture('DAU',170,150);
knopf2(170,270,90,20,'&Umsetzung',1,3);
knopf2(280,270,90,20,'Abbruch',1,3);
pressknopf(230,140,480,250);
pressknopf(231,141,479,249);
pressknopf(240,160,470,197);
pressknopf(240,205,470,240);
setcolor(Daten.Color[3]);
Outtextxy(254,147,'Auszugebender Wert:');
OutCursor(1);
StatusZeile(Status);
SetWaitCursor(true);
Okay:=MapBinaryData(DAPrNameD,DAPrPuffer,DAPrSize)
{ Programmdatei fuer Direkt-Betrieb }
and modul(1,DAPrPuffer,DAPrSize,0,0,4); { Direkt-Programm laden }
SetWaitCursor(false);
If Okay Then Begin
Repeat
Eingabe2;
If ta in ['0','1'] Then Begin
If Length(C)<8 Then C:=C+Ta
else Begin
C:=Ta;
setfillstyle(1,Daten.Color[1]);
Bar(241,161,469,196); {"Volt" l”schen}
End;
OutBits;
If Length(C)=8 Then Begin
DirektWert:=ValBin(C);
OutVolt;
End;
OutCursor(Length(C)+1);
End;
If (ta=#0) and (tahi in [72,80]) Then Begin
If Length(C)=8 Then Begin
If tahi=72 Then Inc(DirektWert) Else Dec(DirektWert);
OutVolt;
C:=ByteToBit(DirektWert);
OutBits;
End Else Beep(500,150);
End;
If Hit('U',170,270,90,20) Then Begin
If Length(C)=8 Then Begin
Okay:=Okay and modul(4,DAPrPuffer,0,0,1,5) { Datum senden }
and modul(2,DAPrPuffer,0,DAStartAdr,1,4); { starten }
End Else Beep(500,150);
End;
If Hit(#27,280,270,90,20) Then Begin
SetWaitCursor(true);
Okay:=MapBinaryData(DAPrName,DAPrPuffer,DAPrSize)
and modul(1,DAPrPuffer,DAPrSize,0,0,4) { AD-Programm laden }
and SStellenEinstellen(Round(Daten.SStellen))
and UrateEinstellen(Daten.Urate);
SetWaitCursor(false);
Ende:=True;
End;
Until Ende or Not Okay;
If Not Okay Then Fehler(200,150,False,'W„hrend der Um-','setzung ist ein','nicht behebbarer','Fehler aufgetreten');
End else FehlerReagiertNicht;
Closewindow;
End;
procedure ScreenInit;
begin
ClearScreen('AD/DA-Wandlermodul','TU Chemnitz');
MaleKurvenWin; { Zeichnen des Kurvenfensters }
Beschriften; { Skalieren und Zeichnen der Y-Achse }
MaleKurve;
OutXAchse; { Zeichnen der X-Achse }
end;
End.
Detected encoding: ANSI (CP1252) | 4
|
|