基于VB6的PC机与多台单片机通信的应用
来源:网络 作者:网络转载 2019-10-08 阅读:316
1 在库房管理系统中,传统的方法是通过干湿度表、双金属式测量计等检测器材进行人工测量,然后对不符合温度、湿度等要求的库房进行通风、去湿、降温等工作。这种人工方式效率低、误差大,随机事件难以预料,使库房管理质量得不到很好的保证。本文所论述的系统是一个用于制药厂仓库的监控和管理系统,上位机(PC机)除负责对下位机(MCS—51单片机)进行监管和控制外,还用于采集下位机传送的数据进行数据库化管理,另外,上位机还可以对库房药品入库、出库、有效期、交易方式等信息进行管理,并可用实时曲线和报表的形式查询。下位机(MCS-51单片机。MCS-51单片机及其外围设备我们称之为库机)负责收集库房中温度、湿度、烟雾等信息并传给上位机。此系统可使办公人员坐在办公室里对远在几百米之位的库房进行监控和管理,不但使办公人员从繁重的体力劳动中解放出来,而且使库房管理快速准确,提高了企业的管理水平和办公自动化水平。 2 系统构成及工作原理 PC机里安装着用VB6编写的仓库管理系统,作为前台操作系统。系统的数据库格式采用VB数据库格式,也称为本地数据库,这类数据库文件使用与 MicroSoft Access相同的格式,数据的存取利用VB6的ADO控件通过MicroSoft Jet (Joint Engineering Technology) 数据库引擎,速度快工作效率高。此管理系统包括进库药品、进库日期、出库药品、出库日期、经手人等的查询,以及药品过期提示等。另外还把库机传送来的数据实时显示并存放在本地硬盘中,以便查询和打印。后台系统是一个上位机与多台下位机通信的通信系统,多台下位机不断从仓库采集温度、湿度、烟雾等数据传给上位机,PC机进行实时显示,并可以设置温度、湿度、烟雾、等参数,单片机根据设定参数来控制仓库里的去湿、降温和报警系统,从而使库房达到预定的环境。如果库房内环境与设定环境不符,单片机就会唤醒降温、去湿设备,把仓库内参数锁定在预定的范围之内,如发生火灾、被盗等意外事件,单片机就会驱动火灾、防盗报警系统,并把信号传给上位机,使其在屏幕上作出显示。 3 PC机与单片机之间的通信 3.1 通信方式的实现 PC机与单片机之间的通信是通过串行口来实现的(如图2)。由于单片机系统电平是TTL电平,与标注RS-232C不兼容,又考虑到通信距离,我们采用Maxim 公司生产的Max485芯片将TTL电平转化为RS-485标准,然后再进行RS-485与RS-232之间的转换,再与PC机的串口连接。这种转换方式延长了通信的距离,zui长可达1200米,提高了系统的可行性。 3.2 通信协议及程序设计思想 本系统由于是一台上位机和多台下位机,所以要给下位机设置一个通信代码,为简单起见,取0~255之间的任意四个即可。当PC机欲与某个单片机通信时,便向所有单片机发出通信代码。单片机在接到代码后与自己的代码进行核对,如果一致则向PC机发出回应,开始通信,其它的单片机继续采集和传输数据。 3.3 上位机程序设计 VB6中有一个专门用来串行通信的控件---MSComm控件。MSComm控件zui常用的属性如下: CommPort属性:设置并返回通信端口号,指定PC机上用于通信的串口 Setting属性:以字符串的形式设置并返回波特率,奇偶校验,数据位和停止位 PortOpen属性:设置并返回通信端口的状态,用于打开和关闭端口 Rthreshold 属性:MSComm 控件设置CommEvent 属性为ComEvReceive并产生OnComm之前设置并返回的要接收的字符数 Input属性:从接收缓冲区返回和删除字符,用于接收数据 InputLen 属性:设置并返回Input属性从接收缓冲区读取的字符数 Output属性:向缓冲区写一个字符,用于发送数据 本系统VB6通信初始化程序如下: mPort = 1 ;选择COM1为通信端口 MSComm1.Setting ="9600,n,8,1" ;设置波特率为9600,无奇偶校验,8个数据位,一个停止位 MSComm1.OutBuffersize =256 ;设置输出缓冲大小为256个字节 MSComm1.RThreshold = 3 ;输入缓冲区里有3个字符时,触发OnComm事件 If Not MSComm1.PortOpen = True Then MSComm1.PortOpen = True ;打开串行口,并防止运行时发生打开同一串口的错误 End If 以上MSComm1是系统默认的MSComm控件的名字(Name)。在初始化完成后通过 MSComm1.Output=OutputString 发送数据,OutputString 是定义的字符型变量(Dim OutputString As String)。一般用定时器的Timer事件来定时发送数据,接到回应字符后则关闭定时器。MSComm控件可以直接把字符串转化成二进制数据形式发送,不需要我们在程序中用算法来转换。每次发送完毕zui好关闭串口。用MSComm1.PortOpen=False来实现。MSComm_OnComm事件可以捕捉通信时发生的错误,也可以接收数据。由于RThreshold的属性值为3,所以当输入缓冲区满三个字符时,就触发MSComm_OnComm事件,通过对接收字符的判断,可以决定主程序分支的去向。 3.4 下位机程序设计 本系统单片机MCS-51通信时用定时器T1工作于定时方式2作为周波发生器,选择11.0592的晶振。由于波特率为9600,所以定时器T1初值取0FDH。初始化还需设置用于控制和监视串行口状态的控制状态寄存器SCON。初始化程序如下: MOV SCON,#0C0H ;通信方式3 MOV PCON,#00H ;SMOD=0 MOV TMOD,#20H ;定时器T1,工作于方式2 MOV TL1,#0FDH ;设置波特率为9600 MOV TH1,#0FDH 单片机始终处于被动状态,只在接收到通信的命令后才进入中断服务子程序发送数据,进入通信状态。PC机与单片机通信时,先发出呼叫信号,单片机接到约定的呼叫信号后,向PC机发出应答信号,表示准备接受,PC机在接到应答信号后则发出通信代码,单片机接到通信代码与本身代码相减,若为0则开始接受命令,设置新的参数;若不为0则继续执行采集数据和发送数据的程序。 3.5 库机的设计 库机设计以单片机为核心,配有EPROM、A/D转换、数码显示、光电隔离和控制电路等。传感器把温度、湿度等非电量转化为电量,通过A/D转换后变为数字量,然后通过单片机的串行通信将数据送往PC机数据库保存。同时,单片机将采集的结果与设定参数进行比较,如若不在规定的参数范围之内或者单片机采集的状态量发生异常,则驱动光电隔离放大器,经过一级放大后就可驱动继电器动作打开降温、去湿设备和报警系统。在这里光电隔离可以有效地避免继电器的误动作,提高了系统的抗干扰能力。