Коллекция глюков Здесь публикуются все известные глюки, баги микроконтроллеров, памяти, АЦП и т.д. |
02.07.2012, 18:58
|
#1
|
Прохожий
Регистрация: 05.11.2011
Сообщений: 7
Сказал спасибо: 0
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
FreeModbus + AVR
Здравствуйте! Появилась необходимость создать Slave устройство AVR с протоколом Modbus.
Исходники модуля с сайта http://freemodbus.berlios.de/. Создал проект в AVR Studio 4.18, скомпилировал. Создал проект в протеусе.
Понимаю, что нужно посылать в МК команду, по которой выдается результат. ТОлько как это грамотно сделать, используя функции Freemodbus? Есть функция eMBASCIISend( UCHAR ucSlaveAddress, const UCHAR * pucFrame, USHORT usLength ). С помощью нее пробовал кидать элементы массива на выход. Терминал в Proteus пишет что-то типа :03F304. Понимаю, что надо сделать по-другому.
Вопрос - в какой поседовательности какие функии вызывать и что им передавать?
|
|
|
Сказали "Спасибо" Master-Ti
|
|
|
02.07.2012, 19:35
|
#2
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,016
Сказал спасибо: 0
Сказали Спасибо 4,954 раз(а) в 2,378 сообщении(ях)
|
Re: FreeModbus + AVR
Master-Ti,
протокол модбас в сети искали? документы от модикон-а читали? только после прочтения их в оригинале, а потом по-русски советую пробовать.
для этого неообходим брайтерминал и модбас туллз.
без досконального знания протокола вопросы ваши выглядят просто смешно
|
|
|
|
02.07.2012, 19:40
|
#3
|
Прохожий
Регистрация: 05.11.2011
Сообщений: 7
Сказал спасибо: 0
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
Re: FreeModbus + AVR
jump, искал, просматривал. Не понимаю, как работать с регистрами, как их подсовывать. Регистр на master и slave должен называться одинаково? Я понимаю что нелепые вопросы. И еще в исходниках есть функция eMBRegisterCB( UCHAR ucFunctionCode, pxMBFunctionHandler pxHandler ), как ее применять?
|
|
|
Сказали "Спасибо" Master-Ti
|
|
|
02.07.2012, 20:09
|
#4
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,016
Сказал спасибо: 0
Сказали Спасибо 4,954 раз(а) в 2,378 сообщении(ях)
|
Re: FreeModbus + AVR
вот поисковая строка, там даже по-русски. читали? вижу, что - нет. ибо вот этот документ дает основы понимания (есть перевод). без знания порядка в посылке, как вычисляется КС вы ничего не сделаете.
да, еще - рано вам за фри модбас браться - учите теорию.
кстати, там, вовнутре фри модбаса, не набор ли библиотечных функций и вам необходимо еще свой прикладной уровень мастерить? если так, то тем более нужно знать теорию.
жду умных вопросов. а не детский лепет. учиться!!!
кстати вот еще - основа
|
|
|
|
04.07.2012, 19:58
|
#5
|
Прохожий
Регистрация: 05.11.2011
Сообщений: 7
Сказал спасибо: 0
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
Re: FreeModbus + AVR
Поднял протокол
В качестве мастера выступает Modbus Poll, в качесте слейва - ATmega32.
Только не понимаю, как работать непосредственно с регистрами модбасовскими.
Например, использую функцию 06 - Write Single Register. Пишу, к примеру, в 1200 регистр, в Modbus Poll приходит ответ что данные записались. А как их забрать из регистра в микроконтроллере? Я так понял, надо использовать eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs,
eMBRegisterMode eMode ) ? Можете пояснить? Спасибо
|
|
|
Сказали "Спасибо" Master-Ti
|
|
|
05.07.2012, 15:59
|
#6
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,016
Сказал спасибо: 0
Сказали Спасибо 4,954 раз(а) в 2,378 сообщении(ях)
|
Re: FreeModbus + AVR
|
|
|
|
05.07.2012, 21:45
|
#7
|
Прохожий
Регистрация: 05.11.2011
Сообщений: 7
Сказал спасибо: 0
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
Re: FreeModbus + AVR
Цитата:
|
Правильно ли я понял, что нужно свои функции приема-посылки написать?
|
Вот что я подчерпнул на той странице. Не знаю.
Мне нужно как-то вытащить данные из холдинг регистра, и грубо говоря, к примеру, выдать их на порт микроконтроллера. Я понимаю, что те же самые холдинги висят где-то в ОЗУ, я с компьютера связываюсь с МК, кидаю в них данные, забираю. Но мне хочется для начала, к примеру, отправить в 1201 холдинг регистр и зажечь светодиод на выходе. Если бы мне предоставили пример такого взаимодействия, я бы разобрался и решил бы любую задачу
|
|
|
Сказали "Спасибо" Master-Ti
|
|
|
05.07.2012, 22:43
|
#8
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,016
Сказал спасибо: 0
Сказали Спасибо 4,954 раз(а) в 2,378 сообщении(ях)
|
Re: FreeModbus + AVR
я видел ваши посты по всем форумам
кстати, вы разобрались со структурой проекта FreeModbus согласно OSI?
в железе что получается? есть житаг айс для проверки содержимого памяти? так бы увидели, что происходит с данными в озу, а далее организуете прикладной уровень ПО, которое получает-обрабатывает-передает данные по запросу от мастера согласно ваших алгоритмов.
например, у вас объявлены в проекте регистры 1200,... или базовый адрес массива или буфера в озу, куда валятся данные от мастера и откуда читаются по запросу - напишите ПО, которое читает данные из рег.1200 в порт и записывает данные с пинов в рег.1201. далее можете проверить пересылку данных Modbus Poll
|
|
|
|
05.07.2012, 23:26
|
#9
|
Прохожий
Регистрация: 05.11.2011
Сообщений: 7
Сказал спасибо: 0
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
Re: FreeModbus + AVR
Спасибо, я разобрался только что ))) Да, не на всех форумах мне отвечали ))
Есть массив usRegHoldingBuf[], там всё и хранится. Ответ был на поверхности )
Оказалось всё просто как 2 пальца.. )
Сейчас думаю что делать с этой конструкцией:
for( ;; )
{
( void )eMBPoll( );
/* Here we simply count the number of poll cycles. */
usRegInputBuf[0]++;
}
В ней мы зацикливаемся, что не есть хорошо для моих задач. Может туда поставить флаг и return?
|
|
|
Сказали "Спасибо" Master-Ti
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:40.
|
|