首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

关于VB6串口通信的,请大家指点1,2 多谢了

2012-03-29 
关于VB6串口通信的,请大家指点1,2 谢谢了我用VB6写了一个PC机用232转485串口与多个单片机通信实时数据采集

关于VB6串口通信的,请大家指点1,2 谢谢了
我用VB6写了一个PC机用232转485串口与多个单片机通信实时数据采集的程序.我用循环向单片机发送指令(指令是00bb到1Fbb,分别对应地址设为00的单片机到地址设为1F的单片机)。每发一个指令,相应的单片机就做出反应(如:发送00bb,然后地址为00单片机就向PC机发送数据),现在我要做成速度比较快的实时数据采集,请问怎么样向单片机发送数据和接收单片机传上来的数据准确率和效率比较高?怎么样能是CPU资源占用降低点?
    请各位高手给点思路??最好给点VB6的参考代码。谢谢各位了~~

[解决办法]
有个问题,你是多个串口发送到每个针对的单片机,还是有个发送,多个接受!

串行通信,速率越低,可靠性越高,越准确,距离越远(俗乎你的程序没必要考虑这些)
你要做的采样速率应该不会比这个高

如果是1托多,强烈建议用低速!因为电平会比较低。。托的太多建议你使用串口服务器,
因为多了直接接你会发现没发工作的!(32个单片机必须要用服务器了)

数据准确率可以通过校验位实现,更多的校验就要自己来做了!

最后说说你说的这个问题,上位机的处理能力完全没问题的!你要做的是在单片机里控制好就可以了,上位机是嵌入式系统的话可以把这些交给串口服务器。。。。。。。。


[解决办法]
假如你采用9600波特率,每秒理论可作一个巡检周期,但由于TIMER控件最短周期为55MS,你32个数据返回需2秒完成。TIMER控件设累加代码来控制地址命令生成:
Option Explicit
Dim sj As Integer
Dim dz As Integer
Private Sub Timer1_Timer()
sj = sj + 1
dz = sj - 1
Text1 = Right(( "0 " & Hex(dz)), 2)
If sj > = 32 Then
sj = sj - 32
End If
End Sub

单片机返回的数据你用16字节长,估计是地址号带数据的。建议在16字节数据前后各增加1引导符和1结束符,接收代码中加入字长判断及引导和结束符判断,符合要求进入接收数据处理代码。
其它纠错如wangtk(斗士) 所说“数据准确率可以通过校验位实现”。

其它需重点注意的是数据的进制转换。

热点排行