測定機器から、MSCommを使用してデータを受信しようとしている(VBA使用)のですが、Com_Open後の次の送信(Com_Send)データに対する受信はできるのですが、2回目以降の受信ができません。ちなみに、1回目の送信→1回目の受信→Com_Close→Com_Open→2回目の送信→2回目の受信とすると受信できるようになります。また、測定機器は、1データ毎にCRLFを返します。どなたか気がつくことがありましたら、教えてください。
Sub Com_Open()
MSComm1.CommPort = 3
MSComm1.Settings = "9600,E,7,1"
MSComm1.RThreshold=1
MSComm1.Handshaking=ComNon
MSComm1.PortOpen = True
End Sub
Function Com_Send(cmd As String)
Do
DoEvents
If Recv_f=1 Then
Exit Function
End If
(時間制限ループ抜け)
Loop
Com_Send = vbOK
End Function
Prinvate Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive
Recv_buff=Recv_buff & MSComm1.Input
If Right(Recv_buff,2)=vbCrLf Then
Recv_f=1
End If
Case XXXX
・
・
End Select
Sub Com_Close()
MSComm1.PortOpen = Fault
End Sub
Com_Send関数内で、Exit Functionしているのは、Exit Do なのでは?
>MSComm1.Settings = "9600,E,7,1"
>MSComm1.Handshaking=ComNon
意外と珍しい設定をしていますが、送信側がこの仕様で送信していることを
確認してみてください。
↓が一般的です。
MSComm1.Settings = "9600,N,8,1"
MSComm1.Handshaking=comRTSXOnXOff
MSComm1.Handshaking=comRTSXOnXOff
を追加することで解決しました。
ありがとうございました。
ツイート | ![]() |