为什么MSComm.Output=CHr(32)串口接收不到。我急在线等哦
虽小女子分不多我会给的
小女子我先谢谢各位拉。
一鞠躬
再鞠躬
虽小女子分不多我会给的
小女子我先谢谢各位拉。
一鞠躬
再鞠躬
解决方案 »
- MSHFlexGrid列固定问题
- 用VB自带的DataReport,第一次可以正常调用,第二次调用出现:“未能找到存储过程” 的错误??
- 急求提点!!!如何使用二维数组进行两个表的比较
- vb + oralce + 水晶报表8 动态产生数据,动态打印的问题
- 求一函数
- 关于在sql中读取数据进行统计的问题
- 能否实现用dll代替res文件?
- 如何实现右击鼠标出现两列菜单[email protected]
- 基于VB的WORD操作题改卷系统如何制作.请高手帮忙急用
- 以EXCEL为数据源显示在VB窗口内
- DefineDosDevice虚拟的磁盘如何卸载?
- listview和treeview控件实例子!让你看得更透彻!
Private strSendText As String '发送文本数据
Private bytSendByte() As Byte '发送二进制数据'字符表示的十六进制数转化为相应的整数,错误则返回 -1
Function ConvertHexChr(str As String) As Integer
Dim test As Integer
test = Asc(str)
If test >= Asc("0") And test <= Asc("9") Then
test = test - Asc("0")
ElseIf test >= Asc("a") And test <= Asc("f") Then
test = test - Asc("a") + 10
ElseIf test >= Asc("A") And test <= Asc("F") Then
test = test - Asc("A") + 10
Else
test = -1 '出错信息
End If
ConvertHexChr = test
End Function'字符串表示的十六进制数据转化为相应的字节串,返回转化后的字节数
Function strHexToByteArray(strText As String, bytByte() As Byte) As Integer
Dim HexData As Integer '十六进制(二进制)数据字节对应值
Dim hstr As String * 1 '高位字符
Dim lstr As String * 1 '低位字符
Dim HighHexData As Integer '高位数值
Dim LowHexData As Integer '低位数值
Dim HexDataLen As Integer '字节数
Dim StringLen As Integer '字符串长度
Dim Account As Integer '计数
strTestn = "" '设初值
HexDataLen = 0
strHexToByteArray = 0
StringLen = Len(strText)
Account = StringLen \ 2
ReDim bytByte(Account)
For n = 1 To StringLen
Do '清除空格
hstr = Mid(strText, n, 1)
n = n + 1
If (n - 1) > StringLen Then
HexDataLen = HexDataLen - 1
Exit For
End If
Loop While hstr = " "
Do
lstr = Mid(strText, n, 1)
n = n + 1
If (n - 1) > StringLen Then
HexDataLen = HexDataLen - 1
Exit For
End If
Loop While lstr = " "
n = n - 1
If n > StringLen Then
HexDataLen = HexDataLen - 1
Exit For
End If
HighHexData = ConvertHexChr(hstr)
LowHexData = ConvertHexChr(lstr)
If HighHexData = -1 Or LowHexData = -1 Then '遇到非法字符中断转化
HexDataLen = HexDataLen - 1
Exit For
Else
HexData = HighHexData * 16 + LowHexData
bytByte(HexDataLen) = HexData
HexDataLen = HexDataLen + 1
End If
Next n
If HexDataLen > 0 Then '修正最后一次循环改变的数值
HexDataLen = HexDataLen - 1
ReDim Preserve bytByte(HexDataLen)
Else
ReDim Preserve bytByte(0)
End If
If StringLen = 0 Then '如果是空串,则不会进入循环体
strHexToByteArray = 0
Else
strHexToByteArray = HexDataLen + 1
End If
End FunctionPrivate Sub cmdManualSend_Click()
If Not frmMain.ctrMSComm.PortOpen Then
frmMain.ctrMSComm.CommPort = intPort
frmMain.ctrMSComm.Settings = strSet
frmMain.ctrMSComm.PortOpen = True
End If
Call ctrTimer_Timer
If Not blnAutoSendFlag Then
frmMain.ctrMSComm.PortOpen = False
End If
End SubPrivate Sub ctrTimer_Timer()
Dim longth As Integer
strSendText = frmMain.txtSend.Text
longth = strHexToByteArray(strSendText, bytSendByte())
If longth > 0 Then
frmMain.ctrMSComm.Output = bytSendByte
End If
End Sub'初始化
Private Sub Form_Load()
'设置默认发送接收关闭状态
blnAutoSendFlag = False
blnReceiveFlag = False
'接收初始化
intReceiveLen = 0
'默认发送方式为16进制
intOutMode = 1
'初始化串行口
intPort = 1
intTime = 1000
strSet = "9600,n,8,1"
frmMain.ctrMSComm.InBufferSize = 1024
frmMain.ctrMSComm.OutBufferSize = 512
If Not frmMain.ctrMSComm.PortOpen Then
frmMain.ctrMSComm.CommPort = intPort
frmMain.ctrMSComm.Settings = strSet
frmMain.ctrMSComm.PortOpen = True
End If
frmMain.ctrMSComm.PortOpen = False
End Sub如需定时发送,则增加TimerAuto计时器,调整TimerAuto的属性Interval值来控制周期:
Private Sub TimerAuto_Timer()
If Not frmMain.ctrMSComm.PortOpen Then
frmMain.ctrMSComm.CommPort = intPort
frmMain.ctrMSComm.Settings = strSet
frmMain.ctrMSComm.PortOpen = True
End If
Call ctrTimer_Timer
If Not blnAutoSendFlag Then
frmMain.ctrMSComm.PortOpen = False
End If
End Sub
20
程序代码回处理成二进制形式发送。
a = 32
MSComm.Output = a
dim a as byte
a = 32
MSComm.Output = a
这样写,收到的是字符“32”