Перейти к содержанию
    

RS485 вообще программный уровень не стандартизирует. А с чем доводилось работать - было либо ASCII либо и то и то вместе. А еще чаще просто текстовые строки - любят юзера, чтобы в обычной терминалке можно было бы с прибором поговорить.

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

 

Если в терминалке с прибором поговорить, то текстовые сообщения (это понятно).

А если программа пишется для PC, типа прибора, то ModBus RTU.

Если контроллеры объединяются в сеть, то ModBus RTU.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

В основном коде программы:

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:

Пошёл читать доки

Изменено пользователем Athlon128

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Я одного не пойму. Зачем изобретать велосипед там, где это давно уже сделано? Есть хороший стандарт MODBUS. Задача проста - ознакомиться с документами и сделать так, как там написано. Все преимущества такого подхода справедливо отметил alexander55.

Если нужны бОльшие скорости - для этого существует MODBUS over TCP/IP, что тоже достаточно легко реализуемо в настоящее время. В качестве бонуса - полнейшая совместимость с туевой хучей девайсов.

От себя могу добавить, что изобретать что либо в области RS485-строения в настоящее время уже просто неприлично.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

От себя могу добавить, что изобретать что либо в области RS485-строения в настоящее время уже просто неприлично.

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

Без опыта лучше не изобретать. Или изобретать, только изучив подобные картинки.

 

 

RS485 вообще программный уровень не стандартизирует. А с чем доводилось работать - было либо ASCII либо и то и то вместе. А еще чаще просто текстовые строки - любят юзера, чтобы в обычной терминалке можно было бы с прибором поговорить.

Хм, меня юзером назвали! :)

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Удивительно хорошая статья на русском!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Изменено пользователем Athlon128

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...