基于VB6的PC机与多台单片机通信的应用 点击:4163 | 回复:18



xiaolifeidao

    
  • 精华:28帖
  • 求助:0帖
  • 帖子:130帖 | 357回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2006-03-17 16:04:00
楼主
源自单片机世界 基于VB6的PC机与多台单片机通信的应用 在库房管理系统中,传统的方法是通过干湿度表、双金属式测量计等检测器材进行人工测量,然后对不符合温度、湿度等要求的库房进行通风、去湿、降温等工作。这种人工方式效率低、误差大,随机事件难以预料,使库房管理质量得不到很好的保证。本文所论述的系统是一个用于制药厂仓库的监控和管理系统,上位机(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机的串口连接。这种转换方式延长了通信的距离,最长可达1200米,提高了系统的可行性。 3.2 通信协议及程序设计思想 本系统由于是一台上位机和多台下位机,所以要给下位机设置一个通信代码,为简单起见,取0~255之间的任意四个即可。当PC机欲与某个单片机通信时,便向所有单片机发出通信代码。单片机在接到代码后与自己的代码进行核对,如果一致则向PC机发出回应,开始通信,其它的单片机继续采集和传输数据。 3.3 上位机程序设计 VB6中有一个专门用来串行通信的控件---MSComm控件。MSComm控件最常用的属性如下: CommPort属性:设置并返回通信端口号,指定PC机上用于通信的串口 Setting属性:以字符串的形式设置并返回波特率,奇偶校验,数据位和停止位 PortOpen属性:设置并返回通信端口的状态,用于打开和关闭端口 Rthreshold 属性:MSComm 控件设置CommEvent 属性为ComEvReceive并产生OnComm之前设置并返回的要接收的字符数 Input属性:从接收缓冲区返回和删除字符,用于接收数据 InputLen 属性:设置并返回Input属性从接收缓冲区读取的字符数 Output属性:向缓冲区写一个字符,用于发送数据 本系统VB6通信初始化程序如下: MSComm1.CommPort = 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控件可以直接把字符串转化成二进制数据形式发送,不需要我们在程序中用算法来转换。每次发送完毕最好关闭串口。用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机数据库保存。同时,单片机将采集的结果与设定参数进行比较,如若不在规定的参数范围之内或者单片机采集的状态量发生异常,则驱动光电隔离放大器,经过一级放大后就可驱动继电器动作打开降温、去湿设备和报警系统。在这里光电隔离可以有效地避免继电器的误动作,提高了系统的抗干扰能力。 4 结束语 本文所介绍的管理和监控系统是基于VB6的主从式通信结构,可靠性好,可行性强。其硬件结构简单,软件(VB6)编程环境友好,界面灵活,易学易用。本系统可以方便地控制通信对象的选择,实时显示所采集数据,人机对话灵多机动,易于操作。这种单片机与数据库的串行通信技术的应用,为库房管理的发展提供了新的方向。



autoyx.com

  • 精华:0帖
  • 求助:0帖
  • 帖子:32帖 | 634回
  • 年度积分:0
  • 历史总积分:882
  • 注册:2005年9月27日
发表于:2006-03-26 23:13:00
1楼
技术含量很高,在通用性方面要加强,以便能方便推广到别的行业.
希望我们能合作 http://www.autoyx.com/

  • 精华:0帖
  • 求助:0帖
  • 帖子:14帖 | 143回
  • 年度积分:0
  • 历史总积分:239
  • 注册:2006年2月13日
发表于:2006-03-27 02:13:00
2楼
    有收获,还有更详细的吗.

吉他手

  • 精华:0帖
  • 求助:0帖
  • 帖子:124帖 | 188回
  • 年度积分:0
  • 历史总积分:570
  • 注册:2006年1月24日
发表于:2006-03-28 11:42:00
3楼
不错啊,顶
VB6主要用于拿些方面啊,具体啊?

fengqingyundan

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:4
  • 注册:2006年3月30日
发表于:2006-04-07 12:38:00
4楼

fengqingyundan

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:4
  • 注册:2006年3月30日
发表于:2006-04-07 12:45:00
5楼
请教xiaolifeidao:
    当下位机为多机时,请问各分机如何选:当下位机向上位机传送数据时,其余各分机都将进行中断处理,如数据中包含某一分机号,会不会出现多分机同时应答的情况,造成通信阻塞。

fengqingyundan

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:4
  • 注册:2006年3月30日
发表于:2006-04-07 12:45:00
6楼
请教xiaolifeidao:
    当下位机为多机时,请问各分机如何选:当下位机向上位机传送数据时,其余各分机都将进行中断处理,如数据中包含某一分机号,会不会出现多分机同时应答的情况,造成通信阻塞。

tyd73

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:21
  • 注册:2006年3月05日
发表于:2006-04-28 22:11:00
7楼
是否有用winsock 控件实现的以太网的 基于VB6的PC机与多台单片机通信的应用

水货电工

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 6回
  • 年度积分:0
  • 历史总积分:8
  • 注册:2006年5月02日
发表于:2006-05-03 10:04:00
8楼
好文章。顶

liuyangvic

  • 精华:1帖
  • 求助:0帖
  • 帖子:16帖 | 46回
  • 年度积分:0
  • 历史总积分:198
  • 注册:2006年7月09日
发表于:2006-07-11 00:32:00
9楼
好文章,我喜欢!

新手老师傅

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 9回
  • 年度积分:0
  • 历史总积分:41
  • 注册:2006年4月22日
发表于:2006-09-16 19:52:00
10楼
楼主,有用过C8051F系列的单片机吗?
请指导,谢谢

本人处学

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 34回
  • 年度积分:0
  • 历史总积分:46
  • 注册:2004年10月20日
发表于:2008-04-07 19:27:55
11楼
我作了个PC与多单片机通信的系统,PC程序是用VB写的,Mscomm.Settin设置为"9600,M,8,1".单片机SCON设置为工作方式3,SM2为1,晶振为4.194MH,记数初值为#0FEH,
但是,单片机始终接收不到地址数据,如把SM2置0的话,接收数据正常.
请问各位高手指点一二.

矛盾运动

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 5回
  • 年度积分:0
  • 历史总积分:35
  • 注册:2003年9月15日
发表于:2008-04-13 15:28:12
12楼

我在用VB6作智能仪表和PC机的通信,但从未学过VB,迫于时间,向网上高手请教,能否提供相关程序实例,十分感谢!

感谢楼主的指教!

矛盾运动

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 5回
  • 年度积分:0
  • 历史总积分:35
  • 注册:2003年9月15日
发表于:2008-04-13 15:28:12
13楼

我在用VB6作智能仪表和PC机的通信,但从未学过VB,迫于时间,向网上高手请教,能否提供相关程序实例,十分感谢!

感谢楼主的指教!

空空如也

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 100回
  • 年度积分:0
  • 历史总积分:173
  • 注册:2003年9月14日
发表于:2008-07-18 21:32:02
14楼
一个问题,PC机的处理及时吗?

TXP21985

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:15
  • 注册:2008年4月21日
发表于:2008-07-27 09:35:14
15楼

写的太粗略了啊!

没什么实际的内容

Dī调Dē华丽

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 17回
  • 年度积分:0
  • 历史总积分:170
  • 注册:2007年10月25日
发表于:2008-10-21 19:43:18
16楼
2、单片机防盗报警系统
功能要求:
单片机防盗报警系统用于集中检测报警,能对受控制的多个点进行实时检测,当检测到一个或多个点有报警信号时,能用声和数码显示出报警地点。当检测到有报警信号时,为防止误报,该系统延时1秒钟再检测一次,若确实有情况才报警。该系统的传感器可选用接触式、断开式等开关量传感器,也可以组成相应的控制和报警系统。
设计要求:
(4) 查阅大量资料,了解当前基于单片机的防盗报警系统的研究状况。
(5) 设计单片机防盗报警系统的硬件部分,并说明各部分工作原理与具体电路。
(6) 设计单片机防盗报警系统的软件部分,画出各部分流程图,并编制部分程序。

怎样设计阿谢谢指点?发到我的邮箱xuxigan@sina.com谢谢

黄新明

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:2
  • 注册:2008年11月26日
发表于:2008-11-26 22:38:02
17楼
回复内容:
对:本人处学 关于我作了个PC与多单片机通信的系统,PC程序是用VB写的,Mscomm.Settin设置为"9600,M,8,1".单片机SCON设置为工作方式3,SM2为1,晶振为4.194MH,记数初值为#0FEH,
但是,单片机始终接收不到地址数据,如把SM2置0的话,接收数据正常.
请问各位高手指点一二.
内容的回复:


51单片机的串行口工作于方式3时,为11位异步接收,当接收到第九位数据后,只有当RI=0且第九位为1或sm2=0时,数据接收才正常

黄新明

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:2
  • 注册:2008年11月26日
发表于:2008-11-26 22:40:10
18楼
回复内容:
对:空空如也 关于一个问题,PC机的处理及时吗? 内容的回复:


那要看具体情况。。。。

热门招聘
相关主题

官方公众号

智造工程师