2017-02-10 3 views
0

Stuggling здесь ...Windows Script Host - JScript и VBScript с COM-объект

VBScript

У меня есть DLL загружена, и может создать объект;

Set objServer = CreateObject("Matrikon.OPC.Automation.1") 

Затем я могу создать новый объект, основанный на одном свойстве objServer (я думаю, что я говорю, что правильно?)

Set objGroups = objServer.OPCGroups 
Set objGroup = objGroups.Add("Group001") 

Руководство показывает OPCGroups является Property из OPCServer. Как только я вызвал это свойство, я остался с новым объектом типа OPCGroups, который затем могу вызвать его Свойства и методы.

Syntax OPCGroups As OPCGroups 

Это прекрасно работает. Затем я продолжаю и застреваю при вызове этой функции;

Syntax AddItems (Count As Long, ItemIDs() As String, ClientHandles() As Long, ByRef ServerHandles() As Long, ByRef Errors() As Long, Optional RequestedDataTypes As Variant, Optional AccessPaths As Variant) 

Требуется массив строк. Тем не менее, в VBScript я всегда заканчиваю Array of Variants (VarType = 8204). Когда я пытаюсь передать свой массив, я получаю ошибку несоответствия типа. Я не могу найти способ строго набрать его в Array of Strings; Я даже не уверен, что это возможно.

к JScript

JScript

я выполнять те же первые шаги, как описано выше, но когда я создаю OPCGroups объект;

var objGroups = objServer.OPCGroups; 

Что-то не сработало. Он фактически не создал объект OPCGroups со всеми его связанными свойствами/методами. Когда я пытаюсь позвонить по методу

var objGroup = objGroups.Add(); 

В нем говорится, что «Объект не поддерживает это свойство или метод». Как будто он просто создал общий/пустой объект; не один, набранный как объект OPCGroups.

So. Могу ли я обходить либо этих вопросов?

+0

С версией VBScript вы попробуйте принуждать каждый элемент массива в строку с ПРМ функционировать? –

+0

уверен, что сделал; 'У До objTextFile.AtEndOfStream \t Redim Preserve arrFileLines (я) \t arrFileLines (I) = ПРМ (objTextFile.Readline) \t я = я + 1 Loop' – mriksman

+0

некоторая информация здесь: https://support.microsoft .com/en-us/help/244012/info-type-mismatch-errors-when-you-pass-parameters-from-asp-to-a-visual-basic-component –

ответ

0

Прошло некоторое время с тех пор, как я увидел специалиста по автоматизации в этом вопросе 0 & Раздел. Работа с Матриконом? Я предпочитаю автосол или кепвор лично. В любом случае, на ваш код. Руководство, на которое вы ссылаетесь, написано для VBA, а не vbscript, и предоставляет дескрипторы «As xxxx», где VBScript им не нужен. Перед тем, как бросить это в файл .vbs, вы должны открыть excel, прикрепить COM-объект в ссылках excel, прочитать приведенную ниже статью/код и проверить его.

Dim TestServer As OPCServer 
Dim TestGroupCollection As OPCGroups 
Dim WithEvents Group1 As OPCGroup 
Dim ItemCollection1 As OPCItems 

Dim OPCItemIDs() As String 
Dim ClientHandles() As Long 
Dim ReadWriteHandles() As Long 

Dim ItemServerHandles() As Long 
Dim ItemServerErrors() As Long 
Dim RequestedDataTypes As Variant 
Dim AccessPaths As Variant 
Dim MaxItems As Integer 

' Start monitoring the value 
Private Sub StartBtn_Click() 
    Dim ItemTag As String 
    ItemTag = "D57PT201.AI_MEAS" 

    Dim ItemValues() As Variant 
    Dim ItemQualities As Variant 
    Dim ItemTimeStamps As Variant 
    Dim idx As Integer 

    MaxItems = 1 
    ReDim OPCItemIDs(MaxItems) 
    ReDim ClientHandles(MaxItems) 
    ReDim ReadWriteHandles(MaxItems) 

    ' Create connection to the OPC server 
    Set TestServer = CreateObject("Matrikon.OPC.Automation.1") 

    TestServer.Connect "Matrikon.OPC.Simulation.1" 

    ' Create a group to contain the tag 
    Set TestGroupCollection = TestServer.OPCGroups 
    Set Group1 = TestGroupCollection.Add("group1") 
    Group1.ClientHandle = 100 
    Group1.UpdateRate = 1000 

    Set ItemCollection1 = Group1.OPCItems 
    ItemCollection1.DefaultAccessPath = "" 

    ' Add the tag 
    For idx = 1 To MaxItems 
    ClientHandles(idx) = idx 
    OPCItemIDs(idx) = ItemTag 
    Next idx 

    ItemCollection1.AddItems MaxItems, OPCItemIDs, ClientHandles, ItemServerHandles, ItemServerErrors, RequestedDataTypes, AccessPaths 
    MsgBox "Success" 
End Sub 

Вот пример правильно инициализирован опрос сессии с Matrikon OPC Engine:

AutomationException: 0x80070057 - One or more arguments are invalid

+0

Not Matrikon per se; но их OPCDAAuto.dll. Да, у меня это работало в VBA в Excel, я надеялся просто загрузить его в файл сценария - без необходимости компиляции. Powershell - это вариант, но я ничего не знаю о Powershell. OPC также имеет .NET-реализацию DLL, но я ничего не знаю о .NET, и они только отдают спецификации корпоративным членам. – mriksman

Смежные вопросы