Обсуждаем контроллеры компании Atmel.
Ответить

FreeModbus + AVR

Пн июл 02, 2012 18:24:10

Здравствуйте! Появилась необходимость создать 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

А может всё же начать с изучения спецификации на протокол ModBus? В инете есть на русском языке.
1. В каком режиме предполагается работать устройству - RTU или ASCII ?
2. У пакета не видно контрольной суммы.
Учите документацию. А зачем вам понадобилось именно modbus? Для "домашних" применений он избыточный. Можно всё упростить, но подозреваю, что вы весьма начинающий, и не сможете этого сделать.

Re: FreeModbus + AVR

Вт июл 03, 2012 23:06:36

Спасибо!
1. ASCII.
2. Да, разобрался, вызывал голую функцию отправки, что делать нельзя.

Сейчас ищу программу Mastera для ноута, чтоб всё проверить. Порекомендовали terring modbus tools, но нигде не могу найти рабочий вариант.. Ни у кого нет? Очень буду благодарен.

Re: FreeModbus + AVR

Ср июл 04, 2012 08:44:54

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

Я качал эту программу по этой ссылке, похоже, файл битый((

Re: FreeModbus + AVR

Ср июл 04, 2012 17:57:22

Специально проверил - скачал, установил и запустил.

Re: FreeModbus + AVR

Ср июл 04, 2012 18:02:50

скачал, установил и запустил.

+1

Re: FreeModbus + AVR

Ср июл 04, 2012 18:42:27

Похоже, несовместимость.
Ну ладно. Нашел 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

всё же меня мучает вопрос - зачем вам использовать для дома этот протокол. Для промышленных контроллеров - да, удобно, так как унификация при работе с разновсякими контроллерами
А как их забрать из регистра в микроконтроллере?

для этого есть команда 03 Read Holding Registers

Re: FreeModbus + AVR

Чт июл 05, 2012 13:36:30

orinoko писал(а):всё же меня мучает вопрос - зачем вам использовать для дома этот протокол. Для промышленных контроллеров - да, удобно, так как унификация при работе с разновсякими контроллерами

Это не домашнее решение.
orinoko писал(а):
А как их забрать из регистра в микроконтроллере?

для этого есть команда 03 Read Holding Registers

Это понятно ) Но как закинуть в такой регистр данные, например,с датчика, подключенного к ножке МК?

Re: FreeModbus + AVR

Чт июл 05, 2012 14:16:16

А это уже ручками думать надо и подключать библиотеку "brain.dll". Снимать показания с датчика в соответствии с его спецификацией, и заносить данные в нужную ячейку памяти в необходимом формате.

Re: FreeModbus + AVR

Чт июл 05, 2012 15:15:54

Мне не понятно, где именно хранятся эти Holding регистры в самом МК.

Re: FreeModbus + AVR

Чт июл 05, 2012 15:22:14

Timo писал(а):Мне не понятно, где именно хранятся эти Holding регистры в самом МК.

Работал с сенсорными панелями оператора ОВЕН. В описании на панель даны адреса памяти и описано какой тип памяти (ОЗУ или EEPROM). С МК не работал.

Re: FreeModbus + AVR

Чт июл 05, 2012 15:34:50

В памяти они находятся, где же еще... Вся память AVR (да и не только) делится на регистры R0-R31, регистры I/O и ОЗУ. По идее если адрес регистра 0x00-0x1F, это регистры R0-R31, если 0x20-0x5F - I/O, остальное - ОЗУ. Хотя программно можно наверняка переназначить адреса как угодно, и запретить доступ к каким-либо из них на этапе приема команды в любом протоколе.

Re: FreeModbus + AVR

Чт июл 05, 2012 16:04:25

Правильно люди советуют : если связываться с уже готовыми устройствами, то все их "регистры" описаны в мануалке на устройство. А если дивайс на МК собственного производства, и программа на РС к нему тоже собственная , то можно взять только оболочку, каркас от Модбаса и наполнить его такими командами и в таких форматах, как самому удобно. Пересылать, например, не один какой-то "регистр", а целый блок параметров.
У меня была в практике необходимость выполнить быстрый, но устойчивый обмен. Как бы сделал по "букварю" ? Запрос - ответ - подсчет CRC - фиксируется ошибка - перезапрос. А время т`икает . Сделал в пакете тройное дублирование инфы с внутренней КС. Если CRC битая, не заморачиваем себе бошку перезапросом, а смотрим, есть ли в принятой тройке совпадающая пара, да еще с правильной КС. Есть - значит приняли и исправили ошибку. Чуть более сложная обработка позволяла исправить и двойную ошибку.
Работало без вопросов.

Но если ожидаете инспекцию со Schneider-electric на предмет соответствия вашего протокола букварю - тогда я пас и ничего не советовал. :)

Re: FreeModbus + AVR

Чт июл 05, 2012 18:09:52

Timo писал(а):Мне не понятно, где именно хранятся эти Holding регистры в самом МК.

В МК есть просто ОЗУ. Некоторый объём. Как вы эти ячейки назовёте при разработке программы, такими они и будут. Все эти Holding Registers - это некий уровень абстракции, и к конкретному МК не имеет отношения. Выделяется некая область памяти и отмечам - это регистры. И занимаемся обработкой сами программно.
Судя по всему, вы очень далеки от понимания сути. Это вам не дельфи, где программу можно написать одной мышкой. Как я уже говорил, без brain.dll вы не решите задачу. Ищите специалиста.

Re: FreeModbus + AVR

Чт июл 05, 2012 19:18:23

orinoko писал(а):
Timo писал(а):Мне не понятно, где именно хранятся эти Holding регистры в самом МК.

В МК есть просто ОЗУ. Некоторый объём. Как вы эти ячейки назовёте при разработке программы, такими они и будут. Все эти Holding Registers - это некий уровень абстракции, и к конкретному МК не имеет отношения. Выделяется некая область памяти и отмечам - это регистры. И занимаемся обработкой сами программно.
Судя по всему, вы очень далеки от понимания сути. Это вам не дельфи, где программу можно написать одной мышкой. Как я уже говорил, без brain.dll вы не решите задачу. Ищите специалиста.

Я понимаю смысл ОЗУ, Holding Registers и т.п. Я не понимаю некоторых деталей, но я только учусь.
Я обращаюсь к тем,кто пользовалмя freemodbus.. Мне нужно как-то вытащить данные из холдинг регистра, и грубо говоря, к примеру, выдать их на порт микроконтроллера. Я понимаю, что те же самые холдинги висят где-то в ОЗУ, я с компьютера связываюсь с МК, кидаю в них данные, забираю. Но мне хочется для начала, к примеру, отправить в 1201 холдинг регистр и зажечь светодиод на выходе. Если бы мне предоставили пример такого взаимодействия, я бы разобрался и решил бы любую задачу :)

Re: FreeModbus + AVR

Чт июл 05, 2012 19:45:21

Freemodbus скорее всего - это библиотека, которая огранизует только транспорт для данного протокола. А всю реализацию уже должен описывать сам программист. Осознайте это для себя. Пришедший пакет вы должны сами обрабатывать и формировать ответ, а также взамодействовать с периферией МК - кнопочки, лампочки и т.д.

Re: FreeModbus + AVR

Чт июл 05, 2012 19:55:51

Чуть прояснилась ситуация. Спасибо.
Осталось найти места, где хранятся модбасовские регистры, остальное я реализую :).
Попробую разобраться еще раз со всем, но если кто пользовался freemodbus и знает ответ - буду благодарен получить информацию :)

Re: FreeModbus + AVR

Чт июл 05, 2012 20:34:14

Но эта бибилиотека должна ведь иметь элементы взаимодействия стека модбаса со всеми осталными функциями, записанными в МК?

По freemodbus есть справка, правда я не могу в ней разобраться
Ответить