Помогите подружить частотник DL100 с Arduino, с помощью протокола Modbus и интерфейса RS-485

Здравствуйте товарищи) Есть такая проблема, нужно по нажатию кнопки (которую обрабатывает Nano) управлять частотником.
Пытаюсь разобраться с Modbus`ом, через
ModbusMaster-4-20 библиотеку, получилось на эмулятор отправлять 0,1. Но для частотника нужно отправлять команду 0x0001


, не могу понять как это программно организовать, подскажите пожалуйста, точнее не понимаю как прописать именно команду для частотника (
pr
как я понял writeSinglerRegister - записан код функции 0x06, а вот со значениями не могу разобраться как адрес и регистр указать нужный мне(

В таблице адрес 0х1001 в коде у тебя 0х4001. Код функции тебе не нужен, это реализовано внутри библиотеки.

1 лайк

Добрый день, по этому адресу(0x40001) получается с ардуино отправлять на эмулятор Modbus Slave, а вот если меняю на мой адрес 0x1001 (Регистр флагов), то не получается команду отправить, точнее ничего не приходит на эмулятор. Что может быть не так?
Снимок экрана 2024-03-11 104748

Ты эмулятор пытаешься подружить или частотник? Думаешь кто-то тут знает, что у тебя за эмулятор, и как он работает?

Добрый день, конечная цель, частотник, но отладку пытаюсь провести на эмуляторе этом

Наверное надо по другому вопрос задать:)
Я использую бибилиотеку , с помощью нее я хочу по кнопке запускать частотник. В даташите на ПЧ, есть такая таблица с адресом регистра 0x1001, команда 0x0001. Основной затык в команде. Как я понял, данный адрес регистра это регистр флагов (то есть 0/1), а тут надо команду передать (0x0001), в библиотеке есть функция
3333
внутри функции реализовано 0x06 (поддерживается данным частотником), а вот в скобках первое как я понял это адрес регистра а вот кто делать с кодом функции и записью 0/1, как это можно записать?

Не бывает регистра флагов у модбаса. У него все регистры одинаковые и имеют размер 16 бит. Начинаются от нуля и до тех же 16 бит. Всё остальное это придуманные на заре компьютеростроения сущности. Сейчас с помощью МК можно читать и писать любую ячейку любым из придуманных способов. Но конечно же удобнее всего для конкретного размера данных предназначенных. Поэтому адреса 0x1001 и 0x4001 ничем не различаются и разницы в их использовании быть не может. Приведи целиком программу по записи числа 1 в ячейку 0x1001. Посмотрим где у тебя затык.

Добрый день, вот код

#include <ModbusMaster.h>               //библиотека для ModbusMaster

#define MAX485_DE      3
#define MAX485_RE_NEG  2
ModbusMaster node;                    //объект node класса ModbusMaster

void preTransmission()            //функции для установки состояния контактов DE & RE модуля RS-485
{
  digitalWrite(MAX485_RE_NEG, 1);             
  digitalWrite(MAX485_DE, 1);
}
void postTransmission()
{
  digitalWrite(MAX485_RE_NEG, 0);
  digitalWrite(MAX485_DE, 0);
}
void setup()
{
  pinMode(MAX485_RE_NEG, OUTPUT);
  pinMode(MAX485_DE, OUTPUT);
  pinMode(4,INPUT_PULLUP);
  digitalWrite(MAX485_RE_NEG, 0);
  digitalWrite(MAX485_DE, 0);
  Serial.begin(9600);             //скорость передачи 115200 бод
  node.begin(1, Serial);            //Slave ID (адрес ведомого) - 1
  node.preTransmission(preTransmission);         //Callback for configuring RS-485 Transreceiver correctly
  node.postTransmission(postTransmission);
}
void loop()
{
  
  int a= digitalRead(4);                           //считываем состояния кнопок 
 
  if (a == LOW)
  {
    node.writeSingleRegister(0x1001,0x0001);               
  }

  }

26 и 27 строки должны стоять на 35 и 37 месте. Перед передачей команды ты должен переключить 485 в режим передачи, после в режим приёма, если хочешь что то принять. Если только передавать то в режим приёма можно не переключать. Если конечно не нужен результат операции.

Что то не так, не работает все ровно. А в примерах к библиотеке функция node.postTransmission(postTransmission); так же только в Setup`е прописывается. Что может быть еще не так?

Был не прав. Действительно в сетапе определяются ссылки на переключение передачи.
А как ты проверяешь факт отправки пакета?

Все получилось победить, спасибо), проверял через эмулятор в нем ничего не приходило, попробовал на ПЧ, заработал, правда не понятно, почему он запускается и тут же останавливается.