Проблема:
Привет, Во-первых, я не эксперт в C ++ .
Кажется, я не могу найти ни одного руководства (или документации) ) ModbusMaster специально для этой конкретной библиотеки. Это объясняет все методы, используемые в классе.
Я использую эту библиотеку, потому что она поддерживает stream class . не как официальная библиотека или другие. Поэтому я могу использовать softwareSerial , чтобы добавить больше серийных номеров для RS485.
Я использую Arduino pro mini , поэтому мне нужен программный серийный номер. И этот модуль Max485 :
Я уверен, что все подключено правильно, поэтому моя цель - прочитать катушку с Индикатор уровня китайского бренда ultrasoni c, о котором говорится в руководстве:
Вот программа, которую я пытаюсь сделать:
#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.