НИгде не могу найти инфу по этой теме
ModBus и AVR
ModBus и AVR
ПОдскажите начинающему, как подключить AVR к сети MOdBUs(Rs-485 2-х провод)??
НИгде не могу найти инфу по этой теме
НИгде не могу найти инфу по этой теме
Последний раз редактировалось delta777 Вс авг 17, 2008 17:23:03, всего редактировалось 1 раз.
- Пухич
- Модератор
- Сообщения: 4673
- Зарегистрирован: Вс июн 01, 2008 00:17:35
- Откуда: Я всего лишь плод вашего воображения...
Давайте вот с чего начнем - что вы вообще знаете о сети Modbus?
Просто дело в том, что особых аппаратных проблем с подключением нет, но чтобы работать в сети Modbus, нужно ПО для МК писать нехилое, если конечно вы хотите как-то обмениваться с кем-то в сети. Да и потом, чтобы в этой сети с кем-то чем-то обмениваться, надо знать свойства этого чего-то, адреса и параметры поддерживаемых этим чем-то функций, вообще что это что-то может. Короче, когда у меня дипломник работал с сетью Modbus (правда у него был не МК, а ПК, но это особой роли не играет), то он долго копался в описании тех контроллеров, которые были в его сети, чтобы понять. что и куда ему посылать. Причем, что интересно, у его контроллеров принцип формирования CRC не совпадал с тем, который установлен стандартом на Modbus.
Так что там много моментов, мало связанных с электроникой. Из электроники нужен UART и преобразователь RS-232-RS-485.
Просто дело в том, что особых аппаратных проблем с подключением нет, но чтобы работать в сети Modbus, нужно ПО для МК писать нехилое, если конечно вы хотите как-то обмениваться с кем-то в сети. Да и потом, чтобы в этой сети с кем-то чем-то обмениваться, надо знать свойства этого чего-то, адреса и параметры поддерживаемых этим чем-то функций, вообще что это что-то может. Короче, когда у меня дипломник работал с сетью Modbus (правда у него был не МК, а ПК, но это особой роли не играет), то он долго копался в описании тех контроллеров, которые были в его сети, чтобы понять. что и куда ему посылать. Причем, что интересно, у его контроллеров принцип формирования CRC не совпадал с тем, который установлен стандартом на Modbus.
Так что там много моментов, мало связанных с электроникой. Из электроники нужен UART и преобразователь RS-232-RS-485.
Знание - сила!
- Пухич
- Модератор
- Сообщения: 4673
- Зарегистрирован: Вс июн 01, 2008 00:17:35
- Откуда: Я всего лишь плод вашего воображения...
Схемку чего??? Драйвер для RS-485 - это микросхема, включаемая согласно даташиту. Там и схема есть. Вот ее и подключаете к атмеловскому UARTу.Листингов тоже никаких не вижу смысла приводить, ибо работа с UARTом атмеловским у нас на сайте описана многократно, со стороны компа тоже ничего сложного. Ну а дальше - чисто заморочки с формированием сообщений для сети Modbus, причем на МК это будет непросто, на компе проще. Самое главное - а зачем вы комп и МК через такую шину связываете? У вас она уже есть и ее надо использовать, или почему?
Знание - сила!
- KT315B
- Сверлит текстолит когтями
- Сообщения: 1269
- Зарегистрирован: Пт июл 21, 2006 15:05:19
- Откуда: плод воображения
- Контактная информация:
Тут - http://masters.donntu.edu.ua/2004/fema/ ... /art7.html неплохое описание аппаратной части RS-485 со всеми ньюансами типа согласования и т.п. Из микросхем могу навскидку посоветовать MAX487 - полудуплекс и MAX489 - полный дуплекс. В даташитах есть и схемы включения и исчерпывающе описание. Не пытайтесь получить ответ "на блюдечке с голубой каемочкой", ищите и обращете =)
R2AIV 73!
-
BerZerK-ku
- Мучитель микросхем
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Данных по протоколу достаточно в Modbus_rus.doc, находится любым поисковиком.
- Вложения
-
- 485-1.jpg
- Пример подключения МК по 485.
- (43.01 КБ) 4083 скачивания
-
- DataCenter1.txt
- Пример вычисления CRC-16
- (4.79 КБ) 2089 скачиваний
Пухич писал(а):Ну а дальше - чисто заморочки с формированием сообщений для сети Modbus, причем на МК это будет непросто, на компе проще. Самое главное - а зачем вы комп и МК через такую шину связываете? У вас она уже есть и ее надо использовать, или почему?
Да, шина и ПО уже есть, нужно добавить устройство.
С аппаратным подключением вроде разобрался (оказывается все просто), а вот как МК будет отрабатывать запросы, пока нет.... Где-то можно посмотреть готовую схемку (хотя бы моргающий светодиод:)) с программой обмена по ModBUs?
-
BerZerK-ku
- Мучитель микросхем
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Вот пример программы для ATmega128, под IAR.
Исползуются 2 команды ModBus 0х03 - чтение регистров, 0x06 - запись в регистр. С помощью них происходит чтение/запись порта F.
Работоспособность проверял ModiconOPC Server.
Исползуются 2 команды ModBus 0х03 - чтение регистров, 0x06 - запись в регистр. С помощью них происходит чтение/запись порта F.
Работоспособность проверял ModiconOPC Server.
- Вложения
-
- main.rar
- (3.25 КБ) 3511 скачиваний
Re: ModBus и AVR
кто нибудь переписывал этот main.c для ATmega16 ? там не все так просто...процы разные, у меги128 кажись 2 уарта.
Re: ModBus и AVR
Hold[On] писал(а):кто нибудь переписывал этот main.c для ATmega16 ? там не все так просто...процы разные, у меги128 кажись 2 уарта.
У тебя есть великолепный шанс это сделать
Re: ModBus и AVR
Hold[On] писал(а):кто нибудь переписывал этот main.c для ATmega16 ? там не все так просто...процы разные, у меги128 кажись 2 уарта.
У тебя есть великолепный шанс это сделать
-
BerZerK-ku
- Мучитель микросхем
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Re: ModBus и AVR
Hold[On] писал(а):кто нибудь переписывал этот main.c для ATmega16 ? там не все так просто...процы разные, у меги128 кажись 2 уарта.
Проблема с разными названиями регистров? дак там в 99% случаев достаточно убрать 0 из имени.
Во вложении тот же файл, работоспособность не проверял, но по крайней мере компилируется )
- Вложения
-
- main_mega16.rar
- (3.14 КБ) 1380 скачиваний
Re: ModBus и AVR
пока ждал ответ - сам решил переписать) пока что результаты не увенчались успехом- да, при запуске МК 8 светодиодов горят, использую программу Modbus Poll - задаю скорость 19200, все остальное без изменений. Slave ID - 32 (это 0x20) адрес регистра - 1, длина - 8. коннекта нету. сижу думаю что делать
Re: ModBus и AVR
И еще раз. выкладываю свою переделанную. В чем проверять протокол? Ставлю скорость 19200, Com1, 8 бит данных, без паритета, 1 стоп бит, режим - RTU, таймайт - 1000мс, DSR, CTS, RTS - галочки не стоят. Затем захожу Setup - > Poll definition. Там -
Slave ID - 32
Function - 03 HOLDING REGISTER
Address - 1
Lenght - 8
Scan Rate - 1000
где ошибка? завтра сдавать научную работу, срочно потребовали в цифровой регулятор запихать MODBUS. с утра сижу
Slave ID - 32
Function - 03 HOLDING REGISTER
Address - 1
Lenght - 8
Scan Rate - 1000
где ошибка? завтра сдавать научную работу, срочно потребовали в цифровой регулятор запихать MODBUS. с утра сижу
Re: ModBus и AVR
И еще раз. выкладываю свою переделанную. В чем проверять протокол? Ставлю скорость 19200, Com1, 8 бит данных, без паритета, 1 стоп бит, режим - RTU, таймайт - 1000мс, DSR, CTS, RTS - галочки не стоят. Затем захожу Setup - > Poll definition. Там -
Slave ID - 32
Function - 03 HOLDING REGISTER
Address - 1
Lenght - 8
Scan Rate - 1000
где ошибка? завтра сдавать научную работу, срочно потребовали в цифровой регулятор запихать MODBUS. с утра сижу
Slave ID - 32
Function - 03 HOLDING REGISTER
Address - 1
Lenght - 8
Scan Rate - 1000
где ошибка? завтра сдавать научную работу, срочно потребовали в цифровой регулятор запихать MODBUS. с утра сижу
- Вложения
-
- main.c
- (11 КБ) 795 скачиваний
-
BerZerK-ku
- Мучитель микросхем
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Re: ModBus и AVR
Hold[On] писал(а):И еще раз. выкладываю свою переделанную. В чем проверять протокол? Ставлю скорость 19200, Com1, 8 бит данных, без паритета, 1 стоп бит, режим - RTU, таймайт - 1000мс, DSR, CTS, RTS - галочки не стоят. Затем захожу Setup - > Poll definition. Там -
Slave ID - 32
Function - 03 HOLDING REGISTER
Address - 1
Lenght - 8
Scan Rate - 1000
где ошибка? завтра сдавать научную работу, срочно потребовали в цифровой регулятор запихать MODBUS. с утра сижу
Исправляя программу под мега16 еще надо было поправить настройки таймера:
#define StartTimer0 TCNT0=dTCNT0;TCCR0=0x03; //запуск таймера 0
Но вот могло ли это повлиять... щас поставлю используемое вами ПО и посмотрю че да как. Кстати, МК вообще отвечает?
Lenght - 8 - если это количество считываемых регистров, то ответа вы и не дождетесь ) Видимо в этом и дело, для того чтобы заработал данный мейн, поставте 1. Для того чтобы считать 8 адресов, нужно подправить этот кусок программы
Код: Выделить всё
[code]
case 0x03:{//чтение регистров
TempI=(int) (cmRcBuf0[2]<<8) + cmRcBuf0[3];
if (TempI!=1){ //првоерка номера регистра, есть только 1 регистр
return ErrorMessage(0x02); //данный адрес не может быть обработан
}
TempI=(int) (cmRcBuf0[4]<<8) + cmRcBuf0[5];
if (TempI>8){//проверка кол-ва запрашиваемых регистров, не больше 8
return ErrorMessage(0x02); //данный адрес не может быть обработан
}
cmTrBuf0[1]=0x03;//команда
cmTrBuf0[2]=0x02;//кол-во байт данных
cmTrBuf0[3]=0x00;//старший байт
TempI=PINB;
for (unsigned char i = 0; i < 8; i++)
cmTrBuf0[4+i] = (TempI >> i) & 0x01;
TempI=GetCRC16(cmTrBuf0,12);//подсчет КС посылки
cmTrBuf0[12]=Low(TempI);
cmTrBuf0[13]=Hi(TempI);
return 14;
}
[/code]
Последний раз редактировалось BerZerK-ku Вт июн 22, 2010 13:37:58, всего редактировалось 3 раза.