Страница 1 из 2
FreeModbus + AVR
Добавлено: Пн июл 02, 2012 18:24:10
Timo
Здравствуйте! Появилась необходимость создать Slave устройство AVR с протоколом Modbus.
Исходники модуля с сайта
http://freemodbus.berlios.de/. Создал проект в AVR Studio 4.18, скомпилировал. Создал проект в протеусе.
Понимаю, что нужно посылать в МК команду, по которой выдается результат. ТОлько как это грамотно сделать, используя функции Freemodbus? Есть функция eMBASCIISend( UCHAR ucSlaveAddress, const UCHAR * pucFrame, USHORT usLength ). С помощью нее пробовал кидать элементы массива на выход. Терминал в Proteus пишет что-то типа :03F304. Понимаю, что надо сделать по-другому.
Вопрос - в какой поседовательности какие функии вызывать и что им передавать?
Re: FreeModbus + AVR
Добавлено: Пн июл 02, 2012 18:40:04
orinoko
А может всё же начать с изучения спецификации на протокол ModBus? В инете есть на русском языке.
1. В каком режиме предполагается работать устройству - RTU или ASCII ?
2. У пакета не видно контрольной суммы.
Учите документацию. А зачем вам понадобилось именно modbus? Для "домашних" применений он избыточный. Можно всё упростить, но подозреваю, что вы весьма начинающий, и не сможете этого сделать.
Re: FreeModbus + AVR
Добавлено: Вт июл 03, 2012 23:06:36
Timo
Спасибо!
1. ASCII.
2. Да, разобрался, вызывал голую функцию отправки, что делать нельзя.
Сейчас ищу программу Mastera для ноута, чтоб всё проверить. Порекомендовали terring modbus tools, но нигде не могу найти рабочий вариант.. Ни у кого нет? Очень буду благодарен.
Re: FreeModbus + AVR
Добавлено: Ср июл 04, 2012 08:44:54
orinoko
http://www.zaovip.ru/file/file/PO_Modbus.exe
Не хотели искать. Я нашёл за 3 минуты.
А для себя я как то сделал универсальный терминал для отладки устройств на 232/485. Но там у меня только режим RTU.
А вот вам вдогонку описание протокола
http://www.servotechnica.spb.ru/library ... us_Rus.Doc
Re: FreeModbus + AVR
Добавлено: Ср июл 04, 2012 15:29:03
Timo
Я качал эту программу по этой ссылке, похоже, файл битый((
Re: FreeModbus + AVR
Добавлено: Ср июл 04, 2012 17:57:22
orinoko
Специально проверил - скачал, установил и запустил.
Re: FreeModbus + AVR
Добавлено: Ср июл 04, 2012 18:02:50
ILYAUL
скачал, установил и запустил.
+1
Re: FreeModbus + AVR
Добавлено: Ср июл 04, 2012 18:42:27
Timo
Похоже, несовместимость.
Ну ладно. Нашел Modbus Poll, разобрался как она работает, связался с микроконтроллером

. Косяк в том, что я не понимаю пока что как работать с регистрами модбаса на самом микроконтроллере. Например, использую функцию 06 - Write Single Register. Пишу, к примеру, в 1200 регистр с помощью Modbus Poll, приходит ответ что данные записались. А как их забрать из регистра в микроконтроллере? Я так понял, надо использовать eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs,
eMBRegisterMode eMode ) ? Можете пояснить? Спасибо
Re: FreeModbus + AVR
Добавлено: Ср июл 04, 2012 19:03:26
orinoko
всё же меня мучает вопрос - зачем вам использовать для дома этот протокол. Для промышленных контроллеров - да, удобно, так как унификация при работе с разновсякими контроллерами
А как их забрать из регистра в микроконтроллере?
для этого есть команда
03 Read Holding Registers
Re: FreeModbus + AVR
Добавлено: Чт июл 05, 2012 13:36:30
Timo
orinoko писал(а):всё же меня мучает вопрос - зачем вам использовать для дома этот протокол. Для промышленных контроллеров - да, удобно, так как унификация при работе с разновсякими контроллерами
Это не домашнее решение.
orinoko писал(а):А как их забрать из регистра в микроконтроллере?
для этого есть команда
03 Read Holding Registers
Это понятно ) Но как закинуть в такой регистр данные, например,с датчика, подключенного к ножке МК?
Re: FreeModbus + AVR
Добавлено: Чт июл 05, 2012 14:16:16
orinoko
А это уже ручками думать надо и подключать библиотеку "brain.dll". Снимать показания с датчика в соответствии с его спецификацией, и заносить данные в нужную ячейку памяти в необходимом формате.
Re: FreeModbus + AVR
Добавлено: Чт июл 05, 2012 15:15:54
Timo
Мне не понятно, где именно хранятся эти Holding регистры в самом МК.
Re: FreeModbus + AVR
Добавлено: Чт июл 05, 2012 15:22:14
ds1307
Timo писал(а):Мне не понятно, где именно хранятся эти Holding регистры в самом МК.
Работал с сенсорными панелями оператора ОВЕН. В описании на панель даны адреса памяти и описано какой тип памяти (ОЗУ или EEPROM). С МК не работал.
Re: FreeModbus + AVR
Добавлено: Чт июл 05, 2012 15:34:50
Engineer_Keen
В памяти они находятся, где же еще... Вся память AVR (да и не только) делится на регистры R0-R31, регистры I/O и ОЗУ. По идее если адрес регистра 0x00-0x1F, это регистры R0-R31, если 0x20-0x5F - I/O, остальное - ОЗУ. Хотя программно можно наверняка переназначить адреса как угодно, и запретить доступ к каким-либо из них на этапе приема команды в любом протоколе.
Re: FreeModbus + AVR
Добавлено: Чт июл 05, 2012 16:04:25
Jack_A
Правильно люди советуют : если связываться с уже готовыми устройствами, то все их "регистры" описаны в мануалке на устройство. А если дивайс на МК собственного производства, и программа на РС к нему тоже собственная , то можно взять только оболочку, каркас от Модбаса и наполнить его такими командами и в таких форматах, как самому удобно. Пересылать, например, не один какой-то "регистр", а целый блок параметров.
У меня была в практике необходимость выполнить быстрый, но устойчивый обмен. Как бы сделал по "букварю" ? Запрос - ответ - подсчет CRC - фиксируется ошибка - перезапрос. А время т`икает . Сделал в пакете тройное дублирование инфы с внутренней КС. Если CRC битая, не заморачиваем себе бошку перезапросом, а смотрим, есть ли в принятой тройке совпадающая пара, да еще с правильной КС. Есть - значит приняли и исправили ошибку. Чуть более сложная обработка позволяла исправить и двойную ошибку.
Работало без вопросов.
Но если ожидаете инспекцию со Schneider-electric на предмет соответствия вашего протокола букварю - тогда я пас и ничего не советовал.

Re: FreeModbus + AVR
Добавлено: Чт июл 05, 2012 18:09:52
orinoko
Timo писал(а):Мне не понятно, где именно хранятся эти Holding регистры в самом МК.
В МК есть просто ОЗУ. Некоторый объём. Как вы эти ячейки назовёте при разработке программы, такими они и будут. Все эти Holding Registers - это некий уровень абстракции, и к конкретному МК не имеет отношения. Выделяется некая область памяти и отмечам - это регистры. И занимаемся обработкой сами программно.
Судя по всему, вы очень далеки от понимания сути. Это вам не дельфи, где программу можно написать одной мышкой. Как я уже говорил, без brain.dll вы не решите задачу. Ищите специалиста.
Re: FreeModbus + AVR
Добавлено: Чт июл 05, 2012 19:18:23
Timo
orinoko писал(а):Timo писал(а):Мне не понятно, где именно хранятся эти Holding регистры в самом МК.
В МК есть просто ОЗУ. Некоторый объём. Как вы эти ячейки назовёте при разработке программы, такими они и будут. Все эти Holding Registers - это некий уровень абстракции, и к конкретному МК не имеет отношения. Выделяется некая область памяти и отмечам - это регистры. И занимаемся обработкой сами программно.
Судя по всему, вы очень далеки от понимания сути. Это вам не дельфи, где программу можно написать одной мышкой. Как я уже говорил, без brain.dll вы не решите задачу. Ищите специалиста.
Я понимаю смысл ОЗУ, Holding Registers и т.п. Я не понимаю некоторых деталей, но я только учусь.
Я обращаюсь к тем,кто пользовалмя freemodbus.. Мне нужно как-то вытащить данные из холдинг регистра, и грубо говоря, к примеру, выдать их на порт микроконтроллера. Я понимаю, что те же самые холдинги висят где-то в ОЗУ, я с компьютера связываюсь с МК, кидаю в них данные, забираю. Но мне хочется для начала, к примеру, отправить в 1201 холдинг регистр и зажечь светодиод на выходе. Если бы мне предоставили пример такого взаимодействия, я бы разобрался и решил бы любую задачу

Re: FreeModbus + AVR
Добавлено: Чт июл 05, 2012 19:45:21
orinoko
Freemodbus скорее всего - это библиотека, которая огранизует только транспорт для данного протокола. А всю реализацию уже должен описывать сам программист. Осознайте это для себя. Пришедший пакет вы должны сами обрабатывать и формировать ответ, а также взамодействовать с периферией МК - кнопочки, лампочки и т.д.
Re: FreeModbus + AVR
Добавлено: Чт июл 05, 2012 19:55:51
Timo
Чуть прояснилась ситуация. Спасибо.
Осталось найти места, где хранятся модбасовские регистры, остальное я реализую

.
Попробую разобраться еще раз со всем, но если кто пользовался freemodbus и знает ответ - буду благодарен получить информацию

Re: FreeModbus + AVR
Добавлено: Чт июл 05, 2012 20:34:14
Timo
Но эта бибилиотека должна ведь иметь элементы взаимодействия стека модбаса со всеми осталными функциями, записанными в МК?
По freemodbus есть
справка, правда я не могу в ней разобраться