Пожалуйста, включите JavaScript для просмотра этого сайта.

Скрипты Simple-Scada

История: Классы

Создание и использование классов

Пред. Вверх След. Еще

Пусть у нас имеется три однотипных агрегата, каждый агрегат связан с переменной, которая отвечает за пуск/стоп агрегата, также он имеет имя и методы для остановки и пуска. Остановка и пуск агрегата должны сопровождаться выводом соответствующих сообщений. Для решения этих задач мы можем создать один отдельный класс, реализовать в нем методы пуск/стоп и использовать их. Ниже пример глобального модуля с комментариями:

Важно! Обязательно освобождайте объект через FreeAndNil  после того, как работа с ним завершена, чтобы не получить утечку памяти. Например: FreeAndNil(Aggregate1);

interface
 
type
  TAggregate = class         // класс
  private
    FName: string;           // имя агрегата
    FVariable: TM_Variable;  // переменная агрегата
  public
    // это конструктор класса
    constructor Create(const AName: string; AVar: TM_Variable);
 
    // эти методы отвечают за пуск / стоп агрегата
    procedure Start;
    procedure Stop;
 
    // имя и переменная агрегата доступны извне только для чтения
    property Name: string read FName;
    property Variable: TM_Variable read FVariable;
  end;
 
var
  // объявляем сами агрегаты, допустим их всего три
  Aggregate1: TAggregate;
  Aggregate2: TAggregate;
  Aggregate3: TAggregate;
 
implementation
 
constructor TAggregate.Create(const AName: string; AVar: TM_Variable);
begin
  // в конструкторе агрегат получает имя и переменную
  FName := AName;
  FVariable := AVar;
end;
 
procedure TAggregate.Start;
begin
  FVariable.Value := 1;  // запускаем агрегат
  AddMessage(Now, mkMessage, 'Агрегат "' + FName + '" запущен!', True, False);
end;
 
procedure TAggregate.Stop;
begin
  FVariable.Value := 0;  // останавливаем агрегат
  AddMessage(Now, mkMessage, 'Агрегат "' + FName + '" остановлен!', True, False);
end;
 
// это секция инициализации, она выполняется один раз, при старте проекта
initialization
  // создаём агрегаты
  Aggregate1 := TAggregate.Create('Транспортер', vrAggr1);
  Aggregate2 := TAggregate.Create('Мешалка', vrAggr2);
  Aggregate3 := TAggregate.Create('Насос', vrAggr3);
 
// это секция финализации, она выполняется один раз, при остановке проекта
finalization
  // !!! Обязательно очищаем созданные объекты! Иначе получим утечку памяти!
  FreeAndNil(Aggregate1);
  FreeAndNil(Aggregate2);
  FreeAndNil(Aggregate3);
 
end.

 

Агрегаты описаны и созданы, за создание отвечает конструктор Create, в котором агрегату назначается имя и переменная пуск / стоп. Теперь мы можем из любого скрипта управлять агрегатом, например запустить его:

begin
  Aggregate1.Start;
end.