Private Sub Combo1_Click() '獲取串口號
Label6.Caption = Mid(Combo1.Text, 4, 1)
End Sub
Private Sub Combo2_click() '獲取資料格式
Label7.Caption = Combo2.Text
End Sub
Private Sub Command1_Click()
Err.Clear
If Combo1.Text = "請選擇埠號" Or Combo2.Text = "請選擇資料格式" Then
MsgBox "請選擇埠號和資料格式"
ElseIf MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
Command1.Caption = "打開串口"
ElseIf MSComm1.PortOpen = False Then
'MSComm1.PortOpen = True
'MsgBox TypeName(CInt(Mid(Combo1.Text, 4, 1)))
With MSComm1
.CommPort = Val(Mid(Combo1.Text, 4, 1))
.Settings = Combo2.Text
.InputMode = comInputModeBinary
.InputLen = 0 '每次接收位元組數
.SThreshold = 8 '設定成0不會觸發comEvSend事件
.RThreshold = 1 '接收閾值,當收到的位元組數>=1時,觸發接收事件
.InBufferSize = 1024 ' 接受緩沖區大小
.OutBufferSize = 1024 ' 發送緩沖區大小
.InBufferCount = 0
.OutBufferCount = 0
.RTSEnable = True '接收功能使能
On Error Resume Next
.PortOpen = True
End With
Command1.Caption = "關閉串口"
Else
Label9.Caption = "連接斷開!"
End If
If MSComm1.PortOpen = True Then
Label9.Caption = "連接成功!"
Label9.ForeColor = vbGreen
Else
Label9.Caption = "連接斷開!"
Label9.ForeColor = vbRed
End If
'0表示無報錯,初始連接正常
Label10.Caption = Err.Number
End Sub
Private Sub Command2_Click()
Err.Clear
Label9.Caption = "連接斷開!"
Label9.ForeColor = vbRed
If MSComm1.PortOpen = True Then MSComm1.PortOpen = False Else MsgBox "未連接,無需斷開!"
End Sub
Private Sub Command3_Click()
If MSComm1.PortOpen = True Then
Dim cmdstr As String
Dim sdata(8) As Byte
sdata(0) = CByte(&H1) 'CInt(Combo4.Text)
sdata(1) = CByte(&H3)
sdata(2) = CByte(&H6)
sdata(3) = CByte(&H3)
sdata(4) = CByte(&H0)
sdata(5) = CByte(&H1)
sdata(6) = CByte(&H74)
sdata(7) = CByte(&H82)
For i = 0 To 7
If Len(Hex(sdata(i))) = 1 Then '進行處理沒有0的要填充滿
cmdstr = cmdstr & "0" & Hex(sdata(i))
Else
cmdstr = cmdstr & Hex(sdata(i))
End If
Next i
MSComm1.Output = cmdstr
Label12.Caption = cmdstr
Label15.Caption = MSComm1.CommEvent
End If
End Sub
Private Sub Command4_Click() '關閉視窗
If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
Unload Form1
End Sub
Private Sub Command5_Click()
Label11.Caption = ""
Label12.Caption = ""
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
End Sub
Private Sub form_load()
Timer1.Interval = 500 '500ms
Timer1.Enabled = True
Dim i, iCounter As Integer
iCounter = 0
For i = 1 To 16 '回圈檢測串口
MSComm1.CommPort = i
On Error Resume Next
MSComm1.PortOpen = True
If Err.Number <> 8002 Then
MSComm1.PortOpen = False
Combo3.AddItem "COM" & CStr(i), iCounter
iCounter = iCounter + 1
End If
Next i
If Combo3.ListCount > 0 Then Combo3.ListIndex = 0
End Sub
Private Sub MSComm1_OnComm()
Dim inx() As Byte
Select Case MSComm1.CommEvent
Case comEvReceive
Label13.Caption = "進來了?" '...接收顯示資料
inx = MSComm1.Input
'MSComm1.InBufferCount = 0
For k = 0 To 7
tmpstr = tmpstr & "/" & Hex(inx(k))
Next k
Label11.Caption = tmpstr '...接收顯示資料
End Select
End Sub
Private Sub Timer1_Timer() '按照設定時間后進入這里觸發,不過需要全域變數
'Label13.Caption = "Interval=" & CStr(ivisibal * 1)
'If ivisibal Mod 2 = 0 Then '實作閃爍效果
'Command1.Visible = True
'Label13.Visible = True
'Else
'Command1.Visible = False
'Label13.Visible = False
'End If
ivisibal = ivisibal + 1
End Sub
問題:
1、判斷連接是否成功,是否直接用PortOpen=TRUE就行了?還是怎么滴?
2、除去問題1,現在程式和下位機設備連接,如伺服驅動器,哪怕我發送的資料那里寫死,如上所示:
Private Sub Command3_Click()
If MSComm1.PortOpen = True Then
Dim cmdstr As String
Dim sdata(8) As Byte
sdata(0) = CByte(&H1) 'CInt(Combo4.Text)
sdata(1) = CByte(&H3)
sdata(2) = CByte(&H6)
sdata(3) = CByte(&H3)
sdata(4) = CByte(&H0)
sdata(5) = CByte(&H1)
sdata(6) = CByte(&H74)
sdata(7) = CByte(&H82)
For i = 0 To 7
If Len(Hex(sdata(i))) = 1 Then '進行處理沒有0的要填充滿
cmdstr = cmdstr & "0" & Hex(sdata(i))
Else
cmdstr = cmdstr & Hex(sdata(i))
End If
Next i
MSComm1.Output = cmdstr
通過顯示outbuffercount的值為0,好像緩沖區沒有資料,同時OMcomm事件停在0,整了3天了,是在試不出來。
問題3:MSCOMM的屬性里對資料型別有沒有要求,比如說COMMPORT是否一定要轉換成整數如:Cint()(假如說我用變數來傳輸而不是寫死)

和下位機的連接我用現成的串口除錯助手試過,可以讀寫資料,我自己寫的不行。
謝謝!
uj5u.com熱心網友回復:
沒仔細看,里邊好象有不少問題1.PortOpen=True需要確認是否為True,但這個只是確認串口已經用這個控制元件打開,連接是否建立還是要看是否能通訊,不能通訊的話可能通訊引數不對,或者有線路問題等等。
2.你發的內容是Bin的還是ASCII的,沒有16進制串的,現在你發的還是屬于ascii的,如果是bin的,你直接把陣列發出去就好了,sdata定義宣告的時候是sdata(7),然后output=sdata就可以了,
3.沒有強制要求1-16之間的一個數就可以,字串.commport="10"這樣子也可以
uj5u.com熱心網友回復:
你這好象是modbus rtu協議吧http://blog.csdn.net/bakw/article/details/50487609[face]qq:13.gif
看看這個吧[/face]
uj5u.com熱心網友回復:
http://blog.csdn.net/bakw/article/details/50487609轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/268965.html
標籤:VB基礎類
上一篇:求教怎么將一個矩形變換為一個扇環
下一篇:提取地址中的省市區