ich schalte mit einer IO-Warrior ein Verkehrsfunksystem und möchte während der VF-Durchsage auch mein TA-Bit am RDS-Coder entsprechend setzen. Zum Ein- und Ausschalten brauche ich jeweils einen Impuls, nur ist der leider zu kurz um TA On/Off zuverlässig zu schalten. Wir dachten da an den ‘sleep’-Befehl aber beim mAirList Start kommt folgende Fehlermeldung: ‘…unknown identifier sleep…’
Michel hatte mich wegen der Sache schon angesprochen - offenbar scheint der Sleep-Befehl in den Scripts nicht ohne weiteres zu funktionieren. Ich muss mir das genauer angucken. Leider sitze ich seit einigen Tagen nur an “Papierkram” und bin noch nicht dazu gekommen.
Als Workaround könnte man ein “busy wait” implementieren, also die Uhrzeit fortlaufend abfragen, bis die richtige Zeit vergangen ist. Das kostet zwar CPU, ist aber vielleicht zu verschmerzen bei 50ms. Etwa so:
var
zeit: TDateTime;
begin
...
zeit := now;
repeat until now > zeit + 1/24/60/60/20; // 50ms
...
end.
Danke für die megaschnelle Antwort!
Habe es folgendermaßen probiert… (Ist der Code so ok?)
[code]var iPort0: Integer; var zeit: TDateTime;
function RDS_TA_FLAG(TA: boolean): boolean;
begin
// RDS TA (ON) Flag nur setzen, wenn RDS TA LED nicht aktiv
if ((TA = true) AND (IOWarriorRemote(0).GetPort(2) = false)) then
begin
SystemLog(‘VF: RDS TA einschalten (Port25 / +Impuls)’);
IOWarriorRemote(0).SetPort(25, true); zeit := now;
repeat until now > zeit + 1/24/60/60/20; // 50ms
IOWarriorRemote(0).SetPort(25, false);
end;
// RDS TA (OFF) Flag nur setzen, wenn RDS TA LED aktiv
if ((TA = false) AND (IOWarriorRemote(0).GetPort(2) = true)) then
begin
SystemLog(‘VF: RDS TA ausschalten (Port25 / +Impuls)’);
IOWarriorRemote(0).SetPort(25, true); zeit := now;
repeat until now > zeit + 1/24/60/60/20; // 50ms
IOWarriorRemote(0).SetPort(25, false);
end;
end;[/code]
Der erwünschte Effekt bleibt leider noch aus. Wie kann ich die zuaddierte Zeit vergrößern? Kenne mich mit dem TDateTime-Format nicht so aus!
a) die Hervorhebungen funktionieren im “Code” Block nicht
b) Die Zeit errechnet sich aus 1 geteilt durch 24 Stunden geteilt 60 Minuten geteilt durch 60 Sekunden geteilt durch 20. Abgekürzt käme heraus: 1 Sekunde geteilt durch 20 = 0,05 Sekunden = 50ms. Das heißt, der letzte Dividend bestimmt die Anzahl Millisekunden, wenn Du da anstatt durch 20 durch 10 teilst, hättest Du 100ms, also den Wert verdoppelt, indem der Dividend halbiert wird. Reine Mathematik