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.

Thies 3D Sonic with CR6: every other record is NAN, polling not working


fluckste May 28, 2019 05:26 PM

Hello

I'm trying some simple stuff here. I want to write the Telegram output with 20Hz of a Thies 3d Sonic Anemometer to the CR6 logger. I've set up the ComC1 as RS485 Full Duplex, hooked it up accordingly. 

I've set up the Thies to stream data in a given telegram style with 20Hz, 38 bytes per scan, SerialOpen() with buffer size 100. The telegram is then parsed into the variables.

'Declare Variables and Units
Public BattV
Public PTemp_C
Public Vx
Public Vy
Public Vz
Public Tv
Public Status
Public CS
Public RawString As String * 50 
Public NBytesReturned

Units BattV=Volts
Units PTemp_C=Deg C
Units Vx=m/s
Units Vy=m/s
Units Vz=m/s
Units Tv=Deg C

'Define Data Table for 20Hz output data
DataTable(TwentyHz,True,-1)
	DataInterval(0,50,mSec,10)
	CardOut(1,-1)
    Sample(1,Vx,IEEE4)
    Sample(1,Vy,IEEE4)
    Sample(1,Vz,IEEE4)
    Sample(1,Tv,FP2)
    Sample(1,Status,FP2)
    Sample(1,CS,FP2)
    Sample(1,NBytesReturned, FP2)
EndTable

'Datatable for ten minutes data
DataTable(TenMin,True,-1)
	DataInterval(0,1,Min,10)
	CardOut(1,-1)
    Average(1,Vx,FP2,False)
    StdDev(1,Vx,FP2,False)
    Average(1,Vy,FP2,False) 
    StdDev(1,Vy,FP2,False)
    Average(1,Vz,FP2,False) 
    StdDev(1,Vz,FP2,False)
    Average(1,Tv,FP2,False)
    Average(1,BattV,FP2,False)
    Minimum(1,BattV,FP2,False,False)
	Maximum(1,PTemp_C,FP2,False,False)
EndTable


'Main Program
BeginProg
  SerialOpen(ComC1,9600,0,0,100)
	'Main Scan
	Scan(50,mSec,40,0)
		Battery(BattV)		       'Default CR6 Datalogger Battery Voltage measurement 'BattV'
		PanelTemp(PTemp_C,15000) 'Default CR6 Datalogger Wiring Panel Temperature measurement 'PTemp_C'
		
        SerialInRecord(ComC1,RawString,&h02,0,&h0D03,NBytesReturned,01)
    Vx=Mid(RawString,1,7)
    Vy=Mid(RawString,9,7)
    Vz=Mid(RawString,17,7)
    Tv=Mid(RawString,25,5)
    Status=Mid(RawString,31,2)
    CS=HexToDec(Mid(RawString,34,2))
    

	'Call Data Tables and Store Data
	CallTable TwentyHz
	CallTable TenMin
	NextScan
EndProg

 With that, the data is recorded, however, every 18-22th value is a column of NAN in each variable. The 10Min Table (currently set to 1min in the interval for testing purposes) is only full of NAN values. 

How would I go about to remove the NAN-values? I suppose the NAN records originate from a clock difference (Sensor is configured to output at 20Hz). Do I need to adjust buffer values or change the sensor output to slightly higher than 20Hz?

When I tried a workaround, to poll the sensor (without telegram streaming now on the sensor side), however, I don't get any telegram returned.

My Code:

 

(^ same as above)

'Main Program
BeginProg
  SerialOpen(ComC1,9600,0,0,100)
  
	'Main Scan
	Scan(50,mSec,40,0)
		Battery(BattV)		       'Default CR6 Datalogger Battery Voltage measurement 'BattV'
		PanelTemp(PTemp_C,15000)   'Default CR6 Datalogger Wiring Panel Temperature measurement 'PTemp_C'
		SerialOut(ComC1,"00TR00005",0,0,0)
		Delay(0,25,mSec)
		SerialInRecord(ComC1,RawString,&h02,0,&h0D03,NBytesReturned,01)
		Vx=Mid(RawString,1,7)
		Vy=Mid(RawString,9,7)
		Vz=Mid(RawString,17,7)
		Tv=Mid(RawString,25,5)
		Status=Mid(RawString,31,2)
		CS=HexToDec(Mid(RawString,34,2))
    

	'Call Data Tables and Store Data
	CallTable TwentyHz
	CallTable TenMin
	NextScan
EndProg

 

He Delay 25ms is there as the sensor itself has a Response Delay of 20ms programmed currently, so I figured upon receiving the instruction, it waits 20ms to output it, so the logger should wait 25ms for it.

I've also tried SerialOutBlock(ComC1,"00TR00005",9), but no luck.

Any help with my issue would be appreciated!
Kind regards

Stefan


JDavis May 28, 2019 07:16 PM

You can filter the NAN values out from your averages etc. The last parameter of the Average instruction in the disable parameter. You can put in an expression in place of False to not include the value when it is NAN.

Average(1,Vx,FP2,Vx=NAN)

Yes, the NAN values you are getting probably are because of clock differences. If you are fine with 10Hz data, you could just undersample. Running the datalogger on a 10Hz scan, with the sensor outputting at 20Hz, means there should always be a value available. If undersampling isn't an option, count up the number of NAN values discarded for diagnostic reasons.

You can refer to the Campbell Scientific manual for the Windsonic1 for an example program filtering NAN values.

https://www.campbellsci.com/windsonic1


fluckste May 29, 2019 08:03 AM

Hi! Thanks for your answer!

Thank you for the tip, that seemed to have to done the trick. Also for the 20Hz table Nan values, I found that my Sensor was not configured correctly. It was ocnfigured to Output at a period of 20ms which would be 50 Hz, not a frequency of 20Hz. Switching to an output interval of 50ms at the sensor gets rid of the problem. To be honest I don't really know why, because effectively the logger was undersampling. The Buffer was not large enough to hold 3 messages, which would occasionally be the case, but I only parse the first 38 bytes anyway, so I don't have an explanation for it.

Cheers

stefan


leoramos Nov 19, 2020 11:34 PM

Hi, I know its been a while since this question, but I was facing this problem with the thies 3d anomometer recently. I have to poll the telegram from the sensor since I have more than one sensor per logger, so the way it worked is to use the carriege return <CR> after the comand 00TR00005, like this:

SerialOut(ComC5,"00TR00005"&CHR(13),0,0,0)

After that the sensor started to give to my logger the data.


ma Apr 15, 2021 02:03 PM

I alos am trying to get a Thies 3d ultrasocnic to work and am having troubles. Would it be possible to share the setup commands used on the 3d sensor. I have been trying various options and am still not getting reliably aligned data upon polling.


Terri Jul 21, 2021 08:53 PM

For fluckste:

This  may be old and you don't need it any more, but I saw that the "TenMinute" table is set up wrong.
It is set as a 1 minute interval with 10 lapses.

It says: the following:

'Datatable for ten minutes data
DataTable(TenMin,True,-1)
	DataInterval(0,1,Min,10)

To be a 10 minutes table, it should say:

                      DataInterval(0,10,Min,-1)

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