05-30-2018 05:19 AM
Hi everyone,
I have trouble using the provided script ChnConcatenation_Libr.vbs for appending time channels to one another. It has been working without any problems for a while now, but an error is occuring with the attached TDMS-files.
I have no idea what to make of it and would be happy, if someone could help me.
Best regards,
Jakob
Solved! Go to Solution.
05-30-2018 08:37 AM
I have a very old script that worked for those 2 files I think? I loaded test1 and then test2:
Option Explicit 'Forces the explicit declaration of all the variables in a script. DIM SCRIPT_NAME SCRIPT_NAME = "concatenator: " ' GLOBALS NEEDED: '- numberOfGroups: how many groups are in the original file loaded '- timeChannelName: the name of the channel to look for when offsetting time '- extraTimeChannels: TRUE/FALSE to generate extra time channels? Dim numberOfGroups: numberOfGroups = 1 Dim timeChannelName: timeChannelName = "TimeStamp" Dim extraTimeChannels: extraTimeChannels = FALSE Call LogFileWrite(SCRIPT_NAME & "Entered execution") ' Check if a valid number of groups is loaded If GroupCount >= numberOfGroups * 2 Then If (GroupCount Mod numberOfGroups = 0) Then ' First generate extra time channels if required If extraTimeChannels Then Call LogFileWrite(SCRIPT_NAME & "Generating extra time channels") Dim sec, fq, hours, seconds, chnlSize, i For i = 1 To GroupCount Step 1 ' for each channel group Data.Root.ChannelGroups(i).Channels("Timestamps").Properties("displaytype").Value = "Numeric" ' Calculate frequencies sec = Str(Data.Root.ChannelGroups(i).Channels("Timestamps").Maximum) fq = Data.Root.ChannelGroups(i).Channels("Timestamps").Size / sec hours = Data.Root.ChannelGroups(i).Channels("Timestamps").Size / fq / 3600 ' Generate numeric channels representing time Data.Root.ChannelGroups(i).Activate() chnlSize = Data.Root.ActiveChannelGroup.Channels(2).Size Call ChnLinGenImp("LinearGenerated",chnlSize,0, hours / Data.Root.ChannelGroups(i).Channels("Timestamps").Maximum,"") Data.Root.ChannelGroups(i).Channels("LinearGenerated").Name = "Hours" Next Call LogFileWrite(SCRIPT_NAME & "Done generating extra time channels") End If ' Concatenate! Dim groupToConcatenate, j, counter counter = 0 groupToConcatenate = 1 Do While GroupCount > numberOfGroups If groupToConcatenate > numberOfGroups Then groupToConcatenate = 1 End If For j = 1 To Data.Root.ChannelGroups(numberOfGroups + 1).Channels.Count Step 1 ' Concatenate all channels Data.Root.ChannelGroups(numberOfGroups + 1).Activate() If Data.Root.ChannelGroups(numberOfGroups + 1).Channels(j).Name = timeChannelName Then ' Offset and concatenate for time channel If Data.Root.ChannelGroups(numberOfGroups + 1).Channels(j).Values(1) = 0 Then Data.Root.ChannelGroups(numberOfGroups + 1).Channels(j).Values(1) = 0.001 End If Call ChnOffset("[" & numberOfGroups + 1 & "]/" & timeChannelName & "", "/" & timeChannelName & "", Data.Root.ChannelGroups(groupToConcatenate).Channels(timeChannelName).Maximum, "free offset") Call ChnConcat(Data.Root.ChannelGroups(numberOfGroups + 1).Channels(j), Data.Root.ChannelGroups(groupToConcatenate).Channels(j)) ElseIf Data.Root.ChannelGroups(numberOfGroups + 1).Channels(j).Name = "Hours" Then Call ChnValExpand(Data.Root.ChannelGroups(numberOfGroups + 1).Channels("Hours")) Call ChnOffset("[" & (numberOfGroups + 1) & "]/Hours","/Hours",Data.Root.ChannelGroups(groupToConcatenate).Channels("Hours").Maximum,"free offset") Else ' Just concatenate Call ChnConcat(Data.Root.ChannelGroups(numberOfGroups + 1).Channels(j), Data.Root.ChannelGroups(groupToConcatenate).Channels(j)) End If Next ' Clear the channel group Call Data.Root.ChannelGroups.Remove(numberOfGroups + 1) groupToConcatenate = groupToConcatenate + 1 counter = counter + 1 ' If counter Mod (numberOfGroups * 100) = 0 Then 'OPTIONAL PRINTOUT Call LogFileWrite(SCRIPT_NAME & "concatenated " & counter + numberOfGroups & " channel groups, that is " & (counter/numberOfGroups) + 1 & " files") ' End If Loop Call LogFileWrite(SCRIPT_NAME & "Concatenated " & counter & " channel groups, or " & counter / numberOfGroups + 1 & " files (" & numberOfGroups & " channel groups per file)") Else Call LogFileWrite(SCRIPT_NAME & "Can't start execution with group count not being a multiple of " & numberOfGroups) End If Else Call LogFileWrite(SCRIPT_NAME & "Can't start execution with only " & GroupCount & " groups loaded...") End If Call LogFileWrite(SCRIPT_NAME & "Exited execution")
You will need to define the 3 variables at the top named globals but I did it so if all the files you load are in this format you should be ok..
- Attached are the resulting tdms and the graph
05-30-2018 08:37 AM - edited 05-30-2018 08:45 AM
.. You can load as many groups as you wand in their chronological order (oldest first loaded) and it will concatenate all into one group.
06-01-2018 02:46 AM - edited 06-01-2018 02:47 AM
Thanks for your answer.
Unfortunately the resulting file test12.tdms has an incorrect timestamp. That is why your script won't help me much. Do you have another idea?
Best regards
Jakob
06-01-2018 08:50 AM
It is probably because I add offset to each time channel concatenated so it is monotonous and continuous. Maybe try commenting out the ChnOffset() functions ??