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

Из-за того, что программы обучения (а, следовательно, и компетенции) физиков и программистов сильно отличаются, при их совместной работе над экспериментами нередко возникают трудности. Мы в лаборатории методов ядерно-физических экспериментов ставим своей целью подготовку специалистов, которые могут и разобраться в физике процессов, и написать необходимое программное обеспечение. Для этого в прошлом году мы запустили магистерскую программу, а в этом еще один проект, направленный на знакомство физиков с программированием. О нем я и расскажу в этой статье.

Меня зовут Татьяна Мухина. Я учусь в магистратуре МФТИ и по совместительству являюсь одним из авторов и преподавателем курса «Введение в системы сбора данных».

На первых курсах в МФТИ даже на физических факультетах, конечно, преподается программирование. В зависимости от направления студенты изучают Python, С или C++. Обычно эти курсы направлены на знакомство с основами языка или численными методами, а вот реализацию систем сбора данных студентам не рассказывают. 

Тем не менее даже на первых курсах студенты могут сталкиваться с задачами, в которых им пригодился бы этот навык. Например, на экзаменах по общей физике учащиеся не только должны ответить на выпавший им билет, но и рассказать заранее подготовленный вопрос по выбору. Это может быть как теоретический материал, выходящий за рамки изучаемого курса, так и результаты исследования, которое они провели с использованием собственной экспериментальной установки – а для этого могут потребоваться автоматизированные системы сбора данных. 

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

Курс реализуется как факультативный: на него могут записаться все желающие по согласованию с преподавателем, но мы рекомендуем его студентам 2-3 курса физических факультетов. Пробный запуск курса проводился в формате интенсива и был рассчитан на 4 занятия по 4 академических часа. В дальнейшем курс будет расширен до полноценной семестровой дисциплины (15 пар).

Цели и задачи курса

У курса две цели: 

  • Знакомство студентов с особенностями современных систем сбора данных.

  • Получение ими практических навыков создания таких систем на примере программно-аппаратного комплекса LabVIEW на базе инженерного лабораторного комплекса NI Educational Laboratory Virtual Instrumentation Suite (NI ELVIS) III.

Задачи курса:

  • Изучение теории передачи и записи аналоговых и цифровых сигналов, протоколов  различного уровня.

  • Изучение основных инструментов, которые используются в системах сбора данных.

  • Изучение системы LabVIEW для сбора данных и управление небольшими экспериментами.

Об ELVIS III

В качестве устройства сбора данных мы использовали инженерный лабораторный комплекс NI Educational Laboratory Virtual Instrumentation Suite (NI ELVIS) III. Он сочетает в себе необходимое контрольно-измерительное оборудование (АЦП, ЦАП, осциллограф и генератор сигнала) и встроенную макетную плату для сборки электрических схем.

NI ELVIS III
NI ELVIS III

К недостаткам можно отнести необходимость скачивания (и покупки) дополнительного программного пакета LabVIEW ELVIS III, а также некоторые проблемы взаимодействия с комплексом, которые опишем дальше.

Контрольно-измерительное оборудование NI ELVIS III
Контрольно-измерительное оборудование NI ELVIS III

Программа курса

При создании программы курса и методических материалов мы руководствовались следующими идеями:

  1. нужно предусматривать больше задач для самостоятельной работы студентов, при необходимости после разбирать их в группе;

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

  3. необходимо включать больше прикладных задач.

Программа курса для пробного запуска выглядела следующим образом: 

  • Введение в графическую среду разработки LabVIEW.

  • Использование визуального языка LabVIEW для работы с инженерным лабораторным комплексом NI Educational Laboratory Virtual Instrumentation Suite (NI ELVIS) III.

  • Сборка и настройка схемы трехразрядного аналого-цифрового преобразователя.

  • Настройка цифрового двухканального осциллографа на базе NI ELVIS III.

Каждый пункт соответствовал одному занятию протяженностью 4 академических часа (2 пары).

Введение в графическую среду разработки LabVIEW

В этом разделе мы предлагали студентам за две пары познакомиться со средой разработки LabVIEW. Занятия начинались с обсуждений основных принципы работы в среде. Для знакомства с базовым синтаксисом языка мы давали студентам простые задачки, а чтобы решать их было интереснее, задачи постарались сделать более прикладными. Например, студентам было предложено поэтапно создать конвертер энергии из одних единиц измерения в другие: 

  1. Написать программу, которая переводит введенное в джоулях значение энергии в электронвольты и в килокалории.

  2. Сделать непрерывным выполнение программы из задачи 1 после однократного запуска. Добавить задержку в 100 мс.

  3. Реализовать конвертер введенного в джоулях значения энергии в электронвольты, если кнопка нажата, и в килокалории, если кнопка отпущена.

  4. Используя структуру Case и контроллер Enum, создать конвертер энергетических единиц измерения: в числовой контроллер вводится значение энергии и контроллером типа Enum выбирается единица измерения из предложенных, далее из аналогичного списка выбирается единица измерения, в которую необходимо перевести величину, после нажатия кнопки “Перевести” в индикаторе появляется необходимое значение энергии в требуемой единице измерения.

Конвертер энергии
Конвертер энергии

В еще одном блоке задач нужно было написать программу для вычисления оценки по матанализу исходя из баллов за работу в семестре и оценки за экзамен – в МФТИ это определяется по достаточно сложной системе. Заключительная задача была выбрана так, чтобы объединить в себе уже полученные знания. Студентам предлагалось смоделировать полет снаряда, который бросили под углом к горизонту, при выборе различного характера силы трения (сухое или вязкое).

Моделирование полета снаряда, брошенного под углом к горизонту
Моделирование полета снаряда, брошенного под углом к горизонту

Использование LabVIEW для работы с NI ELVIS III 

На этом занятии студенты должны были узнать возможности комплекса NI ELVIS III, а также научиться взаимодействовать с ним посредством LabVIEW. Взаимодействие с NI ELVIS III происходит по стандартной схеме: открытие канала, при необходимости конфигурация взаимодействия, само взаимодействие и закрытие канала.

Схема взаимодействия с NI ELVIS III (АЦП)
Схема взаимодействия с NI ELVIS III (АЦП)

Сборка и настройка схемы трехразрядного аналого-цифрового преобразователя 

Задачи этого блока курса – за две пары собрать схему трехразрядного АЦП, написать программу, которая анализирует приходящий сигнал и обрабатывает его, выводя двоичный код отклика и полученное значение напряжения. После этого студенты должны сравнить работу готового трехразрядного АЦП и встроенного АЦП NI ELVIS III.

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

  1. программа управляет аналоговым выходом, с которого подается напряжение на вход схемы АЦП;

  2. в цикле программа считывает значения напряжения с цифровых входов, к которым подключены 7 выходов АЦП;

  3. из полученных значений формируется двоичное трехразрядное представление входного напряжения;

  4. программа преобразовывает его в значение напряжения входного сигнала и в реальном времени выводит на график;

  5. для сравнения с работой встроенного в NI ELVIS III АЦП на тот же график программа выводит значение напряжения с аналогового входа NI ELVIS III, на который подается входной сигнал;

  6. программа завершает свою работу по кнопке «Stop».

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

Схема трехразрядного АЦП
Схема трехразрядного АЦП

Настройка цифрового двухканального осциллографа на базе NI ELVIS III

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

Лицевая панель программы для работы осциллографа
Лицевая панель программы для работы осциллографа

Выявленные недостатки и дальнейшие планы по доработке

Сначала мы протестировали программу на небольшой группе студентов. Первый запуск прошел успешно и показал, что у ребят есть необходимость в таком вводном курсе по системам сбора данных. Но не все было гладко: мы нашли несколько недочетов в текущей программе курса, о которых сейчас и расскажем.

Во-первых, чтобы работать с ELVIS III, необходимо устанавливать дополнительное ПО, доступное только для Windows. Так как студенты работают на собственных ноутбуках (часто на macOS или Linux), это добавляет проблем к установке программного пакета. Поэтому для небольших вводных задач мы решили выбрать другое, более простое устройство для сбора данных. 

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

Также мы заметили, что студентам было трудно писать алгоритм работы АЦП на первых этапах изучения ELVIS III – до этого они не сталкивались с устройствами сбора данных. Поэтому мы решили добавить занятие с совсем простыми задачами. Например, измерить напряжение с помощью АЦП, затем написать программу и собрать схему для измерения сопротивления элемента цепи, а позже использовать эту схему для определения температуры воздуха в комнате с помощью терморезистора.

И последняя проблема: изначально мы планировали проводить занятия один раз в неделю по 4 академических (или 3 астрономических) часа. Такой формат оказался очень интенсивным: студентам было тяжело усваивать и сразу применять полученную информацию.

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

Комментарии (17)


  1. mastergril
    18.01.2022 09:31
    +1

    Круто вы сделали, аж глаз радуется посмотреть что есть такие как вы!

    Жаль, что в некоторых универах местные князьки считают, что покупайте отечественное, какой-нибудь стенд от одного могилевского НПЦ и никаких вам national instruments, только глючный стенд с кучей проблем, только хадкор...


  1. Arastas
    18.01.2022 10:29
    +2

    Не очень понятно, почему разработкой курса и преподаванием занимается студентка магистратуры. ;(


    1. darksnake
      18.01.2022 12:44

      Потому что очень хорошая студентка. Но вообще, это коллективная работа, Татьяна делала существенную часть, но не всю.

      В частности, написание текста - это очень большая работа, которую далеко не все любят и умеют.


  1. hbrmrk
    18.01.2022 11:20
    +1

    Кто-то может прокомментировать ситуацию со статусом легальности и перспектив использования LabView в связи с новостью о попадании в физтеха в санкционный список?


    1. darksnake
      18.01.2022 12:45

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


  1. qbertych
    18.01.2022 12:36
    -1

    один раз в неделю по 4 академических (или 3 астрономических) часа. Такой формат оказался очень интенсивным: студентам было тяжело усваивать и сразу применять полученную информацию.

    Да вы прикалываетесь;) На Физтехе есть ровно один способ сделать так, чтобы студенты ничего не поняли за три часа: прийти неподготовленным с сырым курсом.


    Так как студенты работают на собственных ноутбуках

    Штоа? Признавайтесь, как вы сумали довести мою альма-матер до того, чтобы у нее не осталось денег на самые дешевые стационарники? Или просто решили переложить работу с больной головы на здоровую?


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

    Сюрпрайз, сюрпрайз. Лабвью — это не только красивые кнопочки и лампочки, но и паттерны программирования, без которых про нормальную работу можно забыть. Даже на самом базовом курсе студенты должны выучить как минимум state machine.


    1. darksnake
      18.01.2022 12:52
      +2

      Да вы прикалываетесь;) На Физтехе есть ровно один способ сделать так, чтобы студенты ничего не поняли за три часа: прийти неподготовленным с сырым курсом.

      Простите, вы много курсов делали? На самом деле есть только один формат, который дейсвтительно идет три часа - это лабораторные работы. И они не сожержат лекционного материала. Комбинацию лекция + практика по не профильному предмету студенты действительно не выдерживают.

      Штоа? Признавайтесь, как вы сумали довести мою альма-матер до того, чтобы у нее не осталось денег на самые дешевые стационарники? Или просто решили переложить работу с больной головы на здоровую?

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

      Сюрпрайз, сюрпрайз. Лабвью — это не только красивые кнопочки и лампочки, но и паттерны программирования, без которых про нормальную работу можно забыть. Даже на самом базовом курсе студенты должны выучить как минимум state machine.

      Ваша ссылка, простите, ровно никакого отношени к лабвью не имеет. Эти паттерны сделаны для С++ и практически никак не работают в визуальном языке LabView (многие из них вообще нигде кроме С++ и не работают). Стейт машина тоже плохо ложится на концепцию LabView, там все сделано на потоках данных, а не на состоянии. Есть альтернативы, разумеется, где используется именно понятие состояния (посмотрите, что делают в https://research.jetbrains.org/groups/cyber-physical-systems/), но там совсем другой принцип и другие цели.


      1. qbertych
        18.01.2022 13:22

        Вы то ли шутите по всем пунктам, то ли просто не понимаете, о чем говорите.


        Простите, вы много курсов делали?

        Как ни странно, да. Включая лабораторные для Физтеха.


        На самом деле есть только один формат, который дейсвтительно идет три часа — это лабораторные работы. И они не сожержат лекционного материала. Комбинацию лекция + практика по не профильному предмету студенты действительно не выдерживают.

        А вы точно имеете отношение к Физтеху?
        Три часа теории+практики — это, например, лабы по радиоэлектронике или по спецкурсам. Студенты их не просто выдерживают, они от этого в восторге, если курс поставлен хорошо. Нас в 8 вечера чуть ли не силой приходилось выгонять ;).


        студенты хотят и дома поработать. А лабораторный стационарник в общежитие не утащишь.

        Плату АЦП в общагу тоже не утащишь, а без нее дома делать нечего. Поэтому это и называется лабораторной работой, да.
        Вы пробегитесь что ли по нормальным учебным лабораториям и убедитесь, что никто кроме вас не заставляет студентов устанавливать проприетарный софт на личные ноуты.


        Ваша ссылка, простите, ровно никакого отношени к лабвью не имеет. Эти паттерны сделаны для С++ и практически никак не работают в визуальном языке LabView

        Нет, если хотите, то вы можете спорить о паттернах программирования в лабвью и с NI (разработчиком лабвью), и с коммьюнити лабвью, и со мной, работавшим индустриальным лабвью-прогером. Это не докажет ровным счетом ничего кроме вашей некомпетентности в этом вопросе.


        К сожалению, в проигрыше останутся исключительно ваши студенты, которые через пару лет будут писать спагетти-код на лабвью для диплома (имхо, это страшнее спагетти-кода на C), а потом искренне удивляться, узнав, что все можно было делать по-человечески с самого начала.


        1. darksnake
          18.01.2022 13:58

          А вы точно имеете отношение к Физтеху?

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

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

          А где было что-то написано о том, что кто-то кого-то заставляет что-то делать? Мы не можем студентам говорить "устанавливайте паленую версию" - это точно. А в остальном полная свобода.

          Нет, если хотите, то вы можете спорить о паттернах программирования в лабвью 

          Могу, опыта в программировании достаточно, правда не на LabView. Я тут прошу прощения, я не прошел по ссылке, я думал там ссылка на обычную википедию. А там ссылка на лабвьюшную страницу, где очень специфичные паттерны, которые не имеют ничего общего с тем, что обычно называют шаблонами проектирвоания в программировании (вот это https://en.wikipedia.org/wiki/Software_design_pattern). С этой оговоркой я соглашусь с вами.

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

          Ну а по программированию у нас целая магистратура если что: http://npm.mipt.ru/ru/magprog/. Там в том числе мы занимаемся системами сбора данных. Правда не на LabView, руководителей пока нет. Мы кстати активно приглашаем научных руководителей, так что кому интересно также свяжитесь со мной в телеграм.


          1. qbertych
            18.01.2022 14:35
            +1

            Понятно. Прошу прощения, я не посмотрел в ваш профиль.


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


            Лабвью он очень специфичен, да. Собственно, в этом и проблема: если на Си или Питоне можно написать средних размеров проект в императивном стиле (и даже худо-бедно его расширять), то в лабвью это не прокатывает, все сразу скатывается в костыли и спагетти-код, который потом только выбрасывать.


            Поэтому на мой взгляд уже на вводном курсе обязательно нужны основные паттерны. Тогда студенты усвоят, что в мире не только есть прекрасная связка "LabVIEW + железо от NI", но и что ее можно адекватно и масштабируемо запрогать.


            1. darksnake
              18.01.2022 14:58
              +1

              Представьте себе. Студентов вообще очень сложно затянуть на не обязательный курс (даже анализ данных, который читаю уже несколько лет, ходит много, сдает мало). Мы практиковались на "самых мотивированных" физиках. И то было всего несколько человек. Разумеется, дальше будем делать больше рекламы и людей будет несколько больше.


  1. semennikov
    18.01.2022 19:06

    А мы делаем нечто подобное в школе в 10 классе, правда не в LabVIEW а тупо Си + АЦП на Ардуино. Посмотрим, может Вы правы, и надо сразу на LabVIEW


    1. darksnake
      18.01.2022 20:42
      +1

      С + Ардуино это очень большое отличие от LabView. Лабвью создана как раз для не-программистов или как минимум не-традиционных-прогарммистов. Если вы посадите туда классического алгоритмирческого программиста типа меня, то получится так себе. Обратно тоже верно.


      1. semennikov
        19.01.2022 12:08

        Так в этом и интерес, чтобы ученики понимали что есть разные подходы к взаимодействию с окружающей средой. Пусть попробуют и то и то. Они же еще очень пластичные и это серьезно расширит их кругозор


        1. darksnake
          19.01.2022 13:16

          Если интересно, то прямая работа с железом была у нас на курсе "Продвинутое программирование на языке Python" Михаила Зеленого (там она прямо на зачет была с реальным железом). Возможно что-то будет на курсе "Введение в научное программирование на Kotlin" этой весной. Но в обоих случаях идет речь о программистах. А LabView - это система, созданная для людей, которые не хотят заморачиваться с языками программирования.


  1. Antonprm
    19.01.2022 11:11

    Задумка огонь! практических задач студентам нужно как можно больше, им в дальнейшем будет проще.

    А почему именно LabView? он платный, громоздкий и самое важное (на мой взгляд) в дальнейшем не везде он есть, за рамками университета. и стоит не мало.

    В свое время задача сбора данных с измерительного оборудования (лабораторные и производственные задачи) была решена использованием Python, освоили практически с нуля за пару месяцев. Подключение к оборудованию через pyVISA (LAN, GP-IB), взаимодействие с программой через консоль на первых этапах, в дальнейшем начали собирать GUI с помощью PyQt5. С обработкой данных вообще проблем нет.

    Плюсы в том что Python бесплатный и кросплатформенный, легок в освоении, да и применим к огромному количеству задач. Ну и сопуствующий опыт программирования на популярном языке.


    1. darksnake
      19.01.2022 13:18

      Я выше ответил на аналогичный вопрос. Я сам занимаюсь в том числе разработкой систем сбора данных (см. тут: https://github.com/mipt-npm/controls.kt) и совершенно не фанат LabView, потому что он слишком ограничен и громоздок. Но при этом совершенно очевидно, что если речь идет не о программистах - это первый выбор.