Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - Denissimo

Страницы: [1]
1
Прошу игнорировать файловое вложение в предыдущем посте.
В этом посте актуальная версия с вышеописанной проблемой.

2
Спасибо, примерно так я  себе это и представлял. Опять же, если я буду иметь информацию с контроллера, что в данный момент механизм "Выкл" , то соответственно кнопка должна быть с надписью "Вкл" и при нажатии писать 1-цу в соответствующую переменную контроллера
Извините, я не понял.

Приведу пример своей проблемы. Дано:
Simple-SCADA Демо-версия с ограничением по времени работы. Я автоматчик, но о языках программирования только слышу от программистов, которым ставлю задачу. Никто из них не знает Simple-SCADA. Вижу перспективу в этом продукте у нас в плане построения диспетчеризации на руднике - Решил сам учиться. Извините за длиннотекст, больше так не буду)).
Создал пробный проект типа для "Брэйн-Ринга" через веб-интерфейс между нашими сотрудниками)). В нём задействован скриптовый таймер на событии "Прошла секунда":
Код: (delphi)
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 (Аналогичные скрипты на кнопку СТОП и СБРОС):
Код: (delphi)
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.
Проблема:
После нажатия и отпускания кнопок, индикация кнопки остаётся в нажатом состоянии, о чём свидетельствует текст на кнопке "Выключить".

Вопрос:
Что я делаю не так? Я же вроде не влияю на переменную, прикреплённую к кнопке, и Тип кнопки "Без фиксации".

Такая же проблема возникает у кнопок команд столов:
Код: (delphi)
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.

Страницы: [1]