• 締切済み

シリアル通信(タブレット、シーケンサー)

現在、WindowsXP + VB6 + MSComm <ー> FXn2-16MR(RS232Cユニット)を シリアル通信で制御しています。これをWindows8.1(タブレット) + VB2013で全面的に 書き換えを行っています。テスト用のパソコンとは何の問題間無く通信は通りますが、 対シーケンサーだと送信はしているようだが、受信が全くできない状態です。 制御パラメータは、SerialPort1.Handshake=None, DtrEnable=True, RtsEnable=True 送信時のプロトコルは、<ENQ> + データ(ASCコード) 受信時のプロトコルは、<STX> + データ(ASCコード)+ <ETX> VB6は、この設定で動作しています。 VB2013では、制御パラメータは同じし送受信では普通に SerialPort1.Write、SerialPort1.ReadLineを使っています。 宜しくお願いします。

みんなの回答

  • lumiheart
  • ベストアンサー率47% (1142/2410)
回答No.4

基本はバイナリモード通信 http://kana-soft.com/tech/sample_0008_4.htm#SerialPort_Read NewLine=ETX と言う裏ワザは事務所環境での実験ならアリですが 実プラントに使うには... 理由、 FXから正常な返信電文だけならそれほど問題とはなりませんが 必ずしも正常な返信電文だけとは限らないから 例、FXからの異常コード返信電文 「NAC、局番号、PC番号、エラーコード」 なので[ETX]が付いてこない また、エラーコードだけじゃあなくて パソコンからFXへの書込みコマンドへの返信も同様 「ACK、局番号、PC番号」 これにも[ETX]が無い まぁ、モニタだけなら問題とはならないでしょうが、、 別の表ワザとして FXをプロトコル形式4で使う これの終了コードはCRLF またエラーコード返信にもCRLFは付いてくる それならアスキー通信で問題は無いのか? と、言うと必ずしもそうでもない ノイズの少ない事務所環境なら概ね問題は無いが ノイズの多い工場環境ではCRLFが来ない可能性も無きにしも非ず

回答No.3

裏技的な方法が有ります。 シリアルポートのNewLineプロパティを<ETX>に設定すれば ReadLine()で<ETX>までのデータを読込むことが出来ます。

回答No.2

ReadLine()はダメでしょう。 シーケンサが送ってくるデータに改行コードが含まれていますか? たとえ含まれていても、ReadLine()で読み込んだら<STX><ETX>のブロック区切りが出来ない。 ReadByte()で1バイトずつ読み込みながら(以下の処理をループ処理)、 STX受信後なら受信データに1文字追加する。 STXが来たら受信データをクリアする。 ETXが来たらブロック完了とする。(受信データを確定する)

回答No.1

シーケンサを扱ってるんだったら、ラインモニタとかロジアナ(orロングメモリのオシロ)くらは あるでしょう。 ないんだったらこの機会に是非そろえるべきです。 困ったと思ったらまずはそれらでデータを確認してみたらどうでしょうか。

関連するQ&A