Esp8266 +MAX485 = частотник по Modbus

N0rdling

★✩✩✩✩✩✩
15 Янв 2020
156
21
Всех приветствую!
Имеется esp8266 и переходник на микросхем MAX485, а так же частотный преобразователь, который поддерживает управление по Rs485 по протоколу rtu или ascii (китайцы не дают внятной инструкции). Какую библиотеку использовать в данной связке: softserial, modbus rtu или другую?
 

Svod

✩✩✩✩✩✩✩
22 Апр 2022
17
8
Можно подробнее? Какое название у частотника хотябы? Скорее всего протокол Modbus rtu.
 

bort707

★★★★★★✩
21 Сен 2020
3,330
964
что за привычка выкладывать скриншоты? если это PDF документ. почему его не выложить в форум вместо нечитаемой картинки?
 
Изменено:

N0rdling

★✩✩✩✩✩✩
15 Янв 2020
156
21
@bort707, вы прежде чем выкладывать нервные посты убедитесь в своей правоте. Это скрин, сделанный с карточки товара в Алике. Конечно, у какого-то китайца есть этот пдф, а у меня только этот скрин...
 

Svod

✩✩✩✩✩✩✩
22 Апр 2022
17
8
В принципе этих регистров достаточно для управления и возможно связать с ЕСП. Только необходимо убедится в логических уровнях, а то у китайцев разное понимание где ttl уровень а где промышленные уровни.
 

N0rdling

★✩✩✩✩✩✩
15 Янв 2020
156
21
Есть и пдф, но в нем описания протокола rs485 нет:

@Svod, поясните в общих чертах, нужно послать стартовый бит, затем адрес частотника, затем регистр, команду и значение, А в конце контрольную сумму?
 

Вложения

Изменено:

Svod

✩✩✩✩✩✩✩
22 Апр 2022
17
8
Адрес частотника/функция/начальный адрес регистра/количество регистров/данные/и возможно crc

Судя по скрину то китайцы указали самое необходимое начиная с адресов регистров а остальное значить по стандарту
 

N0rdling

★✩✩✩✩✩✩
15 Янв 2020
156
21
@bort707, вы имели дело с подобным случаем, какую библиотеку использовать?
 

zhelezaka

✩✩✩✩✩✩✩
11 Май 2025
2
1
Занимаюсь запуском в esphome связки esp8266 + RS485 <-> VFC-M0701S, увидел этот некропост, если кому еще актуально, в расширенной доке от производителя есть все нужные данные:

P00 - источник основной частоты
0 - кнопки на панельке
1,2 - потенциометр на панельке в разных режимах
...
5 - по 485 интерфейсу
...
P01 - источник сигналов управления
00 - с панельки
...
02 - по 485 интерфейсу
P100 - адрес устройства на шине 485 (по умолчанию 8)
P101 - параметры шины, по умолчанию 2 = 9600, 8-bit data, no check, 1-bit stop bit
P102 - 485 Frequency setpoint, 0-400 (по умолчанию 50)
P103 - 485 Run Settings (если убрать детали типа направления и толчкового режима - пишем сюда 1 - старт, 0 - стоп)

0 адреса регистров = 40000 таким образом для чтения записи P00, нужно опрашивать адрес 40000, в мануале есть даже примеры запросов
Example of reading P00 station No. 039C40 0001 CRCL CRCH
где 03 - read multiple holdig registers (это тип операции в терминах модбас), 9C40 - адрес 40000 в hexadecimal, 0001 - количество регистров подлежащих чтению.
Адрес слейва нужен, по умолчанию на моем частотнике он совпал с тем, что в мануале - 8.
Рекомендую ознакомиться с протоколом поигравшись с частотником с помощью ПК, используя любой эмулятор модбас мастера (использовал QModBus) и преобразователь usb-serial-485.
 

Вложения

  • Лойс +1
Реакции: bort707

stealth

✩✩✩✩✩✩✩
23 Ноя 2020
2
0
@zhelezaka,
Здравствуйте, хочу так же частотником управлять. Могли бы Вы поделиться кодом?
 

zhelezaka

✩✩✩✩✩✩✩
11 Май 2025
2
1
Добрый день, вот конфиг, который я использую, позволяет выбирать источник управления, включать, выключать и задавать частоту привода вентиляции, работает несколько месяцев, сбоев нет:
vent-controller.yml:
esphome:
  name: vent-controller
  friendly_name: vent-controller
  on_boot:
    priority: 30
    then:
      - select.set:
          id: frequency_input_src
          option: "Интерфейс RS485"
      - select.set:
          id: operation_signal_src
          option: "Интерфейс RS485"
esp8266:
  board: esp01_1m
# Enable logging
logger:
  # baud_rate: 0
  # level: debug
# Enable Home Assistant API
api:
  encryption:
    key: "******"
ota:
  - platform: esphome
    password: "******"
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Vent-Controller"
    password: "******"
captive_portal:
# Modbus setup
uart:
  id: modbus_serial
  tx_pin: GPIO0
  rx_pin: GPIO4
  baud_rate: 9600
  stop_bits: 1
modbus:
  flow_control_pin: GPIO16
  id: modbus1
  uart_id: modbus_serial
  send_wait_time: 500ms
modbus_controller:
- id: vfc_m0701s
  update_interval: 60s
  address: 0x8 # address of the Modbus slave device on the bus
  command_throttle: 500ms
  setup_priority: -10
  modbus_id: modbus1

#============
switch:
  # P103 (40103 = 0x9ca7)
  # 485 Run Settings
  - platform: modbus_controller
    name: "Vent OnOff over 485"
    id: vent_on_off_over_485
    # skip_updates: 5
    use_write_multiple: false
    register_type: holding
    address: 0x9ca7
    bitmask: 1
    # entity_category: config
    icon: "mdi:toggle-switch"
#============
select:
  # Set master frequency input source
  - platform: modbus_controller
    modbus_controller_id: vfc_m0701s
    id: frequency_input_src
    name: "Set master frequency input source"
    address: 0x9c40
    # use_write_multiple: false
    # register_count: 1
    optionsmap:
      "Кнопки на панели привода" : 0
      "Потенциометр на панели привода, вывод 0Hz при задании ниже P35" : 1
      "Потенциометр на панели привода, вывод значения P45 при задании ниже P35" : 2
      "Аналоговый вход, вывод 0Hz при задании ниже P35" : 3
      "Аналоговый вход, вывод значения P45 при задании ниже P35" : 4
      "Интерфейс RS485" : 5
      "PID режим (PID задание приходит со внешнего аналогового входа)" : 6
      "Энкодер (клеммы X2, X3)" : 7
    value_type: U_WORD
  # Set operation signal source setting
  - platform: modbus_controller
    modbus_controller_id: vfc_m0701s
    id: operation_signal_src
    name: "Set operation signal source setting"
    address: 0x9c41
    # use_write_multiple: false
    # register_count: 1
    optionsmap:
      "Кнопки на панели привода" : 0
      "Внешний пульт управления" : 1
      "Интерфейс RS485" : 2
    value_type: U_WORD
#============
number:
  - platform: modbus_controller
    modbus_controller_id: vfc_m0701s
    name: "Set 485 frequency setpoint"
    id: "set_485_frequency_setpoint"
    address: 0x9ca6
    value_type: U_WORD
    min_value: 15
    max_value: 50
    step: 1
    multiply: 100
    mode: slider
    # entity_category: config
#============
sensor:
# P00 (40000 = 0x9c40)
# 00: The master frequency input is controlled by the Digital Operator
# 01: Keypad potentiometer input, 0Hz output below maximum P35 setpoint
# 02: Keypad potentiometer input, output P45 value below maximum P35 setting
# 03: External analog input, output 0Hz below maximum P35 setpoint
# 04: External analog input, output as P45 value below the maximum P35 set value
# 05: 485 Communication given
# 06: PID control mode (PID input is input by external analog quantity)
# 07: Encoder input (X2, X3 to encoder)
- platform: modbus_controller
  modbus_controller_id: vfc_m0701s
  name: "Master frequency input source setting"
  register_type: holding
  address: 0x9c40
  # skip_updates: 10
  accuracy_decimals: 0
  # unit_of_measurement: ""
  value_type: U_WORD
# # P01 (40001 = 0x9c41)
# # 00:the run command is control by that digital operator
# # 01:Operation command is controlled by external terminal
# # 02:485 Communication control
- platform: modbus_controller
  modbus_controller_id: vfc_m0701s
  name: "Operation signal source setting"
  register_type: holding
  address: 0x9c41
  # skip_updates: 10
  accuracy_decimals: 0
  # unit_of_measurement: ""
  value_type: U_WORD
# P43 (40043 = 0x9c6b)
# 0.0~400.0Hz
- platform: modbus_controller
  modbus_controller_id: vfc_m0701s
  name: "Set frequency"
  register_type: holding
  address: 0x9c6b
  unit_of_measurement: "Hz"
  value_type: U_WORD
  accuracy_decimals: 2
  filters:
    - multiply: 0.01
# P102 (40102 = 0x9ca6)
# 0.0~400.0Hz
- platform: modbus_controller
  modbus_controller_id: vfc_m0701s
  name: "485 Frequency setpoint"
  register_type: holding
  address: 0x9ca6
  unit_of_measurement: "Hz"
  value_type: U_WORD
  accuracy_decimals: 2
  filters:
    - multiply: 0.01
И простенькая панелька в HA (кусок, т.к. сама панель содержит много не относящегося к обсуждению):
air.yml:
path: air
title: Air
icon: mdi:air-filter
cards:
  - type: entities
    title: vent control
    entities:
      - entity: input_boolean.auto_vent
        name: Supply ventilation automations
      - entity: number.vent_controller_set_485_frequency_setpoint
        name: Set 485 frequency setpoint
      - entity: select.vent_controller_set_master_frequency_input_source
        name: Set master frequency input source
      - entity: select.vent_controller_set_operation_signal_source_setting
        name: Set operation signal source setting
      - entity: switch.vent_controller_vent_onoff_over_485
        name: Vent OnOff over 485
      - entity: sensor.vent_controller_485_frequency_setpoint
        name: 485 Frequency setpoint
      - entity: sensor.vent_controller_master_frequency_input_source_setting_2
        name: Master frequency input source setting
      - entity: sensor.vent_controller_operation_signal_source_setting_2
        name: Operation signal source setting
ha_vent.png