Neuron C
Neuron C — это специализированный язык программирования, разработанный компанией Echelon Corporation для написания прикладного программного обеспечения для устройств, работающих в сетях управления на основе технологии LonWorks (Local Operating Network). Neuron C является надстройкой над языком Си (ANSI C) и предназначен для микроконтроллеров Neuron Chip, которые служат ядром узлов в распределённых системах автоматизации зданий, промышленного управления, транспорта и «умного дома».
История и предпосылки создания
Язык Neuron C был создан в конце 1980-х годов в рамках разработки платформы LonWorks компанией Echelon Corporation (США). Целью проекта было создание единой сетевой технологии для децентрализованного управления устройствами, где каждый узел (сенсор, актуатор, контроллер) обладает собственным интеллектом и может взаимодействовать с другими узлами через общую шину данных.
Для реализации этой концепции потребовался специализированный процессор — Neuron Chip (серии MC143150 и MC143120, производимые компанией Motorola, а затем Toshiba), который объединял в себе три 8-битных микропроцессора, память и сетевой интерфейс. Разработка приложений для этого чипа на стандартном Си была затруднена из-за необходимости ручного управления сетевыми протоколами, таймерами и обработчиками событий. В результате Echelon создала Neuron C — язык, который автоматизировал эти задачи, предоставив программисту высокоуровневые конструкции для работы с сетевыми переменными, таймерами и событиями.
Первая версия компилятора Neuron C была выпущена в 1990 году вместе с первыми образцами Neuron Chip. Язык быстро стал стандартом для разработки приложений LonWorks и использовался в десятках тысяч проектов по всему миру, включая системы управления освещением, отоплением, вентиляцией, безопасностью и промышленным оборудованием.
Особенности языка
Neuron C базируется на стандарте ANSI C, но включает ряд расширений, специфичных для работы в сети LonWorks. Эти расширения делятся на несколько категорий.
Сетевые переменные (Network Variables — NV)
Сетевые переменные являются основным механизмом обмена данными между узлами LonWorks. В Neuron C переменная может быть объявлена как network input (входная) или network output (выходная). При изменении значения выходной сетевой переменной на одном узле система автоматически передаёт это значение всем узлам, которые имеют соответствующую входную переменную с тем же типом и именем. Это обеспечивает прозрачное взаимодействие: программисту не нужно писать код для отправки и приёма сообщений.
Пример объявления: ``c network output SNVT_temp nvoTemperature; // выходная переменная температуры network input SNVT_temp nviSetpoint; // входная переменная уставки `` Типы сетевых переменных стандартизированы в виде SNVT (Standard Network Variable Types) — предопределённые структуры данных (температура, давление, скорость, состояние и т.д.), обеспечивающие совместимость устройств разных производителей.
Обработчики событий (When-конструкции)
Neuron C использует событийно-ориентированную модель выполнения. Вместо цикла main() программа состоит из набора обработчиков событий, которые запускаются при наступлении определённых условий. Синтаксис основан на ключевом слове when:
```c when (reset) { // код, выполняемый при включении питания или сбросе }
when (nv_update_occurs(nviSetpoint)) { // код, выполняемый при получении нового значения входной сетевой переменной }
when (timer_expires(t1)) { // код, выполняемый по истечении таймера } ``` Этот подход упрощает написание реактивных систем, где устройство большую часть времени находится в режиме ожидания и реагирует только на внешние события.
Таймеры
Neuron C предоставляет встроенную поддержку таймеров, которые могут быть однократными (timer) или периодическими (repeating timer). Таймеры объявляются как переменные, и их срабатывание обрабатывается с помощью when (timer_expires(...)).
Функции работы с сетью
Язык включает библиотеку функций для низкоуровневого управления сетевыми операциями, таких как отправка явных сообщений, управление адресацией, работа с протоколом LonTalk. Однако в большинстве случаев разработчики используют только сетевые переменные, что упрощает код.
Дополнительные типы данных
Помимо стандартных типов Си, Neuron C поддерживает специальные типы, такие как SNVT (стандартные сетевые переменные), UNVT (пользовательские сетевые переменные) и типы для работы с аппаратными регистрами Neuron Chip.
Архитектура программы на Neuron C
Типичная программа на Neuron C состоит из следующих разделов:
- Объявление сетевых переменных — задаёт интерфейс узла.
- Объявление таймеров — определяет временные интервалы.
- Объявление конфигурационных параметров — например, адресов, параметров сети.
- Обработчики событий — основной код, реагирующий на события.
- Вспомогательные функции — подпрограммы, написанные на стандартном Си.
Программа компилируется в образ (image) для Neuron Chip, который затем загружается в устройство. Компилятор Neuron C (например, LonBuilder или NodeBuilder) автоматически генерирует код для протокола LonTalk и управления аппаратными ресурсами.
Применение
Neuron C использовался в широком спектре приложений автоматизации:
- Управление освещением — датчики движения, диммеры, реле, объединённые в сеть.
- Системы отопления, вентиляции и кондиционирования (HVAC) — контроллеры температуры, клапаны, вентиляторы.
- Промышленная автоматизация — датчики давления, расхода, уровня, исполнительные механизмы.
- Управление доступом и безопасностью — считыватели карт, замки, сигнализация.
- Транспорт — управление туннельными вентиляторами, освещением дорог, системами метро.
- «Умный дом» — интеграция бытовых приборов, аудио- и видеосистем.
Благодаря стандартизации SNVT и протокола LonTalk, устройства на Neuron C от разных производителей могли работать в одной сети без дополнительной настройки. Это сделало LonWorks популярной технологией в коммерческом и жилом строительстве, особенно в США и Европе.
Критика и недостатки
Несмотря на успешное применение, Neuron C имеет ряд ограничений:
- Привязка к аппаратуре — язык предназначен исключительно для микроконтроллеров Neuron Chip. С появлением более мощных и дешёвых ARM-микроконтроллеров и альтернативных сетевых протоколов (BACnet, Modbus TCP, KNX) популярность LonWorks начала снижаться.
- Ограниченная производительность — 8-битные процессоры Neuron Chip имели тактовую частоту до 10 МГц и малый объём памяти (до 64 КБ ПЗУ и 2 КБ ОЗУ), что ограничивало сложность приложений.
- Закрытость экосистемы — компилятор и инструменты разработки были проприетарными и поставлялись только компанией Echelon. Открытые альтернативы появились позже, но не получили широкого распространения.
- Сложность отладки — из-за событийно-ориентированной модели и ограниченных возможностей эмуляции отладка программ была нетривиальной.
Современное состояние
К началу 2020-х годов платформа LonWorks и язык Neuron C в значительной степени уступили место другим технологиям, таким как BACnet (для зданий), Modbus (для промышленности) и IoT-протоколам (MQTT, CoAP). Компания Echelon прекратила активную разработку и поддержку Neuron C, а производство оригинальных Neuron Chip было остановлено. Однако большое количество установленных систем LonWorks продолжает эксплуатироваться, и для их обслуживания и модернизации по-прежнему требуются специалисты, владеющие Neuron C.
В некоторых нишах (например, в системах управления освещением стадионов или тоннелей) Neuron C остаётся в использовании из-за инерции и сложности замены. Также существуют эмуляторы и виртуальные машины, позволяющие запускать код Neuron C на современном оборудовании, но они не получили массового распространения.
Источники
- Echelon Corporation. Neuron C Programmer's Guide. 1995.
- Echelon Corporation. LonWorks Technology Overview. 1999.
- Motorola, Inc. Neuron Chip Data Sheet. 1993.
- Loy, D. LonWorks: Eine Einführung in die Technologie und Anwendung. VDE Verlag, 2002.
- Баранов, А.В. Сети LonWorks и язык Neuron C в системах автоматизации. М.: Энергоатомиздат, 2005.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →