Современные технологии автоматизации» («СТА») —  журнал для квалифицированных специалистов по промышленной автоматизации Форум СТА — современные технологии автоматизации Домашняя страница
Домашняя страница форума CTA Домашняя страница форума CTA > II. АСУТП и SCADA > Архив
  Активные темы Активные темы
  FAQ FAQ  Искать в форуме   Зарегистрироваться Зарегистрироваться  Вход в систему Вход в систему

RS232/RS485

 Ответить Ответить Страница  <123
Автор
Сообщение
Evpator Смотреть выпадающим
Новичок
Новичок


Присоединился: 30 Октябрь 2003
Категория: Ukraine
Online Status: Offline
Публикации: 9
Свойства публикации Свойства публикации   Ответить, цитируя автора - Evpator Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Тема сообщения: RS232/RS485
    Опубликовано: 01 Ноябрь 2003 00:06

Первоначально опубликовано bessonov

Первоначально опубликовано Olej

Первоначально опубликовано bessonov

но если вы уже используете преобразователь, то проблем быть не должно...

Преобразователи есть разные - с автоматической коммутацией канала и без оной... Я в этом слабо понимаю, но мне это в своё время сказали мои аппаратчики: "за что купил - за то и продал"(с).


Аналогично...

Вот, собственно в случае "без оной" и возникает проблема "ручного" разворота(на передачу) линии RS485  при помощи сигнала RTS.

Этот сигнал я устанавливаю перед вызовом write(portDevFileDescr ......

А вот когда снять этот сигнал(т.е. вернуть линию в состояние приёма.....

это вопрос)

В Kylix эту задачу я решил так:

      bit:=TIOCM_RTS;

//устанавливаем сигнал RTS

      if FRS485_mode = true then ioctl(portfd,TIOCMBIS,@bit);

      result:=libc.__write(portfd,Buf,Count);

//этот код постоянно опрашивает  бит пустоты передатчика (TEMT)
      if FRS485_mode = true then

      repeat ioctl(portfd,TIOCSERGETLSR,@status);
      until (status>0);

//если передатчик опустошился, то тогда снимаем сигнал RTS

      if FRS485_mode = true then  ioctl(portfd,TIOCMBIC,@bit);

Команду TIOCSERGETLSR, я нашёл когда-то в коде драйвера (она не была нигде документированна) ком порта (Дистрибутив RedHat 7.1)

И там(коменты в коде драйвера) было сказано, что мол ребята, если вам нужно работать с RS485,

то используйте эту команду.....

Вот я и думаю - это как-то неестественно, что в Линуксе это есть,

а в QNX столь важную возможность не реализовали. Наверное я ошибаюсь ......

Наверх
Evpator Смотреть выпадающим
Новичок
Новичок


Присоединился: 30 Октябрь 2003
Категория: Ukraine
Online Status: Offline
Публикации: 9
Свойства публикации Свойства публикации   Ответить, цитируя автора - Evpator Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 01 Ноябрь 2003 15:40

Первоначально опубликовано dmi_a

Первоначально опубликовано dmi_a

[QUOTE=Evpator]
Ух. Вам вместе с системой поставляется исходный код драйвера ком-порта. Берите его и читайте.


/usr/src/ddk-6.2.1/char/
и далее ser8250

 

Спасибо вам

Всё завершилось пересборкой драйвера

я немного подправил код функции :

int drain_check(TTYDEV *ttydev, uintptr_t *count)   (файл tto.c в исходниках драйвера)

int drain_check(TTYDEV *ttydev, uintptr_t *count) {
 TTYBUF    *bup = &ttydev->obuf;
 DEV_8250  *dev = (DEV_8250 *)ttydev;
 const uintptr_t *port = dev->port;

 // if the device has DRAINED, return 1
 if (dev->tty.waiting_drain && (bup->cnt == 0) &&
  (in8(port[REG_LS]) & LSR_TSRE)) return 1;
 else// вот этот else мой!
 {

  if (dev->tty.waiting_drain) {
     while(bup->cnt>0);//Ждём пока опустошится внутренний буфер  драйвера
     while((in8(port[REG_LS]) & LSR_TSRE)==0);//Ждём пока опустошится регистр сдвига передатчика

//грубовато.... , но это работает
     return 1;

  }

 } 
 // if the device has not DRAINED, set a timer based on 50ms counts
 // wait for the time it takes for one character to be transmitted
 // out the shift register.  We do this dynamically since the
 // baud rate can change.  
 *count = ((IO_CHAR_DEFAULT_BITSIZE * 20) / ttydev->baud) + 1;
 
 return 0;
}

Теперь вызов  tcdrain(deviceDescriptor_); блокирует поток

на достаточно точный промежуток времени

 

 

Наверх
dmi_a Смотреть выпадающим
Новичок
Новичок


Присоединился: 28 Октябрь 2003
Категория: Russian Federation
Online Status: Offline
Публикации: 11
Свойства публикации Свойства публикации   Ответить, цитируя автора - dmi_a Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 01 Ноябрь 2003 17:56
Первоначально опубликовано Evpator


...

if (dev->tty.waiting_drain) {
     while(bup->cnt>0);//Ждём пока опустошится внутренний буфер драйвера
     while((in8(port[REG_LS]) & LSR_TSRE)==0);//Ждём пока опустошится регистр сдвига передатчика


//грубовато.... , но это работает
...

Теперь вызов tcdrain(deviceDescriptor_); блокирует поток


на достаточно точный промежуток времени



А данные в это время продолжают поступать? Помните, драйвер многопоточный и ОЧЕНЬ КРИВОЙ!!! Попробуйте снять картинку инструментальным ядром - очнеь многое проясняет.

Знаю, что Steinhoff Automation были вынуждены его полностью переписать для своих заказчиков. Можете попробовать связаться с ними...
Если есть какие-то конкретные вопросы - ко мне в почту, я попробую задать их автору этого драйвера. Безо всяких гарантий, разумеется.
Наверх
dmi_a Смотреть выпадающим
Новичок
Новичок


Присоединился: 28 Октябрь 2003
Категория: Russian Federation
Online Status: Offline
Публикации: 11
Свойства публикации Свойства публикации   Ответить, цитируя автора - dmi_a Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 01 Ноябрь 2003 18:08
Первоначально опубликовано Evpator


а в QNX столь важную возможность не реализовали. Наверное я ошибаюсь ......


Загляните сюда, может можно обойтись без модификации драйвера?
Google:Groups
Наверх
Evpator Смотреть выпадающим
Новичок
Новичок


Присоединился: 30 Октябрь 2003
Категория: Ukraine
Online Status: Offline
Публикации: 9
Свойства публикации Свойства публикации   Ответить, цитируя автора - Evpator Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 02 Ноябрь 2003 17:21
Первоначально опубликовано dmi_a

Первоначально опубликовано Evpator


...

if (dev->tty.waiting_drain) {
     while(bup->cnt>0);//Ждём пока опустошится внутренний буфер драйвера
     while((in8(port[REG_LS]) & LSR_TSRE)==0);//Ждём пока опустошится регистр сдвига передатчика


//грубовато.... , но это работает
...

Теперь вызов tcdrain(deviceDescriptor_); блокирует поток


на достаточно точный промежуток времени



А данные в это время продолжают поступать? Помните, драйвер многопоточный и ОЧЕНЬ КРИВОЙ!!! Попробуйте снять картинку инструментальным ядром - очнеь многое проясняет.

Знаю, что Steinhoff Automation были вынуждены его полностью переписать для своих заказчиков. Можете попробовать связаться с ними...
Если есть какие-то конкретные вопросы - ко мне в почту, я попробую задать их автору этого драйвера. Безо всяких гарантий, разумеется.

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

Это интересно.

Что такое инструментальное ядро?  Как этим пользоваться?

А ещё лучше, где про это прочитать?

Если это есть в документации по QNX6, то подскажите англоязычный

эквивалент термина "инструментальное ядро".

Спасибо

Наверх
Sergey Sorokin Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 27 Март 2003
Категория: Russian Federation
Online Status: Offline
Публикации: 240
Свойства публикации Свойства публикации   Ответить, цитируя автора - Sergey Sorokin Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 03 Ноябрь 2003 11:23

В форуме СТА можно обсуждать любые ОС РВ (не только QNX), а так же применение ОС общего назначения для задач АСУ ТП. 

Первоначально опубликовано Olej

Поэтому - вполне могло бы быть уместно и здесь. Тем более, что на http://www.qnx.org.ru именно сейчас "реконструкция" и некоторое ... неудобство в работе.

Наверх
dmi_a Смотреть выпадающим
Новичок
Новичок


Присоединился: 28 Октябрь 2003
Категория: Russian Federation
Online Status: Offline
Публикации: 11
Свойства публикации Свойства публикации   Ответить, цитируя автора - dmi_a Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 03 Ноябрь 2003 20:01
Первоначально опубликовано Evpator


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


Это интересно.


Что такое инструментальное ядро? Как этим пользоваться?


А ещё лучше, где про это прочитать?


Если это есть в документации по QNX6, то подскажите англоязычный


эквивалент термина "инструментальное ядро".


Спасибо



Инструментальное ядро входит только в профессиональную версию системы. Instrumental Kernel.
Закажите evaluation version у qss через swd.
Там же momentics ide, мощнейщие средства диагностики...
DejaView опять же.
Посмотрите
http://qnx.wox.org/qnx/screenshots/dejaview.gif
Хотел показать скриншот, как проводиться диагностика средствами плагинов ide, но пока не нашёл.
Наверх
Evpator Смотреть выпадающим
Новичок
Новичок


Присоединился: 30 Октябрь 2003
Категория: Ukraine
Online Status: Offline
Публикации: 9
Свойства публикации Свойства публикации   Ответить, цитируя автора - Evpator Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 03 Ноябрь 2003 20:33
Первоначально опубликовано dmi_a

Первоначально опубликовано Evpator


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


Это интересно.


Что такое инструментальное ядро? Как этим пользоваться?


А ещё лучше, где про это прочитать?


Если это есть в документации по QNX6, то подскажите англоязычный


эквивалент термина "инструментальное ядро".


Спасибо



Инструментальное ядро входит только в профессиональную версию системы. Instrumental Kernel.
Закажите evaluation version у qss через swd.
Там же momentics ide, мощнейщие средства диагностики...
DejaView опять же.
Посмотрите
http://qnx.wox.org/qnx/screenshots/dejaview.gif
Хотел показать скриншот, как проводиться диагностика средствами плагинов ide, но пока не нашёл.

Ok спасибо

Наверх
dmi_a Смотреть выпадающим
Новичок
Новичок


Присоединился: 28 Октябрь 2003
Категория: Russian Federation
Online Status: Offline
Публикации: 11
Свойства публикации Свойства публикации   Ответить, цитируя автора - dmi_a Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 03 Ноябрь 2003 20:46
http://qnx.wox.org/sat/

Вот тут лежат скриншоты SAT. По ним всё сразу видно.
Наверх
 Ответить Ответить Страница  <123

Переход на форум Права доступа на форуме Смотреть выпадающим

Bulletin Board Software by Web Wiz Forums® version 9.64
Powered by Web Wiz Forums Free Express Edition
Copyright ©2001-2009 Web Wiz