当前位置:编程学习 > VB >>

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 ,  网络编程
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,