十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
1、检查串口是否正确,比如COM1,COM2,COM3等;
创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的平乐网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
2、检查波特率是否正确,比如9600,115200等;
3、检查数据位、停止位、校验位是否正确,比如8位数据位、1位停止位、无校验位等;
4、检查串口线是否接好;
5、检查串口是否被其他程序占用,可以使用串口调试助手查看;
6、检查串口驱动是否安装正确,可以在设备管理器中查看;
7、检查程序代码是否正确,可以使用串口调试助手查看。
我处理这个问题的大概过程,当程序响应DataReceived时:
Private Sub MyCOMM_DataReceived(ByVal sender As Object, ByVal e As
System.IO.Ports.SerialDataReceivedEventArgs) Handles MyCOMM.DataReceived
If IsClosing Then Exit Sub '如果界面正在关闭串口则退出过程
Try
IsListenning = True'设置正在读取标记,供界面操作判断
Wait(150)'等待150毫秒
Dim n As Long = MyCOMM.BytesToRead
Dim buf(n - 1) As Byte
Try
MyCOMM.Read(buf, 0, n)
Catch ex As Exception
MsgBox("接收短信出错", "COMPort.DataReceived")
Throw New System.Exception(ex.Message)
Finally
IsListenning = False'无论接收数据成功与否,都关闭正在读取标记
End Try
MyCOMM.Close()
MyCOMM.Open()
'Do SomeThing
Catch ex As Exception
MyCOMM.Close()
MyCOMM.Open()
End Try
End Sub
Protected Sub Wait(ByVal miliseconds As Integer)
Dim tmpNow As Date = Now
While Now.Subtract(tmpNow).Milliseconds miliseconds
Application.DoEvents()
End While
End Sub
希望能帮的上忙
对同一个串口的操作应该放在单个线程里,你的程序应该将串口接收和串口关闭的执行都放在一个线程里进行,这样在接收数据的间隙就可以正常执行close动作。而不会造成两个线程都在操作串口。
我在开始程序运行时候 同时打开两个串口 比如 COM1 和 COM2 当一开始只用到COM1 过段时间后 COM2 会自动关闭? COM2 暂时还没用到。 ------解决方案-------------------------------------------------------- 沙发,帮顶! ------解决方案-------------------------------------------------------- 不会,除非代码中有BUG. ------解决方案-------------------------------------------------------- 不会自动关闭的 或者通过代码关闭 ------解决方案-------------------------------------------------------- 打开后必须关闭的,应该不会自动关闭 ------解决方案-------------------------------------------------------- 用两个SerialPort 对象,分别打开两个串口,应该不会出现你这样的问题。MSDN: SerialPort.Open 方法 每个 SerialPort 对象只能有一个打开的连接。 对于所有应用程序,最佳做法是在调用 Close 方法之后和尝试调用 Open 方法之前等待一会 儿,因为端口可能未即时关闭。 ------解决方案-------------------------------------------------------- 用线程控制个时间,及时开关 不会自动关闭。