Yacht Devices Новости: NMEA 2000 Bridge: настройка пользовательских программ без изменения кода

18.02.2021

Новая прошивка позволяет легко настраивать пользовательские программы без изменения кода, включая зашифрованные и заблокированные программы.

Предупреждения двигателя и трансмиссии в Cloud Service

Наш 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 доступна в разделе загрузок.