alexander55 0 24 октября, 2007 Опубликовано 24 октября, 2007 · Жалоба RS485 вообще программный уровень не стандартизирует. А с чем доводилось работать - было либо ASCII либо и то и то вместе. А еще чаще просто текстовые строки - любят юзера, чтобы в обычной терминалке можно было бы с прибором поговорить. Стандартизация есть для PLC полная. Под SCADы много прибамбасов для ModBus. Если в терминалке с прибором поговорить, то текстовые сообщения (это понятно). А если программа пишется для PC, типа прибора, то ModBus RTU. Если контроллеры объединяются в сеть, то ModBus RTU. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Athlon128 0 24 октября, 2007 Опубликовано 24 октября, 2007 (изменено) · Жалоба Пытался днём на бумаге прикинуть программу. В основном коде программы: 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: Пошёл читать доки Изменено 24 октября, 2007 пользователем Athlon128 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syv 0 24 октября, 2007 Опубликовано 24 октября, 2007 · Жалоба Пытался днём на бумаге прикинуть программу. ... Завтра попробую другой подход :05: Я одного не пойму. Зачем изобретать велосипед там, где это давно уже сделано? Есть хороший стандарт MODBUS. Задача проста - ознакомиться с документами и сделать так, как там написано. Все преимущества такого подхода справедливо отметил alexander55. Если нужны бОльшие скорости - для этого существует MODBUS over TCP/IP, что тоже достаточно легко реализуемо в настоящее время. В качестве бонуса - полнейшая совместимость с туевой хучей девайсов. От себя могу добавить, что изобретать что либо в области RS485-строения в настоящее время уже просто неприлично. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DogPawlowa 0 24 октября, 2007 Опубликовано 24 октября, 2007 · Жалоба От себя могу добавить, что изобретать что либо в области RS485-строения в настоящее время уже просто неприлично. Добавлю, что для хороших протоколов существуют картинки алгоритмов для мастера и для слэйва с указанием все возможных состояний и переходов. Без опыта лучше не изобретать. Или изобретать, только изучив подобные картинки. RS485 вообще программный уровень не стандартизирует. А с чем доводилось работать - было либо ASCII либо и то и то вместе. А еще чаще просто текстовые строки - любят юзера, чтобы в обычной терминалке можно было бы с прибором поговорить. Хм, меня юзером назвали! :) Люблю в терминалке и поговорить, и послушать. А уж лог-файл вообще автоматом получается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fmdost 0 24 октября, 2007 Опубликовано 24 октября, 2007 · Жалоба hттp://ru.wikipedia.org/wiki/Modbus Удивительно хорошая статья на русском! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Athlon128 0 25 октября, 2007 Опубликовано 25 октября, 2007 (изменено) · Жалоба Ладно, всем спасибо, буду читать про modbus Изменено 25 октября, 2007 пользователем Athlon128 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться