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

Сопряжение CPU188 и ADAM4520

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


Присоединился: 18 Апрель 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 30
Свойства публикации Свойства публикации   Ответить, цитируя автора - Phenix Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Тема сообщения: Сопряжение CPU188 и ADAM4520
    Опубликовано: 19 Ноябрь 2007 11:13

Добрый всем день

Есть микроконтроллер, построенный на основе CPU188. Он должен общаться с OPC-сервером через RS-485 по протоколу Modbus. Протокол я реализовал, теперь пытаюсь проверить работу с OPC-сервером. Через RS-232 все нормально: сервер отправляет запросы, мой прибор отвечает, сервер получает ответ и показывает его. Для проверки RS-485 взяли преобразователь ADAM-4520. ADAM должен быть подключен следующим образом: RS-232 к компьютеру, RS-485 к CPU188. У ADAM есть клеммы Data+ и Data-. У CPU188 - +TxD1, -TxD1, +RxD1, -RxD1 на разъеме J7 (связь осуществляется через COM2).

А теперь, как говорится, внимание, вопрос. Даже несколько.

1. Какие контакты разъема J7 к каким клеммам ADAM подключать?

2. Как должны быть настроены перемычки в CPU188? Сейчас поставил W5 в положение 1-2, W6 - 2-3, ST4 - ON (чтобы был доступ в терминалку через COM1), ST5 - OFF.

3. Есть ли какие-нибудь отличия в передаче данных по 485 от 232?

4. Как использовать функцию 84h прерывания INT 14h или регистр FF7Ah? Когда надо включать/выключать передатчики RS-485 и нужно ли включать/выключать их вообще?

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

Присоединился: 02 Октябрь 2007
Категория: Russian Federation
Online Status: Offline
Публикации: 427
Свойства публикации Свойства публикации   Ответить, цитируя автора - Vald Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 19 Ноябрь 2007 11:57
Возьмите два 4520 и не мучайтесь.
При экспериментах ни один чайник не пострадал

-----------
Плохому системному интегратору всегда OPC сервер мешает.
______________
Пишу на C++ за еду
Наверх
Phenix Смотреть выпадающим
Новичок
Новичок


Присоединился: 18 Апрель 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 30
Свойства публикации Свойства публикации   Ответить, цитируя автора - Phenix Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 19 Ноябрь 2007 13:41

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

Возьмите два 4520 и не мучайтесь.

Не пойдеть. :)

Наверх
Лопаткин Борис Смотреть выпадающим
Новичок
Новичок


Присоединился: 06 Ноябрь 2003
Категория: Russian Federation
Online Status: Offline
Публикации: 10
Свойства публикации Свойства публикации   Ответить, цитируя автора - Лопаткин Борис Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 28 Ноябрь 2007 15:36

В свое время делал обмен по Modbus с CPU188, так что постараюсь ответить на ваши вопросы.

1. На J7 нужно объединить контакты +TxD1 c +RxD1, а -TxD1 c -RxD1, и подключать их к Data+ и Data- соответственно.

2. Положение всех перемычек, влияющих на связь, вы вроде указали правильно.

3. Все отличия при обмене по 485 связаны в основном с тем, что обмен в этом режиме - симплексный, то есть прием и передача одновременно выполняться не могут. Более того, все, что идет на передатчик, автоматически принимается своим приемником, и это тоже нужно учитывать. У меня было сделано так, что при необходимости передачи сначала делается включение передатчика (об этом ниже), затем делается задержка на коммутацию (около 75 мкс), затем выполняется собственно передача. В конце передачи выполнялось ожидание до окончания передачи последнего символа (проверялись соответствующие регистры порта), затем делалась задержка на передачу последнего бита (зависит от скорости - для 115200 это 10 мкс), а затем передатчик выключался. В принципе если нет жестких требований по времени достаточно видимо просто сделать задержки порядка 1 мс после включения и перед выключением передатчика.

4. Коммутация передачи/приема RS485, естественно, необходима. Я использовал регистр FF7Ah, хотя и через BIOS, наверное, тоже будет работать. Использовался следующий фрагмент кода:

// базовые номера COM-портов
#define BA_COM1         0xFF80  // COM1
#define BA_COM2         0xFF10  // COM2
#define BA_PIO          0xFF7A  // PIO

// биты управления RTS для COM-портов
#define RTS_COM1        0x0010  // COM1
#define RTS_COM2        0x0008  // COM2

// макросы для работы с портами CPU188
#define IN188(port) inpw(port)
#define OUT188(port,val) \
_AX=port;                \
asm push ax;             \
_AX=val;                 \
asm pop dx;              \
asm out dx,al;

// управление передатчиком RS-485
void TModbus188::RS485Control(TMode mode)
{
  WORD x=NCom? RTS_COM2 : RTS_COM1;
  if (mode==M_SEND) {
    OUT188(BA_PIO,IN188(BA_PIO) & ~x);
  }
  else {
    OUT188(BA_PIO,IN188(BA_PIO) | x);
  }
}

Попробуйте, должно заработать. Если будут еще какие-то вопросы, постараюсь ответить. Удачи!

 

С уважением,
Лопаткин Б.В.
Наверх
Phenix Смотреть выпадающим
Новичок
Новичок


Присоединился: 18 Апрель 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 30
Свойства публикации Свойства публикации   Ответить, цитируя автора - Phenix Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 08 Декабрь 2007 15:36

Спасибо за подсказку.

Выходы объединил. Еще нашелся глюк в настройке модуля ADAM, т.к. modbus и передача данных через com-порт для rs-232 шла нормально. Еще сделал запрет прерывания на прием из com-порта перед включением передатчика и разрешение прерывания после выключения (чтобы передаваемые байты не буферизировались при возврате назад - вообще непонятно, зачем так сделано). Пока все работает.

Наверх
 Ответить Ответить

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

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