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

ADAM 5510 & LabVIEW8.2 DSC

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


Присоединился: 25 Апрель 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 116
Свойства публикации Свойства публикации   Ответить, цитируя автора - Vel_ Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Тема сообщения: ADAM 5510 & LabVIEW8.2 DSC
    Опубликовано: 22 Октябрь 2007 05:57

1. Да документации на PLCNET вы не найдете, а я говорил про настройку сети (аппаратную).

Наша сеть:

С COM1 ADAM5510 (rs232) через ADAM4520 сеть 1 (rs485) на COM1 первого ПК (у ПК ADAM4520 преобразовывает в rs232).

С COM2 ADAM5510 сеть 2 (rs485) на COM1 второго ПК (у ПК ADAM4520 преобразовывает в rs232).

В обоих концах каждой сети (rs485) стоят терминаторы 120 Ом и сопротивления предустановки логического 0 и 1 (с питания ADAM4520 +24 на DATA+ и -24В на DATA-) по 560 Ом.

2. В PLCNET предусмотрены функции запроса и передачи группы регистров. Когда Вы ставите галочку "Сетевая" в Ultralogik, то Вы создаете массив сетевых переменных (добавляете в массив тег)

В программе для ADAM5510 на ASM это выглядит так (Ultralogik генерирует такойже код):

VARLIST  segment byte public 'DATA' use16 ;(сегмент сетевых переменных)
  assume ds:DGROUP

  public ERR_SEG_NAME
ERR_SEG_NAME db 7,'ERR_SEG' ;имя переменной

  public INTEGER_TYPE
INTEGER_TYPE db 7,'INTEGER' ; 

  public ERR_OFS_NAME
ERR_OFS_NAME db 7,'ERR_OFS' ;описание типа

public BOOLEAN_TYPE
BOOLEAN_TYPE db 7,'BOOLEAN' ;описание типа

  public BIT_0_NAME
BIT_0_NAME db    5,'Bit_0'

  public $_CntNetworkVar
$_CntNetworkVar db 3h  ;количество сетевых переменных

  public $_LstNetworkVar ;описание сетевых переменных (offset)
$_LstNetworkVar dw offset ERR_SEG_NAME
  dw offset ERR_SEG_VAR
  dw offset INTEGER_TYPE
  db    1 ; 
  db    7 ; 
  dw offset ERR_OFS_NAME ; имя тега
  dw offset ERR_OFS_VAR   ; значение тега
  dw offset INTEGER_TYPE  ; тип тега
  db    1 ;  описание типа тега
  db    7 ;  символов в имени тега
  dw offset BIT_0_NAME
  dw offset BIT_0_VAR
  dw offset BOOLEAN_TYPE
  db    0 ; 
  db    5 ;

VARLIST  ends 

В итоге Вы получаете массив сетевых переменных, которые и запрашивает ОРС сервер с контроллера (данные до 512 байт массива в одном пакете). Похоже запросы идут и в Modbus, так что протокол для скорости не пренципиален.

3. Как повысить скорость обмена по сети? Устраните ошибки в аппаратной реализации сети и в конфигурировании ОРС сервера!

Расчеты скорости для вашей сети уже приведены выше и они реальны.

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

Присоединился: 15 Октябрь 2007
Категория: Russian Federation
Online Status: Offline
Публикации: 18
Свойства публикации Свойства публикации   Ответить, цитируя автора - _mrv Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 22 Октябрь 2007 21:56
Первоначально опубликовано Vel_


Наша сеть:


С COM1 ADAM5510 (rs232) через ADAM4520 сеть 1 (rs485) на COM1 первого ПК (у ПК ADAM4520 преобразовывает в rs232).


_MRV: То есть у Вас на каждый ADAM5510 добавлен еще и ADAM4520? Простое любопытно вкратце узнать Вашу задачу.


С COM2 ADAM5510 сеть 2 (rs485) на COM1 второго ПК (у ПК ADAM4520 преобразовывает в rs232).


_MRV: У меня также.


В обоих концах каждой сети (rs485) стоят терминаторы 120 Ом и сопротивления предустановки логического 0 и 1 (с питания ADAM4520 +24 на DATA+ и -24В на DATA-) по 560 Ом.


_MRV: Терминаторы ставлю, подтягивающие резисторы пока нет. Не уверен в их необходимости для моей небольшой сети.


2. В PLCNET предусмотрены функции запроса и передачи группы регистров. Когда Вы ставите галочку "Сетевая" в Ultralogik, то Вы создаете массив сетевых переменных (добавляете в массив тег)


В программе для ADAM5510 на ASM это выглядит так .......


В итоге Вы получаете массив сетевых переменных, которые и запрашивает ОРС сервер с контроллера (данные до 512 байт массива в одном пакете). Похоже запросы идут и в Modbus, так что протокол для скорости не принципиален.


_MRV: Здорово! Все это легко увидеть при линковке obj-файла от Лоджика и своего C-кода (см. map-file). Но это ничуть не доказывает, что Fastwel OPC Server считывает весь массив сетевых переменных.


3. Устраните ошибки в аппаратной реализации сети и в конфигурировании ОРС сервера!


_MRV: Некое просветление от общения с Вами все ж настало: при конфигурировании FASTWEL'a надо указать диапазон адресов сервера вплотную примыкающему к диапазону узлов. То есть, если 5 контроллеров в сети с адресами 01..05, то собственный адрес сервера должен лежать в диапазоне 06..F8. Это дает ощутимый прирост в скорости обмена.

Поправьте, если не прав: для тех же пяти контроллеров я задаю диапазон собственных адресов 80..F8 (по умолчанию), сервер перебирает диапазон от 01 до 7F, находит первые пять узлов, показывает их теги, сохраняет конфигурацию в файле и после запуска по-прежнему опрашивает весь диапазон 01..7F???

Завтра, если смогу кину скриншоты с осциллографа.



Продолжим. Хотелось бы более конкретно об обмене массивом данных с ADAM5510 (UL32) и Fastwel OPC server.
Речь об этих двух прогах, о том как заставить их произвести такой обмен, а не о загадках и возможностях протокола PLCNET (очень хорошая вещь, допускаю).

Мне не понятно, как из Fastwel считать массив, некий набор сетевых переменных из конкретного контроллера за
одну операцию чтения/записи.

У меня в LabVIEW открывается соединение с Fastwel через url (так рекомендуют в документации): opc://localhost.Faswel.PLCNetOpc.Net_1.01.A1&updaterate=1000

Можно ли сформировать запрос как-то иначе, чтобы считать несколько переменных через одно соединение?

В библиотеке plcdll.dll, которая входит в пакет Fastwel сервера, имеются функции
printTrace
unetCreateNode
unetCreateVarInstance
unetDeleteNode
unetDeleteVarInstance
unetFillTreeView
unetFindVarByName
unetGetBaudRateName
unetGetBaudRateNumber
unetGetConfigStatus
unetGetFistVarId
unetGetNextVarId
unetGetNodeStatistics
unetGetQueryState
unetGetValue
unetGetVarDescr
unetGetVarInstanceType
unetGetVarName
unetGetVarNode
unetGetVarSegment
unetGetVarTypeCode
unetGetVarTypeString
unetInitCOMPort
unetIsMaster
unetIsNodeFound
unetQuery
unetQueryRead
unetQueryWrite
unetReadNodeConfig
unetReadValue
unetSerializeSegment
unetSetMaster
unetWriteValue

Если кто-то работал на таком уровне с OPC киньте пример на C, как с ними работать или заголовки (может так догадаюсь ).











С уважением, mrv
Наверх
Vel_ Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 25 Апрель 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 116
Свойства публикации Свойства публикации   Ответить, цитируя автора - Vel_ Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 23 Октябрь 2007 05:48

Насчет двойной сети:

Это сделано для 100% рерервирования ПК. За период с 2000 по 2007 г. у нас вышел из строя только 1 ADAM5510. На ПК за этот период уже меняли жесткие диски, мониторы, видеокарты, системники в сборе и т.д. Самое слабое звено это ПК. Про ОС и программы я уже и не говорю. Если делать одну сеть и на второй ПК передавать данные через DCOM, то при выходе "базового" ПК из строя не работают оба ПК. Все данные потеряны, архивы, аварийка. Нет управления и оператор не может управлять производством! К томуже 2 ПК позволяют оператору вывести на отдельные мониторы больше экранов процесса. Данные архивируются независимо на разных ПК и всегда можно их сравнить и востановить. Есть гибкость системы и надежность, чего не сделаеш на одной сети.

На новых объектах, сделанных с использованием контроллеров Quantum и промышленных ПК, мы также используем данный принцип (2 независимых ПК) и не желеем об этом. Данная система проверена временем!

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


Присоединился: 25 Апрель 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 116
Свойства публикации Свойства публикации   Ответить, цитируя автора - Vel_ Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 23 Октябрь 2007 06:54

Продолжим!

Вы убедились что массив сетевых переменных есть!

Конфигурирование ОРС сервера:

1. Производится опрос сети на наличие подключенных контроллеров посылкой пакетов CheckLN по всему диапазону адресов. Например: контроллеру с адресом 1, ждем ответа. Если есть ответ, заносим в память адресс контроллера и следуем дальше. Если нет ответа (таймаут закончился) следуем дальше. Перебераем весь диапазон адресов.

2. Конфигурируем контроллер (по команде "создать"): Запрашиваем количество тегов в контроллере, получаем значение количества тегов (счетчик); Перебираем теги в VARLIST, получаем в итоге: тип тега, имя тега, адресс тега (смещение) и все это заносим в конфигурацию контроллера.

3. Когда все контроллеры в сети сконфигурированы, можем начинать считывание тегов.

Считывание, запись тегов:

Из конфигурации берется адрес контроллера. Готовится пакет для контроллера: В пакет по очереди (индекс) добавляются теги для опроса (тип-"размер", адресс-"смещение) из конфигурации. При этом просчитывается, не превысит ли ответ контроллера лимит 512 байт данных. Запоминаем последовательность тегов и отправляется запрос в контроллер. Получаем ответ: значения тегов (разбираем по последовательности запроса данные и пакета, по размерам запрошенных данных). Если тегов в контроллере больше чем уместилось в 1 пакете, формируем еще один пакет и т.д. После этого если есть данные для записи, формируем пакет записи данных: собираем теги для записи (дли данных "тип", адрес-"смещение", данные) и отправляем пакет.

Переходим к следующему контроллеру и т.д.

В итоге: Опрашиваются только контроллеры и теги которые есть в конфигурации. Все остальное игнорируется.

Как я уже указывал выше, конфигурацию ОРС сервера, старую, нужно удалять, иначе сервер будет пытаться связаться с контроллерами и тегами которых не существует и на это потратит драгоценное время. Ведь ответа он не получит и будет ждать таймаут для перехода к следующиму контроллеру. Тоже происходит если контроллер сконфигурирован, но отключен.

P.S. в Modbus вы не можете получить имя тега и его тип, поэтому конфигурирование у него пропускает эти шаги. А получение данных примерно такое же, но по заранее определенным в ОРС адресам.

 

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


Присоединился: 25 Апрель 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 116
Свойства публикации Свойства публикации   Ответить, цитируя автора - Vel_ Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 23 Октябрь 2007 07:22

Насчет связки ADAM5510 и Fastwel OPC server. Попробуйте в режиме монитора в ОРС сервере посмотреть скорость обновления данных (визуально) не запуская LabVIEW. Если скорость разительно отличается, значит проблема в связке Fastwel OPC server и LabVIEW.

В поставке Fastwel OPC server есть пример VB OPC клиента, можете поиграться, основные принципы связи по технологии ОРС там показаны. Можете адаптировать его под С.

Мы используем GENESIS32. с этим проблем сейчас нет.

Насчет ОРС клиента, даже приемлимой скорости передачи тегов с ОРС сервера я так и не смог добиться (16..20 миллисекунд на тег в среднем). И это не зависит от языка программирования и большие проблемы с записью тегов в контроллер (не пишет с первого раза, до десяти раз в цикле повторяем).

Возможно прямое считывание напрямую с памяти ОРС сервера, но это уже "хакерские" методы. Так что не заморачивайтесь на ОРС технологии, слишком сложно...

plcdll.dll использовать можно, если разберетесь с ОРС технологией, но она есть только "драйвер" связи с ADAM, все остальное в ОРС сервере.

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

Присоединился: 15 Октябрь 2007
Категория: Russian Federation
Online Status: Offline
Публикации: 18
Свойства публикации Свойства публикации   Ответить, цитируя автора - _mrv Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 23 Октябрь 2007 22:14
Первоначально опубликовано Vel_

Насчет двойной сети:


Это сделано для 100% рерервирования ПК. За период с 2000 по 2007 г. у нас вышел из строя только 1 ADAM5510. На ПК за этот период уже меняли жесткие диски, мониторы, видеокарты, системники в сборе и т.д. Самое слабое звено это ПК. Про ОС и программы я уже и не говорю. Если делать одну сеть и на второй ПК передавать данные через DCOM, то при выходе "базового" ПК из строя не работают оба ПК. Все данные потеряны, архивы, аварийка. Нет управления и оператор не может управлять производством! К томуже 2 ПК позволяют оператору вывести на отдельные мониторы больше экранов процесса. Данные архивируются независимо на разных ПК и всегда можно их сравнить и востановить. Есть гибкость системы и надежность, чего не сделаеш на одной сети.


На новых объектах, сделанных с использованием контроллеров Quantum и промышленных ПК, мы также используем данный принцип (2 независимых ПК) и не желеем об этом. Данная система проверена временем!



Очень интересно! Мы тоже резервируем верхний уровень, но с ADAM5510 работаем впервые. Планировали в частности сделать на RS485 два OPC сервера, но из-за низкой скорости пока остановились. Скажите, два Fastwel на одну ветку RS485 возможно, или не стоит и пробовать? В доке к Fastwel есть упоминание об этом.
С уважением, mrv
Наверх
_mrv Смотреть выпадающим
Новичок
Новичок
Аватар

Присоединился: 15 Октябрь 2007
Категория: Russian Federation
Online Status: Offline
Публикации: 18
Свойства публикации Свойства публикации   Ответить, цитируя автора - _mrv Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 23 Октябрь 2007 22:31
[QUOTE=Vel_]

Конфигурирование ОРС сервера:


1. Производится опрос сети на наличие подключенных контроллеров посылкой пакетов CheckLN по всему диапазону адресов. Например: контроллеру с адресом 1, ждем ответа.


_mrv: Адреса контроллеров начинаются с 01 или 00? Имеет смысл в plcnet смысл адрес 00?


2. Конфигурируем контроллер (по команде "создать"): Запрашиваем количество тегов в контроллере, получаем значение количества тегов (счетчик); Перебираем теги в VARLIST, получаем в итоге: тип тега, имя тега, адресс тега (смещение) и все это заносим в конфигурацию контроллера.


_mrv: Понятно.


Из конфигурации берется адрес контроллера. Готовится пакет для контроллера: В пакет по очереди (индекс) добавляются теги для опроса (тип-"размер", адресс-"смещение) из конфигурации. При этом просчитывается, не превысит ли ответ контроллера лимит 512 байт данных. Запоминаем последовательность тегов и отправляется запрос в контроллер. Получаем ответ: значения тегов (разбираем по последовательности запроса данные и пакета, по размерам запрошенных данных). Если тегов в контроллере больше чем уместилось в 1 пакете, формируем еще один пакет и т.д. После этого если есть данные для записи, формируем пакет записи данных: собираем теги для записи (дли данных "тип", адрес-"смещение", данные) и отправляем пакет.


Переходим к следующему контроллеру и т.д.


_mrv:
Я посмотрел на осциллографе, то что Вы говорите, очень хорошо видно. Действительно, ADAM4570 генерирует запрос, а ADAM5510 отвечает (амплитуда несколько другая). Но я по-прежнему не могу избавиться от перебора адресов несуществующих контроллеров? Мои действия: открываю сервер,создаю новый конфиг (старый остается на диске, он разве будет использоваться?), конфигуряю сеть, сохраняю текущий конфиг. Перебор адресов на осциллографе все равно вижу.

Подготовлю осциллограммы и выложу



С уважением, mrv
Наверх
Vel_ Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 25 Апрель 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 116
Свойства публикации Свойства публикации   Ответить, цитируя автора - Vel_ Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 24 Октябрь 2007 05:19

Планировали в частности сделать на RS485 два OPC сервера, но из-за низкой скорости пока остановились. Скажите, два Fastwel на одну ветку RS485 возможно, или не стоит и пробовать? В доке к Fastwel есть упоминание об этом.

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

Из описания: Активная станция (мастер) должна всегда (во всех пакетах) держать этот бит в 1 (маркер мастера) (даже когда она передает маркер другой). Сброс этого бита в 0 хотя бы в одном пакете приводит к тому, что остальные станции исключат ее из списка активных участников и маркер ей никогда не вернут.

Конечно если организовать маркерное кольцо, то это реально, но в Fastwel я этого не нашел, может в самых последних версиях есть, не знаю.

Из описания:Существуют правила передачи маркера, правила включения новых активных участников сети в маркерное кольцо и правила исключения активного участника из маркерного кольца. Кроме этого активные станции должны принимать меры для генерации нового маркера, в случае его утраты, и подавлять лишние маркеры, если такие появляются.

В UL32 эта технология используется для создания удаленных переменных.

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


Присоединился: 25 Апрель 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 116
Свойства публикации Свойства публикации   Ответить, цитируя автора - Vel_ Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 24 Октябрь 2007 06:05

_mrv: Адреса контроллеров начинаются с 01 или 00? Имеет смысл в plcnet смысл адрес 00?

Вообще то адрес 00 нежелательно использовать для адреса контроллера, лучше для мастера сети (ОРС сервера), а адрес FF вообще зарезервирован для широковещательных пакетов (всем сразу).

_mrv: Но я по-прежнему не могу избавиться от перебора адресов несуществующих контроллеров? Мои действия: открываю сервер,создаю новый конфиг (старый остается на диске, он разве будет использоваться?)

Да! Да! Да! Про это я вам и толковал, не раз! Если старый конфиг есть (ОРС сервер смотрит в реестре где лежит предыдущий), то новая конфигурация добавляется к старому конфигу. Легко проверить: не удаляя старый конфиг, создаеш новый, смотриш размер. Удаляешь старый, делаешь новый, смотриш размер.

Конфиг - это снимок памяти и когда происходит загрузка ОРС сервера, то он загружает конфиг, который был создан последним. При создании нового, он не очищает память. Глюк!

И тогда действительно вся связь тормозит неимоверно!!!

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

Присоединился: 15 Октябрь 2007
Категория: Russian Federation
Online Status: Offline
Публикации: 18
Свойства публикации Свойства публикации   Ответить, цитируя автора - _mrv Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 04 Ноябрь 2007 19:11
Потратил время на изучение Fastwel OPC server.

Тут кстати подошел LabVIEW 8.5 с DSC 8.5. Выяснилось, что LV 8.0+DSC видит Fastwel OPC server и как-то позволяет работать с ним. Если установить обновление до LV 8.0.1, то с Fastwel можно считать только служебную информацию, теги не видны. Это же происходит и в LV 8.2. При установке LV 8.5+DSC 8.5 глюк исчезает и можно создать OPC клиента и коннектить Shared Variable к тегам, появившимся у клиента. Считаю, что это вызвано тем, что в Fastwel OPC server реализована часть функций из набора OPC DA 2. Может не вся, может криво :) Кстати, может повторюсь, но Matlab 7 также не коннектится к Fastwelу. А вот если качнуть симулятор из Matricon, то его видят все.

С обновленной SCADA и осциллографом приступил к опытам над PLCNET.

Во-первых, сделать два OPC на один сегмент сети возможно. Для этого использовали ADAM 4570, один порт которого заведен на "начало" шлейфа витой пары, другой --- на "конец". Получилось как бы кольцо. Один порт из ADAM 4570 используется на одном компьютере, второй на другом. Настраиваем OPC на обоих компьютерах, причем оба сервера должны видеть друг друга и помечать другого как "мастер". Но мне обращаться к ним не надо, поэтому в конфигурацию сервера я их не включаю. Адреса серверов естественно разные.

Во-вторых, создавая группу в OPC клиенте я вижу, что чтение тегов ведется, как и обсуждалось ранее, пакетами и их updaterate соблюдается. А вот запись в контроллер, занимает гораздо больше времени. Причем запись OPC сервер производит тогда, когда я реально записываю в SCADA значение в тег. Полагаю, что в PLCNET протоколе нет функции записи группы тегов. Передается адрес каждого тега и его значение. Пробовал переместить сетевые переменные в Ultralogik 32 в один блок, так чтобы все переменные на запись находились друг за другом. Но чуда не случилось. Интересно, так и должно быть? Что скажет vel?
С уважением, mrv
Наверх
 Ответить Ответить Страница  <123>

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

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