DIAdem

cancel
Showing results for 
Search instead for 
Did you mean: 

Kanalgruppenerstellung via Dataplugin

Solved!
Go to solution

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

0 Kudos
Message 1 of 5
(4,576 Views)

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

 

 

 

0 Kudos
Message 2 of 5
(4,542 Views)
Solution
Accepted by topic author Senro

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

0 Kudos
Message 3 of 5
(4,536 Views)

... 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)

0 Kudos
Message 4 of 5
(4,519 Views)

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

0 Kudos
Message 5 of 5
(4,505 Views)