Yacht Devices Новости: NMEA 2000 Bridge: примеры восстановления и замены оборудования

01.03.2019

Наш NMEA 2000 Bridge YDNB-07 может помочь вам обрабатывать данные NMEA 2000 в режиме реального времени. В статье приведены два случая, когда Bridge использовался для ремонта или даже замены оборудования NMEA 2000.

Пример 1: Экземпляры бака уровня топлива двигателя Evinrude

У одного из наших клиентов есть двигатель Evinrude E-TEC G2 с модулем шлюза уровня топлива NMEA 2000. По умолчанию шлюз настроен на отправку данных об уровне топлива с экземплярами жидкости 4 и 5, тогда как его картплоттер может отображать данные бака только с экземплярами 0 и 1.

Хотя экземпляры можно изменить с помощью диагностического комплекта Evinrude G2, наш клиент спросил, можно ли решить эту проблему с помощью нашего NMEA 2000 Bridge YDNB-07.

Конечно, это возможно. Вам не нужно разбивать сеть NMEA 2000 на отдельные сегменты. Вам даже не потребуется подключать второй интерфейс CAN к Bridge. Просто подключите Устройство к любой свободной розетке в сети NMEA 2000 и запрограммируйте Bridge на повторную передачу PGN уровня жидкости, полученных от двигателя, но с измененными экземплярами.

# The program receives "Fluid Level" PGN 127505 (0x1F211)
# changes the "Fluid instance" field and sends back the modified PGN.
# instance 4 is changed to 0
# instance 5 is changed to 1

# Disable forwarding for all mismatched PGNs
FW_CAN1_TO_CAN2=OFF
FW_CAN2_TO_CAN1=OFF

# Enable only "Fluid Level" PGN 127505 on CAN1
CAN1_HARDWARE_FILTER_1=0x01F21100, 0x01FFFF00

# Process "Fluid Level" PGN 127505
match(CAN1, 0x01F21100, 0x01FFFF00 )
{
	# Get fluid instance
	I = get(DATA, UINT8)
	
	if (I == 4){
		set(DATA, UINT8, I & 0xF0 )
		send(CAN1)
	}
	
	if (I == 5){
		set(DATA, UINT8, I & 0xF1 )
		send(CAN1)
	}	
}

# End of program

Простое, но очень эффективное решение. Но можем ли мы добиться большего?

Пример 2: Эмулятор переключателя преобразователя Tinley NMEA 2000

Проверьте этот продукт: Переключатель преобразователя Tinley NMEA 2000 (TAC COS).

Он работает по тому же принципу, что описан в примере выше.

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

Однако если у вас есть модель картплоттера, в которой вы не можете установить предпочтительный источник данных о глубине, вы не сможете использовать весь потенциал TAC COS. Вместо этого вы можете получить три датчика глубины и STW вместо одного.

Также невозможно настроить TAC COS и настроить чувствительность скорости ветра и угла.

Попробуем сделать устройство без этих ограничений из NMEA 2000 Bridge YDNB-07.

Во-первых, нам нужно выяснить структуру сети NMEA 2000.

Мы решим разбить сеть NMEA 2000 на два отдельных сегмента и соединить их с помощью YDNB-07 Bridge.

Первый сегмент будет подключен к порту CAN1 Bridge и будет иметь датчики как левого, так и правого борта. Второй сегмент будет подключен к порту CAN2 устройства Bridge и будет иметь датчик ветра, картплоттер и все другое оборудование NMEA 2000.

Мы будем использовать адрес преобразователя NMEA 2000, чтобы определить, какой из них следует использовать в качестве источника данных. Используя список устройств NMEA 2000 на картплоттере, мы обнаружили, что датчик порта NMEA 2000 имеет адрес 0x10, а датчик порта имеет адрес 0x11.

Поэтому мы добавляем оба адреса в раздел init() программы:

# Transducers address
P = cast (0x10, UINT8 ) # port
S = cast (0x11, UINT8 ) # starboard

Мы также проверили, что датчик ветра выдает данные об угле кажущегося ветра.

Теперь давайте проанализируем реальные сценарии. Мы не хотим, чтобы Устройство переключалось между датчиками от малейшего ветерка. Переключение должно происходить только тогда, когда скорость ветра остается выше порогового значения в течение как минимум 10 секунд. Также нам бы хотелось, чтобы конечный пользователь мог легко настраивать эти параметры. Поэтому мы добавляем:

# C variable sets the wind speed threshold
# 0.5 = wind speed in knots
C = cast (51.44 * 0.5, UINT16)

# Time interval: wind angle should be in the switching range at least, milliseconds
F = cast (10000, UINT32)

Когда угол ветра колеблется около 0 °или 180 °, Устройство также будет переключаться между датчиками случайным образом, поэтому нам необходимо ввести в систему угловой гистерезис, добавив угол мертвой зоны.

# B variable sets the angle dead-band
# 5 = angle in degrees.
B = cast (174.5 * 5, UINT16)

Окончательная логика переключения такова:

  • по умолчанию (после включения) используйте датчик порта;
  • если угол ветра остается в диапазоне [360 °- угол мертвой зоны.. 180 °+ угол мертвой зоны] более заданного интервала времени и при этом скорость ветра превышает пороговую, переключиться на датчик правого борта;
  • если угол ветра остается в диапазоне [0 °+ угол мертвой зоны.. 180 °- угол мертвой зоны] более указанного интервала времени и в то же время скорость ветра превышает пороговое значение, переключитесь на датчик порта.

Конечный пользователь может изменить программу в соответствии с положением судна и настроить следующие параметры в разделе init():

  • CAN адреса преобразователя;
  • порог скорости ветра;
  • время, в течение которого параметры ветра остаются в диапазоне переключения до того, как произойдет переключение;
  • угол мертвой зоны.

Программа была успешно протестирована в лаборатории как на данных специально созданной модели, так и на реальных данных, записанных во время морских испытаний в Гданьске в 2016 году. Вы можете скачать полную программу здесь (5 КБ).

В заключение

NMEA 2000 Bridge YDNB-07 это очень мощный и универсальный инструмент, подходящий для простых и умеренно сложных манипуляций с данными NMEA 2000. Несмотря на ряд ограничений, с его помощью можно реализовать довольно сложное устройство обработки данных NMEA 2000, например Тинли TAC COS.

Основным преимуществом этого устройства является то, что конечный пользователь может легко перенастроить программу, например, установить собственные пороговые значения в примере TAC COS, и даже изменить логику программы, чтобы адаптировать существующие программы для использования на конкретном судне.