06-09-2015 01:03 PM
Hello
I am using DIAdem 2015 Beta
I am trying to find the maximum value of a channel between two data points.
I am able to do this by copying all the data between two data points on the channel and then using Cmax() but this method is inefficent and I was looking for something quicker.
Thanks
06-10-2015 04:24 PM
Hello,
You can find the Extreme values by going to the Analysis>>Statistics>>Descriptive Statistics, then selecting Maximum.
06-12-2015 08:41 AM
Hi smooth,
If you're looking for an interactive solution, try the shipping example "Dynamic Display of Statistical Characteristic Values in DIAdem VIEW", which you'll find in the "Viewing and Editing Data" section of the examples. If you click on the new "VIEW Statistics" icon it inserts, you can configure which statistics you want to track. Then select the band cursor and move it around in the graph-- the statistical values within your band cursor will automatically be calculated and displayed in a non-modal dialog. You can even click on a button in that dialog to send that range and its values to a new row of the channels the example puts in a new "StatisticResultGroup" group in the Data Portal.
If you want to determine the statistical values within a row range programmatically, you can do that with the StatBlockCalc() command.
RowStart = 20
RowStop = 40
Set Group = Data.Root.ChannelGroups(1)
Set StatChannels = Data.CreateElementList()
Call StatChannels.Add(Group.Channels("Speed"))
Call StatChannels.Add(Group.Channels("RPM"))
Call CalcRowStats(StatChannels, RowStart, RowStop)
Sub CalcRowStats(StatChannels, RowStart, RowStop)
Dim k, RowRange, Channel
FOR k = 1 TO 23
StatSel(k) = "No"
NEXT ' k
StatSel(6) = "Yes" ' Mean
StatResChn = FALSE
StatClipCopy = FALSE
StatClipValue = FALSE
RowRange = RowStart & "-" & RowStop
FOR Each Channel In StatChannels
Call StatBlockCalc("Channel", RowRange, Channel)
Channel.Properties.Add "SteadyState", StatArithMean
NEXT ' Channel
End Sub ' CalcRowStats()
Brad Turpin
DIAdem Product Support Engineer
National Instruments
11-10-2015 03:00 PM
Hello Brad,
Is there a way to retain the x-value of the max as well? I've tried using StatBlockCalc and ChnPeakFind. I get the x-value with ChnPeakFind, but I have to copy the range of data into a temporary channel, and call the function. I have a miniumum of six ranges on each channel, and I need to find the peak value for each range.
Thanks,
Chris
11-12-2015 10:12 AM
Hi Chris,
Sure, you can use the ChnFind() command with its second StartRow parameter to search for the StatMax value for that row range. Here's an example.
Set Group = Data.Root.ChannelGroups(1)
Set TimeChannel = Group.Channels("Time")
Set StatChannels = Data.CreateElementList()
Call StatChannels.Add(Group.Channels("Speed"))
Call StatChannels.Add(Group.Channels("RPM"))
Call StatChannels.Add(Group.Channels("Torque"))
Call CalcRowStats(TimeChannel, StatChannels, 24, 56)
Call CalcRowStats(TimeChannel, StatChannels, 64, 106)
Call CalcRowStats(TimeChannel, StatChannels, 110, 176)
Call CalcRowStats(TimeChannel, StatChannels, 180, 346)
Sub CalcRowStats(TimeChannel, StatChannels, RowStart, RowStop)
Dim k, RowRange, Channel
FOR k = 1 TO 23
StatSel(k) = "No"
NEXT ' k
StatSel(5) = "Yes" ' Max
StatResChn = FALSE
StatClipCopy = FALSE
StatClipValue = FALSE
RowRange = RowStart & "-" & RowStop
FOR Each Channel In StatChannels
Call StatBlockCalc("Channel", RowRange, Channel)
Call SaveRangeMaxProps(TimeChannel, Channel, RowStart, RowStop)
NEXT ' Channel
End Sub ' CalcRowStats()
Sub SaveRangeMaxProps(TimeChannel, Channel, RowStart, RowStop)
Dim r, rMax, Prop, RangeStart, RangeStop, RangeTime, RowTime
r = 1
IF Channel.Properties.Exists("RangeCount") THEN
rMax = Channel.Properties("RangeCount").Value
FOR r = 1 TO rMax
RangeStart = Channel.Properties("Range" & r & "_RowStart").Value
RangeStop = Channel.Properties("Range" & r & "_RowStop").Value
IF RangeStart = RowStart AND RangeStop = RowStop THEN Exit For ' r
NEXT ' r
END IF
T1 = Channel.GetReference(eRefTypeNameName)
RowTime = ChnFind("Ch(T1) = StatMax", RowStart)
RangeTime = TimeChannel.Values(RowTime)
Channel.Properties.Add "RangeCount", CLng(r)
Channel.Properties.Add "Range" & r & "_RowStart", RowStart
Channel.Properties.Add "Range" & r & "_RowStop", RowStop
Channel.Properties.Add "Range" & r & "_Max", StatMax
Channel.Properties.Add "Range" & r & "_Time", RangeTime
End Sub ' SaveRangeMaxProps()
Brad Turpin
DIAdem Product Support Engineer
National Instruments