用VB6.0实现串口通信
2015-09-06 10:52
465 查看
Function ConvertHexChr(str As String) As Byte
Dim t As String
If Len(str) <= 2 Then '
1位或2位
t = "&H" & str
If IsNumeric(t) Then
ConvertHexChr = CByte(t)
Else
ConvertHexChr = 0 'byte 类型取值范围为 0-255 ,不能为-1
End If
Else
ConvertHexChr = 0 'byte 类型取值范围为 0-255 ,不能为-1
End If
End Function
Function strHexToByteArray(strText As String, bytByte() As Byte) As Integer
'二位16进制转化为 BYTE 数组
Dim j As String
Dim i As Long
Dim o As Long
j = Replace(strText, "", "") '去掉空格
i = Len(j)
If i And 1 = 1 Then '奇数
j = Left(j, i - 1) & "0" & Mid(j, i, 1) '少一位,最后一个数补一位
i = i + 1
End If
strHexToByteArray = i
/ 2
ReDim
bytByte(strHexToByteArray)
For o = 1 To strHexToByteArray
bytByte(o) = ConvertHexChr(Mid(j, o * 2 - 1, 2))
Next o
End Function
字串转为 byte
数组后,再发送.
----------------------------------------------------------
'这个例子中,是读到指定的字符就结束,否则就循环
Private
Sub Form_Load ()
' 保存输入子串的缓冲区
Dim Instring As String
' 使用
COM1。
MSComm1.CommPort = 1
' 9600 波特,无奇偶校验,8
位数据,一个停止位。
MSComm1.Settings = "9600,N,8,1"
' 当输入占用时,
'
告诉控件读入整个缓冲区。
MSComm1.InputLen = 0
' 打开端口。
MSComm1.PortOpen =
True
' 将 attention 命令送到调制解调器。
MSComm1.Output = "ATV1Q0" &
Chr$(13) ' 确保
' 调制解调器以"OK"响应。
'
等待数据返回到串行端口。
Do
DoEvents
Buffer$ = Buffer$ &
MSComm1.Input
Loop Until InStr(Buffer$, "OK" & vbCRLF)
' 从串行端口读
"OK" 响应。
' 关闭串行端口。
MSComm1.PortOpen = False
End
Sub
---------------------------------------------------------
'这个例子中,当
com 口有事件发生时去操作
OnComm 事件示例
下例说明如何处理通讯错误和事件。可以在相关的 Case
语句之后插入代码来处理特定的错误或事件。
Private Sub MSComm_OnComm ()
Select Case
MSComm1.CommEvent
' Handle each event or error by placing
' code
below each case statement
' 错误
Case comEventBreak ' 收到
Break。
Case comEventCDTO ' CD (RLSD) 超时。
Case
comEventCTSTO ' CTS Timeout。
Case comEventDSRTO ' DSR
Timeout。
Case comEventFrame ' Framing Error
Case
comEventOverrun '数据丢失。
Case comEventRxOver'接收缓冲区溢出。
Case
comEventRxParity' Parity 错误。
Case
comEventTxFull '传输缓冲区已满。
Case comEventDCB '获取 DCB]
时意外错误
' 事件
Case comEvCD ' CD 线状态变化。
Case
comEvCTS ' CTS 线状态变化。
Case comEvDSR ' DSR 线状态变化。
Case
comEvRing ' Ring Indicator 变化。
Case comEvReceive ' 收到 RThreshold #
of
chars.
Case comEvSend ' 传输缓冲区有 Sthreshold
个字符 '
'
Case comEvEof '
输入数据流中发现 EOF 字符
'
End Select
End Sub
Dim t As String
If Len(str) <= 2 Then '
1位或2位
t = "&H" & str
If IsNumeric(t) Then
ConvertHexChr = CByte(t)
Else
ConvertHexChr = 0 'byte 类型取值范围为 0-255 ,不能为-1
End If
Else
ConvertHexChr = 0 'byte 类型取值范围为 0-255 ,不能为-1
End If
End Function
Function strHexToByteArray(strText As String, bytByte() As Byte) As Integer
'二位16进制转化为 BYTE 数组
Dim j As String
Dim i As Long
Dim o As Long
j = Replace(strText, "", "") '去掉空格
i = Len(j)
If i And 1 = 1 Then '奇数
j = Left(j, i - 1) & "0" & Mid(j, i, 1) '少一位,最后一个数补一位
i = i + 1
End If
strHexToByteArray = i
/ 2
ReDim
bytByte(strHexToByteArray)
For o = 1 To strHexToByteArray
bytByte(o) = ConvertHexChr(Mid(j, o * 2 - 1, 2))
Next o
End Function
字串转为 byte
数组后,再发送.
----------------------------------------------------------
'这个例子中,是读到指定的字符就结束,否则就循环
Private
Sub Form_Load ()
' 保存输入子串的缓冲区
Dim Instring As String
' 使用
COM1。
MSComm1.CommPort = 1
' 9600 波特,无奇偶校验,8
位数据,一个停止位。
MSComm1.Settings = "9600,N,8,1"
' 当输入占用时,
'
告诉控件读入整个缓冲区。
MSComm1.InputLen = 0
' 打开端口。
MSComm1.PortOpen =
True
' 将 attention 命令送到调制解调器。
MSComm1.Output = "ATV1Q0" &
Chr$(13) ' 确保
' 调制解调器以"OK"响应。
'
等待数据返回到串行端口。
Do
DoEvents
Buffer$ = Buffer$ &
MSComm1.Input
Loop Until InStr(Buffer$, "OK" & vbCRLF)
' 从串行端口读
"OK" 响应。
' 关闭串行端口。
MSComm1.PortOpen = False
End
Sub
---------------------------------------------------------
'这个例子中,当
com 口有事件发生时去操作
OnComm 事件示例
下例说明如何处理通讯错误和事件。可以在相关的 Case
语句之后插入代码来处理特定的错误或事件。
Private Sub MSComm_OnComm ()
Select Case
MSComm1.CommEvent
' Handle each event or error by placing
' code
below each case statement
' 错误
Case comEventBreak ' 收到
Break。
Case comEventCDTO ' CD (RLSD) 超时。
Case
comEventCTSTO ' CTS Timeout。
Case comEventDSRTO ' DSR
Timeout。
Case comEventFrame ' Framing Error
Case
comEventOverrun '数据丢失。
Case comEventRxOver'接收缓冲区溢出。
Case
comEventRxParity' Parity 错误。
Case
comEventTxFull '传输缓冲区已满。
Case comEventDCB '获取 DCB]
时意外错误
' 事件
Case comEvCD ' CD 线状态变化。
Case
comEvCTS ' CTS 线状态变化。
Case comEvDSR ' DSR 线状态变化。
Case
comEvRing ' Ring Indicator 变化。
Case comEvReceive ' 收到 RThreshold #
of
chars.
Case comEvSend ' 传输缓冲区有 Sthreshold
个字符 '
'
Case comEvEof '
输入数据流中发现 EOF 字符
'
End Select
End Sub
相关文章推荐
- vb6 的关机代码
- vba截屏保存
- VB.Net条形码编程的方法
- VB.NET条码机打印设置纸张大小的方法
- VBS中Sendkey键盘对应的码表
- VB.Net与C# 的语法比较
- VB.NET 指针
- vb.net 与 c# 运算符区别
- VB指针操作和消息钩子
- 用VB实现COM+组件配置
- VBS 创建快捷方式
- 按键精灵对VBS的支持
- VB+DX游戏编程教程 第三话:多变的矩阵
- VBA 读取数据创建选择分支,输出txt文档
- 'VB编程 编写一个竞赛评分的函数过程。评委打分为参数(数组参数),选手得分为函数值。记分规则为:去掉一个最高分,去掉一个最低分,然后求平均。调用该函数,由键盘输入5个评委的打分(存放在数组中),输出
- C#/VB:文字移动
- 检测出运动目标后提取边界 两个函数 cvFindContours和cvBoundingRect
- vba判断文件是否存在的两种方法
- 我的开源框架之FFNavbarMenu
- CVBS视频信号解析