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