Прикладное программирование. Как увеличить свою производительность в десятки раз и добиться замечательных результатов.
Хотелось бы открыть серию статей, о том, как навыки прикладного программирования, в обычной работе, какую бы вы не занимали должность или позицию, будь вы инженер, или офисный служащий, или руководитель высокого звена, позволяют фантастически увеличить производительность, и добиться замечательных результатов.
В статьях, на реальных жизненных примерах, я бы хотел показать возможности и перспективы, которые открывают нам навыки программирования.
Питон. Загрузка осциллограмм.
Рассмотрим подробнее на одном примере.
Тот кто работал с E-SCADA, или с устройствами relay protection, знают не понаслышке, насколько важно иметь вовремя загруженные осциллограммы с устройств релейной защиты.
Осциллограмма позволяет зафиксировать токи, напряжения, состояния дискретных входов-выходов, а также внутренние логические сигналы, на момент аварийного события. От этой информации зависит результаты анализа аварии, объяснения причин произошедшего, что нужно сделать, чтобы это не повторилось в будущем.
Осциллограммы, как правило, записывают в свою внутреннюю память устройства релейной защиты. В этих устройствах существует своя внутренняя логика и алгоритмы, согласно которым, стартует запись осциллограмм. Разные производители, предлагают различные возможности своих устройств. Одни устройства позволяют создать гибкую логику, и самим определить алгоритм, по которому будет вестись запись. Другие устройства имеют жесткую логику, без возможности редактирования - там обычному пользователю ничего не изменишь, и приходиться довольствоваться тем, что есть.
Строго говоря, на тех устройствах, где есть запись осциллограмм, эта запись ведется постоянно. Каждую миллисекунду. Просто запись эта ведется в оперативную память устройства, а когда наступает условие для записи осциллограммы, можно назвать его 0 на шкале времени, записывается данные осциллограммы в минус от 0 секунда-две, и в плюс от 0 там уже промежуток времени длиннее.
"Минус" от нуля нужен, чтобы знать что предшествовало аварийному режиму.
"Плюс" от нуля, уже непосредственно сама авария.
Сам процесс загрузки осциллограмм выглядит следующим образом. Инженер, как правило РЗА, берет ноутбук, на котором установлено программное обеспечение производителя оборудования РЗА, и подключается по каналу связи (это может быть RS485, 232, Ethernet, USB) к терминалу защиты и скачивает все необходимые осциллограммы.
Этот способ хорош, и в простых системах работает безукоризненно, однако в сложных системах в данном способе есть некоторые проблемы.
- Размер памяти устройства РЗА ограничен. Нормальная ситуация, когда устройство не может хранить в памяти одновременно не более 4-6 осциллограмм. Когда аварийные события идут одно за другим, вручную только удастся "добыть" скорее всего только осциллограмму связанную с последним аварийным событием, поскольку предыдущие осциллограммы перезапишутся последней аварией.
- Скорость работы. В ручном режиме загрузка осциллограмм крайне небыстрый процесс. Особенно это важно в случае, когда необходимо скачать события с множества устройств.
Например, в случае с Sepam 80, в количестве 50-60 штук, что для одного инженера процесс может затянуться на пару дней.
Поэтому, сам собой напрашивается вопрос об автоматизации загрузки.
Когда возникает такой вопрос, мы конечно же, первым делом обращаемся к производителю устройств релейной защиты, что они предлагают в этом случае.
Тут же выясняется, что предлагают они, как правило свою собственную систему SCADA, для опроса состояния оборудования, в том числе и загрузке осциллограмм. Стоит эта система, зачастую, немалых денег, требует дополнительного оборудования, настройки и наладки. Если на вашем предприятии бюджет жестко сформирован, скорее всего вам откажут в установке данной системы.
Однако, не все так плохо. Производители, не смотря на то, что стараются продать свою систему SCADA, в большинстве случаев, все равно оставляют возможности для включения данного оборудования в "чужую" систему SCADA. Они описывают последовательности действий, что необходимо сделать, чтобы забрать осциллограмму в автоматическом режиме.
Самое простое, когда осциллограммы можно забирать по протоколу FTP.
Гораздо сложнее работать с другими протоколами, например забирать осциллограммы по Modbus. В этом случае производитель описывает процесс с каких буферных регистров считывать данные, размер буфера, подтверждение на скачивание, дату осциллограммы и многое другое.
В моем случае возникла задача скачивать осциллограммы в автоматическом режиме с терминалов РЗА Sepam 80 серии (Шнайдер Электрик производитель). Часть терминалов была подключена через модуля ACE850, которые позволяют загружать осциллограммы по протоколу FTP. Другая же часть, была подключена через Модбас RTU, и нужно было скачивать осциллограммы по этому протоколу.
Когда с поставленной задачей, моя утилита, написанная на Python, начала успешно справляться, я доработал её с учётом возможности параллельной работы с множеством терминалов РЗА одновременно, что еще на порядок сократило время по скачиванию осциллограмм.
Примерная оценка времени затрачиваемое на загрузку следующее:
- В ручном режиме - 2 рабочих дня и 2 часа
- Автоматически последовательный режим - 9 часов
- Параллельный режим - 10 минут.
Смотрите на диаграммах наглядное описание
Смотрите на моем канале youtube видео демонстрацию работы моей утилиты на Python, с загрузкой осциллограмм с терминалов Sepam 80 серии, по протоколу Модбас.
Позже, разработал для терминалов REF615 и REF620 (производитель АББ) утилиту на Python для загрузки осциллограмм по протоколу FTP. Из-за особенностей реализации FTP протокола на данных терминалах, там он идет защищенный TLS, я использовал связку из Python и WinSCP.
Как удалось реализовать, смотрите на видео.
Ну и конечно же, по скорости загрузки, FTP вне конкуренции.