前提・実現したいこと
ファンクションジェネレーターをPythonを用いて制御させるシステムを作成しています。
Excelの表から周波数と振幅の値を抜き出して、
その値でファンクションジェネレーターの各コマンドから制御しようと思っています。
下記表のNo1なら、周波数と振幅を10に設定する。
プログラミング苦手なうえにPython初めてでベースのものを参考に自分で書き換えていますが、Excelから値を抜き出してくる部分で手間取っています。
Excelの表から列を読み込むことはできてると思いますが、そこからがわからなくなっています。
現在考えているのは、No1までは手動でファンクションジェネレーターの設定をし、
Pythonを実行させたらNo2の設定にする。
またPythonを実行させたらNo3の設定にする。
というようなプログラムを作成したいです。
ファンクションジェネレーターのコマンドについては下記のサイト等を参考に作成しています。
https://teledynelecroy.com/japan/pdf/support/t3awg3kseries-afg-pm-jp.pdf
ファンクションジェネレーターの動作については、中心周波数と振幅のみの変更ができればとりあえずはいいと思っています。
Excelの表は下記のようになっています。
No | 周波数 | 振幅 |
---|---|---|
1 | 10 | 10 |
2 | 20 | 20 |
3 | 30 | 30 |
・ | ||
・ | ||
・ |
該当のソースコード
Python
1#(FG_test1.py) 2 3import os 4import subprocess 5import re 6import time 7import numpy as np 8import openpyxl 9#import pymsteams 10from FUNCTIONGENERATOR import FUNCTIONGENERATOR 11 12#--------------------------------------------- 13# 14# 機能ON/OFF 15# 16#--------------------------------------------- 17GPIB_DEVICE_FUNCTIONGENERATOR_ON = True 18 19#--------------------------------------------- 20# 21# 初期設定 22# 23#--------------------------------------------- 24## 評価項目Excelの絶対パスを"path(str型)"に記入 25path = './FG_test.xlsx' 26 27## 評価項目Excelのシート名を"sheet_name(str型)"に記入 28sheet_name = 'test' 29 30## 読み込み始める行番号を指定。最初から処理する場合は5行目を指定すること。 31start_row = 2 32 33## FUNCTIONGENERATORのインスタンス"FG"を生成 34if GPIB_DEVICE_FUNCTIONGENERATOR_ON : 35 FG = FG_test2() 36 37#--------------------------------------------- 38# シートデータ"sheet"、最大行"sheet.max_row"、 39# 最大列"sheet.max_column"を取得する 40#--------------------------------------------- 41def OpenExcel(path): 42 wb = openpyxl.load_workbook(path, data_only=True) 43 sheet = wb[sheet_name] 44 return sheet,sheet.max_row,sheet.max_column 45 46#--------------------------------------------- 47# Excelシートデータから取得波形設定を読み込み 48# No、中心周波数(freq)、振幅(ampl)をExcelから取得する 49#--------------------------------------------- 50def ReadWaveformSettings(sheet, i): 51 No = int(sheet.cell(row=i, column=1).value) 52 freq = int(sheet.cell(row=i, column=2).value) 53 ampl = int(sheet.cell(row=i, column=3).value) 54 55 return freq, ampl 56 57#--------------------------------------------- 58# main関数 59# forループは評価項目Excelの最終行"max_row"まで実行される 60#--------------------------------------------- 61def main(): 62 ## 評価項目エクセルを開く 63 sheet, max_row, max_column = OpenExcel(path) 64 65 Range = np.arange(start_row, max_row+1) 66 67 68 ## No、中心周波数(freq)、振幅(ampl)をExcelから読み出す 69 No, freq, ampl = ReadWaveformSettings(sheet, i) 70 71 if GPIB_DEVICE_FUNCTIONGENERATOR_ON : 72 #現在の設定の照会 73 #FG.inquiry() 74 #設定の初期化 75 #FG.Initialize() 76 ##周波数、振幅、位相、オフセットの設定 77 FG.setting( , ) 78 79 if GPIB_DEVICE_FUNCTIONGENERATOR_ON : 80 FG.close() 81 82 print("") 83 print("--- Finish All Processes ---") 84 85#--------------------------------------------- 86# 87# 実行部 88# 89#--------------------------------------------- 90if __name__ == "__main__" : 91 print("-----------------------------------------") 92 print("--- Check FUNCTIONGENERATOR ON ---") 93 print("-----------------------------------------") 94 95 main() 96 97 98 99#(FG_test2.py) 100# -*- coding: utf-8 -*- 101 102import sys 103import time 104import pyvisa as visa 105 106 107VISA_LIB_PATH = 'C:\\Windows\\System32\\visa32.dll' 108TIMEOUT = 10000 109 110class FUNCTIONGENERATOR : 111 112 def __init__( self ) : 113 self.RsrcMgr = visa.ResourceManager( VISA_LIB_PATH ) 114 self.Inst = None 115 116 def open( self, gpibId ) : 117 address = 'GPIB0::' + str( gpibId ) + '::INSTR' 118 self.Inst = self.RsrcMgr.open_resource( address ) 119 self.Inst.timeout = TIMEOUT 120 121 def close( self ) : 122 ret = self.Inst.close() 123 # print( ret ) 124 125 def scan( self ) : 126 self.RsrcMgr.list_resources() # 最初にScanしないとエラーが発生するので一回実行 127 128 129 def Initialize(self): 130 seif.Inst.write("*RST") #設定の初期化 131 132 def inquiry(self): #現在の設定の照会 133 seif.Inst.read("FREQUENCY?") #周波数の照会 134 seif.Inst.read("VOLTAGE:AMPLITUDE?") #振幅の照会 135 136 def setting( self , fre , amp ) : #周波数、振幅、位相、オフセットの設定 137 seif.Inst.write("FREQUENCY freE3") #周波数の設定 138 seif.Inst.write("VOLTAGE:AMPLITUDE amp") #振幅の設定 139 seif.Inst.write("VOLTAGE:OFFSET 0.00") #オフセットの設定 140 seif.Inst.write("PHASE:ADJUST 0DEG") #位相の設定 141 142 143def main() : 144 argv = sys.argv 145 argc = len( argv ) 146 147 FG = FUNCTIONGENERATOR() 148 149 if argc == 1 : 150 print( FG.scan() ) 151 sys.exit() 152 153 devId = argv[1] 154 argf = 155 arga = 156 157 FG.open( devId ) 158 159 #FG.inquiry() #現在の設定の照会 160 #FG.Initialize() #設定の初期化 161 FG.setting( argf , arga ) #周波数、振幅、位相、オフセットの設定 162 163 FG.close() 164 165if __name__ == "__main__" : 166 main() 167

回答1件
あなたの回答
tips
プレビュー