В МФТИ есть как факультеты, которые готовят сильных программистов, так и факультеты, выпускающие крутых специалистов в области физики, биологии и химии. Однако в сфере физических исследований также не обойтись без навыков программирования. В частности, все масштабные физические эксперименты автоматизированы.
Из-за того, что программы обучения (а, следовательно, и компетенции) физиков и программистов сильно отличаются, при их совместной работе над экспериментами нередко возникают трудности. Мы в лаборатории методов ядерно-физических экспериментов ставим своей целью подготовку специалистов, которые могут и разобраться в физике процессов, и написать необходимое программное обеспечение. Для этого в прошлом году мы запустили магистерскую программу, а в этом еще один проект, направленный на знакомство физиков с программированием. О нем я и расскажу в этой статье.
Меня зовут Татьяна Мухина. Я учусь в магистратуре МФТИ и по совместительству являюсь одним из авторов и преподавателем курса «Введение в системы сбора данных».
На первых курсах в МФТИ даже на физических факультетах, конечно, преподается программирование. В зависимости от направления студенты изучают 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. Он сочетает в себе необходимое контрольно-измерительное оборудование (АЦП, ЦАП, осциллограф и генератор сигнала) и встроенную макетную плату для сборки электрических схем.
К недостаткам можно отнести необходимость скачивания (и покупки) дополнительного программного пакета LabVIEW ELVIS III, а также некоторые проблемы взаимодействия с комплексом, которые опишем дальше.
Программа курса
При создании программы курса и методических материалов мы руководствовались следующими идеями:
нужно предусматривать больше задач для самостоятельной работы студентов, при необходимости после разбирать их в группе;
в сложных задачах можно давать последовательный алгоритм работы программы, а не готовую инструкцию по ее написанию;
необходимо включать больше прикладных задач.
Программа курса для пробного запуска выглядела следующим образом:
Введение в графическую среду разработки LabVIEW.
Использование визуального языка LabVIEW для работы с инженерным лабораторным комплексом NI Educational Laboratory Virtual Instrumentation Suite (NI ELVIS) III.
Сборка и настройка схемы трехразрядного аналого-цифрового преобразователя.
Настройка цифрового двухканального осциллографа на базе NI ELVIS III.
Каждый пункт соответствовал одному занятию протяженностью 4 академических часа (2 пары).
Введение в графическую среду разработки LabVIEW
В этом разделе мы предлагали студентам за две пары познакомиться со средой разработки LabVIEW. Занятия начинались с обсуждений основных принципы работы в среде. Для знакомства с базовым синтаксисом языка мы давали студентам простые задачки, а чтобы решать их было интереснее, задачи постарались сделать более прикладными. Например, студентам было предложено поэтапно создать конвертер энергии из одних единиц измерения в другие:
Написать программу, которая переводит введенное в джоулях значение энергии в электронвольты и в килокалории.
Сделать непрерывным выполнение программы из задачи 1 после однократного запуска. Добавить задержку в 100 мс.
Реализовать конвертер введенного в джоулях значения энергии в электронвольты, если кнопка нажата, и в килокалории, если кнопка отпущена.
Используя структуру Case и контроллер Enum, создать конвертер энергетических единиц измерения: в числовой контроллер вводится значение энергии и контроллером типа Enum выбирается единица измерения из предложенных, далее из аналогичного списка выбирается единица измерения, в которую необходимо перевести величину, после нажатия кнопки “Перевести” в индикаторе появляется необходимое значение энергии в требуемой единице измерения.
В еще одном блоке задач нужно было написать программу для вычисления оценки по матанализу исходя из баллов за работу в семестре и оценки за экзамен – в МФТИ это определяется по достаточно сложной системе. Заключительная задача была выбрана так, чтобы объединить в себе уже полученные знания. Студентам предлагалось смоделировать полет снаряда, который бросили под углом к горизонту, при выборе различного характера силы трения (сухое или вязкое).
Использование LabVIEW для работы с NI ELVIS III
На этом занятии студенты должны были узнать возможности комплекса NI ELVIS III, а также научиться взаимодействовать с ним посредством LabVIEW. Взаимодействие с NI ELVIS III происходит по стандартной схеме: открытие канала, при необходимости конфигурация взаимодействия, само взаимодействие и закрытие канала.
Сборка и настройка схемы трехразрядного аналого-цифрового преобразователя
Задачи этого блока курса – за две пары собрать схему трехразрядного АЦП, написать программу, которая анализирует приходящий сигнал и обрабатывает его, выводя двоичный код отклика и полученное значение напряжения. После этого студенты должны сравнить работу готового трехразрядного АЦП и встроенного АЦП NI ELVIS III.
Чтобы справиться с этим заданием, студентам предложили такой алгоритм работы программы:
программа управляет аналоговым выходом, с которого подается напряжение на вход схемы АЦП;
в цикле программа считывает значения напряжения с цифровых входов, к которым подключены 7 выходов АЦП;
из полученных значений формируется двоичное трехразрядное представление входного напряжения;
программа преобразовывает его в значение напряжения входного сигнала и в реальном времени выводит на график;
для сравнения с работой встроенного в NI ELVIS III АЦП на тот же график программа выводит значение напряжения с аналогового входа NI ELVIS III, на который подается входной сигнал;
программа завершает свою работу по кнопке «Stop».
Мы сознательно дали студентам алгоритм работы программы, а не четкий порядок действий по ее созданию. Это позволяет оттачивать навык самостоятельного написание программ на первых этапах.
Настройка цифрового двухканального осциллографа на базе NI ELVIS III
В этом блоке в течении двух пар студенты должны настроить цифровой двухканальный осциллограф. Выполнение этого задания полезно для большей осознанности при дальнейшей работе с этим устройством, а также позволит при необходимости воссоздать процесс его работы. Так же, как и в задании по реализации АЦП, для написания программы мы дали студентам алгоритм ее работы и готовую лицевую панель. После настройки осциллографа студенты с его помощью должны были исследовать работу амплитудно-частотного фильтра.
Выявленные недостатки и дальнейшие планы по доработке
Сначала мы протестировали программу на небольшой группе студентов. Первый запуск прошел успешно и показал, что у ребят есть необходимость в таком вводном курсе по системам сбора данных. Но не все было гладко: мы нашли несколько недочетов в текущей программе курса, о которых сейчас и расскажем.
Во-первых, чтобы работать с ELVIS III, необходимо устанавливать дополнительное ПО, доступное только для Windows. Так как студенты работают на собственных ноутбуках (часто на macOS или Linux), это добавляет проблем к установке программного пакета. Поэтому для небольших вводных задач мы решили выбрать другое, более простое устройство для сбора данных.
Во-вторых, уже на первом занятии мы поняли, что выделили недостаточно часов для освоения LabVIEW. Это привело к тому, что при выполнении более сложных задач студенты все еще сталкивались с проблемами уровня простого синтаксиса. Чтобы исправить эту ситуацию, мы решили на следующих запусках курса в два раза увеличить количество часов, выделяемых на изучение LabVIEW.
Также мы заметили, что студентам было трудно писать алгоритм работы АЦП на первых этапах изучения ELVIS III – до этого они не сталкивались с устройствами сбора данных. Поэтому мы решили добавить занятие с совсем простыми задачами. Например, измерить напряжение с помощью АЦП, затем написать программу и собрать схему для измерения сопротивления элемента цепи, а позже использовать эту схему для определения температуры воздуха в комнате с помощью терморезистора.
И последняя проблема: изначально мы планировали проводить занятия один раз в неделю по 4 академических (или 3 астрономических) часа. Такой формат оказался очень интенсивным: студентам было тяжело усваивать и сразу применять полученную информацию.
В целом пробный запуск показал нам, что развитие курса и его масштабирование на большее число студентов имеет смысл. Сейчас мы находимся на этапе доработки методических материалов и планируем второй запуск уже в весеннем семестре. Будем рады, если наш опыт создания и анализа курса по системам сбора данных будет вам полезен!
Комментарии (17)
Arastas
18.01.2022 10:29+2Не очень понятно, почему разработкой курса и преподаванием занимается студентка магистратуры. ;(
darksnake
18.01.2022 12:44Потому что очень хорошая студентка. Но вообще, это коллективная работа, Татьяна делала существенную часть, но не всю.
В частности, написание текста - это очень большая работа, которую далеко не все любят и умеют.
hbrmrk
18.01.2022 11:20+1Кто-то может прокомментировать ситуацию со статусом легальности и перспектив использования LabView в связи с новостью о попадании в физтеха в санкционный список?
darksnake
18.01.2022 12:45Да, скорее всего больше ничего мы в ближайшее время купить не сможем. К счастью, лицензии уже закуплены и на уже купленное санкции не распространяются. В худшем случае будем сидеть на немного просроченной версии.
qbertych
18.01.2022 12:36-1один раз в неделю по 4 академических (или 3 астрономических) часа. Такой формат оказался очень интенсивным: студентам было тяжело усваивать и сразу применять полученную информацию.
Да вы прикалываетесь;) На Физтехе есть ровно один способ сделать так, чтобы студенты ничего не поняли за три часа: прийти неподготовленным с сырым курсом.
Так как студенты работают на собственных ноутбуках
Штоа? Признавайтесь, как вы сумали довести мою альма-матер до того, чтобы у нее не осталось денег на самые дешевые стационарники? Или просто решили переложить работу с больной головы на здоровую?
Во-вторых, уже на первом занятии мы поняли, что выделили недостаточно часов для освоения LabVIEW. Это привело к тому, что при выполнении более сложных задач студенты все еще сталкивались с проблемами уровня простого синтаксиса.
Сюрпрайз, сюрпрайз. Лабвью — это не только красивые кнопочки и лампочки, но и паттерны программирования, без которых про нормальную работу можно забыть. Даже на самом базовом курсе студенты должны выучить как минимум state machine.
darksnake
18.01.2022 12:52+2Да вы прикалываетесь;) На Физтехе есть ровно один способ сделать так, чтобы студенты ничего не поняли за три часа: прийти неподготовленным с сырым курсом.
Простите, вы много курсов делали? На самом деле есть только один формат, который дейсвтительно идет три часа - это лабораторные работы. И они не сожержат лекционного материала. Комбинацию лекция + практика по не профильному предмету студенты действительно не выдерживают.
Штоа? Признавайтесь, как вы сумали довести мою альма-матер до того, чтобы у нее не осталось денег на самые дешевые стационарники? Или просто решили переложить работу с больной головы на здоровую?
Ну не знаю, кто довел. Мы принимаем пожертвования если что. Но стационарные компьютеры есть в компьютерных классах. В данном случае дело не столько в том, что нет возможности поставить стационарник (он куда дешевле того же Элвиса), сколько в том, что студенты хотят и дома поработать. А лабораторный стационарник в общежитие не утащишь.
Сюрпрайз, сюрпрайз. Лабвью — это не только красивые кнопочки и лампочки, но и паттерны программирования, без которых про нормальную работу можно забыть. Даже на самом базовом курсе студенты должны выучить как минимум state machine.
Ваша ссылка, простите, ровно никакого отношени к лабвью не имеет. Эти паттерны сделаны для С++ и практически никак не работают в визуальном языке LabView (многие из них вообще нигде кроме С++ и не работают). Стейт машина тоже плохо ложится на концепцию LabView, там все сделано на потоках данных, а не на состоянии. Есть альтернативы, разумеется, где используется именно понятие состояния (посмотрите, что делают в https://research.jetbrains.org/groups/cyber-physical-systems/), но там совсем другой принцип и другие цели.
qbertych
18.01.2022 13:22Вы то ли шутите по всем пунктам, то ли просто не понимаете, о чем говорите.
Простите, вы много курсов делали?
Как ни странно, да. Включая лабораторные для Физтеха.
На самом деле есть только один формат, который дейсвтительно идет три часа — это лабораторные работы. И они не сожержат лекционного материала. Комбинацию лекция + практика по не профильному предмету студенты действительно не выдерживают.
А вы точно имеете отношение к Физтеху?
Три часа теории+практики — это, например, лабы по радиоэлектронике или по спецкурсам. Студенты их не просто выдерживают, они от этого в восторге, если курс поставлен хорошо. Нас в 8 вечера чуть ли не силой приходилось выгонять ;).студенты хотят и дома поработать. А лабораторный стационарник в общежитие не утащишь.
Плату АЦП в общагу тоже не утащишь, а без нее дома делать нечего. Поэтому это и называется лабораторной работой, да.
Вы пробегитесь что ли по нормальным учебным лабораториям и убедитесь, что никто кроме вас не заставляет студентов устанавливать проприетарный софт на личные ноуты.Ваша ссылка, простите, ровно никакого отношени к лабвью не имеет. Эти паттерны сделаны для С++ и практически никак не работают в визуальном языке LabView
Нет, если хотите, то вы можете спорить о паттернах программирования в лабвью и с NI (разработчиком лабвью), и с коммьюнити лабвью, и со мной, работавшим индустриальным лабвью-прогером. Это не докажет ровным счетом ничего кроме вашей некомпетентности в этом вопросе.
К сожалению, в проигрыше останутся исключительно ваши студенты, которые через пару лет будут писать спагетти-код на лабвью для диплома (имхо, это страшнее спагетти-кода на C), а потом искренне удивляться, узнав, что все можно было делать по-человечески с самого начала.
darksnake
18.01.2022 13:58А вы точно имеете отношение к Физтеху?
Преподаю с 2013 года. В том числе физ. лабы. Заместитель заведующего лаборатории. На радиоэлектронике был только когда учился, так что могу чего-то забыть. Но там очень простой материал всегда был и все равно к концу народ ничего не соображал. Не помню, чтобы кто-то от радиолаб был в воссторге. Но вероятно это еще от личных предпочтений зависит. По общефизу бывает да, с огромным удовольствием делают. Но это тоже личные предпочтения. И не факультатив в свободное от прочей работы время.
Вы пробегитесь что ли по нормальным учебным лабораториям и убедитесь, что никто кроме вас не заставляет студентов устанавливать проприетарный софт на личные ноуты.
А где было что-то написано о том, что кто-то кого-то заставляет что-то делать? Мы не можем студентам говорить "устанавливайте паленую версию" - это точно. А в остальном полная свобода.
Нет, если хотите, то вы можете спорить о паттернах программирования в лабвью
Могу, опыта в программировании достаточно, правда не на LabView. Я тут прошу прощения, я не прошел по ссылке, я думал там ссылка на обычную википедию. А там ссылка на лабвьюшную страницу, где очень специфичные паттерны, которые не имеют ничего общего с тем, что обычно называют шаблонами проектирвоания в программировании (вот это https://en.wikipedia.org/wiki/Software_design_pattern). С этой оговоркой я соглашусь с вами.
Курс вводный. Он сделан для того, чтобы вообще познакомить людей с системой и подходами. Собственно это был пробный заход и статья как раз про это. Если вы знаете как правильно, мы будет рады пригласить вас прочитать пару лекций про это а рамках следующей итерации курса, которая будет весной (он будет подольше, так что времени там будет побольше). Свяжитесь со мной в телеграм пожалуйста если вам интересно.
Ну а по программированию у нас целая магистратура если что: http://npm.mipt.ru/ru/magprog/. Там в том числе мы занимаемся системами сбора данных. Правда не на LabView, руководителей пока нет. Мы кстати активно приглашаем научных руководителей, так что кому интересно также свяжитесь со мной в телеграм.
qbertych
18.01.2022 14:35+1Понятно. Прошу прощения, я не посмотрел в ваш профиль.
Меня все равно удивляет, что студентов не затягивает совмещенный курс. Это же так круто: вот тебе что-то рассказали, и уже через час ты это сделал своими руками. Может быть, в первом сезоне этого курса у вас вылезли какие-то нюансы, надеюсь, в этот раз будет лучше.
Лабвью он очень специфичен, да. Собственно, в этом и проблема: если на Си или Питоне можно написать средних размеров проект в императивном стиле (и даже худо-бедно его расширять), то в лабвью это не прокатывает, все сразу скатывается в костыли и спагетти-код, который потом только выбрасывать.
Поэтому на мой взгляд уже на вводном курсе обязательно нужны основные паттерны. Тогда студенты усвоят, что в мире не только есть прекрасная связка "LabVIEW + железо от NI", но и что ее можно адекватно и масштабируемо запрогать.
darksnake
18.01.2022 14:58+1Представьте себе. Студентов вообще очень сложно затянуть на не обязательный курс (даже анализ данных, который читаю уже несколько лет, ходит много, сдает мало). Мы практиковались на "самых мотивированных" физиках. И то было всего несколько человек. Разумеется, дальше будем делать больше рекламы и людей будет несколько больше.
semennikov
18.01.2022 19:06А мы делаем нечто подобное в школе в 10 классе, правда не в LabVIEW а тупо Си + АЦП на Ардуино. Посмотрим, может Вы правы, и надо сразу на LabVIEW
darksnake
18.01.2022 20:42+1С + Ардуино это очень большое отличие от LabView. Лабвью создана как раз для не-программистов или как минимум не-традиционных-прогарммистов. Если вы посадите туда классического алгоритмирческого программиста типа меня, то получится так себе. Обратно тоже верно.
semennikov
19.01.2022 12:08Так в этом и интерес, чтобы ученики понимали что есть разные подходы к взаимодействию с окружающей средой. Пусть попробуют и то и то. Они же еще очень пластичные и это серьезно расширит их кругозор
darksnake
19.01.2022 13:16Если интересно, то прямая работа с железом была у нас на курсе "Продвинутое программирование на языке Python" Михаила Зеленого (там она прямо на зачет была с реальным железом). Возможно что-то будет на курсе "Введение в научное программирование на Kotlin" этой весной. Но в обоих случаях идет речь о программистах. А LabView - это система, созданная для людей, которые не хотят заморачиваться с языками программирования.
Antonprm
19.01.2022 11:11Задумка огонь! практических задач студентам нужно как можно больше, им в дальнейшем будет проще.
А почему именно LabView? он платный, громоздкий и самое важное (на мой взгляд) в дальнейшем не везде он есть, за рамками университета. и стоит не мало.
В свое время задача сбора данных с измерительного оборудования (лабораторные и производственные задачи) была решена использованием Python, освоили практически с нуля за пару месяцев. Подключение к оборудованию через pyVISA (LAN, GP-IB), взаимодействие с программой через консоль на первых этапах, в дальнейшем начали собирать GUI с помощью PyQt5. С обработкой данных вообще проблем нет.
Плюсы в том что Python бесплатный и кросплатформенный, легок в освоении, да и применим к огромному количеству задач. Ну и сопуствующий опыт программирования на популярном языке.
darksnake
19.01.2022 13:18Я выше ответил на аналогичный вопрос. Я сам занимаюсь в том числе разработкой систем сбора данных (см. тут: https://github.com/mipt-npm/controls.kt) и совершенно не фанат LabView, потому что он слишком ограничен и громоздок. Но при этом совершенно очевидно, что если речь идет не о программистах - это первый выбор.
mastergril
Круто вы сделали, аж глаз радуется посмотреть что есть такие как вы!
Жаль, что в некоторых универах местные князьки считают, что покупайте отечественное, какой-нибудь стенд от одного могилевского НПЦ и никаких вам national instruments, только глючный стенд с кучей проблем, только хадкор...