2017-02-10 1 views
0

stuggling ici ...Windows Script Host - JScript et VBScript avec COM Object

VBScript

Je DLL chargé, et peut créer un objet;

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

Je peux alors créer un nouvel objet, basé sur une propriété du objServer (je crois que je dis ce droit?)

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

Le manuel montre OPCGroups est un Property de OPCServer. Une fois que j'ai appelé cette propriété, il me reste un nouvel objet de type OPCGroups, que je peux ensuite appeler ses propriétés et méthodes.

Syntax OPCGroups As OPCGroups 

Cela fonctionne très bien. Je continue alors, et reste bloqué en appelant cette fonction;

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) 

Il veut un tableau de chaînes. Cependant, dans VBScript, je me retrouve toujours avec un tableau de variantes (VarType = 8204). Lorsque j'essaie de transmettre ma matrice, j'obtiens une erreur de type incompatibilité. Je ne peux pas trouver un moyen de le typer fortement à un tableau de chaînes; Je ne suis même pas sûr que ce soit possible.

Plus de JScript

JScript

J'effectuer les mêmes premiers pas comme ci-dessus, mais quand je crée l'objet OPCGroups;

var objGroups = objServer.OPCGroups; 

Quelque chose n'a pas fonctionné. Il n'a pas réellement créé un objet OPCGroups avec toutes ses propriétés/méthodes associées. Lorsque je tente et appeler une méthode

var objGroup = objGroups.Add(); 

Il dit que le «objet ne prend pas en charge cette propriété ou méthode. C'est comme si cela créait simplement un objet générique/vide; pas un tapé comme objet OPCGroups.

Donc. Puis-je contourner ou de ces problèmes?

+0

Avec la version vbscript avez-vous essayé de contraindre chaque élément du tableau à une chaîne avec le CSTR fonction? –

+0

bien sûr; 'Ne Jusqu'à objTextFile.AtEndOfStream \t Redim Preserve arrFileLines (i) \t arrFileLines (i) = CStr (objTextFile.Readline) \t i = i + 1 Loop' – mriksman

+0

quelques informations ici: https://support.microsoft .com/fr-fr/help/244012/info-type-mismatch-errors-quand-vous-passez-les-paramètres-de-asp-vers-un-composant visuel-de-base –

Répondre

0

Été un certain temps depuis que j'ai vu un collègue spécialiste de l'automatisation dans ce Q & une section. Travailler avec Matrikon hein? Je préfère autosol ou kepware personnellement. Quoi qu'il en soit, sur votre code. Le manuel que vous référencez est écrit pour VBA plutôt que vbscript et fournit les descripteurs "As xxxx", alors que VBScript n'en a pas besoin. Avant de lancer ceci dans un fichier .vbs, vous devriez ouvrir excel, attacher l'objet COM dans les références Excel, lire l'article/code ci-dessous et le tester.

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 

Voici un exemple d'une session de vote initialisé avec le moteur Matrikon OPC:

AutomationException: 0x80070057 - One or more arguments are invalid

+0

Not Matrikon per se; mais leur OPCDAAuto.dll. Oui, je l'ai fait fonctionner sous VBA dans Excel, j'espérais juste l'avoir dans un fichier de script - sans avoir besoin de compilation. Powershell est une option, mais je ne sais rien de Powershell. OPC a également une implémentation .NET de la DLL, mais je ne connais rien à .NET, et ils ne publient que les spécifications pour les membres corporatifs. – mriksman