完了,讀串口設備的程序怎麼寫呀?---高分求教---

loveerror 2003-11-26 03:02:23
想讀取某串口設備中的數據,該怎麼樣實現呢?
可發郵件到:happyerror@163.com
先謝謝了.我很菜,沒辦法,沒做過這方面的事.還請不要笑話.要分只管開口要,我從來就不會下吝嗇分的.
...全文
37 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
loveerror 2003-11-28
  • 打赏
  • 举报
回复
谢谢。
huazai520 2003-11-27
  • 打赏
  • 举报
回复
楼上的,上面好像有一句有点问题。
If Err.Description Then '错误处理
应该改成:If Err.Description <>"" Then '错误处理
因为Err.Description是string型的而不是Boolean型的。
OK,应该就是这样了。
loveerror 2003-11-26
  • 打赏
  • 举报
回复
受益.
yoki 2003-11-26
  • 打赏
  • 举报
回复
'通过串口向一个仪表发送数据,为4个字节,然后仪表会反馈给我一个8个字节的数据,每隔200ms发送一次
'注: 有两个协议,分别应用于两种仪表
' 协议一:发送时,为4个字节,接收数据为8个字节。
' 协议二:发送时,为8个字节,接收数据为10个字节。
Private arrSend(8) As Byte
Private arrSendRead(4) As Byte
Private strFlag As String
Private Sub Form_Load()
With MSComm1
.CommPort = 1
.Settings = "9600,n,8,2" '设置通信口参数
.InBufferSize = 640 '设置MSComm1接收缓冲区为100字节
.OutBufferSize = 512 '设置MSComm1发送缓冲区为80字节
.InputMode = comInputModeBinary '设置接收数据模式为二进制形式
.InputLen = 1 '设置Input 一次从接收缓冲读取字节数为1
.SThreshold = 0 '设置Output 一次从发送缓冲读取字节数为1
.RThreshold = 10 '设置接收一个字节产生OnComm事件
.InBufferCount = 0 '清除接收缓冲区
.OutBufferCount = 0 '清除发送缓冲区
If .PortOpen = False Then '判断通信口是否打开
.PortOpen = True '打开通信口
If Err.Description Then '错误处理
MsgBox "串口通信无效!"
Exit Sub
End If
End If
End With
strFlag = "1" '协议一
strFlag = "2" '协议二
Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer() '200ms触发一次
sendReadDec
End Sub
Private Sub sendReadDec()
On Error GoTo errhandle
MSComm1.OutBufferCount = 0
MSComm1.InBufferCount = 0
If strFlag = "1" Then '协议一
arrSend(0) = &H80 + Hex(1)
arrSend(1) = &H80 + Hex(1)
arrSend(2) = &H52
arrSend(3) = &HC
arrSend(4) = &H0
arrSend(5) = &H0
arrSend(6) = CByte("&H" & Right(CStr(Hex(arrSend(3) * 256 + 82 + 1)), 2))
arrSend(7) = (arrSend(3) * 256 + 82 + 1 - arrSend(6)) \ 256
MSComm1.RThreshold = 10
MSComm1.Output = arrSend
Else '协议二
arrSendRead(0) = &H80 + Hex(1)
arrSendRead(1) = &H80 + Hex(1)
arrSendRead(2) = &H52
arrSendRead(3) = &HC
MSComm1.RThreshold = 8
MSComm1.Output = arrSendRead
End If

Exit Sub
errhandle:
If Err.Number = 8018 Then
MsgBox "端口已经被其它应用程序打开,系统不能正常运行!", vbOKOnly + vbCritical, "端口错误"
End If
End Sub
Private Sub MSComm1_OnComm()
Dim arrReceive(10) As Byte
Dim lngData As Variant '用来从接收缓冲区读取数据
On Error Resume Next
With MSComm1
Select Case MSComm1.CommEvent
Case comEvReceive
RThreshold = 0 '关闭OnComm事件接收
lngData = .Input '读取一个接收字节
arrReceive(0) = lngData(0)
lngData = .Input
arrReceive(1) = lngData(0)
lngData = .Input
arrReceive(2) = lngData(0)
lngData = .Input
arrReceive(3) = lngData(0)
lngData = .Input
arrReceive(4) = lngData(0)
lngData = .Input
arrReceive(5) = lngData(0)
lngData = .Input
arrReceive(6) = lngData(0)
lngData = .Input
arrReceive(7) = lngData(0)
If strFlag = "1" Then
lngData = .Input
arrReceive(8) = lngData(0)
lngData = .Input
arrReceive(9) = lngData(0)
End If
End Select
End With
End Sub
yoki 2003-11-26
  • 打赏
  • 举报
回复
http://www.ccw.com.cn/htm/app/aprog/01_2_26_3.asp
huazai520 2003-11-26
  • 打赏
  • 举报
回复
使用MSCOMM控件是mscomm1.inptu就可以接收串口中的数了。
如:
Private Sub Form_Load()
Dim receivedata As vaviant
Dim loop1 As Integer
MSComm1.PortOpen = 1
Do
loop1 = loop1 + 1
MSComm1.Input = receivedata
If loop1 = 500 Then
Exit Sub
Loop While receivedata = ""
strgood = Asc(receivedata)
End Sub

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧