python实验总结心得体会_Python,Pyvisa操作Agilent 86140x系列OSA
1,背景
本人做光學的。。。最近研究實驗偏向通信
做WDM實驗的時候發現能用實驗室TCP/IP通信的光譜儀(OSA)都被用了,翻翻找找只在角落找到一臺Agilent 68146B的OSA。。。就是下圖這個貨,
想要撈取光譜數據,你看到那個軟盤接口了嗎。。。已經2020年奔小康了,我去哪找個軟盤去讀取呢,就算有軟盤我筆記本也沒有軟盤口了。。
軟盤測試取光譜數據肯定是不可能了,而且在測試方案設計上,需要不停的掃描WDM auto sacn模式去取得信噪比OSNR和功率power,然后利用判據去反饋調節光網絡其他參數。
好消息是OSA后面有個GPIB的接口,后面經過調研(百度+bing),發現GPIB還是能用的,然鵝我的電腦也沒有GPIB的口子,找了半天找到一根滿是蜘蛛網的GPIB-USB的轉接線。望著這一堆破爛。。我
后面在百度上看到有個類似的文章,也是用python控制儀器,關鍵的庫為pyvisa。由于我研一用過python去爬過小姐姐,那段時間身體消瘦的特別快咳咳,也用xlwings對光譜數據進行過處理,因此對這個比較感興趣。
這里實名感謝一下 @Luyao Zou 這個大哥的文章,特別致謝!給了我很大的啟發,也讓我意識到用python做成這件事情的可能性~,愛你!原文我摘取一部分,用python你能干什么事情
我的科研工作大量依賴自己開發的 Python 程序和腳本。比如,用 Python 和 PyVisa 控制實驗儀器,用 numpy 和 scipy 擬合光譜看到成功先例之后,后面我自己理解了一下儀器remote control的邏輯,其實就是分三部分。
有了上述三步,后面的事情就簡單了(并不)
首先是裝驅動天坑。。。,我用來實驗的筆記本win7 32的,大概花了兩天才從那根GPIB-USB的adlink官網的角落下載到了32位的驅動,然后找了半天NI-VISA,找到了一個非常古老的NI-VISA504離線版本裝上了。。。通信協議以及驅動部分花了大概三天就完成了
第二步是裝pyvisa,這個相比之下是最easy的了,直接pip install pyvisa就搞定了。安裝失敗一般是pypi的網速問題,請用國內阿里的源或者清華的源即可。
第三步去bing上面找了一圈PDF,都是OSA的編程指令,花了三小時調試好了老爺機,下面直接上光譜儀的WDM_AutoScan部分的代碼,定義了一個類方便在實驗的中控py文件調用
# -*- coding: utf-8 -*- #!/usr/bin/pythonimport pyvisa import xlwings as xw import os import matplotlib import visa import time import paramiko#author_jzk 2020-7-22 #class OSA,儀器的指令不大好記,獲取WDM模式下的波長,功率以及OSNR值class OSA():"""docstring for OSA"""'''初始化OSA,連接'''def __init__(self):osa_GPIB='GPIB0::25::INSTR' #GPIB口self.rm=visa.ResourceManager() #open visaself.instrument=self.rm.open_resource(osa_GPIB) #connect agilent osaprint('----------------> the OSA is connected successful n')def close(self):self.instrument.close()print('the osa connect is closed......')def wdm_AutoScan(self):'''進入WDM掃描光譜模式'''self.instrument.write('inst:sel "WDM_Autoscan"') print('----------------> now the OSA is using sub-system ----WDM Spectrum n')print('wait the sub-systems end for 20s ')time.sleep(20)def wdm_sweep(self):'''WDm auto test operation'''self.instrument.write('INITiate:IMMediate')print('----------------> auto-scan is running now, wait for 15s n')time.sleep(14)def wdm_wav_get(self):'''get channel wavelength'''wve=[]try:print('----------------> wavelength is calculating---')str_wve=self.instrument.query('CALCulate:DATA:CWAVelengths?').split(',')for i in str_wve:wve.append(float(i))time.sleep(1)return wveexcept Exception as e:print('------->None data is calculated, please check the optical input')raise edef wdm_OSNR_get(self):'''get osnr '''osnr=[]try:print('----------------> OSNR is calculating---')str_osnr=self.instrument.query('CALCulate:DATA:CSNR?').split(',')for i in str_osnr:osnr.append(float(i))time.sleep(1)return osnrexcept Exception as e:print('------->None data is calculated, please check the optical input')raise e# 獲取對應信號的功率def wdm_Power_get(self):power = []try:print('----------------> the power is calculated')str_power = self.instrument.query('CALCulate:DATA:CPOWers?').split(',')for i in str_power:power.append(float(i))time.sleep(0.5)return powerexcept Exception as e:print('------> None data is get, please check the optical input...')raise e#single sweep一遍'''def sweep(self):self.instrument.write('init:imm')print('take a sweep for osa,please wait for 2 seconds until it is ended')time.sleep(0.5)總結,python很多人都是從很多看起來就很熱的小姐姐爬蟲程序開始,但是后面可以做什么還是看個人的想象力和使用工具方式,無論是前陣子用xlwings來畫圖或者干別的都行
大佬們 @Luyao Zou 那篇文章都是2017年的了,也是我爬很熱的小姐姐最多的那陣子,三年過去了終于開始使用工具走上正路了,俺導師看到這個估計也會替我高興吧hhh,后續的GUI還沒需求,有需求準備再挖個坑寫一篇hhh
總結
以上是生活随笔為你收集整理的python实验总结心得体会_Python,Pyvisa操作Agilent 86140x系列OSA的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 表与表之间的条件比对_值得收
- 下一篇: python判断字符串里的字符_pyth