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, измените на большее число... А вообще я сомневаюсь, что вы понимаете к чему стремитесь. Может хотя бы википедию почитаете про модбас ....
Благодарю за ответ
Что я хочу - я понимаю
Почитано и первоисточник то-же