[問題] PyQT GUI Line CCD抓data問題

作者: captdavince (小D)   2013-12-21 15:00:45
各位好
此文文長含程式碼
小弟我是新手,因為目前實驗上的需求急於生出一個可以收data做數據處理的GUI
所以就使用PyQT跟matplotlib, numpy, scipy來做
我自認自己邏輯、coding什麼都不好,需要的功能多少借網路上的一些範例兜起來了
描述一下我的實驗系統
我是用Mightex 的線性CCD module TCN1034-U,原廠有附SDK(dll)..但是我不知道要怎
麼使用DLL..但是它另外也可以有USB protocol去做data的傳輸
因為看到Github上國外有人已經把它的USB protocol寫好一個script來call..
所以這個方式我權衡一下是對我比較簡單的..只是目前看起來只能在linux上才順利的
抓到這個CCD
http://www.mightexsystems.com/images/File/ccd_line_camera_software_package.zip
這個是原廠的程式
包含一個稍完整的控制程式,但是不夠我的實驗使用
另外SDK中有各式的dll與examples和SDK的說明文件
https://github.com/bgamari/mightex-line-ccd
這個是國外的先進在Github上面寫好的script,camera.py
我先描述一下我的問題.
是利用一個read_frame()去讀取CCD的data(會是3648的1D array)
後面再做後續的
目前的read_frame()是如下
def read_frame(self):
try: frame = self.ccd.get_frame() #self.ccd是前面initialize過的camera.py
except: return None
if frame is not None:
return frame.image - np.mean(frame.dark)
else:
return None
這個部份的live數據的讀取會是 (我是用一個100ms的counter,到時後就call下面)
def updateposition(self):
self.ccd.set_exposure_time(self.ui.ExpSlide.value()) #把快門設成使用者所要的
self.data = self.read_frame() #讀取data
x = np.arange(len(self.data)) #取得data長度
self.currentview.plot(x, self.data) #用matplotlib widget plot出來
self.currentcanvas.draw()
不過後面還有單次讀取data的時候用的也是類似的方式
設快門後,用read_frame()讀data
我利用print(frame)的方式來看讀取得順不順利
目前看起來是使用者的快門設超過300ms之後就可能會拿到None..
read_frame()不會等到取得ccd的data就會先feed None
在後面需要單次讀取data的時候就會造成
File "project.py", line 206, in acqpos
a = np.arange(len(self.posframe))
TypeError: object of type 'NoneType' has no len()
的錯誤
這個部份是我真的一點頭緒都沒有不知道該怎麼解決的部份
希望各位先進可以幫幫我是不是有簡單的fix,像是改寫read_frame()裡try的判斷
式內容,還是難道要連原本國外的那個script裡都需要改寫呢?
是不是應該要寫得讓他會等CCD的方式,因為CCD的exposure是0.1ms~6500ms
我會希望可以取得6500ms的data
因為後面的function有部份是希望依使用者設定取得x次特定快門時間的data把它加起來
(這個部份我還有點問題就是用
for i in range(1, step+1):
self.ccd.set_exposure_time(self.ui.ExpSpin.value())
self.postframe = self.read_frame()
self.accum += self.posframe
其實在這個step>100的時候很容易當掉..改用while loop會比較不容易當掉嗎?
感謝各位看完這麼長的內容
希望我有把我的問題描述清楚
謝謝各位大德
作者: doghib (lun)   2013-02-21 21:14:00
用 swig 在封裝過他提供的SDK如何?
作者: captdavince (小D)   2013-02-21 22:28:00
我有研究過一下swig跟boost但是感覺很困難
作者: doghib (lun)   2013-02-22 00:49:00
要用DLL的話 搜尋 Python ctypes dll 有不少範例

Links booklink

Contact Us: admin [ a t ] ucptt.com