VB 为什么我的程序,运行时提示“端口已打开“可是我关了端口之后,有提示“只有在端口打开时,操作才有效”
VB:
一开始我的程序走的很正常,但是到了打印机这里时就会说我“端口已打开”(我查过自己的代码和电脑之前都没有打开过任何端口)
然后我在端口打开命令前面加了,如下命令:
If MSComm1.PortOpen=False Then
MSComm1.PortOpen=True
End If
希望能够避免“端口已打开”的问题,但是却又会遇到报错又说我端口没有打开。
不知道有没有大侠可以帮助我解决这个问题啊! 你的程序里面是不是重复打开了串口?
你最好是单步调试一下程序,看看问题在什么地方
一般情况下,如果MSComm1.PortOpen=Ture的情况下,你再执行:MSComm1.PortOpen=Ture,那就会报端口已打开。 大神:
你说的这个道理我也明白。我也单步调试过。也没有发现问题的所在。
而且我觉得下面的三行代码已经应该屏蔽掉这个问题了,可是还是不行啊?
If MSComm1.PortOpen=False Then
MSComm1.PortOpen=True
End If
是不是你的程序某次非正常关机,串口没有关闭?
建议你把代码全部贴上来
还有就是重启一次计算机看看,还会有这个问题不。 不是不想贴代码,而是代码太多了,而且牵扯的硬件也很多,要用到几乎8个COMM口同时工作,然后就只有这个COMM口有问题。我只能贴一部分:
Private D As Port
Private LF As String
Private ESC As String
Private FS As String
Private GS As String
Private frmSerialPort As SerialP
Private Sub Command2_Click()
'''''选择串并口
'''''设置端口的属性
If Combo1.Text = "COM1" Then Com = 1
Debug.Print "com=" & Com
MSComm1.CommPort = Com
Bps = Combo2.Text
Data = Combo3.Text
check = Combo4.Text
sStop = Combo5.Text
MSComm1.Settings = Bps & check & Data & sStop ' 9600 波特,无奇偶校验,8 位数据,一个停止位。
MSComm1.OutBufferSize = 1024 ' 32 byte is the Limit.
MSComm1.InBufferSize = 512
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
MSComm1.InputLen = 1
MSComm1.Handshaking = sControl ' comNone ' Set handshaking
MSComm1.DTREnable = True
MSComm1.RTSEnable = True
MSComm1.PortOpen = True
Set D = frmSerialPort
'''''对象属性设置
Command5.Enabled = True
Command2.Enabled = False
Command3.Enabled = True
Command4.Enabled = True
Check1.Enabled = True
End Sub
Private Sub Command3_Click()
'''''断开端口连接
'清空输出缓存
MSComm1.OutBufferCount = 0
'清空输入缓存
MSComm1.InBufferCount = 0
'端口设置成停止
MSComm1.PortOpen = False
'属性设置,恢复到初始状态
Command5.Enabled = False
Command3.Enabled = False
Command4.Enabled = True
Command2.Enabled = True
Check1.Value = 0
Check1.Enabled = False
Timer1.Enabled = False
''''''''''''''''''''''''
End Sub
Private Sub Command4_Click()
'退出界面操作
End
End Sub
Private Sub Command5_Click()
'***********
''''测试打印ASCII字符
Dim Timer As String
'a = PCSS_USER_Charge_3.BatteryNum * 5
Timer = Format(Now(), "yyyy-MM-dd hh:mm:ss")
D.Output ("感谢使用邮政小车充储柜系统")
D.Output (LF)
D.Output (LF)
D.Output ("卡号:")
D.Output (PCSS_Authentication.RFmessage.Caption)
D.Output (LF) '换行符
D.Output (LF)
D.Output ("扣前余额:")
D.Output (BeforeMoney)
'D.Output (PCSS_Authentication.PrinterCarBalance.Caption)
D.Output ("元")
D.Output (LF)
D.Output (LF)
D.Output ("更换电池数:")
D.Output (PCSS_USER_Charge_3.ChangeSumText.Caption)
D.Output ("块")
D.Output (LF)
D.Output (LF)
D.Output ("使用金额:")
D.Output (str(PCSS_USER_Charge_3.ChangeSumText.Caption * 5))
D.Output ("元")
D.Output (LF)
D.Output (LF)
D.Output ("扣后余额:")
D.Output (PCSS_USER_Charge_4.PrinterCardMoneyToWrite.Caption)
D.Output ("元")
D.Output (LF)
D.Output (LF)
D.Output ("时间:")
D.Output (Timer)
D.Output (LF)
D.Output (LF)
D.Output (LF)
'送GS V m切纸命令
MSComm1.Output = Chr$(29) + Chr$(86) + Chr$(66) + Chr$(0)
End Sub
Private Sub Form_Load()
LF = Chr$(10)
ESC = Chr$(27)
FS = Chr$(28)
GS = Chr$(29)
Combo4.AddItem "N"
Combo4.AddItem "O"
Combo4.AddItem "E"
Combo4.Text = "N"
'**************************
'类属性设置
Set frmParallelPort = New ParallelP
Set frmSerialPort = New SerialP
'**************************
''定时设置
Text1.Text = "1000"
End Sub
在窗体的Unload事件中添加:
if MScomm1.PortOpen then MSComm1.PortOpen=False 第一 查看一下端口号 串口号 是不是你要打开的那个
第二 程序关闭的时候 并不要一定要关闭串口 因为当打开串口的这个线程销毁的时候 系统会自动关闭的
第三 检查一下是否有第三方程序正在使用串口
搞一个串口监视的软件 就能看出来了 我也碰到你这样的问题啊啊啊啊啊啊啊
补充:VB , 网络编程