基于RS232/485协议的多机通信系统的设计
2021-01-27
来源:好走旅游网
第27卷第6期 2008年12月 南昌工 学院学报 Journal of Nanchang Inslilute of Technology VlJ1.27 N().6 Dec.2oo8 文章编 :J674—0076【2008)06一oo16—04 基于RS232/485协议的多机通信系统的设计 刘萍先 ,曹清华 ,赵筱媛 (】 南昌工程学院机械与动力工程系.江西南昌330099;2.江西财经大学职业技术学院,江西南昌330013) 摘 要:基于RS232/RS485协议,利用MCS51系列单片机和VB6.0及WinAPl函数,完成一对多的数据通信系统设 计,同时对多机通讯编程问题进行了讨论,指出了使用WinAPI函数解决MSCOMM通信控件无法实现的多机通讯问 题的关键点,并提供了一个实现了该方案的电镀槽数据采集与控制系统的实例. 关键词:RS485;VB6.0;多机通讯;串口通讯;MSComm 中图分类号:TN91 文献标识码:A Design of multi-machine communication system based on RS232/485 protocol LIU Ping.xian ,CAO Qing—hua ,ZHAO Xiao—yuan (1.Department of Mechanical and Dynamic Engineefing,Nanchang Institute of Technology,Nanchang 330099, China;2.School of Professional Technique,Jiangxi University of Finance&Economics,Nanehang 330013,China) Abstract:This paper introduces a design based on RS232/RS485 protocol,which has implemented the one— to—many(1:N)communication by applying MCS5I single chip,Visual Basic 6.0 and WinAPI function.Mean— while,the paper analyzes the problem of multi—machine communication,points out the key to the problem that MSComm fails to solve by using the WinAPI function,and presents an example of plating bath data gathering and control system. Key words:RS485;VB6.0;multi—machine communication;serial communication;MSComm 0前 言 在工业领域,主从式的设备监控管理模式应用越来越来广泛.一台上位机同时监控多台下位机(1:N), 相比一台上位机监控一台下位机(1:1)的模式,更具有经济性、方便性和时效性.在一对多的通信模式中,由 于下位机与上位机、下位机与下位机之间的物理位置相距较远,运行环境复杂、干扰大,使用RS232串口通讯 (最长15 m)完全不能达到要求,而通讯距离远(最长1 200 m)、抗干扰能力强的RS485串口通讯协议完全能 够胜任工业中复杂的电磁环境. RS232总线只能实现一对一的通信,RS485总线可挂接32台设备,可进行1:N的通信….而PC机具有 较强的数据分析处理能力,良好的人机界面及大容量数据存储空间,可充当上位机,用来监控下位机的运行 状况.但是,通常Pc机上只有RS232C串口,要使用RS485来进行实现1:N通信,必须将RS232通信协议与 RS485通信协议进行双向转换. 下位机通常采用单片机来实现,也可用可编程序控制器(PLC).MCS51系列单片机具有价格低,功能强, 抗干扰能力好、温限宽和面向控制等特点.Visual Basic6.0以其强大的功能、使用简单、能在短时间内开发出 高效的通信程序而成为Windows系统开发的主要编程语言.VB可直接使用用户自定义控件VBX或OCX文 件;vB可通过调用动态链接库(DLL,dynamic link library)或Win32 API函数来加快应用程序关键部件的执行 收稿日期:2008—08—27 基金项目:南昌工程学院青年基金项目(2006 017) 作者简介:刘萍先(1974一),男,硕士,讲师. 第6期 刘萍先,等:基于RS232/485协议的多机通信系统的设计 l7 速度;VB支持面向对象编程,支持链表存储数据对象,在编程过程中,程序更具结构化,模块化. 1 系统设计 图1为典型的一对多的主从通信控制模式,Pc机充当主机,多台下位机充当从机.由于RS232串口逻辑 电平为一15~一3 V(逻辑1)和+3~+15 V(逻辑0),传送距离最大为15 m,而RS485采用RS422A的通信电 平,为±2~-I-6 V,当速率为9 600 BPS时,传送距离可达1 500 m_2 J.因此,这两种总线必须通过一个电平转 换装置来进行互联.同时,由于下位机使用单片机如AT89S52芯片,只有串行接收(RXD)、发送(TXD)引脚, 只支持TTL电平,与RS485总线电平不匹配,因此不能 直接与RS485总线相连,在电路设计中需增加一 MAX487转换芯片来驱动.与RS422不同,RS485总线 只能处于半双工模式,“收”和“发”不能同时进行,系统 的工作模式只能是一种“应答”工作模式.系统结构如 图1所示. 2系统通信软件设计 图1系统结构图 整个多机通信系统设计的关键在于系统通信模块 的实现.一对多的通信模式有别于单一的一对一通信,它采用主从工作模式 由于通信总线上并挂着多台下 位机,每一台下位机都是平等的.上位机为了能识别下位机,需要对每一台下位机进行编址,即一个类似于以 太网卡MAC地址的十六进制编号.这个地址编号在该RS485总线上是独一无二的.当上位机需要监控目标 下位机时,首先发出具有编号的地址帧于RS485总线上,此时总线上的每一台下位机都将接收到这个地址 帧,并进行判断.若目标地址与自身相符,说明该下位机被选中,要求接收发送监控数据,即收发数据帧信息, 否则,退出并回到接收地址帧状态.数据的交换过程(包括建立连接和交换数据)采用一问一答的方式,上位 机询问了下位机,下位机才给予应答,收到应答后,数据交换才继续进行下去.这样的方式可以避免多个下位 机间没有次序的数据通信,扰乱整个网络上数据的传输. 为了让下位机能够识别地址帧和数据帧,那么在帧结构构成上需要进行单独设计.串行数据以高低电平 来区分0或者1,以一个字节(Byte)为最小单位进行发送,一个Byte为8个二进制位(Bit),另外附加3个位作 为起始位、停止位和奇偶校验位.在选择不使用奇偶校验的情况下,串口一次最小传送10个Bit,如果需要奇 偶校验,则是11个Bit,排列为[起始位][数据位1到8][奇偶校验位儿停止位].起始位和停止位是必不可少 的,可利用的只有奇偶校验位,即习惯中的最9位.令第9位为1,代表该数据为地址帧,令第9位为0代表数 据帧.MCS51系列的单片机中的串行通信模式2、3都支持区分地址帧和数据帧,Microsoft Windows操作系统 同样支持这项功能. 2.1下位机通信程序设计 下位机采用AT89S52芯片,通信程序采用主从工作模式,下位机被动地接收上位机的指令.其程序流程 如图2所示.该程序的关键点在于判断查询地址是否是已方.若是,一是发回确定数据,二是紧接进行相应的 数据接收和发送;否则再次回到接收地址帧状态. 下位机通信中断程序如下: RS232INT: PUSH ACC PUSH PSW CLR RI ACALL SCONDELAY MOV A,SBUF //读串口数据 CJNE A,01H,OUTRS232 //N断地址编号是否与该机编号相符否 CI R SM2 1 8 南吕T程学院学报 2008年 MOV A,掸055I{ //N符,则返剐一个55H数据同,说明查到设备 A{:AI_1.SEN DD-\|rA A(:AI I RECIVEDATA JB 2HI.6.OU'I、RS232 M0V 401 T.A ACA IJ R ECIVEDA FA //接收数据 JIj 2FIt.6,OUTRS232 M0V 4ll{.A ACALL RECIVEDATA JB 2F[I.6,OUTRS232 M0V 2DH.A M0V A.42tt ACALL SENDDATA MOV A.43It ACALL SENDDATA //发送数据 M0V A.44II ACALL SENDDATA M0V A.45H ACALI SENDDATA M0V A.2EH ACAL【 SENDDATA SETB SM2 0UTRS232: 图2下位机通信中断 SETB SM2 处理流程图 POP PSW P0P ACC RETI 2.2上位机通信程序设计 上位机通信程序作为整个系统中的主机,肩负着系统数据采集、指令下达,同时提供信息系统管理功能 的多重任务.其中通信模块是系统中的核心部件.通信模块的实现方法有多种,在VB6.0中,可用:(1) MSCOMM控件;(2)直接调用动态链接库(DLL,Dynamic Link Library);(3)调用API函数的方式. MSCOMM是微软提供的标准通信控件.利用该控件可对串行通信的数据发送和接收进行设置,还可对 串LI状态及串行通信的信息格式和协议进行设置.在通信过程中可以通过触发OnComm事件来追踪、处理通 信和错误事件的发生.或通过查询的方式,在每个重要的程序功能之后检查CommEvent属性值来检测事件和 通信错误.程序设计简单方便,快捷 .但是MSCOMM控件中关于通信的很多参数的设置没有提供,致使特 殊情况下,如多机通信,无法成功通信握手.凋用动态链接库与凋用MSCOMM控件相似.第三种方法通过调 用Windo 底层通信API函数,如WriteFile和ReadFile函数,来发送和接收数据.程序中对串口通信的操作, 与文件操作类似.同时,通信中,可利用DCB(device control block)串口设备控制块,来配置串13参数和串行通 信驱动程序,从而灵活地实现多机通信. 在VB6中,作者专门设计了一个通信类,并定义它的属性和方法,如表1所示.在类的定义中,按照要求 将系统API函数进行包装,对外提供统一的接口. 调用时,可按如下步骤进行: (1)首先将类进行实类化,创建一个通信类(Comm)对象:在Dim AComm as New Comm (2)打开一串行端口,如打开COM1,nmResult=AComm.commOpenPml(1)(3)调用初始化方法,如:nlnRe— 第6期 刘萍先.等:基于RS232/485协议的多机通信系统的设计 l9 suh=AComm.commInit() (4)设置参数,如runResult=AComm.commSetPara(“9600,M,8,l”),这是设置通信波特率9600,标志位M (置串行通信数据格式中的第9位为l,表示地址帧),数据长度8位,停止位1位.若要发送数据帧时,参数设 置方法调用时,实参应为“9600,S,8,1”,s表示空位,即第9位设置为0. (5)发送或接收数据.在发送和接收之前,首先将要发送的数据存放在一个数组中或定义一个空的数组 单元以用于存放接收到的数据.如:runResuh=AComm.commSendData(data) (6)结束通信.AComm.commClose() 通过实验,在通信初始化方法commInit()中,串口设备控制块的参数设置如下参数值时可以成功进行多 机通信连接,而采用系统默认的参数则不能成功连接. lfag=GetCommState(HCF,typDCB) ,==:========:========: 表1 通信类 typDCB.BaudRate=9600 项目 名称:类型 typDCB.ByteSize=8 属性 :tHCF:longtypDCB.DCBlength:28 v。DcB:DcB typDCB.EofChar=0 4-eommOpenPort(comPort:byte):Boolean +commlnit():Boolean -4elearBuffer():Boolean typDCB.ErrorChar=0 +commSelPara(strSettings:Siring) typDCB.EvtChar=0 方法 Boolean -4commSendData(data():Byte):Boolean typDCB.fBitFields=41 13 +eommReceiveData(Buffer():Byte) Boolean typDCB.Parity=4 +commClose() typDCB.StopBits=0 typDCB.wReserved=0 typDCB.XoffChar=19 typDCB.wReserved 1=0 typDCB.XoffLim=512 typDCB.XonChar:17 typDCB.XonLim=2048 typDCB.XonLim=2048 ,========:============ lfag=SetCommState(HCF,typDCB) 设置DCB块.其中, typDCB为设备控制块,HCF为通信控制句柄. 3 实现实例 基于上述系统结构,实现了电镀槽数据采集与控制信 息管理系统软件,如图3所示.上位机系统采用VB6.0编 写,程序大量使用了面向对象的编程思想,并利用数据链表 来存放和遍历数据对象(clsDataofObject)和参数设置对象 (clsSetValueofObject).系统每隔10 S,上位机依次向下位机发 送一条查询指令.下位机接收到指令,返回成功应答数据 m目l 口 目 # ■■q}自 ¨” .:∞ ±’ 1t:0O8 55H,表明主机与从机之间已经成功建立连接,交换数据开 始.最终各个下位机传送来的电压电流数据及工作状态信 图3 电镀槽数据采集与控制信息管理系统软件主界面 息都显示在表格中. (下转第28页) 28 南昌工程学院学报 2008钲 1.5算例 已知参数:冷媒水的进口温度14%,加热水进口温度为90%时,得出的两级吸收式制冷循环变工况运行 的性能曲线.图3所示为冷凝温度变化引起的制冷量的增加(以冷凝温度为32℃的制冷量为基准),从图中 可以看出,随着冷凝温度的降低,两级吸收式制冷循环的制冷量是提高的,在冷凝温度为30%时,制冷量增 加了l】.6%.这是符合基本原理的,因为降低了冷却水温度,就提高了吸收器中溴化锂溶液的吸收能力,可 以降低吸收器中的出口溶液浓度,提高了系统的放气范围,减 少了循环溶液的流量,制冷量也就相应增加. 2 结束语 本文根据两级吸收式制冷循环的循环流程特点,建立了循 环中各个部件的数学模型,编制了溴化锂溶液以及水的热物性 参数的通用计算模块和整个系统的仿真软件,模拟了冷却水温 度变化对两级系统制冷量的影响. 该仿真软件能够有效的模拟各种变工况运行,得出影响系 统的一些重要的参数,从而可以对系统进行最优方案的设计, 优化系统的运行工况,减小系统的不可逆损失,提高热效率,为 太阳能空调的商品化提供了分析手段. 参考文献: 图3冷却水温度与制冷量的关系 【1]Rivera W,Xicale A.Heat transfer coeicifents in two phase lfow for the water/lithium bromide mixture used in solar absorption refrigeration systems[J].Solar Energy Materials&Solar Cells,2001,70:309—320. [2]陈滢,朱玉群,耿玮,等.低温热源驱动的单效/双级(SE/DL)吸收式制冷循环[J].太阳能学报,2002,(1):102—107. [3]高田秋一.吸收式制冷机[M].北京:机械工业出版社,1987. [4]McNeely LA.Thermodynamic properties of aqueous solutions of lithium bromide[J].ASHRAE Transactions,1979,85:413—427. [5]戴永庆,郑玉清.溴化锂吸收式制冷机[M].北京:国防工业出版社,1996. (上接第19页) 4 结束语 系统硬件采用AT89S52单片机和RS一485驱动芯片MAX487组网,通过转换器,将RS485总线与RS232串 口对接.软件采用主从通信协议,下位机采用通信模式2,上位机利用第9位奇偶校验位区分成地址帧和数 据帧,利用VB6.0和WinAPI函数设计上位机软件.通过软件硬件的结合,成功实现了一对多通信.在给出的信 息系统实例中,可以对下位机进行管理,包括删除、添加和修改下位机的参数信息.主机根据这些信息来与地址 匹配的从机通信,完成对整个网络中所有设备的监控. 参考文献: [门王 琦,秦娟英,周 伟.用RS一485构成总线型多点数据采集系统[J].计算机自动测量与控制,2000,8(6):45—47 [2]张筠莉,刘书智.Visual C++实践与提高:串口通信与工程应用篇[M].北京:中国铁道出版社,2006. [3]张红兵,张宁达.郑云萍.VB6.0环境下利用Mscomm控件实现串行通信[J].微计算机信息,2002,l8(12):67—68. [4]李华.MCS一5l系列单片机实用接口技术[M].北京:航空航天大学出版社,1993.