Вот мой скрипт работает раз в 1с
var
started_dump, started_kol : Boolean;
begin
if pump_dump_state.AsBool = True AND started_dump = False then
begin
TimerReset(timer_dump);
TimerStart(timer_dump, 0);
started_dump := True;
end;
if pump_dump_state.AsBool = False AND started_dump = True then
begin
started_dump := False;
TimerPause(timer_dump);
end;
end.
Где это переменная состояния работы насосоа а это перменная ДатаВремя которая отображается в объекте календарь.
Что не так? Почему у меня все в 0 сбрасывается?
Хотя по скрипту видно что этого не должно происходить.
В любом случае условие может пройти только когда pump_dump_state будет равна TRUE, а started_dump равна FALSE. Если условие проходит, значит такой момент действительно возникает.
В приведенном Вами примере непонятно для чего используется started_dump. Почему не подходит такой код?
begin
if pump_dump_state.AsBool = True then
begin
TimerReset(timer_dump);
TimerStart(timer_dump, 0);
end else
TimerPause(timer_dump);
end.
Кстати хотел использовать тег как имя переменной таймера для использования GetVariableByName но туда только цифры пишутся.
Да, тег это число. Его можно использовать только как подстановочное значение в однотипном имени, например так:
var
s: string;
aVar: TM_Variable;
begin
s := 'MyVariable_' + IntToStr(Sender.Tag); // формируем имя в зависимости от тега, напр. 'MyVariable_1'
aVar := GetVariableByName(s);
if aVar <> nil then
aVar.Value := 10;
end.
Но вопрсо открыт почему VariableEx не сработал? Ведь это переменная.
Значит есть какая-то ошибка в коде. Для универсального скрипта нужно писать так:
begin
if not (Sender is TM_Object) then Exit;
with Sender as TM_Object do
if VariableEx <> nil then
TimerStart(VariableEx, 0);
end.
Для конкретного объекта так:
begin
if Shape1.VariableEx <> nil then
TimerStart(Shape1.VariableEx, 0);
end.
Короче причина не в коде а в том как СС его исполняет я думаю. Асинхронно что ли?
Наоборот, синхронно, иначе со скриптами было бы совсем тяжело. Дело в самом скрипте. Локальные переменные для этого нельзя использовать. Они инициализируются только на время выполнения скрипта и после выполнения освобождаются.