Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: RS-485  (Прочитано 25469 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
spasitel
Гость
« : 27-01-2009 13:56 » 

Здравствуйте.

Ребята, подскажите, пожалуйста, как правильно программировать COM порт по протоколу RS-485?
На что нужно обратить внимание какие отличия у него от RS-232?
Какие функции API можно использовать для работы с ним?

Уже замучился..хочу разобраться как правильно работает вся эта "каша". В итоге у самого в голове стала каша..Мне нужно опрашивать контролер управления мельничным комплексом...

Буду благодарен за подсказки и рекомендации..
Извините, если что-то не так изложил.
Я пока только пробую с ним работать.

Всем удачи!
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 27-01-2009 14:45 » 

1. порт(485) в компе есть? Подозреваю что нету.
2. Работает также как и работа с ком портами
3. Нужен адаптер 485-232.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 27-01-2009 16:49 » 

В случае внешнего конвертера RS232<->RS485 различия могут быть только для двухпроводных версий. В этом случае какой-то из управляющих сигналов RS232 используется для переключения режима приема/передачи. В случае четырехпроводного интерфейса разницы нет.

Различия есть в протокольной части, т.к., в отличии от RS232, RS485 позволяет подключать несколько ведомых устройств на одну шину, но это выходит за рамки управления интерфейсом.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
spasitel
Гость
« Ответ #3 : 02-02-2009 08:38 » 

Привет собратьям , которые откликнулись! Улыбаюсь

Критику приветствую потому, что она позволяет  посмотреть на свои ошибки со стороны...
Плата с RS-232 на RS485 адаптер есть, соединение с контролером двухпроводное..

1.Подскажите, пожалуйста, какие апишные функции использовать, для установления паритета
(MARKPARYTY,SPACEPARITY,...).Я меняю их с помощью перенастройки структуры DCB. Смеяться с моих ошибок разрешаю.Ругаться тоже можна, только не очень сильно..

2.Если я правильно понял, в этом протоколе(RS-485) нужно использовать переключение между посылкой данных и приемом. ДЛя этой цели использую API EscapeCommFunction(hport, CLRDTR) и EscapeCommFunction(hport, SETDTR)

Вообще вопрос выглядит так, нужно контролеру послать входной управляющий пакет
1-ый байт - Адрес приемника #3
2-ый байт - Код команды #2 (возвратить статус устройства)
3-ый байт - Контрольная сумма #5
4-ый байт - Байт конца пакета #0
Структура байта - 9-битовая. В байте адреса приемника и байте конца пакета 9-ый бит=1(адрес), в остальных - 0(данные)
контрольная сумма вычисляеться простым сложением всех байтов пакета без учета переноса
Байт конца пакета равен 0
Байты данных тоже будут посылаться контролеру в пакете. Меня пока интересует хотябы получить хоть какой-то ответ от контролера ,а то вообще гад не хочет "говорить" со мной...

Помогите найти ошибки, пожалуйста!
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 02-02-2009 17:09 » 

1. Лениво. Посмотри статью (она из-за длины разбита на две части) - там все есть об управление портом:
https://club.shelek.ru/viewart.php?id=208
https://club.shelek.ru/viewart.php?id=225

2. RS-485 - не протокол, а электрический интерфейс! А вот по нему уже пускают данные. Когда просто поток байтов не устраивает, придумывают протокол (правила обмена).

Вообще, как-то непонятно ты пишешь. Если знаешь - делай, если что-то не получается - спрашивай (но конкретику). Не надо все в одну кучу сваливать.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #5 : 03-02-2009 07:44 » 

spasitel,   
RXL прав, как-то не очень понятен вопрос.
Если ты работаешь через переходник RS232-Rs485, то ты работаешь просто с RS232 и не важно что висит на нем (хоть переходник, хоть лампочки) работа с ним описана в МСДНе.

А про RS-485. Попробуй начать с http://ru.wikipedia.org/wiki/RS-485 там в разделе "Ссылки" есть "RS-485 для чайников". Ну и походи по ссылкам, которые в той статье. 
« Последнее редактирование: 03-02-2009 07:46 от Артем » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 03-02-2009 08:50 » 

я так понимаю что у парня в протоколе передачи 9-ти битовая посылка
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 03-02-2009 16:35 » new

Хм. В таком случае придется контролировать отправку данных, прежде чем менять бит четности: установил режим, отправил данные, дождался опустошения буфера и все заново.

spasitel, а чем вызвана такая сложность? Часом у тебя не 8051-совместимый чип на другом конце?
« Последнее редактирование: 03-02-2009 16:38 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
spasitel
Гость
« Ответ #8 : 05-02-2009 07:19 » 

Здравствуйте!

Спасибо за подсказки!
На счет того, какой чит стоит не могу сказать потому, что и сам толком не знаю..Постараюсь узнать..
По пводу того, как изложил, извините!
Уже более детально почитал инфу, теперь разницу улавливаю, вроде..
А что, этот чип требует особого подхода к передаче?
В любом случае Ваши подсказки и рекомендации приму к сведению.
Еще надеюсь на Ваши подсказки, как правильно двигаться вперед.
Пока Всем СПАСИБО.

Андрей.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 05-02-2009 07:34 » 

spasitel, у МП серии 51, при асинхронной передачи, можно привязать еще один бит, так называемый - для межпроцессорного общения. Это хорошо, когда построена "одноранговая" сеть и каждый контроллер является и мастером и слейвом. Т.е МП при получении этого бита выставляет прерывание, что помогает не дергаться на каждый принятый байт в сети.
Подробности - в описании МП51.
а протокол обмена очень стремный
Цитата
Вообще вопрос выглядит так, нужно контролеру послать входной управляющий пакет
1-ый байт - Адрес приемника #3
2-ый байт - Код команды #2 (возвратить статус устройства)
3-ый байт - Контрольная сумма #5
4-ый байт - Байт конца пакета #0
а если Контрольная сумма равна байту конца пакета?
А если длина пакета фиксированная, то зачем признак конца пакета.
Подсчет контрольной суммы - бред. Что он защитит/покажет? в таком случае применяются более надежные методы, например CRC16.

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
spasitel
Гость
« Ответ #10 : 05-02-2009 07:57 » 

SLA, я понимаю что протокол стремный..тот, кто его писал давно слинял с моей канторы, а мне вот осталасось наследие.. Я так новичок в этой теме, да и еще никак не могу добиться от этого контролера хоть какого-то ответа. ТО ли я тупой, то ли в самом деле тут такое намутили..
Ты извини, я еще не все термины улавливаю, что ТЫ с Ребятами используешь для объяснения.
Я все же стараюсь разобраться..
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 05-02-2009 08:05 » 

spasitel, ничего страшного - ты спрашивай.

На первом этапе - ты не добивайся получить ответ от контроллера. Послушай сеть. Посмотри бегающие пакеты.
Возможны варианты.
Контроллер является мастером(master). И ему пофиг что творится в сети.
Контроллер является слейвом(slave). Тогда он должен иметь "сетевой адрес".
Контроллер и мастер и слейв.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
spasitel
Гость
« Ответ #12 : 05-02-2009 08:20 » 

Извини ,что наверное мешаю, но как посмотреть бегающие пакеты?
Ты имеешь в виду соединить два компорта и запустить две проги ,которые будут обмениваться инфой?
"Сетевой адрес" мой контролер имеет(#3). По крайней мере я к нему обращаюсь по такому адресу и в документации так указано...
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 05-02-2009 08:32 » 

посмотреть пакеты?
Ты уже подключен к 485-й сети?
Тогда просто читай из компорта данные и анализируй.
Вот не помню я, как будет себя вести система с девятым битом...
Т.е. твоя задача получить из своей проги сниффер компорта.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
spasitel
Гость
« Ответ #14 : 05-02-2009 08:49 » 

Подключил к компорту адаптер 232<->485 . Далее к адаптеру подключен контролер по двухпроводной линии.
Посылаю контролеру входной управляющий пакет. Жду ответа от него, читая данные, хоть какие-то, которые дылжны приходить на вход COM порта.
Но, к сожалению, вообще ничего нет. Индикатор входных данных, что на контролере, что на плате-адептере не мигает.
Он, индикатор, ведь должен мигать, если хоть любые данные контролер возвращает!?
При отправке данных на контролер индикатор мигает.
Да, что такое "сниффер компорта"?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 05-02-2009 08:57 » 

Та не торопись с отправкой.
Читай ком порт.
Добейся каких-то данных со своего адаптера.
Может проблема в адаптере, може адаптер не настроен на нужную скорость. Может...

сниффер - это такая хрень, которая слушает сеть и принимает в себя все входящие пакеты
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
spasitel
Гость
« Ответ #16 : 05-02-2009 09:01 » 

Ладно, буду добиваться хоть каких-то данных ... Улыбаюсь
А сниффера у меня нет, к сожалению..
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 05-02-2009 09:06 » 

spasitel, так я тебе предлагаю, что ты сам напишешь отой сниффер.
Один из методов отладки
Два компа
На своем запускаешь свою прогу, на другом гипертерминал
даже модно сеть послушать -
просто подключиться к комппорту через гипертерминал.
Если данные получаешь - электрическая часть исправна.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
spasitel
Гость
« Ответ #18 : 05-02-2009 09:19 » 

Сниффер я не напишу, покрайней мере не сейчас...возможности и знания не те...
А что такое гипертерминал?
Електрическая часть вроде исправна..У меня есть программка, для тестирования данного контролера.
контролер с ней работает, обмениваеться данными. Скорость конечно только одна - 19200 и никакая другая более. И исходник вроде есть. Я по нему смотрел..вроде все более менее понятно, но у меня все равно не работает..Там он делает так(процедура отправки) :
Код:
function SendRecieveStr(sAdr, sCmd: string):string;
 const iWait=0;
 var
  Str: string;
  i : integer;
begin
 with fmUnitUtils do begin
   ComPort.SetRTS(False);
   ComPort.Parity.Bits := prMark;
   ComPort.WriteStr(sAdr);
   { ComPort.Parity.Bits := prSpace; !!!!! можно подумать}
   for i := 1 to Length(sCmd) do begin
    ComPort.WriteStr(sCmd[i]);
    ComPort.Parity.Bits := prSpace;
   end;
   ComPort.WriteStr(#0);
   ComPort.Parity.Bits := prMark;
   ComPort.WriteStr(#0);

   ComPort.SetRTS(True);
   ComPort.ReadStr(Str,50);
 end;
 Result := Str;
end;
Я хочу сделать с помощью апишных функций, не используя компонент. Разобраться хочеться самому...
Вот и застрял, не могу все в одно сложить, понять как эта система работает...
« Последнее редактирование: 05-02-2009 09:28 от spasitel » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #19 : 05-02-2009 09:24 » 

spasitel, оформляй код тегами [code][/code]
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines