Jump to content

    
Sign in to follow this  
mery

rs485 9615

Recommended Posts

Добрый день!

Помогите решить следующу проблему. У меня есть плата с выходом rs485 скорость передачи данных получается по документации 9615. подключаюсь к ней с ПК по переходнику rs232-rs485. Написала программу под winXP шлю данный по последовательному порту и принимаю их от платы. Когда работает шлю данные в бесконечном цикле, т.е с какой-то частотой шлю посылки с ПК на плату, иногда она в ответ вместо кода подтверждения выполнения команды шлет 0хЕ0 или 0хС0.

Иногда она просто не отвечает. Что делать. Может это быть из-за того, что скорость передачи по rs232 - 9600, а в МК - 9615?

Share this post


Link to post
Share on other sites
Может это быть из-за того, что скорость передачи по rs232 - 9600, а в МК - 9615?

Нет, не может.

15/9600 = 0,156%, UART и СОМ-порт нормально работают при разбежках до 5% (которые на 10 битах суммируются в 50 и могут вызвать сбой)

Share this post


Link to post
Share on other sites
Может это быть из-за того, что скорость передачи по rs232 - 9600, а в МК - 9615?

Нет. Отбросьте сразу. Нормально там по скорости.

Но Вы не сказали подробности: паритет, число стопов, каким образом "встаём" на передачу - аппаратным RTS или программно включили - и - поехали.

Вернее, не такой вопрос. Передача прерывается?

Share this post


Link to post
Share on other sites

скорость 9615

паритет нет

стоп биты 1

четность нет

на winapi программирую так:

 dcb.BaudRate = 9600;//temp;//9600;//StrToInt(Form1->ComboBox2->Text);       //задаём скорость передачи 115200 бод
dcb.fBinary = TRUE;                                    //включаем двоичный режим обмена
dcb.fOutxCtsFlow = FALSE;                              //выключаем режим слежения за сигналом CTS
dcb.fOutxDsrFlow = FALSE;                              //выключаем режим слежения за сигналом DSR
dcb.fDtrControl = DTR_CONTROL_DISABLE;                 //отключаем использование линии DTR
dcb.fDsrSensitivity = FALSE;                           //отключаем восприимчивость драйвера к состоянию линии DSR
dcb.fNull = FALSE;                                     //разрешить приём нулевых байтов
dcb.fRtsControl = RTS_CONTROL_DISABLE;                 //отключаем использование линии RTS
dcb.fAbortOnError = FALSE;                             //отключаем остановку всех операций чтения/записи при ошибке


dcb.ByteSize = 8;                                      //задаём 8 бит в байте
dcb.Parity = 0;

 

с платы (МК) ответы прекращаютя, т.е. зависает

Share this post


Link to post
Share on other sites

Может она за Вами банально не успевает. Ей же надо принять Ваш байт , что-то сделать, выполнить , посчитать , отослать Вам ответ. Попробуйте делать паузы в словах

Share this post


Link to post
Share on other sites

я то же так думала и слала информацию с различными промежутками времени от 50 до 1000 ms. Пробовала просто случайным образом нажатием кнопки отправить посылку отсылать данные. Результат тот же.

Share this post


Link to post
Share on other sites
Иногда она просто не отвечает. Что делать.

 

Поставить на линии RS485 два резистора по 1к, один резистор на +5, другой на 0. Резисторы поставить таким образом, чтобы в пассивном состоянии линии, когда все передатчики выключены, на входах UART-ов обеспечивался высокий логический уровень.

Share this post


Link to post
Share on other sites

RS485 двухпроводный? У вас контроллер работает с UART? а потом стоит преобразователь в RS485? В этом преобразователе есть бит переключения Tx/Rx? почитайте в даташите, на этот преобразователь, какое время занимает переключение, надо его учитывать и в плате в процессе передачи или приема не изменять этот переключатель. Так же в преобразователе RS232/RS485 идет так же управление и там тоже не мешает посмотреть характеристики.

Share this post


Link to post
Share on other sites

Если RTS не заведен, Вы делаете правильно, иначе - его надо дергать перед началом посылки, да еще и паузу желательно. Умные дядьки из отсюдава придумали заместо паузы свинячить первым байтом 0xF0, он позволяет восстановить синхру при возможном образовании помех от включения трансивера на передачу. Типа "продуть канал".

Share this post


Link to post
Share on other sites

У меня микросхема max483. Жаль не могу выложить схему. К МК она подключена через hef4066bt. RE, DE соедины и подключены к МК. RO и DI подключены через hef4066bt на МК.

Share this post


Link to post
Share on other sites
bla-bla-bla

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this