Genesis32 9.22 и МультиПоточность |
Ответить |
Автор | |
Участник Присоединился: 10 Март 2011 Online Status: Offline Публикации: 39 |
Опубликовано: 14 Май 2012 17:03 |
Появилась задача переделать проэкт с последовательным сьемом данных в паралельный.
Посделовательный работает хорошо - все компоненты отлажены. Нужно просто сделать несколько параллельных потоков отвечающих за сьем данных. Если кто уже сталкивался - подскажите пример кода(или линки) работы с ScriptWorX, именно как с мульти потоковой оболочкой. Любому мудрому совету буду благодарен. |
|
Действительный член Присоединился: 27 Июль 2006 Online Status: Offline Публикации: 304 |
|
Что вы понимаете под "съемом данных"? Если речь идет об обмене с контроллерами, то здесь на уровне ScriptWorX вы сделать ничего не сможете. Все зависит от вашего OPC-сервера.
ScriptWorX, насколько мне известно, запускает каждый скрипт в отдельном потоке, но это отностится не к сбору, а, скорее, к обработке данных. Конечно, каждый скриптовый поток, получающий данные OPC DA, будет как-то взаимодействовать с OPC-сервером. Но вот как организовано это взаимодействие (независимо? упорядоченно, через один основной объект, с потоковой моделью Apartment?) знают наверняка только разработчики. Вообще, если вы точно знаете, что вам нужна многопоточность, не мешало бы четко сформулировать, какие цели вы преследуете введением этой фичи (повышение интенсивности обмена с контроллерами; введение в работающий проект новых глюков, связанных с синхронизацией потоков; обоснование необходимости перевода на новое, более мощное железо - нужное подчеркнуть ) |
|
Теория - это когда все знаешь, но ничего не работает.
Практика - это когда все работает, но никто не знает как. |
|
Участник Присоединился: 10 Март 2011 Online Status: Offline Публикации: 39 |
|
Сейчас сьем данных идет через 1 модем.
Нужно просто сделать модемный пул. То есть сделать многопотоковое независимое считование - точнее растиражировать и распараллелить меxанизм съема, с разных обьектов. На данный момент мне интереснен просто механизм многопоточной работы. Ядро проэкта весит в ScriptWorX. SW , как вы и сказали - каждую задачу запускает в отдельном потоке. Но меня пока это такой вариант не устраивает. Пока рассмативаю вариант - многопоточности в нутри одной задачи ScriptWorX. Взаимодействие с OPC сервером ни как не изменится. |
|
Действительный член Присоединился: 27 Июль 2006 Online Status: Offline Публикации: 304 |
|
Каким образом ScriptWorX взаимодействует с модемами? Может быть 2 основных варианта:
1. Есть OPC-сервер, который работает с модемом и выдает OPC-клиенту (ScriptWorX) готовые данные в виде набора тэгов. 2. Есть набор специфического ПО (обычные dll, компоненты COM...), управляя которыми из VBA, вы обеспечиваете обмен по модемам. В случае 1 многопоточность в ScriptWorx никак не повлияет на обмен через пул модемов. С модемами работает OPC-сервер, вот он и должен обеспечивать многопоточную работу. Сколько потоков в подключающихся к нему клиентам - неважно, на интенсивность обмена через модемы это влиять не будет. В случае 2 многопоточность, теоретически, может помочь. Но тут все упрется в VBA. Этот язык не имеет встроенных средств для поддержки многопоточности. Чисто теоретически вы можете попробовать использовать вызовы функций из системных dll ( CreateThread() и иже с ними). Но для того, чтобы построить работоспособное приложение на этой основе, надо быть монстром Win32 API и знать COM вдоль и поперек (поскольку все что крутится на VBA в конечном итоге упирается в COM). |
|
Теория - это когда все знаешь, но ничего не работает.
Практика - это когда все работает, но никто не знает как. |
|
Участник Присоединился: 10 Март 2011 Online Status: Offline Публикации: 39 |
|
1ый неподходит - ибо придется переписовать большую часть проекта. 2ой по смыслу очень подходит, но пока не представляю как это будет выглядет с точки зрения архитектуры и программного кода.... |
|
Ответить |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |