Перейти к содержимому

справочник по элементам управления

Массив controls в chip.json описывает, что показывает панель во время симуляции. Каждая запись управляет атрибутом, чьё name совпадает с id записи.

Поле Применяется к Значение
id все Обязательное. Атрибут, которым управляет этот элемент. Запись без id пропускается
type все "range" для ползунка, "button" для кнопки-триггера. Любое другое значение игнорируется, и запись ничего не создаёт
label все Текст рядом с элементом управления. Резервно используется label атрибута, затем id
min range Нижняя граница. Резервно используется min атрибута, затем 0
max range Верхняя граница. Резервно используется max атрибута, затем 100
step range Шаг. Резервно используется step атрибута, затем 1, если диапазон шире 20, иначе 0.01
unit range Выводится после значения, например ppm или %. По умолчанию пусто
scale range "log" задаёт логарифмический ползунок. Игнорируется, если min отрицательное, так как кривая там не определена

Начальное положение ползунка не берётся из элемента управления. Оно берётся из default атрибута, с резервным значением min. Держите default атрибута внутри диапазона элемента управления, иначе панель откроется с ползунком, прижатым к одному из концов.

Берётся из name чипа. Чип без name показывает “Custom Chip”.

Вам вообще не нужно писать controls.

Любой атрибут, который объявляет и min, и max, и на который не претендует ни один явный элемент управления, получает ползунок. Его подпись берётся из label атрибута, шаг — из step атрибута или выводится: 1 для type: "int", иначе 1, когда диапазон шире 20, и 0.01, когда нет. Единица измерения не добавляется.

Таким образом, controls нужен только для переименования ползунка, добавления единицы измерения, логарифмической шкалы или объявления кнопки. Два практических следствия:

  • Чипы, написанные до появления живых элементов управления, часто уже настраиваются без каких-либо правок.
  • Чип, у атрибутов которого нет min/max и нет раздела controls, вообще не показывает панель. Это обычная причина, по которой клик по чипу, кажется, ничего не делает.

Запись "button" создаёт кнопку-триггер для линий сброса, событий типа “имитация движения” и всего остального, что является фронтом, а не уровнем:

Кнопка управления и ползунок времени удержания на панели датчика движения Нажатие переводит атрибут в 1 и обратно в 0 примерно через 150 мс, поэтому ваш чип должен трактовать ненулевое значение как “событие произошло”, а не пытаться поймать конкретный момент.

Положения ползунков зеркалируются в сохранённые свойства компонента (в attrs) примерно через 250 мс после того, как вы перестали их двигать, с объединением ожидающих значений. Вот почему перетаскивание ползунка не записывает в проект на каждый пиксель и почему положение переживает сохранение и перезагрузку.

Зеркало — это копия. Значение, которое читает работающий чип, — это живое значение, применяемое в момент движения элемента управления.

Движок Как приходит значение
AVR, RP2040, ESP32 в браузере Записывается напрямую в хранилище атрибутов, которое WebAssembly читает при каждом vx_attr_read
ESP32 на бэкенде QEMU Пересылается в worker и применяется к хранилищу атрибутов среды выполнения чипа там

Оба варианта живые: без перекомпиляции, без перезапуска, без кнопки “Применить”. Единственная задержка — это то, как часто ваш собственный код вызывает vx_attr_read.

Живые элементы управления бесплатны на любом тарифе, как и запись, компиляция и запуск чипа, который их объявляет. Две соседние функции платные: создание чипа или датчика с помощью ИИ (тариф Maker и выше) и библиотека My Chips, которая хранит чип на сервере для повторного использования в проектах (тариф Pro).

Симптом Причина
Клик по чипу не открывает панель Нет записей controls и нет атрибута с обоими min и max, или симуляция остановлена
Конкретная запись отсутствует на панели Её type не является ни range, ни button, или у неё нет id
Ползунок двигается, но ничего не меняется Чип закэшировал vx_attr_read вместо вызова там, где используется значение
Ползунок начинается не с того конца default атрибута находится вне диапазона min/max элемента управления
Значение прыгает целыми числами step был выведен как 1, потому что диапазон шире 20; задайте step явно
Логарифмический ползунок ведёт себя как линейный scale: "log" игнорируется, когда min отрицательное