在串口通信中,上位机要接受4字节的数据,我这样编写,提示数据类型不对。大家帮我看看。

[复制链接]
查看11 | 回复1 | 2011-5-16 06:03:54 | 显示全部楼层 |阅读模式
PrivateSubMSComm1_OnComm()
Diminbyte(),inbyte1(),inbyte2()AsByte
Dimbuffer1,buffer2AsString
Dimdatatemp1,datatemp2AsSingle
Dimdatatemp3,datatemp3a,datatemp3bAsString
Dimdatatemp4,datatemp4a,datatemp4bAsString
DimcountAsInteger
SelectCaseMSComm1.CommEvent
CasecomEvReceive
count=MSComm1.InBufferCount
inbyte=MSComm1.Input
Ifcount4ThenExitSub
inbyte1=Left(inbyte,16)
inbyte2=Right(inbyte,16)
Fori=LBound(inbyte1)ToUBound(inbyte1)
buffer1=buffer1Hex(inbyte1(i))Chr(32)
Nexti
Fori=LBound(inbyte2)ToUBound(inbyte2)
buffer2=buffer2Hex(inbyte2(i))Chr(32)
Nexti
EndSelect
IfLen(Trim(Mid(buffer1,1,2)))=1Then
datatemp1=Val(\"defds123h\"defds123Mid(buffer1,3,2)defds123Str(\"0\")defds123Mid(buffer1,1,2))*0.1
Else
datatemp1=Val(\"defds123h\"defds123Mid(buffer1,3,2)defds123Mid(buffer1,1,2))*0.1
EndIf
IfLen(Trim(Mid(buffer2,1,2)))=1Then
datatemp2=Val(\"defds123h\"defds123Mid(buffer2,3,2)defds123Str(\"0\")defds123Mid(buffer2,1,2))*0.1
Else
datatemp2=Val(\"defds123h\"defds123Mid(buffer2,3,2)defds123Mid(buffer2,1,2))*0.1
EndIf
IfLen(Trim(Mid(buffer1,1,2)))=1Then
datatemp3a=Str(\"0\")defds123Trim(Mid(buffer1,1,2))
Else
datatemp3a=Mid(buffer1,1,2)
EndIf
IfLen(Trim(Mid(buffer1,3,2)))=1Then
datatemp3b=Str(\"0\")defds123Trim(Mid(buffer1,3,2))
Else
datatemp3b=Mid(buffer1,3,2)
EndIf
datatemp3=datatemp3adefds123\"\"defds123datatemp3b
IfLen(Trim(Mid(buffer2,1,2)))=1Then
datatemp4a=Str(\"0\")defds123Trim(Mid(buffer2,1,2))
Else
datatemp4a=Mid(buffer2,1,2)
EndIf
IfLen(Trim(Mid(buffer2,3,2)))=1Then
datatemp4b=Str(\"0\")defds123Trim(Mid(buffer2,3,2))
Else
datatemp4b=Mid(buffer2,3,2)
EndIf
datatemp4=datatemp4adefds123\"\"defds123datatemp4b
sd.Text=Format$(datatemp1,\"0.0\")
wd.Text=Format$(datatemp2,\"0.0\")
EndSub。
我想编一个下位机发送4字节到上位机,上位机将其分为2个数,用十进制显示。
谁会的,教教我。在线等
回复

使用道具 举报

千问 | 2011-5-16 06:03:54 | 显示全部楼层
什么让我感觉做四字节的好复杂啊还好我那时(很久以前的事了~~)是做八字节的
希望对你有帮助~~~
PrivateSubMSComm1_OnComm()
DimReceiveDataAsSingle
DimtempAsVariant
DimReceiveDataBuffer_h,ReceiveDataBuffer_lAsSingle
IfMSComm1.CommEvent=comEvReceiveThen

i=i1
temp=AscB(MSComm1.Input)

Callufvn_cls\'清前一屏的坐标点
Callufvn_reset\'重绘坐标线

Ifi=1Then
Iftemp=128Then\'下位机发送的标识位确保发送的数据是完整的正确的,以便进入i=2
i=1
Else
i=0
EndIf
EndIf

Ifi=2Then\'接收数据高位
ReceiveDataBuffer_h=temp
Text1.Text=ReceiveDataBuffer_h
MSComm1.InBufferCount=0
EndIf

Ifi=3Then\'接收数据低位
ReceiveDataBuffer_l=temp
MSComm1.InBufferCount=0
Text2.Text=Text1.TextReceiveDataBuffer_l/100
i=0
ufvn(130)=Val(Text2.Text)*24\'把接收的数据转换成坐标值
Forj=1To129\'重绘下一屏的数据以连接成完整的波形图
ufvn(j)=ufvn(j1)\'把数据向前传
Nextj

Callufvn_main\'重绘此刻的波形
EndIf

EndIf

EndSub
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行