日期:2014-05-17  浏览次数:20755 次

【版主进】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)