2024年2月25日发(作者:)
第5卷第3期2006年9月无锡职业技术学院学报JournalofWuxiInstituteofTechnologyVol.5No.3Sep.2006VC++6.0在计算机与多单片机系统通信中的应用张春宝,黄 堃,赵翱东(无锡职业技术学院 江苏 无锡 214121)摘要:该文通过基于RS-485总线连接的主从式网络结构,开发VC++6.0在计算机与多AT89C51单片机之间进行通信的程序。依靠用户自定义的串行口通信协议实现一台上位计算机对多个AT89C51单片机的指挥控制。经实践验证,该通信具有高速、可靠的特点,达到了工业运用中的实际要求。关键词:VC++6.0;RS-485;MSComm;SN75176;单片机中图分类号:TP391 文献标识码:A 文章编号:167127880(23CommunicationofComputerwithMulti-MCUBasedVC++6.0ZHANGChun2bao,HUANGKun,ZHAOAo2dongAbstract:Inthispaper,amethodofserialcommunicationbasedonActiveXaccomplishescorre2spondencebetweencomputerandmulti-MCUwithMicrosoftVisualC++onuser-definedSPCP(SerialPortCommunicationProtocol),thodhasbeenusedinpractice,ds:VisualC++6.0;RS-485;MSComm;SN75176;MCU0 引言工业控制系统中,经常要组成计算机为上位机而单片机为下位机的控制网络,两者一般通过RS-232、RS-422或RS-485串行口进行通信。而Windows工业监控作,控制系统按预定的程序运转。软件开发中,如何实现计算机与多单片机之间的串行通信目前仍是一个较大的障碍,通信机制和数据结构是通信程序设计的关键。本文通过开发基于RS-485总线的VC++6.0在计算机与多AT89C51单片机之间进行通信程序,并应用于某温度采集与控制系统中,达到了工业运用中开发Windows工控软件的实际要求。图1 计算机与多单片机通信连接示意图1.1 选择总线RS-232、RS-422为全双工通讯,RS-485是半双1 系统分析在该系统中,需要一台计算机通过串口控制各区的单片机。图1给出了上位计算机与单片机通信示意图。其中,单片机组成的下位机可实时接收并处理上位计算机发出的指令并报告上位计算机当前温度值。上位机通过串口得到各区单片机的工作情况后,通过用户界面反映出来,同时根据设定的参数操纵下位机执行相应的动收稿日期:2006206213工通讯。RS-232具有传输速率低(异步时约20Kbps)、通信距离短(约50米左右)等缺点。RS-422是在RS-232的基础上发展而来的,具有传输速率高(可达10Mbps)、通信距离长(100Kbps以下可达1219米),但它在同一条传输线上最多只允许10个节点,其中1个主机、9个从机。RS-485又是在RS-422的基础上发展而来的,它除具有与RS-422相同的传输速率和通信距离长),男,江苏无锡人,无锡职业技术学院教师,南京航空航天大学在读研究生。作者简介:张春宝(1977- ・29・
第5卷 无锡职业技术学院学报表1 计算机发送的数据内容内容单片机号写指令读状态写数据读数据格式单片机地址码操作码+指令+校验和操作码+指令+校验和操作码+数据+校验和操作码+校验和操作码无C1HC2HC4HC8H的优点外,还具有更强的多点(同一条传输线上最多可达32个节点)、驱动和冲突保护能力。因此,我们选用RS-485,工业现场控制系统中经常采用该总线标准进行数数据长度(字节)142112据传输。1.2 拓扑结构系统采用主从式结构:即上位计算机为主机,各单片机作为从机,主机发送的信息可传送到各从机和指定的从机,从机不主动发送命令或数据,一切都由主机控制,各台从机之间也不能相互通讯,即使有信息交换也必须通过主机转发。参考图1,各台从机通过RS-485总线驱动芯片SN75176连至总线。SN75176的发送和接收功能转换是由芯片的/RE、DE端控制的,/RE=1,DE=1时,SN75176发送状态;/RE=0,DE=0时,SN75176处于接例如:对1号单片机(地址为01H)进行写动态数据操作时流程如下:(1)主机发出地址编码,建立连接;(2)1号单片机返回收到的地址码;(3)主机发送动态数据。数据长度为11字节,帧格收状态。1.3 通信规则式为:0C4H1由于RS-485通讯是一种半双工通讯,同一时刻,只允许一台单片机处于发送状态。因此要求应答的单片机必须在侦听到总线上呼叫信号已经发送完毕,并且没有其它单片机发出应答信号的情况下,才能应答。要做到总线上的设备在时序上的严格配合,必须要遵从以下几项原则:(1)复位时,各从机都应该处于接收状态。AT89C51・・・・・・动态数据910校验和(4)1号单片机返回收到的动态数据,格式同(3);(5)主机接收后进行校验,校验正确则进入下一程式发送,否则认为通信失败,需要重新进行以上步骤。单片机的一根口线经反向后接至SN75176的/RE和DE端,使得在上电时SN75176处于接收状态。在上电时或正式通讯之前,对串行口做几次空操作,清除端口的非法数据和命令。(2)控制端/RE、DE的信号的有效脉宽应该大于发送3 上位计算机通信程序设计在VC++6.0工程中加入串行通信控件MSComm后,在ClassWizard中为新创建的通信控件定义成员对象(CMSCommm_Comm),通过该对象便可以对串口属性进行设置,以下是通过设置控件属性对串口进行初始化的实例:BOOLCMyFuncDlg::OnInitDialog(){if(m_tOpen())//检测串口是否已经或接收一帧信号的宽度。由于RS∃485为半双工通讯,SN75176的发送和接收都由同一器件完成,并且发送和接收使用同一物理链路,单片机必须对控制信号进行切换。发送时,检测TI是否建立起来,当TI为高电平后关闭发送功能转为接收功能;接收时,检测RI是否建立起来,当RI为高电平后,接收完毕,又可以转为发送。(3)总线上所连接的各单片机的发送控制信号在时打开m_tOpen(FALSE);来//若打开则关闭m_mPort(1);//选择串口com1if(!m_tOpen())来//检测串口是否序上完全隔开,以避免总线争端。2 串口通信协议设计串口通信协议用于完成上位机和下位机之间数据传输功能,简称SPCP(SerialPortCommunicationProto2col)。SPCP设计思想基于帧传输方式,即在向串口发送已经打开m_tOpen(TRUE);//若串口关闭则打开elseAfxMessageBox("串口错误!");//否则显示("串口数据时是一帧一帧地发送。为保证传输可靠,在传输开始前,通过握手建立连接(类似于TCP/IP),在每一帧的传输中,采用发送/应答/重连/失败的方式。上位机发送的数据和指令如表1所示:错误!"消息框m_tings("9600,n,8,1");//端口参数设置m_utMode(1);//以二进制方式检取数据m_reshold(1);//接收缓冲区中有多于或等于1个字符时引发一个・30・
张春宝,黄 堃,赵翱东:VC++6.0在计算机与多单片机系统通信中的应用//接收数据的OnComm事件m_utLen(0);//设置下面函数GetInput()读取字符数,0表全部m_ut();//读取缓冲区字符数}第3期区内字符safearray_input=variant_input;//变量类型转换……//数据处理过程}其它属性均取默认值。注意GetInput()返回的是VARIANT型变量,而在编辑框中显示的是Cstring型变4 结束语以上设计之程序实际运行效果良好,实现了仅用一台上位计算机对多个AT89C51单片机的指挥控制。上位机具有友好的用户界面,可向任一下位机发送控制指令,并能及时反映各单片机的运行情况,简洁直观。参考文献:[1]周志德.单片机原理及应用[M].北京:高等教育出版社,2001.[2]龚建伟,熊光明.VisualC++/TurboC串口通信编程实践[M].北京:电子工业出版社,2004.[3]官章全,刘加明.Visualc++6.0类库大全[M].北京:电子量。其转换过程应为:VARIANT型→ColeSafeArray型→BYTE型数组→Cstring型变量。事件驱动是处理串行端口交互作用的一种非常有效的方法。OnComm事件的CommEvent属性可以捕捉并检查通信事件和错误。双击对话框中CMSComm控件,添加OnComm事件的代码:COleSafeArraysafearray_input;//构造一个COleSafeArray型的数组对象if(m_mEvent()==2)//表示接收缓冲区内有字符{variant_input=m_ut();//读取缓冲工业出版社,1999.(责任编辑胡小勇)(上接第22页)服务器的信息,进行相应处理,并将相应结Web服务器的远程监控系统。由于本系统软件与硬件的果回送给WEB服务器及浏览器。在本系统中CGI在Web服务器内部作为函数处理。系统中通过两个函数来通用性及易扩展性,可以推广到其它应用场合,产生新一代的网络测控设备、信息家电等嵌入式应用系统。这必将大大促进以太网测控系统、信息家电等自动控制设备的发展,成为未来Internet发展中的主力军。参考文献:[1]/IP详解.卷1:协议[M].北京:机械完成CGI的相关工作。HTTPExecCmd函数接受浏览器发送给WEB服务器的信息,并根据用户发送的信息,调用相应的函数进行参数设置和控制执行部件。HT2TPGetVar函数将现场采集的数据传送到浏览器。/IP协议栈及其管理程序工业出版社,2000.18-128.[2]李农.因特网技术在嵌入式系统中的应用[J].测控技术,2000,(4):15-16.[3]饶运涛.现场总线CAN原理与应用技术[M].北京:北京航空由于TCP/IP协议[7]分布在链路层、网络层、传输层和应用层上,是分层实现的,每一层只负责处理通信过程中的一部分问题,其它层不能实现其功能。在进行TCP/IP协议栈程序设计时,根据协议分层的思路采用模块化航天大学出版社,2003.52-212.[4]刘和平.PIC18FXXX单片机程序设计及应用[M].北京:北京的程序设计方法。为了在接收数据包后能根据数据包的类型(ICMP、TCP、UDP等)作出相应的处理。我们设计了协议栈管理航空航天大学出版社,2003.10-201.[5]18FXX8DataSheet[MicrochipDataSheet][Z].2003.78-308.[6]?C18CCOMPILERLIBRARIES[Micro2chipDataSheet][Z].2003.25-96.[7]JeremyBentham.嵌入式系统Web服务器TCP/IPLean[M].北京:机械工业出版社,2003.45-183.程序。当接收到正确的以太网帧后,根据以太网帧的数据类型将接收的数据送至相应的程序模块进一步处理。 五、结束语将Web技术引入现场测控设备中,使基于PIC18FXXX单片机的测控设备通过ISP(Internet服务供应商),在不需要使用PC机的情况下接入互联网,实现基于嵌入式(责任编辑冷宇)・31・


发布评论