正文

[接口总线]基于RS485总线的PC机与多单片机系统的串行通信(转)2008-08-11 23:21:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/sword2008/37502.html

分享到:

基于RS485总线的PC机与多单片机系统的串行通信
林 颖,罗金炎,刘 骄,陈 忠,李伟光
(华南理工大学,广东广州510640)
SerialCommunicationBasedonRS485BusbetweenPCandMultisinglechipSystem
LINYing,LUOJinyan,LIUJiao,CHENZhong,LIWeiguang
(SouthChinaUniversityofTechnology,Guangzhou510640,China)
摘要:根据所开发的电子产品故障维修实验系统的要求,提出了一套基于RS485总线的PC机与多单片机系统间的串行通信协议,已成功应用于故障维修实验系统中"
关键词:RS485总线;多单片机;串行通信
中图分类号:TP336
文献标识码:A
文章编号:10012257(2006)01003304
收稿日期:20050902
基金项目:广东省科技攻关项目(2003C102017)
Abstract:Accordingtothefunctionalrequestofafaultmaintenanceexperimentsystemforelec2
tronicalproducts,putsforwardacommunicationprotocolwhichisdesignedforserialcommunica2
tionbasedonRS485busbetweenPCandmultisinglechipsystem.Thisprotocolhasbeenimple2
mentedintheaboveexperimentsystem.
Keywords:RS485bus;multisinglechip;serial communication

0 引言
笔者参与合作开发了一个电子产品故障维修实验系统"利用该实验系统,可以避免传统维修训练中必须进行实物拆装的缺陷"在这个实验系统应用过程中,首先,上位机可根据教学需要生成各种难度级别的实验题目并发送给进行实验的下位机,下位机通过LCD显示接收到的实验题目,并同步接收上位机根据实验题目生成的相应的嵌入式控制器的控制参数"然后,下位机根据接收到的控制参数改变进行维修的电器中的嵌入式控制器的通断状态,使电器电路动态地产生故障,模拟实验环境"。

1 通信系统的硬件设计
RS485是一个多引出线接口,这种接口可以有多个驱动器和接收器,可以实现一台PC与多台单片机间的串行通信,而且其通信距离可达1000m以上,适合远距离传输"因此采用RS485总线建立PC与多单片机的传输网络是可行的[1]"系统硬件部分主要包括2部分:上位机端和下位机端"上位机即为实验室主控PC机,操作系统为Windows2000;下位机在默认情况下为30个单片机实验终端,每个终端由主机和从机2个AT89S52单片机以及键盘!液晶显示器及嵌入式控制器等设备组成"下位机中,主机负责和主控PC
机通讯,从机则根据从主机收到的控制参数控制嵌入式控制器,根据实验需要可模拟电子故障的发生和消除"上位机和下位机的连接利用PC机主机自有的RS232接口,采用S2485转换芯片和RS48总线连接组成通信网络[2]"硬件连接如图1所示"


图1 系统硬件连接
在该系统中,由于采用MAX487差分平衡收发器芯片,半双工传输方式,因此驱动器可接的下位机根据需要最多可扩展至128个"。

2 通信协议的设计
2.1 PC机与多单片机的多机通信原理
上位机的信息可以传送到各个下位机或指定的下位机,下位机发送的信息只能为上位机所接收,各下位机之间不能直接通信"为了实现主控PC机与多单片机的通信,首先要为每一下位机的地址编码用一个字节定义"系统中,下位机主机AT89S52单片机对串口的控制通过SCON控制寄存器实现,SCON各位定义如图2所示"

图2 SCON各位定义
SM0,SM1为串口工作方式选择位,SM2为多机通信控制位,REN为允许串行通信选择位,下位机系统由初试化程序将串口设置成工作方式2或3,SM2=1,REN=1,下位机处于接收状态"TB为方式2!3中发送数据第9位,RB8为方式2!3中接收数据第9位,TI为发送中断标志位,RI为接收中断标志位"系统巧妙地利用下位机SCON中的多机通信控制位SM2来协调PC与单片机的多机通信"如前文所述,各下位机通过初始化程序使得SM2=1当上位机要和某一下位机通信时,将以广播方式向所有下位机发送该下位机的地址帧(第9位被置1),所有下位机在收到上位机的地址帧后,自动将第9数据位状态/10送到各自的SCON中的接收数据第9位,使RB8=1,表示下位机此时收到的是地址信息,由于SM2=1,激发中断标志位RI=1,使下位机将上位机送来的地址和本机地址相比"如果地址不符,则保持SM2=1,对上位机以后发出的数据帧(RB8=0)不予响应,不再激发中断标志RI=0下位机继续等待呼叫"如果下位机的本机地址和接收的地址相符则置SM=0,同时上位机建立与该下位机的通信信道,相应的下位机转入与主机点对点通信状态,此时不论RB8为0或为1,下位机都能激发RI=1,响应上位机的指令"系统正是通过对各下位机SM2和RB8的状态的控制实现了上位机与下位机通信的有效管理"相应地,PC机和下位机的单片机通信,则P机串口信息帧格式必须和AT89S52的信息帧格式相同"AT89S52多机通信信息帧格式如图3所示"


图3 AT89S52多机通信信息帧格式
第9位为下位机SCON中的TB8,是多机通信时下位机发送地址/数据的标志"而PC机的串行通信接口芯片为异步通信适配器INS8250UART其可接收和发送11位数据,格式如图4所示"


图4 数据格式

       比较AT89S52的信息帧格式和INS8250收发数据的格式可知:它们的数据长度相同,不同的仅在于奇偶校验位和位TB8"如果通过软件方法编程控制8250的奇偶校验位,使得在发送地址时为/10,发送数据时为/00,则8250的奇偶校验位可模拟单片机多机通信的TB8位"作者使用VC610作为系统上位机软件开发工具,通过对设备控制块DC(devicecontrolblock)中成员变量Parity的设置可以把串口所发送数据的数据帧的奇偶校验位都置为1即Parity=MARKPARITY,或者都置为0即Parity=SPACEPARITY,从而实现多机通信"

2.2 通信协议

a.通信波特率为9600bit/s,晶振为12MHz,通信的数据格式如前所述,共11位:1位启动位,8位数据位(低位在前),1位可控的第9位和1位停止位"下位机的地址用1个字节定,用16进制表示,如1号机地址为01,10号机地址为0A"约定上位机的地址为00,系统广播地址为FF"

b.上位机监控程序运行时,上位机开始以时间间隔$t对下位机进行轮询以查验下位机的状态,依次向下位机发送查询指令"上位机的查询指令格式和下位机的回复查询指令格式分别如图5所示"

图5 指令格式
       XX为轮询到的下位机地址,01为上位机查询指令;00为上位机地址,02为下位机回复查询指令"对轮询到的下位机,上位机根据下位机回复查询指令查询其状态字,判断其是否有通讯请求,如果没有,就对该下位机发出通讯授权标志,若在预定的时间内有应答,则上位机建立与该下位机的通信信道;若在预定的时间内下位机无应答,则置该下位机不在线标志,然后轮询下一位置的下位机,如此反复"c.上位机与下位机建立通信信道,上位机按照上位机指令优先的原则下,根据下位机的状态字和上位机的状态字,向下位机发出准备接受信息指令"下位机的动作包括登陆!提交实验信息;上位机
的动作有发送实验题目!开始实验!中断实验!恢复实验及查询下位机的实验状况等,在通信协议中都将这些动作进行通讯标志编码,如上位机查询下位机状态指令通讯标志编码为01,开始实验指令编码为0A,下位机登陆指令编码为04"上位机发出的。指令格式如图6所示"


图6 指令格式


XX为与上位机通讯的下位机的地址,YY为上位机功能指令"特别地,上位机发送开始实验指令时,XX可以是下位机地址,也可以是系统的广播地址FF"当XX为FF时,用于向所有实验终端统一发送开始指令"当YY为0A,表示系统中所有的下位机能够同步接收上位机发送的开考指令"数据域是否存在和上位机的功能指令类型有关,如当上位机功能指令为发送实验题目指令时,数据域的内容即为要发送的相关内容;当功能指令为开始实验指令时,数据域为空"在通信过程中,当在一个预定的时间内,上位机没有向下位机发送指令(上位机优先原则失效),这时下位机可向上位机发送指令,下位机发出的指令格式如下如图7所示"


图7 指令格式
00为上位机的地址,YY为下位机功能指令,根据YY的不同,数据域的内容也是不同的,如在下位机请求登陆时,YY为04,数据域为学生姓名!学号d.上位机即PC机能够按照教学的需要生成难易程度不同的实验题目,二进制化后通过发送功能令发送给通讯中的下位机"发送以实验为单位组织格式为实验题号!嵌入式控制器控制字!发送内容长度和实验内容;实验结束后,下位机将实验信息以预定的数据格式通过提交指令发送到上位机"


3 串行通信软件设计
3.1 上位机的软件设计
上位机软件采用VC6.0编程实现"系统采用WindowsAPI通信函数进行串口通信管理"Win3通信API函数把串口操作和文件操作统一起来,串口和其它通信设备是作为文件处理的"串口的打开!关闭!读取和写入所用的函数与操作文件的函数完全一致"在电子产品故障维修实验系统中,上位机处理的命令和数据来自指导老师软件操作和下位机2个方面,因此,在上位机软件的编制中引入了双线程技术,采用线程作为基本的调度单位,分别处理老师操作消息线程和下位机指令线程"上位机软件中设计了单独用于处理指导老师命令的消息线程"指导老师可对指定的下位机发送指令和对全部下位机的广播指令"当上位机发出这些指令时,系统会产生相应的消息数据和相应下位机的地址或广播地址"系统用一个32位的UINT类型数据来存放这些信息"其0~7位为地址数据,~15位为命令数据,且每一个消息数据用一个CUIntArray类型的数组表达"当上位机处理相关的消息线程时,就按照先进先出的原则来取得命令息,再从命令消息中提取命令和相应下位机的地址,上位机系统根据所提取的命令和提取的下位机地址调用相应的处理函数,流程如图8所示"


图8 上位机消息处理线程的流程
在实验过程中,上位机还要实时处理下位机的各种请求如登陆!提交实验信息等,所以上位机系统要每间隔一定的时间向下位机发送查询命令,取得下位机的请求执行相应操作,处理下位机指令线程同时,消息线程要处理来自指导老师的命令,所以设计中把对下位机的查询命令和其它命令放入2个不同的命令栈中,消息处理线程先查询命令消息栈,处理完其中的所有消息之后,再查询消息栈,保证老师操作任何命令都得以优先处理"其关键代码如下[3-5]"
UINTcommander=0;
while(pDoc->m_uiCommand.GetCommand
er(commander))
MainTask(pDoc,commander);//处理所有的
命令
while(pDoc->m_uiCommand.GetIdlerCom
mander(commander))
{ //如果没有命令则处理一个查询的Idler命

IdlerTask(pDoc,commander);
while(pDoc->m_uiCommand.GetCommander(commander))
//处理完一个查询的Idler命令,后可能会根据下位机的请求会有令外的主命令MainTask(pDoc,commander); }


3.2 下位机的软件设计
下位机与上位机的通信采用中断方式实现"下位机与上位机的通信中断程序处理流程如图9所示"


图9 下位机与上位机通信中断程序处理流程
4 结束语
完善!合理的通信协议对串口通信应用来说非常重要"所介绍的多机串口通信协议以及提出的RS485串口的多机串行通信网络,已经在一个电子产品故障维修实验系统中得到成功应用"实际的应用效果表明,本协议及其解决方案能够保证实验系统运行可靠!简便实用及抗干扰性强的应用要求"。


参考文献:
[1] 李朝青.PC机及单片机数据通信技术[M].北京:北京
航空航天大学出版社,2000.
[2] 李 华,等.MCS51系列单片机实用接口技术[M].
北京:北京航空航天大学出版社,1993.
[3] 李现勇.VisualC++串口通信技术与工程实践[M].
北京:人民邮电出版社,2002.
[4] 李 强,贾云霞.VisualC++项目开发实践[M].北
京:中国铁道出版社,2003.
[5] KateGregory.VisualC++6开发使用手册[M].北
京:机械工业出版社,1999.

 

 

http://blog.gkong.com/more.asp?name=forger&id=6399

阅读(5706) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册