Ви не увійшли.
Сторінки 1
Здравствуйте. У меня имеется частотный преобразователь серии VLT 2800 компании Danfoss. Работает он по протоколу ModBus RTU через интерфейс RS485.
Мне нужно считать данные с нужного мне регистра, записать их в переменную и вывести в порт Arduino.
Вот моя схема подключения:
Вот скетч:
#include <ModbusRtu.h>
// data array for modbus network sharing
uint16_t au16data[16];
uint8_t u8state;
/**
* Modbus object declaration
* u8id : node id = 0 for master, = 1..247 for slave
* u8serno : serial port (use 0 for Serial)
* u8txenpin : 0 for RS-232 and USB-FTDI
* or any pin number > 1 for RS-485
*/
Modbus master(0,0,10); // this is master and RS-232 or USB-FTDI
/**
* This is an structe which contains a query to an slave device
*/
modbus_t telegram;
unsigned long u32wait;
void setup() {
master.begin( 9600 ); // baud-rate at 19200
master.setTimeOut( 2000 ); // if there is no answer in 2000 ms, roll over
u32wait = millis() + 1000;
u8state = 0;
}
void loop() {
switch( u8state ) {
case 0:
if (millis() > u32wait) u8state++; // wait state
break;
case 1:
telegram.u8id = 1; // slave address
telegram.u8fct = 3; // function code (this one is registers read)
telegram.u16RegAdd = 29; // start address in slave
telegram.u16CoilsNo = 2; // number of elements (coils or registers) to read
telegram.au16reg = au16data; // pointer to a memory array in the Arduino
master.query( telegram ); // send query (only once)
Serial.println();
Serial.print(au16data[16]);
Serial.println();
u8state++;
break;
case 2:
master.poll(); // check incoming messages
if (master.getState() == COM_IDLE) {
u8state = 0;
u32wait = millis() + 1000;
}
break;
}
}
Когда я считываю 29 регистр, в порту мне пишет вот это:
Хотя в регистре, значение равно: 1500.
Вот что пишет в Termite:
Так же у меня имеется USB to RS485 Converter, вот пример его работы, через программу QModBUS:
Запрос ModBus: 01 03 00 1d 00 02
Ответ ModBus: 01 03 04 00 00 05 dc f8 fa
Подскажите пожалуйста, что я делаю не так? Уже вторую неделю голову ломаю.
Неактивний
у Вас ведь именно на arduino не работает )
отправьте сырой пакет, я ведь даже не догадываюсь какой у вас arduino, и особо нет смысла ковырять, я для себя выбрал micro где debug serial USB, и есть UART и не парюсь о конфликтах (типа как в nano)
условно я так работаю
QByteArray Client::MOD_ReadRegister(unsigned char NetID, unsigned char CODE, unsigned short NRegister,unsigned short COUNT )
{
unsigned short us;
QByteArray TransmitBuffer;
TransmitBuffer[0] = NetID;
TransmitBuffer[1] = CODE;
unsigned char *puc=(unsigned char *)&NRegister;
TransmitBuffer[2] = puc[1];
TransmitBuffer[3] = puc[0];
unsigned char *puc2=(unsigned char *)&COUNT;
TransmitBuffer[4] = puc2[1];
TransmitBuffer[5] = puc2[0];
puc = (unsigned char *)&us;
us = CRC16_modbus( TransmitBuffer , 6);
TransmitBuffer[6]=puc[0];
TransmitBuffer[7]=puc[1];
return ( TransmitBuffer );
}
подготовил данные, перевел UART-485 на передачу,
отправил данные, дождался окончания передачи
есть 2 варианта, использовать аппаратное echo или по прерыванию по выгрузке uart buffer в аппаратный канал
но никак не по по загрузке в uart buffer, в меге есть такое?
далее принял ожидаемое количество байт, или считаю все на лету
и на обработку принятых данных,
если au16data ответ,
Serial.println();
Serial.print(au16data[16]);
Serial.println();
то почему есть запрос? общий serial?
Вы мне не дали описание либы, но то что я вижу - нелогично.
поищите работающий проект.
успеха
Неактивний
Добрый день.
Подскажите, пожалуйста, где взять ModbusRtu.h. У меня проект в arduino-1.8.4-windows для Arduino Uno с RC522. Тему свою не создаю, т.к. пока ничего новенького. Просто RFID метку считал быстро и без проблем.
Неактивний
По моему мнению, которое сложилось после многократных попыток использовать сеть Modbus через Arduino это не очень удачное решение. Намного проще, надежнее и стабильнее работать с Modbus через Raspberry / Orange Pi и библиотеку, например minimalmodbus под Python.
У меня, например через Modbus соединяются комнатные термостаты с контроллером на Orange Pi
Комнатные термостаты или универсальный сенсорные панели я делаю из мобильных телефонов.
Работает и выглядит отлично. По функционалу, дизайну и цене конкурентов я пока не нашел.
Подробнее можно почитать на сайте liccontrol.com
Неактивний
Всех приветствую! Я никогда не сталкивался с протоколом ModBus. Есть в продаже ультразвуковой анемометр (пока не заказывал, хочу разобраться с протоколом)
Ниже ссылка на описание анемометра на сайте алиэкспрес, там указано что прибор работает по RS485/232 по протоколу ModBus-RTU.
https://ru.aliexpress.com/store/product/Ultrasonic-transmitter-temperature-and-humidity-air-pressure-wind-speed-and-direction-of-the-digital-signal-power/433051_32245782685.html?spm=a2g0v.12010108.1000016.1.7e905f7fcFGsAx&isOrigTitle=true
Стоит задача считывать данные с разных регистров анемометра и отправлять в Интернет на веб сервер. Непонятен принцип считывания регистров с помощью ардуино. Если я соединю анемометр с ардуино при помощи конвертера как на рисунке ниже,
что нужно будет делать программно? Ставить библиотеку для работы ардуино с таким протоколом и пошагово писать программу для обмена данными с анемометром? И сложно ли это, опросить например 5 регистров и записать значения в переменные для последующей отправки на веб сервер? Напишите пожалуйста, что нужно для реализации считывания регистров устройства? Чтобы я хоть понял куда мне копать? И еще одно.Такой способ опроса регистров прибора считается надежным?
Всех приветствую! Я никогда не сталкивался с протоколом ModBus. Есть в продаже ультразвуковой анемометр (пока не заказывал, хочу разобраться с протоколом)
https://ae01.alicdn.com/kf/HTB1Ml2qQVXXXXcFXpXXq6xXFXXXw/Ultrasone-windsnelheid-wind-richting-meter-Temperatuur-Vochtigheid-luchtdruk-Solar-verlichtingssterkte-Straling-Regenval-sensoren.jpg_640x640.jpgНиже ссылка на описание анемометра на сайте алиэкспрес, там указано что прибор работает по RS485/232 по протоколу ModBus-RTU.
https://ru.aliexpress.com/store/product/Ultrasonic-transmitter-temperature-and-humidity-air-pressure-wind-speed-and-direction-of-the-digital-signal-power/433051_32245782685.html?spm=a2g0v.12010108.1000016.1.7e905f7fcFGsAx&isOrigTitle=trueСтоит задача считывать данные с разных регистров анемометра и отправлять в Интернет на веб сервер. Непонятен принцип считывания регистров с помощью ардуино. Если я соединю анемометр с ардуино при помощи конвертера как на рисунке ниже,
http://www.naylampmechatronics.com/img/cms/Blog/Tutorial%20RS485%20y%20Arduino/Modulo%20RS485%20como%20transmisor.jpg
что нужно будет делать программно? Ставить библиотеку для работы ардуино с таким протоколом и пошагово писать программу для обмена данными с анемометром? И сложно ли это, опросить например 5 регистров и записать значения в переменные для последующей отправки на веб сервер? Напишите пожалуйста, что нужно для реализации считывания регистров устройства? Чтобы я хоть понял куда мне копать? И еще одно.Такой способ опроса регистров прибора считается надежным?
Намного проще купить датчик ветра и направления La Crosse TX-23
К нему добрые люди расшифровали протокол общения и дают примеры для Arduino.
Лично я использую эту станцию в связке с Teensy 3.1 и датчиками т-ры и влажности DHT22 + барометр BMP180 уже 2-3 года.
Teensy отправляет всю информацию в локальную сеть, что позволяет через мобильный телефон или планшет на Android получать данные о текущей погоде:
температура наружного воздуха;
влажность наружного воздуха;
скорость ветра;
текущее направление ветра;
розу ветров;
порывы ветра;
атмосферное давление;
наличие и количество осадков
Данные о погоде записываются на SD-карточку, для построения трендов.
Пока работает.
Неактивний
Намного проще купить датчик ветра и направления La Crosse TX-23
Подскажите пожалуйста где купили такой датчик?
Неактивний
Lic Control пише:Намного проще купить датчик ветра и направления La Crosse TX-23
Подскажите пожалуйста где купили такой датчик?
Я бы посоветовал другие, более надежные датчики, которые уже неоднократно использовал.
www.aliexpress.com/item/32853954229.html
Сторінки 1