реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> затруднение с RS485
alexander55
сообщение Oct 24 2007, 12:53
Сообщение #31


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(DASM @ Oct 24 2007, 16:35) *
RS485 вообще программный уровень не стандартизирует. А с чем доводилось работать - было либо ASCII либо и то и то вместе. А еще чаще просто текстовые строки - любят юзера, чтобы в обычной терминалке можно было бы с прибором поговорить.

Стандартизация есть для PLC полная. Под SCADы много прибамбасов для ModBus.

Если в терминалке с прибором поговорить, то текстовые сообщения (это понятно).
А если программа пишется для PC, типа прибора, то ModBus RTU.
Если контроллеры объединяются в сеть, то ModBus RTU.
Go to the top of the page
 
+Quote Post
Athlon128
сообщение Oct 24 2007, 16:22
Сообщение #32


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 18-04-06
Пользователь №: 16 238



Пытался днём на бумаге прикинуть программу.

В основном коде программы:
Код
while (rx_counter0==0); // ждём когда будет принят байт в буфер
delay_ms(25);
TCCR1B=0x05; // запускаем таймер (период 50мс)


В прерывании по таймеру:
Код
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
if (rx_counter0>0) // если буфер не пуст
{
  while (getchar()!=':'); // считываем по байту пока не попадётся префикс ':'
  command=getchar(); // номер команды
  number=getchar(); // номер слейва

if ((command==1)&&(number==number_temp)) // если была послана команда №1 для текущего слейва
{
  PORTE.7=1; // переключаем max487 на выход
  delay_ms(1);
  printf(":%d online;",number_temp); // ответ
  PORTE.7=0; // переключаем max487 на вход
}
}

TCNT1H=0x00; // обнуляем таймер
TCNT1L=0x00; //
}


Мастер шлёт команды всем по очереди слейвам с периодом 100мс тоже по таймеру.
Идея такая: в момент включения ждём хотябы 1 байт и через 25мс (чтобы обеспечить смещение во время которого смогут быть приняты следующие команды мастера) запускаем таймер (50мс).
Далее каждые 50мс: ищем в буфере префикс ":", читаем № команды и id слейва в команде и отвечаем если команда адресована данному слейву.
Вот такая задумка была.
На деле отвечает только слейв, которому была адресована 1я команда

Завтра попробую другой подход 05.gif
Пошёл читать доки

Сообщение отредактировал Athlon128 - Oct 24 2007, 16:38
Go to the top of the page
 
+Quote Post
Прохожий
сообщение Oct 24 2007, 16:36
Сообщение #33


Cундук
*****

Группа: Участник
Сообщений: 1 478
Регистрация: 13-11-06
Из: Ростов-на-Дону
Пользователь №: 22 269



Цитата(Athlon128 @ Oct 24 2007, 20:22) *
Пытался днём на бумаге прикинуть программу. ...

Завтра попробую другой подход 05.gif

Я одного не пойму. Зачем изобретать велосипед там, где это давно уже сделано? Есть хороший стандарт MODBUS. Задача проста - ознакомиться с документами и сделать так, как там написано. Все преимущества такого подхода справедливо отметил alexander55.
Если нужны бОльшие скорости - для этого существует MODBUS over TCP/IP, что тоже достаточно легко реализуемо в настоящее время. В качестве бонуса - полнейшая совместимость с туевой хучей девайсов.
От себя могу добавить, что изобретать что либо в области RS485-строения в настоящее время уже просто неприлично.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Oct 24 2007, 18:18
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Прохожий @ Oct 24 2007, 20:36) *
От себя могу добавить, что изобретать что либо в области RS485-строения в настоящее время уже просто неприлично.

Добавлю, что для хороших протоколов существуют картинки алгоритмов для мастера и для слэйва с указанием все возможных состояний и переходов.
Без опыта лучше не изобретать. Или изобретать, только изучив подобные картинки.


Цитата(DASM @ Oct 24 2007, 16:35) *
RS485 вообще программный уровень не стандартизирует. А с чем доводилось работать - было либо ASCII либо и то и то вместе. А еще чаще просто текстовые строки - любят юзера, чтобы в обычной терминалке можно было бы с прибором поговорить.

Хм, меня юзером назвали! smile.gif
Люблю в терминалке и поговорить, и послушать. А уж лог-файл вообще автоматом получается.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
fmdost
сообщение Oct 24 2007, 20:28
Сообщение #35


Местный
***

Группа: Свой
Сообщений: 479
Регистрация: 8-05-07
Из: г. Ставрополь. Северный Кавказ. Россия
Пользователь №: 27 606



hттp://ru.wikipedia.org/wiki/Modbus

Удивительно хорошая статья на русском!
Go to the top of the page
 
+Quote Post
Athlon128
сообщение Oct 25 2007, 01:01
Сообщение #36


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 18-04-06
Пользователь №: 16 238



Ладно, всем спасибо, буду читать про modbus

Сообщение отредактировал Athlon128 - Oct 25 2007, 01:07
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 18:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01412 секунд с 7
ELECTRONIX ©2004-2016