Не могу прочитать регистр хранения Modbus, потому что ModbusMaster для Arduino - отсутствие документации - PullRequest
0 голосов
/ 24 марта 2020

Проблема:

Привет, Во-первых, я не эксперт в C ++ .

Кажется, я не могу найти ни одного руководства (или документации) ) ModbusMaster специально для этой конкретной библиотеки. Это объясняет все методы, используемые в классе.

Я использую эту библиотеку, потому что она поддерживает stream class . не как официальная библиотека или другие. Поэтому я могу использовать softwareSerial , чтобы добавить больше серийных номеров для RS485.

Я использую Arduino pro mini , поэтому мне нужен программный серийный номер. И этот модуль Max485 :

enter image description here

Я уверен, что все подключено правильно, поэтому моя цель - прочитать катушку с Индикатор уровня китайского бренда ultrasoni c, о котором говорится в руководстве:

enter image description here

Вот программа, которую я пытаюсь сделать:

#include <ModbusMaster.h>
#include <SoftwareSerial.h>
/*!
  We're using a MAX485-compatible RS485 Transceiver.
  Rx/Tx is hooked up to the hardware serial port at 'Serial'.
  The Data Enable and Receiver Enable pins are hooked up as follows:
*/
#define MAX485_DE      9
#define MAX485_RE_NEG  8
//for software serial
#define RO_RX 7
#define DI_TX 6


// instantiate ModbusMaster object
ModbusMaster node;
// RX, TX on softser
SoftwareSerial mySerial(RO_RX, DI_TX); 

void preTransmission()
{
  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);
  // Init in receive mode
  digitalWrite(MAX485_RE_NEG, 0);
  digitalWrite(MAX485_DE, 0);

  // for serial monitoring on PC
  Serial.begin(115200);
  // Modbus communication runs at 9600 baud
  mySerial.begin(9600);
  // Modbus slave ID 1 and pass the software serial
  node.begin(1, mySerial);
  // Callbacks allow us to configure the RS485 transceiver correctly
  node.preTransmission(preTransmission);
  node.postTransmission(postTransmission);
  Serial.println("init done...");
}



void loop()
{
// now, i'm kinda lost here..

  delay(100);
  Serial.println("loop end.");
}

Меня смущает большая часть метода класса без надлежащего объяснения.

modbusObj.readWriteMultipleRegisters();
modbusObj.writeSingleRegister();
modbusObj.setTransmitBuffer();
modbusObj.readCoils();
modbusObj.writeMultipleRegisters();
modbusObj.readHoldingRegisters();
// etc.. 

У них не было документации. Ну, некоторые имена методов говорят сами за себя, но не об аргументах. Я пытаюсь просто прочитать регистр хранения.

TL; DR:

Я хочу прочитать данные о расстоянии измерителя уровня, но библиотека не обеспечивает надлежащую документацию.

Nb:

  • нет ничего плохого в устройстве ultrasoni c, протестированном в P C для чтения регистра удержания с некоторыми Инструмент Modbus и подключен до RS485 к USB и работает!
  • этот вопрос предназначен для переполнения стека, а не стек-электротехника , потому что я в основном спрашиваю о code.
  • Я обсуждал это с кем-то на местном форуме в Facebook, который сказал, что он успешно использует lib вместе с soft-serial и pro-mini.
...