QoTLib 
(DAQhandle.py - class DAQdataRequest)

- DAQ setting 및 데이터 요청 프로토콜 메세지를 생성하는 기능이 구현되어있고, 데이터 수신 후 Raw Data parsing 및 csv 저장 기능을 포함하고 있는 클래스이다.

def __init__(self, ip, port, channel, maxTime=None, highPassFilter=1, currentExcitation=2, freqSpan=3, FFTLine=4, windowType=1, overlap=3, timeData=2, FFTData=2, gain=None, offset=None, N=None, fGain=None, fb=None, fa=None, **kwargs)

-Parameters-

:param ip: DAQ IP
:param port: DAQ port
:param channel: DAQ channel, data type is List
:param maxTime: data save renew period(second) ## Default : 10*60(10min)
:param highPassFilter: 1 : OFF, 2 : ON, 3 : OFF + Detrend, 4 : ON + Detrend ## Default : 1(OFF)
:param currentExcitation: 1 : OFF, 2 : ON ## Default : 2(ON)
:param freqSpan: 1 : 128, 2 : 256, 3 : 512, 4 : 1024, 5 : 2048, 6 : 4096, 7 : 8192, 9 : 32768, 10 : 65536 ## Default : 3(512)
:param FFTLine: 1 : 128, 2 : 256, 3 : 512, 4 : 1024, 5 : 2048, 6 : 4096, 7 : 8192, 9 : 32768, 10 : 65536 ## Default : 4(1024)
:param windowType: 1 : Uniform, 2 : Hanning, 3 : Exponential, 4 : Flat-Top, 5 : Kaiser-Bessel ## Default : 5(Kaiser-Bessel)
:param overlap: 1: 0 %, 2: 25 %, 3: 50 %, 4: 75 %, 5: 90 % ## Default : 3(50%)
:param timeData: 1 : don't send, 2 : send ## Default : 2(send)
:param FFTData: 1 : don't send, 2 : send ## Default : 2(send)
## Calibration param
:param gain: ## Default : 1.00F. ex.) 1.00F → ±5.00V, 0.50F → ±2.50V
:param offset: ## Default: 0.00F. ex.) 0.10F → s(t) = ADC(t) + 0.10V, -0.30F → s(t) = ADC(t) - 0.30V
## Filter param
:param N: Section Number, dType is int
:param fGain: Filter Gain, dType is float list
:param fb: b values, dType is float list
:param fa: a values, dType is float list

:param kwargs: ## for param extension


-Function-

TIMEdata, FFTdata csv 파일이 저장 될 디렉토리를 생성

DAQ 장비와 TCP 소켓 연결

사용할 채널에 각각 setup 메세지와 calibration 메세지 및 start 메세지를 DAQ 장비로 송신한다. (필요에 따라 filter coeffcient 메세지도 DAQ 장비로 송신)

Raw Data를 저장할 각 변수들을 동적으로 생성


-Note-

filter coeffcient는 해당 라이브러리 내의 필터 함수들을 이용하여 산출 가능


-Example-

DAQctrl = dh.DAQDataRequest(ip='192.168.1.5', port=500, channel=[1, 3, 4], maxTime=30, FreqSpan=3)

def daqSetup(self, channel, **kwargs)

-Parameters-

:param channel: seleted channel


-Function-

send setup message to DAQ


-Note-

Use this function after DAQ TCP socket connection

channel parameter is not List type but 'int' type


-Example-

daqSetup(channel=3)

def daqCalibration(self, channel, **kwargs)

-Parameters-

:param channel: seleted channel


-Function-

send calibration message to DAQ


-Note-

channel parameter is not List type but 'int' type

Use this function after DAQ TCP socket connection 


-Example-

daqCalibration(channel=3)

def daqFilterCoefficient(self, channel)

-Parameters-

:param channel: seleted channel


-Function-

send 'use filter' message to DAQ


-Note-

channel parameter is not List type but 'int' type

Use this function after DAQ TCP socket connection 


-Example-

daqFilterCoefficient(channel=3)

def daqStart(self, channel, **kwargs)

-Parameters-

:param channel: seleted channel


-Function-

send start message to DAQ


-Note-

channel parameter is not List type but 'int' type

Use this function after DAQ TCP socket connection

※ 해당 channel parameter에 0 번 대입 시 연결된 모든 채널에 start message를 송신, 상기 클래스에서는 0을 대입하여 사용


-Example-

daqStart(channel=0)

def daqRTCReset(self)

-Parameters-

-


-Function-

send RTC reset message to DAQ


-Note-

Use this function after DAQ TCP socket connection


-Example-

daqRTCReset()

def daqReset(self)

-Parameters-

-


-Function-

send DAQ reset message to DAQ


-Note-

Use this function after DAQ TCP socket connection


-Example-

daqReset()

def daqStop(self)

-Parameters-

-


-Function-

send stop message to DAQ

DAQ는 해당 메세지 수신 후 DAQ는 데이터를 User에게 송신하지 않습니다.

 

-Note-

Use this function after DAQ TCP socket connection


-Example-

daqStop()

def daqDataRecv(self, tID, filterSpec, endTime=0)

-Parameters-

:param tID: Thread ID

:param filterSpec: DAQhandle 라이브러리의 함수를 이용한 filterSpec값(gain=None, offset=None, N=None, fGain=None, fb=None, fa=None에 대한 정보)을 대입(list)
=> spec.txt 파일에 데이터를 추가하기 위함
:param endtime: 얼마동안 데이터를 수신할 지 인터럽트 타임을 대입. 0이하는 무한루프, 이외에는 해당 sec만큼 동작


-Function-

DAQ 장비로부터 실시간으로 Raq Data를 수신하며 Time data 및 FFT data(FFT데이터 수신을 ON 했을 경우)를 csv 파일에 저장하고 해당 시점의 DAQ setting에 관한 정보를 text 파일로 저장


-Note-

해당 함수는 Thread를 이용하여 사용하는 것을 권장


-Example-

DAQctrl = DAQDataRequest(ip='192.168.1.5', port=500, channel=[1, 3, 4], maxTime=30, FreqSpan=3, FFTLine=4)

getData = Thread(target=DAQctrl.daqDataRecv, args=(1, 10))  # 10초 동안만 데이터 수신
getData.setDaemon(True)
getData.start()

def daqFinishProcess(self)

-Parameters-

-


-Function-

DAQ 장비로와의 소켓 연결을 정상 종료하는 매크로

stop_msg 함수, socket close, 열려있는 csv file을 close하는 기능을 수행


-Note-

-


-Example-

daqFinishProcess()

def daqSavedData(self, ch, amp=1, dB=0):

-Parameters-

:param ch: seleted channel

:param amp: amplify time data 

:param dB: FFT data multipled by log10, 0: do not multiple 1: apply log scale option to FFT data


-Function-

선택된 채널의 Time data, FFT data를 리턴

amp 값을 Time data에 곱하여 증폭시킬 수 있음(출력 데이터에만 적용되고 csv 파일에는 원형의 Raw Data가 저장됨)

dB가 1일 때 FFT data에 로그스케일(10log)을 취하여 증폭시킬 수 있음(출력 데이터에만 적용되고 csv 파일에는 원형의 Raw Data가 저장됨) 


-Return-

timex: Time data 수신을 ON 했을 경우 해당 값이 return됨

timey: Time data 수신을 ON 했을 경우 해당 값이 return됨

ffty: FFT data 수신을 ON 했을 경우 해당 값이 return됨 


-Note-

Time data 수신을 OFF 할 경우 FFT data 데이터 또한 수신할 수 없음


-Example-

timex, timey, ffty = daqSavedData(3, amp=1, dB=1)