Win32 + Python で RS-232C ポートを制御するには、(くどいですが) 標準の Python 2.5(win32) に加えてPywin32 と pySerial ライブラリモジュールの追加インストールが必要です。
作業は、これでほとんどの終わりで、あとは書いて試すだけです。
他のターミナルソフト や 確認用ドングル で、実験する COM port のCOM番号を確認します。
port = 0, の値は、確認したCOMの値 -1 、 COM1 なら (-1して)、0 にします。
タイムアウトの値は秒。駄目そうなことが自分で分かる程度、むっとする程度で、きれない程度の秒。
- COMポートの設定。
- Tx-Rxループの確認、文字を \n 付きで送信する。 readline() で \n まで受信する。
- オープンの端子(CD、RI)を読んだ値が、どうなるのか確認しておく。
- RTS-CTS ループを確認する。
- DTR-DSR ループを確認する。
- 4と5 を反転して、もう一度。
確認用折り返しドングルを外し、同じ事をする。
USB serial などで、折り返し確認がうまく行かないときは、
setXX() と getXX()の間に、time モジュール(標準)の sleep(0.1)
程度入れてみるのも手です。
これで PonyProg みたいなのを自分で作ってみたり。。。とか。。。まだ無理?
あぁ、Tab使ったインデントが壊れてます。これからやばいですねー、なにか対策を考えないと。
まぁ、まだしばらくは、大丈夫なのですが(笑
-----------------
## Win32 (WinXP)
## Python2.5 (for win32)
## Pywin32 210 (for win32 Python2.5)
## pySerial 2.2 (for win32 Python2.5)
import serial
ser = serial.Serial(
port = 0, ## COM1 = 0, COM2 = 1, ...
baudrate = 9600,
parity = serial.PARITY_NONE,
bytesize = serial.EIGHTBITS,
stopbits = serial.STOPBITS_ONE,
timeout = 1, ## Sec
)
ser.open()
## Tx - Rx loop
ser.write('Hi!\n')
LineData = ser.readline()
print 'Rx : ', LineData
## Open pins
RI = ser.getRI()
CD = ser.getCD()
print 'Open RI : ',RI
print 'Open CD : ',CD
## RTS CTS loop
ser.setRTS(1) # Plus
CTS = ser.getCTS()
print 'Set RTS(1) then CTS : ',CTS
## DTR DSR loop
ser.setDTR(0) # Minus
DSR = ser.getDSR()
print 'Set DTR(0) then DSR : ',DSR
## RTS CTS loop
ser.setRTS(0) # Minus
CTS = ser.getCTS()
print 'Set RTS(0) then CTS : ',CTS
## DTR DSR loop
ser.setDTR(1) # Plus
DSR = ser.getDSR()
print 'Set DTR(1) then DSR : ',DSR
ser.close()
##raw_input()
---------------
確認用ドングル が付いているとき。
Rx : Hi!
Open RI : False
Open CD : False
Set RTS(1) then CTS : True
Set DTR(0) then DSR : False
Set RTS(0) then CTS : False
Set DTR(1) then DSR : True
>>>
---------------
確認用ドングル なし、受信タイムアウト (に設定した秒) 後に表示されます。
Rx :
Open RI : False
Open CD : False
Set RTS(1) then CTS : False
Set DTR(0) then DSR : False
Set RTS(0) then CTS : False
Set DTR(1) then DSR : False
>>>
0 件のコメント:
コメントを投稿