КОРЗИНА
магазина
8 (499) 500-14-56 | ПН. - ПТ. 12:00-18:00
ЛЕСНОРЯДСКИЙ ПЕРЕУЛОК, 18С2, БЦ "ДМ-ПРЕСС"

Блок перистальтическиx насосов RS485 / Modbus - Datasheet

Блок перистальтическиx насосов RS485 / Modbus.

Техническое описание: Данная страница содержит подробное техническое описание блока перистальтическиx насосов RS485 / Modbus и раскрывает работу с устройством через его регистры.

Ознакомиться с пользовательским описанием устройства и примерами работы с библиотекой iarduino_MB_Pump можно на странице Wiki - блок перистальтическиx насосов RS485 / Modbus.

Назначение:

Блок перистальтическиx насосов RS485 / Modbus - является устройством включающим в себя до трех насосов, управление которыми осуществляется по протоколу Modbus шины RS485. Так же в блок входят разъемы для подключения двух датчиков уровня жидкости XKC-Y25-V для каждого насоса, сигналы с датчиков можно принимать по протоколу Modbus шины RS485.

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

Блок перистальтическиx насосов не обязательно использовать в гидропонных установках, это могут быть иные проекты где требуется перекачивать различные жидкости с высокой точностью дозации под управлением по протоколу Modbus широко применяемому в промышленности.

В соответствии с протоколом Modbus, к одной шине RS485 можно подключить до 247 блоков перистальтическиx насосов. Адрес устройства (по умолчанию 0x02) назначается программно и хранится в его энергонезависимой памяти. Все устройства на шине должны иметь уникальный адрес.

Описание:

Блок перистальтическиx насосов RS485 / Modbus построен на базе микроконтроллера STM32G030F4 и конвертера SN65HVD3082EDR с цепями защиты шины RS485 и встроенным терминатором, который можно отключать переключателем на плате. В устройстве присутствуют: импульсный DC-DC преобразователь, до трех перистальтическиx насосов, за коммутацию которых отвечают мощные HEXFET транзисторы и по два разъема DS1069-04 (CWF-4) на каждый насос, для подключения датчиков уровня жидкости XKC-Y25-V.

Запись и чтение данных модуля, осуществляется через его регистры. Доступ к регистрам модуля осуществляется запросами протокола Modbus по шине RS485.

С помощью регистров модуля можно выполнять следующие действия:

  • Менять адрес модуля на шине, с сохранением, или без.
  • Менять тип протокола Modbus: RTU/ASCII, с сохранением, или без.
  • Менять скорость передачи данных, с сохранением, или без.
  • Сохранять одно двухбайтное слово в энергонезависимую память и читать его.
  • Читать напряжение питания поступившее с разъема RJ45.
  • Управлять светодиодом обнаружения устройства на разъеме RJ45.
  • Включать/отключать любой из насосов.
  • Включать любой насос на указанное время.
  • Задавать скорость работы каждого насоса (используется ШИМ).
  • Задавать частоту ШИМ для каждого насоса.
  • Включать/отключать сторожевой таймер насосов (общий для всех насосов).
  • Устанавливать время сторожевого таймера до сброса и получать оставшееся время.
  • Получать состояния цифровых датчиков уровня жидкости (если они подключены).

Насосы:

Жидкость в перистальтических насосах перекачивается по трубке и не контактирует с механизмами насоса. Конструкция насосов позволяет перекачивать жидкости с точностью до грамма.

Блоки с насосами Kamoer NKP-DC-S08 имеют производительность до 60 мл/мин. Насосы комплектуются силиконовой трубкой средней химической стойкости с ресурсом до 200 ч. Эти трубки не предназначены для перекачивания кислот и щелочей.

Блоки с насосами Kamoer KPHM100 имеют производительность до 120 мл/мин. Насосы комплектуются трубкой Pharmed BPT высокой химической стойкости с ресурсом до 1000 ч. Эти трубки могут использоваться для перекачивания даже кислот и щелочей.

Трубки насосов являются расходным материалом и легко меняются. Вне зависимости от токо, какой из представленных насосов используется в блоке, его трубку можно заменить на силиконовую с диаметром: 2x4 или 3x5, или Pharmed BPT с диаметром: 2x4 или 3x5.

Подключение:

Важно: Перед подключением устройства к шине RS485 нужно отключить питание.

Так называемое «горячее подключение» может повредить устройство!

У блока перистальтическиx насосов имеются два вида разъемов:

  • Разъемы RJ45 - для подключения блока к контроллеру по шине RS485.
  • Разъемы DS1069-04 (CWF-4) - для подключения датчиков уровня жидкости XKC-Y25-V.

Назначение выводов разъема RJ45:

  • 1: «A» - Линия данных (неинвертирующая).
  • 2: «B» - Линия данных (инвертирующая).
  • 3: «NC» - Не используется.
  • 4: «PWR» - Вывод питания от +12 до +24В.
  • 5: «PWR» - Вывод питания от +12 до +24В.
  • 6: «NC» - Не используется.
  • 7: «GND» - Общий вывод питания.
  • 8: «GND» - Общий вывод питания.
  • HL-1: «BLINK» - Индикатор включения (мигает если подано питание).
  • HL-2: «DATA» - Индикатор получения запроса и обнаружения устройства.

У блока имеется два разъема RJ45 шины RS485. Один (любой) разъем используется для подключения блока к контроллеру, а второй можно использовать для подключения других блоков насосов или иных модулей к той же шине RS485.

Назначение индикаторов разъёма RJ45:

  • HL-1 «BLINK» Индикатор включения:
    • Индикатор коротко мигает раз в две секунды -
      значит устройство работает, но не получило ни 1 запроса с подачи питания.
    • Индикатор медленно мигает раз в секунду -
      значит устройство работает, но последний запрос принят более 10 сек. назад.
    • Индикатор часто мигает пять раз в секунду -
      значит устройство работает и последний запрос принят менее 10 сек. назад.
  • HL-2 «DATA» Индикатор получения запроса и обнаружения устройства:
    • Индикатор включается при получении запросов, что позволяет визуально отследить их поступление.
    • Устройству можно отправить команду на постоянное свечение индикатора, что позволит визуально найти устройство с известным адресом среди одинаковых устройств на шине.

Назначение выводов разъема DS1069-04 (CWF-4):

  • 1: «+5V» - Выход питания датчика +5В.
  • 2: «IN» - Вход с датчика уровня жидкости XKC-Y25-V (внутрисхемно подтянут до +5V).
  • 3: «GND» - Общий вывод питания.
  • 4: «MODE» - Режим работы датчика (внутрисхемно подключён к +5V => работа без инверсии).

У блока имеется по два разъема DS1069-04 (CWF-4) на каждый насос, для подключения датчиков XKC-Y25-V. Разъемы обозначены: MIN, MID. Датчик подключённый к разъему MIN регистрирует минимальный уровень жидкости, а датчик MID - средний уровень жидкости. Так как вход IN внутрисхемно подтянут до +5В, то отключение датчика от разъёма равносильно наличию датчика регистрирующего жидкость.

Характеристики:

  • Напряжение питания: от 12 до 24 В постоянного тока (разъем RJ45).
  • Ток потребляемый модулем: до 600 мА (при работе всех насосов на максимум).
  • Интерфейс: RS485 / Modbus.
  • Скорость шины: 4800 / 9600 / 19200 / 38400 / 57600 / 115200 бит/с.
  • Адрес на шине: устанавливается программно (по умолчанию 0x02).
  • Регулировка коэффициента заполнения ШИМ: от 0,4 до 100%.
  • Регулировка частоты ШИМ: от 1 до 10'000 Гц.
  • Включение на время: от 0,1 до 6'553,5 сек (максимум 1 час 49 минут 13,5 секунд).
  • Рабочая температура: от 0 до +60 °С.
  • Габариты: 250 x 80 x 70 мм.
  • Вес: ? г.

Регистры:

По протоколу ModBus, данные всех ведомых устройств хранятся в регистрах.
Существует 4 типа регистров:

Адрес:Название:Назначение:
0...0x270E(DI)Discrete Input1 битЦифровые входыR
0...0x270E(DO)Discrete Output Coils1 битЦифровые выходы
(регистры флагов)
RW
0...0x270E(AI)Analog Input Registers16 битАналоговые входыR
0...0x270E(AO)Analog Output Holding Registers16 битАналоговые выходы
(регистры хранения)
RW

Данные в регистрах не обязательно связаны со значениями на входах и выходах ведомых устройств. Каждый регистр DI/DO хранит 1 бит. Каждый регистр AI/AO хранит 16 бит (2 байта).

Например, регистры AI и AO могут хранить входные данные и результаты вычислений, а регистры DI и DO флаги настроек, и биты состояний.

Карта регистров модуля:

Discrete Inputs: Coils: Input Registers: Holding Registers:
адресрегистры DI:
0x0000MIN_A
0x0001MID_A
0x0002MIN_B
0x0003MID_B
0x0004MIN_C
0x0005MID_C
0x0006
...
0x00FF
RESERVED
адресрегистры DO:
0x0000HL_DATA
0x0001WDT
0x0002PUMP_A
0x0003PUMP_B
0x0004PUMP_C
0x0005PUMP_12V_A
0x0006PUMP_12V_B
0x0007PUMP_12V_C
0x0008
...
0x00FF
RESERVED
адресрегистры AI:
0x0000VIN
0x0001
...
0x00FF
RESERVED
адресрегистры AO:
0x0000WDT
0x0001FREQ_A
0x0002FREQ_B
0x0003FREQ_C
0x0004PWM_A
0x0005PWM_B
0x0006PWM_C
0x0007TMR_A
0x0008TMR_B
0x0009TMR_C
0x000A
...
0x00FF
RESERVED
адресрегистры DI:
0x0100
...
0x270E
RESERVED
адресрегистры DO:
0x0100CHANGE_ID
0x0101
...
0x01F7
BAN_ID_1

BAN_ID_247
0x01F8
...
0x270E
RESERVED
адресрегистры AI:
0x0100
...
0x270E
RESERVED
адресрегистры AO:
0x0100ACK_ID
0x0101ACK_SPEED
0x0102ACK_TYPE
0x0103
...
0x010F
RESERVED
0x0110SET_ID
0x0111SET_SPEED
0x0112SET_TYPE
0x0113
...
0x011F
RESERVED
0x0120USER_DATA
0x0121
...
0x270E
RESERVED

Регистры с адресами 0x0100 и выше являются общими для всех устройств iarduino.

Модуль ответит ошибкой на попытку чтения/записи данных в регистры RESERVED.

Регистры "Discrete Inputs" (DI):

Битовые регистры только для чтения.

  • 0x0000 «MIN_A» - Регистр является флагом состояния датчика уровня жидкости MIN «A».
    Если датчик фиксирует наличие жидкости, то флаг устанавливается, иначе сбрасывается.
  • 0x0001 «MID_A» - Регистр является флагом состояния датчика уровня жидкости MID «A».
    Если датчик фиксирует наличие жидкости, то флаг устанавливается, иначе сбрасывается.
  • 0x0002 «MIN_B» - Регистр является флагом состояния датчика уровня жидкости MIN «B».
    Если датчик фиксирует наличие жидкости, то флаг устанавливается, иначе сбрасывается.
  • 0x0003 «MID_B» - Регистр является флагом состояния датчика уровня жидкости MID «B».
    Если датчик фиксирует наличие жидкости, то флаг устанавливается, иначе сбрасывается.
  • 0x0004 «MIN_C» - Регистр является флагом состояния датчика уровня жидкости MIN «C».
    Если датчик фиксирует наличие жидкости, то флаг устанавливается, иначе сбрасывается.
  • 0x0005 «MID_C» - Регистр является флагом состояния датчика уровня жидкости MID «C».
    Если датчик фиксирует наличие жидкости, то флаг устанавливается, иначе сбрасывается.

Регистры "Coils" (DO):

Битовые регистры для чтения и записи.

  • 0x0000 «HL_DATA» - Регистр включения индикатора обнаружения устройства.
      Индикатор обнаружения устройства, это светодиод разъема RJ45.
    • Установка регистра в «1» приведёт к постоянному свечению индикатора.
    • Сброс регистра в «0» отключит индикатор, он будет информировать о получении запросов.
    • Значение по умолчанию: 0.
  • 0x0001 «WDT» - Регистр включения сторожевого таймера насосов.
    • Установка регистра в «1» приведёт к включению сторожевого таймера насосов.
    • Сброс регистра в «0» приведёт к отключению сторожевого таймера насосов.
    • Включённый сторожевой таймер отсчитывает время до 0 миллисекунд, после чего отключает все насосы. Оставшееся время сторожевого таймера насосов доступно в регистре "Holding Registers" [0x0000] «WDT», тем же регистром можно задать новое время.
    • Значение по умолчанию: 0.
  • 0x0002 «PUMP_A» - Регистр включения насоса «A».
    • Установка регистра в «1» приводит к включению насоса «A» со скоростью заданной регистром "Holding Registers" [0x0004] «PWM_A» (коэффициент заполнения ШИМ).
    • Сброс регистра в «0» приводит к отключению насоса «A».
    • Запись любого значения приведёт к сбросу регистра "Holding Registers" [0x0007] «TMR_A» который позволяет включать насос «A» на заданное время.
    • Значение по умолчанию: 0.
    • ВАЖНО:
      • Все насосы автоматически отключаются сторожевым таймером, если он включён регистром "Coils" [0x0001] «WDT» и досчитал до 0.
      • Насос автоматически отключается при отсутствии жидкости на его датчике MIN.
  • 0x0003 «PUMP_B» - Регистр включения насоса «B».
    • Установка регистра в «1» приводит к включению насоса «B» со скоростью заданной регистром "Holding Registers" [0x0005] «PWM_B» (коэффициент заполнения ШИМ).
    • Сброс регистра в «0» приводит к отключению насоса «B».
    • Запись любого значения приведёт к сбросу регистра "Holding Registers" [0x0008] «TMR_B» который позволяет включать насос «B» на заданное время.
    • Значение по умолчанию: 0.
    • ВАЖНО:
      • Все насосы автоматически отключаются сторожевым таймером, если он включён регистром "Coils" [0x0001] «WDT» и досчитал до 0.
      • Насос автоматически отключается при отсутствии жидкости на его датчике MIN.
  • 0x0004 «PUMP_C» - Регистр включения насоса «C».
    • Установка регистра в «1» приводит к включению насоса «C» со скоростью заданной регистром "Holding Registers" [0x0006] «PWM_C» (коэффициент заполнения ШИМ).
    • Сброс регистра в «0» приводит к отключению насоса «C».
    • Запись любого значения приведёт к сбросу регистра "Holding Registers" [0x0009] «TMR_C» который позволяет включать насос «C» на заданное время.
    • Значение по умолчанию: 0.
    • ВАЖНО:
      • Все насосы автоматически отключаются сторожевым таймером, если он включён регистром "Coils" [0x0001] «WDT» и досчитал до 0.
      • Насос автоматически отключается при отсутствии жидкости на его датчике MIN.
  • 0x0005 «PUMP_12V_A» - Регистр включения коррекции питания для насоса «A» до 12В.
    • Установка регистра в «1» включает коррекцию питания насоса «A» до 12В. Изменение входного питания от 12 до 24В не будет влиять на скорость работы насоса. Насос будет работать так, как при подаче 12В ±10% на разъём RJ45.
    • Сброс регистра в «0» приводит к отключению коррекции питания насоса «A».
    • Значение по умолчанию: 1.
    • Данный регистр не влияет на поведение других регистров.
  • 0x0006 «PUMP_12V_B» - Регистр включения коррекции питания для насоса «B» до 12В.
    • Установка регистра в «1» включает коррекцию питания насоса «B» до 12В. Изменение входного питания от 12 до 24В не будет влиять на скорость работы насоса. Насос будет работать так, как при подаче 12В ±10% на разъём RJ45.
    • Сброс регистра в «0» приводит к отключению коррекции питания насоса «B».
    • Значение по умолчанию: 1.
    • Данный регистр не влияет на поведение других регистров.
  • 0x0007 «PUMP_12V_C» - Регистр включения коррекции питания для насоса «C» до 12В.
    • Установка регистра в «1» включает коррекцию питания насоса «C» до 12В. Изменение входного питания от 12 до 24В не будет влиять на скорость работы насоса. Насос будет работать так, как при подаче 12В ±10% на разъём RJ45.
    • Сброс регистра в «0» приводит к отключению коррекции питания насоса «C».
    • Значение по умолчанию: 1.
    • Данный регистр не влияет на поведение других регистров.
  • 0x0100 «CHANGE_ID» - Регистр является флагом смены адреса модуля на шине.
    • Установка регистра в «1» осуществляется аппаратно, после успешной смены адреса.
    • Сброс регистра осуществляется программно, записью «0».
    • Значение по умолчанию: 0.
  • 0x0101-0x01F7 «DO_BAN_ID» - Регистры запрещённых адресов.
    • Если установить в «1» регистр, младший байт адреса которого совпадает с текущим адресом модуля на шине, то модуль не будет менять свой адрес в режиме смены адреса на случайное число.
    • При смене адреса модуля на случайное число, новый случайный адрес модуля не будет равен младшему байту адреса тех регистров, в которых записана «1».
    • Сброс регистра в «0» разрешает использовать младший байт адреса регистра для выбора случайного адреса модуля на шине.
    • Значение по умолчанию: 0.
    • Подробный пример доступен ниже, в разделе «режим выбора случайного адреса».

Регистры "Input Registers" (AI):

Двухбайтные регистры только для чтения.

  • 0x0000 «VIN» - Регистр содержит напряжение питания (от 0 мВ до 65'535 мВ) получаемое устройством с разъема RJ45.

Регистры "Holding Registers" (AO):

Двухбайтные регистры для чтения и записи.

  • 0x0000 «WDT» - Регистр установки времени сторожевого таймера насосов в миллисекундах.
    • Запись значения установит время сторожевого таймера насосов.
    • Если работа сторожевого таймера реле разрешена регистром "Coils" [0x0001] «WDT», то он будет уменьшать записанное время (каждую миллисекунду) пока не достигнет 0.
    • Если сторожевой таймер досчитает до 0, то все насосы будут отключены.
    • Насосы будут работать, пока контроллер периодически устанавливает время сторожевого таймера, не давая ему досчитать до 0 (например, каждую секунду записывает время 1500мс). Как только контроллер перестанет отсылать запросы или пропадёт соединение по шине RS485, то таймер досчитает до 0 и насосы отключатся.
    • Чтение регистра вернёт время в миллисекундах оставшееся до сброса таймера.
    • Значение по умолчанию: 10'000мс.
  • 0x0001 «FREQ_A» - Регистр установки частоты ШИМ насоса «A» в Гц.
    • Запись значения установит новую частоту ШИМ для насоса «A».
    • Допускается устанавливать частоту от 1 до 10'000 Гц.
      • При записи значения <1, запишется 1 (1Гц).
      • При записи значения >10'000, запишется 10'000 (10кГц).
    • Чтение регистра вернёт его значение от 1 до 10'000.
    • Значение по умолчанию: 1'000 Гц.
  • 0x0002 «FREQ_B» - Регистр установки частоты ШИМ насоса «B» в Гц.
    • Запись значения установит новую частоту ШИМ для насоса «B».
    • Допускается устанавливать частоту от 1 до 10'000 Гц.
      • При записи значения <1, запишется 1 (1Гц).
      • При записи значения >10'000, запишется 10'000 (10кГц).
    • Чтение регистра вернёт его значение от 1 до 10'000.
    • Значение по умолчанию: 1'000 Гц.
  • 0x0003 «FREQ_C» - Регистр установки частоты ШИМ насоса «C» в Гц.
    • Запись значения установит новую частоту ШИМ для насоса «C».
    • Допускается устанавливать частоту от 1 до 10'000 Гц.
      • При записи значения <1, запишется 1 (1Гц).
      • При записи значения >10'000, запишется 10'000 (10кГц).
    • Чтение регистра вернёт его значение от 1 до 10'000.
    • Значение по умолчанию: 1'000 Гц.
  • 0x0004 «PWM_A» - Регистр установки скорости насоса «A».
    • Значение от 1 до 255 соответствует коэффициенту заполнения ШИМ от 0,4% до 100%.
      • При записи значения <1, запишется 1 (0,4%).
      • При записи значения >255, запишется 255 (100%).
    • Запись значений не влияет на регистр "Coils" [0x0002] «PUMP_A», а значит не включает и не выключает насос «A».
    • Чтение регистра вернёт его значение от 1 до 255.
    • Значение по умолчанию: 255 (100%).
  • 0x0005 «PWM_B» - Регистр установки скорости насоса «B».
    • Значение от 1 до 255 соответствует коэффициенту заполнения ШИМ от 0,4% до 100%.
      • При записи значения <1, запишется 1 (0,4%).
      • При записи значения >255, запишется 255 (100%).
    • Запись значений не влияет на регистр "Coils" [0x0003] «PUMP_B», а значит не включает и не выключает насос «B».
    • Чтение регистра вернёт его значение от 1 до 255.
    • Значение по умолчанию: 255 (100%).
  • 0x0006 «PWM_C» - Регистр установки скорости насоса «C».
    • Значение от 1 до 255 соответствует коэффициенту заполнения ШИМ от 0,4% до 100%.
      • При записи значения <1, запишется 1 (0,4%).
      • При записи значения >255, запишется 255 (100%).
    • Запись значений не влияет на регистр "Coils" [0x0004] «PUMP_C», а значит не включает и не выключает насос «C».
    • Чтение регистра вернёт его значение от 1 до 255.
    • Значение по умолчанию: 255 (100%).
  • 0x0007 «TMR_A» - Регистр включения насоса «A» на заданное время.
    • Значение регистра от 0 до 65535 соответствует времени от 0,0 до 6553,5 секунд.
    • Запись ненулевого значения приведёт к установке регистра "Coils" [0x0002] «PUMP_A» отвечающего за включение насоса «A».
    • Значение регистра автоматически уменьшается по времени, пока не достигнет 0.
    • Достижение или запись 0 приведёт к сбросу регистра "Coils" [0x0002] «PUMP_A».
    • Чтение регистра вернёт время оставшееся до отключения насоса «A».
    • Значение по умолчанию: 0 сек.
  • 0x0008 «TMR_B» - Регистр включения насоса «B» на заданное время.
    • Значение регистра от 0 до 65535 соответствует времени от 0,0 до 6553,5 секунд.
    • Запись ненулевого значения приведёт к установке регистра "Coils" [0x0003] «PUMP_B» отвечающего за включение насоса «B».
    • Значение регистра автоматически уменьшается по времени, пока не достигнет 0.
    • Достижение или запись 0 приведёт к сбросу регистра "Coils" [0x0002] «PUMP_B».
    • Чтение регистра вернёт время оставшееся до отключения насоса «B».
    • Значение по умолчанию: 0 сек.
  • 0x0009 «TMR_C» - Регистр включения насоса «C» на заданное время.
    • Значение регистра от 0 до 65535 соответствует времени от 0,0 до 6553,5 секунд.
    • Запись ненулевого значения приведёт к установке регистра "Coils" [0x0004] «PUMP_C» отвечающего за включение насоса «C».
    • Значение регистра автоматически уменьшается по времени, пока не достигнет 0.
    • Достижение или запись 0 приведёт к сбросу регистра "Coils" [0x0004] «PUMP_C».
    • Чтение регистра вернёт время оставшееся до отключения насоса «C».
    • Значение по умолчанию: 0 сек.
  • 0x0100 «ACK_ID» - Регистр подтверждения смены адреса модуля на шине.
    • Запись значения 0xF0A5 подтверждает новый адрес модуля.
    • Подтверждение адреса модуля осуществляется по подтверждаемому адресу модуля.
    • При чтении регистра возвращается 0x0000.
    • Сначала записывают адрес в регистр "Holding Registers" [0x0110] «SET_ID» и не позднее 2 секунд подтверждают. Если адрес не подтвердить, модуль вернёт прежний адрес. Если адрес модуля не менялся, то запись любого значения в регистр подтверждения будет проигнорирована.
    • Подробный пример доступен ниже, в разделе «установка адреса на шине».
  • 0x0101 «ACK_SPEED» - Регистр подтверждения смены скорости передачи данных по шине.
    • Запись значения 0xF0A5 подтверждает новую скорость передачи данных по шине.
    • Подтверждение скорости осуществляется на подтверждаемой скорости.
    • При чтении регистра возвращается 0x0000.
    • Сначала записывают скорость в регистр "Holding Registers" [0x0111] «SET_SPEED» и не позднее 2 секунд подтверждают. Если скорость не подтвердить, модуль вернёт прежнюю скорость. Если скорость не менялась, то запись любого значения в регистр подтверждения будет проигнорирована.
    • Подробный пример доступен ниже, в разделе «установка скорости шины».
  • 0x0102 «ACK_TYPE» - Регистр подтверждения смены типа протокола Modbus.
    • Запись значения 0xF0A5 подтверждает новый тип протокола Modbus.
    • Подтверждение типа протокола осуществляется по подтверждаемому типу протокола.
    • При чтении регистра возвращается 0x0000.
    • Сначала записывают тип протокола в регистр "Holding Registers" [0x0112] «SET_TYPE» и не позднее 2 секунд подтверждают. Если тип протокола не подтвердить, модуль вернёт прежний тип протокола. Если тип протокола не менялся, то запись любого значения в регистр подтверждения будет проигнорирована.
    • Подробный пример доступен ниже, в разделе «установка типа протокола Modbus».
  • 0x0110 «SET_ID» - Регистр установки адреса модуля на шине.
    • Запись 0x00XX приведёт к смене адреса модуля на значение XX до отключения питания.
    • Запись 0xFFXX приведёт к смене адреса модуля на значение XX с сохранением.
    • Запись 0x0000 приведёт к смене адреса модуля на случайное число до откл. питания.
    • XX - это значение нового адреса от 1 до 247.
    • После записи, модуль устанавливает новый адрес на 2 секунды, в течении которых адрес нужно подтвердить регистром "Holding Registers" [0x0100] «ACK_ID». Если адрес не подтвердить, модуль вернёт прежний адрес. Если адрес записывается с сохранением в энергонезависимую память, то после подтверждения модуль будет занят около 50 миллисекунд.
    • При чтении регистра возвращается двухбайтное значение, где старший байт равен случайному число, а младший равен текущему адресу модуля на шине. Наличие случайного числа в ответе, позволяет выявить модули с одинаковыми адресами, так как контрольная сумма их одновременного ответа не совпадёт.
    • Подробный пример доступен ниже, в разделе «установка адреса на шине»
  • 0x0111 «SET_SPEED» - Регистр установки скорости передачи данных по шине.
    • Запись 0x00XX приведёт к смене скорости на значение XX до отключения питания.
    • Запись 0xFFXX приведёт к смене скорости на значение XX с сохранением.
    • XX - это число: 2, 4, 8, 16, 24, или 48. Новая скорость равна XX * 2400 бит/сек.
    • После записи, модуль устанавливает новую скорость на 2 секунды, в течении которых скорость нужно подтвердить регистром "Holding Registers" [0x0101] «ACK_SPEED». Если скорость не подтвердить, модуль вернёт прежнюю скорость. Если скорость записывается с сохранением в энергонезависимую память, то после подтверждения модуль будет занят около 50 миллисекунд.
    • При чтении регистра возвращается двухбайтное значение, где старший байт равен случайному число, а младший равен текущей скорости шины / 2400.
    • Подробный пример доступен ниже, в разделе «установка скорости шины».
  • 0x0112 «SET_TYPE» - Регистр установки типа протокола Modbus.
    • Запись 0x00XX приведёт к смене типа протокола Modbus до отключения питания.
    • Запись 0xFFXX приведёт к смене типа протокола с сохранением.
    • XX - это число 00 (Modbus RTU), или FF (Modbus ASCII).
    • После записи, модуль устанавливает новый тип протокола на 2 секунды, в течении которых тип протокола нужно подтвердить регистром "Holding Registers" [0x0102] «ACK_TYPE». Если тип протокола не подтвердить, модуль вернёт прежний тип протокола. Если тип протокола записывается с сохранением в энергонезависимую память, то после подтверждения модуль будет занят около 50 миллисекунд.
    • При чтении регистра возвращается двухбайтное значение, где старший байт равен случайному число, а младший определяет текущий тип протокола: 00-RTU, FF-ASCII.
    • Подробный пример доступен ниже, в разделе «установка типа протокола Modbus».
  • 0x0120 «USER_DATA» - Регистр пользовательского значения.
    • Запись любого числа приведёт к его сохранению в энергонезависимую память.
    • При чтении регистра возвращается ранее записанное число.
    • Значение по умолчанию: 0.
    • После записи любого числа, модуль будет занят около 50 миллисекунд.

Регистр диагностики "Diagnostic Register":

Двухбайтный регистр только для чтения.

Каждый бит регистра диагностики является флагом ошибки. В соответствии с протоколом Modbus данные регистра диагностики можно получить отправив запрос с командой 0x08 «Diagnostic» и кодом функции 0x0002 «Return Diagnostic Register». В библиотеке iarduino_Modbus эту команду выполняет функция объект.diagnostic(ID,2);

  • Биты 15...0 - Не используются (всегда сброшены в «0»).

Доступ к данным регистров:

Так как модуль использует протокол передачи данных Modbus, то и доступ к данным описан им. Ознакомиться с протоколом можно на странице Wiki - Работа с протоколом Modbus RTU/ASCI по шине RS485.

Получение информации об устройстве:

В соответствии с протоколом Modbus для получения информации об устройстве используется запрос с командой 0x11 «Report Slave ID». В библиотеке iarduino_Modbus эту команду выполняет функция объект.getInfo(ID); Ответ на запрос содержит следующие данные:

  • 1 байт. Идентификатор линейки устройств. Для всех устройств iarduino = 0x77.
  • 1 байт. Индикатор пуска. Может принимать одно из двух значений: 0xFF-вкл, 0x00-выкл.
  • 1 байт. ID-адрес модуля на шине. По умолчанию для блока насосов = 0x02.
  • 1 байт. Идентификатор устройства. 2 - блок на 2 насоса, 3 - блок на 3 насоса, 4 - 1 насос.
  • 1 байт. Версия прошивки устройства. Значение от 1 до 255.
  • 2 байта. Регистр диагностики. Каждый бит регистра является флагом ошибки.
  • 1 байт. Количество регистров DO «Coils» с адресами до 0x00FF.
  • 1 байт. Количество регистров DI «Discrete Input» с адресами до 0x00FF.
  • 1 байт. Количество регистров AO «Holding Registers» с адресами до 0x00FF.
  • 1 байт. Количество регистров AI «Input Registers» с адресами до 0x00FF.
  • 4 байта. Время задержки в мкс выдерживаемое модулем между запросом и ответом.

Установка адреса на шине:

Все модули iarduino предназначенные для работы по протоколу Modbus позволяют назначать себе адрес на шине, как временно (новый адрес действует пока есть питание), так и постоянно (новый адрес сохраняется в энергонезависимую память и действует даже после отключения питания). Блоки перистальтическиx насосов по умолчанию имеют адрес 0x02.

Допускается указывать адреса от 1 до 247 включительно.

Запросы отправленные с адресом 0 являются широковещательными, они адресованы сразу всем модулям на шине. Все устройства выполняют данный запрос, но не отвечают на него.

Установка адреса (без сохранения):

Если в регистр "Holding Register" [0x0110] «SET_ID» записать двухбайтное значение, где старший байт равен 0, а младший байт равен числу от 1 до 247, то модуль изменит свой адрес на значение младшего байта. Новый адрес будет действовать в течении 2 секунд, за это время нужно подтвердить смену адреса. Если смену адреса не подтвердить, модуль вернёт прежний адрес.

Для подтверждения нового адреса нужно записать значение 0xF0A5 в регистр "Holding Register" [0x0100] «ACK_ID». Запрос на запись отправляется модулю с новым адресом на шине или широковещательно.

Подтверждённый адрес будет действовать до отключения питания.

Установка адреса (с сохранением):

Если в регистр "Holding Register" [0x0110] «SET_ID» записать двухбайтное значение, где старший байт равен 255, а младший байт равен числу от 1 до 247, то модуль изменит свой адрес на значение младшего байта. Новый адрес будет действовать в течении 2 секунд, за это время нужно подтвердить смену адреса. Если смену адреса не подтвердить, модуль вернёт прежний адрес.

Для подтверждения нового адреса нужно записать значение 0xF0A5 в регистр "Holding Register" [0x0100] «ACK_ID». Запрос на запись отправляется модулю с новым адресом на шине или широковещательно.

Подтверждённый адрес сохранится в Flash память и будет действовать даже после отключения питания. Сохранение адреса в Flash память занимает не менее 50 мс.

Режим выбора случайного адреса (без сохранения):

Если в регистр "Holding Register" [0x0110] «SET_ID» записать 0, то модуль изменит свой адрес на случайное число. Новый адрес будет действовать в течении 2 секунд, за это время нужно подтвердить смену адреса. Если смену адреса не подтвердить, модуль вернёт прежний адрес.

Для подтверждения нового адреса нужно записать значение 0xF0A5 в регистр "Holding Register" [0x0100] «ACK_ID». Запрос на запись отправляется модулю с новым адресом на шине или широковещательно.

Подтверждённый адрес будет действовать до отключения питания.

    Регистры "Coil" [0x0101-0x01F7] «BAN_ID» запрещают выбирать и менять адрес модуля.
  • Если записать 1 в регистр "Coil" [0x01AB], то модуль не выберет адрес (AB)16 в режиме выбора случайного адреса и не будет менять адрес, если текущий адрес модуля равен (AB)16.
  • Если записать 1 в регистр "Coil" [0x01CD], то модуль не выберет адрес (CD)16 в режиме выбора случайного адреса и не будет менять адрес, если текущий адрес модуля равен (CD)16.

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

    Предположим, на шине есть 4 устройства с адресами: 2, 3, 3, 4. То есть, адрес 3 принадлежит сразу двум устройствам.
  • Широковещательно записываем 1 в регистры "Coil" [0x0102] и [0x0104] «BAN_ID».
  • Широковещательно записываем 0 в регистр "Holding Register" [0x0110] «SET_ID».
  • Модуль с адресом 2 не изменит свой адрес, так как регистр "Coil" [0x0102] «BAN_ID» ==1.
  • Модуль с адресом 4 не изменит свой адрес, так как регистр "Coil" [0x0104] «BAN_ID» ==1.
  • Модули с адресами 3 изменят свой адрес на случайное число от 1 до 247, кроме 2 и 4, так как в регистрах "Coil" [0x0102] «BAN_ID» и "Coil" [0x0104] «BAN_ID» записана 1.
  • Подтверждаем смену адреса отправив широковещательный запрос на запись значения 0xF0A5 в регистр "Holding Register" [0x0100] «ACK_ID».
  • В результате на шине останутся два устройства с прежними адресами 2, 4 и два устройства с новыми адресами, которые они выбрали сами в случайном порядке. Теперь можно найти два новых адреса на шине и изменить их, например, на 1 и 3 с сохранением или без.

Установка скорости шины:

Все модули iarduino предназначенные для работы по протоколу Modbus на шине RS485 позволяют менять скорость работы на шине, как временно (новая скорость действует пока есть питание), так и постоянно (новая скорость сохраняется в энергонезависимую память и действует даже после отключения питания).

По умолчанию все модули работают на скорости 9600 бит/сек.

Установка скорости (без сохранения):

Если в регистр "Holding Register" [0x0111] «SET_SPEED» записать двухбайтное значение, где старший байт равен 0, а младший байт равен числу 2, 4, 8, 16, 24, или 48, то модуль изменит свою скорость работы на шине. Новая скорость = 2400 умноженное на значение младшего байта, будет действовать в течении 2 секунд, за это время нужно подтвердить смену скорости. Если смену скорости не подтвердить, модуль вернёт прежнюю скорость.

Для подтверждения новой скорости нужно записать значение 0xF0A5 в регистр "Holding Register" [0x0101] «ACK_SPEED». Запрос на запись отправляется модулю с новой скоростью.

Подтверждённая скорость будет действовать до отключения питания.

Установка скорости (с сохранением):

Если в регистр "Holding Register" [0x0111] «SET_SPEED» записать двухбайтное значение, где старший байт равен 255, а младший байт равен числу 2, 4, 8, 16, 24, или 48, то модуль изменит свою скорость работы на шине. Новая скорость = 2400 умноженное на значение младшего байта, будет действовать в течении 2 секунд, за это время нужно подтвердить смену скорости. Если смену скорости не подтвердить, модуль вернёт прежнюю скорость.

Для подтверждения новой скорости нужно записать значение 0xF0A5 в регистр "Holding Register" [0x0101] «ACK_SPEED». Запрос на запись отправляется модулю с новой скоростью.

Подтверждённая скорость сохранится в Flash память и будет действовать даже после отключения питания. Сохранение скорости в Flash память занимает не менее 50 мс.

Установка типа протокола Modbus:

Все модули iarduino предназначенные для работы по протоколу Modbus позволяют менять тип протокола (RTU или ASCII), как временно (новый тип протокола действует пока есть питание), так и постоянно (новый тип протокола сохраняется в энергонезависимую память и действует даже после отключения питания).

По умолчанию все модули работают по протоколу Modbus RTU.

Установка типа протокола (без сохранения):

Если в регистр "Holding Register" [0x0112] «SET_TYPE» записать двухбайтное значение, где старший байт равен 0, а младший байт равен числу 0 (RTU) или 255 (ASCII), то модуль изменит тип протокола. Новый тип протокола, будет действовать в течении 2 секунд, за это время нужно подтвердить смену типа протокола. Если смену не подтвердить, модуль вернёт прежний тип протокола.

Для подтверждения нового типа протокола нужно записать значение 0xF0A5 в регистр "Holding Register" [0x0102] «ACK_TYPE». Запрос на запись отправляется модулю по новому типу протокола.

Подтверждённый тип протокола будет действовать до отключения питания.

Установка типа протокола (с сохранением):

Если в регистр "Holding Register" [0x0112] «SET_TYPE» записать двухбайтное значение, где старший байт равен 255, а младший байт равен числу 0 (RTU) или 255 (ASCII), то модуль изменит тип протокола. Новый тип протокола, будет действовать в течении 2 секунд, за это время нужно подтвердить смену типа протокола. Если смену не подтвердить, модуль вернёт прежний тип протокола.

Для подтверждения нового типа протокола нужно записать значение 0xF0A5 в регистр "Holding Register" [0x0102] «ACK_TYPE». Запрос на запись отправляется модулю по новому типу протокола.

Подтверждённый тип протокола сохранится в Flash память и будет действовать даже после отключения питания. Сохранение типа в Flash память занимает не менее 50 мс.

Пример чтения напряжения питания:

Следующий скетч выводит напряжение питания поданное на разъем RJ45.

  • Шина UART0 микроконтроллера (Serial) используется для вывода данных в монитор.
  • Шина UART1 микроконтроллера (Serial1) подключена к конвертеру UART-RS485.
  • Вывод 22 микроконтроллера подключен к выводу DE конвертера UART-RS485.
#include <iarduino_Modbus.h>                         // Подключаем библиотеку для работы по протоколу Modbus.
ModbusClient modbus(Serial1, 22);                    // Создаём объект для работы по протоколу Modbus указывая объект шины UART-RS485 для протокола и вывод DE конвертера UART-RS485.
                                                     //
void setup(){                                        //
     Serial .begin(9600); while(!Serial );           // Инициируем передачу данных в монитор последовательного порта, указав его скорость.
     Serial1.begin(9600); while(!Serial1);           // Инициируем работу с шиной UATR-RS485 указав её скорость.
     modbus.begin();                                 // Инициируем работу по протоколу Modbus.
//   modbus.setTimeout(10);                          // Указываем максимальное время ожидания ответа по протоколу Modbus.
//   modbus.setDelay(4);                             // Указываем минимальный интервал между отправляемыми сообщениями по протоколу Modbus.
//   modbus.setTypeMB( MODBUS_RTU );                 // Указываем тип протокола Modbus: MODBUS_RTU (по умолчанию), или MODBUS_ASCII.
}                                                    //
                                                     //
void loop(){                                         //
     delay(1000);                                    //
//   Читаем регистр "Input Register" [0x0000] «VIN»: //
     int32_t i = modbus.inputRegisterRead(2, 0);     // Функция принимает адрес модуля и адрес регистра, возвращает прочитанное значение (0...65535), или -1 при неудаче.
//   Проверяем успешность чтения регистра:           //
     if( i<0 ){ Serial.println("Error"); }           // Если прочитанное значение i<0, значит чтение выполнено с ошибкой.
//   Выводим напряжение в вольтах в монитор:         //
     else { Serial.println( (float)i/1000.0f ); }    // Выводим прочитанное значение, преобразовав милливольты в вольты.
}                                                    //

В данном примере чтение данных осуществлялось при помощи библиотеки iarduino_Modbus предназначенной для работы по протоколу Modbus на шине RS485.

На странице Wiki - Блок перистальтическиx насосов RS485 / Modbus рассказано как работать с блоком перистальтическиx насосов используя дополнительную библиотеку iarduino_MB_Pump.

Габариты:

Ссылки:




Обсуждение

Гарантии и возврат Используя сайт Вы соглашаетесь с условями