16
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

実験系でもPythonで効率化したい(2)RS232CとpySerial

Last updated at Posted at 2019-12-09

動機

  • (1)を見てください

環境

  • Windows10
  • Anaconda(3.x)

目標

  • pySerialでRS232Cインターフェイスを持つ機器とシリアル通信する

pySerialを入れる

なぜ入れるか

  • 多くの測定器具はRS232Cインターフェイスと、シリアル通信によるコマンド制御が用意されている
  • pyserialとコマンド制御機構があれば、基本的に制御できるはず
  • 詳しくは公式サイトを見てください

入れ方

  • conda promptから
conda install -c anaconda pyserial

使い方

JupyterNotebookでの実行を前提とします。(pythonスクリプトでも同様なはずです)

まずはパッケージをimportします。パッケージ名と違うので注意してください。

import serial
import time

DSubをUSBに変換して繋ぐなりして、PCにデバイスを接続します。
Windowsの場合はデバイスマネージャーからCOM(数字)みたいなのを探してください。COM3と書かれたデバイスが該当デバイスの場合

COM="COM3"
bitRate=9600
ser = serial.Serial(COM, bitRate, timeout=0.1)

bitRateはお好みで。
これでシリアル通信ができるので、あとは各測定器具のコマンド集を見て

ser.write(b"H:2-\r\n")

などと入力してください(例はシグマ光機SHOT102のコマンドで、2軸目に対して、原点に復帰する命令です。)

  • \r\n は改行文字です。詳しくはこちらを御覧ください。

  • ()の中のbは文字列であることを意味しています。
    bを書かない場合は、一文字しか送れません。

# time.sleep(0.1)
print(ser.read_all())

使用するデバイスによっては、命令が実行できたかどうかが、read()によって返されるものがあります。

  • read() 一文字
  • read_line() 一行
  • read_all() すべて

で返された文字列が読めるようです。
これまでのコードを同時に実行するときは、time.sleep(0.1)など、数秒待たないと失敗することがあるかもしれません。

ser.close()

命令の後は、シリアル通信を終了するのを忘れないこと。

以上です。ありがとうございました。
次の記事では連続実行してリストに入れてpandasでデータフレームにしてcsvに吐くコードまで書きます。

16
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?