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

ADAM5510 и HMI520T (обмен)

 Ответить Ответить Страница  12>
Автор
Сообщение
DubAlex Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 28 Февраль 2007
Категория: Russian Federation
Online Status: Offline
Публикации: 212
Свойства публикации Свойства публикации   Ответить, цитируя автора - DubAlex Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Тема сообщения: ADAM5510 и HMI520T (обмен)
    Опубликовано: 28 Февраль 2007 21:33

Добрый день!

Есть сенсорная панель HMI520T и контроллер ADAM5510.
Нужно, чтобы контроллер принимал цифровые сигналы с панели, ну и затем выполнял какой-либо алгоритм.

Насколько я понял, за обмен данными со стороны панели отвечает компонент "Recipe Transfer" (Программное обеспечение - EZ Ware-500). Но мне не совсем понятно как работать с адресами: я создаю элемент "Recipe Transfer". У него в свойствах есть поля "device type" и "device address".
  1) Вопрос первый: что выбрать в поле "Device type"? Я понял разницу только между RW и RWI - абсолютная/относительная адресация.
  2) Вопрос второй: где указать для элемента "Recipe Transfer", какие сигналы передавать, а какие -нет (например, если есть 8 сигналов, а передать нужно значения четырех)?

Я написал небольшую программу, которая опрашивает com-порт (использовалась функция com_rx) и в случае наличия данных загорается индикатор на модуле вывода (5056D). При связи PLC с PC это работает, но при связи PLC с HMI - нет.

  3) Третий вопрос: по такому принципу HMI с PLC не могут в принципе взаимодействовать или это я ошибся с распайкой кабеля либо с написанием кода?

Сейчас я пытаюсь наладить взаимодействие используя функции библиотеки MODBUS/RTU. Насколько я понял нужно использовать MODBUS/RTU Slave для контроллера.
  4) Четвертый вопрос: если я двигаюсь в правильном направлении, то как мне совместить адреса переменных? Т.е., если, условно, есть одна переменная, то какому адресу, указанному в ПО для HMI, будет соответствовать адрес, указываемый при вызове функции ADAMRTU_ForceMultiCoils для контроллера (насколько я понял - именно эта функция должна передавать данные в панель)

С уважением,
Алексей Дубаев.

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

Присоединился: 28 Февраль 2007
Категория: Russian Federation
Online Status: Offline
Публикации: 212
Свойства публикации Свойства публикации   Ответить, цитируя автора - DubAlex Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 02 Март 2007 18:36

Может быть кто-нибудь подскажет, где можно найти документация по решению данного вопроса? Желательно на русском языке.

С уважением,
Алексей Дубаев.

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


Присоединился: 09 Октябрь 2003
Категория: Russian Federation
Online Status: Offline
Публикации: 187
Свойства публикации Свойства публикации   Ответить, цитируя автора - Leonid Uretsky Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 05 Март 2007 08:23
Почитайте что-нибудь про Modbus. Например, что такое "Master", а что такое "Slave". На сайте modbus.org есть документация, посмотрите Modicon Modbus Protocol Reference Guide.
Наверх
DubAlex Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 28 Февраль 2007
Категория: Russian Federation
Online Status: Offline
Публикации: 212
Свойства публикации Свойства публикации   Ответить, цитируя автора - DubAlex Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 05 Март 2007 15:41

С Modbus я определился, контроллер у меня будет slave, т.е. HMI посылает сигнал, а контроллер на этот сигнал реагирует.

Я написал код по которому, как я думал, будет все работать.

Код следующий:

void main()
{
  unsigned int Share_Mem[100];
  unsigned char result;
  result=Modbus_COM_Init(COM1,Slave,(unsigned long)9600,NO_PARITY, DATA8, STOP1);
  if (result==0)
    adv_printf("init OK\n");
  else if (result==1)
    adv_printf("com already installed\n");
  else if (result==2)
    adv_printf("error access com\n");
  getch();

  ADAMRTU_ModServer_Create(0, (unsigned char *)Share_Mem,sizeof(Share_Mem));
  adv_printf("server started..\n");

  while(1)
  {
    adv_printf("data is %X\n",Share_Mem[0]);
  }
}

В программе EZWare я взял готовый пример "520tdemo" и изменил для элемента "Recipe Transfer" адрес - 40001 и тип адресации-RW.

Но строка кода "adv_printf("data is %X\n",Share_Mem[0])" выводит всегда одни и те же данные.

Я не могу определить - обмена нет из-за неправильного кода или обмена нет из-за неправильной настройки проекта в программе EZWare?

Наверняка кто-то сталкивался с настройкой проекта в EZWare либо кто-нибудь писал программу для adam5510 с использованием modbus. Мне бы Ваш опыт очень помог.

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


Присоединился: 09 Октябрь 2003
Категория: Russian Federation
Online Status: Offline
Публикации: 187
Свойства публикации Свойства публикации   Ответить, цитируя автора - Leonid Uretsky Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 05 Март 2007 16:00

Я писал программу под Adam.

На первый взгляд все правильно кроме

ADAMRTU_ModServer_Create(0, (unsigned char *)Share_Mem,sizeof(Share_Mem));
Вместо 0 должен стоять номер узла контроллера (0 быть не может). Допускается 1...255.

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

Присоединился: 28 Февраль 2007
Категория: Russian Federation
Online Status: Offline
Публикации: 212
Свойства публикации Свойства публикации   Ответить, цитируя автора - DubAlex Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 05 Март 2007 22:47
Первоначально опубликовано Leonid Uretsky

Я писал программу под Adam.

На первый взгляд все правильно кроме

ADAMRTU_ModServer_Create(0, (unsigned char *)Share_Mem,sizeof(Share_Mem));
Вместо 0 должен стоять номер узла контроллера (0 быть не может). Допускается 1...255.

Почитав документацию, если я правильно понял, 0 - это широковещательный запрос, т.е. ко всем устройствам. Может быть я не прав.

А если нужно указать номер от 1 до 255, то как узнать, какой номер узла у моего контроллера и как этот номер взаимосвязан с сенсорной панелью?

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


Присоединился: 09 Октябрь 2003
Категория: Russian Federation
Online Status: Offline
Публикации: 187
Свойства публикации Свойства публикации   Ответить, цитируя автора - Leonid Uretsky Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 06 Март 2007 08:12

Вы опять путаете мастер и слэйв :)

Слэйв обязательно должен иметь любой адрес (номер узла) от 1 до 255. Тот же самый адрес должен задаваться где-то в настройках панели. Обычно это звучит как "Node" или "Node address" или типа "Slave No" что-нибудь.

А широковещательный запрос с номером узла 0 может выдать мастер, если он такие команды поддерживает (т.е. теоретически на панели можно задать номер узла 0, но не факт что он это поймет)

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


Присоединился: 09 Октябрь 2003
Категория: Russian Federation
Online Status: Offline
Публикации: 187
Свойства публикации Свойства публикации   Ответить, цитируя автора - Leonid Uretsky Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 06 Март 2007 08:15
Поставьте адрес 1 - обычно его по умолчанию ставят.
Наверх
DubAlex Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 28 Февраль 2007
Категория: Russian Federation
Online Status: Offline
Публикации: 212
Свойства публикации Свойства публикации   Ответить, цитируя автора - DubAlex Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 06 Март 2007 12:49

Понял, исправил. В настройках панели нашел пункт "PLC Station No". Поставил в этом пункте 1, хотя в документации на сенсорную панель говорится, что там нужно поставить 0. Обмена пока не происходит, видимо что-то с адресацией не так. Кабель для связи PLC c панелью шел в комплекте с панелью, поэтому вряд ли дело в нем. Распайка следующая:

1 pin: RXD-  <->  RXD-

2 pin: RXD+  <->  RXD+

3 pin: TXD-  <->  TXD-

4 pin: TXD+  <->  TXD+

5 pin: GND  <->  GND

Если кто работал с HMI520t от MapleSystems и с ПО EZWare500, то хотелось услышать, как они настраивали обмен через интерфейс RS-232.

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


Присоединился: 09 Октябрь 2003
Категория: Russian Federation
Online Status: Offline
Публикации: 187
Свойства публикации Свойства публикации   Ответить, цитируя автора - Leonid Uretsky Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 07 Март 2007 08:27

Судя по распайке провода, у вас RS-422 порт в панели. А в Адаме COM1 помоему RS-232

Наверх
 Ответить Ответить Страница  12>

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

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