读书人

【版主进】100分给你了

发布时间: 2013-07-11 15:38:46 作者: rapoo

【版主进】100分给您了
Dear 版主:
哥们我在调试一个Philips的点灯板(输入380V, DC;输出2300V,AC)通过串口进行控制。
我一直使用Serial Port控件,但是我这几天贼郁闷。问题如下:
这个板子你通过串口发命令给它的时候,它会通过串口返回值。
比如发送70 返回70
发送F0 返回 F0
发送F1 返回F1
等等等

但是我现在遇到的问题是:
我放了两个按钮,一个按钮发送70,一个按钮发F0;理论上我发70的时候我会收到70,我发F0的时候会收到F0;但是现在是这样子的:
第一次点70按钮,没任何返回值;第二次点 接收到70
然后点F0,结果收到70,也就是上次的数据,必须再点一次才能收到F0

这个怎么回事呢??

代码:
\\\\\\\\\ 70必须先发送\\\\\\\\\\\

  

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
SerialPortforLampDriver.DiscardOutBuffer()
MessageBox.Show(SendCMDtoDriver("70"))
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
SerialPortforLampDriver.DiscardOutBuffer()
MessageBox.Show(SendCMDtoDriver("f0"))
End Sub


Public Function SendCMDtoDriver(ByVal strCMDSend As String)

Dim bytHex() As Byte
Dim indata As String
Dim byteToRead As Int16 = frmMain.SerialPortforLampDriver.BytesToRead
Dim ch(byteToRead) As Byte
Dim bytesRead As Int16 = 0
ReDim bytHex((Len(strCMDSend) \ 2) - 1)
Dim i As Integer

indata = ""

For i = 1 To Len(strCMDSend) Step 2
bytHex((i - 1) / 2) = Val("&H" & Mid(strCMDSend, i, 2))
Next
frmMain.SerialPortforLampDriver.Write(bytHex, 0, bytHex.Length)
frmMain.SerialPortforLampDriver.DiscardOutBuffer()
Sleep(200)

bytesRead = frmMain.SerialPortforLampDriver.Read(ch, 0, byteToRead)


If bytesRead > 0 Then
For ii As Int16 = 0 To bytesRead - 1
indata = indata & DecToHex(ch(ii))
Next
Return indata
Else

End If

frmMain.SerialPortforLampDriver.DiscardOutBuffer()
End Function



Serial?port
[解决办法]
两个按钮都同时访问一个串口??

点击一个按钮之后访问串口之后,要及时关闭串口
[解决办法]
在SendCMDtoDriver内部单步调试下,问题应该不难发现。
[解决办法]
在SendCMDtoDriver内部单步调试下

读书人网 >C#

热点推荐