当前位置:编程学习 > VB >>

VB串口通讯问题

Private Sub Command1_Click()
    Dim a1 As Byte
    a1 = Val(Text1.Text)
    MSComm1.Output = Chr(a1) + Text2.Text + Text3.Text + _
                     Text4.Text + Text5.Text + Text6.Text + _
                     Text7.Text + Text8.Text + Text9.Text
End Sub

Private Sub Command2_Click()
    Text10.Text = MSComm1.Input
End Sub



Private Sub Form_Load()
   MSComm1.CommPort = 1
    MSComm1.Settings = "9600,n,7,1"
    MSComm1.PortOpen = True
End Sub

上面程序是VB对FX2N-485BD通信,当填入
05  00 FF BW 0 Y0000 05 10011 26,空格为隔开填到文本框的数据,目的是使Y0-Y4 按照10011动作,动作正常,FX2N-485BD回应灯也闪烁,但按按钮2时,始终为空白,不知问题出在那里.谢谢.
--------------------编程问答-------------------- 使用MSComm控件的OnComm事件捕获和处理这些通信事件。
Private Sub MSComm_OnComm() 
  Dim S() As Byte 
  Dim SS(1024) As Byte 
  Static N As Long 
  Static T As Variant 
  If (MSComm.CommEvent = comEvReceive) Then 
  S = MSComm.Input '只要有数据就收进来,哪怕只是一个 
  If (Timer - T > 0.01) Then '间隔10MS以上就认为是一个新的包 
  text1="" 'text1用于搜集和显示接收(HEX格式) 
  N = 0 
  End If 
  T = Timer 
  For i = 0 To UBound(S) '一个数据包可能产生若干个oncomm事件 
  Text1.Text = Text1.Text & Right("0" & Hex(S(i)) & "H", 3) + " " 
  SS(N+i)=S(i) '接收数据包缓存于SS() 
  N=N+UBound(S) 
  Next i 
  End If 
  End Sub
--------------------编程问答-------------------- LS说得对,使用MsComm控件的OnComm事件来接收,此时须设置
MSComm1.RThreshold = 1或待接收的字节数
LS代码中是按2进制方式接收的,但你代码的数据位是7位,建议按字符方式接收.
Option Explicit
    Dim strSj As String
Private Sub Form_Load()
    MSComm1.CommPort = 1
    MSComm1.Settings = "9600,n,7,1"
    MSComm1.RThreshold = 1
    MSComm1.InputMode = comInputModeText
    MSComm1.PortOpen = True
End Sub

Private Sub MSComm1_OnComm()
    Select Case MSComm1.CommEvent
        Case 2
            strSj = strSj & MSComm1.Input
            Text10.Text = strSj
            '请加数据处理代码
    End Select
End Sub
--------------------编程问答-------------------- 2楼 你倒是是个干啥的  学生还是老师  怎么这么闲? 天天混论坛!!

可惜你这个串口混了这么长时间了 也没有混明白
补充:VB ,  非技术类
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,