Lavritech LED Hub
Пользовательская документация LED Hub (beta)
Настройка программы осуществляется через файл setting.ini
.
Как правило, это однократная операция и она проводится при пуско-наладке светодиодного табло, но иногда может потребоваться корректировка некоторых параметров.
Во время редактирования файла setting.ini
программа должна быть выключена, иначе изменения не применятся!
Программа применяет настройки из файла при запуске, и сохраняет в него настройки при закрытии.
Настройка дисплея
Секция [Display_1]
описывает общие параметры дисплея.
Здесь можно поменять ip-адрес, а также установить яркость в процентах.
Остальные настройки менять не рекомендуется, они ставятся инженером при начальной настройке.
Некоторые версии ПО поддерживают управление сразу несколькими табло,
тогда будет несколько подобных секций: [Display_1]
, [Display_2]
и так далее.
Настройка API (RPC-запросы)
Программа может распознавать запросы в формате JSON RPC 2.0. Подробную информацию про этот стандарт можно найти в википедии (на русском), а также в официальной cпецификации. Запросы можно использовать для вывода инфомации на табло.
Общая настройка
В файле настроек в секции [System]
указываем порт, на котором будет работать rpc-сервер.
По-умолчанию выбран порт 1234.
Также, по необходимости, можно включить режим отложенного отображения данных.
Подробнее про этот режим описано в соответствующем разделе.
Привязка поля API к области вывода данных
Как правило, самостоятельно менять привязки не требуется - они настраиваются при пуско-наладке табло.
Но если потребуется изменить название поля в rpc-запросе, то это можно сделать через api_field
. Ниже для справки приведена структура секции в файле настроек.
В файле настроек каждая привязка выглядит как отдельная секция:
[DataBind_1]
name=bind_1
display_id=1
archive_field=n_car_0
api_field=display1/n_car_0
- название группы в
[ ]
, и название привязки -name
- должно быть уникальным display_id
- идентификатор дисплея, как было указано в группе[Display_1]
(id=1)archive_field
- название области для вывода информации на табло. Список областей чётко определён в программе, названия менять нельзя.api_field
- название поля для RPC. Это поля привязывается кarchive_field
, то есть это его псевдоним.api_field
можно менять - можно создать любой псевдоним, но он должен быть уникальным в рамках ini-файла.
Таким образом, через привязку мы определяем название поля api_field
, которое затем будем указывать в rpc-запросе при изменении данных на табло.
Вывод информации на табло
Вывод текста
Для установки значения в выбранную область нужно послать RPC-запрос, где указать метод SetFieldValue
и его параметры.
Параметры (params):
field
- название поля -api_field
из привязкиvalue
- значение - текст для вывода на табло
Пример запроса SetFieldValue
Вариант запроса для старых версий программы
Начиная с версии ПО v1.11
(01.03.2025) был исправлен тип поля id в соответствии со стандартом JSON-RPC 2.0.
Теперь в запросах и ответах поле id
имеет числовой тип.
В более ранних версиях поле id
являлось строкой и его значение нужно было заключать в кавычки.
Пример запроса дла версий программы до v1.11
:
Примеры ответов
{"id": 1, "jsonrpc": "2.0", "result": "accepted"}
{"id": 1, "jsonrpc": "2.0", "result": "busy"}
{"id": 1, "jsonrpc": "2.0", "result": "wrong_field"}
В ответе может прийти один из результатов:
- accepted - означает что rpc-команда принята к исполнению: новые данные успешно приняты программой, далее
- если в настройках указано
rpc_deferred_show_data=0
(или отсутствует), то программа начнёт выполнение задания на отображение принятых данных на дисплей - если в настройках указано
rpc_deferred_show_data=1
, программа просто запомнит значение поля, и будет ожидать запросаShowFields
для дисплея
- если в настройках указано
- busy - означает что дисплей пока занят (для дисплея где присутствует указанное поле уже активно задание отображения данных). То есть значение поля в данный момент времени поменять нельзя. Запрос отклоняется, его нужно будет повторить позже. Время пока дисплей будет занят зависит от разных факторов, в среднем рекомендуется подождать от 3 до 10 секунд в зависимости от условий эксплуатации и конфигурации. При режиме
rpc_deferred_show_data=1
запросShowFields
отрабатывается значительно быстрее, т.к. при этом обращения к дисплею не происходит. - wrong_field - означает что в поле field указано неверное значение, либо это поле не поддерживает данный функционал
Если нужно послать несколько запросов SetFieldValue
в обычном режиме, необходимо выдерживать интервал между посылками (3-10 секунд). Подробнее см. "Примеры ответов".
Чтобы снизить интервал между запросами SetFieldValue
, можно воспользоваться режимом отложенного вывода информации. Это эффективно для табло с большим количеством зон отображения.
Вывод цветного текста
Начиная с версии ПО v1.11
в программу была добавлена возможность вывода цветного текста в область. Для этого в RPC-запросе используется метод SetFieldValue
(как и в случае обычного вывода текста), но значение value
имеет определённый формат (содержит мета-информацию).
Например: |001|A111БВ|
- выведет строку "A111БВ" синим цветом:
|
- разделитель001
- код цвета (синий)|
- разделительA111БВ
- текст для вывода (номер машины)
Как происходит выбор между обычным запросом и запросом с мета-информацией?
Если текст начинается с символа разделителя |
- то считаем что в тексте указана мета-информация о цвете.
Если же в начале строки символа |
нет - то выбор цвета не осуществляется, надпись будет выведена цветом по-умолчанию.
Примеры:
"value": "|001|A111БВ|"
- выведет надпись "A111БВ" синим цветом- допускается не указывать символ
|
в конце."value": "|001|A111БВ"
- тоже выведет надпись "A111БВ" синим цветом
- допускается не указывать символ
"value": "A111БВ"
- обычный текст, надпись будет выведена цветом по-умолчанию
Рассмотрим на примере светодиодного табло для отображения номеров машин разным цветом.
Например, цвет может использоваться для маркировки очерёдности выезда из бокса для отгрузки, или проезда определённого участка.
Будем использовать следующие цвета для обозначения действий:
- Красный - "стоп" - код цвета 100
- Жёлтый - "приготовиться", или "первый в очереди" - код цвета 110
- Зелёный - "начать движение" - код цвета 010
- Синий - "второй в очереди"
- Белый - "действие не назначено" (цвет по-умолчанию) - код цвета 111
Как задаётся цвет?
Код цвета задаётся как код из трёх цифр по каналам цвета:
Красный Зелёный Синий
Примеры сочетаний:
- 100 - красный
- 010 - зелёный
- 001 - синий
- 110 - жёлтый
- 111 - белый
- 000 - чёрный (все каналы выключены) (на чёрном фоне не будет текста)
Ниже показаны примеры трёх значений value
, примеры RPC-запросов и соответствующий результат на табло:
{ "id": 1, "jsonrpc": "2.0", "method": "SetFieldValue", "params": { "field": "d1/1/1", "value": "|100|A211БВ|"} }
{ "id": 2, "jsonrpc": "2.0", "method": "SetFieldValue", "params": { "field": "d1/1/2", "value": "|010|М220TБ|"} }
{ "id": 3, "jsonrpc": "2.0", "method": "SetFieldValue", "params": { "field": "d1/1/3", "value": "|001|М003TС|"} }
Примечание. Фотографии сделаны при разном уровне яркости. Cм. настройку
brightness
в файле настроек.
Отложенный вывод информации
Иногда требуется изменить сразу несколько полей на табло одновременно. В этом случае удобно будет использовать данный режим.
Режим отложенного отображения данных можно включить через настройку rpc_deferred_show_data=1
в файле настроек.
В этом режиме по RPC-запросу SetFieldValue
данные на дисплей отправляться не будут. Вместо этого данные запоминаются в памяти программы. Таким образом, если послать несколько запросов SetFieldValue
- можно сделать пред-установку нескольких полей. Далее для вывода группы значений на табло нужно послать ещё один RPC-запрос: ShowFields
Запрос ShowFields
служит для отображения данных на дисплее, которые были ранее изменены через метод SetFieldValue
. Метод работает только если в системных настройках включен режим отложенного отображения данных rpc_deferred_show_data=1
В параметрах запроса нужно указать id дисплея, на который нужно вывести данные. Id дисплея можно найти настройках (в ini-файле) в группах вида [Display_x]
Пример запроса ShowFields
Пример ответа на ShowFields
Также, в некоторых случаях ShowFields
может вернуть результат "no data" (нет новых данных для отображения и отправки на дисплей). Это происходит, если:
- не было запросов
SetFieldValue
и значения полей не поменялись - значения, переданные в
SetFieldValue
не отличаются от старых - тогда нет необходимости отрисовывать повторно на табло те же данные - выключен режим отложенного отображения данных:
rpc_deferred_show_data=0
или отсутствует
Рассмотрим пример управления большим табло на 9 областей отображения в режиме отложенного вывода информации.
Примеры значений поля value
:
"|100|Д211AA|"
"|010|Д212ББ|"
"|001|Д213ВВ|"
"|110|Д221AA|"
"|011|Д222ББ|"
"|101|Д223ВВ|"
"|101|Д231AA|"
"|100|Д232ББ|"
"|111|Д233ВВ|"
Примеры RPC-запросов на запись значений.
В конце посылаем запрос для вывода значений на дисплей.
{ "id": 1, "jsonrpc": "2.0", "method": "SetFieldValue", "params": { "field": "d1/1/1", "value": "|100|Д211AA|"} }
{ "id": 2, "jsonrpc": "2.0", "method": "SetFieldValue", "params": { "field": "d1/1/2", "value": "|010|Д212ББ|"} }
{ "id": 3, "jsonrpc": "2.0", "method": "SetFieldValue", "params": { "field": "d1/1/3", "value": "|001|Д213ВВ|"} }
{ "id": 4, "jsonrpc": "2.0", "method": "SetFieldValue", "params": { "field": "d1/1/1", "value": "|110|Д221AA|"} }
{ "id": 5, "jsonrpc": "2.0", "method": "SetFieldValue", "params": { "field": "d1/1/2", "value": "|011|Д222ББ|"} }
{ "id": 6, "jsonrpc": "2.0", "method": "SetFieldValue", "params": { "field": "d1/1/3", "value": "|101|Д223ВВ|"} }
{ "id": 7, "jsonrpc": "2.0", "method": "SetFieldValue", "params": { "field": "d1/1/1", "value": "|101|Д231AA|"} }
{ "id": 8, "jsonrpc": "2.0", "method": "SetFieldValue", "params": { "field": "d1/1/2", "value": "|100|Д232ББ|"} }
{ "id": 9, "jsonrpc": "2.0", "method": "SetFieldValue", "params": { "field": "d1/1/3", "value": "|111|Д233ВВ|"} }
{"id": 10, "jsonrpc": "2.0", "method": "ShowFields", "params": {"display_id": "2"}}
Выбор интервалов между запросами
В режиме отложенного отображения данных:
Интервалы между запросами "SetFieldValue" можно сократить до 0,1-1 секунды.
Интервалы между запросами "ShowFields" должны быть больше, т.к. требуется время на посылку данных на дисплей.
Интервал должен быть не менее 5-10 секунд. Рекомендуемое значение - несколько минут.
Не рекомендуется использовать данные запросы для отображения часто сменяющейся информации (например, секундомер). Для этого существуют другие решения, см. LED PLC. Рекомендуется посылать запросы "ShowFields" только при необходимости отображения новых данных.
Результат вывода информации на светодиодное табло:
Проверка работы
Как осуществляется проверка?
В большинстве случаев для демонстрации работоспособности табло производитель предоставляет дополнительную программу, которая содержит набор тестов с использованием RPC-запросов для заполнения всех областей тестовыми данными.
Для самостоятельного тестирования запросов можно использовать одну из бесплатных утилит для посылки запросов по сети, например лёгковесную Packet Sender, или Postman.
Также на практике может быть удобным использовать небольшие скрипты на одном из языков программирования: Python, Golang или Visual Basic.
Сервисные запросы
Также поддерживаются дополнительные сервисные запросы.
Их удобно использовать для проверки связи между отправителем RPC-запроса и программой.
// Получить версию программы
{ "id": 1, "jsonrpc": "2.0", "method": "GetProgramVersion" }
// Ответ:
{ "id": 1, "jsonrpc": "2.0", "result": "v1.11.1"}
//Вывод тестового сообщения "test message" в лог программы (текст можно изменить)
{ "id": 1, "jsonrpc": "2.0", "method": "WriteLog", "params": [ "test message" ] }