VB:
一開始我的程式走的很正常,但是到了列印機這里時就會說我“埠已打開”(我查過自己的代碼和電腦之前都沒有打開過任何埠)
然后我在埠打開命令前面加了,如下命令:
If MSComm1.PortOpen=False Then
MSComm1.PortOpen=True
End If
希望能夠避免“埠已打開”的問題,但是卻又會遇到報錯又說我埠沒有打開。
不知道有沒有大俠可以幫助我解決這個問題啊!
uj5u.com熱心網友回復:
你的程式里面是不是重復打開了串口?你最好是單步除錯一下程式,看看問題在什么地方
一般情況下,如果MSComm1.PortOpen=Ture的情況下,你再執行:MSComm1.PortOpen=Ture,那就會報埠已打開。
uj5u.com熱心網友回復:
大神:你說的這個道理我也明白。我也單步除錯過。也沒有發現問題的所在。
而且我覺得下面的三行代碼已經應該屏蔽掉這個問題了,可是還是不行啊?
If MSComm1.PortOpen=False Then
MSComm1.PortOpen=True
End If
uj5u.com熱心網友回復:
是不是你的程式某次非正常關機,串口沒有關閉?建議你把代碼全部貼上來
還有就是重啟一次計算機看看,還會有這個問題不。
uj5u.com熱心網友回復:
不是不想貼代碼,而是代碼太多了,而且牽扯的硬體也很多,要用到幾乎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
uj5u.com熱心網友回復:
在表單的Unload事件中添加:if MScomm1.PortOpen then MSComm1.PortOpen=False
uj5u.com熱心網友回復:
第一 查看一下埠號 串口號 是不是你要打開的那個第二 程式關閉的時候 并不要一定要關閉串口 因為當打開串口的這個執行緒銷毀的時候 系統會自動關閉的
第三 檢查一下是否有第三方程式正在使用串口
搞一個串口監視的軟體 就能看出來了
uj5u.com熱心網友回復:
我也碰到你這樣的問題啊啊啊啊啊啊啊
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/132475.html
標籤:網絡編程
