Modbus rs485 обмен со стороны мастера
- Войдите на сайт для отправки комментариев
Пт, 22/12/2017 - 10:01
Кто празднику рад - за неделю пъян! Иак что всех
с наступающим Новым Годом!
При получении мастером от слейва читаю первое значение регистра
Обмен идет но дальнейшие параметры получить не могу
Slave
#include <SimpleModbusSlave.h>
//////////////////// Макроопределения портов и настройки программы ///////////////////
#define baud 9600 // скоростьобмена по последовательному интерфейсу. (UART)
#define timeout 50 // Длительность ожидание ответа (таймаут modbus)
#define polling 1200 // скорость опроса по modbus
#define retry_count 0 // количесво запросов modbus до ошибки и останова обмена 0 - безконечный обмен
#define TxEnablePin 2 // Tx/Rx пин RS485 пин№3
unsigned int Id_Slv = 1;//Идентификатор slave 1,2,3,4
enum
{
holdingReg,
HOLDING_REGS_SIZE
};
unsigned int holdingRegs[HOLDING_REGS_SIZE]; // function 3 and 16 register array
int i;
void setup() {
modbus_configure(&Serial, baud, SERIAL_8N2, Id_Slv, TxEnablePin, HOLDING_REGS_SIZE, holdingRegs);
modbus_update_comms(baud, SERIAL_8N2, Id_Slv);
}
void loop() {
for(i=1;i<10;i++)
{
holdingRegs[0] = i;
modbus_update();
//delay(timeout);
//Serial.print(holdingRegs[0]);
}
//Serial.println();
}


#include <SimpleModbusMaster.h>
//////////////////// Макроопределения портов и настройки программы ///////////////////
#define baud 9600 // скоростьобмена по последовательному интерфейсу. (UART)
#define timeout 50 // Длительность ожидание ответа (таймаут modbus)
#define polling 1200 // скорость опроса по modbus
#define retry_count 0 // количесво запросов modbus до ошибки и останова обмена 0 - безконечный обмен
#define TxEnablePin 2 // Tx/Rx пин RS485 пин№3
#define TOTAL_NO_OF_REGISTERS 1
enum
{
holdingReg,
TOTAL_NO_OF_PACKETS
};
Packet packets[TOTAL_NO_OF_PACKETS];
unsigned int regs[TOTAL_NO_OF_REGISTERS];
void setup()
{
// Пакет,SLAVE адрес,функция модбус,адрес регистра,количесво запрашиваемых регистров,локальный адрес регистра.
modbus_construct(&packets[holdingReg], 1, READ_HOLDING_REGISTERS, 0, 1, 0); // чтение данных slave-master (slave адрес 1, регистр 0)
modbus_configure(&Serial, baud, SERIAL_8N2, timeout, polling, retry_count, TxEnablePin, packets, TOTAL_NO_OF_PACKETS, regs);
}
void loop()
{
for (int Col=1;Col<10;Col++)
{
modbus_update(); // запуск обмена по Modbus
//delay(timeout);
if (Col < 10) {
Serial.print(regs[holdingReg]);
}
else
{
Serial.println();
}
}
}



Хочу чтоб данные все поступали а не только то что упало первым
В чем я не прав?
А какие вам еще "дальнейшие параметры" ? Вы читаете всего один регистр с адреса 0. Установите "num of coils" в QModBus больше 1 и получите еще параметры. Но правда у вас и в программе всего один регистр активен TOTAL_NO_OF_REGISTERS 1, измените на большее число... А вообще я сомневаюсь, что вы понимаете к чему стремитесь. Может хотя бы википедию почитаете про модбас ....
Благодарю за ответ
Что я хочу - я понимаю
Почитано и первоисточник то-же