Contrôler un variateur de vitesse NFLIXIN 9600 Series en Modbus

Bonjour,
Je suis en train d’installer un variateur de vitesse sur ma pompe de piscine 0.8 kW monophasée.
J’utilise le variateur NFLIXIN 9600 Series http://nflixin.com/en/?p=103.

J’arrive à lire les informations en provenance du variateur (tension, fréquence, courant, code erreur, …) en lisant les registres à partir de 7000H, mais je n’ai pas d’informations pour le piloter.

Après tâtonnements, j’ai réussi à envoyer la fréquence demandée en écrivant le registre 000EH.
Exemple: 000EH = 4000 pour faire fonctionner le moteur à 40.00 Hz.
Cependant, je n’arrive pas à piloter la marche et l’arrêt.

La documentation (https://opendevices.ru/wp-content/uploads/2020/01/9600_series__User_manual.pdf) indique:

  • Register 1000H = fréquence demandée (-100% à 100%)
  • Registre 2000H = commandes ?

image

Est-ce que quelqu’un aurait des informations complémentaires ?

Bonjour,

Est-ce que P0-14 qui est la limite basse de fréquence ne correspondrait pas au registre 000E ? 1’ en décimal = E en hexa ?

Pour la section U0 c’est clair mais pour le reste pas vrament
image

l’adresse de base est 0x7000 donc u0-10 prend pour adresse 0x700A

Pour les commandes run stop forward de ce que je comprend il faudrait écrire les paramètres de A7-08 à l’adresse 0x2000

Bonjour,
Je viens de recevoir un VFD 9600 et je souhaite faire exactement la même chose que vous : commander ma pompe de piscine.
Pour info, j’avais un autre VFD (AT2) avant, qui a commandé la pompe pendant plus d’un an sans problème (réduction de vitesse) via ESPHome. Malheureusement, il est mort à cause d’une mauvaise manip. Par ailleurs, j’utilise déjà le MODBUS en liaison avec une chaudière…
Je souhaite utiliser ce VFD en MODBUS pour changer de vitesse et lire le courant (pour évaluer l’encrassement du filtre), or la doc me parait très confuse.
Pouvez-vous m’aider pour me dire par exemple comment vous avez obtenu le courant (YAML ou suite de commandes MODBUS).
Si vous pouvez m’aider, je gagnerai un temps précieux !

Correction : Pour le monitoring, a priori pas de problème. Par contre pour la commande pour faire fonctionner à 40Hz, ne faudrait-il pas utiliser 0008H comme adresse ?

Pour communiquer avec le variateur en Modbus, il faut:

  1. Configurer les paramètres Modbus du variateur:

    • paramètre PD-00 « Baud Rate »
    • paramètre PD-01 « Data Format »
    • paramètre PD-02 « Local Address »
    • paramètre PD-03 « Response Delay »
    • paramètre PD-04 « Communication Timeout »
    • paramètre PD-05 « Protocol Selection » = 1 ‹ Standard Modbus ›
    • paramètre PD-06 « Current Resolution »
  2. Configurer la source des commandes du variateur:

    • paramètre P0-02 « Command Source selection » = 2 ‹ Communication Control (LED blinking) ›
    • paramètre P0-03 « Main Frequency source X selection » = 9 ‹ Communication setting ›
  3. Lire les données du variateur en Modbus:

    • Registre 7000H (paramètre U0-00)
    • Registre 7001H (paramètre U0-01)
  4. Contrôler le variateur en Modbus:

    • Registre 1000H (paramètre A7-06) = -10000 à 100000 (-100.00% à 100.00%)
    • Registre 2000H (paramètre A7-08) = 1 ‹ Forward RUN ›, 2 ‹ Reverse RUN ›, …, 5 ‹ Coast to stop ›, 6 ‹ Decelerate to stop ›, …

Merci beaucoup ! Je bosse aussi la/les doc(s)…
Contrôler le variateur en Modbus : pour contrôler l’entrée fréquence, c’est l’adresse 0008H ? (paramètre P0-08)
Par ailleurs, je ne comprends pas la correspondance entre le paramètre (A7-06 par exemple) et l’adresse (1000H par exemple).

L’adresse 1000H est celle où il faut écrire la fréquence demandée en centièmes de pourcent.
L’adresse 2000H permet d’écrire la commande 1=avant, 2=arrière, …, les valeurs à écrire sont décrites dans le paramètre A7-08

Exemple pour faire fonctionner le variateur en marche avant à 35 Hz (avec P0-10 « Maximum Frequency » = 50 Hz):

  • Registre 1000H = 7000 (70% de P0-10, soit 35 Hz)
  • Registre 2000H = 1 (Forward RUN)

Un grand merci ! J’essaye dès que je peux (car pour l’instant le variateur est loin de moi !).
Je vous tiens au courant…
Cela dit, dans une doc, 1000H correspond à : Communication setup value (-10000 to 10000)( Decimal)…- Extrait de la la doc spécifique MODBUS, WK600 series modbus RS485.DOCX, voir http://www.cnweiken.cn/en/page/56.htm?spm=a2g0s.imconversation.0.0.688d3e5f9rEZlL-.
Par contre, dans la doc principale, comme vous l’indiquez, on lit ce qui suit :
Screenshot_14

Bonne Année 2024 !
J’ai pu jouer avec le convertisseur. Et j’ai pu faire une petite synthèse pour ceux que cela intéresse.
Je rappelle que dans mon cas, je contrôle une pompe de filtration de piscine) et je cherchais à obtenir le courant consommé (pour mesurer le taux d’encrassement) et à pouvoir commander le démarrage, la vitesse et l’arrêt).
Paramétrage WK600 :


En Yaml esphome, un extrait du code :

  id: mod_bus
  tx_pin: TX
  rx_pin: RX
  baud_rate: 9600
    
modbus:
  id: mod_bus_inverter
  
modbus_controller:
  id: inverter
  address: 1
  modbus_id: mod_bus_inverter
  update_interval: 5s
  command_throttle: 1000ms

sensor:
  - platform: modbus_controller
    modbus_controller_id: inverter
    id: inverter_current
    name: "Courant pompe"
    address: 0x7004
    register_type: holding
    value_type: S_WORD
    unit_of_measurement: "mA"
    filters:
      multiply: 100

output:
  - id: low_speed_output
    platform: gpio
    inverted: true
    pin: GPIO32
    
  - platform: modbus_controller
    modbus_controller_id: inverter
    id: pump_stop
    write_lambda: |-
      payload.push_back(6);
      return x ;
    address: 0x2000
    value_type: U_WORD

  - platform: modbus_controller
    modbus_controller_id: inverter
    id: pump_start
    write_lambda: |-
      payload.push_back(1);
      return x ;
    address: 0x2000
    value_type: U_WORD

  - platform: modbus_controller
    modbus_controller_id: inverter
    id: low_speed
    write_lambda: |-
      payload.push_back(6000);
      return x ;
    address: 0x1000
    value_type: U_WORD

  - platform: modbus_controller
    modbus_controller_id: inverter
    id: high_speed
    write_lambda: |-
      payload.push_back(10000);
      return x ;
    address: 0x1000
    value_type: U_WORD

2 remarques :

  • la première est que pour lire les données sur les adresses 7000H, il faut mettre le type de registre en « holding ». Avec le type « read », cela ne fonctionne pas.
  • la seconde est que pour activer le modbus en écriture, j’avais utilisé les components « light » et « output », mais je trouvais cela compliqué. J’ai essayé en passant pas des « switch », mais, les switchs Modbus étaient rafraichis au rythme de la lecture des sensors. Du coup en final, j’ai écrit directement avec l’UART. Le code est beaucoup plus simple et lisible.
  - platform: template
    id: high_speed
    name: "high_speed"
    optimistic: True
    turn_on_action:
      - uart.write: [0x01 , 0x06, 0x10, 0x00, 0x27, 0x10, 0x97, 0x36] # vitesse 50Hz
    turn_off_action:
      - uart.write: [0x01 , 0x06, 0x10, 0x00, 0x17, 0x70, 0x83, 0x1E] # vitesse 30 Hz

  - platform: template
    name: "pump_activation"
    id: pump_activation
    optimistic: True
    restore_mode: ALWAYS_OFF
    turn_on_action:
        - switch.turn_on: inverter_supply                               # convertisseur on
        - delay: 5s
        - switch.turn_on: high_speed
        - delay: 2s
        - uart.write: [0x01 , 0x06, 0x20, 0x00, 0x0, 0x01, 0x43, 0xCA]  # Start
        - delay: 2s
        - switch.turn_off: high_speed
  
    turn_off_action:
        - uart.write: [0x01 , 0x06, 0x20, 0x00, 0x0, 0x06, 0x02, 0x08]  # Stop
        - delay: 1s 
        - switch.turn_on: high_speed
        - delay: 5s
        - switch.turn_off: inverter_supply                              # convertisseur off