Спасибо, примерно так я себе это и представлял. Опять же, если я буду иметь информацию с контроллера, что в данный момент механизм "Выкл" , то соответственно кнопка должна быть с надписью "Вкл" и при нажатии писать 1-цу в соответствующую переменную контроллера
Извините, я не понял.
Приведу пример своей проблемы. Дано:
Simple-SCADA Демо-версия с ограничением по времени работы. Я автоматчик, но о языках программирования только слышу от программистов, которым ставлю задачу. Никто из них не знает Simple-SCADA. Вижу перспективу в этом продукте у нас в плане построения диспетчеризации на руднике - Решил сам учиться. Извините за длиннотекст, больше так не буду)).
Создал пробный проект типа для "Брэйн-Ринга" через веб-интерфейс между нашими сотрудниками)). В нём задействован скриптовый таймер на событии "Прошла секунда":
begin
// Если таймер разрешён и не дошёл до граничной уставки,
//то таймер считает дальше
if TimerRun.Value and (Time.Value < TimerSetPoint.Value) then
begin
Time.Value := Time.Value + 1;
end;
// Если Таймер дошёл до предупредительной уставки,
// то просигнализировать о достижении предупредительной уставки
if Time.Value >= TimerPreAlarmSetPoint.Value then
begin
TimerAlarm_1.Value := True;
end;
// Если Таймер дошёл до граничной уставки,
// то запретить таймер и просигнализировать о достижении граничной уставки
if Time.Value >= TimerSetPoint.Value then
begin
TimerRun.Value := False;
TimerAlarm_2.Value := True;
end;
end.
Нужны были кнопки без фиксации с надписью "ПУСК", "СТОП", "СБРОС". После нажатия и отпускания кнопок я должен получить в переменную логическую единицу ("1"), а нажатая кнопка должна вернуться в исходное ненажатое состояние.
Как делал:
Добавил на экран кнопку;
Выбрал Тип "Без фиксации";
Оставил Состояние по умолчанию "Отпущена" (Номер 0, Значение 1, Текст "Включить");
Создал переменную btnStart_1 типа "Boolean" и прицепил к кнопке, потому что без прицепленной к кнопке переменной ничего не выходит - проверял выводом значений переменных кнопок в виде состояний элементов CheckBox на мнемосхеме;
Создал вторую такую переменную btnStart_2 что бы запоминать факт того что кнопка была нажата, даже если уже отпустили - прицепил к кнопке скрипт по событию OnClick (Аналогичные скрипты на кнопку СТОП и СБРОС):
begin
// Если нажат ПУСК, то запомнить это и обнулить СТОП, СБРОС
if btnStart_1.Value then
begin
btnStart_2.Value := True;
btnStop_2.Value := False;
btnReset_2.Value := False;
// Алгоритмическая часть
FirstTeamFlag.Value := False;
FirstTeamNumber.Value := 0;
TimerRun.Value := True;
end;
end.
Проблема:
После нажатия и отпускания кнопок, индикация кнопки остаётся в нажатом состоянии, о чём свидетельствует текст на кнопке "Выключить".
Вопрос:
Что я делаю не так? Я же вроде не влияю на переменную, прикреплённую к кнопке, и Тип кнопки "Без фиксации".
Такая же проблема возникает у кнопок команд столов:
begin
if FirstTeamFlag.Value = False then
begin
// Обработка кнопки 1
if btnTeam1_1.Value and (btnTeam1_2.Value = False) then
begin
btnTeam1_2.Value := True;
FirstTeamFlag.Value := True;
FirstTeamNumber.Value := 1;
TimerRun.Value := False;
end;
// Обработка кнопки 2
if btnTeam2_1.Value and (btnTeam2_2.Value = False) then
begin
btnTeam2_2.Value := True;
// Алгоритмическая часть
FirstTeamFlag.Value := True;
FirstTeamNumber.Value := 2;
TimerRun.Value := False;
end;
// Обработка кнопки 3
if btnTeam3_1.Value and (btnTeam3_2.Value = False) then
begin
btnTeam3_2.Value := True;
// Алгоритмическая часть
FirstTeamFlag.Value := True;
FirstTeamNumber.Value := 3;
TimerRun.Value := False;
end;
// Обработка кнопки 4
if btnTeam4_1.Value and (btnTeam4_2.Value = False) then
begin
btnTeam4_2.Value := True;
// Алгоритмическая часть
FirstTeamFlag.Value := True;
FirstTeamNumber.Value := 4;
TimerRun.Value := False;
end;
// Обработка кнопки 5
if btnTeam5_1.Value and (btnTeam5_2.Value = False) then
begin
btnTeam5_2.Value := True;
// Алгоритмическая часть
FirstTeamFlag.Value := True;
FirstTeamNumber.Value := 5;
TimerRun.Value := False;
end;
end;
end.