lele65 Inserito: 31 marzo 2004 Segnala Inserito: 31 marzo 2004 Buongiorno a tutti.Premetto che non conosco nulla sul VBSto tentando di usare excel per leggere dati dal server OPC di winCC. Ho realizzato una macro in vba come descritto nelle istruzioni sul sito siemens e fino a qui funziona tutto benissimo. Lo script allegato è fatto da siemens. Il mio problema è: cosa bisogna modificare e come se voglio visualizzare due o + variabiliGrazie a tuttiScript:Option ExplicitOption Base 1 Const ServerName = "OPCServer.WinCC" Dim WithEvents MyOPCServer As OpcServerDim WithEvents MyOPCGroup As OPCGroupDim MyOPCGroupColl As OPCGroupsDim MyOPCItemColl As OPCItemsDim MyOPCItems As OPCItemsDim MyOPCItem As OPCItem Dim ClientHandles(1) As LongDim ServerHandles() As LongDim Values(1) As VariantDim Errors() As LongDim ItemIDs(1) As StringDim GroupName As StringDim NodeName As String '---------------------------------------------------------------------' Sub StartClient()' Purpose: Connect to OPC_server, create group and add item'---------------------------------------------------------------------Sub StartClient() ' On Error GoTo ErrorHandler '----------- We freely can choose a ClientHandle and GroupName ClientHandles(1) = 1 GroupName = "MyGroup" '----------- Get the ItemID from cell "A1" NodeName = Range("A1").Value ItemIDs(1) = Range("A2").Value '----------- Get an instance of the OPC server Set MyOPCServer = New OpcServer MyOPCServer.Connect ServerName, NodeName Set MyOPCGroupColl = MyOPCServer.OPCGroups '----------- Set the default active state for adding groups MyOPCGroupColl.DefaultGroupIsActive = True '----------- Add our group to the Collection Set MyOPCGroup = MyOPCGroupColl.Add(GroupName) Set MyOPCItemColl = MyOPCGroup.OPCItems '----------- Add one item, ServerHandles are returned MyOPCItemColl.AddItems 1, ItemIDs, ClientHandles, ServerHandles, Errors '----------- A group that is subscribed receives asynchronous notifications MyOPCGroup.IsSubscribed = True Exit Sub ErrorHandler: MsgBox "Error: " & Err.Description, vbCritical, "ERROR"End Sub '---------------------------------------------------------------------' Sub StopClient()' Purpose: Release the objects and disconnect from the server'---------------------------------------------------------------------Sub StopClient() '----------- Release the Group and Server objects MyOPCGroupColl.RemoveAll '----------- Disconnect from the server and clean up MyOPCServer.Disconnect Set MyOPCItemColl = Nothing Set MyOPCGroup = Nothing Set MyOPCGroupColl = Nothing Set MyOPCServer = NothingEnd Sub '---------------------------------------------------------------------' Sub MyOPCGroup_DataChange()' Purpose: This event is fired when a value, quality or timestamp in our Group has changed'---------------------------------------------------------------------'----------- If OPC-DA Automation 2.1 is installed, use:Private Sub MyOPCGroup_DataChange(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, ItemValues() As Variant, Qualities() As Long, TimeStamps() As Date) '----------- Set the spreadsheet cell values to the values read Range("B2").Value = CStr(ItemValues(1)) Range("C2").Value = Hex(Qualities(1)) Range("D2").Value = CStr(TimeStamps(1))End Sub '---------------------------------------------------------------------' Sub worksheet_change()' Purpose: This event is fired when our worksheet changes, so we can write a new value'---------------------------------------------------------------------Private Sub worksheet_change(ByVal Selection As Range) '----------- Only if cell "B3" changes, write this value If Selection <> Range("B3") Then Exit Sub Values(1) = Selection.Cells.Value '----------- Write the new value in synchronous mode MyOPCGroup.SyncWrite 1, ServerHandles, Values, ErrorsEnd Sub
TRUNC Inserita: 31 marzo 2004 Segnala Inserita: 31 marzo 2004 Private Sub worksheet_change(ByVal Selection As Range)'----------- Only if cell "B3" changes, write this valueIf Selection <> Range("B3") Then Exit SubValues(1) = Selection.Cells.Value'----------- Write the new value in synchronous modeMyOPCGroup.SyncWrite 1, ServerHandles, Values, ErrorsEnd SubPremetto che non conosco WinCC, ma conosco piuttosto bene VBA... Questo pezzo di codice, ad occhio e croce, serve a trasferire il valore della cella B3 in una non ben precisata locazione di memoria del PLC ogni volta che si fa una modifica alla cella.Quindi, se MyOPCGroup.SyncWrite serve a scrivere, per leggere la classe MyOPCGroup dovrebbe mettere a disposizione il metodo SyncRead, o qualcosa del genere.Usa il visualizzatore di oggetti per navigare tra le proprietà, i metodi e gli eventi messi a disposizione della suddetta classe.Ammesso che il metodo SyncRead esista, dovrai costruire una sub del genere:Sub lettura_valore()MyOPCGroup.SyncRead <<parametri>>End SubProbabilmente, però, avrai il problema di quando eseguire questa subroutine, perchè vorrai vedere il valore della cella aggiornarsi di continuo...Una soluzione potrebbe essere quella di inserire in un modulo questa subroutineSub Auto_Open()Dolettura_valoreDoEventsLoop While 1End SubQuesta chiama di continuo la subroutine di lettura, permettendo però l'esecuzione degli altri eventi...Ciao!
lele65 Inserita: 19 aprile 2004 Autore Segnala Inserita: 19 aprile 2004 Non è proprio così, quando interroghi un server OPC devi prima dichiarare il nome del server a cui collegarsi, creare un gruppo e dichiarare il nome delle variabili da leggere (o scrivere). Quello a cui ti riferisci è la scrittura della variabile precedentemente dichiarata. Il mio problema è dichiarare + di 1 variabile.'----------- Get the ItemID from cell "A1"NodeName = Range("A1").ValueItemIDs(1) = Range("A2").ValueIn questo punto dichiaro il nome del computer nella cella A1 ed il nome della variabile nella cella A2'----------- Set the spreadsheet cell values to the values readRange("B2").Value = CStr(ItemValues(1))Range("C2").Value = Hex(Qualities(1))Range("D2").Value = CStr(TimeStamps(1))End Sube qui mi restituisce il valore della variabile (B2), il quality code (C2) e l'ora (D3).Se voglio inserire 2 variabili cosa devo modificare???Grazie a tuttiSaluti
walterword Inserita: 21 aprile 2004 Segnala Inserita: 21 aprile 2004 si confermo , per leggere in questa maniera c'e' il metodo SyncRead."MyOPCGroup.SyncWrite " e' il metodo che usi per scrivere , mentre per leggere sara' "MyOPCGroup.SyncRead".Comunque se hai le msdn a posto prova a fare cosi :digita MyOpcGroup e poi digiti il "." a questo punto dovrebbero apparirti tutti i metodi , le proprieta e gli eventi che l'oggetto , tramite la classe madre , mette a disposozione."MyOPCGroup_DataChange" questa invece e' una routine che gestisce un evento , precisamente DataChenge dell'oggetto e si scatena ogni volta che cambiano di valore i dati che passi come item nei parametri della routine stessa.il vb no lo conosco ma con vc# le cose sono molto simili per quanto riguarda "l'oggettistica" poi anche crearti delle routine a tuo piacimento gestendo gli eventi .se usi vb.net puoi nel tuo progetto , dopo aver importato la dll dell'opc server , avere a disposizione tutto il Namespace contenente nell'assemly.e da qui aprire le viste ad albero per scrutare e studiarti tutte le classi incorporate , i metodi di tali, le proprieta ect.buon divertimento ciao walter
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora