powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Алгоритм работы таймера
12 сообщений из 12, страница 1 из 1
Алгоритм работы таймера
    #39578525
Dmitry_A123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет и с Новым Годом.
Вопрос:
есть запись в файле в виде
timer1=ON/13:22/13:23/1/1/1/0/0/0/1
timer2=ON/13:03/13:04/1/1/1/1/1/1/1
timer3=ON/13:05/13:06/1/0/1/0/1/0/1
timer4=ON/13:07/13:08/1/0/0/0/1/0/0
timer5=ON/13:09/13:10/1/1/0/0/1/0/0

есть функция, которая проверяет системное время, сравнивает его с файлом и включает/отключает реле. Если поставить обработку одной строки, то все ОК. А если обрабатывать все пять строк, то получается что срабатывает только пятый таймер. Т.е. если время соответствует timer1, то реле включается. Далее проверяется вторая строка, и если время не соответствует, то реле выключается.
Задача - необходимо реализовать булевую функцию, которая включает и выключает реле в зависимости от настроек. (Типа многозадачный таймер).

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
if Copy(f.Strings[strnum],posN('=',f.Strings[strnum],1)+1,PosN('/',f.Strings[strnum],1)-posN('=',f.Strings[strnum],1)-1)='ON' then
   if (Copy(f.Strings[strnum],PosN('/',f.Strings[strnum],2+day)+1,1)='1') and
       (StrToTime(Copy(f.Strings[strnum],posN('/',f.Strings[strnum],1)+1,PosN('/',f.Strings[strnum],2)-posN('/',f.Strings[strnum],1)-1))<=Time) and
       (StrToTime(Copy(f.Strings[strnum],posN('/',f.Strings[strnum],2)+1,PosN('/',f.Strings[strnum],3)-posN('/',f.Strings[strnum],2)-1))>Time) then
         begin
          result:=true;
         end  else
         begin
         result:=false;
          end;



Чтобы было понятнее:
Первое включение 1:00 - 2:00, второе 3:00 - 4:00
Сейчас 1:30
Проверяется первая строка - время соответствует условие, реле включается
Проверяется вторая строка - время не соответствует, реле выключается (а надо чтобы работало до 2:00)

Если не трудно, подскажите, а то всю голову сломал уже
...
Рейтинг: 0 / 0
Алгоритм работы таймера
    #39578532
Dmitry_A123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо, уже разобрался))
...
Рейтинг: 0 / 0
Алгоритм работы таймера
    #39578665
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry_A123,

авторЕсли не трудно, подскажите, а то всю голову сломал уже

ужас, выкинуть говнокод, нормально расписать условие, и больше так не писать никогда. иначе будешь и дальше голову ломать при любом изменении или дополнении.
...
Рейтинг: 0 / 0
Алгоритм работы таймера
    #39578673
под ван
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
makhaonDmitry_A123,

авторЕсли не трудно, подскажите, а то всю голову сломал уже

ужас, выкинуть говнокод, нормально расписать условие, и больше так не писать никогда. иначе будешь и дальше голову ломать при любом изменении или дополнении.
Так ты помоги делом, а не словом - напиши свой не говнокод, на личном примере покажи, как можно и нужно делать.
...
Рейтинг: 0 / 0
Алгоритм работы таймера
    #39578683
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
под ван,

Тут же элементарное дело, делаем Copy строки до \n сбрасываем \n и бьём опять же до = и уже разбиваем на /

Элементы добавляем в массив TDictionary<string, TDictionary<int, string>>

Дальше делаем с этой инфой что угодно, перебирая через foreach к примеру
...
Рейтинг: 0 / 0
Алгоритм работы таймера
    #39578689
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так я же не знаю условий :) ТЗ надо. Что тут делать? ON/13:22/13:23/1/1/1/0/0/0/1 когда что включать когда выключать? Там может быть OFF? Код смотреть не хочу, потому как новый год, лень думать и вообще слом мозга :)

авторТ.е. если время соответствует timer1, то реле включается

Какое реле включается? Какое выключается? 1 включаем, 0 отключаем? или еще как? Почему указано два времени? Что будет происходить с 13:22 до 13:23?

Для начала можно SplitStr по '/' в массивы структур. Счаз трохи накидаю.
...
Рейтинг: 0 / 0
Алгоритм работы таймера
    #39578697
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю, насколько названия полей соответствую ТЗ, набросал, не запускал, надо гонять:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
procedure TForm2.Button1Click(Sender: TObject);
type
 TRalayRec = record
  OnFlag: boolean;
  StartTime: TDateTime;
  StopTime: TDateTime;
  RalaysOn: array [0..6] of boolean;
 end;
var
 i, j:  integer;
 SL: TStringList;
 Arr: TStringDynArray;
 Relays: array of TRalayRec;
begin
 SL := TStringList.Create;
 try
  SL.LoadFromFile('timers.txt');
  SetLength(Relays, SL.Count);
  for i := 0 to SL.Count - 1 do
  begin
   Arr := SplitString(SL[i], '/');
   with Relays[i] do
   begin
    OnFlag := Arr[0] = 'ON';
    TryStrToTime(Arr[1], StartTime);
    TryStrToTime(Arr[2], StopTime);
    for j := 0 to 6 do
     RalaysOn[j] := Arr[j + 3];
   end;
  end;
 finally
  FreeAndNil(SL);
 end;
end;
...
Рейтинг: 0 / 0
Алгоритм работы таймера
    #39578698
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отвлекли, сорри )

Код: pascal
1.
RalaysOn[j] := Arr[j + 3] = '1';
...
Рейтинг: 0 / 0
Алгоритм работы таймера
    #39578704
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няшик, makhaon,

вот вы какие крутые и отчаянные хакеры.
...
Рейтинг: 0 / 0
Алгоритм работы таймера
    #39578729
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД,

Кхм. Спроси меня - как бы сделал Я для Себя.

Я бы сделал так

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
procedure TForm1.Button1Click(Sender: TObject);
var
  p: TMatchCollection;
begin
  p := TRegEx.Matches(Memo1.Text,
    '\b(.*)\=(.*)\/(.*)\/(.*)\/(.*)\/(.*)\/(.*)\/(.*)\/(.*)\/(.*)\/(.*)\b');

  
  ShowMessage(p.Item[0].Groups.Item[3].Value); // 13:22
end;



Потому что я могу.
...
Рейтинг: 0 / 0
Алгоритм работы таймера
    #39578765
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята, хватит отсебятины, используйте кэшед текст буфферз.
...
Рейтинг: 0 / 0
Алгоритм работы таймера
    #39578789
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно просто перегнать в массив вариантов, если records не нравится.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Алгоритм работы таймера
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]