前提・実現したいこと
タイムコード(時:分.秒.フレーム)データを
RS232ケーブルを用いたシリアル通信でPCに取り込むシステムを作っています。
pythonで実装してみたのですが、
b''
と表示されるばかりで、上手く受信できていないのか不明です。
<送信側の設定>
・Bits per second: 9600
・Data bits: 8
・Parity: Odd
・Stop bits: 1
LTC(タイムコード)が入力されると、1キャラクタあたり8ビットを使用して以下のデータを出力する。
Byte 0 = ブレーク信号(20ビットLowレベル -> 2ビットハイレベル)
Byte 1 = XBhステータスおよびデータレングスバイト
Byte 2 = 00h-29h TIMEビット[フレーム](packed BCD)
Byte 3 = 00h-59h TIMEビット[秒](packed BCD)
Byte 4 = 00h-59h TIMEビット[分](packed BCD)
Byte 5 = 00h-23h TIMEビット[時](packed BCD)
Byte 6 = ・・・
・・・
Byte 12 = ・・・
Byte 2-5 に格納されているデータを抽出したいです。
タイムコードですので、1フレームずつ連続で送信し続けます。
そのほかの情報は今回不要と考え、割愛させていただきました。
ご助言・アドバイスをお願いいたします。
該当のソースコード
python3
1import serial 2 3ser=serial.Serial( 4 port='COM1', 5 baudrate=9600, 6 bytesize=serial.EIGHTBITS, 7 parity=serial.PARITY_ODD, 8 stopbits=serial.STOPBITS_ONE, 9 timeout=0) 10while True: 11 line=ser.read() 12 print(line)
切り分けのためにTeraTermとかシリアル端末でまずは受信できるのか試しては?それで確実に受信ができることがわかってからPythonでやってみたら良いと思います。
ご回答ありがとうございます。
TeraTermを用いましたが、受信を確認できませんでした。
ただ、タイムコード出力端末のメーカーが公開しているアプリをPC内で用いると、
正常なタイムコードが表示されますので、PC内には入力できていると思われます。
アプリはexeファイルしかなく、どのように表示しているかは不明でした。
可視化するだけでなく、数値データとして欲しいです。
機械とPCはどのようにつないでいますか?
> ブレーク信号(20ビットLowレベル -> 2ビットハイレベル)
を見る限りRS232Cの電圧ではなさそうですが。
専用アプリではOKでTeraTermで受信できないなら、TeraTermで受信できるまで色々通信条件の
設定を探った方が良いと思います。フロー制御のxon/xoff , rts/cts, dsr/dtrあたりを確認してみては?それで受信できるようになったらPythonの方も同じようにセットしてやれば動くと思います。