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
-
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 -
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
ThomasdaveTW 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 -
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 -
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> -
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ß FlensHallo!
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 KBEs 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. -
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 KBHallo 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 AMHallo 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üßeHallo 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
-
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