Каналы данных в Cvoid

понедельник, 18 мая 2009 г. | Published in |

В посте про триггеры был приведен пример скрипта для обработки сигнала от датчика движения. Управление светом было реализовано посредством записи в канал определенного значения. Сейчас немного подробнее остановимся на понятии каналов данных.

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

Также именованные каналы используются модулем сохранения информации устройств ввода-вывода в базу данных и стандартным web интерфейсом.

Пример настройки канала данных и обработчика:
# declare data channel "/move_activity" and mark it by "holl-activity" class
create_slot_channel("/move_activity", ds2406_1.DataSlotPioActivityB, 3, "holl-activity", "")

# load script from Python file
load_script("holl-activity", "Python", "class/holl-activity.py")

# add trigger for data channels marked by "holl-activity" class
add_class_handler("holl-activity", "/scripts/holl-activity")

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