Tekvel Magic
Загрузка...
Поиск...
Не найдено
Класс ServerSimulator

Класс ServerSimulator для имитации MMS-сервера. Подробнее...

Граф наследования:ServerSimulator:

Открытые члены

def get_by_name (cls, ied_name, ap_name)
 Получить экземпляр ServerSimulator по имени IED и AccessPoint. Подробнее...
 
def destroy_all (cls)
 Уничтожает все экземпляры ServerSimulator. Подробнее...
 
def __new__ (cls, *args, **kwargs)
 Создание или получение экземпляра ServerSimulator. Подробнее...
 
def __init__ (self, scl=None, ied_name=None, ap_name=None, ip=None, port=102)
 Инициализация экземпляра ServerSimulator. Подробнее...
 
def __del__ (self)
 Деструктор для класса ServerSimulator. Подробнее...
 
def model (self)
 Свойство для доступа к полной модели данных MMS-сервера. Подробнее...
 
def create (self, **kwargs)
 Создание и инициализация экземпляра ServerSimulator. Подробнее...
 
def create_ied (self, **kwargs)
 Обертка для создания и инициализации экземпляра IED. Подробнее...
 
def start (self)
 Запускает симулятор ServerSimulator для MMS-симуляции. Подробнее...
 
def is_running (self)
 Проверяет, запущен ли симулятор ServerSimulator. Подробнее...
 
def stop (self)
 
def is_created (self)
 Проверяет, создан ли экземпляр ServerSimulator. Подробнее...
 
def destroy (self)
 Уничтожает экземпляр ServerSimulator. Подробнее...
 
def ied_name (self)
 Возвращает имя IED, связанное с экземпляром ServerSimulator. Подробнее...
 
def ap_name (self)
 Возвращает имя AccessPoint (AP), связанное с экземпляром ServerSimulator. Подробнее...
 
def port (self)
 Возвращает порт, используемый экземпляром ServerSimulator. Подробнее...
 
def port (self, port)
 Устанавливает порт для ServerSimulator. Подробнее...
 
def ip (self)
 Возвращает IP-адрес, используемый экземпляром ServerSimulator. Подробнее...
 
def ip (self, address)
 Устанавливает IP-адрес для ServerSimulator. Подробнее...
 
def scl (self)
 Возвращает объект SCL, связанный с ServerSimulator. Подробнее...
 
def set_val (self, str reference, value, val_type=None, bool auto_ts=True)
 Устанавливает значение для указанной ссылки в модели сервера. Подробнее...
 

Открытые атрибуты

 port
 
 ip
 

Статические открытые данные

list instances = []
 

Подробное описание

Класс ServerSimulator для имитации MMS-сервера.

Класс ServerSimulator используется для имитации MMS-сервера (Manufacturing Message Specification) для конкретного IED (Интеллектуальное Электронное Устройство) и точки доступа (AccessPoint). Класс гарантирует, что для каждой комбинации IED и AccessPoint будет создан только один экземпляр сервера. Он поддерживает создание, запуск и остановку MMS-сервера, а также предоставляет возможность задавать значения для определенных атрибутов данных IED.

Если имя IED или точка доступа не указаны, класс предложит пользователю выбрать их через диалоговые окна. Класс также автоматически управляет ресурсами, очищая их при удалении экземпляра.

Заметки
При использовании этого примера убедитесь, что ссылки (например, приведенные в ref_list) правильно определены в соответствии с используемой моделью данных.

Пример использования класса ServerSimulator:

try:
ss = ServerSimulator()
TestEngine.log(f"Успешно инициализирован {ss}")
t = Stopwatch()
# Создание IED с начальными значениями и состояниями поведения
ss.create_ied(init_values=True, q=Quality(), beh=BehaviourModeKind.on, mod=BehaviourModeKind.on)
t.split()
TestEngine.log(f"Успешно создан {ss}")
t.stop()
deltas = t.get_deltas(as_string=True)
TestEngine.log(f"Отметки времени: {deltas}")
ss.start() # Запуск MMS-сервера
Dialog.show_message("MMS-сервер успешно запущен, нажмите ОК, чтобы начать цикл имитации изменения данных")
ied_name = ss.ied_name
ref_list = [
f"{ied_name}LD/PIOC7.Str.general",
f"{ied_name}LD/PIOC7.Op.general",
f"{ied_name}LD/PIOC8.Str.general",
]
stVal = True
# Имитация изменений данных
while True:
for ref in ref_list:
ss.set_val(ref, stVal, val_type="BOOLEAN")
time.sleep(1)
stVal = not stVal
ss.stop() # Остановка MMS-сервера
ss.destroy() # Уничтожение экземпляра сервера
TestEngine.set_result(Result.SUCCESS)
except Exception as err:
ServerSimulator.destroy_all() # Очистка всех экземпляров симуляторов
TestEngine.log(f"Тест не выполнен. Произошла следующая ошибка: {err}")
TestEngine.set_result(Result.FAIL)

Конструктор(ы)

◆ __init__()

def __init__ (   self,
  scl = None,
  ied_name = None,
  ap_name = None,
  ip = None,
  port = 102 
)

Инициализация экземпляра ServerSimulator.

Метод __init__ инициализирует экземпляр ServerSimulator с указанными SCL, именем IED, именем AccessPoint, IP-адресом и портом. Если экземпляр с таким же IED и AccessPoint уже существует, процесс инициализации прекращается. Экземпляр может прослушивать определенный IP-адрес и порт, и если IP-адрес не указан, по умолчанию используется "0.0.0.0", что означает прослушивание на всех IP-адресах хоста.

Аргументы
sclОбъект SCL, используемый для симуляции (необязательно).
ied_nameИмя IED для симуляции (необязательно).
ap_nameИмя AccessPoint для симуляции (необязательно).
ipIP-адрес, на котором сервер будет прослушивать (по умолчанию: "0.0.0.0").
portНомер порта для сервера (по умолчанию: 102).

◆ __del__()

def __del__ (   self)

Деструктор для класса ServerSimulator.

Метод __del__ выполняет операции очистки при уничтожении экземпляра ServerSimulator. Если симулятор работает, он сначала его останавливает. Если модель была создана, она уничтожается. В завершении экземпляр удаляется из списка ServerSimulator.instances для обеспечения корректного освобождения ресурсов.

Методы

◆ __new__()

def __new__ (   cls,
args,
**  kwargs 
)

Создание или получение экземпляра ServerSimulator.

Этот метод __new__ отвечает за создание нового экземпляра ServerSimulator или получение существующего, основанного на предоставленных именах IED и AccessPoint. Если IED или AccessPoint не предоставлены, метод предложит пользователю выбрать IED и AccessPoint из SCL файла. Метод также проверяет наличие IED и AccessPoint в предоставленном SCL файле.

  • Если экземпляр с таким же IED и AccessPoint уже существует, он возвращает его.
  • Если SCL файл не предоставлен, он предложит пользователю выбрать его.
Аргументы
sclОбъект SCL, используемый для симуляции.
ied_nameИмя IED для симуляции.
ap_nameИмя AccessPoint для симуляции.
Исключения
ValueErrorВыбрасывается, если SCL файл не предоставлен.
AttributeErrorВыбрасывается, если AccessPoint указан без имени IED или если IED или AccessPoint недействительны.
ExceptionВыбрасывается, если в предоставленном SCL файле нет допустимых IED или возникают другие проблемы при выборе.
Возвращает
Новый или существующий экземпляр ServerSimulator для указанного IED и AccessPoint.

◆ ap_name()

def ap_name (   self)

Возвращает имя AccessPoint (AP), связанное с экземпляром ServerSimulator.

Это свойство возвращает имя AccessPoint (AP), которое используется в текущем экземпляре ServerSimulator. Имя AP извлекается из файла SCL во время инициализации.

Возвращает
Имя AccessPoint в виде строки.

◆ create()

def create (   self,
**  kwargs 
)

Создание и инициализация экземпляра ServerSimulator.

Метод create конструирует экземпляр ServerSimulator из модели SCL и выполняет его инициализацию. Если симулятор сервера уже был создан, функция вернётся без выполнения дополнительных действий. Метод выполняет следующие действия:

  1. Конструирует модель симулятора сервера с использованием экземпляра SCL.
  2. Строит полную модель сервера.
  3. Инициализирует ключевые атрибуты данных, такие как временные метки, качество, состояние поведения, режим и состояние здоровья.

Если аргумент init_values установлен в True или опущен, функция инициализирует атрибуты данных значениями по умолчанию или предоставленными значениями для временной метки, качества, режима поведения и здоровья. Эти значения могут быть настроены с помощью ключевых аргументов q, beh, mod и health.

Аргументы
init_valuesФлаг, указывающий на необходимость инициализации атрибутов модели данных сервера (по умолчанию: True).
qОпциональный объект качества для инициализации атрибутов качества.
behОпциональный объект BehaviourModeKind для инициализации состояния поведения.
modОпциональный объект BehaviourModeKind для инициализации режима работы.
healthОпциональный объект HealthKind для инициализации состояния здоровья.
autofix_trgopsОпциональный флаг, устанавливающий значение всех атрибутов триггеров (dchg, qchg, dupd) в значение "true" для всех элементов DA в DataTypeTemplates симулируемого SCL-файла в соответствии с применимым NSD (по умолчаию: True)
Исключения
ExceptionВыбрасывается, если SCL не загружен или если возникают какие-либо проблемы при создании или инициализации.

◆ create_ied()

def create_ied (   self,
**  kwargs 
)

Обертка для создания и инициализации экземпляра IED.

Это простая обертка вокруг метода create, специально предназначенная для создания IED. Она выполняет ту же функциональность, что и метод create, конструируя и инициализируя экземпляр IED в ServerSimulator с использованием переданных аргументов.

Аргументы
kwargsЛюбые ключевые аргументы, которые передаются методу create.
Исключения
ExceptionВыбрасывается, если возникают проблемы при создании или инициализации.
См. также
ServerSimulator.create()

◆ destroy()

def destroy (   self)

Уничтожает экземпляр ServerSimulator.

Этот метод уничтожает экземпляр ServerSimulator, удаляя модель IED из памяти. Метод должен вызываться только если симулятор был создан. В случае если симулятор не был создан, генерируется исключение.

Исключения
ИсключениеВозникает, если ServerSimulator не был создан перед вызовом этого метода.

◆ destroy_all()

def destroy_all (   cls)

Уничтожает все экземпляры ServerSimulator.

Метод destroy_all пытается остановить и уничтожить все существующие экземпляры класса ServerSimulator. Он проходит по всем экземплярам в cls.instances, останавливая те, которые в данный момент работают, и уничтожая те, которые были созданы. Если во время остановки или уничтожения происходит ошибка, выводится сообщение об ошибке с соответствующим трассировочным сообщением.

Исключения
ExceptionВыводится сообщение об ошибке, если экземпляр не может быть остановлен или уничтожен.

◆ get_by_name()

def get_by_name (   cls,
  ied_name,
  ap_name 
)

Получить экземпляр ServerSimulator по имени IED и AccessPoint.

Этот метод класса возвращает существующий экземпляр ServerSimulator, связанный с указанными именами IED и AccessPoint. Если подходящий экземпляр не найден, выбрасывается исключение ObjectNotFound.

Аргументы
ied_nameИмя IED, для которого запрашивается экземпляр симулятора сервера.
ap_nameИмя точки доступа AccessPoint, для которой запрашивается экземпляр симулятора сервера.
Исключения
ObjectNotFoundВыбрасывается, если экземпляр ServerSimulator с указанными именами IED и AccessPoint не найден.
Возвращает
Экземпляр ServerSimulator, соответствующий указанным IED и AccessPoint.

◆ ied_name()

def ied_name (   self)

Возвращает имя IED, связанное с экземпляром ServerSimulator.

Это свойство возвращает имя IED, которое симулируется экземпляром ServerSimulator. Имя IED извлекается из файла SCL во время инициализации.

Возвращает
Имя IED в виде строки.

◆ ip() [1/2]

def ip (   self)

Возвращает IP-адрес, используемый экземпляром ServerSimulator.

Это свойство возвращает IP-адрес, к которому привязан ServerSimulator для связи. Если IP-адрес не был указан при инициализации, по умолчанию используется "0.0.0.0", что означает прослушивание на всех доступных интерфейсах.

Возвращает
IP-адрес в виде строки.

◆ ip() [2/2]

def ip (   self,
  address 
)

Устанавливает IP-адрес для ServerSimulator.

Назначает новый IP-адрес для экземпляра ServerSimulator. IP-адрес должен быть в формате IPv4, так как поддержка IPv6 отсутствует. Если сервер уже запущен, будет вызвано исключение. Кроме того, перед назначением нового IP-адреса система проверяет уникальность комбинации IP-адреса и порта среди всех работающих экземпляров ServerSimulator.

Аргументы
addressНовый IP-адрес для назначения (должен быть допустимым IPv4-адресом).
Исключения
AttributeErrorВыбрасывается, если IP-адрес имеет недопустимый синтаксис или если пытается изменить IP-адрес при запущенном сервере.
NotImplementedErrorВыбрасывается, если предоставлен IPv6-адрес (поддержка IPv6 отсутствует).
ValueErrorВыбрасывается, если комбинация IP-адреса и порта уже используется другим экземпляром ServerSimulator.

◆ is_created()

def is_created (   self)

Проверяет, создан ли экземпляр ServerSimulator.

Это свойство возвращает логическое значение, указывающее, был ли создан экземпляр ServerSimulator. Оно может быть использовано для проверки, был ли инициализирован и построен IED-модель симулятора.

Возвращает
Логическое значение: True, если ServerSimulator был создан, False в противном случае.

◆ is_running()

def is_running (   self)

Проверяет, запущен ли симулятор ServerSimulator.

Это свойство возвращает логическое значение, указывающее на то, был ли запущен симулятор ServerSimulator. Возвращает True, если симулятор запущен, и False в противном случае.

Возвращает
Логическое значение, указывающее на состояние симулятора ServerSimulator (запущен или нет).

◆ model()

def model (   self)

Свойство для доступа к полной модели данных MMS-сервера.

Свойство model возвращает полную модель данных MMS-сервера, сохранённую в атрибуте _full_model. Эта модель содержит сопоставление ссылок на атрибуты данных с их соответствующими данными, которое строится методом _build_full_model.

Возвращает
Словарь, представляющий полную модель данных MMS-сервера.

◆ port() [1/2]

def port (   self)

Возвращает порт, используемый экземпляром ServerSimulator.

Это свойство возвращает номер порта, на котором ServerSimulator прослушивает MMS-сообщения. Порт может быть настроен, но его нельзя изменить после начала симуляции.

Возвращает
Номер порта в виде целого числа.

◆ port() [2/2]

def port (   self,
  port 
)

Устанавливает порт для ServerSimulator.

Назначает новый порт для экземпляра ServerSimulator. Если симуляция уже запущена, изменение порта вызовет исключение. Перед назначением нового порта система проверяет конфликты с другими экземплярами ServerSimulator, работающими на том же IP-адресе.

Аргументы
portНовый номер порта для назначения.
Исключения
AttributeErrorВыбрасывается, если пытается изменить порт при запущенной симуляции.
ValueErrorВыбрасывается, если порт уже используется другим экземпляром ServerSimulator.

◆ scl()

def scl (   self)

Возвращает объект SCL, связанный с ServerSimulator.

Предоставляет доступ к объекту SCL, который используется для настройки ServerSimulator. Этот объект содержит конфигурационные данные из файла SCL, включая информацию об IED, точках доступа и других элементах подстанции.

Возвращает
Объект SCL, связанный с этим экземпляром ServerSimulator.

◆ set_val()

def set_val (   self,
str  reference,
  value,
  val_type = None,
bool  auto_ts = True 
)

Устанавливает значение для указанной ссылки в модели сервера.

Этот метод обновляет модель сервера новым значением для указанной ссылки. Значение может быть любого типа, и если значение является экземпляром _MMSVar, оно будет преобразовано в MMS-представление. Эта функция взаимодействует с MMS-сервером для обновления модели новым значением.

Аргументы
referenceСсылка на атрибут данных в модели (например, IED.LN.DO.DA).
valueНовое значение для установки. Если это экземпляр _MMSVar, он будет преобразован в MMS-представление.
val_typeНеобязательный параметр, указывающий тип устанавливаемого значения (например, BOOLEAN, INT и т.д.).
Исключения
ExceptionВыбрасывается, если операция установки значения не удалась. Исключение содержит подробности об ошибке и трассировку произошедшей проблемы.

◆ start()

def start (   self)

Запускает симулятор ServerSimulator для MMS-симуляции.

Этот метод инициирует симуляцию MMS-сервера для экземпляра IED. Перед вызовом метода start, экземпляр IED должен быть создан с помощью метода create. Если сервер уже запущен, метод просто возвращает управление без дополнительных действий. Симуляция запускается на указанном IP-адресе и порте или на значении по умолчанию "0.0.0.0" (прослушивание всех интерфейсов).

Исключения
ExceptionВыбрасывается, если сервер не был создан или если операция запуска завершилась с ошибкой.

◆ stop()

def stop (   self)

Данные класса

◆ instances

list instances = []
static

◆ ip

ip

◆ port

port