ThisDisplay.GetPointObjectFromName |
Ответить |
Автор | |
Новичок Присоединился: 22 Август 2005 Категория: Russian Federation Online Status: Offline Публикации: 11 |
Опубликовано: 30 Август 2005 10:17 |
есть у меня такой кусок скрипта:
'======= Dim Chan0 As GwxPoint Dim bit_pump As GwxPoint Set Chan0 = ThisDisplay.GetPointObjectFromName("Fastwel.UniOpc.1\gate.DigiOut0xD1.Ch0") Set bit_pump = ThisDisplay.GetPointObjectFromName("ICONICS.DataWorX32.8\buttom.bit_pump") '======= дык вот, если на текущей экранной форме есть "лампочки" к которым привязаны выше указанные тэги, то я получаю их значения и т.д. если же тэг не привязан к элементу экранной формы (ну, он просто виден в ОРС сервере), то получаю сообщение об ошибке "нет такого тэга". чем заменить ThisDisplay.GetPointObjectFromName("...") чтобы не рисовать "лампочку" на каждый тэг? -- 73! |
|
Новичок Присоединился: 22 Август 2005 Категория: Russian Federation Online Status: Offline Публикации: 11 |
|
с DataWorX вопрос решился внимательным вкуриванием "DataWorX32 VB Samples" и раздела "OLE Automation in DataWorX32". короче,
===== Option Explicit Dim dwx As AutoDwxRuntimeLib.DwxRuntime Private Sub AxTimer1_Timer() 'create the DataWorX32 runtime module 'it will start with the active configuration (made active in the DataWorX32 Configurator earlier) Set dwx = New DwxRuntime dwx.Runtime = True Dim ves_max_adc As AutoDwxRuntimeLib.IRegister Set ves_max_adc_bit = dwx.GetRegister("bitum.vesmaxadc_bit") [skip] End Sub ===== дык вот, не будет утечки памяти при постоянном Set dwx = New DwxRuntime, или я что-то опять не вкурил? 73! |
|
Новичок Присоединился: 07 Сентябрь 2005 Категория: Russian Federation Online Status: Offline Публикации: 35 |
|
Использую Genesis32 7.0 Решил такую проблему следующим образом (на истину в последней инстанции не претендую, просто как вариант, который имеет, правда, свои недостатки): на невидимом слое разместил "параметр" (значок 686), в нем написал псевдоним <<bool_alias>> в VBA-коде следующее: Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Option Explicit .... ' ВАЖНОЕ ЗАМЕЧАНИЕ: - возвращаемый тип логических локальных переменных - целый тип, ' например, для переменной ~~DVUxxxCheck~~, оператор сравнения будет ' выглядеть следующим образом: ' ... If (GetPointValue("~~DVUxxxCheck~~") = 1) Then ... ' - для логических регистров из DataWorX32 возвращаемый тип - булевый: ' ... If (GetPointValue(OPCTagName) = True) Then ... ' - для логических OPC-тегов в операторах While и Until необходимо использовать ' сравнение с False/True, а в операторах If - сравнение с 0/1 Function GetPointValue(PointName As String) As Variant On Error GoTo ErrorLabel Dim Point As GwxPoint GetPointValue = 0 Set Point = ThisDisplay.GetPointObjectFromName(PointName) GetPointValue = Point.Value Set Point = Nothing Exit Function ErrorLabel: GetPointValue = 0 End Function Function GetDefPointValue(PointName As String, SleepTime As Integer) As Variant GetDefPointValue = 0 If ThisDisplay.SetAliasDefinition("bool_alias", PointName) Then If (SleepTime <> 0) Then Sleep (SleepTime) GetDefPointValue = GetPointValue(PointName) Else MsgBox ("Ошибка: псевдонима " + AliasName + " не существует") End If End Function теперь недостатки: 1. иногда требуется вводить задержку SleepTime (в милисекундах), иначе не возвращает значения; 2. если в одном и том же обработчике какого-либо события (например, нажатие на кнопку) использовать функцию GetDefPointValue более одного раза для одного и того же псевдонима, но разных тегов, то ничерта не получится (исправляется использованием более одного псевдонима). и вообще этот алгоритм мне не нравится, но, правда, работает может кто что еще подскажет? |
|
Новичок Присоединился: 22 Август 2005 Категория: Russian Federation Online Status: Offline Публикации: 11 |
|
>sermon
>на невидимом слое разместил "параметр" (значок 686), в нем написал псевдоним <<bool_alias>> если тэги/регистры размещены на невидимом слое, то их можно забирать через ThisDisplay.GetPointObjectFromName(" и не морщиться. С регистрами датаворХ вопрос-то решился, а вот тэги так и рисую на невидимом слое. -- 73! |
|
Новичок Присоединился: 07 Сентябрь 2005 Категория: Russian Federation Online Status: Offline Публикации: 35 |
|
так смысл в том, что вместо десятков (а то и сотен) однотипных параметров, будет использоваться только один с псевдонимом, останется только в VBA-коде подставлять нужное название тега, кстати, таким образом можно уменьшить количество используемых точек в серверах OPC (если, конечно, такое ограничение Genesis'а актуально) |
|
Новичок Присоединился: 07 Сентябрь 2005 Категория: Russian Federation Online Status: Offline Публикации: 35 |
|
забыл написать какие библиотеки должны быть подключенны в MS VB (Tools -> References...), чтобы программа откомпилировалась:
- Visual Basic For Applications - OLE Automation - Gwx32 - ICONICS SwxExtender 6.0 хотя может последняя и не нужна (уже не помню) |
|
Ответить |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |