vb mscomm的奇怪问题(30分)

  • 主题发起人 主题发起人 wjwwj
  • 开始时间 开始时间
W

wjwwj

Unregistered / Unconfirmed
GUEST, unregistred user!
我想做的用轮询法查看单片机里面有没有数据,我用下面的代码处理串口,这段代码是放在一个定时器的,就是用定时器不断的发命令
If MSCom_Assess.PortOpen And g_PortOpened = False then

MSCom_Assess.PortOpen = False
MSCom_Assess.InBufferSize = InBSize
MSCom_Assess.OutBufferSize = OutBSize
MSCom_Assess.InputMode = comInputModeBinary '设置数据接收模式为二进制形式
MSCom_Assess.CommPort = PortNum
MSCom_Assess.PortOpen = True
g_PortOpened = True
End If
If MSCom_Assess.PortOpen = False And g_PortOpened = False then
MSCom_Assess.InBufferSize = InBSize
MSCom_Assess.OutBufferSize = OutBSize
MSCom_Assess.InputMode = comInputModeBinary '设置数据接收模式为二进制形式
MSCom_Assess.CommPort = PortNum
MSCom_Assess.PortOpen = True
g_PortOpened = True
End If

MSCom_Assess.OutBufferCount = 0
MSCom_Assess.InBufferCount = 0
MSCom_Assess.Output = "FFAA0"
会出现"port already open"的提示,但我查看MSCom_Assess.PortOpen确是false,但是一运行到MSCom_Assess.PortOpen = True时就会出现"port already open"的提示,我又用MSCom_Assess.PortOpen = False来试,却提示"the device is not open",之后串口就怎么也不能用了,只有重启计算机才正常。
这是什么问题呢?我的分只有这么多了,请各位不吝赐教,谢谢!!!
 
建议改换门庭,用线程+API
 
我有些奇怪,你为什么每次通许都打开串口一次,这样费时,而且没有必要的。
你一次启动软件只需要进行通讯口一次,然后就进行设置就好。
在发送数据之前,你最多进行输入缓冲区清除就好。
 
是啊,我也是只打开一次,我加了个全局变量,g_PortOpened = True就表示打开过一次拉,这样就不会进入那两个判断条件了。
 
奇怪的问题。
控件自己打开端口了?但是又没有设置打开标识?
 
If MSCom_Assess.PortOpen = False And g_PortOpened = False then
MSCom_Assess.InBufferSize = InBSize
MSCom_Assess.OutBufferSize = OutBSize
MSCom_Assess.InputMode = comInputModeBinary '设置数据接收模式为二进制形式
MSCom_Assess.CommPort = PortNum
MSCom_Assess.PortOpen = True
g_PortOpened = True
End If

MSCom_Assess.OutBufferCount = 0
MSCom_Assess.InBufferCount = 0
MSCom_Assess.Output = "FFAA0"
会出现"port already open"的提示,但我查看MSCom_Assess.PortOpen确是false,但是一运行到MSCom_Assess.PortOpen = True时就会出现"port already open"的提示,我又用MSCom_Assess.PortOpen = False来试,却提示"the device is not open",之后串口就怎么也不能用了,只有重启计算机才正常。
前面那一段不要也是同样的问题
 
有时候的确会遇到这样的问题,你是在一个机子上试验的吧,换成双机就不会有问题了,单机比较不好弄,这是最简单的办法
 
多人接受答案了。
 
后退
顶部