请问VB怎么读取单片机数据?高手请进!!!

比如说单片机发送一串数据:1000 03(1000参数地址是A项电压,03是只读),VB接收到数据,开始解码,比如读第一位是起始码,第二位是功能码(03),第三位是参数地址(1000),当VB读到1000时就知道这个是A项电压的参数地址,并把A项电压的值以十进制数放到TextReceive中。
请问这个接收并解码的程序怎么写?
-------------------------------------------------------------
能实现这个功能的,小弟愿追加50分,谢谢了。
///////////////////////////////////////////////////////////
是通过MSComm控件,串口通信的,请问一楼的大哥,能帮我写下程序吗?
---------------------------------------------------------
Text1.Text = Text1.Text & vbCrLf & code1 '打印数据
请问这个打印的数据放到哪的?这里的Text1是等于我的TextReceive?
----------------------------------------------------------
假如单片机再发送一串数据,VB接收放在TexeReceive1中,是不是这样?
TexeReceive.Text = TexeReceive.Text & vbCrLf & code1 '打印数据
TexeReceive1.Text = TexeReceive1.Text & vbCrLf & code1 '打印数据
是这样写吗?
////////////////////////////////////////////////////////////////////
汗,ddrdd 和qad程序都不能用,我发了100003,接收显示是???,貌似是乱码!
-----------------------------------------------------------------
接收是:MSComm1.InputMode = comInputModeBinary '2进制接收
应该改成什么?

看你这个就知道可能是modbus协议中的,03是读取数据功能码。
我给你个程序你看看,可以帮到你的。
我的建议是这样,在mscomm的oncomm事件里写代码,以前写的vb的找不到了,给你个参考一下吧。
Private Sub mscomm1_OnComm() 'OnComm事件.当接收到的数据到InputLen的大小后就会触发这个事件
Dim code1 As String '定义一个数组.接收缓存中的数据
With MSComm1
Select Case .CommEvent '事件状态.
Case comEvReceive '当MSCOMM1.COMMEVENT的值为COMEVRECEIVE时(也就是为接收状态时,我不知道是不是可以这样理解).就把缓存中的数据存到CODE1里,
code1 = .Input
Text1.Text = Text1.Text & vbCrLf & code1 '打印数据
End Select
End With
End Sub
这里你注意一下,如果是modbus协议后面是有crc校验码,如果不是modbus协议,你可以通过分析接收到的字符串进行数据分析,而不是边接受,边分析。
text1.text可以用你的txtReceive替代。这里是显示在界面的text1文本框里,你那个是保存在变量里面。

你确定一下你的接受方式是字节方式,然后再看一下你modbus协议读取的寄存器地址是不是正确,我一直用C#,所以VB成形的程序没有,也没法给你。如果有数据返回,而你接收到的是乱码,就一个可能,是你MSCOMM的接受方式不对。应该是字节型的,你别搞成ACCISS码。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-08-31
关键是还没有说明白你这读取是通过什么通道??如果串口这个很容易办到,VB有自带的控件,你只要稍微研究一下控件的使用方法就行了。
第2个回答  2010-08-31
sub opencomm()
'打开端口1
with mscomm1
.CommPort = 1
.Settings = "9600,n,8,1"
.InputMode = comInputModeText
.RThreshold = 1
.InputLen = 0
If Not .PortOpen Then .PortOpen = True
end with
end sub

Private Sub mscomm1_OnComm()
Dim code1 As String '定义一个数组.接收缓存中的数据
With MSComm1
Select Case .CommEvent '事件状态.
Case comEvReceive
code1 = .Input
Text1.Text = Text1.Text & vbCrLf & code1 '打印数据
Case comEventRxOver '接收缓冲区满的处理
MsgBox "接收缓冲区满了!" '发出警告
End Select
End With
End Sub

基本就是上面两个过程,一个打开串口,一个接受数据,然后根据你的通讯协议分析你接受的字符串.

子易空间站 - Excel培训专家
相似回答