質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

PythonでExcelから値を抜き出したい

kitagawasho
kitagawasho

総合スコア28

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0評価

1クリップ

290閲覧

投稿2022/01/28 05:14

前提・実現したいこと

ファンクションジェネレーターを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周波数振幅
11010
22020
33030

該当のソースコード

Python

#(FG_test1.py) import os import subprocess import re import time import numpy as np import openpyxl #import pymsteams from FUNCTIONGENERATOR import FUNCTIONGENERATOR #--------------------------------------------- # # 機能ON/OFF # #--------------------------------------------- GPIB_DEVICE_FUNCTIONGENERATOR_ON = True #--------------------------------------------- # # 初期設定 # #--------------------------------------------- ## 評価項目Excelの絶対パスを"path(str型)"に記入 path = './FG_test.xlsx' ## 評価項目Excelのシート名を"sheet_name(str型)"に記入 sheet_name = 'test' ## 読み込み始める行番号を指定。最初から処理する場合は5行目を指定すること。 start_row = 2 ## FUNCTIONGENERATORのインスタンス"FG"を生成 if GPIB_DEVICE_FUNCTIONGENERATOR_ON : FG = FG_test2() #--------------------------------------------- # シートデータ"sheet"、最大行"sheet.max_row"、 # 最大列"sheet.max_column"を取得する #--------------------------------------------- def OpenExcel(path): wb = openpyxl.load_workbook(path, data_only=True) sheet = wb[sheet_name] return sheet,sheet.max_row,sheet.max_column #--------------------------------------------- # Excelシートデータから取得波形設定を読み込み # No、中心周波数(freq)、振幅(ampl)をExcelから取得する #--------------------------------------------- def ReadWaveformSettings(sheet, i): No = int(sheet.cell(row=i, column=1).value) freq = int(sheet.cell(row=i, column=2).value) ampl = int(sheet.cell(row=i, column=3).value) return freq, ampl #--------------------------------------------- # main関数 # forループは評価項目Excelの最終行"max_row"まで実行される #--------------------------------------------- def main(): ## 評価項目エクセルを開く sheet, max_row, max_column = OpenExcel(path) Range = np.arange(start_row, max_row+1) ## No、中心周波数(freq)、振幅(ampl)をExcelから読み出す No, freq, ampl = ReadWaveformSettings(sheet, i) if GPIB_DEVICE_FUNCTIONGENERATOR_ON : #現在の設定の照会 #FG.inquiry() #設定の初期化 #FG.Initialize() ##周波数、振幅、位相、オフセットの設定 FG.setting( , ) if GPIB_DEVICE_FUNCTIONGENERATOR_ON : FG.close() print("") print("--- Finish All Processes ---") #--------------------------------------------- # # 実行部 # #--------------------------------------------- if __name__ == "__main__" : print("-----------------------------------------") print("--- Check FUNCTIONGENERATOR ON ---") print("-----------------------------------------") main() #(FG_test2.py) # -*- coding: utf-8 -*- import sys import time import pyvisa as visa VISA_LIB_PATH = 'C:\\Windows\\System32\\visa32.dll' TIMEOUT = 10000 class FUNCTIONGENERATOR : def __init__( self ) : self.RsrcMgr = visa.ResourceManager( VISA_LIB_PATH ) self.Inst = None def open( self, gpibId ) : address = 'GPIB0::' + str( gpibId ) + '::INSTR' self.Inst = self.RsrcMgr.open_resource( address ) self.Inst.timeout = TIMEOUT def close( self ) : ret = self.Inst.close() # print( ret ) def scan( self ) : self.RsrcMgr.list_resources() # 最初にScanしないとエラーが発生するので一回実行 def Initialize(self): seif.Inst.write("*RST") #設定の初期化 def inquiry(self): #現在の設定の照会 seif.Inst.read("FREQUENCY?") #周波数の照会 seif.Inst.read("VOLTAGE:AMPLITUDE?") #振幅の照会 def setting( self , fre , amp ) : #周波数、振幅、位相、オフセットの設定 seif.Inst.write("FREQUENCY freE3") #周波数の設定 seif.Inst.write("VOLTAGE:AMPLITUDE amp") #振幅の設定 seif.Inst.write("VOLTAGE:OFFSET 0.00") #オフセットの設定 seif.Inst.write("PHASE:ADJUST 0DEG") #位相の設定 def main() : argv = sys.argv argc = len( argv ) FG = FUNCTIONGENERATOR() if argc == 1 : print( FG.scan() ) sys.exit() devId = argv[1] argf = arga = FG.open( devId ) #FG.inquiry() #現在の設定の照会 #FG.Initialize() #設定の初期化 FG.setting( argf , arga ) #周波数、振幅、位相、オフセットの設定 FG.close() if __name__ == "__main__" : main()

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

can110

2022/01/28 05:55

現在どの部分までができていて、どこから何がどのように分からないのか(どうしたいのか)を 提示されたソースコードの具体的な部分とともに説明ください。 ざっと見て単純に「FG.setting( , )」に必要な変数値を渡せばいいと思いますが。
kitagawasho

2022/01/28 06:16

Excelの中身全体(ほしい情報の部分だけ)を読み取ることはできていると思います。またファンクションジェネレーターのコマンドの方も構文がもしかしたら違っているかもしれませんが、参考にできるサイト等あるので自力で直せると思います。 わからないところはNo1の設定からNo2の設定に変更する際にExcelからどうやって値を取ってくればいいか。また次にPythonを実行した際にNo2からNo3の設定にできるようにすることです。 FG.setting( , )に必要な変数を入れるために読み込んだExcelから適した値を持ってこないといけないと思います。 例えばNo2の設置にしたい場合、Excelから(20,20)の値を取ってくる必要がありますが、その部分がわかりません。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。