Pythonという言葉を最近よく耳にするのではないでしょうか?
Python(パイソン)は、プログラミング言語の1つで、シンプルかつ柔軟性が高いことから、初心者から上級者の応用分野まで様々な用途に用いられています。
この記事では、Pythonの環境構築から基本的な操作方法と通信の基礎から、電源や計測器の制御用アプリケーションの具体例まで幅広く解説し、プログラミングの世界への第一歩をお手伝いします。
ぜひ最後までお読みください。
Pythonとは
Pythonはプログラミング言語の1つで、導入部分にも記載したとおり、シンプルで直感的な文法で表現することができるプログラミング言語です。
読みやすいコード構造が人気の1つでもあります。
Pythonの基本的な構成
まず、Pythonの基本的な構成についてご説明していきます。
コンピュータ
Pythonを実行するには高性能なハードウェアは不要で、一般的なパソコンで十分可能です。
次のようなパソコンのスペックがあれば問題ありません。
- CPU: デュアルコアプロセッサ
- RAM: 4GB以上(8GB以上推奨)
- ストレージ: 少なくとも数GBの空き容量は必要になります。
特に、大規模なデータ解析や機械学習を行う場合には、SSDが望ましいといえます。
プログラミングの環境構築
Pythonを使い始めるには、まずコードを記述するエディタと、コードを実行するpython本体が必要です。
Pythonを実行する環境とするには、外部ライブラリのインストールが必要になることもあります。
例えば、データ分析には「pandas」や「numpy」、機械学習には「scikit-learn」や「TensorFlow」、Web開発には「Django」や「Flask」などのライブラリが使われます。
これらのライブラリは、Pythonに付属するパッケージ管理ツール「pip」を使って簡単にインストールできます。
例えば、pip install pandasと入力するだけでpandasライブラリを追加できます。
プログラムのコードを記述する開発環境を整えるために、コードエディタ(例:Visual Studio Code)をインストールすると、コーディング(コンピュータに特定のタスクを実行させるために、プログラムの指示を作成する作業)が快適にできるようにもなります。
また、異なるプロジェクトごとに独立した環境を管理するために、仮想環境を作成し、使うことが推奨されます。
仮想環境を使う事で、異なるプロジェクト間でのライブラリのバージョンの競合を防ぐことができるようになるのです。
それではプログラミングの環境構築を始めましょう。ここでは簡単に手順を紹介します。
1. Visual Studio Codeのダウンロード
以下のVisual Studio Code(VS code)のWEBサイトから「Download for Windows」をクリックしてVS codeのインストーラーをダウンロードします。
https://code.visualstudio.com/2. Visual Studio Codeのインストール
ダウンロードしたファイルをダブルクリックして実行します。
ダブルクリックした後、警告文が出ますが、「OK」を押して次に進みます。
- Visual Studio Codeのインストールの手順
-
-
「使用許諾誓約書の同意」という表示が出ますので、「同意する」をチェックし、「次へ」をクリックします。
-
ここで「インストール先の指定」という画面が出てきますので、ご自身でインストールするフォルダーを指定します。
-
特に希望がない方はあらかじめ表示されているフォルダーのまま「次へ」を押します。
-
「追加タスクの選択」という画面が出てきますので、下から2番目の「サポートされているファイルの首位のエディタ-として、Cooleを登録する」及び一番下の「PATHへの追加(再起動後に使用可能)」の2つにチェックします。
-
「インストール準備完了」という画面が出てきますので、下の「インストール」を押します。
-
「セットアップウィザードの完了」と出てきますので、完了を押してください。
-
3. VS codeの日本語化
- 日本語化の手順
-
-
Viewメニューの「Command Pallet」をクリックします。
-
入力欄に「Confi」と入力し、リストから「Configure Display Language」を選択します。
-
リストから日本語を選択します。
-
「Restart」をクリックすると、日本語のVS codeが起動します。
-
4. Pythonのインストール
Pythonの実行環境は、公式サイト(Python.org )からPythonの最新版をダウンロードし、インストールします。このインストーラーはWindows、Linux、macOSにも対応しており、簡単にセットアップが可能です。
公式サイトから環境に合わせたpythonをダウンロードします。
ここでは、Windows用のpythonをダウンロードします。
-
ダウンロードしたインストーラを実行します。
「Add python.exe to PATH」にチェックを入れ、「→ Install Now」をクリックします。
-
インストール中
-
インストール完了
電源や計測器との通信
Pythonを使ってハードウェア(電源や計測器など)と通信する際、USB、シリアル通信、イーサネットなどのインターフェースがよく使われます。
Pythonには標準ライブラリや外部ライブラリが充実しており、これらのインターフェースを通じてハードウェアと通信ができます。
通信ライブラリのインストール
計測器や電源、マイクロコントローラとの通信や制御に特化したライブラリというあらかじめ用意されたコードの集まりがあります。Pythonはそのライブラリが豊富です。
例えば、シリアル通信で計測機器と接続する場合には、pyserialというライブラリが一般的です。pyserialはUSB経由のシリアルポート接続にも対応しており、以下のコマンドでインストールできます。
Visual studio codeのメニュー「ターミナル」-「新しいターミナル」を選択し、ターミナルを表時させます。
「pip -version」と入力してpipが動作していることを確認しましょう。
※Pythonのインストール方法やPython本体の違いにより、インストール場所にパスが通っていない場合があります。その場合、pipコマンドを認識しません。インストール場所のPATHをWindowsのシステムに登録するか、pipの前に、「py -m 」を付けてコマンドを実行してください。
次に、現在登録されているライブラリを確認してみましょう。
コマンドプロンプトに「pip list」と入力します。何も追加されていなければpipだけが表示されます。
それでは、pythonでシリアル通信を行う「pyserial」をインストールしましょう。
コマンドプロンプトに「pip install pyserial」と入力します。
- Sh
-
pip install pyserial
インストールが終われば、「pip list」と入力して、ライブラリが追加されていることを確認しましょう。
pyserialは、シリアルポートを通じて計測器にコマンドを送り、応答を受信するライブラリです。シンプルなコードの例として、例えば、以下のように使用します。
- python
-
import serial ser = serial.Serial('COM3', 9600, timeout=1) ser.write(b'*IDN?\n') response = ser.readline().decode() print(response) ser.close()
計測器からのデータを取得して制御やモニタリングを行う際に上記の様なコマンドを入力し接続します。
電源装置や計測器の場合、多くはSCPI(Standard Commands for Programmable Instruments)と呼ばれる標準化されたコマンド体系が採用されていることもあります。
Pythonでこれを扱うためには、適切なコマンドを送信し、応答を処理するプログラムが必要になります。シリアル通信やイーサネット通信を組み合わせることで、Pythonから多様なハードウェアを簡単に制御できる環境を整えることができるようになります。
Pythonのプログラミング
USBシリアルやR-232CなどのCOMポートで電源を制御する場合
USBシリアルやR-232CなどのCOMポートで電源を制御する場合を見ていきましょう。
シリアル通信を使い、電源をオン/オフという制御を行うPythonのプログラミングで、PySerialライブラリを使用し、RS-232接続を通じて電源を制御する事例です。
必要なライブラリのインストール
Pythonでシリアル通信(RS-232、RS-485など)を行う際、PySerialというライブラリがよく使用されます。PySerialはシリアルポートを介したデータの送受信を簡単に実装するためのライブラリで、PCとマイクロコントローラ(ArduinoやRaspberry Piなど)や、シリアルポートを持つ計測器といったデバイス間の通信を行います。
例えば、リアルタイムでセンサーデータを取得してモニタリングしたり、遠隔でデバイスを制御したりすることもできます。また、複数のデバイスと同時に通信することも可能となります。
このPySerialをインストールします。インストール方法は、前の章を参照してください。
制御する電源の準備
PCと電源をシリアル通信(RS-232、RS-485など)で制御する場合は、PCのCOMポートと電源をシリアルケーブルで接続します。最近は、USBポートに変換アダプタを接続して仮想COMポートとして使う場合や、USB接続した機器がCOMポートのデバイスとして認識する場合が増えています。松定プレシジョンの電源もUSBで接続した場合、COMポートのデバイスとなる場合が多くなっています。ここでは、PK-80シリーズをUSBで接続した場合を説明します。
まず、必要なドライバをインストールしてPCと電源を接続します。(ドライバのインストール方法は、別途取扱説明書をご覧ください。)
次に、COMポートの確認を行います。
- COMポートの確認の手順
-
-
Windowsの検索入力欄に、「デバイスマネージャー」と入力してデバイスマネージャーを起動します。
-
次に、ポート(COMとLPT)から電源の接続された通信ポートを選択します。
-
右クリックからプロパティを選択します。
-
電源本体の通信仕様に合わせて、ポートの設定を行います。
-
ポートのオープンと電源のステータス確認
以下のプログラム例では、COMポートをオープンし、電源のステータスを読み出します。以下のサンプルソースを保存し、Visual Studio Codeを起動して読み込んでください。
注意:初期設定: port_name は実際のCOMポート名に置き換えてください(Windowsでは COM3 や COM4、Linux/Macでは /dev/ttyUSB0 など)。baudrate はシリアル通信の速度(例: 9600)です。装置の仕様に合わせて変更します。また、電源のユニット番号を"#1"から変更している場合は、その番号に変更してください。
#ポートのオープンと電源のステータス確認
import serial
import time
class PowerSupplyController:
def __init__(self, port , baudrate=9600, timeout=1):
self.port = port
self.baudrate = baudrate
self.timeout = timeout
self.serial_conn = None
def open_connection(self):
"""シリアルポートをオープンする"""
self.serial_conn = serial.Serial(port=self.port, baudrate=self.baudrate, timeout=self.timeout)
print(f"Connected to {self.port} at {self.baudrate} baudrate.")
def close_connection(self):
"""シリアルポートをクローズする"""
if self.serial_conn and self.serial_conn.is_open:
self.serial_conn.close()
print("Connection closed.")
def send_command(self, command):
"""コマンドを送信する"""
if self.serial_conn and self.serial_conn.is_open:
self.serial_conn.write(command.encode("utf-8"))
time.sleep(0.1) # コマンド処理のため少し待機
response = self.serial_conn.readline().decode().strip()
print(f"Response: {response}")
return response
else:
print("Connection is not open.")
return None
def status(self):
"""電源のステータスを確認する"""
command = "#1 STS\r\n" #ユニット番号は設定に合わせて変更してください。
self.send_command(command)
print(f"コマンド{command}")
# メインプログラム
if __name__ == "__main__":
# シリアルポートの設定 (ポート名は環境に合わせて変更してください)
port_name = "COM3" # Windowsの場合
# port_name = "/dev/ttyUSB0" # Linux/Macの場合
# インスタンス作成とポートのオープン
power_controller = PowerSupplyController(port=port_name)
power_controller.open_connection()
# ステータス確認コマンドの送信
power_controller.status()
# リモートモードをOFFに設定
power_controller.close_connection()
Visual studio Codeのメニューから、実行-デバッグの開始でプログラムが実行されます。
実行結果はターミナルに表示されます。通常であれば、ターミナルには、"#1 CO LO CC"と表示されます。
電圧と電流を設定し、出力のON/OFFを行う
電源との通信確認が出来たので、実際に出力のON/OFFを行います。以下のプログラム例では、電源をリモート制御モードにして、出力電圧を5V、電流を1Aに設定して出力をONにし、5秒後OFFします。
注意:電源の出力がONになります。出力端子に何も接続されていないことを確認してプログラムを実行してください。
プログラムの解説
電源をリモートモードにするには、"REN"コマンドを送信します。また、ローカルモードに戻すには、"GTL"コマンドを送信します。
コマンド送信:set_voltage と set_current メソッドで電圧と電流の設定を行います。指定するフォーマットは装置によりますが、松定プレシジョンの電源の多くは VSET や ISET といったコマンドが使用されています。
電源のON/OFF:電源のON/OFFコマンドも装置によって異なりますが、松定プレシジョンの電源の多くは SW1(ON)や SW0(OFF)コマンドで制御します。
#電圧と電流を設定し、出力のON/OFFを行う
import serial
import time
class PowerSupplyController:
def __init__(self, port , baudrate=9600, timeout=1):
self.port = port
self.baudrate = baudrate
self.timeout = timeout
self.serial_conn = None
def open_connection(self):
"""シリアルポートをオープンする"""
self.serial_conn = serial.Serial(port=self.port, baudrate=self.baudrate, timeout=self.timeout)
print(f"Connected to {self.port} at {self.baudrate} baudrate.")
def close_connection(self):
"""シリアルポートをクローズする"""
if self.serial_conn and self.serial_conn.is_open:
self.serial_conn.close()
print("Connection closed.")
def send_command(self, command):
"""コマンドを送信する"""
if self.serial_conn and self.serial_conn.is_open:
self.serial_conn.write(command.encode("utf-8"))
time.sleep(0.1) # コマンド処理のため少し待機
response = self.serial_conn.readline().decode().strip()
print(f"Response: {response}")
return response
else:
print("Connection is not open.")
return None
def status(self):
"""電源のステータスを確認する"""
command = "#1 STS\r\n" #ユニット番号は設定に合わせて変更してください。
self.send_command(command)
print(f"コマンド{command}")
def set_remote(self):
"""リモートモードに設定する"""
command = "#1 REN\r\n" # リモートモードに設定
self.send_command(command)
def set_local(self):
"""ローカルモードに設定する"""
command = "#1 GTL\r\n" # ローカルモードに設定
self.send_command(command)
def set_voltage(self, voltage):
"""電圧を設定する"""
command = f"#1 VSET {voltage:.2f}\r\n" #電圧設定コマンド
self.send_command(command)
def set_current(self, current):
"""電流を設定する"""
command = f"#1 ISET {current:.2f}\r\n" #電流設定コマンド
self.send_command(command)
def power_on(self):
"""電源をONにする"""
command = "#1 SW1\r\n"
self.send_command(command)
def power_off(self):
"""電源をOFFにする"""
command = "#1 SW0\r\n"
self.send_command(command)
# メインプログラム
if __name__ == "__main__":
# シリアルポートの設定 (ポート名は環境に合わせて変更してください)
port_name = "COM3" # Windowsの場合
# port_name = "/dev/ttyUSB0" # Linux/Macの場合
# インスタンス作成とポートのオープン
power_controller = PowerSupplyController(port=port_name)
power_controller.open_connection()
# リモートモードに設定
power_controller.set_remote()
# 電圧と電流の設定
power_controller.set_voltage(5.0) # 5Vに設定
power_controller.set_current(1.0) # 1Aに設定
# 電源をONにする
power_controller.power_on()
time.sleep(5) # 5秒間ONの状態を維持
# 電源をOFFにする
power_controller.power_off()
# ローカルモードに設定
power_controller.set_local()
# 接続を閉じる
power_controller.close_connection()
現在の出力値を取得
最後に出力状態をモニタするプログラムです。先ほどのプログラムに出力中の電圧と電流を取得するプログラムを追加します。
#現在の出力値を取得
import serial
import time
class PowerSupplyController:
def __init__(self, port , baudrate=9600, timeout=1):
self.port = port
self.baudrate = baudrate
self.timeout = timeout
self.serial_conn = None
def open_connection(self):
"""シリアルポートをオープンする"""
self.serial_conn = serial.Serial(port=self.port, baudrate=self.baudrate, timeout=self.timeout)
print(f"Connected to {self.port} at {self.baudrate} baudrate.")
def close_connection(self):
"""シリアルポートをクローズする"""
if self.serial_conn and self.serial_conn.is_open:
self.serial_conn.close()
print("Connection closed.")
def send_command(self, command):
"""コマンドを送信する"""
if self.serial_conn and self.serial_conn.is_open:
self.serial_conn.write(command.encode("utf-8"))
time.sleep(0.1) # コマンド処理のため少し待機
response = self.serial_conn.readline().decode().strip()
print(f"Response: {response}")
return response
else:
print("Connection is not open.")
return None
def status(self):
"""電源のステータスを確認する"""
command = "#1 STS\r\n" #ユニット番号は設定に合わせて変更してください。
self.send_command(command)
print(f"コマンド{command}")
def set_remote(self):
"""リモートモードに設定する"""
command = "#1 REN\r\n" # リモートモードに設定
self.send_command(command)
def set_local(self):
"""ローカルモードに設定する"""
command = "#1 GTL\r\n" # ローカルモードに設定
self.send_command(command)
def set_voltage(self, voltage):
"""電圧を設定する"""
command = f"#1 VSET {voltage:.2f}\r\n" #電圧設定コマンド
self.send_command(command)
def set_current(self, current):
"""電流を設定する"""
command = f"#1 ISET {current:.2f}\r\n" #電流設定コマンド
self.send_command(command)
def power_on(self):
"""電源をONにする"""
command = "#1 SW1\r\n"
self.send_command(command)
def power_off(self):
"""電源をOFFにする"""
command = "#1 SW0\r\n"
self.send_command(command)
def get_voltage(self):
"""現在の電圧値を取得する"""
command = "#1 VGET\r\n"
return self.send_command(command)
def get_current(self):
"""現在の電流を取得する"""
command = "#1 IGET\r\n"
return self.send_command(command)
# メインプログラム
if __name__ == "__main__":
# シリアルポートの設定 (ポート名は環境に合わせて変更してください)
port_name = "COM3" # Windowsの場合
# port_name = "/dev/ttyUSB0" # Linux/Macの場合
# インスタンス作成とポートのオープン
power_controller = PowerSupplyController(port=port_name)
power_controller.open_connection()
# リモートモードに設定
power_controller.set_remote()
# 電圧と電流の設定
power_controller.set_voltage(5.0) # 5Vに設定
power_controller.set_current(1.0) # 1Aに設定
# 電源をONにする
power_controller.power_on()
time.sleep(5) # 5秒間ONの状態を維持
for i in range(5):
voltage = power_controller.get_voltage()
current = power_controller.get_current()
print(f"{i + 1}秒目, Voltage: {voltage} V, Current: {current} A")
time.sleep(1) #1秒間待機
# 電源をOFFにする
power_controller.power_off()
# ローカルモードに設定
power_controller.set_local()
# 接続を閉じる
power_controller.close_connection()
松定プレシジョンの制御用ソフトウェア
色々Pythonについて申し上げてきましたが、松定プレシジョンの制御用ソフトウェアのPSS2についてもご説明したいと思います。
制御用ソフトウェアは、プログラミング不要で電源機器の複雑な制御を行うことができます。また、外部からの制御では難しい高速制御を電源本体に設定する機能もあります。
代表的な機能の紹介
機能は以下のようなものを有しております。
ソフトウェアシーケンスモードモード
ソフトウェアシーケンスモードは、パソコンから設定値を送り続け、対応する弊社製品の動作を変化させます。
変化させるパラメータや動作パターンに応じて、様々なシーケンスを999ステップまで設定することが可能です。
(使用状況によりパソコンからコマンドが送信されてから電源が実際に動作するまでにタイムラグが生じる場合があります。)
変化可能なパラメータ(各パラメータを個別に設定できます。)
| 直流電源、高圧電源、GPシリーズを介した各種電源 | 電圧、電流、動作時間 |
|---|---|
| 直流電子負荷 | 電圧、電流、電力、抵抗、動作時間 |
| 交流電源、バイポーラ電源 | 電圧、周波数、動作時間 |
動作パターン
ハードウェアシーケンスモード
ハードウェアシーケンスモードでは、電源本体に動作プログラムのパラメータを設定し動作させます。
-LDe(パルスランプシーケンス)オプション※を装備した直流電源本体のパルス・ランプ項目を設定することができます。
設定可能なメモリ数は最大20で、上述のソフトウェアシーケンスモードと比較して、より滑らかな動作が可能です。
注:P4LP、4LT以外の直流電源 メモリ数3(a、b、c) P4L、P4LT メモリ数20(a~t)
ハードウェアスイープモード
-LDe(パルスランプシーケンス)オプション※を装備した直流電源およびTBシリーズ本体のスイープ項目を設定することができます。
バイポーラ電源のハードウェアシーケンスモード
バイポーラ電源本体のシーケンス項目を設定することができます。これにより、以下のような複雑な波形も簡単に生成できます。
まとめ
Pythonについて色々ご説明致しました。
簡単で、直感的にわかる共通のプログラミング言語であるPythonを用い、電源や計測器の制御に是非用いてみて下さい。