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

Проблема с ком-портом в ADAM-5510E с "золотой" полосой

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


Присоединился: 09 Сентябрь 2005
Категория: Russian Federation
Online Status: Offline
Публикации: 8
Свойства публикации Свойства публикации   Ответить, цитируя автора - Rashid Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Тема сообщения: Проблема с ком-портом в ADAM-5510E с "золотой" полосой
    Опубликовано: 08 Апрель 2008 04:52
Контроллеры серии ADAM-5510 время от времени (к счастью пока это происходит редко) подвергаются фирмой Advantech весьма кардинальной модернизации.

Примечание: здесь и далее речь идет о программируемых контроллерах ADAM-5510E.

В свое время нам уже пришлось столкнуться с проблемой при переходе от ADAM-5510 к ADAM-5510M в связи с тем, что Advantech сменил микроконтроллер Amd188Em, стоящий на материнской плате в ADAM-5510, на микроконтроллер RDC R8800. Подробнее о возникших тогда проблемах и их причинах вы можете прочитать здесь: http://forum.cta.ru/forum_posts.asp?TID=1294&KW=ADAM%2D5510E.

Сейчас возникла новая проблема, о которой речь пойдет ниже.

На первой фотографии приведен контроллер ADAM-5510E, который до сих пор успешно использовался нами во многих проектах (речь идет о контроллере, а не о конкретной конфигурации модулей).



На второй же фотографии вы тоже можете увидеть контроллер ADAM-5510E, но уже новый - купленный недавно в фирме Прософт.



Как видите контроллер ADAM-5510E, поставляемый в данный момент, отличается от тех, что были раньше, наличием металлической полосы "золотого" цвета, идущей от левого края до правого. Данная полоса связана электрически с корпусами ком-портов плюс на заднюю поверхность контроллера выведен винт, который также связан с этой полосой. С GND данная полоса развязана.

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

Итак, есть программа, которая принимает от компьютера по ком. каналу RS-232 данные, анализирует корректность пакета, формирует ответ и передает этот ответ компьютеру. Никакие доп. модули при этом не используются (!). То есть модули, которые вы видете на фотографии, в программе не задействованы (!) - к ним нет обращения. Все работает. Скорость приемо-передачи 57600. Данные принимаются и передаются. За полчаса времени никаких сбоев замечено не было. Для посылки данных на стороне компьютера используется терминал из стандартной утилиты Advantech для серии ADAM-4000-5000.

А теперь просто добавляем 2 модуля - ADAM-5080 и ADAM-5018. При этом программу оставляем без изменений. Еще раз напомню, что обращения к каким-либо модулям в программе нет (!), поэтому наличие или отсутствие любых модулей на шине с программной точки зрения никакой роли не играет.



И программа перестает работать практически через несколько секунд (от 5 до 15). А если точнее - перестают отправляться данные по ком-порту, т.к. установка флага прерывания TX в регистре микросхемы UART не приводит к срабатыванию обработчика прерывания.

Если же эту же программу запускать на "старом" варианте контроллера ADAM-5510E (см. первую фотографию) с теми же самыми модулями, то все работает прекрасно в любой конфигурации.

То есть что мы имеем? Но новых вариантах контроллера ADAM-5510E изменение аппаратной конфигурации при абсолютно примитивной программе, которая занимается только приемом/передачей по ком. каналу данных, и которая при этом никак не завязана на саму конфигурацию модулей, приводит к изменению взаимодействия микроконтроллера (RDC R8800) и микросхемы UART в ADAMе-5510E. На старой версии контроллера ADAM-5510E подобное не наблюдается.

Программа написана на ассемблере. Библиотеки фирмы Advantech не используются. Модули коммуникации, разработанные нами еще несколько лет назад, прошли проверку временем и успешно работали на десятке контроллеров ADAM-5510E до тех пор, пока не появилась новая версия реализации ADAM-5510E с "золотой" полосой (см. вторую фотографию).

Кто-нибудь сталкивался с какими-либо проблемами в своих программах при использовании их на новых версиях контроллеров ADAM-5510E (с "золотой" полосой), которые при этом отсутствовали (отсутствуют) на старых версиях?

Особенно было бы интересно услышать отзыв технических специалистов фирмы Прософт.

Буду благодарен за любые идеи.

P.S. Кстати, если оставить только модули ADAM-5080 и ADAM-5018, а остальные извлечь, то все работает. Кроме этого, в процессе экспериментирования в конфигурации со всеми модулями (фото 3), удавалось иногда увеличить время, через которое происходил сбой, например, после перемещения модуля ADAM-5080 на последний слот. Однако, сбой все равно железно происходил.
Наверх
AlexZ_new Смотреть выпадающим
Новичок
Новичок
Аватар

Присоединился: 21 Март 2008
Категория: Ukraine
Online Status: Offline
Публикации: 8
Свойства публикации Свойства публикации   Ответить, цитируя автора - AlexZ_new Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 08 Апрель 2008 09:20

Попробуйте передавать сообщения не по прерыванию, а по наличию готовности. Возможно у Вас модули сидят на том же прерывании, что и com-порт. Можете опубликовать скелет своего драйвера - т.е. работу с регистрами com-порта. Я использовал всегда пропатченый мною драйвер от advantech gen-drv.exe. Могу выслать - драйвер, библиотеку и программу настройки.

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


Присоединился: 09 Сентябрь 2005
Категория: Russian Federation
Online Status: Offline
Публикации: 8
Свойства публикации Свойства публикации   Ответить, цитируя автора - Rashid Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 08 Апрель 2008 13:18
> Могу выслать - драйвер, библиотеку и программу настройки.

Можете выслать по адресу: r4f (собака) mail ru
Буду признателен.

> Возможно у Вас модули сидят на том же прерывании, что и com-порт.

Программно аппаратные модули (5017, 5024, 5018 и т.д.) вообще ни на чем не сидят, потому что нет (!) кода в программе, который бы их обслуживал. Их можно ставить в любой слот, или вообще не ставить, а программа должна работать. И работает (!) на старой версии контроллера независимо от конфигурации. На новой же версии начинаются вот такие приколы.

> Можете опубликовать скелет своего драйвера - т.е. работу с регистрами com-порта.

Непосредственно в данный момент меня удивляет зависимость работы с UART от наличия или отсутствия модулей на шине, причем еще и зависимость от их конкретного расположения (слота). При том, что в программе (в коде) нет ни одной функции обращения к этим модулям, или их инициализации. Программа полностью написана на ассемблере и не содержит ни одной посторонней библиотеки. Также заблокированы все остальные прерывания, поэтому каких-либо обработчиков, оставшихся после запуска встроенного DOS, нет.

Сейчас меня интересует не только поиск обходного пути при работе с ком-портом, но и причина такого поведения аппаратуры (не программы).

P.S. Скелет драйвера:
PROC       com_tx

               cli

               mov     [ _self.tx_buf.cur_index ], 0
               mov     [ _self.tx_buf.empty ], FALSE

               ; разрешаем возникновение прерывания
               ; по окончанию передачи данных

               COM_REG     IER
               in     al, dx
               or     al, com_TX_INT_ENABLE
               out     dx, al


               ; разрешаем обработку прерываний

               sti

               ret

ENDP       com_tx


PROC       com_tx_handler

               mov     di, [ _self.tx_buf.addr ]
               mov     bx, [ _self.tx_buf.cur_index ]

               jmp     @@check_tx_buf

@@tx_next_char:
               COM_REG     LSR
               in     al, dx

               test     al, com_THRE
               jz     @@exit


               ; передаем очередной байт данных
               ; из буфера передатчика

               mov     al, [ di + bx ]
               COM_REG     THR
               out     dx, al

               inc     bx


               ; уходим из обработчика до окончания
               ; передачи текущего байта данных
               
               jmp     @@exit

@@check_tx_buf:
               ; все байты данных переданы ?

               cmp     bx, [ _self.tx_buf.length ]
               jb     @@tx_next_char


               ; да ( переданы все данные )

               ; устанавливаем флаг, что
               ; все данные переданы

               mov     [ _self.tx_buf.empty ], TRUE


               ; запрещаем возникновение прерывания
               ; по окончанию передачи данных
               
               COM_REG     IER
               in     al, dx
               and     al, NOT com_TX_INT_ENABLE
               out     dx, al

               xor     bx, bx

@@exit:
               mov     [ _self.tx_buf.cur_index ], bx

               ret

ENDP       com_tx_handler    

;----------------------------------------------------------------
; регистры УАПП
;----------------------------------------------------------------

com_RBR               =     0     ; receive buffer register
com_THR               =     0     ; transmitter holding register

com_DL0               =     0     ; divisor latch (LSB)
com_DL1               =     1     ; divisor latch (MSB)

com_IER               =     1     ; interrupt enable register

com_IIR               =     2     ; interrupt identification register
com_FCR               =     2     ; FIFO control register

com_LCR               =     3     ; line control register
com_MCR               =     4     ; modem control register
com_LSR               =     5     ; line status register
com_MSR               =     6     ; modem status register

com_SCR               =     7     ; scratch register

;----------------------------------------------------------------


;----------------------------------------------------------------
; биты регистров УАПП
;----------------------------------------------------------------

; IER ( interrupt enable register )

com_RX_INT_ENABLE     =     01h
           
com_TX_INT_ENABLE     =     02h


; LCR ( line control register )

com_DLAB          =     80h


; MCR ( modem control register )

com_DTR               =     01h

com_RTS               =     02h

com_OUT1          =     04h

com_OUT2          =     08h


; FCR ( FIFO control register )

com_FIFO_ENABLE          =     01h

com_RX_FIFO_RESET     =     02h

com_TX_FIFO_RESET     =     04h

com_FIFO_TRIGGER_LEVEL     =     0C0h


; LSR ( line status register )

com_FIFO_ERROR          =     80h

com_TEMT          =     40h     ; transmitter empty

com_THRE          =     20h     ; transmitter holding register empty

com_BREAK          =     10h     ; broken line detected

com_FRAMING_ERROR     =     08h

com_PARITY_ERROR     =     04h

com_OVERRUN_ERROR     =     02h

com_RX_BUF_FULL          =     01h


;----------------------------------------------------------------




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

Присоединился: 21 Март 2008
Категория: Ukraine
Online Status: Offline
Публикации: 8
Свойства публикации Свойства публикации   Ответить, цитируя автора - AlexZ_new Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 09 Апрель 2008 17:09

На первый взгляд - 1_й байт лучше передавать не по прерыванию.

Второе - как Вы обрабатываете прерывания?

Я столкнулся с тем, что на новых компьютерах (начиная примерно с Celeron600), у меня не работал Turbo Debugger TD3.1 через com-port, потому что были ложные прерывания по вводу. Причина в том, как обработать прерывание: правильный путь - это считывать причину из соответствующего регистра, тогда кстати не нужно будет дергать маску прерываний на вывод.

Сейчас вышлю то, что обещал.

Наверх
KozlovKS Смотреть выпадающим
Prosoft.ru
Prosoft.ru


Присоединился: 21 Июнь 2003
Online Status: Offline
Публикации: 432
Свойства публикации Свойства публикации   Ответить, цитируя автора - KozlovKS Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 09 Апрель 2008 17:13

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

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


Присоединился: 09 Сентябрь 2005
Категория: Russian Federation
Online Status: Offline
Публикации: 8
Свойства публикации Свойства публикации   Ответить, цитируя автора - Rashid Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 09 Апрель 2008 17:35
> Проблема решается доработкой объединительной панели в новых модулях. Думаю, что модули в новых поставках уже доработаны.

Спасибо за ответ.

На будущее, мы были бы очень признательны, если бы фирма "Прософт" предупреждала о подобных вещах сразу же, как только ей становится об этом известно.
Наверх
Semelenov Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 15 Октябрь 2003
Категория: Belarus
Online Status: Offline
Публикации: 141
Свойства публикации Свойства публикации   Ответить, цитируя автора - Semelenov Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 27 Июнь 2008 16:13
Первоначально опубликовано KozlovKS

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

Может я чего-то не понял, но ГДЕ ответ ??? Про какую доработку Вы тут говорите?

Если можно - напишите поподробнее об этой доработке.

 

P.S. у меня тоже были проблемы с опросом ком-портов как раз при добавлении модулей в АДАМ - моя проблема решилась заменой блока питания на более мощный, т.к. в сумме АДАМ+все модули потребляют довольно много.

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


Присоединился: 09 Сентябрь 2005
Категория: Russian Federation
Online Status: Offline
Публикации: 8
Свойства публикации Свойства публикации   Ответить, цитируя автора - Rashid Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 27 Июнь 2008 21:21
Semelenov

В нашем случае процедура доработки выглядела следующим образом:

1) контроллеры были отданы в отдел технической поддержки фирмы "Прософт";
2) "Прософт" заказал резисторы с 0-м номиналом (по сути перемычки) у производителя;
3) резисторы шли больше месяца;
4) далее, полученные резисторы и контроллеры, нуждающиеся в доработке (суть которой заключается в замене 34 резисторов на резисторы с 0-м номиналом) были отданы в фирму "Fastwel", которая на своем оборудовании произвела замену резисторов;
5) далее, контроллеры вернулись на фирму "Прософт", откуда уже и были переданы нам назад.

О новых контроллерах

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

Думаю, что модули в новых поставках уже доработаны.


При получении новых контроллеров - один из контроллеров снова оказался с вышеуказанной "багой", другой - исправным, но в нем уже золотой полосы нет, а есть золотые полоски:

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


Присоединился: 09 Сентябрь 2005
Категория: Russian Federation
Online Status: Offline
Публикации: 8
Свойства публикации Свойства публикации   Ответить, цитируя автора - Rashid Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 27 Июнь 2008 21:30
Вот фотографии тех мест в контроллере, которые требуют доработки.




Это скриншоты документа, присланного фирмой "Прософт" в ответ на данную тему.
Наверх
Semelenov Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 15 Октябрь 2003
Категория: Belarus
Online Status: Offline
Публикации: 141
Свойства публикации Свойства публикации   Ответить, цитируя автора - Semelenov Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 02 Июль 2008 15:56
Rashid
Большое спасибо за информацию
Наверх
 Ответить Ответить

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

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