Yacht Devices Новости: NMEA 2000 Bridge: настройка пользовательских программ без изменения кода
18.02.2021
Новая прошивка позволяет легко настраивать пользовательские программы без изменения кода, включая зашифрованные и заблокированные программы.
Наш Bridge выполняет пользовательские программы для обработки CAN в реальном времени. Если адаптер бака или шлюз не позволяет изменить номер бака или тип жидкости, помогут пять строк кода и Bridge. При этом на нём можно создавать и большие мощные программы, прототипировать и имитировать устройства или разрабатывать собственные.
В 2019 году мы добавили необязательное шифрование пользовательских программ. Оно защищает интеллектуальную собственность, помогает соблюдать NDA и предотвращает изменение кода конечным пользователем. Но как тогда пользователю или установщику настраивать программу? Можно обработать PGN 126208 «NMEA Group Function» или собственный PGN, но теперь есть более изящное решение.
# PGN 127505 "Fluid Level" with 100% full diesel tank
SLOT1 = 0111F219 FF 08 00A861FFFFFFFFFF
heartbeat(1000)
{
# Check new tank level settings
if (param(SLOT2) == 1) # Is only one byte read?
{
load(SLOT2) # Copy slot to work buffer
A = get(0,INT8)*250 # % to N2K resolution
load(SLOT1)
set(DATA+1,INT16,A) # Update % in SLOT1
save(SLOT1)
}
# Send fluid level message
load(SLOT1)
send(CAN1)
}
Программа выше превращает Bridge в имитатор датчика топливного бака, ежесекундно передающий уровень в NMEA 2000. Новая функция param() считывает строку, начинающуюся с YD:PARAM, из поля «Installation Description String 2». Ввести её можно через любой компьютерный шлюз NMEA 2000. Поле хранится в памяти и обычно служит для заметок установщика.
Например, введите «YD:PARAM 5» в свойствах устройства, и Bridge разберёт данные и ответит «YD:PARAM 05 OK», подтверждая команду. На снимке CAN Log Viewer справа видно, что уровень дизельного бака 0 изменился на 5%.
Если строка корректна, param() сохранит байты в указанном слоте памяти. Их можно загрузить в рабочий буфер функцией load(). Функция возвращает число прочитанных байтов, в нашем примере один. Если поле пустое или команда неверна, слот не изменится, а функция вернёт 0.
Далее программа переводит введённый процент уровня в разрешение NMEA 2000 и обновляет шаблон сообщения в SLOT1. Если код непонятен, обратитесь к руководству .
Можно ввести от одного до 30 байтов в шестнадцатеричном формате. При вводе всех 30 байтов Bridge не добавит «OK»: в поле не хватит места. Любая из команд ниже:
YD:PARAM 5 6 7 1A f
YD:PARAM 05 06 07 1a 0F
YD:PARAM 0506071A0F
даст одинаковый результат:
YD:PARAM 0506071A0F OK
Байты можно писать с пробелами или без, с ведущим нулём или без, в верхнем или нижнем регистре. При ошибке появится «YD:PARAM ERR».
Слот вмещает до 229 байтов, но таким способом задаются только первые 30. При успешном param() с ненулевым результатом все остальные байты слота обнуляются.
Прошивка версии 1.37 для Bridge доступна в разделе загрузок.
