【急用】怎么样通过VB向串口发送和接收十六进制指令?

linton 2008-07-17 04:49:57
买了个通过串口接受和发送指令的温度、气压传感器,已经通过串口测试软件测试过,只能发送十六进制指令,形如14 04 00 02 00 01 92 CF。现在想通过VB利用MSCOMM组件编程实现控制,但不知道如何做。大伙帮个忙,谢谢大家来!
...全文
767 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dingguangshe 2010-09-07
  • 打赏
  • 举报
回复
用MSCOMM吧,
MSCOMM.CommPort = 1 //端口号
MSCOMM.Settings = "9600,n,8,1" //通信平率,奇偶校验,停止位
MSCOMM.PortOpen = True //打开端口

MSCOMM.output //发送数据
MSCOMM.Input //接受数据

用timer控件持续不停发送指令读取数据。

对读取数据速度没有很高要求比如几十毫秒读取一个数据可以用MSCOMM,对读取数据速度要求比较高的就得用SPCOMM,了或者用VC吧。

我也是新手,一点不成熟经验,不对的话高手不要拍啊。
bsncw1 2010-09-07
  • 打赏
  • 举报
回复
good
yuanchao1985 2010-07-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zdingyun 的回复:]
VB code

Option Explicit
Dim strData As String

Private Sub Form_Load()
MSComm1.Settings = "9600,N,8,1"
MSComm1.RThreshold = 1
MSComm1.InputMode = comInputModeBinary
MS……
[/Quote]

无论百度,VBGOOD,还是CSDN,我都能见到你的身影,给了我不少帮助。谢谢侬
denis0750 2010-01-26
  • 打赏
  • 举报
回复
ggggggggg
linton 2008-07-20
  • 打赏
  • 举报
回复
非常感谢!已经实现所需功能。
嗷嗷叫的老马 2008-07-17
  • 打赏
  • 举报
回复
貌似没啥说的了-_-
zdingyun 2008-07-17
  • 打赏
  • 举报
回复

Option Explicit
Dim strData As String

Private Sub Form_Load()
MSComm1.Settings = "9600,N,8,1"
MSComm1.RThreshold = 1
MSComm1.InputMode = comInputModeBinary
MSComm1.PortOpen = True
End Sub
Private Sub Command1_Click() '发送2进制字节数据流
Dim sj(7) As Byte '14 04 00 02 00 01 92 CF
sj(0) = &H14
sj(1) = &H4
sj(2) = &H0
sj(3) = &H2
sj(4) = &H0
sj(5) = &H1
sj(6) = &H92
sj(7) = &HCF
MSComm1.Output = sj
End Sub

Private Sub MSComm1_OnComm() '接收数据
Dim strBuff As String
Select Case MSComm1.CommEvent
Case 2
MSComm1.InputLen = 0
strBuff = MSComm1.Input
BytReceived() = strBuff
jieshou
'数据处理代码

End Select
End Sub

Public Function jieshou() '接收数据处理为16进制
Dim i As Integer
For i = 0 To UBound(BytReceived)
If Len(Hex(BytReceived(i))) = 1 Then
strData = strData & "0" & Hex(BytReceived(i))
Else
strData = strData & Hex(BytReceived(i))
End If
Next
End Function

syalan 2008-07-17
  • 打赏
  • 举报
回复
定义一个byte类型的数组放入你要发送的16进制的数据,长度根据需要定
dim a(10) as byte

a(0)=&H16
a(1)=&H04
....



MSCOMM初始化一下

mscDemo.CommPort = 1
mscDemo.Settings = "9600,n,8,1"
mscDemo.InputMode = comInputModeBinary
mscDemo.PortOpen = True



最后

mscDemo.output=a

这只是发送,接收的话用oncomm事件



Private Sub mscDemo_OnComm()


If mscDemo.InBufferCount > 0 Then
SCOM_FirstRev = mscDemo.Input
If RichBox_Show = True Then
If Check2.Value = 1 Then
RichTextBox1.Text = RichTextBox1.Text + ParaDecode(SCOM_FirstRev, True)
Else
RichTextBox1.Text = RichTextBox1.Text + ParaDecode(SCOM_FirstRev, False)
End If
End If

SCOM_TotRecBatch = SCOM_TotRec - SCOM_intBatch * 10000
If Check1.Value = 1 And SCOM_TotRecBatch > 10000 Then
RichTextBox1.Text = ""
SCOM_intBatch = SCOM_intBatch + 1
End If

Label13.Caption = "已收:" + Str$(SCOM_TotRec) + " 字节"
End If

End Sub



类似这样

863

社区成员

发帖
与我相关
我的任务
社区描述
VB COM/DCOM/COM+
c++ 技术论坛(原bbs)
社区管理员
  • COM/DCOM/COM+社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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