04-12-2019 03:34 AM
Hallo,
I have a channel (BLS) with 1 and 0 values representing ON/OFF of a given phenomenon.
I want to use the information contained in this channel to split other channels that have the same size, but first I need to fill the "0 gaps" that lasted less than 2 seconds.
I wrote the following code, but it is not working (it seems like Diadem enters an infinite loop or something similar), how can I solve the issue?
Index1 = Find("Ch(""[1]/BLS"")>0")
For i = Index1 To Data.Root.ChannelGroups([1]).Channels("BLS").Size
If Data.Root.ChannelGroups([1]).Channels("BLS").Values(i) = 0 Then
Index1 = BrIndex1 + 1
Else
Index2 = Find("Ch(""[1]/BLS"")>0",Index1)
Time1 = Data.Root.ChannelGroups([1]).Channels(TimeChn).Values(Index1)
Time2 = Data.Root.ChannelGroups([1]).Channels(TimeChn).Values(Index2)
if (Time2-Time1) <= 2 Then
Data.Root.ChannelGroups(oGrName).Channels("BLS").Values(i) = 1
End If
End If
Next
Is there a way to do the same operation in a smarter way, not involving the usage of a For cycle?
Solved! Go to Solution.
04-15-2019 04:59 PM
try Loggin i in the end of each loop. I bet Index1 = BrIndex1 + 1is messing it up. Where did BrIndex come from and what is it for?
04-16-2019 04:16 AM
Hi, actually I managed it with an other loop, see my code below.
BrIndex1 = Find("Ch(""[1]/BLS"")=0",Find("Ch(""[1]/BLS"")>0"))
BrIndex2 = Find("Ch(""[1]/BLS"")>0",BrIndex1)
Do While (BrIndex1 < Data.Root.ChannelGroups(oGrName).Channels("BLS").Size) And (BrIndex2 < Data.Root.ChannelGroups(oGrName).Channels("BLS").Size) And IsNull(BrIndex1)=FALSE And IsNull(BrIndex2)=FALSE And BrIndex1<>0 And BrIndex2<>0
Time1 = Data.Root.ChannelGroups(oGrName).Channels(TimeChn).Values(BrIndex1)
Time2 = Data.Root.ChannelGroups(oGrName).Channels(TimeChn).Values(BrIndex2)
if (Time2-Time1) <= TimeTolerance Then
for i = BrIndex1 To BrIndex2
Data.Root.ChannelGroups(oGrName).Channels("BLS").Values(i) = 1
Next
End If
BrIndex1 = Find("Ch(""[1]/BLS"")=0",BrIndex2)
BrIndex2 = Find("Ch(""[1]/BLS"")>0",BrIndex1)
Loop