Anzeigeformat des Kanals ändern

Hallo,
ich benutze DIAdem seit kurzem und brauche hilfe bzw. Tipps um weiter zu kommen.
In einem Kanal (Anzeigeformat: numerisch / Datentyp: Float64 ) möchte ich Werte, die ich in HEX konvertiere, im selben Kanal speichern.
dazu-----> temp = "AB01"
Variable1=Mid(temp,1,2)
Variable2=Mid(temp,3,2)

Hallo Youssef!
Jetzt ist es schon fast klar. Ich hab nur noch ein Verständnisproblem damit das deine Konvertierung unabhängig von der Bytezahl zu sein scheint. Ist das so richtig? Erweitert man dein Beispiel noch um eine Zeile mit dem Wert 1 ergibt sich folgende Liste:
1         -->> HEX(1) = 01           --->> 01       01000000
33846     -->> HEX(33846) = 8436     --->> 3684     36840000
5243146   -->> HEX(5243146) = 50010A --->> 0A0150   0A015000
Die blauen Werte wären die m.E. bei 4 Byte sich ergeben müssen.
So nun zum Lösungsansatz. Ist erstaunlich umfangreich und ggf. noch nicht perfekt. Es gibt auch mindestens zwei Lösungen. Ich hab mal die etwas einfachere reingestellt, sollte die Performance nicht reichen muss man einen etwas anderen Weg gehen. Die Anzahl der Bytes hol ich mir über die Kanaleigenschaft 'CANNoOfBits'. Die Erklärung des Codes ist in den Kommentaren:
Option Explicit
' Ergebnisgruppe erstellen (wenn vorhanden vorher löschen
If GroupIndexGet("Ergebnis") > 0 Then
Call GroupDel( GroupIndexGet("Ergebnis") )
End If
Call GroupCreate("Ergebnis")
Call GroupDefaultSet( GroupIndexGet("Ergebnis") )
' Konvertierung der beiden Kanäle
Call Convert("SWA/Data_SWA")
Call Convert("SWA/var_SWA")
' Konvertierungsfunktion, Übergabeparameter ist der vollqualifierte Kanalname
Function Convert(ByRef sgSource)
Dim i
Dim j
Dim s
Dim nChn
Dim nChnHex
Dim sgHex
Dim nBytes
' Kanalnummer des Quellkanals bestimmen
nChn = CNo(sgSource)
' Ergebnistexkanal mit gleichem Namen anlegen
Call ChnAlloc(ChnName(nChn),ChnLength(nChn),1,DataTypeString,"Text")
' Kanalnummer des Ergebnistextkanals ermitteln
nChnHex = CNo("Ergebnis/" & ChnName(nChn))
' Anzahl Bytes bestimmen
nBytes = ChnPropValGet(nChn, "CANNoOfBits") / 8
' Umwandlung in einer Schleife über alle Werte (ggf. nicht performant!)
For i=1 To ChnLength(nChn)
' Wert in HEX-String umwandeln
sgHex = Hex( ChdX(i,nChn) )
' ggf. mit führenden Nullen auffüllen
sgHex = String(nBytes*2-Len(sgHex),"0") & sgHex
' Bytereihenfolge umkehren
s = ""
For j=0 to nBytes
s = Mid(sgHex,j*2+1,2) & s
Next
' neu zusammengesetzt in einen Textkanal speichern
ChT(i,nChnHex) = s
Next
End Function
Sollte was unklar sein bitte nachfragen.
Matthias
Message Edited by Twigeater on 09-30-2008 11:01 PM
Matthias Alleweldt
Project Engineer / Projektingenieur
Twigeater?  

Similar Messages

  • Hallo, ich suche in DiaDem 10 nach einer Möglichkei​t, nach einer Vorgegeben​en Prozedur aufeinande​rfolgende Abschnitte eines Messwertka​nals miteinande​r zu Verrechnen - Bildung eines gemittelte​n Verlaufs des Kanals bei Trommelprü​fstandsmes​sung

    Ich suche nach eine Prozedur in VBS oder als Autosequenz.
    Bildung des gemittelten Verlaufs eines Messwertkanals bei Trommelprüfstandsmessung:
    1. Gehe vom Anfang des Kanals eine vorgegebene Anzahl von Messpunkt vor
    2. Nimm aus diesem Bereich das Maximum
    3. Gehe zum darauf folgenden Nulldurchgang der Kurve
    4. Gehe von da "x" Messpunkte zurück zu Punkt "y"
    5. Schneide mir ab "y" jede einzelne Trommelumdrehung aus (50 Umdrehungen)
    6. Bilde mir aus den Einzelumdrehungen eine gemittelte Umdrehung
    7. Nimm den Wert "y" und berechne mir die gemittelte Überfahrt für alle übrigen Kanäle
    Für Anregungen wäre ich dankbar.

    Ich habe zwar kein komplettes Skript für speziell diese Aufgabe, kann Ihnen aber dennoch ein paar Tipps geben, welche Befehle Sie einsetzten können.
    Mit StatBlockCalc kann aus einem Intervall eines Kanales der Maximalwert ermittelt werden. Einfach als RowNoStr die Zeilen in der datenmatrix angeben, z.B. "1-50"
    Nulldurchgänge einer Kurve finden Sie am zuverlässigsten, wenn Sie die Kurve integrieren (ChnIntegrate) und anschliessend nach Extremwerten sichen (ChnPeakFind). Letztere Funktion muss unter Umständen zweimal aufgerufen werden - einmal Maximal und einmal für Minimalwerte (Richtung des Nulldurchgangs). Ergebnis sind jeweils 2 Kanäle mit den Koordinaten der Extremwertwerte. Der Kanal X-Peak gibt den Zeitpunkt des Nulldurchgangs an.
    Mit den PNo Funktion kann im Zeitkanal der Messung nach den Zeitpunkten des Nulldurchgangs gesucht werden, als Ergebnis erhält man die Zeile mit dem Nulldurchgang, hiervon können dann einfach x Werte abgezogen werden
    Mit DataBlCopy können Datenbereiche eines Kanal kopiert werden, so können die Werte zwischen den Nulldurchgängen in neue Kanäle kopiert werden Als Parameter dient unter Anderem die Startzeile, welche mit PNo ermittelt wurde.
    Falls die Datenmatrix dynamisch verwaltet wird, müssen die neuen Kanäle vor der Kopieraktion mit ChnAlloc noch angelegt werden.
    StatBlockCalc kann nicht nur genutzt werden, um den Mittelwert innerhalb eines Kanales zu finden; in der zeilenorientierten Auswertung (s.Dialog "Deskriptive Statistik" bzw "statistische Kennwerte") kann ein Mittelwert Zeilenweise über mehrere Kanäle berechnet werden. Das Ergebnis ist in diesem Fall ein Kanal.
    Ich hoffe, die Hinweise erleichtern Ihnen die Erstellung des Skriptes. Leider können ein Teil der erwähnten Funktionen nicht im teachin Modus mitgeloggt werden, so dass auch ein wenig manuelle Programmierung nötig sein wird.
    Ingo Schumacher
    Systems Engineer Sound&VibrationNational Instruments Germany

  • Zeit kanal ändern im Report

    Hallo,
    ich habe ein Diagramm eingebaut. X achse ist Zeit, Y achse ist Temperatur. Jetzt möchte ich die x-zeit um Strecke ändern, aber Y achse ist beihaltet.Ich habe schon die Funktion Kurven und Achsen Definition versucht, einhiet  und X kanal geändert. Nicht klappt. Kann jemand mir dabei helfen? Vielen Dank!
    Gruß
    Andreas
    Solved!
    Go to Solution.

    Geht es um die Skalierung der x-Werte? d.h. statt Bereich 3:00 - 3:15 lieber den Bereich 3:25 - 3:50 anzeigen lassen?
    Dann hilft ein Doppelklick auf die x-Achse und in der sich öffnenden Dialogbox 'Kurven- und Achsendefinition' im Reiter 'Achsenparameter' die Skalierung von x manuell zu verändern.
    War's das, was du meintest?
    Gruß
    MiC

  • Radix mit Hilfe des Eigenschaftsknoten ändern

    Kann man bei einer numerischen Ausgabe mit Hilfe des Eigenschaftsknoten z.B. von Hex auf Dez umschalten?
    Can I switch in the case of a numeric display with the help of characteristic knots of hexadecimal to decimal?
    MfG
    Thomas

    daveTW wrote:
    OK, but a solution to the problem
    would be to wire two indicators (same look, same bounds, same pos) to
    your data and switch the visibility with property nodes.
    This
    is one possible and quite nice solution for certain cases. Since the OP
    didn't really specify what it was he wanted to achieve I didn't take
    the time to come up with a number of possible solutions.
    If it is only about showing information to a user you can also get
    around it sometimes by simply restricting precision to 0. If it is
    about being able to show numbers both in HEX and floating point then I
    do agree that your solution would be the most appropriate one although
    I have to admit that I struggle to come up with a situation where a
    number can be both something that is meaningfully presented as HEX as
    well as a floating point number.
    Rolf Kalbermatter
    Rolf Kalbermatter
    CIT Engineering Netherlands
    a division of Test & Measurement Solutions

  • Anzeigeformat in Diadem 2010 SCRIPT ändern

    Hallo,
    ich benutze seit einigen Diadem-Versionen ein Script, in dem ich mit
    Data.Root.ChannelGroups(1).Channels("Minuten").Properties("displaytype").Value = "numeric"
     einen Kanal von Zeit auf Numerisch ändere.
    In Diadem 2010 geht das nicht mehr und ich bekomme eine Fehlermeldung:
    "Der Eigenschaft displaytype kann kein Wert vom Typ vbString zugewiesen werden."
    Ich habe es auch mit
    Data.Root.ChannelGroups(1).Channels("Minuten").Properties.Add("displaytype", "numeric")
    versucht. Allerdings bekomme ich auch da eine Fehlermeldung:
    "Beim Aufrufen einer Unterroutine dürfen keine Klammern verwendet werden."
    Wie kann ich das Problem lösen?
    Solved!
    Go to Solution.

    Hallo Ludwig72,
    das konnte ich reproduzieren und es verhält sich nicht richtig. Ich habe einen entsprechenden Eintrag in die Fehlerdatenbank gemacht. Die Korrektur wird Bestandteil eines Service Pack bzw. der nächsten Version sein. Bis dahin hilft dir dein Work-Around.
    Noch ein Hinweis: Wenn du öfter auf die Eigenschaften oder Einzelwerte des Kanals zugreifen möchstest würde ich mir ein Kanalobjekt anlegen - das ist insgesamt schneller. Beispiel für deinen Work-Around:
    Dim oChn
    set oChn = Data.Root.ChannelGroups(1).Channels("Minuten")
    ChnFormat(oChn.Properties("number").Value) = "Numeric"
    Gruß
    Walter

  • Datenrate in bestimmten Bereichen ändern

    Hallo,
    ich möchte in bereits vorhandenen Datenaufzeichnungen die Datenrate für bestimmte Bereiche ändern um die Datengröße zu reduzieren aber die Kurve dabei nicht verkürzen.
    Beispiel:
       es werden Daten über eine Zeit von 60 Sekunden erfasst. Zwischen einzelnen Peaks sind längere Pausen wo die Spannung zwischen 0 und x Volt liegt. Diese Bereiche möchte ich gerne kürzen.
    Hatte an ein VBS Script gedacht aber da stoße ich immer wieder auf Probleme, da die Länge des Kanals bis zu 49247232 Werte umfassen kann und mehr.

      smooth
      create_groups
      if Data.Root.ChannelGroups(1).Channels.Exists("PXI1Slot2\ai0") Then
        find_peak_hv1
        kurve_teilen_hv1
      end if
      if Data.Root.ChannelGroups(1).Channels.Exists("PXI1Slot2\ai2") Then
        find_peak_hv2
        kurve_teilen_hv2
      end if
    'Kurven glätten
    sub smooth
      if Data.Root.ChannelGroups(1).Channels.Exists("PXI1Slot2\ai0") Then
        Call ChnSmooth("[1]/PXI1Slot2\ai0","[1]/u_hv1",2,"maxNumber") '... Y,E,SmoothWidth,SmoothType
      End if
      if Data.Root.ChannelGroups(1).Channels.Exists("PXI1Slot2\ai1") Then
        Call ChnSmooth("[1]/PXI1Slot2\ai1","[1]/i_hv1",2,"maxNumber") '... Y,E,SmoothWidth,SmoothType
      End if
      if Data.Root.ChannelGroups(1).Channels.Exists("PXI1Slot2\ai2") Then
        Call ChnSmooth("[1]/PXI1Slot2\ai2","[1]/u_hv2",2,"maxNumber") '... Y,E,SmoothWidth,SmoothType
      End if
      if Data.Root.ChannelGroups(1).Channels.Exists("PXI1Slot2\ai3") Then
        Call ChnSmooth("[1]/PXI1Slot2\ai3","[1]/i_hv2",2,"maxNumber") '... Y,E,SmoothWidth,SmoothType
      End if
    end sub
    'Untergruppen erstellen
    sub create_groups
      Call Data.Root.ChannelGroups.Add("U_HV1")
      Call Data.Root.ChannelGroups.Add("I_HV1")
      Call Data.Root.ChannelGroups.Add("U_HV2")
      Call Data.Root.ChannelGroups.Add("I_HV2")
    end sub
    'Kurven Start- und Stop-Werte finden für HV1
    sub find_peak_hv1
      dim oChn, i, low_hv1, high_hv1
      dim x
      Dim peak, low, st
      x = 1
      st = 1
      Call Data.Root.ChannelGroups(1).Channels.Add("high_hv1",DataTypeFloat64)
      Call Data.Root.ChannelGroups(1).Channels.Add("low_hv1",DataTypeFloat64)
      set oChn = Data.Root.ChannelGroups(1).Channels("u_hv1")
      set high_hv1 = Data.Root.ChannelGroups(1).Channels("high_hv1")
      set low_hv1 = Data.Root.ChannelGroups(1).Channels("low_hv1")
      While low <> 0 or peak <> 0 or x <= 100
        low = Find("Ch(""u_hv1"")>=3",st)
        if low >= 0 then
          peak = Find("Ch(""u_hv1"")<=3",low)
          if low >=0 and peak >= low and peak-low >=10 then
            low_hv1(x) = low
            high_hv1(x) = peak
            st = peak
            x = x + 1
          else st = peak  
          end if
        end if
      Wend
    end sub
    'Kurven Start- und Stop-Werte finden für HV2
    sub find_peak_hv2
      dim oChn, i, low_hv2, high_hv2
      dim x
      Dim peak, low, st
      x = 1
      st = 1
      Call Data.Root.ChannelGroups(1).Channels.Add("high_hv2",DataTypeFloat64)
      Call Data.Root.ChannelGroups(1).Channels.Add("low_hv2",DataTypeFloat64)
      set oChn = Data.Root.ChannelGroups(1).Channels("u_hv2")
      set high_hv2 = Data.Root.ChannelGroups(1).Channels("high_hv2")
      set low_hv2 = Data.Root.ChannelGroups(1).Channels("low_hv2")
      While low <> 0 or peak <> 0 or x <= 100
        low = Find("Ch(""u_hv2"")>=3",st)
        if low >= 0 then
          peak = Find("Ch(""u_hv2"")<=3",low)
          if low >=0 and peak >= low and peak-low >=10 then
            low_hv2(x) = low
            high_hv2(x) = peak
            st = peak
            x = x + 1
          else st = peak  
          end if
        end if
      Wend
    end sub
    'Kurven teilen HV1
    sub kurve_teilen_hv1
      dim u_hv1_ch, i_hv1_ch
      dim x
      Dim low_hv1, high_hv1, st
      x = 1
      set high_hv1 = Data.Root.ChannelGroups(1).Channels("high_hv1")
      set low_hv1 = Data.Root.ChannelGroups(1).Channels("low_hv1")
      for x = 1 to Data.Root.ChannelGroups(1).Channels("high_hv1").Properties("length").Value
        u_hv1_ch = "uhv1_" & x
        i_hv1_ch = "ihv1_" & x
        Call Data.Root.ChannelGroups("U_HV1").Channels.Add(u_hv1_ch,DataTypeFloat64)  'hier entstehen Numerische Channel, diese sollen aber den Zeitstempel übernehmen
        Call Data.Root.ChannelGroups("I_HV1").Channels.Add(i_hv1_ch,DataTypeFloat64)
        Call DataBlCopy(Data.Root.ChannelGroups(1).Channels("u_hv1"),low_hv1(x),high_hv1(x)-low_hv1(x),Data.Root.ChannelGroups("U_HV1").Channels(u_hv1_ch),1)
        Call DataBlCopy(Data.Root.ChannelGroups(1).Channels("i_hv1"),low_hv1(x),high_hv1(x)-low_hv1(x),Data.Root.ChannelGroups("I_HV1").Channels(i_hv1_ch),1)
      next
    end sub
    'Kurven teilen HV2
    sub kurve_teilen_hv2
      dim u_hv1_ch, i_hv1_ch
      dim x
      Dim low_hv2, high_hv2
      x = 1
      set high_hv2 = Data.Root.ChannelGroups(1).Channels("high_hv2")
      set low_hv2 = Data.Root.ChannelGroups(1).Channels("low_hv2")
      for x = 1 to Data.Root.ChannelGroups(1).Channels("high_hv2").Properties("length").Value
        u_hv1_ch = "uhv2_" & x
        i_hv1_ch = "ihv2_" & x
        Call Data.Root.ChannelGroups("U_HV2").Channels.Add(u_hv1_ch,DataTypeFloat64)
        Call Data.Root.ChannelGroups("I_HV2").Channels.Add(i_hv1_ch,DataTypeFloat64)
        Call DataBlCopy(Data.Root.ChannelGroups(1).Channels("u_hv2"),low_hv1(x),high_hv1(x)-low_hv1(x),Data.Root.ChannelGroups("U_HV2").Channels(u_hv2_ch),1)
        Call DataBlCopy(Data.Root.ChannelGroups(1).Channels("i_hv2"),low_hv1(x),high_hv1(x)-low_hv1(x),Data.Root.ChannelGroups("I_HV2").Channels(i_hv2_ch),1)
      next
    end sub
    Hier das Script. Beim erstellen der Channel, in die die Kurven übertragen werden, entstehen Numerische Kanäle. Diese haben allerdings keinen Zeitstempel sondern verwenden als X-Skalierung die Zeilennummern. Wie erstellt man auch dort eine Zeit-Achse?
    Können Sie mir anhand diesem Beispiel sagen wie ich nach dem kopieren Werte verwerfen kann und damit eine dynamische Datenrate erzeugen kann?
    Vielen Dank
    Sven Hermsmeier

  • 1.Wie kann ich unter Diadem 9 Textkanäle anlegen? 2. Wie kann ich im Navigator manuell einen neuen Kanal anlegen wie es z.B. bei der version 8 möglich war?

    Ich meine das es möglich ist unter Diadem 9 auch Kanäle mit Textinhalten zu generieren. Ich kann aber nur Zeit und numerische Darstellung auswählen.
    zu2.
    Wie kann ich schnell einen neuen Kanal anlegen und manuell Werte eingeben (entweder im Navigator oder im View)?

    zu 1)
    Neue Kanäle werden im Datenportal über das Kontextmenü generiert. Führen Sie einen Rechtsklick auf dem Titel der Gruppe aus, in welcher Sie den Kanal generieren möchten. Wählen Sie aus dem Kontextmenü "Neuer Kanal" und im darauf folgenden Dialog können Sie die Art des Kanals (numerisch / Datum / Text) festlegen.
    Wenn das Datenportal noch leer muss zuvor eine Gruppe erstellt werden. Dies erfolgt über das Kontextmenü der Root (oberste Zeile im Datenportal)
    zu 2)
    Um das Generieren von leeren Kanälen zu beschleunigen, können Sie sich kurze Skripte erstellen (Einzeiler), welche, wenn Sie sie mit den Ikonen der DIAdem-Skript Funktionsleiste verknüpfen, über einen Shortcut aufgerufen werden können (aus jedem beliebigen Modul). So könnten Sie sich ein Skripot für Da
    tenkanäle und eins für Textkanäle erstellen. Der einuige Befehl, welcher in diesen Skripten aufgerufen wird ist ChnAlloc. Über Parameter können Kanalname, Länge, Zielgruppe und Typ eingestellt werden. (s. Hilfe)
    Ingo Schumacher
    Application Engineering
    National Instruments

  • Textfarbe ändern

    wie kann ich bei "Fill & Sign" die Farbe des Textes ändern?

    Hallo,
    vielen Dank für deine Antwort.
    Nein, der Text ist normalerweise schwarz. Ich möchte den in irgendeiner anderen Farbe schreiben.
    Freundliche Grüße
    Bernhard Niedermayr
    Von: Bernd Alheit 
    Gesendet: Donnerstag, 23. Oktober 2014 12:56
    An: Bernhard Niedermayr
    Betreff:  Textfarbe ändern
    Textfarbe ändern
    created by Bernd Alheit <https://forums.adobe.com/people/Bernd+Alheit>  in Deutsche Foren - View the full discussion <https://forums.adobe.com/message/6858822#6858822>

  • Datum automtisch im Report

    Hallo,
    ich würde gerne Im Report in einer Kopfzeile das Datum einfügen, möchte das aber nicht manuel machen. Gibt es eine Möglichkeit in ein Textfeld eine Art Formel einzufügen und das Datum aus einer Kanal zu Laden?
    Ausserdem wird mir auf der X-Achse bei der beschriftung zwar die Uhrzeit angezeit, und auch der Tag , aber leider nicht Monat und Jahr, kann man da etwas in den einstellungen ändern?
    Danek schon mal
    Gruß Flens

    Hallo!
    Sie können den Speicherdatum des Datensatzes im Datenportal im Report automatisch auslesen, falls Sie schreiben:
    @RootPropGet("datestring")@
    Sie können das aktuelles Datum auslesen mit @currdate@
    Sonst, wenn Sie einem Datumskanal im Datenportal haben und das erste Wert des Kanals im Report auslesen wollen:
    @str(chd(1,1), "#dd.mm.yyyy")@
    Das "#dd.mm.yyyy" sagt, dass Sie einem Formatierung von Tag, Monat und Jahr haben wollen.
    Das gleiches können Sie für das X-Achse machen. Machen Sie einem
    Doppelclick auf dem X-Achse und geben als Format #dd.mm.yyyy hh:nn:ss
    Schönes Wochenende
    Ken Tobler

  • Binärdatei, Import via Header, Probleme mit Records

    Anmerkung: Ich fange bei 1 an zu zählen.
    Zur Binärdatei im Anhang (jpg in bin ändern):
    5. bis 10. Datenbyte ist die PIMZeit in ms seit 01.01.1904 - mir würde es jetzt schon mal reichen, die 6 Datenbytes einfach so als Zahl in Sekunden zu bekommen - da sitzt mein eigentliches Problem!
    Die Datensätze sind immer 83 Bytes lang.
    So wie ich das bis jetzt herausgefunden habe, kann ich solche Datensätze nur über den Dialog "Import via Header" laden, d.h. mit einer *.dat-Datei. Wenn es eine andere Möglichkeit gibt, geben Sie mir bitte ein Beispiel dazu.
    Meine *.dat-Datei (z.B.):
    DIAEXTENDED {@:ENGLISH
    #BEGINGLOBALHEADER
    1,WINDOWS 32Bit
    2,{@R:900 {@V:9.00.1764 {@F:4.00
    101,---
    106,
    102,
    103,---
    104,11.10.2005
    105,15:32:50
    110,#dd.mm.yyyy hh:nn:ss.ffff
    111,9.9E+34
    112,Low -> High
    #ENDGLOBALHEADER
    #BEGINCHANNELHEADER
    200,Time
    201,PIMZeit
    210,EXPLICIT
    211,Test.bin
    213,BLOCK
    214,REAL48
    Anzahl der Werte z.B. 30
    220,30
    Zeiger auf ersten Wert des Kanals
    221,2
    -> hier sind Records anzugegen, da es sich um 213,BLOCK handelt ( - nicht die Anzahl der Bytes, sondern Records - und da liegt das Problem)*
    Kanaloffset
    222,83
    Offset
    240,0
    Skalierungsfaktor
    241,1
    Datenanzeige (NUMERIC oder TIME)
    260,Numeric
    261,1
    262,0
    #ENDCHANNELHEADER
    *) Da erst 4 Bytes kommen und danach 6 Bytes (PIMZeit), die mich interessieren, habe ich keine Möglichkeit auf diese PIMZeit zu "zeigen", da ja in Records gerechnet wird (1 record heißt 6 Bytes, 2 records heißen 12 Bytes ....)
    Welche Möglichkeiten habe ich also, um mir meine PIMZeit anzuzeigen???? Gibt es hier ein grundsätzliches Problem - oder (was mir lieber wäre) eine einfache Lösung!?
    Message Edited by moos on 10-14-2005 07:05 AM
    Message Edited by moos on 10-14-2005 07:06 AM
    Message Edited by moos on 10-14-2005 07:08 AM
    Attachments:
    Test.jpg ‏1 KB

    Es gibt kein VI.
    Die Daten liegen wie in Test.bin vorgegeben vor, z.B.
    00 00 00 4F 02 EB 05 E9 AA 3D ... usw
    Ich möchte jetzt die Daten Byte 5 - 10 als Zahl (High -> Low) in DIAdem anzeigen. Und das geht irgendwie nicht, weil es sich um den Datentyp Real48 handelt und ich bei Kanaloffset nur Records angeben kann. Ein Record bei Real 48 ist 6 Bytes lang. Da ich Records von Dateianfang angeben muß, kann ich nie direkt auf meine 6 Byte Zahl zeigen (weil ja vorher 4 Byte kommen).
    Das ist mein Problem.

  • Binärdatei - Daten gezielt herausholen und in DIAdem anzeigen - Import via Header (?)

    Anmerkung: Ich fange bei 1 an zu zählen.
    Zur Binärdatei im Anhang (jpg in bin ändern - das Forum aktzeptiert keine *.bin):
    5. bis 10. Datenbyte ist die PIMZeit in ms seit 01.01.1904 - mir würde es jetzt schon mal reichen, die 6 Datenbytes einfach so als Zahl in Sekunden zu bekommen - da sitzt mein eigentliches Problem!
    Die Datensätze sind immer 83 Bytes lang.
    So wie ich das bis jetzt herausgefunden habe, kann ich solche Datensätze nur über den Dialog "Import via Header" laden, d.h. mit einer daraus erzeugten *.dat-Datei. Wenn es eine andere Möglichkeit gibt, geben Sie mir bitte ein Beispiel dazu.
    Meine *.dat-Datei (z.B.):
    DIAEXTENDED {@:ENGLISH
    #BEGINGLOBALHEADER
    1,WINDOWS 32Bit
    2,{@R:900 {@V:9.00.1764 {@F:4.00
    101,---
    106,
    102,
    103,---
    104,11.10.2005
    105,15:32:50
    110,#dd.mm.yyyy hh:nn:ss.ffff
    111,9.9E+34
    112,Low -> High
    #ENDGLOBALHEADER
    #BEGINCHANNELHEADER
    200,Time
    201,PIMZeit
    210,EXPLICIT
    211,Test.bin
    213,BLOCK
    214,REAL48
    Anzahl der Werte z.B. 30:
    220,30
    Zeiger auf ersten Wert des Kanals:
    221,2
    -> hier sind Records anzugegen, da es sich um 213,BLOCK handelt ( - nicht die Anzahl der Bytes, sondern Records - und da liegt das Problem - meiner Meinung nach)*
    Kanaloffset:
    222,83
    Offset:
    240,0
    Skalierungsfaktor:
    241,1
    260,Numeric
    261,1
    262,0
    #ENDCHANNELHEADER
    *) Da erst 4 Bytes kommen und danach 6 Bytes (PIMZeit), die mich interessieren, habe ich keine Möglichkeit auf diese PIMZeit zu "zeigen", da ja in Records gerechnet wird (1 record heißt 6 Bytes, 2 records heißt 12 Bytes ....)
    Welche Möglichkeiten habe ich also, um mir meine PIMZeit anzuzeigen???? Gibt es hier ein grundsätzliches Problem - oder (was mir lieber wäre) eine einfache Lösung!?
    Attachments:
    Test.jpg ‏1 KB

    Hallo Ellen,
    Zuerst zur Frage mit der DIAdem 9.1 Testversion : ich bin mir nicht ganz sicher. Es sollte klappen, aber ich werden das morgen direkt nochmal prüfen. Jetzt zur eigentlichen Frage : Ich hatte zuerst die Struktur der Datei falsch verstanden und angenommen es sollten tatsaechlich 6-Byte Realwerte gelesen werden. Nach der letzten Antwort ging mir ein Licht auf. Ich habe ein kurzes DataPlugin zusammengestellt, dass die Werte einliest. Es arbeitet nicht besonders schnell, da die Werte byteweise geholt werden müssen. Für kleinere Dateien ist der Ladevorgang trotz allem recht schnell.
    Die angehängte URI Datei bitte einfach auf den Rechner kopieren, entpacken und dann die "URI" Datei doppelklicken. Anschliessend sollte die Dateinamenextension "bin" von DIAdem verstanden werden. Mehr Details zu dem "Wie" und "Was" bei DataPlugins findet sich auf www.ni.com/dataplugins, inklusive einer Dokumentation wie man selbst DataPlugins schreiben kann.
    Das Plugin wird als Custom_PIM.vbs auf dem Rechner installiert. Im header findet sich die Variable "fDoTZeroAdjustment". Wird diese auf True gesetzt, werden die Daten Offset-korrigiert, d.h. der erste Wert wird zu 0 gesetzt und alle folgenden Werte werden relativ zum ersten Wert angegeben. Damit erhält man dann die Sekunden seit Messungsstart.
    Viel Erfolg !
    Andreas
    Attachments:
    Custom_PIM.zip ‏2 KB

  • Frequenzgenerator mit stetiger Takterhöhung, WIE?

    Hallo,
    ich möchte einen Schrittmotor mit DIAdem ansteuern. Dazu habe ich den Schaltplan erstellt, es funktioniert auch alles soweit.
    Nur möchte ich jetzt die Umdrehungsgeschwindigkeit des Schrittmotors stetig erhöhen. Ich dachte da an ein Modul mit dem man den Frequenzgenerator verändern kann. Also den eingestellten Takt des Generators verändert. Oder kann man auch das ausgegebene Signal des Generators mit einer Formel oder ähnliches stetig erhöhen, also z.b. y=2t wobei y der Takt ist und t die Zeit. Leider weiß ich nicht wie ich das in DIAdem anstellen soll.
    Es ist egal wie ich die Geschwindigkeit erhöhe, also mit einer Formel oder Modul. Ich hoffe es kann mir jemand helfen, es wäre sehr wichtig für mich. Vielen Dank schonmal
    Message Edited by gerry. on 09-05-2007 03:44 AM

    Hallo gerry.
    ja, der MuX braucht die jeweilige Ziffer des Kanals, der eben 'durchgereicht' werden soll.
    Haben Sie also fünf Eingangsdaten-Kanäle, benötigen Sie eben die Zahlen 1-5.
    Hier eignen sich Formelblöcke, um die Vorgaben richtig einzusetzen, die können jedes Ergebnis haben.
    Auch ein Schieber ist denkbar. Vielleicht hilft auch ein Zähler.
    DAC bietet viele Steuremöglichkeiten über Flaken, Bedingingen, Fenster usw. Die sollten Sie mal ausloten, um den MuX anzusprechen.
    Anhang ist ein DAC-Plan (also umbenennen in *.DAC) mit 2 kleinen Beispielen.
    greets Andreas
    Volkswagen AG
    Wolfsburg - Germany
    Attachments:
    mux.txt ‏33 KB

  • Diadem Script von 9.0 nach 2012

    Hallo DIAdem-Gemeinde,
    ich befinde mich leider in der glücklichen Position, ein altes DIAdem Script, welches unter Diadem9.0 geschrieben wurde, in Diadem2012 anzupassen.
    Im Moment macht mir folgendes Problem Sorgen:
    Vor jeder Berechnung werden die aktuellen Kanalnamen in ein array gespeichert mit name(i)= ChnName(i). Wenn ich das mit allen 501 Kanälen machen möchte, geht das ganze nur bis i = 450. Gibt es eine max. Begrenzung der Einträge eines arrays in DIAdem bzw. vbs?
    Wenn ich nun versuche das ganze anders sinnvoll zu lösen, verstricke ich mich nur in mehr Fehler... Das ganze wir dazu gemacht, um nach der jeweiligen Berechnungsroutine die Kanalnamen wieder zurück zu kopieren. Sonst steht da nur noch Copy1 bis... und MatScalMul1 bis....
    Gibt es dafür eine sinnvolle Alternative? Und wie greife ich generell auf Kanäle zu? Wenn ich mit den alten Befehlen wie ChnName(i) z.b. darauf zugreife, benutzt DIAdem dann den Index oder die Kanalnummer?
    Vielen vielen Dank schonmal im Voraus,
    ich hoffe ich finde eine geeignete Lösung, langsam geht mir die Puste aus
    Grüße

    Hallo ihr beiden,
    also vielleicht kann ich ein wenig mehr über das Skript erzählen. Weil es an die 5500 Zeilen hat und ich nicht weiß ob ich es der "Öffentlichkeit" zugänglich machen darf, mal ein paar Erklärungen. Im Prinzip besteht das Skript aus einzelnen Subroutinen, die die gewonnenen Messdaten erst einlesen und dann sukzessive weiter verarbeiten (Nullpunktverschiebung, Umrechnung in physikalische Einheiten, andere Berechnungen mit Hilfe einer DLL und darin befindlichen c++ Routinen).
    Da das vbs Skript unter Diadem 9 von (leider wenig begabten) Programmierern erschaffen wurde, gibt es bei meiner "Implementierung" in Diadem 2012 einige Probleme.
    Mit das größte Problem ist jedoch, dass die Übergabeparameter für die dll bzw. die c++ Routinen in die Kanäle 470-500 geschrieben werden. Die dll(gpiexl) ist so (schlecht) programmiert, dass sie sich aus Diadem die Werte (Kanäle 470-500) nimmt und die Ergebnisse der Berechnung wiederrum in Kanäle zwischen 470 und 500 schreibt. Nun konnte man im alten Diadem ohne dynamische Kanalverwaltung noch auf Kanäle mit beliebig großem Index zugreifen, diese wurden direkt erstellt. Im neuen Diadem kann man leider keinen Kanal 400 erstellen wenn die bisherigen Kanäle nur bis z.B. 45 gehen. Daher habe ich zuerst 500 Kanäle mit jeweils 32768 1sen erstellen lassen in die dann die Werte eingelesen werden (zumindest erstmal in die ersten 58).
    Im alten Skript wird vor jeder Operation der Name und der Typ des Kanals folgendermaßen gespeichert:
    for i=1 to GlobUsedChn
    name(i)= ChnName(i)
    sondentyp(i) = CC(i)
    next
    und nachher wieder andersherum zurück gelesen.
    Alle Operationen wie Messwerte verkürzen, einzelne Abschnitte ausschneiden wurden bis jetzt auch immer für jeden Kanal ausgeführt. Nun habe ich das Skript soweit angepasst, dass es vor jeder Berechnung die Kanalnamen wie oben angegeben speichert und nachher zurück liest. Problematisch wird dies jedoch in den Subroutinen wo eine Zwischengruppe erstellt wird, in der die Werte der Berechnung abgelegt werden. Im alten Diadem 9.0 konnte man auf die jeweiligen Kanäle im aktiven Datenset noch mit (i) zugreifen, im neuen muss ich das auch irgendwie ändern. Daher war meine Frage ob ich bei einer Operation wie 
    call matscaladd(i,mittelwert,1)
      den Namen des Kanals erhalten kann und damit nicht vorher alle Namen einlesen und nachher wieder überschreiben muss? Denn kommen neue Kanäle durch kopieren etc. hinzu, verzettelt man sich schnell und es gibt Chaos...
    Noch eine Frage: Ich habe Diadem 9.0 neu installiert und plötzlich gibt es bei dem Befehl:
    call chncopy (cno("A"),C_Zwischenspeicher1)
     die Fehlermeldung dass auf den Kanal C_Zwischenspeicher1 nicht zugegriffen werden kann. C_Zwischenspeicher 1 = 493 wird aber vorher zugewiesen und funktioniert auch einwandfrei unter anderem in anderen Diadem 9.0 Installationen. Es existieren nur Kanäle bis ca. Index = 63. Sollte aber in den alten Diadem Versionen kein Problem sein. Gibt es vielleicht eine kleine versteckte Option der dynamischen Kanalverwaltung in Diadem 9.0 die ich bei der Neuinstallation übersehen hab?
    Noch eine letzte Frage zum Schluss: 
    Sollte ich mir jetzt lieber angewöhnen das Skript konsequent in die Objekt-orientierte Zugriffsweise umzuschreiben oder lieber bei den alten Codes bleiben?
    Vielen Dank schon im Voraus für eure Hilfe!!!
    P.S.: Raphael: Ich hatte wohl übersehen, dass ich bei den arrays nur dim name(501) initialisiert hatte aber sondentyp() übersehen hatte -.- Nachts um halb zwei darf das dann auch schonmal passieren... 

  • Youtube Videos stürzen fast sofort ab. (Firefox)

    Guten Tag liebe ... Menschen,
    Ich habe das Problem bei einem Rechner das beim Mozilla Firefox (Neuste Version), Youtube Videos direckt nach einer Sekunde abstürzen.
    Er Stockelt sich noch mit den Grafik einstellungen ab setzt sich jedesmal auf 0 Sekunden zurück, aber dann kommt die Fehler meldung: "Es ist ein Fehler aufgetreten versuchen sie es Später noch einmal."
    Dies passiert ausschließlich bei dem Mozilla Firefox (egal welche Version), und auch nur auf Youtube (Nicht viele Seiten getestet, aber am wichtigsten auf Youtube)
    Ich habe schon sämtliche Foren durchsucht und lauter möglichkeiten gefunden die das beheben "sollten" allerdings half mir keins weiter und i-wie wurde auch niemandem richtig weiter geholfen.
    Ich hoffe allerdings das es in diesem teil des Internets ändern wird.
    Zusätzlich gebe ich eine Liste mit möglichkeiten an die genannt wurden, und ich alle schon abgearbeitet habe.
    Versucht habe ich schon:
    Neu installation des Browsers
    Neu installation des Adobe Flash Players
    Alte Archiv Dateien von Adobe Flash Player sowie Mozilla Firefox installiert.
    Alle Addons deaktiviert, Cache/ Cookies gelöscht.
    Natürlich Rechner neu gestartet..
    Hardware beschleunigung deaktiviert
    Java Deaktiviert neu installiert etc.
    Internet Sicherheitseinstellungen ganz runter.
    Ist ein neuer Rechner, und besitzt einen Antivieren schutz. Zwar einen Kostenlosen aber ich denke nicht das sich kein Virus darauf befindet.
    Mhhh mehr fällt mir gerade nicht ein vllt. habe ich noch was vergessen.
    Ich denke nicht das die Hardware des Rechners von belangen sind. Auf Nachfrage werde ich natürlich diese auch Durchgeben.
    Jedenfalls bin ich mit meinem Latein am Ende. Und ich bedanke mich jetzt schonmal für Hilfreiche antworten.
    Mfg Matthias
    Ps. Irgendwie bin ich mit meinem Deutsch nicht zufrieden..

    Ich hatte das gleiche Problem, vermutlich weil mein Computer schon zugemüllt war.
    Das Problem habe ich dann so gelöst indem ich Windows neu installiert habe und dannach alle Treiber für sämtlich Hardware aktualisiert habe.
    Wenn du Hilfe beim Windows neu installieren brauchst, schau dir das mal an Windows neu installieren

  • Rechenoperation nur bei gleichem Kanalnamen in Gruppe 1 und Gruppe 2

    Hallo zusammen!
    Ich habe zwei Kanalgruppen, in der nach Möglichkeit die gleichen Kanäle vorhanden sind, also Anzahl + Namen gleich. Es kann nun aber vorkommen, dass in einer Kanalgruppe bei den Kanälen Rechtschreibfehler auftauchen, Bsp. Name Kanal in Gruppe1 = "t_Aussen" und Name Kanal in Gruppe 2 = "t_Ausen".
    Ich möchte nun eine Rechenoperation solange ausführen, solange die Namen der Kanäle in den Gruppen identisch sind, also in der Form:
    for i=1 to xxx 
       if Name.Kanal(i).Gruppe(1) = Name.Kanal(i).Gruppe(2) then
       else
         msgbox "Name.Kanal(i).Gruppe(1) <> Name.Kanal(i).Gruppe(2)"
       end if
    next
    Es wäre auch sinnvoll, erst zu überprüfen, ob es den Namen des Kanals(i) in Gruppe 1 überhaupt in Gruppe 2 gibt, wenn es ihn nicht gibt soll die Rechenoperation abgebrochen werden und die unterschiedlichen Kanalnamen sollen angezeigt werden.
    Vielen Dank für eure Hilfe!
    Sebastian
    Solved!
    Go to Solution.

    Hallo Sebastian,
    Hier ist, glaube ich, das VBScript das gesucht wird:
    Dim Groups, Group, Channel, ChanName, Msg
    ChanName = "t_Aussen"
    Set Groups = Data.Root.ChannelGroups
    IF Groups.Count > 0 THEN
      FOR Each Group In Groups
        IF NOT Group.Channels.Exists(ChanName) THEN
          MsgBox "Channel Not Found: " & Group.Name & "/" & ChanName
          Exit For ' Groups
        END IF ' Channel Found
        Set Channel = Group.Channels(ChanName)
        Msg = "Analyzing: " & Group.Name & "/" & ChanName
        Call MsgBoxDisp(Msg, "MB_NOBUTTON", "MsgTypeNote", 0, 0, 1)
    Call Pause(1) ' remove in actual code
        ' Channel Analysis
      NEXT ' Group
      Call MsgBoxCancel
    END IF
    Brad Turpin
    DIAdem Product Support Engineer
    National Instruments

Maybe you are looking for

  • Issue in seperating lines of ITAB and placing into SF secondary  windows

    Great abapers, My itab is having 6 lines item (for ex ) it may 'n' no of line items. In smartforms for 1 page max allowed secondary window is 2.so first 2 lines are paced in first page , next 2 lines are place in second page ,last 2 will be in 3 page

  • Photoshop CS6 does not detect display adapter after upgrading to Windows 8

    Hi, I just upgraded my 3 year old Dell XPS 16 which came with a AMD (ATI) Radeon HD 5730 (1GB) graphics card to Windows 8 (along with a new SSD hard drive), and reinstalled CS6, and now I get messages that the program is no longer detecting my dedica

  • Query on using RFC or proxy

    Hi, I  have a scenario which is from SAP to PI to Legacy. The legacy system is giving a wsdl file.And from SAP we have a standard BAPI available. I am thinking of going for a RFC-PI- SOAP scenario. But there are discussions going on to use Proxy. Ple

  • Cost Center planning Error.

    Dear All, I am getting problem wih Fund in doing Cost center planning (kp06). In client level there are 2 controlling areas one is 4000 and another is 6000. the compny code which assigned to controllinga area 6000 they activated fund. but the company

  • Difficulty with format commands

    I am writing a book in AppleWorks. Part way down a page I wish to change to two column format. I first Format>Insert "Section Break", then advance the cursor with right arrow to the other side of the break. I then Format>Section, select "New Line" an