2017-02-10 20 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

相關問題