11-21-2011 07:34 AM
Hallo liebes Forum,
mein Problem stellt sich folgendermaßen dar:
Ich benutze ein selbstgeschriebenes Dataplugin um Messdaten zu suchen und ins Datenportal zu laden.
Die Suche nach Kanalgruppen(eSearchChannelGroup) funktioniert mittels Datafinder soweit gut. Das verschieben der geladenen Daten ins Datenportal und dem anlegen einer Kanalgruppen mit ihren Eigenschaften geht auch.
Doch wenn ich nun eine Ebene weiter runter steige und nach Kanälen(eSearchChannel) suchen will, gibt es Probleme. Also die Suchergebnisse, die mir im Navigator angezeigt werden sind i.O.. Doch wenn diese Ergebnisse nun ins Datenportal geladen werden, wird für alle Kanäle (Ergebnisse) nur eine Kanalgruppe erzeugt d.h. alle Kanäle (aus verschiedenen Messungen) werden in eine Kanalgruppe gesteckt.
Bsp.:
2 Messungen á 15 Kanäle
Nun sollen zwei Kanalgruppen erzeugt werden, die jeweils 15 Kanäle beinhalten.
Momentan wird mir nur eine Kanalgruppe erzeugt mit 30 Kanälen und mit dem Kanalgruppenname der ersten Messung.
Ist es den nicht möglich, für jede Messung eine Kanalgruppe zu erstellen. Und dann auch nur die Kanäle aus dieser Messung in diese Kanalgruppe einzutragen?
Vielen Dank im Voraus!!
Viele Grüße, Senro
Solved! Go to Solution.
11-22-2011 07:16 AM
Hallo.
Für VBS gibt es einige Befehle zum Erstellen von Gruppen und
dem Zufügen von Kanälen, beispielsweise:
call Data.Root.ChannelGroups.Add()
Mit dem folgenden kleinen Beispiel werden beispielsweise eine neue Gruppe und ein neuer Kanal
erstellt:
Dim oMyGrp
Call Data.Root.ChannelGroups.RemoveAll()
Set oMyGrp = Data.Root.ChannelGroups.Add("MyChnGroup")
Call oMyGrp.Channels.Add("MyCannel",DataTypeFloat64)
Dieses Laden und Importieren kann auch in ein Plug-In integriert werden.
(wenn es mit VBS programmiert wird)
Alternativ können im Datenportal manuell mit rechtsklick auch neue Gruppen
erstellt und Kanäle einer anderen Gruppe zugeteilt werden.
Ich hoffe diese Infromationen helfen das Problem zu lösen.
Gruß LoCa
11-22-2011 08:28 AM
Hallo Senro,
Wenn ich Sie richtig verstanden habe, ist Ihr Problem nicht im DataPlugin sondern in den verfuegbaren Ladevorgaengen im NAVIGATOR. Hier ist ein VBScript das die gesuchten Kanaele bei Ursprungsgruppe laedt:
Call DataDelAll 'Set Selection = Navigator.Display.CurrDataFinder.ResultsList.ElementsSelection ' for selected channels Set Selection = Navigator.Display.CurrDataFinder.ResultsList.Elements ' for all of them Call LoadChannelsByGroup(Selection) Sub LoadChannelsByGroup(Selection) Dim i, j, k, n, iMax, nMax, NewGroup, StartGroup, ChanGroupMap, ChanIdxs, Channels, ChNum, SelGroup, Msg, PortalShow, LastTime, TestName PortalShow = PtlShow PtlShow = 0 ChanGroupMap = GetChannelGroupMap(Selection) iMax = UBound(ChanGroupMap) FOR i = 1 TO iMax IF (Timer - LastTime < 0) OR (Timer - LastTime > 1) THEN Msg = Left("Loading Group " & i & " of " & iMax, 1000) Call MsgBoxDisp(Msg, "MB_NOBUTTON", "MsgTypeNote", 0, 0, 1) LastTime = Timer END IF ChanIdxs = Split(" " & ChanGroupMap(i), " ") k = ChanIdxs(1) StartGroup = GroupCount + 1 Set SelGroup = Selection(k).ChannelGroup On Error Resume Next TestName = SelGroup.Root.Name TestName = SelGroup.Parent.Name On Error Goto 0 Call Navigator.LoadData(SelGroup, "Register") IF GroupCount >= StartGroup AND GroupChnCount(GroupCount) >= UBound(ChanIdxs) THEN FOR n = SelGroup.Children.Count TO 1 Step - 1 FOR j = 1 TO UBound(ChanIdxs) k = ChanIdxs(j) IF Selection(k).Name = SelGroup.Children(n).Name THEN Exit For ' j NEXT ' j ChNum = CNo("[" & GroupCount & "]/" & SelGroup.Children(n).Name) IF ChNum > 0 THEN IF j > UBound(ChanIdxs) THEN Call ChnDelete(ChNum) ELSE Call ChnValExpand(ChNum) END IF END IF ' Channel was loaded NEXT ' Channel Call GroupDefaultSet(GroupCount) END IF ' SelGroup loaded NEXT ' i, SelGroup Call MsgBoxCancel PtlShow = PortalShow End Sub ' LoadChannelsByGroup() Function GetChannelGroupMap(Selection) Dim i, k, ChanGroupMap, FilePath, PathDict Set PathDict = CreateObject("Scripting.Dictionary") ReDim ChanGroupMap(Selection.Count) FOR i = 1 TO Selection.Count FilePath = Selection(i).ChannelGroup.Root.Properties("fullpath").Value FilePath = FilePath & "\" & Selection(i).ChannelGroup.Name IF FilePath <> "" THEN IF PathDict.Exists(FilePath) THEN k = PathDict.Item(FilePath) ChanGroupMap(k) = ChanGroupMap(k) & " " & i ELSE PathDict.Exists(FilePath) k = k + 1 ReDim Preserve SelGroups(k) ChanGroupMap(k) = i PathDict.Add FilePath, k END IF END IF ' FilePath <> "" THEN NEXT ' i ReDim Preserve ChanGroupMap(k) GetChannelGroupMap = ChanGroupMap End Function ' GetChannelGroupMap()
Brad Turpin
DIAdem Product Support Engineer
National Instruments
11-23-2011 07:39 AM
... oder anhängend ein Script, das als Anwenderbefehl (UserCommand) hinzugefügt werden kann und per Rechtsklick (Contextmenu) das Laden in eigene (Portal)Gruppen ansteuert.
Das Anwenderscript kann unter 'Einstellungen>>Optionen>>Erweiterungen>>Anwenderbefehle' hinzugefügt werden (muss jedoch zuvor entpackt werden)
11-24-2011 03:17 AM
Hallo,
erstmal vielen Danke an alle für die schnelle und gute Hilfe!
@ Brad Turpin: Konnte Ihr Beispiel prima in mein Script einbetten und nun funktioniert alles wie gewünscht.
Mit freundlichen Grüßen
Senro