![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 15.10.2012
Сообщений: 25
|
![]()
Здравствуйте !
Я из Ардуино МЕГА 2560 передаю данные в панель СП270 по МодВас РТУ функцией: writeSingleRegister(adr, dan) - передача значения dan по адресу adr. Передается правильно. И так все данные ( 6 переменных ), что на мой взгляд не совсем удачно. Есть функция для передачи нескольких данных writeMultipleRegister , но я не смог ее реализовать. Использую библиотеку ModbusMaster.h, но примера передачи нескольких данных этой функцией в инете не нашел. В файле ModbusMaster.cpp в этой функции указаны два параметра - адрес для панели СП270 и количество регистров для записи данных в эти регистры (так я понял), а как указать откуда брать данные не понятно. Мне кажется в функции должен быть еще параметр с адресом данных или я чего-то не понимаю. Подскажите пожалуйста как правильно вызывать функцию writeMultipleRegister или ссылку с использованием этой функции. С уважением Геннадий. |
![]() |
![]() |
![]() |
#2 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,822
|
![]() Цитата:
Код:
|
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 15.10.2012
Сообщений: 25
|
![]()
p51x:
Здравствуйте ! Я виноват, не посмотрел страницу до конца. Я не знаю английского, а переводчик переводит так, что мне не понятно что за данные задаются. Все что я понял: - первая строка устанавливает буфер, но что за параметры ( 0, lowWord(i) ) ? - аналогично и вторая строка. В третьей строке происходит непосредственно передача, но почему в ней только два параметра ? Мне надо передать сразу шесть параметров. Если Вам не трудно поясните пожалуйста ... С уважением Геннадий |
![]() |
![]() |
![]() |
#4 | ||||
Старожил
Регистрация: 15.02.2010
Сообщений: 15,822
|
![]() Цитата:
Цитата:
Цитата:
Код:
Цитата:
Код:
|
||||
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 15.10.2012
Сообщений: 25
|
![]()
p51x:
Здравствуйте ! Наверно я тупой, поэтому запутался еще больше. Я таких строк, которые Вы мне написали не видел. Напишите, правильно ли я понял: node.setTransmitBuffer(0, lowWord(i)); -> 1-ый парам. = 0 Это начальный адрес буфера ТХ. -> 2-ой парам = lowWord(i) это 1-я половина регистра (0 -15 бит) переменной "I" node.setTransmitBuffer(1, highWord(i)); -> 1-ый парам. = 1 это след. адрес буфера ТХ. -> 2-ой парам. = highWord(i) это 2-я половина регистра (16 -31 бит) переменной "I" result = node.writeMultipleRegisters(0, 2); -> 1-ый парам. = 0 это начальный адрес буфера ТХ. -> 2-ой парам. = 2 это количество регистров, которые будут переданы. Если правильно то что я написал выше, то я должен, наверно, записать в буфер ТХ 6 своих переменных, разбив каждую на две части, по адресам буфера ТХ начиная с 0 до 11, а в команде передачи указать вторым параметром вместо 2 двенадцать? Буду Вам очень признателен. С уважением Геннадий. |
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 15.10.2012
Сообщений: 25
|
![]()
p51x:
Здравствуйте ! Я наверно тупой, поэтому еще больше запутался. Напишите, если Вам не трудно, правильно ли я понял: node.setTransmitBuffer(0, lowWord(i)); -> 1-ый парам. = 0, это нулевой адрес буфера ТХ. -> 2-ой парам. = lowWord(i), это младшая часть переменной I (0-15 бит) node.setTransmitBuffer(1, highWord(i)); -> 1-ый парам. = 1, это следующий адрес буфера ТХ. -> 2-ой парам. = highWord(i), это старшая часть переменной I (16-31 бит) result = node.writeMultipleRegisters(0, 2); -> 1-ый парам. = 0, это нулевой адрес буфера ТХ. -> 2-ой парам. = 2, это количество регистров, которые будут переданы. 1) Можно задать буфер ТХ так: unsignet int BufTX(12) ? 2) В буфер ТХ записать по адресам начиная с 0 по 11 6 своих переменных, разбив на 2 части каждую, а в команде передачи во 2-ом параметре указать вместо 2 12 ? Буду Вам очень признателен. С уважением Геннадий. |
![]() |
![]() |
![]() |
#7 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,822
|
![]()
Он уже в либе задан
Код:
Цитата:
Сколько наберете. На кой он там? Откуда либа возьмет регистр, с которого писать? Для кого написано Код:
|
|
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 15.10.2012
Сообщений: 25
|
![]()
p51x:
У меня число, например - 0xfe7d, разве не 32 разрядное ? uint16_t _u16TransmitBuffer[ku8MaxBufferSize]; и u16WriteAddress address of the holding register; но это Вы написали, что в библиотеке, а как же мне указывать имя буфера и его адрес в программе ? Таких строк в примере на главной странице гитхаба я не нашел. |
![]() |
![]() |
![]() |
#9 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,428
|
![]()
16-разрядное.
Так вы и не можете свой буфер передавать. Вам нужно вызвать несколько раз setTransmitBuffer, чтобы заполнить буфер _u16TransmitBuffer данными, а потом вызвать writeMultipleRegisters, чтобы передать данные, как и указано в примере на гитхабе.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 15.10.2012
Сообщений: 25
|
![]()
BDA:
Все понял, спасибо. p51x: Вам большое спасибо за терпение. Все заработало. До свидания. |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
как сложить время. ардуино | [Timur] | Общие вопросы C/C++ | 3 | 19.04.2020 11:27 |
тест Ардуино | uldin | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 16.12.2018 22:47 |
Программа для Ардуино | Влад66 | Фриланс | 2 | 24.03.2017 07:38 |
raspberry в дополнение к Ардуино | rlib | Компьютерное железо | 14 | 10.05.2016 16:11 |