RL78マイコン基板(RL78/G10)|CS+(CubeSuite+)のPythonコンソール上でシリアルポート操作 (2)
前のエントリでCS+(旧CubeSuite+)のPythonコンソール上で取り敢えずのシリアルポート操作が出来ました
ので、今回、シリアルポートの受信データをPythonコンソール上に表示させ続けることを試してみました。
表示させ続けるといっても表示処理を終了させることぐらいは出来るようにしたかったので、kbhit()のような
ノンブロッキングキーボード入力判定(あるいは入力)関数を探したのですが、今のところ、うまく行く方法を
見つけることが出来ていません。そして途中で気付いたのですが、CS+(旧CubeSuite+)のPythonコンソール
ではPythonの代表的入力関数であるraw_input()が動作しませんでした。本来ならEnterキーまでキー入力を
待ってから入力された文字列を返す筈なのですが、キー入力を何も待たずに直ぐ制御を返して来てしまいます。
仕方ないのでCS+(CubeSuite+)のPythonコンソールのPythonスクリプト強制終了機能(Ctrl+D入力)を使用
して強引に表示処理を終了させるようにしてみたのですが、残念ながらPythonスクリプト強制終了時にCS+
(CubeSuite+)がアプリケーションエラーで落ちることが時々あります。これでは使い物にならないのですが、
試行錯誤の途中ということで、、、
なお、以下のスクリプトでcommon.ThrowExcept = Trueにしている理由は、Pythonスクリプト強制終了の
例外を捕らえてシリアルポートをクローズしないと次にシリアルポートをオープン出来なくなったからです。
import System, time
def dump():
print '終了させるには Ctrl+D を入力して下さい。再開させるには dump() と入力した後 Enter キーを押して下さい。'
print ' '
org = common.ThrowExcept
# System.IO.Ports.SerialPortクラスは以下の設定の対象外なので注意
common.ThrowExcept = True
try:
com = System.IO.Ports.SerialPort('COM14', 2000000)
com.Open()
com.DiscardOutBuffer()
com.DiscardInBuffer()
com.RtsEnable = True
while True:
str = com.ReadLine()
print str,
except:
# System.IO.Ports.SerialPortクラスは以下の設定の対象外なので注意
common.ThrowExcept = False
try:
com.RtsEnable = False
com.DiscardOutBuffer()
com.DiscardInBuffer()
com.Close()
# Pyhon組み込み関数は以下の設定の対象外なので注意
common.ThrowExcept = org
print '^D'
print 'Wait for a while.'
print ' '
# ある程度時間待ちさせるとCubeSuite+がアプリケーションエラーになる頻度が減る気がしなくもない...
time.sleep(3)
exit(1)
except:
pass
dump()



ちなみに、アプリケーションエラー発生時に表示されたエラーダイアログの内容は以下の通りでした。
問題の署名:
問題イベント名: CLR20r3
問題の署名 01: cubesuitew+.exe
問題の署名 02: 5.0.0.11
問題の署名 03: 53f57a73
問題の署名 04: mscorlib
問題の署名 05: 4.0.30319.18444
問題の署名 06: 52717edc
問題の署名 07: 1368
問題の署名 08: 13
問題の署名 09: System.ObjectDisposedException
OS バージョン: 6.1.7601.2.1.0.256.48
ロケール ID: 1041
追加情報 1: 0a9e
追加情報 2: 0a9e372d3b4ad19135b953a78882e789
追加情報 3: 0a9e
追加情報 4: 0a9e372d3b4ad19135b953a78882e789
ので、今回、シリアルポートの受信データをPythonコンソール上に表示させ続けることを試してみました。
表示させ続けるといっても表示処理を終了させることぐらいは出来るようにしたかったので、kbhit()のような
ノンブロッキングキーボード入力判定(あるいは入力)関数を探したのですが、今のところ、うまく行く方法を
見つけることが出来ていません。そして途中で気付いたのですが、CS+(旧CubeSuite+)のPythonコンソール
ではPythonの代表的入力関数であるraw_input()が動作しませんでした。本来ならEnterキーまでキー入力を
待ってから入力された文字列を返す筈なのですが、キー入力を何も待たずに直ぐ制御を返して来てしまいます。
仕方ないのでCS+(CubeSuite+)のPythonコンソールのPythonスクリプト強制終了機能(Ctrl+D入力)を使用
して強引に表示処理を終了させるようにしてみたのですが、残念ながらPythonスクリプト強制終了時にCS+
(CubeSuite+)がアプリケーションエラーで落ちることが時々あります。これでは使い物にならないのですが、
試行錯誤の途中ということで、、、
なお、以下のスクリプトでcommon.ThrowExcept = Trueにしている理由は、Pythonスクリプト強制終了の
例外を捕らえてシリアルポートをクローズしないと次にシリアルポートをオープン出来なくなったからです。
import System, time
def dump():
print '終了させるには Ctrl+D を入力して下さい。再開させるには dump() と入力した後 Enter キーを押して下さい。'
print ' '
org = common.ThrowExcept
# System.IO.Ports.SerialPortクラスは以下の設定の対象外なので注意
common.ThrowExcept = True
try:
com = System.IO.Ports.SerialPort('COM14', 2000000)
com.Open()
com.DiscardOutBuffer()
com.DiscardInBuffer()
com.RtsEnable = True
while True:
str = com.ReadLine()
print str,
except:
# System.IO.Ports.SerialPortクラスは以下の設定の対象外なので注意
common.ThrowExcept = False
try:
com.RtsEnable = False
com.DiscardOutBuffer()
com.DiscardInBuffer()
com.Close()
# Pyhon組み込み関数は以下の設定の対象外なので注意
common.ThrowExcept = org
print '^D'
print 'Wait for a while.'
print ' '
# ある程度時間待ちさせるとCubeSuite+がアプリケーションエラーになる頻度が減る気がしなくもない...
time.sleep(3)
exit(1)
except:
pass
dump()



ちなみに、アプリケーションエラー発生時に表示されたエラーダイアログの内容は以下の通りでした。
問題の署名:
問題イベント名: CLR20r3
問題の署名 01: cubesuitew+.exe
問題の署名 02: 5.0.0.11
問題の署名 03: 53f57a73
問題の署名 04: mscorlib
問題の署名 05: 4.0.30319.18444
問題の署名 06: 52717edc
問題の署名 07: 1368
問題の署名 08: 13
問題の署名 09: System.ObjectDisposedException
OS バージョン: 6.1.7601.2.1.0.256.48
ロケール ID: 1041
追加情報 1: 0a9e
追加情報 2: 0a9e372d3b4ad19135b953a78882e789
追加情報 3: 0a9e
追加情報 4: 0a9e372d3b4ad19135b953a78882e789
- 関連記事
-
- RL78マイコン|32bit変数へのアクセスはアトミックじゃない
- RL78マイコン(G12,G13,G14)|CS+(CubeSuite+)でインターバルタイマシミュレーションを試す
- RL78マイコン基板(RL78/G10)|CS+(CubeSuite+)で内蔵周辺機能シミュレーションを試す (3)
- RL78マイコン基板(RL78/G10)|CS+(CubeSuite+)で内蔵周辺機能シミュレーションを試す (2)
- RL78マイコン基板(RL78/G10)|CS+(CubeSuite+)で内蔵周辺機能シミュレーションを試す (1)
- RL78マイコン基板(RL78/G10)|e2studio同梱のPython 2.7.2+pySerial 2.7でシリアルポート操作
- RL78マイコン基板(RL78/G10)|CS+(CubeSuite+)のPythonコンソール上でシリアルポート操作 (3)
- RL78マイコン基板(RL78/G10)|CS+(CubeSuite+)のPythonコンソール上でシリアルポート操作 (2)
- RL78マイコン基板(RL78/G10)|CS+(CubeSuite+)のPythonコンソール上でシリアルポート操作 (1)
- RL78マイコン基板(RL78/G10)|TOOL0端子へのシリアル出力を使ったgetch()関数もどきのコード
- RL78マイコン基板(RL78/G10)|TOOL0端子へのシリアル出力を使ったkbhit()関数もどきのコード
- RL78マイコン基板(RL78/G10)|TOOL0端子から2Mbaudでソフトウェアシリアル出力するコード
- RL78マイコン基板(RL78/G10)|Renesas Flash Programmerのコマンドラインでフラッシュ書き込み
- RL78マイコン基板(RL78/G10)|秋月のRL78/G10 10pin DIP基板に自作回路でフラッシュ書き込み (2)
- RL78マイコン基板(RL78/G10)|秋月のRL78/G10 10pin DIP基板に自作回路でフラッシュ書き込み (1)
2015/01/14 blog-entry-550 category: RL78 /* 16bit,8bit CISC */
| h o m e |