实验四串口通讯实验

2024-05-08

实验四串口通讯实验(精选9篇)

篇1:实验四串口通讯实验

网络编程与实践实验报告

实验内容:串口通信编程 学号:S201502189 姓名:职荣豪 日期:2015-9-28

一、实验要求

使用VS2010编写基于对话框的MFC应用程序,两个窗口分别使用两个串口,使得这两个窗口可以进行通信,包括数据的发送与接收。

二、实验原理

本实验使用Microsoft Communications Control控件,利用这个ActiveX控件,只需要编写少量代码即可轻松进行通信。

该控件相关的函数如下: put__CommPort:设置串口号

put_Settings:以字符串的形式设置波特率、奇偶校验位(n-无校验,e-偶校验,o-奇校验)、数据位数、停止位数

put_InputMode:设置接收数据的类型(0-文本类型,1-二进制类型)put_InputLen:设置从接收缓冲区读取的字节数,0表示全部读取 put_InBufferSize:设置接收缓冲区大小 put_OutBufferSize:设置发送缓冲区大小

put_RThreshold:设定当接收几个字符时触发OnComm事件,0表示不产生事件,1表示每接收一个字符就产生一个事件

put_SThreshold:设定在触发OnComm事件前,发送缓冲区内所允许的最少的字符数,0表示发送数据时不产生事件,1表示当发送缓冲区空时产生OnComm事件

put_PortOpen:打开或关闭串口,传入参数为true时打开串口,传入参数为false时关闭串口 get_CommEvent:获得串口上刚发生的事件,事件值为2表示接收到数据

get_InBufferCount:获得缓冲区中的数据位数

get_Input:获取缓冲区数据,返回类型为VARIANT put_Output:发送数据

三、设计思路

需要添加一个Microsoft Communications Control控件,用于进行串口通信。由于要求同一程序可运行两个窗口进行相互通信,需要两个窗口开启两个不同串口,故需要添加一个Edit Control控件用于输入串口号,并添加打开串口按钮,在点击该按钮时对串口控件的参数进行设置并开启串口。同时添加关闭串口按钮,点击后关闭串口并可以对串口号进行修改。

需要添加两个Edit Control 分别用于显示接收到的数据以及输入要发送的数据。需要添加一个发送按钮,点击后发送输入的数据。

四、实验步骤

1.建立基于对话框的MFC应用程序 2.添加界面控件并设置ID与Caption 添加Microsoft Communications Control控件,用于进行串口通信 添加一个Edit Control控件,用于输入串口号,ID设置为IDC_PORT 添加一个Static Text控件,用于标注端口号,将Caption设置为“串口号:”

添加两个按钮,分别用于打开串口、关闭串口。IDC分别设置为IDC_BTN_OPEN、IDC_BTN_CLOSE,Caption分别设置为“打开”、“关闭” 添加两个Edit Control,分别用于显示接收到的数据以及输入要发送的数据,ID分别设置为IDC_RECEIVE、IDC_SEND 添加两个Static Text控件,用于标注接收区与发送区,Caption分别设置为“接收区”、“发送区”

添加一个按钮用于发送数据,ID设置为IDC_BTN_SEND,Caption设置为“发送” 调整控件的大小与位置。

完成后如图:

3.给控件绑定变量

右键单击Microsoft Communications Control控件,选择“添加变量”,变量名为m_com 打开类向导给控件添加变量:

给IDC_PORT绑定变量,用于存放输入的端口号,数据类型为int,变量名为m_port 给IDC_RECEIVE绑定变量,用于存放接收到的数据,数据类型为CString,变量名为m_strReceive 给IDC_SEND绑定变量,用于存放输入的待发送的数据,数据类型为CString,变量名为m_strSend

4.给控件添加事件响应函数

右键单击Microsoft Communications Control控件,选择“添加事件处理程序”,点击“添加编辑”,生成响应函数,此函数用于接收数据。

在函数中添加以下代码:

UpdateData(TRUE);if(nEvent == 2){

} UpdateData(FALSE);//将m_strReceive的值显示到控件中

//更新m_strReceive的值

//获取事件值

//获取缓冲区位数

//时间值为2,此时为收到数据 int nEvent = m_com.get_CommEvent();int k = m_com.get_InBufferCount();if(k <= 0)//位数小于等于0时则返回 return;char* str =(char*)m_com.get_Input().parray->pvData;//获取接收到数据的字*(str + k)= ';//字符数组最后一位的下一位设置为',为字符串的结尾标志 m_strReceive +=(const char *)str;//在用于显示的字符串末尾添加刚接收到的符数组的首地址

字符串

双击IDC_BTN_OPEN控件,即“打开”按钮,生成响应函数,此函数用于设置串口参数并打开串口。

在函数中添加以下代码:

UpdateData(TRUE);

if(m_port <= 0){

} m_com.put__CommPort(m_port);//设定串口为m_port的值 m_com.put_Settings(“9600,n,8,1”);

//设定波特率9600,无奇偶校验位,8作为数据位,AfxMessageBox(“请输入正确的串口号!”);return;

//更新m_port的值 //端口号不小于等于0

1作为停止位

m_com.put_InputMode(1);//设定数据接收模式,1为二进制方式

m_com.put_InputLen(0);//设置从接收缓冲区读取的字节数,0表示全部读取

m_com.put_InBufferSize(1024);//设置输入缓冲区大小为1024byte

m_com.put_OutBufferSize(1024);//设置输出缓冲区大小为1024byte m_com.put_RThreshold(1);//每接收到一个字符时,触发OnComm事件 m_com.put_SThreshold(0);//每发送一个字符时,不触发OnComm事件 m_com.put_PortOpen(true);

//打开串口

GetDlgItem(IDC_BTN_OPEN)->EnableWindow(FALSE);//打开按钮设为不可用 GetDlgItem(IDC_BTN_CLOSE)->EnableWindow(TRUE);//关闭按钮设为可用 GetDlgItem(IDC_BTN_SEND)->EnableWindow(TRUE);

//发送按钮设为可用

双击IDC_BTN_CLOSE控件,即“关闭”按钮,生成响应函数,该函数用于关闭串口。在函数中添加以下代码:

m_com.put_PortOpen(false);//关闭串口

GetDlgItem(IDC_BTN_OPEN)->EnableWindow(TRUE);

//打开按钮设为可用

GetDlgItem(IDC_BTN_CLOSE)->EnableWindow(FALSE);//关闭按钮设为不可用 GetDlgItem(IDC_BTN_SEND)->EnableWindow(FALSE);//发送按钮设为不可用

双击IDC_BTN_SEND控件,即“发送”按钮,生成响应函数,该函数用于发送数据。在函数中添加以下代码:

UpdateData(TRUE);//更新m_strSend的值,读取编辑框内容 m_com.put_Output(COleVariant(m_strSend));//发送数据

5.在对话框初始化函数中添加额外初始化代码

在对话框刚打开时,此时串口没有开启,故“关闭”按钮与“发送”按钮需设为不可用。在OnInitDialog函数中添加以下代码:

GetDlgItem(IDC_BTN_CLOSE)->EnableWindow(FALSE);//关闭按钮设为不可用 GetDlgItem(IDC_BTN_SEND)->EnableWindow(FALSE);//发送按钮设为不可用

五、实验结果

对话框1 运行结果如下:

对话框2 运行结果如下:

六、实验心得

通过课上的学习,我学习到了数据通信的基础知识,对网络的分层结构以及相关协议有了进一步的认识。

通过本次实验,我对串口通信的原理有了更深的认识与理解,并对MFC界面制作更加熟练。总之,在本课程中我收获很多,不仅在通信方面的知识有所提升,同时也锻炼了编程能力,VC++软件的使用更加熟练。

篇2:实验四串口通讯实验

1.掌握串行口工作方式的程序设计,掌握单片机通讯的编制。

2.了解实现串行通讯的硬环境,数据格式的协议,数据交换的协议。3.了解PC机通讯的基本要求。二.原理说明

1.MCS-51单片机的串行接口有四种通信方式。其中方式1的波特率由定时器1的计数溢出来决定,用公式表示如下:

若已知晶振频率,则可以通过设置定时器计数初值来确定波特率; 2.当用GR命令执行程序时,实验机内部会将8031串行口电路切换与PC机通讯,无须连线; 3.程序执行前,进入LCA51,加载程序后,才进入调试菜单工具中的对话窗口,然后执行GR0,就可实行单片机串行口与PC机通信实验。三.实验设备

1.单片机开发学习板。2.PC机及配置要求如下:

①IBM PC机或兼容机(586及以上机器); ②安装有Windows9x或更新的版本;

③PC机要求有一个空余的25芯(或9芯)串行通信口。四.实验内容

利用51单片机串行口,实现与PC机通讯。

本实验实现以下功能,将从实验机键盘上键入的数字,字母显示到PC机显示器上,将PC机键盘输入的字符0-F(必须为大写字母)显示到实验机的数码管上。五.实验电路及连线

实验电路已在实验机监控电路上构成。

CS8279已固定接至8700H,无须再接。模块中的十个短路套都套在8279侧; 8279状态口地址为8701H; 8279数据口地址为8700H; 六.实验程序框图

篇3:实验四串口通讯实验

新课标指出“技术课程立足于学生的直接经验和亲身经历, 立足于‘做中学’和‘学中做’。技术课程以学生的亲手操作、亲历情境、亲身体验为基础, 强调学生的全员参与和全程参与。每个学习者通过观察、调查、设计、制作、试验等活动获得丰富的‘操作’体验, 进而获得情感态度、价值观以及技术能力的发展。”在信息技术课堂中, 引导学生应用程序设计实现对简易外围设备的控制, 促进其对微机常用接口的了解, 为学生搭建一条自主连通软硬件学习的实验道路。由此, 促进学生在动手实践中深入了解计算机工作原理, 理解人工智能。帮助他们通过实现对硬件的控制而获得一种蕴含着成就感、满足感的全新体验。为其搭建科技创新的优质平台。

二、开展控制实验的新思路

实现控制外围设备的方法许多, 如单片机、专用控制器、机器人等, 这些技术在很多教学或课外活动中都有应用。但是, 由于受到购置成本、技术难度、场地环境等因素影响, 真正能够用于平时课堂教学、让每个学生都亲身参与动手实验的则少之又少。我们真正需要的, 是一个低成本、高可行性、易学易做的实验平台。

由此, 笔者想到应用高级语言 (如VB, Java) 进行程序设计, 并配以一些简单控制实验的装置, 用编程的手段, 通过控制装置实现二进制数的输入或输出, 配合相应的模块, 实现对外围设备的控制。VB, Java是高中信息课程中“算法与程序设计”模块教学选用的两种语言, 已被很多高中教师所掌握, 易于推广。

学校都有计算机机房, 来上课的每位学生都能独立应用, 实验装置应适应这样的环境, 对硬件要求低, 发挥微机CPU、内存、硬盘的强大功能, 为实验装置进行运算、存储、逻辑分析、信息采集、指令输出, 不用单独学习专用的程序设计语言, 应用环境的开放性也凸显出来。控制实验装置可以组织学生结合程序设计, 进行一系列的实验活动。虽然实验装置体积小、成本低, 却能锻炼学生的动手能力, 激发其创造性思维, 可以模拟现实生活中的很多控制设备, 实现程序设计与人工智能、创新教育的有机融合。用集成电路、发光管、电阻自行焊接而成。

三、实现控制实验的关键——控制实验板

1. 控制实验板的功能

控制实验板是进行实验的关键, 需要有相应的硬件支持:主要有移位寄存器、计数器、门电路等集成电路片, 不同的组合具有不同的功效。控制实验板的主要功能是按照程序设计的需求, 实现二进制数的输入或输出, 实验板自身不需要单独的程序驱动, 只对串口送出的电位、发送的脉冲做出反应。

输出端可以直接驱动发光管, 或通过光电转换装置放大后驱动其他电器 (如继电器、电动机) 。

输入端采集的是开关量, 接收专用传感器 (如光电、红外、声音、磁控) 送出的开关量, 供微机读取。

2. 控制实验板的结构

根据需求设计专用印刷电路板, 焊接元件而成 (如集成电路、发光管、电阻等) 。电路板上最好焊接集成电路插座, 当集成电路损坏后, 方便更换。如果没有专用印刷电路板, 也可用通用电路板或面包板自己搭建。信息技术课时有限, 可以与通用技术电子制作整合实践, 完成全过程。也可围绕综合实践项目, 开展设计制作, 用模块搭建的方式实现创意。接口采用接插件, 插上发光管可以看到输出结果, 插上引出线可以把信号送到另一个输出装置上, 图1为连接在笔记本上正在运行的控制装置。

对电源的需求:控制板需要使用5~6V直流电源, 直控式不需要单独提供电源。

3. 控制板的具体实验应用

程序设计中的基本结构都能应用于控制板的实验, 结合算法实现控制, 把计算与控制相结合, 变得既有现实意义又有趣味。这对学生的动手实践、思维拓展、人工智能应用有一定的帮助。

高级语言编程, 可以设计很好的界面, 对实验板的输出状态可以生动地展示出来, 采集的信息可以分析、加工、处理、记录, 然后根据程序要求实时控制, 也可以通过网络传输数据, 实现数据共享。

传感器、控制器是固定的, 而创意组合是不固定的, 空间组合的余地是很大的。

具体来说, 应用控制实验板可以开展的实验包括:

(1) 光控路灯 (灯塔) ; (2) 普通路口红绿灯控制; (3) 带左转弯的路口红绿灯控制; (4) 智能控制路口红绿灯 (路口堵塞暂停放行与自动恢复) ; (5) 建筑物跑马灯; (6) 周边环境监测站; (7) 迎宾卡通; (8) 圣诞老人; (9) 野外探宝; (10) 自助沙盘讲解员; (11) 电梯控制 (二层、三层) ; (12) 温室大棚自动控制与监控记录; (13) 提线木偶; (14) 小小流水线。

四、控制实验教学的初步尝试

笔者结合高中信息技术学科的《信息技术基础》必修课及《算法与程序设计》选修课的教学进度, 分别安排了控制实验项目进行了教学实践的初步尝试。

例如, 在《信息技术基础》模块教学中, 做十进制数与二进制数之间的数制转换实验:实验板上一字排开8个小发光管, 它们分别对应不同的二进制位。实验者通过键盘输入一个0~255之间的十进制数, 由程序换算成相应的二进制数后, 发送信号到实验板, 连通相应的发光管使之点亮。“1”亮, “0”灭。由于这部分的重点在于帮助学生了解数制的相关知识, 体验二进制数直接控制硬件的作用, 所以无需学生编程, 教师直接给出程序。

再如, 在《算法与程序设计》模块教学中, 根据3种基本控制结构的教学需求安排相应的实验。

讲顺序结构时, 引导学生做“点亮连接到串口的发光管”实验。相应程序很简单, 只是启用通讯控件, 把串口的某个输出端置成高电位。学生在设计界面、安排控件、编写代码、运行程序方面都较易掌握。最后, 组织学生进行界面输出效果与硬件输出效果对比, 帮助其建立软硬件之间的联系, 提高其应用能力。

讲分支结构时, 引导学生做“光控路灯”等实验。设计思路是根据光照强弱, 实现控制路灯的熄灭或点亮。学生首先在控制实验板上插上光敏传感器, 做好硬件准备。然后设计程序, 对采集的信息进行分析, 并根据采集结果做出判断, 送出控制指令。最后进行调试运行。

讲循环结构时, 引导学生做“建筑物跑马灯”等实验。由于控制实验板是串口控制的, 要想实现多位输入输出, 使用循环语句便于优化程序, 帮助学生体验到数据通过串口的读进、送出等, 图2为教师与学生一起分析。

通过以上初步教学实践证明, 高中学生乐于接受且能够掌握这方面的知识技能。相信如此循序渐进之后, 必然能够逐渐上升到综合应用的层面, 完成更丰富多彩的控制实验。当然, 目前高中信息技术课时有限, 这恐怕就要和综合实践课、校本课程、学生活动课等相结合了。

总之, 学生在教师引导下根据项目设计要求, 采集相关数据, 分析推理, 再实施控制。通过软硬件结合的技术手段, 完成现实生活中控制应用的模拟实验。由此贴近生活, 学生不由得发出“原来如此”的感叹, 露出豁然开朗的欢喜笑容。

五、控制实验的未来展望

用控制实验板进行教学实践, 走的是一条宜教学、低投入、多实验、能创新、可班级授课的路。由于控制实验主要应用微机作为中枢控制台进行管理, 实现了软件、硬件的结合, 为信息技术学科“算法与程序设计”“人工智能”模块的教学都开创了一条理论联系实际的新路, 也可以作为综合实践课的一项内容进行开设等。控制实验中, 配合采集功能, 控制功能、记录功能, 再配合互联网, 实时实现远程监测或控制, 也可以说是朝着物联网的应用迈出了可喜的一步。

当我们的实验模块多起来后, 当我们的实验系列化后, 我们的实验项目就有了更多选择的空间, 我们就可以建设出独特的计算机控制实验室。

篇4:微机串口通信在实验仪器中的运用

关键词:单片机;串口通信;设计;实验仪器

中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)18-31498-02

The Microcomputer String Mouth Correspondence is Testing Theinstrument——Practice Discussion

ZENG Ling-qi

(Chengdu Railroad Police Station,Chengdu 610081)

Abstract:The elaboration through the miniature computer monolithicintegrated circuit string mouth and the computer string mouthcorrespondence way, realizes the computer to test the instrument thecontrol and the data acquisition method, take the concrete empiricaldatum as the example, the specify monolithic integrated circuit stringmouth correspondence design and the realization process, and make themultianalysis.

Key words:The monolithic integrated circuit;the string mouthcorrespondence;the design;tests the instrument

1 引言

由于其可编程、易扩展、成本低和体积小等优点,单片机早已被广泛应用于工业控制自动化中,越来越多的物理试验仪器中也使用了单片机进行自动控制,例如实现按键控制、数码管和液晶屏幕的显示、数据采集与模/数转换等等,这样大大方便了学生操作试验仪器。不过有些实验,如“光电效应测普郎克常量”、“夫兰克—赫兹实验”、“散热片的温度特性研究”等,需要读取大量的数据并从中找出这些数据间的相互关系,使得学生在上课时要花大量的时间去读数据,而不是进行逻辑推理和分析,如果能够用微机代替人工进行快速精准的数据采集,并通过计算机软件设计进行复杂的数据分析和处理,无疑对物理实验课是非常好的改进。

2 常用MCS-51芯片的结构与最小系统的硬件实现

以ATMEL公司的AT89S52为例进行说明,AT89S52芯片含有8K的 Flash型的内部 ROM 和 256B的内部 RAM ,对于不太复杂的开发场合,无需扩展外部 ROM,而且可在线编程,有利于进行开发调试,具体可参考读芯片的相关资料[1]。其内部结构如图1所示。

图1 单片机内部结构

图中,外部定时元件通常使用晶体振荡器;复位电路通常设计成上电复位形式或者按键复位形式,以便 CPU及其他功能部件都处于一个确定的初始状态,并开始工作;电源一般使用+5V。程序下载到 ROM 中运行。这样一个单片机的最小系统就实现了,可以通过其他引脚的硬件扩展,并进行软件编程就能响应外部中断、实现定时和外部脉冲计数、进行串并口I/O操作等。

图2是单片机的最小系统的硬件电路实现,其中复位采用上电复位方式,时钟电路采用外节晶体震荡器方式。另外,引脚 EA/VPP为低时访问外部ROM,为高时地址 0000H—0FFFH空间访问ROM,地址1000H-FFFFH空间访问外部ROM,因此这里应该按高,这一点往往是容易忽略的地方[2]。

图2 单片机最小硬件系统

3 串口通信的硬件实现

单片机的4个引脚多数都有第二功能,串口就是P3口的第二功能,其中,P3.0 是串口接收引脚,P3.1 是串图 2 单片机最小硬件系统口发送引脚。在一些实时性要求不太高的场合,将单片机的串口做输出扩展,与外围设备进行数据交换和控制也是一种常用的方法,但更常见在与计算机和其他单片机的通信中,而且硬件电路设计简单,易于开发。图3是单片机串口与计算机的 RS-232C 串口进行通信的一种常用电路连接方法[3]。

图3 单片机串口通信接口电路

进行串口收发时,理论上只需要把计算机串口的接收、发送引脚与单片机的接收引脚 (RXD)和发送引脚(TXD)相连接即可,就像单片机之间的串口通信一样,但是考虑到两者的信号电平标准不同,单片机中的信号使用 TTL 电平,即 >=2.4V 表示“ 1 ”, <=s.5V 表示 “0”,而 RS-232C 总线的电平标准是 -12V 表示“ 1 ”和 +12V 表示“ 0 ”。因此两者通信需要一个电平转换电路接口,图 3 中使用 MAX232 芯片实现这一功能,所接的 5 个电容均为0.1 ,具体可参看该芯片的相关资料[4]。也可以使用其它芯片实现电平转换功能,如MC1488和MC1489。

硬件电路设计好后,可以通过一些串口调试软件进行测试,查看是否能够正确的收发信息。在计算机方面有很多现成的应用程序,也可以用 VC++ 或 VB 等开发相应的软件,这里不详细讨论,接下来谈一谈单片机方面的软件开发。

4 串口通信的软件实现

8051系列单片机进行串口通信时,发送数据由 TXD 引脚送出,接收数据由 RXD 引脚输入。有两个缓冲器 SUBF,一个作发送缓冲器,一个作接收缓冲器,软件设计中可以用两种方式获知单片机发送或者接收了信息。一种是查询方式,程序反复查询发送标志和接收标志是否被硬件置位,若置位说明进行了发送和接收。用这种方式的缺点是 CPU 一直等待串口收发而不能及时响应和处理其他事件。另一种是中断方式,开启串口允许中断,每次单片机从串口收到或者发出信息,均会产生中断,转入中断服务程序进行相应的处理。

串口通信中“波特率”这个概念非常重要,所谓“波特率”也就是“比特率”,描述串口通信的速度,每秒发送或接收数据的二进制位数。在计算机与单片机通信时,双方的波特率必须相同,才能保证发送与接收的同步,进而获得完整的信息。

单片机进行串口通信时有 4 种工作方式,均与波特率的设定有关,波特率的计算也有相应的公式。另外不同的工作方式下通过串口进行异步传输的帧格式也不同。串口通信的收和发分别设置了一个中断标志住,若以中断方式进行串口通信,当发生收/发中断时,对应标志位被硬件置 1 ,可在程序中判断发生的串口通信中断是接收还是发送(因为单片机串口接收中断和发送中断只对应了一个中断向量入口地址)。中断标志位需要用户程序复0,通常在中断服务程序中执行。以上各项设置需要访问两个特殊功能寄存器 SCON(电源控制寄存器)和PCON (电源控制寄存器)[5] 。

5 实验仪器的改造

让我们看一下光电效应测普朗克常量这个实验。在图4 中,一定波长的光照射光电管的阴极K ,电子溢出向阳极A运动,在两极间加反向电压阻止电子向阳极运动,当检测到电流表读数为零时所加载的反向电压叫做截止电压队,对于不同的光照频率 ,有US=h/e(?酌-?酌0 ),其中 h为普朗克常量, e为电子电量,?酌0 为金属阴极 K 的红眼频率,只要找出 ?酌和 US 的线性关系,就可以计算 h 的大小。实验对每一种频率的光都需要改变电压采集电流值,描绘光电管图 4 光电效应原理图的伏安特性曲线,该曲线与电压轴的交点就是截止电压 U0 。

实验仪器的硬件原理框图可以参考图 5 的设计,通过按钮设置电压值,然后读取电流值,送显示屏显示并通过串口传递给计算机进一步处理。

参考文献:

[1]Atmel.DATA HANDBOOK AT89552- based 8—bit Microcontroller with 8K Bytes In-System Programmable Flash,2001.

[2]胡汉才.单片机原理及系统设计[J].清华大学出版版社,2002.

[3]吴金成. 8051单片机实践与与应用[J].清华大学出版社,2002.

[4]axim.DATA HANDBOOK,Max232—based +5V–Powered .Multichannel RS-232 Drivers/Recervers,2001.

[5]李华.MCS—5 系列单片机原理及系统设计[J].清华大学出版社,1997.

篇5:实验技能通讯稿

(本网讯 生科院 方鑫 郭志春 周科 黄振新)为进一步激发和提高学生参与生物学实验的兴趣和热情,让学生更好地掌握生物学基本实验技能,提高实验动手能力、科学思维能力和创新实验能力,经过一个多月的筹备部署和组织开展,截至6月5日,生科院成功举办了第三届生物学实验技能大赛。领导高度重视,筹备周密细致

学院高度重视此次技能大赛,专门成立了竞赛组织委员会,由席贻龙院长亲自担任主任,分管领导担任副主任,专业负责人和辅导员等18人任组员。5月3日在生科院二楼会议室,组委会同各专业负责人召开大赛专题会议,探讨部署相关工作。针对不同专业、年级特点制定比赛内容。会上席院长强调,实验技能大赛虽然过程细致繁琐,但必须精益求精,要以最好的状态展现学院本科教学特色和学生过硬的综合素质。

初赛参与广泛,笔试认真严格

5月12日实验技能大赛正式开始,大赛由理论测试和实验测试两个环节组成。理论测试以笔试为考核方式,考查内容与各专业的专业知识紧密结合,覆盖了参赛同学曾学习过的所有实验课程,着重测试实验操作规范和实验基本原理。学院广大教师积极响应,认真准备试卷命题等前期工作;笔试过程中学院主要党政领导亲自督查考风考纪;专业老师和全体辅导员老师参与监考工作;全院共有22个班级1012位同学参加了理论竞赛。复赛考察全面,注重实践能力

5月20日经过选拨,按照笔试成绩排名,推选前10%位同学代表班级参加实验操作竞赛。共有102位同学进入实验操作竞赛,参与了实验操作部分的比赛。实验操作测试分所占比例为60%,着重突出实验实践的重要性。复赛内容涉及动物学、植物学、微生物学、细胞生物学、分子生物学、动物生理学、解剖生理学、花卉学、测量学、组织培养学等多个实验操作,进一步考查学生具体实际操作的能力。比赛过程紧张有序。考核组最后根据参加选手的笔试和实验操作成绩,评出团体奖9项和个人奖一、二、三等奖27项。颁奖隆重热烈,激励继续前行

6月5号下午,学院在物理楼3401教室隆重举行颁奖大会,对在第三届生物实验技能大赛中获奖的班集体和同学进行表彰。院党委书记袁兴龙、院长席贻龙、党委副书记刘振杰、副院长吴海龙、院长助理胡好远及专业负责人代表教师出席了颁奖大会。颁奖大会由刘振杰副书记主持。会上袁兴龙书记首先宣读表彰决定。随后获奖班级和同学分批次上台领奖。颁奖环节结束后,席贻龙院长对本次实验技能大赛发表了重要讲话,他对本次比赛所取得的成绩给予了高度肯定,同时向获奖同学和班级代表以及辛勤付出的老师们分别表达了祝贺和感谢;他希望本科生在学习专业理论基础的同时,要加强实验技能、科学思维、创新意识的培养,努力夯实自身综合素质,不断提升科学研究能力,为今后求学择业打下坚实的基础。

篇6:基于DM6437的串口通讯

DM6437是TI公司推出的、专门为高性能、低成本视频应用开发的、32位定点DSP达芬奇 (Davinci (TM) ) 技术的处理器系列。TMS320DM6437有着丰富的片上外设, 其中包括2个UART外设, 其中每个UART支持以下特性:16-tyte存储空间的传输和接收FIFOs、针对自动流控制和DMA的1, 4, 8或14byte可选的接收FIFO触发等级、中断优先、串口数据格式可编程等。除了DSP自带的硬件资源, 但想要有效利用DSP内部资源, 应用程序程序需要借助于BIOS。DSP/BIOS是一个多任务实时嵌入式操作系统 (RTOS) , 能大大方便用户编写多任务应用程序。DSP/BIOS实时操作系统的主要功能是:任务管理、存储管理等, 这里我们主要用到DSP/BIOS的任务管理。使用DSP/BIOS开发的DSP软件有两个重要特点:第一, 借助DSP/BIOS完成所有硬件相关操作。开发者不需要直接控制硬件资源, 而是通过CCS开发环境提供的图形化工具BIOS的配置文件;第二, 带有BIOS功能的程序在运行时与不带BIOS的程序是不同的。有BIOS控制DSP的程序, 应用程序是建立在以BIOS为基础上的, 程序根据BIOS调度下按照其安排的任务或者中断的优先级顺序进行执行。其中BIOS支持四种线程, 优先级顺序从低到高为:后台线程、普通任务, 软件中断, 硬件中断。其中这里需要用到硬件中断HWI。

2 串口通信

本文设计的UART通信部分软件程序设计未使用传统的芯片支持库, 而是直接对DM6437的UART外设寄存器进行初始化, 且利用DSP/BIOS实现UART硬件中断, 防止CPU轮询UART外设造成的计算开销浪费, 保证了数据传输的实时性和数据传输效率。

由于串口通信是异步的, 端口能够在一根线上发送数据同时在另一根线上接收数据。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口, 这些参数必须匹配。其中:波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的位的个数。这里我们使用波特率为:9600。数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包, 实际的数据不会是8位的, 标准的值是6、7和8位。停止位:用于表示单个包的最后一位。典型的值为1, 1.5和2位。由于数据是在传输线上定时的, 并且每一个设备有其自己的时钟, 很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束, 并且提供计算机校正时钟同步的机会。奇偶校验位:在串口通信中一种简单的检错方式。其中DM6437有2个UART外设, 这里使用的是RS-232串口接口。

3 DSP/BIOS中断

由于DM6437需要处理其他事务, 不能采用轮询等待串口数据, 所以必须采用中断方式来进行UART通信操作。如下流程图1所示。

而UART串口通信属于外部硬件中断, 需要在DSP/BIOS里任务管理进行硬件中断设置。C64+的中断系统与以往系列不同, 中断是基于事件的, 整个硬件CPU接收15个中断, 但中断源可以支持最多128个。C64+将中断源是为事件“Event”, 128个事件可以分别通过配置连接到15个CPU中断。而128个事件每连续32个可以合并到四个固定的事件中, 即Event0 (对应事件号0-31) 、Event1 (对应时间号32-63) 、Event2 (对应事件号64-95) , Event4 (对应时间号96-127) 。这样可以通过数量有限的CPU中断来管理超大量的中断源, 使用灵活。DSP/BIOS默认将Event0-3分别对应到HWI_INT7-10四个中断号。TI设备驱动通过注册Event0-3这四个事件, 进而对应到相应中断。在中断HWI_INT7-10中断服务程序再去判断具体是哪个事件触发的中断。而其他中断是系统硬件复位中断、NMI中断、预留中断及仿真通信中断。HWI_INT4-6、HWI_INT13、HWI_INT15这几个中断是未使用中断。我们可以通过将事件号对应到这5个中端, 并添加中断服务来实现中断控制。这里需要使用未使用中断完成UART中断方式通信。首先需要打开工程的TCF文档, 在任务调度部分中选择硬件中断HWI, 如图2所示。

选取HWI_INT4为我们需要中断, 并对其进行设置, 在中断事件栏中添加UART中断事件号85, 并接着添加中断服务函数名, 此中断服务程序即当中断产生时, CPU将停止当前正在执行的操作跳转到uart中断服务程序去执行。

4 UART中断

在使用UART中断之前需要初始化中断相关寄存器, 初始化CSR (Control and Status Register) 控制、状态寄存器, 开启全局中断开关, 此外还需设置DSP中的PINMUX0与PINMUX1。设置PINMUX是为了配置复用引脚工作模式, 并且通过IER (Interrupt Enable Register) 中断使能寄存器开启HWI_INT4的中断。接着需要初始化串口寄存器, 通过配置Divisor MSB Latch (DLH) 与Divisor LSB Latch (DLL) 将波特率设置为9600、配置FIFO Control Register (FCR) 清空接收数据FIFO与发送数据FIFO并使能接收与发送FIFO功能, 再配置Line Control Register (LCR) 寄存器设置数据位的长度。最后配置Power and Emulation Management Register (PWREMU_MGMT) 来使能串口接收与发送功能, 这些初始化部分在系统开启后进行。而在使用串口传输数据时, 需要解决中断嵌套导致程序跑飞的问题, 在这里需要在中断服务程序中开始时关闭中断HWI_INT4并在中断处理之后开启中断HWI_INT4。

5 结语

通过TMS320DM6437的UART模块并结合DSP/BIOS的中断管理部分实现了异步串口通信, 并通过软硬件调试, 该部分已经加入实际的实时监测系统中与外界上位机进行通信。采用中断的方式, 合理有效地使用了CPU资源, 取得了一定的效果, 具有一定的应用价值。

摘要:串口作为一种灵活、方便、可靠的通信方式, 广泛应用于计算机与其他嵌入式产品中以及工业控制系统中, 是计算机与外部设备进行数据通信时经常使用的方式之一。本文介绍在DM6437嵌入式DSP开发平台上, 串口通讯的一般步骤以及配置。主机通过发送命令可以实现调节或查询系统的功能或状态。结果表明, 在通讯速率要求不高的情况下, 利用串口命令可以有效的实现控制和查询DSP的功能和状态。

关键词:DM6437,UART,硬件中断

参考文献

[1]查萨英, 韩月秋.DSP原理及其C编程开发技术[M].北京:电子工业出版社, 2005.

[2]Taxas Instrument Incorporated.TMS320C6000 Programmer&apos;s Guide[Z].Taxas:Taxas Instrument Incorporated, 2002.

[3]Taxas Instrument Incorporated.TMS320C6000 CPU and Instruction Set[Z].Taxas:Taxas Instrument Incorporated, 2000.

[4]Taxas Instrument Incorporated.TMS320DM643x DMP Universal Asynchronous Receiver/Transmitter (UART) .Taxas:Taxas Instrument Incorporated, 2009.

[5]Taxas Instrument Incorporated.TMS320C6000 DSP/BIOS User’s Guide.Taxas:Taxas Instrument Incorporated, 2000.

[6]Taxas Instrument Incorporated.TMS320DM6437 Evaluation Module.Taxas:Taxas Instrument Incorporated, 2006.

篇7:“探究蚂蚁的通讯”实验再改进

1实验器材的准备

课前布置每组学生自备盛水用的大塑料瓶盖(要刷洗干净)2个;放食物用的比盛水用瓶盖直径小的装有沙子的矮粗废旧瓶子(如化妆品瓶)2个(分别编上序号岛1、岛2);做桥用的长10 cm、宽3 cm的硬纸片3片(分别编上序号1、2、3);加水用的装有自来水的塑料水壶1个;做新环境实验用的长宽约30 cm的方形薄纸板1个(或如此大小的塑料袋1个);做桥柱用的长宽约2 cm的石块(或木块)2个。

2安放实验装置并观察

上课后教师可以先演示实验装置的组装和实验要领,然后将学生带到校园里有蚁巢的地方(为了节约时间,要让学生课前考察好)。在蚁巢附近,将实验装置安放好(图1),并在岛1上放上蚂蚁喜欢吃的食物,进行观察。约5 min,侦察蚁会侦察到食物并回去通报信息,蚁巢内的蚂蚁接到信息后,会沿着桥1、桥2到岛上搬运食物。

3进行实验

当岛1和桥上的蚂蚁足够多时就可以进行以下实验操作:用桥3和岛2(无食物)将桥2和岛1快速换掉,这时就可看到,正在上行的蚂蚁突然失去方向,到了桥1上端就不敢前进了。这时如果用桥2和岛1(要将上面的蚂蚁吹掉)再把桥3和岛2换掉,此时桥1上上行的蚂蚁会马上找到方向,继续沿桥2上行到岛1搬运食物。这说明蚂蚁走过的纸片上留有引导蚂蚁前行的气味物质,从而证明蚂蚁是靠身体分泌的气味来进行通讯的。

如果在岛1上有食物时,也让蚂蚁从桥3上走过,这时可以做如下实验:将一长宽约30 cm的硬纸板(或塑料袋)平放在蚁巢附近,将带有蚂蚁的桥1、桥2放在大纸板上并摆成v字形(图2)。这时,就见这些蚂蚁会较长时间只沿着“v字形”的桥1、桥2走动。如果用桥3作为引桥,蚂蚁会很快沿桥3回到蚁巢附近的地面上(图3),这能进一步证明蚂蚁是靠留在纸片上的身体分泌的气味物质来传递信息的。

4保证实验快速而且成功的几点要求

(1)蚁巢的选择。要选择普通家蚁为实验对象,并且蚁巢较大、蚂蚁较多的为好。有的种类如大头蚁没有搬运食物的习性,故不易作为实验对象。

(2)食物的选择。蚂蚁一般喜欢吃蛋糕、新鲜果核、昆虫的尸体等,所以选择香甜的东西作为蚂蚁的食物,可以缩短实验时间。

(3)实验时间的选择。在春、夏、秋季节均可进行。一般早晨是实验的最佳时间,因为蚂蚁在早上6至7点出来觅食,而且经过一夜的时间,蚂蚁正处于饥饿状态,故觅食活跃,实验时间较快。下午实验就需要较长时间。

篇8:一种串口通讯新模型的研究与应用

在上位机与多台下位机通过串口通信的环境中,随着连接数的增多,系统通信的速度降低,通信错误率增加,如何有效的管理和协调众多线程,是一个比较困难的问题。该文基于IOCP核心思想提出了一个通讯元模型,并针对实际应用设计了一个支持多串口通讯模块。该模块应用于工业造气炉监控组态软件设计中,实际运行表明:该模型具有简单的接口和稳定、高效的运行机制。

1 I/O完成端口模型(IOCP)简介

1.1 完成端口

完成端口是Windows提供的一种高效的I/O模型,它利用少量的工作线程来完成大量的异步I/O处理,使得I/O处理和非I/O处理能够重叠并行的进行,从而满足大并发量管理工作。完成端口的目标就是利用多线程来最大化提高并行执行的效率,避免线程上不必要的阻塞,减少线程上下文切换带来的资源和时间开销。

1.2 完成端口工作原理

完成端口会创建一个消息队列和一个线程池。根据计算机系统中的处理器数目,建立相应的工作者线程,这些线程专门用来处理和客户端通信。当客户端建立新的socket连接时,该socket连接的句柄就与完成端口绑定起来。该socket的网络通信请求按照先进先出的方式进入到完成端口的消息队列中去。线程池取出空闲的线程,让线程扫描完成端口中的消息队列,取出队列里面的通信请求(如发送数据、接收数据)并处理。等处理完毕后再扫描队列里面的下一个网络通信请求,如此循环。

需要注意的是,完成端口对工作线程的管理具有一定的原则:首先在创建完成端口时要制定最大的并发线程数(补充的后文流程),一般情况是一个处理器对应一个并发线程,而工作线程的数量大于或等于最大并发线程书。考虑到线程会进入挂起的状态,为了让应用程序有足够的工作线程为I/O请求服务,一般创建工作线程的个数为CPU个数的两倍。

1.3 完成端口优势

多线程的方式来处理客户端的socket通信请求,每一个客户端要求连入socket时,都要启动一个新的线程与客户端进行通信。CPU不得不在运行的线程之间进行上下文的切换。因为线程切换是相当占用CPU时间的,当客户端的连入线程过多时,CPU的执行效率将变得非常低下。微软提出完成端口模型,就是为了解决“one-treat-per-client”的问题。完成端口模型能够在只有少量工作者线程的情况下处理大量的socket操作,从而避免多线程造成的线程切换开销,最大限度的提高了网络通信的性能。

2 协议性串口通讯的新模型

2.1 串口通信的一般方式

串口编程有阻塞和非阻塞两种方式。阻塞方式是指在调用函数后,当前线程会被挂起直到接收到数据。非阻塞方式指在调用函数后,该函数不会阻塞当前线程,而会立刻返回,线程可以继续进行其他操作。阻塞模型编程比较简单,但是执行效率低下,适合于并发连接数较少的系统。非阻塞模型编程难度比较大,但是程序执行效率高,适合于连接数大性能的系统。

除了效率问题之外,串口通信时经常会线程超时和串口堵塞问题。特别是在多串口通信中。这两种问题,可以通过程序设计来解决,但这样又增加了程序设计的难度。如果有一种模型,从结构上来解决效率问题,又能解决超时和数据堵塞问题,那这种模型将有深远的意义。

2.2 串口通信的新模型

该模型基于I/O完成端口模型(IOCP)的核心思想,提出了一个协议性串口通讯的最小单位——“通讯元”,每个“通讯元”包括“发送的命令(数据)”、“等待接收的命令(数据)长度”、“超时处理函数的绑定”、“接收数据处理函数的绑定”等部分组成。“通讯元”相当于IOCP中的消息一样,会被提交到事件队列中。一个“通讯元”执行过程中,事件队列线程挂起,等待“通讯元”完成。

“通讯元”结构利用了设计模式中的Composite模式(组合模式)的思想,将每次通讯底层的细节封装起来,对外提供方便的通讯接口。发送数据对象、接收数据对象、超时处理对象、数据处理对象与通讯元接口是聚合关系,且是一对多关系。这种设计结构有利于方便的为通讯元添加其他通讯相关的对象,使得通讯的处理过程更加简化高效,同时使得程序有更强的可移植性。

2.3 新模型工作机制

程序主线程启动后,开启通讯元引擎,进行串口的初始化和通讯元的初始化。通讯元引擎创建通讯元的接收队列、发送队列、消息处理队列和超时处理队列。当串口发生通讯操作时,工作者线程启动,通讯元进入消息队列。工作者线程按照先进先出的原则,提取队头的通讯元,再从线程池中取出空闲的线程,在空闲线程中依次判断通信元是否与处理函数相绑定,是否处于发送或接收等待状态,是否已经超时,并对各种状态进行相应处理,最后将无效的通讯元清除。如此循环往复。

3 串口通讯新模块的设计

3.1 多串口通信结构

为安徽某公司设计的工业造气炉监控组态软件,是基于多串口的通信结构。上位机通过扩展配备多个串口与多台下位机通信。每台下位机负责采集或控制其监控对象的运行状态。一方面上位机通过串口向多台下位机发送控制命令,另一方面多台下位机通过串口向上位机发送状态信息。应用程序中采用了通讯元串口通信模块。

多串口通信面临的最主要问题就是并发处理问题。上位机是单一串口,通过多串口扩展器与多台下位机连接。上位机有可能同时向多台下位机发出控制命令,多台下位机也有可能同时向上位机发送反馈信息。这样使得程序设计变得很复杂,一旦程序设计的逻辑考虑不够全面,就很有可能造成信息混乱。而基于IOCP的通信元模型的就很好的解决了这个问题。无论是上位机发送控制命令,还是下位机发送反馈信息,都将在程序中生成一个通信元,每个通信元里面都记录着对应下位机的信息,这样就确保了上位机能够准确的发送和接收到指定下位机的信息,提高了通信的准确率。

3.2 程序设计流程

系统由一个主线程和指定数目的工作者线程组成。主线程主要完成的工作是:通信模块的初始化,通信元队列的创建,工作者线程的创建,串口操作的获取,通信元的入队以及程序退出时资源的释放。通信元产生时要先标记自身的状态。状态包括下位机的ID号,该通信元是发送信息通信元或者是接收信息通信元。同时,程序还要初始化通信元的数据容量,将要发送或接收的数据装入通信元中。最后标记通信元的超时处理方式,包括上位机重新发送,下位机重新发送以及不做任何处理。重新发送也包括重新发送一次或者重新发送直到发送成功。

工作者线程的作用是实现异步操作。主要完成的工作:从通信元队列中取出通信元,首先判断通信元是否处于超时状态,在不处于超时状态的情况下,解析通信元的当前状态,并对各种状态进行相应处理,最后将无效的通讯元清除。工作者线程是多线程并行工作的。程序先扫描线程池中线程的状态,取出一条空闲的线程。空闲线程从通信元队列中取出第一个通信元进行解析。在解析通信元状态时,上位机将首先获取该通信元所对应的下位机信息,以保证上位机能够准确的与对应的下位机通信。当通信元状态为发送状态时,程序先判断串口缓冲区是否为空,当串口缓冲区为空时执行该通信元。当通信元状态为接收通信元时,当前线程会先挂起,等待该通信元所指定的下位机发送信息。当通信元状态为处理状态时,程序将调用解析函数来得到通信元中的数据。当通信元被标记为无效时,程序将删掉该通信元。

3.3 实验仿真

表1模型的开销对比

由于受到串口等硬件条件的限制,所做的实验是通过串口仿真软件来完成的。主机配置是CPU:AMD Athlon Dual-Core M3202.10GHz,RAM 3.00GB,在串口仿真软件中设置虚拟串口的数目。实验模拟向每个串口发起连接,并完成一次收发工作。

实验结果表明:基于通信元新模型的服务端在接收相同连接数时所消耗的时间比传统模型要少,随着连接数的增多,优势更加明显。主要原因通信元模型使用很少的线程,而传统模型每个连接都要创建一个线程。CPU没有在多线程中频繁的切换,因此CPU资源开销很少,系统执行速度就快了很多。但可以看到基于通信元新模型的服务端在内存开销上比传统模型要大。这是因为通信元队列中每个通信元都要开辟一块内存空间来存储数据,当通讯量很大时,内存的占用量就会很高。但是对于上位机来说,增加内存是非常方便的事情。通过消耗更多的内存来提高系统通信的速度,这种方式是值得的。所以新模型更加适合实现大规模的串口通信。

主要原因是因为在通信元模型中,每个通信元都与唯一的下位机相绑定,保证了CPU通信时都能找到对应的下位机。这样,尽管下位机的数量多,但对于上位机而言,一个CPU每次只处理与一个下位机之间的通信,这样就保证了数据通信的准确率。另外,在传统模型的串口通信中,如果串口数量过多,很容易造成数据传输超时。大量的数据堵塞在串口两端,影响了整个系统的正常执行。而通信元模型的超时率就很低,因为每个通信元中都绑定了超时处理方式,一旦发生串口数据堵塞时,程序将立刻执行通信元中的超时处理函数,从而避免了数据堵塞现象。当数据量巨大时,这种通信元超时处理的方式就更加明显。

目前固定床间歇式造气炉在我国中小型氮肥企业运用广泛,其控制主要采用集散控制系统。而以PC机为基础的集散控制系统,上位机监控软件是实现其控制任务的核心。该文讨论开发的造气炉节能监控组态软件吸收了组态的思想,包含两个部分,一个是组态部分,一个是运行部分。组态部分是一个应用开发集成环境,用于建立监控界面,配置相关参数,并自动生成说明书供工程技术人员查阅。运行部分是一个实时运行环境,用来运行组态文件,监控造气炉工作。该软件既吸收了组态软件的精华——开发效率高、成熟稳定、易于维护,又针对造气炉这个特定行业,功能纯粹、成本低廉,适合中小型企业应用实施,具有较高的工程意义和市场价值。

4 结论

IOCP思想既可以用于Socket套接字网络通信,也可以用于多串口的网络通信。基于IOCP思想设计的通讯元新模型是一种能够合理的利用和管理多线程的机制,该模型能够有效管理多串口通信的线程,增强了程序的可移植性,提高了系统的工作效率。在为安徽某公司设计的工业造气炉监控组态软件,采用了该基于IOCP核心思想的通讯元新模型,经过压力测试,实现了2000人同时在线的项目需求。实际运行表明该模型具有简单的接口和稳定、高效的运行机制。

参考文献

[1]Richter J.Advanced Windows(3rdedition)[M].USA:Microsoft Press,1997.

[2]Beveridge J,Wiener R.Multithreading Applications in Win32:The Complete Guide to Threads(Addison-Wesley Microsoft TechnologySeries)[M].USA:Addson-Wesley Professional,1996.

[3]Jones A,Ohlund J.Network Programming for Microsoft Windows(2ndedition)[M].USA:Microsoft Press,2002.

[4]Jones A,Deshpande A.Windows Sockets 2.0:Write Scalable Winsock Apps Using Completion Ports[J].MSDN Magazine,MicrosoftPress,October 2000:30-35.

[5]Asche R.Writing Windows NT Server Applications in MFC Using I/O Completion Ports[J].MSDN Magazine,Microsoft Press,September1996:25-30.

[6]Atanasova M,Cleeton L,Mike Flasko.Get Connected With The.Net Framework 3.5[J].MSDN Magazine,Microsoft Press,September 2007:42-49.

[7]Lee H,Park T.Design and Implementation of an Online 3D Game Engine[J].Lecture Notes in Computer Science,Springer Berlin/Hei delberg,2004:837-842.

篇9:基于VB的串口通讯及其软件实现

关键词:串口;RS232;API;Pcomm;Mscomm;通信程序

中图分类号:TN911文献标识码:A 文章编号:1000-8136(2009)27-0001-03

现在通讯方式越来越多,速度越来越快,但串行通讯由于自身价格低、协议透明、硬件投资少、软件编程简单等诸多优点在远程数据采集、监视、通信及控制领域里一直占据着极其重要的地位。它不仅没有因为时代的进步而被淘汰,反而在规格上越来越完善、应用越来越广,长久不衰。

1串口通信的通信机理

PC串行通信是指直接对串行端口的UART(PC机的通用异步收发器,也叫异步通信适配器,是PC机用于异步通信的接口)进行编程实现的通信。PC机每个UART中的INS8250中有10个可编程的单字节寄存器,可用于控制、监视操作串行端口,COM1的寄存器地址3F8H-3FEH,COM2的寄存器地址为2F8H-2FEH。10个寄存器由7个地址访问,其中5个寄存器的访问条件是先设置3FBH线路控制寄存器的最高位为“1”,该位也称为DLAB状态位。[1]

一般说来,PC机都有一个或多个串行端口,它们依次为Com1、Com2……。这些串口提供了外部设备与PC进行数据传输和通信的通道,在CPU和外设之间充当了解释器的角色。当字符数据从CPU发送给外设时,这些字符数据将被转换成串行比特流数据;而当接受数据时,从外界进来的比特流数据被转换成字符数据传递给CPU进行处理。在操作系统方面,Windows用通信驱动程序(COMM.DRV)调用API函数发送和接受数据。当用通信控件或声明调用API函数时,它们由COMM.DRV解释并传递给设备驱动程序。

作为一个VB程序员,要编写串口通信程序,只需知道通信控件提供给Windows通信API函数的接口即可,换言之,只需设定和监视通信控件的属性和时间即可。

2串行通讯接口RS-232

前一章节讨论了串口通讯的通信机理,但为了实现具体的数据采集、监视、通信功能,必须了解具体的串口形式。目前使用最广泛的串行接口有两种:RS-232和RS-485。本文着重讨论RS-232,RS- 485不作介绍。

RS-232C标准的全称是EIA-RS-232C标准,其中EIA代表美国电子工业协会,RS代表推荐标准,232是标识号,C代表RS232的最新一次修改(1969年),在这之前,有RS232A、RS232B协议。它规定连接电缆和机械、电气特性、信号功能及传送过程。EIA-RS-232C定义了按位串行传输的数据终端设备(DTE)和数据通讯设备(DCE)之间的接口信息。RS-232C是从DTE或计算机串行接口角度来定义引脚信号的。

目前RS-232是PC机与通信工业中应用最广泛的一种串行接口。RS232被定义为一种在低速率串行通讯中增加通讯距离的单端标准。RS232采取不平衡传输方式,即所谓的单端通讯。[2]

DB9(9针串口)的接线方式如下:1脚,数据载波检测DCD;2脚,接收数据RXD;3脚,发送数据TXD;4脚,数据终端准备DTR;5脚,信号地GND;6脚,数据设备就绪DSR;7脚,请求发送RTS;8脚,清除发送CTS;9脚,振铃指示DELL。

DB25(25阵串口),常用的针脚也有9个,且和DB9可以一一对应,具体接线方式为:8脚,数据载波检测DCD;3脚,接收数据RXD;2脚,发送数据TXD;20脚,数据终端准备DTR;7脚,信号地GND;6脚,数据设备就绪DSR;4脚,请求发送RTS;5脚,清除发送CTS;22脚,振铃指示DELL。

一般来说,对于要求不太高的场合,使用接收数据RXD,发送数据TXD,信号地GND三个脚即可实现数据传输。如果要求有硬件流控制,则必须使用DTR、DSR、RTS和CTS这四个脚。

值得注意的是RS-232C是用正负电压来表示逻辑状态,与TTL以高电平表示逻辑状态的规定不同。因此,为了能够与计算机接口或终端的TTL器件连接,必须在RS-232C与TTL电路之间进行电平和逻辑关系的变换。目前较为广泛地使用集成电路转换器件,如MC1489、SN75150芯片可完成TTL电平到EIA电平的转换,而MC1489、SN75154可实现EIA电平到TTL电平的转换。

3三种读取串口数据的方式

目前通用的串口通讯的软件实现方式有3种,本文都进行详细的介绍,它们各有自身的优缺点,读者在编程时可根据具体的情况选择合适的方式。

3.1利用Mscomm控件

VB提供的这个通信控件“隐藏”了大部分串口通信的底层运行过程,程序员只需编写少量的代码就可以完成软件的开发过程。在通信数据量不大,通信要求不是很高的情况下建议采取此方式。

利用Mscomm控件实现通信最需要掌握的就是它的几个主要属性,下面选取其中重要的进行介绍,其余的可以参考相关资料。[3]

(1)Settings属性:以字符串的形式设置并返回波特率、 奇偶校验位、数据位、停止位。这个属性很重要,针对不同的终端设备需要根据设备的具体情况进行调整(比如日本的设备不同于美国的设备,通常会采用奇校验)。

(2)InputMode属性:设置接收数据的类型,0为文本格式,1为二进制格式。

(3)Input属性:读取并删除接收缓冲区中的数据流。

(4)Output属性:向发送缓冲区传送一数据流。

(5)Rthreshold属性:该属性为一阀值,它确定当接收缓冲区内的字节个数达到或超过该值后就产生代码为ComEvReceive的OnComm事件。

(6)Handshaking属性:设置和返回握手协议,即计算机内部CPU与串口之间的通讯协议,保证在缓冲区过载时数据不会丢失。这个属性在保证数据传输的正确性方面有很大的作用,共有四个选项,分别表示:①无流控制;②软件流控制;③硬件流控制;④软硬件流控制。采用硬件流控时,要求串口之间和电缆支持硬件握手,在自己制作串口通信线时,有关硬件握手的线RTS、CTS、DSR、DTR要连接正确。

在正确设置这些属性的基础上,剩下的就是打开串口,通过串口发送及接受数据了。本文后续章节利用一个实例详细讲解了这些属性的设置及具体代码。

3.2直接调用Win32 API通信函数

直接调用Windows API函数,可以清楚地理解串口通信的机制,根据需要灵活地配置串口的各种参数和属性,而且直接调用低层API函数,通信效率比较高,但付出的代价就是程序较复杂,编程周期长,适合于大型通信程序及通讯质量要求较高的场合。

在32位的Windows系统中,串口通信是作为文件处理的,串口操作一般为打开、关闭、读取、写入等操作,相应的Windows API函数如下:[4]

(1)CreateFile()函数:实现串口的初始化并打开串口,返回串口句柄资源以供后续进程调用。

(2)CloseFile()函数:关闭串口,串口是非共享资源,应用程序以独占方式使用,通信结束应立即关闭。

(3)ReadFile()函数:从串口输入缓冲区读取数据流。

(4)WriteFile()函数:向串口输出缓冲区发送数据。

(5)GetCommState()函数:获取串口的当前配置。

(6)SetCommState()函数:重新分配串口资源的各个参数。

由于Windows API函数大部分是用C或C++编写,所以在Visual Basic 6.0 中调用Windows API函数之前必须先在模块级代码上用Declare语句对所调用的函数和用到的数据结构进行声明,具体的函数声明及数据结构请参考朱友芹编《新编Windows API参考大全》。

3.3调用第三方函数库(如Pcomm函数库)

DLL(Dynamic Link Library)动态链接库是一种可以被VB语言调用的程序模块。DLL中包含的可执行代码不能单独执行,而应由Windows应用程序调用执行。一般数据采集卡的供应商都会提供该采集卡的DLL库函数,使用这些DLL库函数,可以做到程序代码共享,减少程序的编写工作量。用户不需要知道这些代码的实现细节,只需要了解调用函数的参数和函数处理后的返回值。

Pcomm函数库是由台湾Moxa公司为开发串口通信程序提供的一套函数库。通过对Windows API函数的进一步封装,提供50多个串口操作函数。覆盖了Windows操作系统下几乎所有异步通信的问题,可以简洁的开发多线程通讯程序。采用该库,通信的可靠性与使用MSComm32控件比较有了明显提高, 而相对直接使用Win32API函数编程则降低了程序开发难度, 缩短了程序开发周期。

这种方式上述直接调用Windows API函数有相似之处,但也有明显的差异。API函数常采取的方法是在串口监视线程中设置串口通信事件掩码及重叠机制,允许程序在后台等待串口通信事件。通过WaitCommEvent检测特定的串行通信事件。而在Pcomm中,可以采用中断处理的方式,为各种事件指定相应的中断处理函数,如接收到一定数目的字符,接收到结束字符,接收到中止信号以及发送缓冲区为空等;同时还可以采用线程控制的方式,直接采用库中的sio_read()和sio_write()函数读写串口。

Pcomm..DLL中的函数按功能分为6项:端口设置、数据发送与接收、串口状态检测、事件服务、文件传输、杂项。Pcomm..DLL中主要的函数介绍如下。[5]

sio_open:打开端口;sio_close: 关闭端口。

sio_ioctl:设置端口参数,如波特率等。

sio_read:从端口接收数据;sio_write向端口发送数据。

sio_iqueue:得到接收缓冲区中的数据长度。

sio_oqueue:得到发送缓冲区中的数据长度。

Pcomm在串口通信中的功能十分强大,但基于篇幅的考虑,在此不便赘述,读者可参考相关书籍或Pcomm自带的帮助文档。

4串口通讯的错误及处理

由于外界干扰或电压波动等原因,串口通讯可能会出现错误,如接受缓冲区溢出,奇偶校验错误等。为了处理这些错误,在Mscomm控件中就提供了一个OnComm事件,它可以捕获通信时发生的串口事件和错误信息,自动转入事件处理程序。在OnComm事件中,CommEvent属性是OnComm事件的指示,下面简单介绍几个重要的CommEvent属性值。

ComEventBreak:表示收到一个中断信号;

ComEventFrame:表示硬件检测到一个数据帧错误;

ComEvenRxover:表示接收缓冲区溢出;

ComEventTxFull:表示输出缓冲区已满;

ComEvReceive:表示接手到了Rthreshold个字符;

ComEvEOF:表示接受到了EOF字符(ASCII字符26)。

编程时用SelectCase语句,根据不同的CommEvent属性值,去执行不同的处理程序。

除了以上所述的通讯错误外,在串口通信时,如果数据传输突然中断,对串口的读写操作可能会进入无限期的等待状态, 为避免这种情况发生, 必须设置串口读写操作的等待时间, 等待超时后,串口的读写操作将被主动放弃,这样即使数据传输突然中断程序也不会被挂起或阻塞。可以根据具体要求规定串口读写操作的最长时间值,即串口读写必须在这段时间内完成,否则提示串口操作失败。

5串口通讯实例

本实例是一个采集设备电流及功率的通讯程序,采集仪为横河WT230数字功率计,因为要采集的数据量不大,且工程结构简单,故采用Mscomm控件的形式进行串口读写操作。

具体实现步骤如下:

(1)在窗体Form上添加两个重要的控件:Timer1和Mscomm1;

(2)在程序的Form_Load事件过程中添加如下代码:

MSComm1.CommPort=1 ‘使用COM1端口

MSComm1.Setting=“9600,o,8,1” ‘设置通信口参数,注意是奇校验,具体的校验方式要视具体的仪器而定

MSComm1.InputMode=comInputModeBinary ‘设置接收模式为二进制形式,注意一般对于数据采集这类设备通信,都应该设置为二进制形式

MSComm1.PortOpen=True ‘参数设置好后打开端口

MSComm1.HandShaking=2-comRTS ‘设置为硬件流控制,可以有效避免数据丢失的情况发生

(3)程序开始后在一定情况设置Timer1.Enabled属性值为True 激活Timer1_Time事件,可以在固定的时间间隔下执行Timer1_Timer过程中的代码程序,完成数据采集。在Timer1_Timer过程中添加如下代码:

MSComm1.Output = "COMMUNICATE:WAIT 1" + Chr(13) + Chr(10)

MSComm1.Output = "MEASURE:NORMAL:VALUE?" + Chr(13) + Chr(10)

上述语句是将读取指令发送到串口输出缓冲区(注意每个命令字符串后都要加上回车和换行符Chr(13) + Chr(10)),再由系统将其自动发送给通过RS232通信线与计算机端口连接的WT230数字功率计,功率计在接收到命令字符串后,经过自身的单片机处理,就自动地把它测到的电压、电流、功率数据以固定的格式和字符形式通过RS232通信线传回至计算机,计算机程序从输入缓冲区读取这些字符数据并利用VB字符处理函数(如Val,InStr)进行处理就得到了所要的数据,下面是具体的程序代码。

Dim bytinput() as byte ‘注意要将bytinput定义为不定长数组

Dim strtem As String

Dim i as Integer

bytinput =MSComm1.Input ‘将输入缓冲区数据读入给字节型数组bytinput

For i = 0 To UBound(bytinput)

strtem = strtem + Chr(bytinput(i)) ‘字节数组中的ASCII码值转换成相应 Next 的字符

得到的strtem字符就形象的展示了电流、电压和功率值。对于WT230而言,它的数据结构是这样的,每个数据之间由逗号字符“,”隔开,每个数据以用科学计数法表示,且每个数据以字符“E”分为前半部分和后半部分,前半部分为具体的数据(整数形式),后半部分为此数据的指数,指数的底为10。

例如得到strtem的值为“23423E-2,00241E-3,05645E-2”这就表示电压值为234.23 V,电流值为0.241 A,功率为56.45 W。

6结论

串口通讯的硬件投资少,软件编程简单,在低速少量数据传输方面的应用极其广泛的应用。本文详细介绍了串口通讯的基本内容及其具体实现方式,读者可以根据具体情况进行选择。以上代码是实现串口通信的核心部分,经过笔者在多个数据采集系统开发中的应用,具有较强的实用价值。

参考文献

1 李朝青.PC机及单片机数据通信技术[M].北京:国防工业出版社,2002

2 李长林.Visual Basic串口通信技术与典型实例[M].北京:清华大学出版社,2006

3 [美] Microsoft公司著、北京希望电脑公司译.Microsoft Visual Basic 6.0 控件参考手册[M],1999

4 朱友芹.新编Windows API参考大全[M].电子工业出版社,2000

5 MOXA Crop.Pcomm Library Programming Guide,1998

6 范逸之.Visual Basic 与RS232串行通信控制.北京:中国青年出版社,2000

Serial communication and the program based on Visual Basic

Wen Cai, Zhang Xiaosong

Abstract:Serial communication has broad application in many fields because of its simple communication circuitry and flexibility. Based on deep comprehension of the technology of the serial communications, this article expounds important technology detail integrated with practice experience. An example of communication program is presented and analyzed, which gives other researchers valuable reference information.

上一篇:患者住院管理制度下一篇:幼儿园大班数学计算活动教案《找邻居》及教学反思