Здравствуйте.
Создание классов возможно в версиях Simple-Scada 2.3.5.0 и выше. Для описания классов нужно создать в меню скриптов новый глобальный модуль и описать в нём класс (или несколько классов).
Рассмотрим небольшой пример. Пусть у нас есть три однотипных агрегата, каждый агрегат связан с какой-то переменной, которая отвечает за пуск/стоп агрегата, также он имеет имя и методы для остановки и пуска. Остановка и пуск агрегата должны сопровождаться выводом соответствующих сообщений. Для решения этих задач мы можем создать один отдельный класс, реализовать в нём методы пуск/стоп и использовать их. Вот пример модуля с комментариями.
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.
Обязательно освобождайте объект через FreeAndNil после того, как работа с ним завершена, чтобы не получить утечку памяти. Например: FreeAndNil(Aggregate1);
Если вы передаёте переменную строкового типа как параметр, то рекомендуется объявлять её как константу. Например: constructor Create(const AName: string; AVar: TM_Variable);