Алгоритмы ведомых микроконтроллерных блоков управления Arduino NANO V3.0 CH340 демонстрационного стенда "Интеллектуальные сети на основе МКС"

Автор: Лансберг А.А., Панфилов А.А., Семенов А.Е., Виноградов А.В., Псарев А.И.

Журнал: Научный журнал молодых ученых @young-scientists-journal

Рубрика: Технические науки

Статья в выпуске: 3 (16), 2019 года.

Бесплатный доступ

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

Еще

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

Короткий адрес: https://sciup.org/147230824

IDR: 147230824

Текст научной статьи Алгоритмы ведомых микроконтроллерных блоков управления Arduino NANO V3.0 CH340 демонстрационного стенда "Интеллектуальные сети на основе МКС"

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

Классификация МКС представлена на рисунке 1.

Рисунок 1 – Классификация мультиконтатных коммутационных систем по конструктивному исполнению на примере силовых однолинейных схем и расшифровка принципа маркировки

Отработка схем управления опытными образцами МКС требуют их моделирования. В связи с этим разрабатывается демонстрационный стенд, система электроснабжения которого описана в источнике [8]. Он позволяет отрабатывать различные ситуации в электрической сети, содержащей несколько различных типов МКС. Каждая МКС должна быть оснащена схемой управления, позволяющей осуществлять переключения контактов МКС в зависимости от поступающих сигналов с датчиков тока и напряжения, а также команд диспетчера. В процессе работы демонстрационного стенда с помощью двоичного кода будет описано 7 ситуаций, таким же образом как в [5, 8, 9].

Демонстрационный стенд будет выполнен в виде электрической цепи из элементов электроники, которые в свою очередь образуют электрические схемы МКС, позволяющие проводить безопасные испытания и проследить логику их работы в совокупности с МБУ. Описание работы такой схемы на примере МКССМ-8-4В представлено в [10]; а схема для МКС-4 с описанием ее работы в совокупности с МБУ-Arduino Nano V3.0 CH340 на базе чипа ATmega328P, где представлена распиновка последнего, в [11]. Для реализации проекта использовано 7 микроконтроллеров. На стенде изображена система электроснабжения, содержащая разные виды МКС. Выведенные на панель стенда тумблеры позволяют имитировать различные аварийные ситуации, возможные в сети. Микроконтроллерные средства управления моделями МКС реагируют на ту или иную ситуацию и выполняют необходимые переключения в схеме. Таким образом, моделируется управление МКС.

Внешний вид демонстрационного стенда и часть его электрической схемы представлены на рисунках 2, 3.

Рисунок 2 – Процесс пусконаладки демонстрационного стенда со всеми включенными источниками генерации, контактами коммутационных устройств и накопителем электроэнергии, работающим в режиме зарядки

Цель работы. Описание алгоритмов семи ведомых микроконтроллерных блоков управления Arduino Nano V3.0 CH340 демонстрационного стенда, написанных с помощь программы Arduino IDE, позволяющей впоследствии после проверки интерпретировать скетчи в язык C++.

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

  •    изложить особенности программы Arduino IDE и принцип ее работы;

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

Рисунок 3 – Электрическая схема управления демонстрационного стенда с микроконтроллерным блоком Arduino Nano V3.0 CH340 на базе чипа ATmega328P #1, содержащая модель 1МКС-3, накопитель электроэнергии и биогазовую установку

Для написания скетчей (построения алгоритмов) в микроконтроллерных блоках Arduino использована программа ArduinoIDE (Integrated Development Environment) – интегрированная среда разработки от создателей платформы. Программа позволяет писать скетчи на языке Ардуино, которые затем можно проверить непосредственно в самой программе и впоследствии перевести их в язык C++, а затем загрузить в плату Arduino. При этом у пользователя есть возможность в самой программе пояснять для себя полностью весь скетч или некоторые его команды, чтобы предотвратить дальнейшие ошибки. Для этого в конце строки ставится «//», а затем следует, соответственно, объяснение. В данной статье при описании алгоритмов мы будем пояснять отдельные его строки с использованием данной функции. К тому же в программе присутствует цветовая палитра, выделяющая переменные, циклы, библиотеки и облегчающая их визуальное восприятие. Алгоритм работы МБУ, представленный ниже, приведен в соответствии с цветовой палитрой интегрированной среды разработки от создателей платформы.

Отличительной особенностью программы является синтаксис, который требует использования в программе определенных наименований. Все датчики напряжения на выводах коммутационных систем и управление контактами реле требуется обозначить переменными, которые будут впоследствии передаваться как массив данных со всех ведомых плат на главный ведущий микроконтроллерный блок проекта - Arduino Uno.

Изначально для всех ведомых семи МБУ проекта мы вводим библиотеку Wire, позволяющую плате устанавливать связь с другими устройствами через интерфейс I2C.

#include

Далее мы вводим функцию String с названием Comand , которая необходима для обработки массива данных, представленного в виде информации о положении контактов коммутационных устройств, которое необходимо задать в текущей ситуации (происходит получение команды от ведущего МБУ, при этом возвращаемого значения нет). Функция String позволяет работать с переменными типа char , которые использованы в программе. Данная функция является своего рода конструктором, формирующим класс полученных данных.

String Comand = "";

Далее мы вводим переменную символьного типа char с наименованием Answer , которая будет передавать информацию на главный контроллер Arduino Uno о состоянии контактов и наличии напряжения на выводах у коммутационных систем. Происходит процесс запроса 14 байт информации: 8 контактов-реле размером в 1 байт, 4 точки контроля напряжения на выводах, 1 байт несет в себе символ разделения между наличием напряжения и положением контактов для лучшего визуального восприятия на мониторе и 1 байт отводится размеру массива, который выполняет функцию завершения запроса. Запрос 14 байт происходит со всех микроконтроллеров. И так как количество контактов и точек мониторинга напряжения у других коммутационных систем меньше, чем у 1МКССМ-8-4В, то впоследствии в цикле программы недостающие ответы мы сами задаем как отсутствующие: '0'.

char Answer[14];

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

В первую очередь мы придаем постоянные значения от 2 до 9 контактам коммутационных устройств: цифровые контакты D2-D9 платы Arduino. Для этого мы используем переменную const byte , которая позволяет передавать уменьшенный объем информации (8 бит). Значение переменной хранит беззнаковое число от 0 до 255 и не меняется в цикле программы. Ниже приведены некоторые примеры обозначения переменных данного типа с разных МБУ.

const byte SPAVR_Rele_1 = 2; // МБУ №7 для ТП и СПАВР.

const byte AVR_P_Rele_2 = 3; // МБУ №6 для АВР-П.

const byte Two_MKC_4_Rele_3 = 4; // МБУ №5 для 2МКС-4.

const byte VAS_Rele = 5; // МБУ №4 для 2МКС-3 и ВЭС.

const byte SAS_Rele = 6; //МБУ №2 для 1МКС-3 и СЭС.

const byte MKCCM_8_4B_Rele_6 = 7; //МБУ №3 для 1МКССМ-8-4В.

const byte MKCCM_8_4B_Rele_7 = 8; // МБУ №3 для 1МКССМ-8-4В.

const byte MKCCM_8_4B_Rele_8 = 9; // МБУ №3 для 1МКССМ-8-4В.

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

char Rele_1 = 0;

char Rele_2 = 0;

char Rele_3 = 0;

char Rele_4 = 0;

char Rele_5 = 0;

char Rele_6 = 0;

char Rele_7 = 0;

char Rele_8 = 0;

Следующим этапом является придание постоянных значений A0-A3 (аналоговые пины платы Arduino) датчикам напряжения, установленным на выводах коммутационных устройств. Для этого мы используем переменную const byte.

const byte One_MKC_3_input_B1 = A0; // МБУ №1 - Придание постоянного значения датчику напряжения, установленному на выводе B1 коммутационного устройства 1МКС-3.

const byte One_MKC_4_input_B2 = A1; // МБУ №2 - Придание постоянного значения датчику напряжения, установленному на выводе B2 коммутационного устройства 1МКС-4.

const byte Two_MKC_3_input_B3 = A2; // МБУ №4 - Придание постоянного значения датчику напряжения, установленному на выводе B3 коммутационного устройства 2МКС-3.

const byte MKCCM_8_4B_input_B4 = A3; // МБУ - №3 - Придание постоянного значения датчику напряжения, установленному на выводе B4 коммутационного устройства МКССМ-8-4В.

Заключительным этапом в обозначении переменных является использование 2х байтового целочисленного типа данных int для обозначения переменных, считывающих само напряжение на выводах коммутационных систем. Такая размерность типа данных дает возможность хранить значения в диапазоне от -32768 до 32767. Это необходимо в связи с тем, что сам микроконтроллер представляет напряжение с помощью интерпретационной шкалы от 0 до 1024. Мы изначально задаем, что напряжения на выводах коммутационных устройств нет. Эти переменные обозначены аналогично для всех ведомых МБУ проекта:

int U_B1 = 0;

int U_B2 = 0;

int U_B3 = 0;

int U_B4 = 0;

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

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

Wire.begin(1/2/../7); // Библиотека позволяет производить связь устройств через интерфейс I2C. Использованы: A4- линия данных, А5 - линия тактового сигнала. Адреса устройств: 1МКС-3 - №1; 1MKC-4 - №2; 1МКССМ-8-4В - №3; 2MKC-3 - №4; 2MKC-4 - №5; АВР-П - №6; СПАВР - №7.

Далее на ведомой плате Arduino Nano назначаем функции, которые будут автоматически вызываться при получении запроса от ведущей платы Arduino Uno. Они начинают работать при поступлении данных от ведущего МБУ: переключение контактов, запрос наличия напряжения. Данные функции не возвращают никаких значений и принимают лишь один параметр, описывающий количество поступивших байт с ведущего микроконтроллера.

Wire.onRequest(requestEvent);

Wire.onReceive(receiveEvent);

Следующим этапом в данном цикле является использование функции pinMode в целях обозначения пинов платы, к которым подключены соответствующие контакты-реле, как цифровых, для их использования в качестве выводов для управления контактами.

pinMode(One_MKC_3_Rele_1, OUTPUT); //МБУ №1.

pinMode(One_MKC_4_Rele_2, OUTPUT); //МБУ №2.

pinMode(MKCCM_8_4B_Rele_3, OUTPUT); //МБУ №3.

pinMode(VAS_Rele, OUTPUT); //МБУ №4.

pinMode(Two_MKC_4_Rele_4, OUTPUT); //МБУ №5.

pinMode(AVR_P_Rele_1, OUTPUT); //МБУ №6.

pinMode(TP_Rele, OUTPUT); //МБУ №7.

Затем с помощью функции digitalWrite мы изначально устанавливаем (снимаем) напряжение на всех контактах коммутационных устройств и выключателях источников генерации низким – Low. Таким образом, все они разомкнуты.

digitalWrite(SPAVR_Rele_1, LOW); //МБУ №7.

digitalWrite(AVR_P_Rele_3, LOW); //МБУ №6.

digitalWrite(Two_MKC_4_Rele_1, LOW); //МБУ №5.

digitalWrite(Two_MKC_3_Rele_2, LOW); //МБУ №4.

digitalWrite(MKCCM_8_4B_Rele_7, LOW); //МБУ №3.

digitalWrite(SAS_Rele, LOW); //МБУ №2.

digitalWrite(N_Rele, LOW); //МБУ №1.

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

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

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

byte i = 0; // вводим постоянную переменную изначально равную 0 для многократного измерения напряжения на выводах.

Затем мы вводим переменные целового типа с наименованием A-D , необходимые для считывания напряжениях на выводах B1-B4 коммутационных систем.

int A = 0;

int B = 0;

int C = 0;

int D = 0;

Напряжение на выводах у коммутационных систем мы будем считывать неоднократно. Это необходимо для того, чтобы добиться максимальной точности показаний и устранить ошибки работы электрической схемы при отправлении запроса от ведущего МБУ ведомым. Для мониторинга напряжения мы используем функцию analogRead, которая с помощью интерпретационной шкалы от 0 до 1024 считывает 29 раз значения напряжения на выводах B1-B4 коммутационных устройств, складывая все полученные значения в переменные A-D с учетом сложения изначально заданного отсутствующим (0) напряжения.

while( i < 30){ // начало цикла while, позволяющего выполнить одни и те же операции определенное количество раз - 29 раз измеряем наличие напряжения на выводах .

delay (10); // вводим задержку перед считыванием напряжения с вывода B1.

A = A + analogRead(SPAVR_input_B1); // МБУ №7.

delay (10); // вводим задержку перед считыванием напряжения с вывода B2.

B = B + analogRead(AVR_P_input_B2); // МБУ №6.

delay (10); // вводим задержку перед считыванием напряжения с вывода B3.

C = C + analogRead(One_MKC_3_input_B3); МБУ №1.

delay (10); // вводим задержку перед считыванием напряжения с вывода B4.

D = D + analogRead(One_MKC_4_input_B4); // МБУ №2.

i++; // добавляем текущее значение напряжения, доводя число измерений до 30.

if ( i == 30) { // начало цикла - получив в общем 30 измерений находим их среднее арифметическое значение.

A = A / 30; // находим среднее арифметическое значение напряжения на выводе B1.

B = B / 30; // находим среднее арифметическое значение напряжения на выводе B2.

C = C / 30; // находим среднее арифметическое значение напряжения на выводе B3.

D = D / 30; // находим среднее арифметическое значение напряжения на выводе B4.

} // конец цикла нахождения средних арифметических значений.

} // конец цикла while.

U_B1 = A; // присваиваем значению напряжения на выводе B1 среднее арифметическое 30 измерений.

U_B2 = B; // присваиваем значению напряжения на выводе B2 среднее арифметическое 30 измерений.

U_B3 = C; // присваиваем значению напряжения на выводе B3 среднее арифметическое 30 измерений.

U_B4 = D; // присваиваем значению напряжения на выводе B4 среднее арифметическое 30 измерений.

После завершения мониторинга напряжения выводим конкретные значения на монитор ПК.

Serial.println(A); // выводим значение напряжения на выводе B1 в COM-порт.

Serial.println(B); // выводим значение напряжения на выводе B2 в COM-порт.

Serial.println(C); // выводим значение напряжения на выводе B3 в COM-порт.

Serial.println(D); // выводим значение напряжения на выводе B4 в COM-порт.

В основном цикле программы мы также формируем переменную Answer , передающую информацию на главный контроллер о наличии напряжения и положении контактов. Она состоит из 14 байт, нумерация которых в программе происходит с 0 по 13, причем каждый байт несет в себе информацию о определенном датчике напряжения или контакте. При недостатке датчиков контроля напряжения и контактов у других коммутационных аппаратов до количества датчиков и контактов 1МКССМ-8-4В, под которую и была сделана универсальная программа, отсутствующие элементы задаются как '0' и не несут никакой информации. Например, переменная Answer , формирующая информацию о положении контактов, для МБУ №3 выглядит следующим образом:

Answer[0] = Rele_1; //получение информации о состоянии контакта 1 коммутационного устройства 1МКССМ-8-4В. Answer[1] = Rele_2; //получение информации о состоянии контакта 2 коммутационного устройства 1МКССМ-8-4В. Answer[2] = Rele_3; //получение информации о состоянии контакта 3 коммутационного устройства 1МКССМ-8-4В. Answer[3] = Rele_4; //получение информации о состоянии контакта 4 коммутационного устройства 1МКССМ-8-4В. Answer[4] = Rele_5; //получение информации о состоянии контакта 5 коммутационного устройства 1МКССМ-8-4В. Answer[5] = Rele_6; //получение информации о состоянии контакта 6 коммутационного устройства 1МКССМ-8-4В. Answer[6] = Rele_7; //получение информации о состоянии контакта 7 коммутационного устройства 1МКССМ-8-4В. Answer[7] = Rele_8; //получение информации о состоянии контакта 8 коммутационного устройства 1МКССМ-8-4В. Answer[8] = '_'; //введение разделения между положениями контактов и наличием напряжения.

if (U_B1 > 615) Answer[9] = '1'; // 5В представлено по шкале от 0 до 1024, если получаемое значение больше 615 (примерно 3В), то мы считаем, что напряжение на выводе B1 коммутационного устройства МКССМ-8-4В есть.

if (U_B1 < 410) Answer[9] = '0'; // 5В представлено по шкале от 0 до 1024, если получаемое значение меньше 410 (примерно 2В), то мы считаем, что напряжения на выводе B1 коммутационного устройства МКССМ-8-4В нет.

if (U_B2 > 615) Answer[10] = '1'; // 5В представлено по шкале от 0 до 1024, если получаемое значение больше 615 (примерно 3В), то мы считаем, что напряжение на выводе B2 коммутационного устройства МКССМ-8-4В есть.

if (U_B2 < 410) Answer[10] = '0'; // 5В представлено по шкале от 0 до 1024, если получаемое значение меньше 410 (примерно 2В), то мы считаем, что напряжения на выводе B2 коммутационного устройства МКССМ-8-4В нет.

if (U_B3 > 615) Answer[11] = '1'; // 5В представлено по шкале от 0 до 1024, если получаемое значение больше 615 (примерно 3В), то мы считаем, что напряжение на выводе B3 коммутационного устройства МКССМ-8-4В есть.

if (U_B3 < 410) Answer[11] = '0'; // 5В представлено по шкале от 0 до 1024, если получаемое значение меньше 410 (примерно 2В), то мы считаем, что напряжения на выводе B3 коммутационного устройства МКССМ-8-4В нет.

if (U_B4 > 615) Answer[12] = '1'; // 5В представлено по шкале от 0 до 1024, если получаемое значение больше 615 (примерно 3В), то мы считаем, что напряжение на выводе B4 коммутационного устройства МКССМ-8-4В есть.

if (U_B4 < 410) Answer[12] = '0'; // 5В представлено по шкале от 0 до 1024, если получаемое значение меньше 410 (примерно 2В), то мы считаем, что напряжения на выводе B4 коммутационного устройства МКССМ-8-4В нет.

Serial.println(Answer); // функция serial.println позволяет вывести на экран массив информации о положении контактов и наличии напряжения на выводах коммутационного устройства МККСМ-8-4В. ln - позволяет положение контактов и наличие напряжения отображать с новой строки.

В основном цикле программы мы также осуществляем переключения контактов в зависимости от команд, поступающих с ведущего МБУ. Мы используем логический оператор if, который проверяет определенное условие; и в зависимости от верности или ложности условия выполняется блок кода, заключенный в следующие скобки. Ведущий МБУ посылает команды включения '1' и отключения '0' контактов и с помощью функции digitalWrite мы подаем/снимаем напряжение на базах транзисторов, тем самым размыкая/замыкая контакты коммутационных устройств.

if (Rele_1 == '1') digitalWrite(SPAVR_Rele_1, HIGH); // МБУ №7.

if (Rele_1 == '0') digitalWrite(SPAVR_Rele_1, LOW); // МБУ №7.

if (Rele_2 == '1') digitalWrite(Two_MKC_3_Rele_2, HIGH); // МБУ №4.

if (Rele_2 == '0') digitalWrite(Two_MKC_3_Rele_2, LOW); // МБУ №4.

if (bgyRele == '1') digitalWrite(BGY_Rele, HIGH); // МБУ №1.

if (bgyRele == '0') digitalWrite(BGY_Rele, LOW); // МБУ №1.

} //Конец основного цикла программы.

void requestEvent() { //данная функция обработчик информации выполняется при получении запроса от ведущего устройства - начало цикла.

Wire.write(Answer); // ставит данные о положении контактов реле и наличии напряжения в очередь для передачи.

} //конец цикла.

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

void receiveEvent() { // начало цикла.

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

while (Wire.available()) {  // возвращает количество байт на ведущий микроконтроллер о положении контактов. На ведущем устройстве данная функция вызывается после функции requestFrom, а на ведомом внутри функции обработчика onReceive.

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

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

} //конец цикла.

Далее мы с помощью функции charAt, позволяющей возвращать указанный символ из массива данных String, производим переключение всех контактов в соответствии с текущей ситуацией. Этот цикл для МБУ №1 выглядит следующим образом:

}//конец цикла.

Вывод.

Для ведомых микроконтроллерных блоков управления написан универсальный скетч, отличающийся количеством передаваемой информации по причине разного числа управляемых контактов МКС и датчиков напряжения на выводах. Скетч позволяет ведомым МБУ осуществлять мониторинг, передавать сведения главному МБУ и выполнять переключения. В совокупности с главным МБУ проекта получилась совокупность микроконтроллеров, постоянно обменивающаяся информацией о состоянии сети, контролирующая любое отклонение от нормального режима работы и изменяющая конфигурацию в случае необходимости. В проекте учтено управление схемой диспетчером, который также производит контроль за системой и может осуществлять переключения, используя соответствующие команды. Таким образом, получился проект сети с внедрением нового секционирующего оборудования, производящего автоматизированное управление.

Список литературы Алгоритмы ведомых микроконтроллерных блоков управления Arduino NANO V3.0 CH340 демонстрационного стенда "Интеллектуальные сети на основе МКС"

  • Виноградов А.В., Лансберг А.А. Интеллектуальные электрические сети на основе МКС: материалы Международной студенческой научной конференции «Горинские чтения. Наука молодых - инновационному развитию АПК» (28-29 марта 2019 года): в 4 т. Том 4. п. Майский.: Издательство ФГБОУ ВО Белгородский ГАУ, 2019. 245 С.
  • Лансберг А.А. Повышение надежности электроснабжения поселка Корсунь посредством применения мультиконтактных коммутационных систем // Научный журнал молодых ученых. № 1(14). март 2019. С.51-60.
  • Виноградов А.В. Новые мультиконтактные коммутационные системы и построение на их базе структуры интеллектуальных распределительных электрических сетей // Агротехника и энергообеспечение. №3 (20). 2018. С. 7-20.
  • Виноградов А.В., Большев В.Е., Виноградова А.В. Системы интеллектуализации распределительных электрических сетей/ А. В. Виноградов, В. Е. Большев, А. В. Виноградова // В сборнике: Информационные технологии, системы и приборы в АПК: материалы 7-й Международной научно-практической конференции "Агроинфо-2018". Сибирский федеральный научный центр агробиотехнологий Российской академии наук, Сибирский физико-технический институт аграрных проблем и др. 2018. С. 443-447.
  • Виноградов А.В., Виноградова А.В., Марин А.А. Применение мультиконтактных коммутационных систем с мостовой схемой и четырьмя выводами в схемах электроснабжения потребителей и кодирование возникающих при этом ситуаций // Вестник НГИЭИ. 2019. № 3 (94). С. 41-50.
Еще
Статья научная