
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)でバッファデータ読込み
No.1ベストアンサー
- 回答日時:
>シリアル通信では、上記のような問題が発生しないように・・・
そんなことはありません。
まあ、ウエイトもプロトコルと言えばプロトコルでしょうが、
そういう問題ではないと思います。
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
ご回答ありがとうございます。
申し遅れましたが、当方では下記の通り記述しています。示していただいたサンプルよりも
設定項目は少ないですが、ボーレートやパリティ以外は基本的に同じだと思います。いかが
でしょうか?
また、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
No.2
- 回答日時:
僕とあなたのコードの違いは
RTSを出しているか否かですから、
ハードウエアハンドシェークを使っていなければ
動作に違いはありません。(試しました)
解析は通信モニターなどで行いますが
PCでも、見ることが出来るので
他のPCを接続してモニターしてみたら
いかがでしょうか?
プログラムはどこかから探してもいいし、
ほとんど先のコードでいいと思います。
PLCの代わりにPCを繋いで見るのも
いいかもしれません。
ありがとうございます。度々すみません。
>動作に違いはありません。(試しました)
ウェイトなしで動作しましたでしょうか?
>一度PCを繋いで見るのもいいかもしれません。
PCもしくは232Cラインモニタで確認してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ルーター・ネットワーク機器 PLCアダプターのスピード 6 2023/03/04 11:04
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- その他(インターネット接続・インフラ) PLC通信の危険性やデメリットは? 4 2022/10/31 19:06
- Gmail gmail から docomo メールに送信できません 4 2022/06/25 00:41
- Outlook(アウトルック) メール送信できない 3 2022/07/20 09:07
- その他(メールソフト・メールサービス) PCでメールは発信について 6 2022/08/13 09:23
- その他(メールソフト・メールサービス) サンダーバードメールにて数万件の受信メール対応方法 2 2023/01/27 13:38
- 消費者問題・詐欺 チューナーなしテレビとNHKが映らないテレビ 8 2022/11/22 20:37
- その他(メールソフト・メールサービス) メールサーバーは「PC側がメールをDL済みか否か?」を何を以て感知するのか? 2 2022/12/20 14:56
- ドライブ・ストレージ RS232C 通信でエラー(受信が正確でない)がでます。どなたか教えてくださいませ。 11 2022/09/03 11:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
RS-232Cでバイナリデータを受信...
-
Linuxでのシリアル通信について...
-
write関数でEAGAINのエラー発生...
-
WriteFile()でのデータ送信がで...
-
「スイッチングハブのバッファ...
-
ReadFile(GPSとの通信)Win7で...
-
winsockの動作について。
-
WinsockAPIのrecvfromの受信デ...
-
rs232cでの受信データ(mscomm)...
-
C# シリアル通信でデータ受信...
-
C#で通信処理。応答がない場合...
-
再現性の無いバグ
-
Access Violationについて
-
WSH(VBScript)でアプリケーショ...
-
Macターミナルで実行中のプログ...
-
SetWindowPosについて
-
vba listviewにおけるtextのAli...
-
複数スレッドを動作させるのに...
-
SQLの速度をあげるには・・・
-
オフスクリーンサーフェスへの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# シリアル通信でデータ受信...
-
「スイッチングハブのバッファ...
-
winsockでソケット通信の開発を...
-
シリアル通信の出力バッファと...
-
WriteFile()でのデータ送信がで...
-
Linuxでのシリアル通信について...
-
WinsockAPIのrecvfromの受信デ...
-
socket: recvはいつ,どれだけ...
-
SerialPortのDataReceivedイベ...
-
ClearCommError呼び出し時のCE_...
-
TCPでの非同期型select関数につ...
-
シリアルポート通信
-
シリアル通信 大きいサイズの...
-
winsockの動作について。
-
ソケット通信内 read関数について
-
COMポートの同時オープン同時読...
-
SocketのSend関数でのCLOSEの検...
-
waveIn、waveOutでの音声録音・...
-
write関数でEAGAINのエラー発生...
-
rs232cでの受信データ(mscomm)...
おすすめ情報