01-30-2007 05:59 AM
01-30-2007 01:53 PM
Hi Frank,
Your best bet is to use the Formula Calculator to run all these digital transition comparisons efficiently in C code rather than trying to do so in VBScript. Try the below VBScript, which I got to work correctly with your data set, to see what I mean:
OPTION EXPLICIT
Dim i, DeltaThresh, TimeCh, DigChs, DeltaCh1, DeltaCh2, Length, NewTimeCh, NewDataCh
DeltaThresh = 10
TimeCh = "Zeitkanal DIO"
DigChs = Array("", "DO1", "DO2", "DI1", "DI2")
Call ChnCopy(TimeCh, "Delta")
DeltaCh1 = CNoXGet(GroupDefaultGet, GroupChnCount(GroupDefaultGet))
Call ChnCopy(TimeCh, "Delta")
DeltaCh2 = CNoXGet(GroupDefaultGet, GroupChnCount(GroupDefaultGet))
Length = ChnLength(TimeCh)
FOR i = 1 TO UBound(DigChs)
Call GroupCreate(DigChs(i) & " Events")
Call GroupDefaultSet(GroupCount)
Call ChnDeltaCalc(DigChs(i), DeltaCh1)
Call ChnAreaInsert0(DeltaCh1, 1, 1)
ChDX(1, DeltaCh1) = ChDX(2, DeltaCh1)
Call ChnDeltaCalc(DeltaCh1, DeltaCh2)
ChnLength(DeltaCh2) = Length
ChDX(Length, DeltaCh2) = ChDX(Length, DeltaCh2)
L1 = DeltaCh1
L2 = DeltaCh2
L3 = CNo(DigChs(i))
R1 = DeltaThresh
Call ChnCopy(TimeCh, "NewTime")
Call FormulaCalc("Ch('NewData'):= Ch(L3) + NoValue*((abs(Ch(L1))<R1) AND (abs(Ch(L2))<R1))")
NewTimeCh = CNoXGet(GroupCount, 1) : ChnName(NewTimeCh) = ChnName(TimeCh)
NewDataCh = CNoXGet(GroupCount, 2) : ChnName(NewDataCh) = ChnName(DigChs(i))
ChDX(1, NewDataCh) = ChD(1, DigChs(i))
ChD(Length, NewDataCh) = ChD(Length, DigChs(i))
Call ChnNoVHandle(NewTimeCh, NewDataCh, "Delete", "XY", 1, 0)
NEXT ' i
Call ChnDel(DeltaCh2)
Call ChnDel(DeltaCh1)
Regards,
Brad Turpin
DIAdem Product Support Engineer
National Instruments
01-31-2007 06:36 AM
01-31-2007 09:23 AM
Hi Frank,
Sorry, I missed the "DIAdem 8.1" reference that you had in the footer of your email. I had all kinds of functions in there that were added in DIadem 9.x or DIAdem 10.x. I believe I now have them all rooted out and that the following will run in DIAdem 8.1:
OPTION EXPLICIT
Dim i, DeltaThresh, TimeCh, DigChs, DeltaCh1, DeltaCh2, Length, NewTimeCh, NewDataCh
DeltaThresh = 10
TimeCh = "Zeitkanal DIO"
DigChs = Array("", "DO1", "DO2", "DI1", "DI2")
L4 = CNo(TimeCh)
Call FormulaCalc("Ch('Delta1'):= Ch(L4)")
DeltaCh1 = CNo("Delta1")
Call FormulaCalc("Ch('Delta2'):= Ch(L4)")
DeltaCh2 = CNo("Delta2")
Length = ChnLength(TimeCh)
FOR i = 1 TO UBound(DigChs)
Call ChnDeltaCalc(DigChs(i), DeltaCh1)
Call ChnAreaInsert0(DeltaCh1, 1, 1)
ChDX(1, DeltaCh1) = ChDX(2, DeltaCh1)
Call ChnDeltaCalc(DeltaCh1, DeltaCh2)
ChnLength(DeltaCh2) = Length
ChDX(Length, DeltaCh2) = ChDX(Length, DeltaCh2)
L1 = DeltaCh1
L2 = DeltaCh2
L3 = CNo(DigChs(i))
R1 = DeltaThresh
Call FormulaCalc("Ch('NewTime'):= Ch(L4)")
Call FormulaCalc("Ch('NewData'):= Ch(L3) + NoValue*((abs(Ch(L1))<R1) AND (abs(Ch(L2))<R1))")
NewTimeCh = CNo("NewTime") : ChnName(NewTimeCh) = ChnName(TimeCh) & " " & ChnName(DigChs(i)) & " Events"
NewDataCh = CNo("NewData") : ChnName(NewDataCh) = ChnName(DigChs(i)) & " Events"
ChDX(1, NewDataCh) = ChD(1, DigChs(i))
ChD(Length, NewDataCh) = ChD(Length, DigChs(i))
Call ChnNoVHandle(NewTimeCh, NewDataCh, "Delete", "XY", 1, 0)
NEXT ' i
Call ChnDel(DeltaCh2)
Call ChnDel(DeltaCh1)
Let me know if I missed one, I don't have DIAdem 8.1 here handy to test with,
Brad Turpin
DIAdem Product Support Engineer
National Instruments
02-21-2007 10:30 AM
Thanks Brad, that worked fine with V8.1!
I still don't know why my approach needs two to three calls till it works, but this solution seems to work faster anyway. 🙂
Thanks,
Frank