Electronics 版 (精华区)

发信人: apex ( 巅峰时刻), 信区: Electronics
标  题: 利用VB实现PC机与多台单片机通讯
发信站: 哈工大紫丁香 (2001年05月26日18:01:18 星期六), 站内信件

1.引言
应用IBM-PC系列微机与多台单片机构成的小型分布式系统在工业控制中是一种比较经济
可行的方案。这种系统采用单片机作为下位机,充分发挥其人格低廉、功能强、应用配
制灵活的优点。同时采用IBM-PC系列微机作为系统上位机,弥补单片机数据处理及交互
性操作能力差的不足。简言之,单片机独立的完成数据的采集,并把数据送给PC机,PC
机对数据进行分析和存储管理并回发命令,实现集中控制。由于单片机通讯抗干扰能力
差,系统的实现须解决PC机与多台单片机的通讯问题。
2.系统的硬件接口电路
(图75×40)
由于单片机输入输出的为TTL电平,PC机COM口为RS232电平,同时考虑到RS232通讯距离
的限制,通讯时采用RS485接口标准。设计时分别选用RS485/TTL电平转换芯片75176,R
S232/RS485电平转换模块ADAN4520。单片机通讯端口RXD、TXD、PC机选用COM1口或COM2
,波特率9600b/s,通讯介质选用双绞线。
3.通讯协议及其实现
    (1)下位机通讯的设计
下位机通讯数据格式:
本机地址  帧长  信息段  校验和
    1)PC机与各从机通讯时,从机采用工作方式3及中断方式发送和接受数据。本机地
址指各从机的地址,当一台单片机发现PC机发出的地位与自己的地址相符时,单片机发
地址应答信号。其它从机则不响应。这样保证每次与PC机通讯的只有一台从机。信息段
指底层通讯的数据信息。帧长存放信息段及较验和总共占有的字节长度。最后一位校验
和。
2)为防止通讯超时,在每次通讯开始时设立通讯超时标志。即编写软件定时程序,设置
最长接受时间,超时则终止本次接收。
单片机串行口接收中断程序流程见下图:
(图70×95)
(2)上位机通讯设计
    1)上位机数据的接受和发送采用Visual Basic中的通讯控件MSCOMM,该控件不需要
用户对通讯底层进行操作,是一种简单实用的与下位机通讯的方法。它有事件驱动通讯
和查询两种方式。本例采用事件驱动方式,即接受缓冲区每接受规定字符数产生一次MS
COMM_OnComm事件,发送时设置不产生该事件。
2)由于PC机的串行通讯由接口芯片8250完成。它不具备多机通讯功能。传统的解决办法
是采用汇编、C语言等对8250线路控制寄存器(LCR)进行设置,将奇偶校验位控制为0或
1,充当单片机通讯方式2或3中的第九位数,区别数据与地址信息。由于直接面对机器硬
件,设计烦琐,且易出错。本文介绍的通讯控件MSCOMM,通过对其Setting属性进行设置
,可解决全部问题,使设计变得简单可靠。下面给出部分通讯程序:
1)通讯初始化程序
Private Sub Form_Load()
If  MSComm1.PortOpen=False  Then
MSComm1.PortOpen=True
End  If
MSComm1.CommPort=1’  设置通讯端口
MSComm1.InputLen=0
MSComm1.Rthreshold=1    ’每接受一字符产生中断
MSComm1.Sthreshold=0    ’禁止发送中断
MSComm1.Settings=“9600,N,8,1”   ’设置通讯波特率等
End Sub
2)通讯发生地址、数据初始化子程序
    Public  Sub  Sendaddress (ByVal  Address  As  Byte)
MSComm1.Settings=”9600,m,8,1”  ’奇偶校验位设为m,使发送第九位数据1
MSComm1.Output=Address
End Sub
Public Sub Send Data (ByRef data () As Byte)
MSComm1.Settings=”9600,s,8,1”  ’奇偶校验位设为s,使发送第九位数据0
MSComm1.Output=data()
End Sub
3)通讯接受中断程序
Privata  Sub  MSComm1_OnComm()
Dim  rece()  As  Byte
Dim  inputl  As  Integer
If  MSComm1.CommEvent<>2Then  Exit Sub   ’为确定为接受数据事件
Inputl=MSComm.InBufferCount   ’返回接收缓冲区中等待的字符数。该属性在设计时
无效
ReDim  rece(inputl-1)As  Byte
MSComm1.InputLen=inputl    ’设置并返回Input属性从接收缓冲区读取的字符数。
Rece()=MSComm1.Input       ’将数据存入rece(数组)
……                        ’按协议判断接受数据(略)
4.结束语
本文介绍利用Visual Basic实现PC机与多台单片机串行通讯。既简化了设计又增加了系
统的可靠性。系统运行稳定,界面友好,对远程无人电表抄送以及工业现场控制等均有
参考、使人价值。

--
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: iris.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:6.436毫秒