Научная статья на тему 'АЛГОРИТМ РАБОТЫ ВЕДУЩЕГО МИКРОКОНТРОЛЛЕРНОГО БЛОКА УПРАВЛЕНИЯ ARDUINO UNO R3 ДЕМОНСТРАЦИОННО-ЛАБОРАТОРНОГО СТЕНДА "ИНТЕЛЛЕКТУАЛЬНЫЕ СЕТИ НА ОСНОВЕ МКС"'

АЛГОРИТМ РАБОТЫ ВЕДУЩЕГО МИКРОКОНТРОЛЛЕРНОГО БЛОКА УПРАВЛЕНИЯ ARDUINO UNO R3 ДЕМОНСТРАЦИОННО-ЛАБОРАТОРНОГО СТЕНДА "ИНТЕЛЛЕКТУАЛЬНЫЕ СЕТИ НА ОСНОВЕ МКС" Текст научной статьи по специальности «Электротехника, электронная техника, информационные технологии»

CC BY
168
15
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ИНТЕЛЛЕКТУАЛЬНЫЕ ЭЛЕКТРИЧЕСКИЕ СЕТИ / ЭЛЕКТРОСНАБЖЕНИЕ / МУЛЬТИКОНТАКТНЫЕ КОММУТАЦИОННЫЕ СИСТЕМЫ / ПРОГРАММИРОВАНИЕ / МИКРОКОНТРОЛЛЕРНЫЙ БЛОК УПРАВЛЕНИЯ

Аннотация научной статьи по электротехнике, электронной технике, информационным технологиям, автор научной работы — Виноградов А.В., Лансберг А.А., Панфилов А.А., Псарев А.И., Виноградова А.В.

Демонстрационный стенд «Интеллектуальные сети на основе МКС» позволяет отрабатывать ситуации, возможные в электрической сети, содержащей различные виды мультиконтактных коммутационных систем (МКС). В свою очередь каждая МКС должна иметь схему управления, в которую входит микроконтроллерный блок управления (МБУ), осуществляющий мониторинг напряжения на выводах, фиксирующий текущее положение контактов и передающий эту информацию в ведущий микроконтроллер стенда как массив данных. В статье приведена программа ведущего микроконтроллерного блока управления (МБУ), который выполняет множество функций, таких как: включение демонстрационного стенда, опрос ведомых контроллеров, изменение конфигурации сети при имитации аварийных ситуаций на основе заложенных циклов. Программа написана в интегрированной среде от разработчиков Arduino с использование языка программирования C++.Demonstration stand «Intelligent network based on the MCS» will allow to work out different situations in the electrical network containing different types of multi-contact switching systems (MCS). In turn, each MCS must have a control circuit, which includes a microcontroller control unit (MBU), which monitors the voltage at the terminals, fixes the current position of the contacts and transmits this information to the leading microcontroller of the project as a data array. The article describes the program host microcontroller control unit (MBU) project, which performs many functions: enable display stand, polling slave controllers, the network configuration changes when simulating emergency situations on the basis of inherent cycles. The program is written in an integrated environment from Arduino developers using the C++programming language.Demonstration stand «Intelligent network based on the MCS» will allow to work out different situations in the electrical network containing different types of multi-contact switching systems (MCS). In turn, each MCS must have a control circuit, which includes a microcontroller control unit (MBU), which monitors the voltage at the terminals, fixes the current position of the contacts and transmits this information to the leading microcontroller of the project as a data array. The article describes the program host microcontroller control unit (MBU) project, which performs many functions: enable display stand, polling slave controllers, the network configuration changes when simulating emergency situations on the basis of inherent cycles. The program is written in an integrated environment from Arduino developers using the C++programming language.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по электротехнике, электронной технике, информационным технологиям , автор научной работы — Виноградов А.В., Лансберг А.А., Панфилов А.А., Псарев А.И., Виноградова А.В.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «АЛГОРИТМ РАБОТЫ ВЕДУЩЕГО МИКРОКОНТРОЛЛЕРНОГО БЛОКА УПРАВЛЕНИЯ ARDUINO UNO R3 ДЕМОНСТРАЦИОННО-ЛАБОРАТОРНОГО СТЕНДА "ИНТЕЛЛЕКТУАЛЬНЫЕ СЕТИ НА ОСНОВЕ МКС"»

Для изменения сложившейся ситуации в положительную сторону, в плане увеличения объема поставки древесины водным транспортном необходимо разработать совершенную технологию выполнения сплавных работ на малых, средних, больших и крупных реках с последующим построением рациональных транспортно-технологических схем поставки древесины потребителям по водным путям. Усовершенствованные транспортно-технологические схемы водного транспорта обязаны включать в себя использование в качестве базовых лесотранспортных единиц - плоские сплоточные единицы [10-12], которые пригодны к эксплуатации на реках с малыми глубинами, как отдельно, так и в составе плотов.

Библиография:

1. Водный транспорт леса / Под общ. ред. В.И. Патякина. М.: МГУЛ, 2000. 432 с.

2. Прилуцкий А.В. Водный транспорт леса. М.: Гослесбумиздат, 1952. 384 с.

3. Донской И.П. Водный транспорт леса. М.: Лесн. пром-сть, 1973. 288 с.

4. Лебедев А.Н. Водный транспорт леса. Л.: Гослестехиздат, 1939. 464 с.

5. Справочник по водному транспорту леса. М.: Гослесбумиздат, 1952. 799 с.

6. Российская Федерация. Законы. Водный кодекс Российской Федерации [федер. закон: принят Гос. Думой 12 апреля 2006 г.: по состоянию на 20 февраля 2011 г.]. М.: Проспект: КноРус, В62, 2011. 48 с.

7. Водный кодекс Российской Федерации от 03.06.2006 г. № 74-ФЗ // Экологический консалтинг / Автономная некоммерческая организация «Поволжский центр экологический оценок». Казань, 2006. № 2. С. 9-33.

8. СанПиН 2.1.5.980-00.2.1.5 Водоотведение населенных мест, санитарная охрана водных объектов. Гигиенические требования к охране поверхностных вод / Минздрав России. М.: Федеральный центр госсанэпиднадзора Минздрава России, 2000. 14 с.

9. СанПиН 2.1.5.980-00.2.1.5 Водоотведение населенных мест, санитарная охрана водных объектов. Гигиенические требования к охране поверхностных вод [Электронный ресурс]: [утв. главным государственным санитарным врачом РФ 22.06.2000 (с изменениями 04.02.2011)]. - Режим доступа: [Консультант плюс]. - Загл. с экрана.

10. Васильев В.В., Афоничев Д.Н. Усовершенствованные системы плотового сплава лесоматериалов. Saarbrucken (Германия).: Изд-во LAP LAMBERT Academic Publishing, 2014. 284 с.

11. Митрофанов А.А. Лесосплав. Новые технологии, научное и техническое обеспечение. Архангельск.: Изд-во АГТУ, 2007. 492 с.

12. Васильев В.В. Повышение эффективности и экологической безопасности плотового сплава лесоматериалов: дис. ... канд. техн. наук Воронеж, 2013. 259 с.

УДК 681.5:621.316.3

АЛГОРИТМ РАБОТЫ ВЕДУЩЕГО МИКРОКОНТРОЛЛЕРНОГО БЛОКА УПРАВЛЕНИЯ АРйиНЧО и1ЧО ДЕМОНСТРАЦИОННО-ЛАБОРАТОРНОГО СТЕНДА «ИНТЕЛЛЕКТУАЛЬНЫЕ СЕТИ НА ОСНОВЕ МКС»

Виноградов А.В.1, к.т.н., доцент,

ведущий научный сотрудник, Лансберг А.А.2, бакалавр 2 курса направления подготовки 13.03.02 «Электроэнергетика и электротехника», Панфилов А.А.3, начальник отдела «Автоматизированные системы диспетчерского управления», Псарев А.И.2, старший преподаватель,

Виноградова А.В.1, к.т.н., доцент, старший научный сотрудник.

1ФГБНУ ФНАЦ ВИМ, 2 ФГБОУ ВО Орловский ГАУ, 3 ПАО «МРСК Центра»-«Орелэнерго».

АННОТАЦИЯ

Демонстрационный стенд «Интеллектуальные сети на основе МКС» позволяет отрабатывать ситуации, возможные в электрической сети, содержащей различные виды мультиконтактных коммутационных систем (МКС). В свою очередь каждая МКС должна иметь схему управления, в которую входит микроконтроллерный блок управления (МБУ), осуществляющий мониторинг напряжения на выводах, фиксирующий текущее положение контактов и передающий эту информацию в ведущий микроконтроллер стенда как массив данных. В статье приведена программа ведущего микроконтроллерного блока управления (МБУ), который выполняет множество функций, таких как: включение демонстрационного стенда, опрос ведомых контроллеров, изменение конфигурации сети при имитации аварийных ситуаций на основе заложенных циклов. Программа написана в интегрированной среде от разработчиков Arduino с использование языка программирования C++.

КЛЮЧЕВЫЕ СЛОВА

Интеллектуальные электрические сети, электроснабжение, мультиконтактные коммутационные системы, программирование, микроконтроллерный блок управления, Arduino.

ABSTRACT

Demonstration stand «Intelligent network based on the MCS» will allow to work out different situations in the electrical network containing different types of multi-contact switching systems (MCS). In turn, each MCS must have a control circuit, which includes a microcontroller control unit (MBU), which monitors the voltage at the terminals, fixes the current position of the contacts and transmits this information to the leading microcontroller of the project as a data array. The article describes the program host microcontroller control unit (MBU) project, which performs many functions: enable display stand, polling slave controllers, the network configuration changes when simulating emergency situations on the basis of inherent cycles. The program is written in an integrated environment from Arduino developers using the C++programming language.

KEYWORDS

Intelligent electrical networks, power supply, multi-contact switching systems, programming, microcontroller control unit, Arduino.

Актуальность работы. Мультиконтактные коммутационные системы (МКС) -это коммутационное электросетевое оборудование, необходимое для реализации концепций интеллектуальных электрических сетей [1-4]. МКС состоят из силовой и логической частей. Они позволяют значительно повысить надежность электроснабжения потребителей, так как их особенность заключается в независимом управлении силовыми контактами (вакуумные выключатели, вакуумные контакторы), позволяющими реализовывать в данных коммутационных аппаратах различные функции автоматики, в том числе: АПВ и АВР [3]. В ходе реконструкции систем электроснабжения на основе МКС с соблюдением всех норм и стандартов в целом их воздействие на экологию будет находиться в допустимых пределах [4]. Классификация МКС по конструктивному исполнению на примере однолинейных силовых схем представлена в [5].

Для того чтобы отработать схемы управления опытными образцами МКС разработан демонстрационно-лабораторный стенд «Интеллектуальные сети на основе МКС», система электроснабжения которого содержит разные типы МКС и описана в источнике [6]. С его помощью можно моделировать различные ситуации в электрической сети. При этом каждая МКС оснащена схемой управления, которая позволяет осуществлять переключения контактов в зависимости от поступающих сигналов с датчиков мониторинга напряжения, а также команд, задаваемых диспетчером. В процессе работы демонстрационного стенда с помощью двоичного кода описаны: нормальный режим работы (включение стенда), 5 аварийных ситуаций таким же образом как в [7]. При этом также можно описать любую другую ситуацию, задаваемую диспетчером.

Демонстрационно-лабораторный стенд выполнен в виде электрической цепи низшего напряжения на базе элементов электроники, которые образуют электрические схемы МКС, позволяющие проводить безопасные испытания и проследить логику их работы в совокупности с микроконтроллерами. Отдельное описание работы схемы для МКССМ-8-4В представлено в [8]; а схема для МКС-4 с описанием ее работы в совокупности с МБУ - Arduino Nano V3.0 CH340 на базе чипа ATmega328P, где изображена распиновка последнего, в [9]. В источнике [5] представлена электрическая схема управления демонстрационного стенда с микроконтроллерным блоком Arduino Nano V3.0 CH340 на базе чипа ATmega328P #1, содержащая модель 1МКС-3, накопитель электроэнергии и биогазовую установку. Для реализации проекта использовано 7 ведомых (Slave) микроконтроллеров для моделей МКС и 1 ведущий (Master) микроконтроллер. Выведенные на панель стенда тумблеры позволяют имитировать различные аварийные ситуации, возможные в сети. Микроконтроллерные средства управления моделями МКС реагируют на ту или иную ситуацию и выполняют сбор и обработку информации функцией чтения напряжения analogRead и логическим оператором if, анализирующим полученные числовые значения. Впоследствии, с помощью библиотек Wire.begin и Wire.write происходит отправка информации на главный микроконтроллер по шине связи I2C. Полное описание общего принципа построения алгоритмов ведомых микроконтроллеров представлено в [5].

В данной работе представлен алгоритм работы главного микроконтроллерного блока управления демонстрационно-лабораторного стенда. Он выполняет необходимые переключения в электрической схеме в соответствии с заложенными циклами на основе полученной информации от Slave МБУ.

Внешний вид собранной электрической схемы демонстрационно-лабораторного стенда представлен на рисунке 1 .

Цель работы. Описание скетча ведущего микроконтроллерного блока управления Arduino UNO R3 демонстрационно-лабораторного стенда, написанного с помощью программы Arduino IDE.

Задачи работы:

• описать используемый микроконтроллер и его функции, которые непосредственно используются в проекте;

• представить программу ведущего микроконтроллерного блока проекта: описать функции, использующиеся для связи микроконтроллеров по интерфейсу I2C; объяснить функции, выполняемые переменной типа char, которой обозначены датчики напряжения и контакты коммутационных устройств; изложить особенности построения массива данных с помощью переменных отправки Writter и чтения Reader информации; объяснить процессы включения стенда и циклов переключений.

Рисунок 1 - Собранная электрическая схема демонстрационно-лабораторного стенда

«Интеллектуальные сети на основе МКС»

В роли ведущего микроконтроллерного блока проекта использована плата Arduino Uno R3 на базе контроллера ATMEGA328 (рис. 2):

Рисунок 2 - Внешний вид платы Arduino Uno R3 на базе чипа ATMEGA328

Плата обладает значительным потенциалом возможностей: последовательный интерфейс использует шины №0 (RX - получение данных), №1 (TX - передача данных); для внешнего прерывания используются выводы №2, №3; для ШИМ используются выводы за номерами 3,5, 6, 9, 10, 11; функция analogWrite обеспечивает разрешение в 8 бит; cвязь посредством SPI: контакты №10 (SS), №11 (MOSI), №12 (MISO), №13 (SCK); вывод №13 запитывает светодиод, который загорается при высоком потенциале; Uno оснащена 6 аналоговыми входами (A0 - A5), которые имеют разрешение в 10 бит; для изменения верхнего предела напряжения используется вывод AREF (функция analog Reference); cвязь I2C (TWI, библиотека Wire) осуществляется через выводы №4 (SDA), №5 (SCL); вывод Reset - перезагрузка микроконтроллера.

В проекте использованы пины A4 (SDA) и A5 (SDL) для установления связи между микроконтроллерами по интерфейсу I2C, пины GND и 5V, с помощью которых осуществляется питание платы, а также вывод Reset, который осуществляет

перезагрузку платы после изменения конфигурации при аварийной ситуации. На выводе происходит формирование низкого уровня (LOW), который приведет к перезагрузке микроконтроллера. В плате этот вывод служит для функционирования кнопки сброса. В результате нажатия произойдет сброс текущей ситуации и постепенное включение стенда - установление нормального режима. Впоследствии планируется использовать выводы RX и TX для подключения Bluetooth-модуля, который позволит производить беспроводное соединение с контролером через мобильный телефон или ПК.

Для написания скетча (программы) главного микроконтроллера использована программа ArduinoIDE (Integrated Development Environment) - интегрированная среда разработки от создателей платформы. Ее особенности описаны в источнике [5], в котором также приведен общий принцип построения алгоритмов ведомых МБУ; таким же образом ниже описана программа Arduino Uno R3.

#include <Wire.h> // библиотека Wire позволяет устанавливать связь микроконтроллера с другими устройствами через интерфейс I2C.

String Read = ""; // Далее мы вводим функцию String с названием Read, которая необходима для обработки массива данных, представленного в виде информации о наличии напряжения на выводах коммутационных устройств. Функция String позволяет работать с переменными типа char, которые использованы в программе. Данная функция является своего рода конструктором, формирующим класс полученных данных. В массиве собраны данные (переменные) о наличии напряжения со всех ведомых МБУ. При этом каждая переменная состоит из 5 байт: адреса устройства и точек контроля напряжения. Причем данные, хранимые в массиве, String формируются с 0 байта. Отсутствующие точки заданы как '0'.

Затем мы вводим «глобальные» переменные, которые будут использоваться во всех циклах программы.

В главном ведущем МБУ проекта все датчики контроля напряжения на выводах коммутационных устройств, их контакты; а также выключатели источников генерации обозначены переменными символьного (знакового) типа - char. Переменная этого типа данных занимает объем памяти размером в 1 байт и может хранить числовые значения в диапазоне от -128 до 127. Мы используем переменные данного типа для обозначения изначально разомкнутых (0) контактов коммутационных устройств и источников генерации, а также отсутствующего напряжения в точках контроля. Соответственно, замкнутые положения и наличие напряжения обознаются как (1). Данная операция необходима для того, чтобы ведущий МБУ проекта сам произвел процесс включения стенда и установил нормальный режим работы. Ниже приведены некоторые из 52-х переменных программы:

char BGY_Rele = '0'; // использование переменной символьного типа - char для обозначения изначально разомкнутого (0) положения контакта биогазовой установки, МБУ №1.

char One_MKC_3_input_B1 = '0'; // использование переменной символьного типа

- char для обозначения изначально отсутствующего (0) напряжения на выводе B1 коммутационного устройства 1МКС-3, МБУ №1.

char One_MKC_4_Rele_2 = '0'; // использование переменной символьного типа -char для обозначения изначально разомкнутого (0) положения контакта 2 коммутационного устройства 1МКС-4, МБУ №2.

char One_MKC_4_input_B3 = '0'; // использование переменной символьного типа

- char для обозначения изначально отсутствующего (0) напряжения на выводе B3 коммутационного устройства 1МКС-4, МБУ №2.

char MKCCM_8_4B_Rele_4 = '0'; // использование переменной символьного типа

- char для обозначения изначально разомкнутого (0) положения контакта 4 коммутационного устройства 1МКССМ-8-4В, МБУ №3.

char MKCCM_8_4B_input_B3 = '0'; // использование переменной символьного типа - char для обозначения изначально отсутствующего (0) напряжения на выводе B3 коммутационного устройства 1МКССМ-8-4В, МБУ №3.

char Two_MKC_3_Rele_2 = '0'; // использование переменной символьного типа -char для обозначения изначально разомкнутого (0) положения контакта 2 коммутационного устройства 2МКС-3, МБУ №4.

char Two_MKC_3_input_B1 = '0'; // использование переменной символьного типа - char для обозначения изначально отсутствующего (0) напряжения на выводе B1 коммутационного устройства 2МКС-3, МБУ 4.

char AVR_P_Rele_2 = '0'; // использование переменной символьного типа - char для обозначения изначально разомкнутого (0) положения контакта 2 коммутационного устройства АВР-П, МБУ №6.

cha AVR_P_input_B1 = '0'; // использование переменной символьного типа - char для обозначения изначально отсутствующего (0) напряжения на выводе B1 коммутационного устройства АВР-П, МБУ №6.

char TP_Rele = '0'; // использование переменной символьного типа - char для обозначения изначально разомкнутого (0) положения контакта ТП, МБУ №7.

char SPAVR_input_B1 = '0'; // использование переменной символьного типа -char для обозначения изначально отсутствующего (0) напряжения на выводе B1 коммутационного устройства СПАВР, МБУ №7.

void setup() { // начало цикла, здесь располагаются программы, которые необходимо выполнить один раз перед началом работы цикла void loop.

Wire.begin(); // Библиотека позволяет производить связь устройств через интерфейс I2C. Использованы: A4 - линия данных, А5 - линия тактового сигнала.

Serial.begin(9600); // функция позволяет устанавливать соединение контроллера с внешним устройством и выводит информацию монитора порта на экран ПК, 9600 бит/секунду - скорость обмена данными, заданная по умолчанию.

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

Writter (1, One_MKC_3_Rele_1, One_MKC_3_Rele_2, One_MKC_3_Rele_3, N_Rele, BGY_Rele, '0, '( , '0); // переменная Writter задает изначально разомкнутое положение всех выключателей и контактов ведомого МБУ №1 перед процессом включения демонстрационного стенда.

Writter (2, One_MKC_4_Rele_1, One_MKC_4_Rele_2, One_MKC_4_Rele_3, One_MKC_4_Rele_4, SAS_Rele, '0', '0 , '0'); // переменная Writter задает изначально разомкнутое положение всех выключателей и контактов ведомого МБУ №2 перед процессом включения демонстрационного стенда.

Writter (3, MKCCM_8_4B_Rele_1, MKCCM_8_4B_Rele_2, MKCCM_8_4B_Rele_3, MKCCM_8_4B_Rele_4, MKCCM_8_4B_Rele_5, MKCCM_8_4B_Rele_6,

MKCCM_8_4B_Rele_7, MKCCM_8_4B_Rele_8); // переменная Writter задает изначально разомкнутое положение всех выключателей и контактов ведомого МБУ №3 перед процессом включения демонстрационного стенда.

Writter (4, Two_MKC_3_Rele_1, Two_MKC_3_Rele_2, Two_MKC_3_Rele_3, VAS_Rele, '0 , 'С, '0, '0'); // переменная Writter задает изначально разомкнутое положение всех выключателей и контактов ведомого МБУ №4 перед процессом включения демонстрационного стенда.

Writter (5, Two_MKC_4_Rele_1, Two_MKC_4_Rele_2, Two_MKC_4_Rele_3, Two_MKC_4_Rele_4, '0', '0', '0', '0'); // переменная Writter задает изначально разомкнутое положение всех выключателей и контактов ведомого МБУ №5 перед процессом включения демонстрационного стенда.

Writter (6, AVR_P_Rele_1, AVR_P_Rele_2, AVR_P_Rele_3, '0', '0, '0', '0, '( ); // переменная Writter задает изначально разомкнутое положение всех выключателей и контактов ведомого МБУ №6 перед процессом включения демонстрационного стенда.

Writter (7, SPAVR_Rele_1, TP_Rele, '0, '0 , '0', 'С , '0 , '0); // переменная Writter задает изначально разомкнутое положение всех выключателей и контактов ведомого МБУ №7 перед процессом включения демонстрационного стенда.

//включение демонстрационного стенда - установление нормального режима работы сети.

Включение демонстрационного стенда осуществляется в соответствии со следующей ситуацией:

Ситуация 1. Сеть работает в нормальном режиме, повреждений на линиях нет, все потребители получают электроэнергию, при этом также производится также зарядка накопителя электроэнергии. Потребители 2, 6 получают электроэнергию от ТП; 1, 5 - от ВЭС; СЭС производит электроснабжение потребителей 3, 4, а БГУ зарядку накопителя электроэнергии.

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

Включение определенного контакта осуществляется в результате придания соответствующей переменной символьного типа - char значения '1', означающего в двоичном коде замкнутое положение, и последующей отправки данной команды с использованием переменной Writter данного контроллера общим массивом данных на ведомый МБУ. Далее при помощи функции Serial.println для диспетчера (презентатора) выводится на экран монитора информация об изменении положения данного контакта и впоследствии вводится задержка перед проверкой напряжения. Данная операция выполняется затем, чтобы убедиться в изменении конфигурации сети. При помощи переменной Reader с ведомого МБУ считывается определенный байт информации, затем происходит идентификация наличия/отсутствия напряжения с помощью логического оператора if. Данная информация поступает по шине I2C на ведущий МБУ и также с использованием оператора if в зависимости от верности или ложности условия наличие напряжения в контрольной точке выводится на экран диспетчера. Таким образом осуществляется процесс включения одного контакта, а дальнейший цикл включения осуществляется аналогично. Процесс изменения положения контактов при аварийной ситуации практически идентичен: при изменении положения тумблера мы запрашиваем наличие напряжения в определенной точке, и если его нет, то с помощью логического оператора if мы задаем цикл переключений, которые необходимо осуществить в данной ситуации в соответствии с таблицей двоичного кода.

//1 шаг.

delay(3000); // введение задержки в 3 секунды перед включением демонстрационного стенда.

TP_Rele = '1; // команда на включение выключателя ТП.

Writter (7, SPAVR_Rele_1, TP_Rele, '0', '0, '0 , '0', '0, '0); // отправка команды о включении выключателя ТП на МБУ №7.

Serial.println("TP_Rele включено"); // выведение информации о включении ТП на монитор.

delay(2500); // задержка 2.5 секунды перед проверкой напряжения.

SPAVR_input_B2 = Reader(7,10); // проверка напряжения на выводе B2 устройства СПАВР, запрос 10 байта информации от МБУ #7.

if (SPAVR_input_B2 == '1) Serial.println("SPAVR_input_B2 есть напряжение"); // если напряжение на выводе B2 устройства СПАВР есть, то выводим соответствующую информацию на монитор.

\ (8РАУР_1при1_В2 == '( ) Serial.println("SPAVRJnput_B2 нет напряжения"); // если напряжения на выводе В2 устройства СПАВР нет, то выводим соответствующую информацию на монитор.

//2 шаг.

УА8_Ре1е = '1; // команда на включение выключателя ВЭС.

Writter (4, Тюо_МКС_3_Ре1е_1, Two_MKC_3_Rele_2, Two_MKC_3_Rele_3, УА8_Ре1е, 0', '0, '( , ' ); // отправка команды о включении выключателя ВЭС на МБУ №4.

Serial.println("VAS_Rele включено"); // выведение информации о включении ВЭС на монитор.

Ье!ау(2500); // задержка 2.5 секунды перед проверкой напряжения.

Two_MKC_3_input_B3 = Reader(4,11); // проверка напряжения на выводе В3 устройства 2МКС-3, запрос 11 байта информации от МБУ #4.

^о_МКС_3_три_В3 == " ) Serial.println("Two_MKC_3_input_B3 есть напряжение"); // если напряжение на выводе В3 устройства 2МКС-3 есть, то выводим соответствующую информацию на монитор.

^о_МКС_3_три_В3 == '0') Serial.println("Two_MKC_3_input_B3 нет напряжения"); // если напряжения на выводе В3 устройства 2МКС-3 нет, то выводим соответствующую информацию на монитор.

//3 шаг.

Two_MKC_3_Rele_3 = '1 ; // команда на включение 3 контакта коммутационного устройства 2МКС-3.

Writter (4, Two_MKC_3_Rele_1, Two_MKC_3_Rele_2, Two_MKC_3_Rele_3, VAS_Rele, 0', 0', '0, '0); // отправка команды на включение 3 контакта коммутационного устройства 2МКС-3 на МБУ №4.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Serial.println("Two_MKC_3_Rele_3 включено"); // выведение информации о включении 3 контакта коммутационного устройства 2МКС-3 на монитор.

Ье^у(2500); // задержка 2.5 секунды перед проверкой напряжения.

Two_MKC_3_input_B3 = Reader(4,11); // проверка напряжения на выводе В3 устройства 2МКС-3, запрос 11 байта информации от МБУ #4.

(Two_MKC_3_input_B3 == '1 ) Serial.println("Two_MKC_3_input_B3 есть напряжение"); // если напряжение на выводе В3 устройства 2МКС-3 есть, то выводим соответствующую информацию на монитор.

(Two_M KC_3_input_B3 == '0') Serial.println("Two_MKC_3_input_B3 нет напряжения"); // если напряжения на выводе В3 устройства 2МКС-3 нет, то выводим соответствующую информацию на монитор.

// Дальнейшие операции включения выполняются аналогично, всего их 16. Внешний вид демонстрационно-лабораторного стенда при нормальном режиме работы и кодирование ситуации с помощью двоичного кода представлены в таблице 1 и на рисунке 3.

Таблица 1 - Кодирование ситуации 1 в системе электроснабжения

Код в буквенной форме

1МКС-4 2МКС-4 1МКС-3 2-МКС3 АВР-П СПАВР 1МКССМ-8-4В БГУ СЭС

Р K Е Р Е А А В В

Д воичный код

1001 1101 110 101 111 0 00000000 1 1

Код в буквенной форме

П1 П2 П3 П4 П5 П6 ТП Н ВЭС

В В В В В В В В В

Д воичный код

1 1 1 1 1 1 1 1 1

Рисунок 3 - Нормальный режим работы демонстрационно-лабораторного стенда

} // конец цикла void setup

Далее следует цикл void loop, в который помещены программы, выполняющиеся все время, пока работает микроконтроллер. Начав выполнение с первой команды, микроконтроллер дойдет до конца и сразу же перепрыгнет в начало, чтобы повторить ту же последовательность. И так бесконечное число раз (до тех пор, пока на плату будет подано питание).

Для экономии места в работе приведен цикл переключений при аварийной ситуации №4.

Изменение конфигурации сети при остальных аварийных ситуациях описано аналогично: при переключении аварийного тумблера в положение, разрывающее электрическую цепь, пропадает напряжение в контрольной точке (для аварии №4 это вывод B2 коммутационного устройства СПАВР). Информация об аварийной ситуации приходит по шине |2с на главный контроллер в результате использование переменной Reader. Затем мы используем логический оператор if, который при отсутствии напряжения на датчике начинает пошагово осуществлять цикл переключений.

void loop() { // начало основного цикла программы.

// аварийная ситуация № 4 в системе электроснабжения.

Ситуация 4. Системы дистанционного мониторинга технического состояния ЛЭП выявили повреждение линии со стороны потребителей 2 и 6. До устранения аварии и установления нормального режима можно произвести переключения в сети следующим образом: БГУ и ВЭС будут осуществлять питание потребителей 1 и 5, а СЭС и накопитель электроэнергии потребителей 3 и 4.

SPAVR_input_B2 = Reader(7,10); // проверка наличия напряжения на выводе B2 коммутационного устройства СПАВР.

if (SPAVR_input_B2 == 'С ) { // при отсутствии напряжения произвести следующие переключения - начало цикла.

//1 шаг.

TP_Rele = 'С; // команда на выключение выключателя ТП.

Writter (7, 8РАУР_Ре!е_1, ТР_Ре!е, 'С , 'О', О1, 'С , 'О', '0'); // отправка команды на выключение выключателя ТП на МБУ №7.

Serial.println("TP_Rele выключено"); // выведение информации о выключении выключателя ТП на монитор.

Ье!ау(2000); // задержка 2 секунды перед проверкой напряжения.

SPAVR_input_B2 = Reader(7,10); // проверка напряжения на выводе В2 устройства СПАВР, запрос 10 байта информации от МБУ #7.

1 (8РАУР_три_Б2 == '1) 8eria!.print!n("SPAVR_input_B2 есть напряжение"); // если напряжение на выводе В2 устройства СПАВР есть, то выводим соответствующую информацию на монитор.

1 (8РАУР_три_Б2 == 'С ) 8eria!.print!n("SPAVR_input_B2 нет напряжения"); // если напряжения на выводе В2 устройства СПАВР нет, то выводим соответствующую информацию на монитор.

// 2 шаг.

One_MKC_3_Rele_1 = 'С ; // команда на выключение 1 контакта коммутационного устройства 1МКС-3.

Writter (1, One_MKC_3_Rele_1, One_MKC_3_Rele_2, One_MKC_3_Rele_3, N_Rele, BGY_Rele, '0', '( , 'С ); // отправка команды на выключение 1 контакта коммутационного устройства 1МКС-3 на МБУ №1.

8eria!.print!n("One_MKC_3_Rele_1 выключено"); // выведение информации о выключении 1 контакта коммутационного устройства 1МКС-3 на монитор.

Ье^у(2000); // задержка 2 секунды перед проверкой напряжения.

Опе_МКС_3_три_В1 = Reader(1,9); // проверка напряжения на выводе В1 устройства 1МКС-3, запрос 9 байта информации от МБУ #1.

(One_MKC_3_input_B1 == " ) Serial.println("One_MKC_3_input_B1 есть напряжение"); // если напряжение на выводе В1 устройства 1МКС-3 есть, то выводим соответствующую информацию на монитор.

(One_MKC_3_input_B1 == '0') 8eria!.print!n("One_MKC_3_input_B1 нет напряжения"); // если напряжения на выводе В1 устройства 1МКС-3 нет, то выводим соответствующую информацию на монитор.

// 3 шаг.

N_Rele = '1 ; // команда на включение выключателя накопителя электроэнергии.

Writter (1, One_MKC_3_Rele_1, One_MKC_3_Rele_2, One_MKC_3_Rele_3, N_Rele, BGY_Re!e, '0', 'С , 'С); // отправка команды на включение выключателя накопителя электроэнергии на МБУ №1.

Serial.println("N_Rele включено"); // выведение информации о включении выключателя накопителя электроэнергии на монитор.

Ье^у(2000); // задержка 2 секунды перед проверкой напряжения.

Опе_МКС_4_три_В2 = Reader(2,10); // проверка напряжения на выводе В2 устройства 1МКС-4, запрос 10 байта информации от МБУ #2.

(One_MKC_4_input_B2 == " ) 8eria!.print!n("One_MKC_4_input_B2 есть напряжение"); // если напряжение на выводе В2 устройства 1МКС-4 есть, то выводим соответствующую информацию на монитор.

(One_MKC_4_input_B2 == '0') 8eria!.print!n("One_MKC_4_input_B2 нет напряжения"); // если напряжения на выводе В2 устройства 1МКС-4 нет, то выводим соответствующую информацию на монитор.

//Остальные процессы включения и отключения контактов описаны аналогично, всего в данном цикле переключений 8 операций. Внешний вид демонстрационно-лабораторного стенда и кодирование с помощью двоичного кода аварийной ситуации №4 представлены в таблице 2 и на рисунке 4.

Таблица 2 - Кодирование ситуации 4 в системе электроснабжения

Код в буквенной форме

1МКС-4 2МКС-4 1МКС-3 2-МКС3 АВР-П СПАВР 1MWCCM-8-4B БГУ СЭС

K K G F H A G1 B B

Двоичный код

1101 1101 011 101 111 0 01100100 1 1

Код в буквенной форме

П1 П2 П3 П4 П5 П6 ТП Н ВЭС

B A B B B A А A B

Двоичный код

1 0 1 1 1 0 0 0 1

Рисунок 4 - Аварийный режим работы №4 демонстрационно-лабораторного стенда

} // конец цикла переключения контактов при аварийной ситуации №4. } // конец основного цикла программы - void loop.

После окончания основного цикла программы, который производит изменение конфигурации сети путем формировки соответствующих команд, следует цикл отправки непосредственно самой команды. Отправка команды осуществляется переменной Writter. Writter представляет собой цикл передачи команды, в котором содержатся функции передачи данных и специально введенная переменная символьного типа - char с названием Comand, состоящая из универсальных 8 байт информации о положении контактов коммутационных устройств, которое нужно задать в текущей ситуации.

char Writter ( byte addr, char Rele_1, char Rele_2, char Rele_3, char Rele_4, char Rele_5, char Rele_6, char Rele_7, char Rele_8 ) // введение переменной Writter символьного типа - char, производящей отправку информации о переключения

контактов источников генерации и коммутационных устройств на МБУ с определенным адресом. Переменная состоит из 9 байт: адрес устройства и максимальное число контактов относительно 1МКССМ-8-4В. Переменная Writter расшифрована для всех ведомых МБУ и недостающие контакты заданы как '0'.

//Writter (1, One_MKC_3_Rele_1, One_MKC_3_Rele_2, One_MKC_3_Rele_3, N_Rele, BGY_Rele, 'С , 'С', 'С); // разбор переменной Writter для МБУ №1 c учетом отсутствующих контактов, обозначаемых как '0'.

//Writter (2, One_MKC_4_Rele_1, One_MKC_4_Rele_2, One_MKC_4_Rele_3, One_MKC_4_Rele_4, SAS_Rele, 'С , '( , С'); // разбор переменной Writter для МБУ №2 c учетом отсутствующих контактов, обозначаемых как '0'.

//Writter (3, MKCCM_8_4B_Rele_1, MKCCM_8_4B_Rele_2, MKCCM_8_4B_Rele_3, MKCCM_8_4B_Rele_4, MKCCM_8_4B_Rele_5, MKCCM_8_4B_Rele_6,

MKCCM_8_4B_Rele_7, MKCCM_8_4B_Rele_8); // разбор переменной Writter для МБУ №3.

//Writter (4, Two_MKC_3_Rele_1, Two_MKC_3_Rele_2, Two_MKC_3_Rele_3, VAS_Rele, 'С , '0, '0', 'С ); // разбор переменной Writter для МБУ №4 c учетом отсутствующих контактов, обозначаемых как '0'.

//Writter (5, Two_MKC_4_Rele_1, Two_MKC_4_Rele_2, Two_MKC_4_Rele_3, Two_MKC_4_Rele_4, С, 'С, 'С , 'С ); // разбор переменной Writter для МБУ №5 c учетом отсутствующих контактов, обозначаемых как '0'.

//Writter (6, AVR_P_Rele_1, AVR_P_Rele_2, AVR_P_Rele_3, 'С, 'С , С, 'С , 'С ); // разбор переменной Writter для МБУ №6 c учетом отсутствующих контактов, обозначаемых как '0'.

//Writter (7, SPAVR_Rele_1, TP_Rele, 'С , 'С, 'С, 'С , 'С , С); // разбор переменной Writter для МБУ №7 c учетом отсутствующих контактов, обозначаемых как '0'.

{ // начало цикла.

char Comand[8];

Wire.beginTransmission(addr); // введение функции Wire.beginTransmission для открытия канала связи по шине I2C с ведомым устройством, адрес которого задается в основном цикле программы.

Comand^] = Rele_1; // задаем команду на переключение контакта.

Comand[1] = Rele_2; // задаем команду на переключение контакта.

Comand[2] = Rele_3; // задаем команду на переключение контакта.

Comand[3] = Rele_4; // задаем команду на переключение контакта.

Comand[4] = Rele_5; // задаем команду на переключение контакта.

Comand[5] = Rele_6; // задаем команду на переключение контакта.

Comand[6] = Rele_7; // задаем команду на переключение контакта.

Comand[7] = Rele_8; // задаем команду на переключение контакта.

Comand[8] = ' '; // добавление символа для лучшего визуального восприятия у диспетчера на экране.

Serial.println(Comand); // функция serial.println позволяет вывести на экран сформированную и отправленную команду о положении контактов, которое необходимо задать в текущей ситуации. ln - позволяет отображать данную команду с новой строки.

Wire.write(Comand); // На ведущем устройстве (Master) функция Wire.write добавляет данные в очередь отправки для последующей передачи ведомому устройству (в этом случае функция write() должна вызываться между beginTransmission() и endTransmission()).

Wire.endTransmission(); // Завершает процедуру передачи данных ведомому устройству, инициированную функцией beginTransmittion(). При этом функция отправляет байты, поставленные в очередь функцией write().

} // конец цикла передачи команды.

char Reader ( byte addr, byte Input) // введение переменной Reader символьного типа - char, производящей запрос информации на МБУ с определенным адресом о

наличии напряжения на выводах коммутационных устройств. Переменная состоит из 2 байт: адрес устройства и номер байта, соответствующего определенному датчику напряжения коммутационного устройства. Переменная Reader расшифрована для всех ведомых МБУ и недостаюшие точки контроля напряжения заданы как '0'.

//Reader (1, One_MKC_3_input_B1, One_MKC_3_input_B2, One_MKC_3_input_B3, '0'); // разбор переменной Reader для МБУ №1 c учетом отсутствующих датчиков контроля напряжения, обозначаемых как '0'.

//Reader (2, One_MKC_4_input_B1, One_MKC_4_input_B2, One_MKC_4_input_B3, One_MKC_4_input_B4); // разбор переменной Reader для МБУ №2.

//Reader (3, MKCCM_8_4B_input_B1, MKCCM_8_4B_input_B2,

MKCCM_8_4B_input_B3, MKCCM_8_4B_input_B4); // разбор переменной Reader для МБУ №3.

//Reader (4, Two_MKC_3_input_B1, Two_MKC_3_input_B2, Two_MKC_3_input_B3, '0') // разбор переменной Reader для МБУ №4 c учетом отсутствующих датчиков контроля напряжения, обозначаемых как '0'.

//Reader (5, 'С, Two_MKC_4_input_B2, Two_MKC_4_input_B3, '( ); // разбор переменной Reader для МБУ №5 c учетом отсутствующих датчиков контроля напряжения, обозначаемых как '0'.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

//Reader (6, AVR_P_input_B1, AVR_P_input_B2, '0 , '0); // разбор переменной Reader для МБУ №6 c учетом отсутствующих датчиков контроля напряжения, обозначаемых как '0'.

//Reader (7, SPAVR_input_B1, SPAVR_input_B2, '0 , '0); // разбор переменной Reader для МБУ №7 c учетом отсутствующих датчиков контроля напряжения, обозначаемых как '0'.

{//Начало цикла запроса информации о наличии напряжения.

Wire.requestFrom(addr, 13); // Функция Wire.requestFrom запрашивает данные у определенного ведомого устройства (slave); функция как правило, используется только ведущим устройством (Master). После вызова requestFrom() запрашиваемые данные должны быть считаны с помощью функций available() и read(). Параметров у функции 2: во-первых, это адрес одного из 7-ми ведомых МБУ; во-вторых, это quantity -количество запрашиваемых байт (в нашем случае 13).

Read = ""; //получение информации об изменении наличии напряжения в точках контроля.

char U; // введение переменной символьного типа - char с названием U, которая будет получать конкретные значения расшифрованного напряжения, прерывать цикл запроса информации о наличии напряжения после получения пакета данных и расшифровки информации.

while (Wire.available()) { // Возвращает количество байт, доступных для считывания функцией read(). На ведущем устройстве (Master) данная функция должна вызываться после функции requestFrom(), а на ведомом (Slave) - внутри обработчика onReceive(). Функция available() является наследником вспомогательного класса Stream.

char c = Wire.read(); // используем переменную символьного типа - char для обозначения функции Wire.read, которая производит чтение байтов (наличие напряжения в точках контроля), полученных ведущим устройством от ведомых в результате выполнения функции requestFrom. Это необходимо для того, чтобы в данном цикле использовать расшифрованные значения в качестве переменной и произвести анализ наличия напряжения.

Read = Read + c; // получение информации о наличии напряжения в контрольных точках путем сложения изначально полученного пакета байтов информации и расшифрованных значений.

} //конец цикла анализа напряжения на выводах коммутационных устройств.

Serial.println(Read); // вывод на экран диспетчера массива (строки) Read, в которой находятся соответствующие значения напряжения в контрольных точках.

Serial.print("address-"); // вывод на экран диспетчера слова address для мониторинга номера ведомого МБУ, с которого запрашивается значение напряжения.

Serial.print(addr); // вывод адреса МБУ, с которого запрашивается напряжение.

Serial.print("input - "); // вывод на экран диспетчера слова input, означающего соответствующие аналоговые пины платы, с которых производится запрос информации о наличии напряжения.

Serial.println(Input); // вывод номеров аналоговых пинов.

U = Read.charAt(Input); // приравнивание строки данных и переменной для получения конкретных значений расшифрованного напряжения с целью разбивки строки функцией charAt, позволяющей возвращать указанный символ из массива данных String, для отображения наличия напряжения на каждом аналоговом пине.

Serial.println(Read.charAt(9)); // выведение информации на монитор о

напряжения на аналоговом пине А0.

Serial.println(Read.charAt(10)); // выведение информации на монитор о

напряжения на аналоговом пине А1.

Serial.println(Read.charAt(11)); // выведение информации на монитор о

напряжения на аналоговом пине А2.

Serial.println(Read.charAt(12)); // выведение информации на монитор о

напряжения на аналоговом пине A3.

return U; // Прекращает вычисления наличия напряжения в цикле.

} // конец цикла запроса информации.

После того, как производится весь цикл переключений при аварийной ситуации и в сети устанавливается новая конфигурация возвращение к нормальному режиму работы стенда (изнальной конфигурации) можно осуществить двумя способами. Первый заключается в перезагрузке стенда путем использования функции программы Arduino IDE. При закрытии и последующем открытии монитора порта происходит моментальное выключение демонстрационного стенда и постепенное установление нормального режима в сети. Данный способ перезагрузки будет работать только если к ведущему микроконтроллерному блоку управления подключен ПК по USB-кабелю. Второй способ заключается в нажатии кнопки вывода Reset на ведущей плате Arduino Uno. На выводе происходит формирование низкого уровня (LOW), который приведет к перезагрузке микроконтроллера. В плате этот вывод служит для функционирования кнопки сброса. В результате нажатия произойдет сброс текущей ситуации и постепенное включение стенда. Благодаря использованию этих двух способов можно демонстрировать все ситуации, заложенные в главном МБУ, без отключения источника питания стенда.

Библиография:

1. Виноградов А.В., Лансберг А.А. Интеллектуальные электрические сети на основе МКС: материалы Международной студенческой научной конференции «Горинские чтения. Наука молодых - инновационному развитию АПК» (28-29 марта 2019 года): в 4 т. Том 4. п. Майский.: Издательство ФГБОУ ВО Белгородский ГАУ, 2019. 245 с.

2. Лансберг А.А. Повышение надежности электроснабжения поселка Корсунь посредством применения мультиконтактных коммутационных систем // Научный журнал молодых ученых. № 1(14). Март 2019. С. 51-60.

3. Лансберг А.А. Мультиконтактная коммутационная система МКС-4 и преимущества ее применения. В книге: Энергетика. Проблемы и перспективы развития: материалы IV Всероссийской научной конференции. Научное электронное издание, 2019. С. 117-119.

4. Электрические сети на основе мультиконтактных коммутационных систем и их воздействие на экологию / Лансберг А.А., Игнатова Г.А., Семенов А.Е., Уварова М.Н., Виноградов А.В. В сборнике: Экология и сельское хозяйство: на пути к

инновациям: материалы Международной научно-практической конференции, 2019. С. 184-191.

5. Алгоритмы ведомых микроконтроллерных блоков управления Arduino Nano V3.0 CH340 демонстрационного стенда «Интеллектуальные сети на основе МКС» / А.В. Виноградов, А.А. Лансберг, А.А. Панфилов, А.И. Псарев, А.Е. Семенов // Научный журнал молодых ученых. № 3(16). Сентябрь 2019. С. 39-48.

6. Виноградов А.В., Лансберг А.А., Семенов А.Е. Выбор системы электроснабжения демонстрационного стенда «Интеллектуальные сети на основе мультиконтактных коммутационных систем» и кодирование возникающих ситуаций с помощью двоичного кода. В сборнике: Инновации в образовании. Материалы XI научно-практической конференции: в 2-х частях. Федеральное государственное бюджетное образовательное учреждение высшего образования «Орловский государственный аграрный университет имени Н.В. Парахина», 2019. С. 14-18.

7. Способ кодирования ситуаций в сети, содержащей мультиконтактные коммутационные системы и возобновляемые источники энергии / А.В. Виноградов, А.В. Виноградова, В.Е. Большев, А.А. Лансберг // Вестник аграрной науки Дона. №2 (46). Издательство: Азово-Черноморский инженерный институт - филиал федерального государственного бюджетного образовательного учреждения высшего образования «Донской государственный аграрный университет» в г. Зернограде. - С. 68-76.

8. Виноградов А.В., Лансберг А.А., Псарев А.И. Электрическая принципиальная схема управления мультиконтактной коммутационной системой, выполненной по смешанной схеме, с 8 контактами и 4 выводами // Профессия инженер: сборник материалов Молодежной научно-практической конференции. Орел.: Изд-во ФГБОУ ВО Орловский ГАУ, 2019. С. 103-107.

9. Лансберг А.А., Панфилов А.А. Электрическая принципиальная схема управления мультиконтактной коммутационной системой с 4 контактами и микроконтроллерным блоком управления Arduino Nano V3/0 CH340 для демонстрационного стенда // Научный журнал молодых ученых. № 2(15). Июнь 2019. С. 69-75.

УДК 711.1

АСПЕКТЫ ГРАДОСТРОИТЕЛЬНОЙ ДЕЯТЕЛЬНОСТИ, ВЛИЯЮЩИЕ НА ФОРМИРОВАНИЕ КОМФОРТНОЙ ГОРОДСКОЙ СРЕДЫ

Истранина Е.В., магистрант 2 курса направления подготовки 08.04.01 «Строительство». Научный руководитель: д.э.н., профессор Суворова С.П. ФГБОУ ВО Орловский ГАУ

АННОТАЦИЯ

В статье рассматриваются аспекты (факторы) градостроительной деятельности, влияющие на формирование комфортной городской среды. Описывается понятие «устойчивое развитие территории» и его роль в формировании комфортной городской среды.

КЛЮЧЕВЫЕ СЛОВА

Устойчивое развитие, градостроительная деятельность, комфортная среда, урбанизация.

i Надоели баннеры? Вы всегда можете отключить рекламу.