tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル VB RS232C通信(MSComm使用)
投稿日: 2014/04/14(Mon) 17:26
投稿者MON
初めまして,教えていただけないでしょうか。
流れは
・PLC ⇒ OK+CRLF ⇒ PC(Port2受信)
PC(Port1送信) ⇒ E[]+CRLF ⇒ レーザ印字開始

・レーザ印字完了 ⇒ END+CRLF ⇒ PC(Port1受信)
PC(Port2送信) ⇒ E[]+CRLF ⇒ PLC次工程開始

各指令(OK,E[],END)を取りこぼすことなくバッファに取り込みたいです。
下記プログラムでよろしいでしょうか?

Private Sub Form_load() 'イニシャル
MSComm1.CommPort = 1 'レーザー ⇔ PC
MSComm1.Settings = "9600,N,8,1"
MSComm1.PortOpen = True
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
MSComm1.InBufferCount = 0
MSComm1.InputLen = 0

MSComm2.CommPort = 3 'PLC ⇔ PC
MSComm2.Settings = "9600,N,8,1"
MSComm2.PortOpen = True
MSComm2.RThreshold = 1
MSComm2.SThreshold = 1
MSComm2.InBufferCount = 0
MSComm2.InputLen = 0
End Sub

'********** PLC -> PC -> レーザ刻印指令 ***************
Private Sub MSComm2_OnComm()
Dim Buffer10 As String ' 文字列型
Dim Buffer11 As String ' 文字列型
Dim Buffer12 As String ' 文字列型

Buffer10 = "" 'バッファ内クリアー

Do 'OK受信するまで待機
DoEvents()
Buffer10 = Buffer10 & MSComm2.Input
Loop Until InStr(Buffer10, vbCrLf)

Select Case MSComm2.CommEvent
Case ComEvReceive
Buffer11 = MSComm2.Input '受信バッファに転送
Text5.Text = Buffer11 '受信データ表示

If Buffer11 = "OK" Then
Buffer12 = "E[]"
MSComm1.Output = Buffer12 + vbCrLf 'レーザへ開始指令
End If

以下省略
End Select
End Sub

'********** レーザ刻印完了 -> PC -> PLC次工程開始指令 ****
Private Sub MSComm1_OnComm()

Dim Buffer00 As String ' 文字列型
Dim Buffer01 As String ' 文字列型
Dim Buffer02 As String ' 文字列型

Buffer00 = "" 'Bufferクリア

Do 'END受信するまで待機
DoEvents()
Buffer00 = Buffer00 & MSComm2.Input
Loop Until InStr(Buffer00, vbCrLf)

Select Case MSComm2.CommEvent
Case ComEvReceive
Buffer01 = MSComm1.Input '受信バッファに転送
Text3.Text = Buffer01 '受信データ表示

If Buffer01 = "END" Then 'PLCへ刻印完了指令
Buffer02 = "E[]"
MSComm2.Output = Buffer02 + vbCrLf
End if

以下省略
End Select
End Sub

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。