2017-02-10 78 views
0

这里有点吃力......Windows脚本宿主 - JScript和VBScript与COM对象

的VBScript

我有一个DLL加载,并且可以创建一个对象;

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

那么我可以创建新的对象的基础上,objServer的属性(我觉得我说,我对不对?)

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

手册显示OPCGroupsOPCServer一个Property。一旦我调用了这个属性,我就剩下一个OPCGroups类型的新对象,然后我可以调用它的属性和方法。

Syntax OPCGroups As OPCGroups 

这工作正常。然后我继续,并在调用此函数时卡住;它需要一个字符串数组。但是,在VBScript中,我总是会得到一个变体数组(VarType = 8204)。当我尝试并传递数组时,出现类型不匹配错误。我找不到一种将它强制输入到字符串数组的方法;我甚至不确定这是可能的。

在为JScript

的JScript

我执行相同的第一个步骤如上述,但是当我创建OPCGroups对象;

var objGroups = objServer.OPCGroups; 

有些东西没有奏效。它并没有实际创建一个OPCGroups对象及其所有关联的属性/方法。当我尝试并调用方法

var objGroup = objGroups.Add(); 

它说'对象不支持此属性或方法'。就好像它只是创建了一个通用/空白的对象;没有一个输入为OPCGroups对象。

所以。我可以解决这些问题

+0

使用VBScript版本,并试图强迫阵列的每个项目为一个字符串与CSTR功能? –

+0

确实如此; '做,直到objTextFile.AtEndOfStream \t REDIM保留arrFileLines(I) \t arrFileLines(1)= CStr的(objTextFile.Readline) \t I = I + 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

过去了一段时间,因为我在这个Q &的一节中看到了一位自动化专家。与Matrikon合作吧?我个人更喜欢autosol或kepware。无论如何,到你的代码。您参考的手册是为VBA而不是vbscript编写的,并提供“As xxxx”描述符,其中VBScript不需要这些描述符。在将其转换为.vbs文件之前,您应该打开excel,在excel引用中附加COM对象,阅读下面的文章/代码并对其进行测试。

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引擎正确初始化的轮询会话的例子:

AutomationException: 0x80070057 - One or more arguments are invalid

+0

不是Matrikon本身;但他们的OPCDAAuto.dll。是的,我已经在Excel的VBA中运行过了,我希望将它放在脚本文件中,而不需要编译。 Powershell是一个选项,但我对Powershell一无所知。 OPC也有DLL的.NET实现,但我对.NET一无所知,而且他们只向企业成员发布规范。 – mriksman

相关问题