在VB串口通信中遇到的一个问题

我现在写了一个VB的串口通信程序,此程序每200ms向COM口发送一个8字节长的HEX数据,以下是代码PrivateSubTimer1_Timer()Dimdata(1T... 我现在写了一个VB的串口通信程序,此程序每200ms向COM口发送一个8字节长的HEX数据,以下是代码

Private Sub Timer1_Timer()
Dim data(1 To 8) As Byte
data(1) = &H89
data(2) = &H01
data(3) = &H7F
data(4) = &H7F
data(5) = &H7F
data(6) = &H0
data(7) = &H0
data(8) = &H0
MSComm1.Output = data
End Sub

现在我希望在通信的过程中动态改变其中一个到几个字节的值
原本
data(1) = &H89
这样就不会报错
但是一旦我将&H89替换为"&H"+a (a为变量名)的时候
如:
data(1) = "&H" + a
VB运行会报错 ERROR13,TYPE MISMATCH
求解决办法
展开
 我来答
hutg1
2012-05-23 · TA获得超过2692个赞
知道大有可为答主
回答量:1464
采纳率:100%
帮助的人:1209万
展开全部
&H 是VB可识别的16进制标志符,指出其后面的数字或字符为十六进制数,它不能动态使用;
"&H"就变成了一个字符串,在赋值给字节变量是,会报类型不匹配;
如果a是一个字节变量,那么久直接用 data(1)=a即可,也能达到你需要的目的;
如果a是其他变量,超过0~255的范围,那就是你的前面程序设计有问题了,就算用&HEX函数也不能解决。
追问
就算定义了A为字节型变量但是仍然是向COM口发送 00 这个数据
追答
楼上说的对,你定义的a是窗体LOAD事件的局部变量,跟你发送程序使用的a虽然名字一样,并不是同一个变量。
你应该把 dim a as byte 放在窗体代码的声明里。
阿KingGz
2012-05-23 · TA获得超过134个赞
知道小有建树答主
回答量:180
采纳率:0%
帮助的人:100万
展开全部
如果a为十进制数,请直接改为:data(1)=a 就可以了。其中a取值为0-255
如果你的a是16进制代码的字符类型,则需要改成:data(1)=int("&H" & a)
更多追问追答
追问
现在遇到一个新的问题,当我给a赋值128的时候,按照以上代码发送给COM口的命令为“00 01 7F 7F 7F 00 00 00”了,就算我使用了十六进制字符,data(1)=int("&H" & a)仍然报类型不匹配
追答
请把a定义成字节(Byte)类型,然后赋值a=128, 在Timer1_Timer()中,改为: data(1)=a
也可以先直接写:data(1)=128 调试下。应该是“80 01 7F...“的。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友dab62c17e
2012-05-23 · TA获得超过2348个赞
知道大有可为答主
回答量:3575
采纳率:33%
帮助的人:1248万
展开全部
类型不匹配,加了" "就是字符型的了
你直接用data(1) = &Hex(a)试试
&H后面是指16进制数,本身不是值。
追问
照你这个代码写会报错
追答
你的变量 a要定义成整形,dim a as interger,而且要赋值好。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ludycui
2012-05-23
知道答主
回答量:14
采纳率:0%
帮助的人:5万
展开全部
很显然的事情,你data数组定义为byte类型,他只能放小于255的数字,而你想把“&H”+ a 付给它肯定不行,你要先把它转成数字才可以
追问
就算解决了报错问题但是他向COM口发送的是一个 “00” 也就是说根本没有读取到变量
追答
那是另外一个问题了,加个hex函数变成hex(&hFF)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-05-23
展开全部
你这样 肯定错!
data 是 Byte 型 数据

data(1) = "&H" + a 是 字符串

祝你顺利 吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式