




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业设计说明书(论文)作 者: 高宇 学 号: 0707240515 学 院:自动化工程学院 班 级: 自动075班 专 业:自动化 测控技术与仪器所 在 系:控制科学与工程 仪器科学与技术题 目: 计算机串口通信服务的开发与应用 指导者: 辛红伟 签字: 评阅者: 2011 年 6 月 吉 林东北电力大学学士学位论文摘 要 串口调试助手是串口通信常用的软件之一,广泛的应用于教学、科研等领域。串口调试助手是专门测试串口通信用的,比如说有设备要发送数据到pc处理或保存,这时候就可以直接用串口调试助手接收查看发送来的数据,供分析用等等。本文介绍了如何使用VC+制作串口调试助手,串口调试助手的一些基本用途的和使用方法。硬件要求能运行Windows 9X/2000/XP的PC机,配有两个串行口。软件环境要求Visual C+6.0, Windows 9X/2000/XP。要求串口调试助手支持各种串口设置,如波特率,校验位、数据位和停止位等等。支持ASCII/Hex发送,发送和接收的数据可以在16进制和AscII码之间任意转换。可以自动在发送的数据尾增加校验位,支持多种校验格式。支持间隔发送,循环发送,批处理发送,输入数据可以从外部文件导入,并且能够自动将接收到的数据保存到磁盘文件。支持常用的300-115200bps波特率,能设置校验、数据位和停止位,能以ASCII码或十六进制接收或发送任何数据或字符(包括中文),可以任意设定自动发送周期,并能将接收数据保存成文本文件,能发送任意大小的文本文件。12目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(12m),可以用电缆线直接连接标准RS232端口(RS422,RS485较远),若距离较远,需附加调制解调(MODEM)。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连。3关键词:VC+;串口调试;波特率ABSTRACTSerial communication serial port debugging assistant is one of commonly used software, widely used in teaching, researching and other fields. Serial Debug Assistant is specifically used for the test serial communication, such as a device sending data to the pc deal or save, This time we can directly view receiver with a serial debugging assistant sent to the data for analysis and so on. This article describes how to use the VC + + debugging serial production assistant, assistant serial debugging some of the basic purposes and use. Hardware requirements to run Windows 9X/2000/XP PC, equipped with two serial ports. Software environment requires Visual C + +6.0, Windows 9X/2000/XP. Assistant required to support a variety of serial port debugging settings such as baud rate, parity, data bits and stop bits and so on. Supports ASCII / Hex send, send and receive data can be between 16 hex and AscII any code conversion. The data can be automatically added at the end to send parity bit, support for multiple validation format. Support for sending interval, circular sent, batch transmission, the input data can be imported from an external file, and can receive data automatically saved to disk file. Support the common 300-115200bps baud rate, setting the parity, data bits and stop bits, can hexadecimal ASCII code or data or to receive or send any characters (including Chinese), can be set automatically send cycle, and can receive data saved as text files, can send a text file of any size. Now more commonly used 9-pin serial port (DB9) and 25-pin serial port (DB25), while the short distance communication (Member Viariables选项卡,选择CSCommTestDlg类,为IDC_MSCOMM1添加控制变量:m_ctrlComm,这时你可以看一看,在对话框头文件中自动加入了/AFX_INCLUDES() i nclude mscomm.h /AFX_INCLUDES (这时运行程序,如果有错,那就再从头开始)。3.2.4.在对话框中添加控件 向主对话框中添加两个编辑框,一个用于接收显示数据ID为IDC_EDIT_RXDATA,另一个用于输入发送数据,ID为IDC_EDIT_TXDATA,再添加一个按钮,功能是按一次就把发送编辑框中的内容发送一次,将其ID设为IDC_BUTTON_MANUALSEND。别忘记了将接收编辑框的PropertiesStyles中把Miltiline和Vertical Scroll属性选上,发送编辑框若你想输入多行文字,也可选上Miltiline。再打开ClassWizardMember Viariables选项卡,选择CSCommTestDlg类, 为IDC_EDIT_RXDATA添加CString变量m_strRXData, 为IDC_EDIT_TXDATA添加CString变量m_strTXData。说明: m_strRXData和m_strTXData分别用来放入接收和发送的字符数据。3.2.5.添加串口事件消息处理函数OnComm 打开ClassWizardMessage Maps,选择类CSCommTestDlg,选择IDC_MSCOMM1,双击消息OnComm,将弹出的对话框中将函数名改为OnComm,(好记而已)OK。这个函数是用来处理串口消息事件的,如每当串口接收到数据,就会产生一个串口接收数据缓冲区中有字符的消息事件,我们刚才添加的函数就会执行,我们在OnComm()函数加入相应的处理代码就能实现自已想要的功能了。请你在函数中加入如下代码:void CSCommTestDlg:OnComm() / TODO: Add your control notification handler code here VARIANT variant_inp; COleSafeArray safearray_inp; LONG len,k; BYTE rxdata2048; /设置BYTE数组 An 8-bit integerthat is not signed. CString strtemp; if(m_ctrlComm.GetCommEvent()=2) /事件值为2表示接收缓冲区内有字符 /以下你可以根据自己的通信协议加入处理代码 variant_inp=m_ctrlComm.GetInput(); /读缓冲区 safearray_inp=variant_inp; /VARIANT型变量转换为ColeSafeArray型变量 len=safearray_inp.GetOneDimSize(); /得到有效数据长度 for(k=0;klen;k+) safearray_inp.GetElement(&k,rxdata+k);/转换为BYTE型数组 for(k=0;kMessage Maps,选择类CSCommTestDlg,选择IDC_BUTTON_MANUALSEND,双击BN_CLICKED添加OnButtonManualsend()函数,并在函数中添加如下代码:void CSCommTestDlg:OnButtonManualsend() / TODO: Add your control notification handler code hereUpdateData(TRUE); /读取编辑框内容m_ctrlComm.SetOutput(COleVariant(m_strTXData);/发送数据运行程序,在发送编辑框中随意输入点什么,单击发送按钮,啊!看看,在另一端的串口调试助手(或别的调试工具)接收框里出现了什么。如果你真是初次涉猎串口编程,又一次成功,那该说声谢谢我了,因为我第一次做串口程序时可费劲了,那时网上的资料也不好找。开开玩笑,谢谢你的支持,有什么好东西别忘了给我寄一份。最后说明一下,由于用到VC控件,在没有安装VC的计算机上运行时要从VC中把mscomm32.ocx、msvcrt.dll、mfc42.dll拷到Windows目录下的System子目录中(win2000为System32)并再进行注册设置,请参考如何手工注册MSComm控件。3.2.8.发送十六进制字符在主对话框中加入一个复选接钮,ID为IDC_CHECK_HEXSEND Caption: 十六进制发送,再利用ClassWizard为其添加控制变量:m_ctrlHexSend; 在ClassView中为SCommTestDlg类添加以下两个PUBLIC成员函数,并输入相应代码;/由于这个转换函数的格式限制,在发送框中的十六制字符应该每两个字符之间插入一个空隔/如:A1 23 45 0B 00 29/CByteArray是一个动态字节数组,可参看MSDN帮助int CSCommTestDlg:String2Hex(CString str, CByteArray &senddata)int hexdata,lowhexdata;int hexdatalen=0;int len=str.GetLength();senddata.SetSize(len/2);for(int i=0;i=len)break;lstr=stri;hexdata=ConvertHexChar(hstr);lowhexdata=ConvertHexChar(lstr);if(hexdata=16)|(lowhexdata=16)break;else hexdata=hexdata*16+lowhexdata;i+;senddatahexdatalen=(char)hexdata;hexdatalen+;senddata.SetSize(hexdatalen);return hexatalen;/这是一个将字符转换为相应的十六进制值的函数/好多C语言书上都可以找到/功能:若是在0-F之间的字符,则转换为相应的十六进制字符,否则返回-1char CSCommTestDlg:ConvertHexChar(char ch) if(ch=0)&(ch=A)&(ch=a)&(ch=f)return ch-a+10;else return (-1);再将CSCommTestDlg:OnButtonManualsend()修改成以下形式:void CSCommTestDlg:OnButtonManualsend() / TODO: Add your control notification handler code hereUpdateData(TRUE); /读取编辑框内容if(m_ctrlHexSend.GetCheck()CByteArray hexdata;int len=String2Hex(m_strTXData,hexdata); /此处返回的len可以用于计算发送了多少个十六进制数m_ctrlComm.SetOutput(COleVariant(hexdata); /发送十六进制数据else m_ctrlComm.SetOutput(COleVariant(m_strTXData);/发送ASCII字符数据现在,你先将串口线接好并打开串口调试助手V2.1,选上以十六制显示,设置好相应串口,然后运行我们这个程序,在发送框中输入00 01 02 03 A1 CC等十六进制字符,并选上以十六进制发送,单击手动发送,在串口调试助手的接收框中应该可以看到00 01 02 03 A1 CC了。183.2.9.在接收框中以十六进制显示在主对话框中加入一个复选接钮,IDC_CHECK_HEXDISPLAY Caption: 十六进制显示,再利用ClassWizard为其添加控制变量:m_ctrlHexDiaplay。 然后修改CSCommTestDlg:OnComm()函数:void CSCommTestDlg:OnComm() / TODO: Add your control notification handler code hereVARIANT variant_inp;COleSafeArray safearray_inp;LONG len,k;BYTE rxdata2048; /设置BYTE数组 An 8-bit integerthat is not signed.CString strtemp;if(m_ctrlComm.GetCommEvent()=2) /事件值为2表示接收缓冲区内有字符variant_inp=m_ctrlComm.GetInput(); /读缓冲区safearray_inp=variant_inp; /VARIANT型变量转换为ColeSafeArray型变量len=safearray_inp.GetOneDimSize(); /得到有效数据长度for(k=0;klen;k+)safearray_inp.GetElement(&k,rxdata+k);/转换为BYTE型数组for(k=0;klen;k+) /将数组转换为Cstring型变量BYTE bt=*(char*)(rxdata+k); /字符型if(m_ctrlHexDisplay.GetCheck()strtemp.Format(%02X ,bt); /将字符以十六进制方式送入临时变量strtemp存放,注意这里加入一个空隔else strtemp.Format(%c,bt); /将字符送入临时变量strtemp存放m_strRXData+=strtemp; /加入接收编辑框对应字符串 UpdateData(FALSE); /更新编辑框内容测试:在串口调试助手发送框中输入十六进制字符,并选上以十六进制发送,单击手动发送,在本程序运行后选上以十六进制显示,在串口调试助手中单击手动发送或自动发送,则在本程序的接收框中应该可以看到了。3.2.10.如何设置自动发送 最简单的设定自动发送周期是用SetTimer()函数,这在数据采集中很有用,在控制中指令的传送也可能用到定时发送。 方法是:在ClassWizard中选上MessageMap卡,然后在Objects IDs选中CSCommTestDlg类,再在Messages框中选上WM_TIMER消息,单击ADD_FUNCTION加入void CSCommTestDlg:OnTimer(UINT nIDEvent) 函数,这个函数是放入“时间到”后要处理的代码:void CSCommTestDlg:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call defaultOnButtonManualsend();CDialog:OnTimer(nIDEvent);再在在主对话框中加入一个复选接钮,ID为IDC_CHECK_AUTOSEND Caption: 自动发送(周期1秒),再利用ClassWizard为其添加BN_CLICK消息处理函数void CSCommTestDlg:OnCheckAutosend():void CSCommTestDlg:OnCheckAutosend() / TODO: Add your control notification handler code herem_bAutoSend=!m_bAutoSend;if(m_bAutoSend)SetTimer(1,1000,NULL);/时间为1000毫秒elseKillTimer(1); /取消定时其中:m_bAutoSend为BOOL型变量,在CLASSVIEW中为CSCommTestDlg类加入,并在构造函数中初始化: m_bAutoSen=FALSE;现在可以运行程序测试了1920。第4章 调 试打开制作好的哦调试助手,运行自己编写的程序。在串口调试著手中选择COM2并且打开,此时指示灯呈高亮状态。程序SCOMMrEST,打开COM1。此时在SCimmTest的发送输入编辑01 0b,并点击发送按钮后,此时COM1就将数据发送出去,COM2收到这些数据。已经串口调试助手中COM2打开,因此这些文本信息在串口助手的接收区中。21显示结果如下图4-1图4-1显示结果图结 论 使用控件MSComm进行串口通信软件的编写和制作是完全可行的,MSComm控件对于编写字符格式的通信程序比较方便,但是要编写字节通信程序则比较麻烦,特别是当要对所有数据分别处理的场合下。总的来说C+builder中使用MSCOmm控件有几个不变: (1)设置InpuMode 属性(接受数据类型)时经常发生不明错误,这样必须在程序中通过语句来定义;(2)不管是何种格式的通信都必须先将接受或发送变量定义为O leV ariant 类型再进行转换;(3)在字节通信时若要对各个字节分别处理,要经过多次转换,实现起来比较麻烦。但总的来说,控件MSComm使串行通信编程变得非常简单、方便,我所制作的串口调试助手就是一个很好的列证。附 录参考文献1 龚建伟,熊光明.Visual C+/Turbo C串口通信编程实践M.电子工业出版社.2004.2 陈雪飞。C+builder实例入门。中国青年出版社.20063 李长林,高洁.Visual C+串口通信技术与典型实例.清华大学出版社.20064 张维君,王珠忠,索世文. 基于PC机串口与DS18B20的单线多点温度测量. 仪表技术与传感器,2009,4:52-54 5 Allen Denver.Serial Communication in Win32DB. Microsoft Development Network. 6 Kate Gregory.Special Edition Using Visual C+DB.Microsoft Development Network.7 张筠,刘书智.VisualC+实践与提高-串口通信与工程应用篇M. 中国铁道出版社,2006.8 赵彦锋,李钢.基于Win32 API的多线程串行通信程序设计J. 9 陈磊松,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 政日益完善的法律体系+课件-2024-2025学年统编版道德与法治七年级下册
- 《烧烤技巧教程》课件
- 锂电池管理系统详解
- 政影响深远的人文精神+课件-2024-2025学年统编版道德与法治七年级下
- 《光学衍射原理》:课件
- 《电路原理及应用》课件
- 《听力损失基因检测》课件
- 《美食探索盛宴》课件
- 健康活动大家来锻炼
- 低血糖的反应及处理流程
- 卡通家庭急救常识知识讲座PPT模板
- 《光电显示技术》OLED原理
- 2022年重庆江津中考数学试题及答案(A卷)
- 反恐安全政策
- 创新教学任务
- 浅谈脓毒血症的集束化治疗及护理-PPT课件
- 新部编版《道德与法治》五年级下册第7课《不甘屈辱 奋勇抗争》优质课件(含视频)
- 架子工班组承包协议
- 化验室化学试剂台账范例
- 杨家湾220KV变电站工程预算表
- 第七课:构图的形式
评论
0/150
提交评论