Hallo nochmal an alle
DP´ler,
wieder mal ein Problem. Also ich habe in einer Klasse einen Timer für die Kollisionsüberwachung von Verschiebetischen (es handelt sich um digitale Eingänge, also liegt Strom an so ist ein Anschlagssensor ausgelöst worden -> Stromabschaltung für Verschiebetische). Dabei liegen die digitalen Eingänge in einer seperaten Klasse (TObject) für das KontrolerBoard und die Verschiebetische in einer anderen. Jetzt muss ich allerdings am Anfang die Verschiebetische Kalibrieren und als Referenzposition definieren. Dies hab ich mittels einer repeat-until-Schleife so gelöst:
Delphi-Quellcode:
function TV_Tische.Kalibrierung: boolean;
var iIndex: Integer;
begin
for iIndex := 1 to 2 do
begin
MMC_setdevice(iIndex); // Kanal für einen Verschiebetisch wird gewählt
Beschleunigung_festlegen(2000);
Geschwindigkeit_festlegen(2000);
BewegenABS('FE2'); // Referenzposition anfahren
end;
if Bewegtsich(1) or Bewegtsich(2) then
begin
// die besagte repeat-until-schleife
repeat
until not (Bewegtsich(1) and Bewegtsich(2));
result := true;
for iIndex := 1 to 21 do MMC_sendCommand('DH'); // Referenzposition intern festlegen (Null setzen)
end
else result := false;
end;
Die repeat-until-Schleife behindert jetzt aber die Überwachung in meiner anderen Klasse:
Delphi-Quellcode:
procedure TControlerBoard.fdigEingaenge_pruefen(Sender: TObject);
var iIndex: integer;
begin
for iIndex := 1 to 4 do
begin
case iIndex of
...
2: begin
if ReadDigitalChannel(iIndex) = false then
begin
if ReadDigitalChannel(iIndex) <> digEingaenge[iIndex] then
begin
digEingaenge[iIndex] := true;
Stromversorgung_Verschiebetische_einschalten;
Spleissgeraet_einschalten;
end;
end
else
begin
if ReadDigitalChannel(iIndex) <> digEingaenge[iIndex] then
begin
digEingaenge[iIndex] := false;
Nothalt;
end;
end;
end;
3: begin
if ReadDigitalChannel(iIndex) = false then
begin
if ReadDigitalChannel(iIndex) <> digEingaenge[iIndex] then
begin
digEingaenge[iIndex] := true;
Stromversorgung_Verschiebetische_einschalten;
Spleissgeraet_einschalten;
end;
end
else
begin
if ReadDigitalChannel(iIndex) <> digEingaenge[iIndex] then
begin
digEingaenge[iIndex] := false;
Nothalt;
end;
end;
end;
4: begin
if ReadDigitalChannel(iIndex) = false then
begin
if ReadDigitalChannel(iIndex) <> digEingaenge[iIndex] then
begin
digEingaenge[iIndex] := true;
Stromversorgung_Verschiebetische_einschalten;
Spleissgeraet_einschalten;
end;
end
else
begin
if ReadDigitalChannel(iIndex) <> digEingaenge[iIndex] then
begin
digEingaenge[iIndex] := false;
Nothalt;
end;
end;
end;
end;
end;
Das auslösen des Nothalts funktioniert, wenn ich nicht in der besagten repeat-until-Schleife drin bin. Leider bringt auch die Überprüfung der digitalen Ausgänge in der until-Anweisung keine Besserung. Hat jemand einen Vorschlag, wie man dies besser lösen könnte?
Vielen Dank
BAMatze
2. Account Sero