大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
对同一个串口的操作应该放在单个线程里,你的程序应该将串口接收和串口关闭的执行都放在一个线程里进行,这样在接收数据的间隙就可以正常执行close动作。而不会造成两个线程都在操作串口。
创新互联公司长期为上千余家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为清镇企业提供专业的做网站、成都网站设计,清镇网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。
串口通信最终都是用二进制传输的,你用代码把二进制转化成十六进制就可以了。不需要额外设置。
Read方法读取指定的字节到数组,ReadExisting读取缓冲区所有数据
可以在DataReceived事件中循环接收,然后把接收到的数据根据帧头和帧尾拆分成一条一条需要的纪录,详细的你可以 看下面图片对应的书籍,讲得非常详细
传输Integer 数据类型来传输比较方便.因为Integer 的取值可以是0x0000-0xFFFF .当你把数据发送到目的主机后可以利用Hex() 把接收到的数据从十进制转换到十六进制..
'vb.net的串口接收数据要用到委托
Delegate Sub SetTextCallback(ByVal InputString As String) '声明一个委派类,并声明符合函数参数有一个,而其型态是字符串
Private Sub ShowString(ByVal comData As String)
txt_Re.Text = comData '将收到的数据入接收文字框中--- txt_Re.Text 是接收用的文本框
txt_Re.SelectionStart = txt_Re.Text.Length
txt_Re.ScrollToCaret()
End Sub
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived‘自动接收事件
Dim inData As String = SerialPort1.ReadExisting
Dim d As New SetTextCallback(AddressOf ShowString)
Invoke(d, inData)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click '发送指令
SerialPort1.Write("123")
End Sub
不知道你是不是用51单片机往串口发数据,是的话那是因为51的sbuf最多存放8个字节,所以你发12个字节会分成两次发完。还有在接收的时候最好定义好通信协议,比如加一个侦头,一个侦尾,通过这两个字节的内容来接收数据。
老兄,提问还是给点悬赏分嘛,不要吝啬哪点分,知识是无价的,你给得越多,回答你的人才会越多。