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

Genesis32 9.22 и МультиПоточность

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

Присоединился: 10 Март 2011
Online Status: Offline
Публикации: 39
Свойства публикации Свойства публикации   Ответить, цитируя автора - alfa2 Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Тема сообщения: Genesis32 9.22 и МультиПоточность
    Опубликовано: 14 Май 2012 17:03
Появилась задача  переделать проэкт с последовательным сьемом данных в паралельный.
Посделовательный работает хорошо - все компоненты отлажены.

Нужно просто сделать несколько параллельных потоков отвечающих за сьем данных.
Если кто уже сталкивался - подскажите пример кода(или линки) работы с ScriptWorX, именно как с мульти потоковой  оболочкой. Любому мудрому совету буду благодарен.
Наверх
MuadDib Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 27 Июль 2006
Online Status: Offline
Публикации: 304
Свойства публикации Свойства публикации   Ответить, цитируя автора - MuadDib Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 15 Май 2012 05:33
Что вы понимаете под "съемом данных"? Если речь идет об обмене с контроллерами, то здесь на уровне ScriptWorX вы сделать ничего не сможете. Все зависит от вашего OPC-сервера.

ScriptWorX, насколько мне известно, запускает каждый скрипт в отдельном потоке, но это отностится не к сбору, а, скорее, к обработке данных. Конечно, каждый скриптовый поток, получающий данные OPC DA, будет как-то взаимодействовать с OPC-сервером. Но вот как организовано это взаимодействие (независимо? упорядоченно, через один основной объект, с потоковой моделью Apartment?) знают наверняка только разработчики.

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

Присоединился: 10 Март 2011
Online Status: Offline
Публикации: 39
Свойства публикации Свойства публикации   Ответить, цитируя автора - alfa2 Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 15 Май 2012 11:50
Сейчас сьем данных идет через 1 модем.
Нужно просто сделать модемный пул. То есть сделать многопотоковое независимое считование - точнее растиражировать и распараллелить меxанизм съема, с разных обьектов.

На данный момент мне интереснен просто механизм многопоточной работы.
Ядро проэкта весит в ScriptWorX.
SW , как вы и сказали - каждую задачу запускает в отдельном потоке. Но меня пока это такой вариант не устраивает. Пока рассмативаю вариант - многопоточности в нутри одной задачи  ScriptWorX. Взаимодействие с OPC сервером ни как не изменится.
Наверх
MuadDib Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 27 Июль 2006
Online Status: Offline
Публикации: 304
Свойства публикации Свойства публикации   Ответить, цитируя автора - MuadDib Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 15 Май 2012 13:15
Каким образом ScriptWorX взаимодействует с модемами? Может быть 2 основных варианта:
1. Есть OPC-сервер, который работает с модемом и выдает OPC-клиенту (ScriptWorX) готовые данные в виде набора тэгов.
2. Есть набор специфического ПО (обычные dll, компоненты COM...), управляя которыми из VBA, вы обеспечиваете обмен по модемам.

В случае 1 многопоточность в ScriptWorx никак не повлияет на обмен через пул модемов. С модемами работает OPC-сервер, вот он и должен обеспечивать многопоточную работу. Сколько потоков в подключающихся к нему клиентам - неважно, на интенсивность обмена через модемы это влиять не будет.

В случае 2 многопоточность, теоретически, может помочь. Но тут все упрется в VBA. Этот язык не имеет встроенных средств для поддержки многопоточности. Чисто теоретически вы можете попробовать использовать вызовы функций из системных dll ( CreateThread() и иже с ними). Но для того, чтобы построить работоспособное приложение на этой основе, надо быть монстром Win32 API и знать COM вдоль и поперек (поскольку все что крутится на VBA в конечном итоге упирается в COM).
Теория - это когда все знаешь, но ничего не работает.
Практика - это когда все работает, но никто не знает как.
Наверх
alfa2 Смотреть выпадающим
Участник
Участник
Аватар

Присоединился: 10 Март 2011
Online Status: Offline
Публикации: 39
Свойства публикации Свойства публикации   Ответить, цитируя автора - alfa2 Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 16 Май 2012 10:36

1ый неподходит - ибо придется переписовать большую часть проекта.

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

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

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

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