上面的代码看不出问题,如果初始化串口控件时已经注册了AxMSComm1_OnComm,有数据接收应该能触发,至于为什么没有触发,要看看你的接收方是否已经收到你的发出指令,是否已经有响应数据回发。
创新互联建站专注于蓝山网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供蓝山营销型网站建设,蓝山网站制作、蓝山网页设计、蓝山网站官网定制、小程序设计服务,打造蓝山网络公司原创品牌,更为您提供蓝山网站排名全网营销落地服务。
建议分开调试,用一个通用的串口助手,如格西烽火串口助手之类的,分别调试你的上位机和下位机。格西烽火串口助手能轻松的定制如你上面的发送数据。
Do
Application.DoEvents()
Loop Until MSComm1.InBufferCount = 13
Dim a As String = MSComm1.Input
Label1.Caption = a.Substring(1, 9)
Label2.Caption = a.Substring(10, 3)
用PC机的9针RS232接口,用VB6 含有的MSComm 控件编程
两台PC机串行通信串行口的接线图:
'==============================
'PC机串行口用命令按钮启动接收/发送VB程序
Private Sub Form_Load()
MSComm1.PortOpen = True '开启通信控件的端口
End Sub
'点击“发送”命令按钮发送数据
Private Sub Command1_Click()
MSComm1.Output = Text1.Text '将文本框Text1的数据发送至对方
End Sub
'点击“接收”命令按钮接收数据
Private Sub Command2_Click()
Dim st As String
st = MSComm1.Input
Text2.Text = st '将接收到的数据至入文本框Text2
End Sub
'==============================
’PC机串行口定时自动接收/发送VB程序
Private Sub Form_Load()
MSComm1.PortOpen = True '开启通信控件的端口
Timer1.Interval = 100 ’自动传送时间间隔100毫秒
End Sub
Private Sub MSComm1_OnComm()
Dim st As String
If MSComm1.InBufferCount 0 Then
st = MSComm1.Input
Text2.Text = st '将收到的数据放入Text2文本框
End If
End Sub
Private Sub Timer1_Timer()
MSComm1.Output = Text1.Text '发送Text1文本框内容
End Sub
串口通信最终都是用二进制传输的,你用代码把二进制转化成十六进制就可以了。不需要额外设置。
关于串口通讯的问题:
很明显,你还不知道(不会、不习惯)使用事件驱动的方式接收数据。
建议你仔细看看串口组件(无论VB6还是VB.net)的OnComm事件,你的问题很容易解决。
关于以太网通讯:
在TCP通讯中端口确实可以重用,你百度一下“TCP端口重用”能查到很多示例。
但绝大多数情况下不推荐端口重用,而应该采取服务器端建立连接池的方法。
或者,干脆不用TCP,用UDP解决也可以。