こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

RS232C通信(PC⇔PLC)

PCとPLCでシリアル通信を行っています。PLCからPCへステータス受信要求し、PCから正常アンサーがあればPLCからPCへ処理開始指令コマンドが出力されるというプロトコルです。実際には、PC側ステータス正常の場合、PLCへの正常アンサーを出力するところまでは行くのですが、その直後にPLCから送信されているはずの処理開始指令コマンドを受信することができません。一連のコマンド送信・受信の間隔が狭すぎるのかと思い、PLC側で処理開始指令コマンド送信前に10msecのウェイトを設けるとPC側で受信することができました。(PLC側の送信が悪いのか、PC側の受信に問題があるのか不明ですが、、、)
シリアル通信では、上記のような問題が発生しないように送受信の間隔等なんらかの規約が定められているのでしょうか??ウェイトを設けることなく通信を行いたいのですが、考えられる対処法を教えていただけませんでしょうか。よろしくお願い致します。
なお、通信機器の仕様は以下の通りです。
PLC:三菱シリアルコミニケーションユニット QJ71C24N-R2
PC:WinXpSP2、COMポート、VisualBASIC6.0のCommイベントによりデータ受信(10msecウェイトなしでは、処理開始指令コマンド送信時にCommイベントが発生しませんでした。)
※アスキー文字、PLC・PCともに送信終了コード(CR+LF)でバッファデータ読込み

投稿日時 - 2007-04-28 15:48:59

QNo.2957186

困ってます

質問者が選んだベストアンサー

>シリアル通信では、上記のような問題が発生しないように・・・
そんなことはありません。
まあ、ウエイトもプロトコルと言えばプロトコルでしょうが、
そういう問題ではないと思います。

COMポートのオープン処理はこんな感じ
strBps = "9600,N,8,1" '9600bps、パリティなし、8ビット、ストップ1
MSComm1.CommPort = p_PortNo 'ポート番号の指定
MSComm1.Settings = strBps 'オープンパラメータ
MSComm1.InputLen = 0 'バッファ全体を読み取るようにする
MSComm1.InputMode = comInputModeBinary
MSComm1.PortOpen = True 'ポートをオープン
MSComm1.NullDiscard = False
MSComm1.Handshaking = comNone
MSComm1.RTSEnable = True
MSComm1.RThreshold = 1

COMの割り込みイベントはこんな感じ

Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive
varDatas = MSComm1.Input
End Select
End Sub

投稿日時 - 2007-05-01 10:20:31

お礼

ご回答ありがとうございます。
申し遅れましたが、当方では下記の通り記述しています。示していただいたサンプルよりも
設定項目は少ないですが、ボーレートやパリティ以外は基本的に同じだと思います。いかが
でしょうか?
また、MSCommイベント自体発生していないので、Private Sub MSComm1_OnComm()以下の
記述が違っていることは関係ないと思います。再度ご返信・アドバイスいただければ幸いです。


Private Sub Form_Load()
’COMオープン
' 入力文字列用バッファ。
 Dim Instring As String
' COM1 を使用します。
 MSComm1.CommPort = 1
' 19200bps、偶数パリティ、データ長 8 ビット、およびストップ ビット長 1。
 MSComm1.Settings = "19200,E,8,1"
' Input プロパティ使用時に、バッファ全体を読み取るように設定します。
 MSComm1.InputLen = 0
' ポートを開きます。
 MSComm1.PortOpen = True

 MSComm1.RThreshold = 1
End Sub

Private Sub MSComm1_OnComm()
 Dim RS_Buff As String
 RS_Buff = MSComm1.Input
End Sub

投稿日時 - 2007-05-01 13:28:15

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

僕とあなたのコードの違いは
RTSを出しているか否かですから、
ハードウエアハンドシェークを使っていなければ
動作に違いはありません。(試しました)

解析は通信モニターなどで行いますが
PCでも、見ることが出来るので
他のPCを接続してモニターしてみたら
いかがでしょうか?
プログラムはどこかから探してもいいし、
ほとんど先のコードでいいと思います。

PLCの代わりにPCを繋いで見るのも
いいかもしれません。

投稿日時 - 2007-05-01 19:51:36

お礼

ありがとうございます。度々すみません。

>動作に違いはありません。(試しました)
ウェイトなしで動作しましたでしょうか?

>一度PCを繋いで見るのもいいかもしれません。
PCもしくは232Cラインモニタで確認してみます。

投稿日時 - 2007-05-02 08:49:08

あなたにオススメの質問