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

Класс ClientSimulator для имитации клиентских взаимодействий с IED. Подробнее...

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

def __new__ (cls, *args, **kwargs)
 Создаёт или возвращает существующий экземпляр ClientSimulator. Подробнее...
 
def __init__ (self, ip=None, port=102, scl=None, ied_name=None, ap_name=None)
 Инициализирует новый экземпляр ClientSimulator для подключения к IED. Подробнее...
 
def __del__ (self)
 Удаляет экземпляр ClientSimulator. Подробнее...
 
def __str__ (self)
 Возвращает строковое представление ClientSimulator. Подробнее...
 
def ip (self)
 Получает IP-адрес IED для подключения. Подробнее...
 
def ip (self, address)
 Устанавливает IP-адрес IED для подключения. Подробнее...
 
def port (self)
 Получает номер порта IED для подключения. Подробнее...
 
def port (self, port)
 Устанавливает номер порта IED для подключения. Подробнее...
 
def ied_name (self)
 Получает имя IED для подключения. Подробнее...
 
def ied_name (self, name)
 Устанавливает имя IED для подключения. Подробнее...
 
def ap_name (self)
 Получает имя точки доступа (AP) внутри IED. Подробнее...
 
def ap_name (self, name)
 Устанавливает имя точки доступа (AP) внутри IED. Подробнее...
 
def associate (self)
 Устанавливает соединение с IED, используя настроенные IP-адрес и порт. Подробнее...
 
def release (self)
 Завершает активное соединение с IED. Подробнее...
 
def abort (self)
 Прерывает текущее соединение с IED. Подробнее...
 
def close (self)
 Корректно завершает соединение с IED. Подробнее...
 
def get_controlable_objects_list (self)
 Получает список управляемых объектов из модели данных IED. Подробнее...
 
ControlModelKind get_ctlmodel_for_object (self, str ref)
 Получает модель управления для указанного объекта. Подробнее...
 
def get_value (self, str ref, force_fetch=True)
 Получает значение указанного объекта. Подробнее...
 
def control (self, str ref, value, type, bool test=False, ControlModelKind ctlModel=None, OriginatorCategoryKind orCat=None, orIdent=None)
 Выполняет команду управления для указанной ссылки на IED. Подробнее...
 
def orCat (self)
 Получает или задает категорию инициатора для операций управления. Подробнее...
 
def orCat (self, orCat)
 
def orIdent (self)
 Получает или задает идентификатор инициатора для операций управления. Подробнее...
 
def orIdent (self, orIdent)
 
def get_datamodel (self, force_fetch=False, with_values=False)
 Получает модель данных подключенного IED. Подробнее...
 
def datamodel (self)
 Возвращает текущую модель данных подключенного IED. Подробнее...
 
def datamodel_to_csv (self, str csv_filename)
 Экспортирует модель данных в CSV-файл. Подробнее...
 
def get_mms_ied_name (self)
 Извлекает имя IED на основе ссылок на сигналы из datamodel. Подробнее...
 

Открытые статические члены

def remove_incomplete_references (data_list, delimiter='$')
 Удаляет неполные ссылки из списка ссылок на данные. Подробнее...
 

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

 ip
 
 port
 
 ied_name
 
 ap_name
 
 scl
 
 initialized
 

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

list instances = []
 

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

Класс ClientSimulator для имитации клиентских взаимодействий с IED.

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

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

try:
# Инициализация ClientSimulator с использованием IP и порта
client = ClientSimulator(ip="192.168.0.1", port=102)
client.associate()
# Извлечение значения данных из IED
value = client.get_value("LDName/LNName.DO.DA")
print(f"Полученное значение: {value}")
# Отправка команды управления
client.control("LDName/LNName.DO.DA", value=True, type="BOOLEAN")
# Завершение соединения
client.release()
except Exception as e:
print(f"Произошла ошибка: {e}")

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

◆ __init__()

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

Инициализирует новый экземпляр ClientSimulator для подключения к IED.

Настраивает ClientSimulator с необходимыми данными для подключения к конкретному IED (Интеллектуальному электронному устройству). Симулятор может быть настроен с использованием прямого IP-адреса и порта IED или извлечением данных о подключении из SCL файла. Если предоставлен SCL файл, ClientSimulator извлечёт такие данные, как IP-адрес, порт, имя IED и AccessPoint. Класс гарантирует, что поддерживается только одно активное подключение для каждого уникального конфигурационного соединения с IED. Также устанавливает информацию о происхождении, помогая идентифицировать клиента.

Аргументы
ipIP-адрес IED, к которому будет подключаться ClientSimulator.
portНомер порта на IED для подключения (по умолчанию 102).
sclSCL файл для извлечения данных о подключении к IED, если IP и порт не предоставлены напрямую.
ied_nameИмя IED для установления соединения.
ap_nameИмя AccessPoint на IED для установления соединения.

◆ __del__()

def __del__ (   self)

Удаляет экземпляр ClientSimulator.

Метод __del__ гарантирует, что экземпляр ClientSimulator удаляется из списка активных экземпляров, когда он больше не нужен. Этот метод помогает в управлении и освобождении ресурсов путём автоматического удаления ссылки на экземпляр. Кроме того, он удаляет ClientSimulator из списка instances, чтобы гарантировать отсутствие оставшихся ссылок, которые могут вызвать непредвиденное поведение.

Методы

◆ __new__()

def __new__ (   cls,
args,
**  kwargs 
)

Создаёт или возвращает существующий экземпляр ClientSimulator.

Метод __new__ отвечает за создание нового экземпляра ClientSimulator или возврат уже существующего, если экземпляр с такими же параметрами подключения к IED уже существует. Пытается сопоставить по предоставленным IP-адресу и порту (представляющим данные для подключения к IED) или используя данные из SCL файла. Это гарантирует, что поддерживается только один экземпляр для каждого уникального подключения к IED, предотвращая дублирование.

Аргументы
ipIP-адрес IED, к которому будет подключаться ClientSimulator.
portНомер порта IED, к которому будет подключаться ClientSimulator (по умолчанию 102).
sclSCL файл для извлечения данных о подключении к IED.
ied_nameИмя IED для подключения.
ap_nameИмя AccessPoint на IED для подключения.

◆ __str__()

def __str__ (   self)

Возвращает строковое представление ClientSimulator.

Метод __str__ предоставляет удобочитаемое строковое представление экземпляра ClientSimulator. Он выводит IP-адрес и порт IED, к которому подключен ClientSimulator, что может быть полезно для ведения логов или отладки.

Возвращает
Строковое представление ClientSimulator, отображающее информацию об IP и порте.

◆ abort()

def abort (   self)

Прерывает текущее соединение с IED.

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

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

◆ ap_name() [1/2]

def ap_name (   self)

Получает имя точки доступа (AP) внутри IED.

Это свойство возвращает имя точки доступа, к которой подключен ClientSimulator. Имя AP идентифицирует конкретную точку доступа внутри IED и необходимо для установления связи.

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

◆ ap_name() [2/2]

def ap_name (   self,
  name 
)

Устанавливает имя точки доступа (AP) внутри IED.

Это свойство позволяет установить имя точки доступа, с которой будет взаимодействовать ClientSimulator. Имя AP должно быть указано до установления соединения. Изменение имени AP во время подключения вызовет ошибку.

Аргументы
nameНовое имя точки доступа.
Исключения
AttributeErrorВозникает при попытке изменить имя AP во время подключения.
ValueErrorВозникает, если указано пустое имя.

◆ associate()

def associate (   self)

Устанавливает соединение с IED, используя настроенные IP-адрес и порт.

Этот метод инициирует ассоциацию между ClientSimulator и IED, используя указанные IP-адрес и порт. Он отправляет запрос на установление связи, что позволяет дальнейшее взаимодействие с IED, например, чтение данных, управление объектами и т. д. Если соединение не удалось установить, возникает ошибка с подробной информацией о сбое.

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

◆ close()

def close (   self)

Корректно завершает соединение с IED.

Этот метод корректно завершает текущую ассоциацию между ClientSimulator и IED, гарантируя правильное завершение всех активных коммуникаций перед разрывом соединения. В случае неудачи закрытия соединения возникает ошибка с указанием типа ошибки, описания и трассировки ошибки.

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

◆ control()

def control (   self,
str  ref,
  value,
  type,
bool  test = False,
ControlModelKind  ctlModel = None,
OriginatorCategoryKind  orCat = None,
  orIdent = None 
)

Выполняет команду управления для указанной ссылки на IED.

Этот метод отправляет команду управления на IED для манипуляции указанным объектом. Управление может выполняться с использованием различных моделей, таких как Прямое управление, Выбор перед выполнением (SBO), и может быть настроено для использования обычной или усиленной безопасности. Команда управления также позволяет указывать дополнительные параметры, такие как тестовый режим, категория инициатора и идентификация инициатора.

Аргументы
refСсылка на объект, который нужно контролировать.
valueЗначение, которое необходимо установить при выполнении команды управления.
typeТип данных значения, подлежащего управлению.
testБулевый параметр, указывающий, является ли операция тестовой. По умолчанию False.
ctlModelНеобязательный параметр, модель управления. Если не указано, метод определит подходящую модель на основе объекта.
orCatНеобязательный параметр, категория инициатора. По умолчанию self.orCat.
orIdentНеобязательный параметр, идентификатор инициатора. По умолчанию self.orIdent.
Исключения
MmsClientNotSupportedВыбрасывается, если модель управления объекта не поддерживает операции управления.
ExceptionВыбрасывается, если команда управления не удалась, включая подробное описание ошибки.

◆ datamodel()

def datamodel (   self)

Возвращает текущую модель данных подключенного IED.

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

Возвращает
Возвращает словарь, содержащий кешированную модель данных.

◆ datamodel_to_csv()

def datamodel_to_csv (   self,
str  csv_filename 
)

Экспортирует модель данных в CSV-файл.

Этот метод извлекает данные из внутренней модели данных и записывает их в указанный CSV-файл. Каждая строка в CSV представляет элемент модели данных, исключая элементы типа "structure". Колонки CSV включают ссылки, MMS ссылки, функциональные ограничения (FC), типы данных и значения.

Аргументы
csv_filenameИмя CSV-файла, в который будет сохранена модель данных.

◆ get_controlable_objects_list()

def get_controlable_objects_list (   self)

Получает список управляемых объектов из модели данных IED.

Этот метод сканирует модель данных IED, чтобы выявить объекты, которые обладают управляющими функциями. Он проверяет ctlModel каждого объекта данных и добавляет его в список, если он является одним из управляемых типов (например, прямое управление, управление SBO). Это помогает определить, какие объекты могут быть управляемыми через ClientSimulator.

Возвращает
Список строк, где каждая строка является ссылкой на управляемый объект внутри модели данных IED.

◆ get_ctlmodel_for_object()

ControlModelKind get_ctlmodel_for_object (   self,
str  ref 
)

Получает модель управления для указанного объекта.

Этот метод извлекает ctlModel для определенного объекта внутри IED. Модель управления указывает, как объект может управляться (например, прямое управление, управление SBO). Если модель управления не найдена, выбрасывается исключение.

Аргументы
refСсылка на объект, для которого необходимо получить модель управления.
Возвращает
Перечисление ControlModelKind, указывающее тип модели управления для указанного объекта.
Исключения
ObjectNotFoundВозникает, если модель управления для указанной ссылки не найдена.

◆ get_datamodel()

def get_datamodel (   self,
  force_fetch = False,
  with_values = False 
)

Получает модель данных подключенного IED.

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

Аргументы
force_fetchЛогическое значение, указывающее, нужно ли принудительно повторно запросить модель данных у IED. По умолчанию False.
with_valuesЛогическое значение, указывающее, следует ли включить текущие значения атрибутов данных в возвращаемую модель данных. По умолчанию False.
Возвращает
Возвращает словарь, представляющий модель данных, содержащий ссылки на атрибуты данных и их детали.

◆ get_mms_ied_name()

def get_mms_ied_name (   self)

Извлекает имя IED на основе ссылок на сигналы из datamodel.

Функция извлекает имя IED из ссылок на сигналы, присутствующих в datamodel экземпляра ClientSimulator. Для определения общего префикса, который служит именем IED, используется функция extract_ied_name. Обратите внимание, что полученное имя IED может иногда отличаться от имени IED в SCL, так как функция может неправильно определить границу между iedName и ldInst.

Возвращает
Извлеченное имя IED на основе ссылок на сигналы.
См. также
extract_ied_name

◆ get_value()

def get_value (   self,
str  ref,
  force_fetch = True 
)

Получает значение указанного объекта.

Этот метод извлекает значение указанного объекта в IED на основе предоставленной ссылки. Если значение не кэшировано или параметр force_fetch установлен в True, метод запросит значение напрямую у IED. В случае возникновения ошибки метод вернет None и зафиксирует исключение в логе.

Аргументы
refСсылка на объект, значение которого необходимо получить.
force_fetchЛогический флаг, указывающий, следует ли принудительно запрашивать значение у IED, даже если оно кэшировано. По умолчанию True.
Возвращает
Значение указанного объекта или None, если возникает ошибка.

◆ ied_name() [1/2]

def ied_name (   self)

Получает имя IED для подключения.

Это свойство возвращает текущее имя IED, к которому подключен ClientSimulator. Имя IED используется для идентификации конкретного IED в сети или SCL-файле.

Возвращает
Имя IED.

◆ ied_name() [2/2]

def ied_name (   self,
  name 
)

Устанавливает имя IED для подключения.

Это свойство позволяет указать имя IED, к которому ClientSimulator будет подключаться. Имя IED должно быть указано до установления соединения. Изменение имени IED во время подключения вызовет ошибку.

Аргументы
nameНовое имя IED.
Исключения
AttributeErrorВозникает при попытке изменить имя IED во время подключения.
ValueErrorВозникает, если указано пустое имя.

◆ ip() [1/2]

def ip (   self)

Получает IP-адрес IED для подключения.

Это свойство возвращает текущий IP-адрес IED, к которому настроен подключаться ClientSimulator.

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

◆ ip() [2/2]

def ip (   self,
  address 
)

Устанавливает IP-адрес IED для подключения.

Это свойство позволяет указать IP-адрес IED, который ClientSimulator будет использовать для установления соединения. Изменение IP-адреса во время подключения ClientSimulator вызовет ошибку. IP-адрес должен быть уникальным в сочетании с номером порта среди всех экземпляров ClientSimulator. Поддерживаются только IPv4-адреса, а попытка задать IPv6-адрес вызовет ошибку.

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

◆ orCat() [1/2]

def orCat (   self)

Получает или задает категорию инициатора для операций управления.

Это свойство позволяет получить или задать категорию инициатора (orCat), которая используется в операциях управления. Категория инициатора помогает определить источник команды управления, например, автоматическая станция или обслуживание.

@getter Возвращает текущую категорию инициатора как OriginatorCategoryKind. @setter Устанавливает категорию инициатора. Должно быть экземпляром OriginatorCategoryKind.

◆ orCat() [2/2]

def orCat (   self,
  orCat 
)

◆ orIdent() [1/2]

def orIdent (   self)

Получает или задает идентификатор инициатора для операций управления.

Это свойство позволяет получить или задать идентификатор инициатора (orIdent), который используется в операциях управления. Идентификатор инициатора представляет собой строковое значение, которое позволяет определить источник команды управления, например, название системы или ID пользователя.

@getter Возвращает текущий идентификатор инициатора как строку. @setter Устанавливает идентификатор инициатора. Должно быть строковым значением, представляющим источник управления.

◆ orIdent() [2/2]

def orIdent (   self,
  orIdent 
)

◆ port() [1/2]

def port (   self)

Получает номер порта IED для подключения.

Это свойство возвращает текущий номер порта, используемый ClientSimulator для подключения к IED. Порт необходим для установления связи с IED по указанному IP-адресу.

Возвращает
Номер порта IED.

◆ port() [2/2]

def port (   self,
  port 
)

Устанавливает номер порта IED для подключения.

Это свойство позволяет указать номер порта, который ClientSimulator будет использовать для подключения к IED. Изменение порта во время подключения ClientSimulator вызовет ошибку. Комбинация IP-адреса и порта должна быть уникальной среди всех экземпляров ClientSimulator.

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

◆ release()

def release (   self)

Завершает активное соединение с IED.

Этот метод аккуратно завершает установленную ассоциацию между ClientSimulator и IED. Он обеспечивает корректное завершение сеанса связи, освобождая все ресурсы, связанные с соединением. В случае неудачной попытки завершения возникает ошибка с подробной информацией.

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

◆ remove_incomplete_references()

def remove_incomplete_references (   data_list,
  delimiter = '$' 
)
static

Удаляет неполные ссылки из списка ссылок на данные.

Этот статический метод обрабатывает список ссылок на данные, обычно связанных с MMS или другими коммуникационными протоколами, и удаляет любые ссылки, которые являются подстроками других, более длинных ссылок. Это помогает обеспечить сохранение только полных, уникальных ссылок. Метод использует разделитель (по умолчанию $) для различения компонентов ссылок.

Аргументы
data_listСписок ссылок на данные в виде строк.
delimiterРазделитель, используемый для разделения компонентов ссылок. По умолчанию $.
Возвращает
Список полных ссылок, исключая любые неполные или подстроки.

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

◆ ap_name

ap_name

◆ ied_name

ied_name

◆ initialized

initialized

◆ instances

list instances = []
static

◆ ip

ip

◆ port

port

◆ scl

scl