Our full technical support staff does not monitor this forum. If you need assistance from a member of our staff, please submit your question from the Ask a Question page.


Log in or register to post/reply in the forum.

Periodic NAN records for high frequency measurements


geoalxx Nov 9, 2025 03:52 PM

Hi all,

we have a problem when logging high frequency data with our Campbell loggers. We first realized the issue on out CR3000 logger. However, even after upgrading to CR1000Xe, the issue persists.

Setup (for the CR1000Xe):

- 3x METEK uSonic-3 Class A MP 

- connected using RS422 (ComC1, ComC3, ComC5)

- uSonics transmitting with 20Hz

- uSonics also logging data on internal storage (for comparison purposes)

- we use TableFile code 64 - TOB3 

Problem

Around every 30min, the logger isn't able to capture the incoming data. There are ~30 lines/timestamps with NAN values (see screenshot 1). When comparing the data from the logger with the data on the METEK storage, there are two cases:

1. line simply missing (most cases)

2. temporary time shift 

see screenshot 2 for example and data mapping

Some things we realized:

- the problem occurs periodically, between every 30-50min

- happens for each sensor but not at the same time

- the sensor is not the problem since data is recorded without gaps and we also streamed the raw data via USB on the laptop and didn't find any gaps

We're wondering whether the logger is simply unable to handle the amount of data, or if the issue can be resolved through code or logger settings. Any recommendations or help would be much appreciated!

Thanks a lot in advance, Alex


FedeJack Nov 10, 2025 05:39 PM

Can you post your code? I have a similar problem here: https://www.campbellsci.com/forum?l=thread&forum=1&tid=17663


geoalxx Nov 11, 2025 07:58 AM

sure, please find my code below. Compared to the other thread, I'm only receiving data from the uSonic:

'CR1000X Series Datalogger
'date: November 2025
'program author: Alexander Georgi

Public RS422_Data_C1 As String * 160
Public metek_split_C1(21) As String * 20
Public RS422_Data_C3 As String * 160
Public metek_split_C3(21) As String * 20
Public RS422_Data_C5 As String * 160
Public metek_split_C5(21) As String * 20

Public NBytesReturned_C1
Public NBytesReturned_C3
Public NBytesReturned_C5

' 1m Sonic at ComC1
Alias metek_split_C1(1) = full_1m 
Alias metek_split_C1(2) = U_1m : Units U_1m = m/s
Alias metek_split_C1(3) = V_1m : Units V_1m = m/s
Alias metek_split_C1(4) = W_1m : Units W_1m = m/s
Alias metek_split_C1(5) = Ts_1m : Units Ts_1m = degC
Alias metek_split_C1(6) = Wspd_1m : Units Wspd_1m = m/s
Alias metek_split_C1(7) = Wdir_1m : Units Wdir_1m = deg
Alias metek_split_C1(8) = Wspd_scalar_1m : Units Wspd_scalar_1m = m/s
Alias metek_split_C1(9) = Wdir_scalar_1m : Units Wdir_scalar_1m = deg
Alias metek_split_C1(10) = roll_1m : Units roll_1m = deg
Alias metek_split_C1(11) = pitch_1m : Units pitch_1m = deg
Alias metek_split_C1(12) = azimuth_1m : Units azimuth_1m = deg
Alias metek_split_C1(13) = errorcode_1_1m
Alias metek_split_C1(14) = errorcode_2_1m
Alias metek_split_C1(15) = errorcode_3_1m
Alias metek_split_C1(16) = errorcode_4_1m
Alias metek_split_C1(17) = errorcode_5_1m
Alias metek_split_C1(18) = errorcode_6_1m
Alias metek_split_C1(19) = errorcode_7_1m
Alias metek_split_C1(20) = errorcode_8_1m
Alias metek_split_C1(21) = errorcode_9_1m

Public failureRate_1m  
Units failureRate_1m = pct

' 3m Sonic at ComC3
Alias metek_split_C3(1) = full_3m 
Alias metek_split_C3(2) = U_3m : Units U_3m = m/s
Alias metek_split_C3(3) = V_3m : Units V_3m = m/s
Alias metek_split_C3(4) = W_3m : Units W_3m = m/s
Alias metek_split_C3(5) = Ts_3m : Units Ts_3m = degC
Alias metek_split_C3(6) = Wspd_3m : Units Wspd_3m = m/s
Alias metek_split_C3(7) = Wdir_3m : Units Wdir_3m = deg
Alias metek_split_C3(8) = Wspd_scalar_3m : Units Wspd_scalar_3m = m/s
Alias metek_split_C3(9) = Wdir_scalar_3m : Units Wdir_scalar_3m = deg
Alias metek_split_C3(10) = roll_3m : Units roll_3m = deg
Alias metek_split_C3(11) = pitch_3m : Units pitch_3m = deg
Alias metek_split_C3(12) = azimuth_3m : Units azimuth_3m = deg
Alias metek_split_C3(13) = errorcode_1_3m
Alias metek_split_C3(14) = errorcode_2_3m
Alias metek_split_C3(15) = errorcode_3_3m
Alias metek_split_C3(16) = errorcode_4_3m
Alias metek_split_C3(17) = errorcode_5_3m
Alias metek_split_C3(18) = errorcode_6_3m
Alias metek_split_C3(19) = errorcode_7_3m
Alias metek_split_C3(20) = errorcode_8_3m
Alias metek_split_C3(21) = errorcode_9_3m

Public failureRate_3m  
Units failureRate_3m = pct

' 5m Sonic at ComC5
Alias metek_split_C5(1) = full_5m 
Alias metek_split_C5(2) = U_5m : Units U_5m = m/s
Alias metek_split_C5(3) = V_5m : Units V_5m = m/s
Alias metek_split_C5(4) = W_5m : Units W_5m = m/s
Alias metek_split_C5(5) = Ts_5m : Units Ts_5m = degC
Alias metek_split_C5(6) = Wspd_5m : Units Wspd_5m = m/s
Alias metek_split_C5(7) = Wdir_5m : Units Wdir_5m = deg
Alias metek_split_C5(8) = Wspd_scalar_5m : Units Wspd_scalar_5m = m/s
Alias metek_split_C5(9) = Wdir_scalar_5m : Units Wdir_scalar_5m = deg
Alias metek_split_C5(10) = roll_5m : Units roll_5m = deg
Alias metek_split_C5(11) = pitch_5m : Units pitch_5m = deg
Alias metek_split_C5(12) = azimuth_5m : Units azimuth_5m = deg
Alias metek_split_C5(13) = errorcode_1_5m
Alias metek_split_C5(14) = errorcode_2_5m
Alias metek_split_C5(15) = errorcode_3_5m
Alias metek_split_C5(16) = errorcode_4_5m
Alias metek_split_C5(17) = errorcode_5_5m
Alias metek_split_C5(18) = errorcode_6_5m
Alias metek_split_C5(19) = errorcode_7_5m
Alias metek_split_C5(20) = errorcode_8_5m
Alias metek_split_C5(21) = errorcode_9_5m

Public failureRate_5m  
Units failureRate_5m = pct


'Table for 1m sonic
DataTable(Metek_20Hz_1m, True, -1) '-1
  Sample (1,U_1m,IEEE4)
  Sample (1,V_1m,IEEE4)
  Sample (1,W_1m,IEEE4)
  Sample (1,Ts_1m,IEEE4)
  Sample (1,Wspd_1m,FP2)
  Sample (1,Wdir_1m,FP2)
  Sample (1,roll_1m,FP2)
  Sample (1,pitch_1m,FP2)
  Sample (1,failureRate_1m,UINT2)

  TableFile ("CRD:"&Status.SerialNumber(1,1)&"_Metek_20Hz_1m_",64,-1,0, 15,Min,0,0) )
EndTable

'Table for 3m sonic
DataTable(Metek_20Hz_3m, True, -1) '-1
  Sample (1,U_3m,IEEE4)
  Sample (1,V_3m,IEEE4)
  Sample (1,W_3m,IEEE4)
  Sample (1,Ts_3m,IEEE4)
  Sample (1,Wspd_3m,FP2)
  Sample (1,Wdir_3m,FP2)
  Sample (1,roll_3m,FP2)
  Sample (1,pitch_3m,FP2)
  Sample (1,failureRate_3m,UINT2)

  TableFile ("CRD:"&Status.SerialNumber(1,1)&"_Metek_20Hz_3m_",64,-1,0,15,Min,0,0) )
EndTable

'Table for 5m sonic
DataTable(Metek_20Hz_5m, True, -1) '-1
  Sample (1,U_5m,IEEE4)
  Sample (1,V_5m,IEEE4)
  Sample (1,W_5m,IEEE4)
  Sample (1,Ts_5m,IEEE4)
  Sample (1,Wspd_5m,FP2)
  Sample (1,Wdir_5m,FP2)
  Sample (1,roll_5m,FP2)
  Sample (1,pitch_5m,FP2)
  Sample (1,failureRate_5m,UINT2)

  TableFile ("CRD:"&Status.SerialNumber(1,1)&"_Metek_20Hz_5m_",64,-1,0,15,Min,0,0) )
EndTable

'Main Program
BeginProg
  
  SerialOpen(ComC1,57600,0,0,1000)
  SerialOpen(ComC3,57600,0,0,1000)
  SerialOpen(ComC5,57600,0,0,1000)
  
	Scan (50,mSec,0,0)
	  
    SerialInRecord(ComC1, RS422_Data_C1, &H0A,0,&H0D, NBytesReturned_C1, 01)
    SerialInRecord(ComC3, RS422_Data_C3, &H0A,0,&H0D, NBytesReturned_C3, 01)
    SerialInRecord(ComC5, RS422_Data_C5, &H0A,0,&H0D, NBytesReturned_C5, 01)
    
    SplitStr(metek_split_C1() ,RS422_Data_C1, ";", 21, 0)
    SplitStr(metek_split_C3() ,RS422_Data_C3, ";", 21, 0)
    SplitStr(metek_split_C5() ,RS422_Data_C5, ";", 21, 0)
    
    full_1m = metek_split_C1(1)
    failureRate_1m = Mid(full_1m,12,3)
    
    full_3m = metek_split_C3(1)
    failureRate_3m = Mid(full_3m,12,3)
    
    full_5m = metek_split_C5(1)
    failureRate_5m = Mid(full_5m,12,3)
    
    CallTable(Metek_20Hz_1m)
    CallTable(Metek_20Hz_3m)
    CallTable(Metek_20Hz_5m)

	NextScan
EndProg

 

Log in or register to post/reply in the forum.