第30卷 第24期
Vol.30 № 24
计 算 机 工 程
Computer Engineering
2004年12月
December 2004
·开发研究与设计技术 ·
文章编号:1000—3428(2004)24 —0192—03
文献标识码:A
中图分类号: TP393
自定义串口数据通信协议的分析与设计
王承君
潍坊学院计算机系,潍坊
(
261041)
以微软公司的串口通信控件为底层接口,建立了一个简单的串口通信协议。协议的设计基于帧传输的思想,采
摘要:
用发送应答重连失败的方式进行。利用该协议能实现双机短信聊天、文件传输等实时数据通信功能。
关键词:
;通信协议;串口;数据帧
MSComm(SPCP)SPCP
/
/
/
SPCP
Analysis and Design of Self-defining Serial Port
Communication Protocol
WANG Chengjun
(Department of Computer ,Weifang College, Weifang 261041)
【Abstract 】 This paper proposes a simple serial port communication protocol (SPCP) based on MSComm developed by Microsoft Company. The notion
underling SPCP design is data frame transfer in sending/acknowledging/reconnecting/failure way. By SPCP, real-time applications can be developed, for
example, peer-to-peer chatting, file transfer, and so forth.
【Key words】SPCP; Communication protocol; Serial port; Data frame
串行通信接口是计算机标准配置的通信接口,
(RS232)
利用串口进行数据通信、数据采集等是计算机的重要应用领
域之一。建立在串口之上的数据传输可以根据具体的实际情
况构建自己的数据交换规则,即通信协议。本文讨论的即是
构建在短信、文件传输等方面的数据通信协议。
1 SPCP
协议分层结构
为了实现计算机之间的通信并减少协议设计的复杂性,
大多数网络通信按层次方式进行组织,并且可以参照事实上
的国际标准七层通信模型。从通信角度看,各层提供的
服务可以分为两大类,即面向连接的服务和无连接的服务。
SPCPSPCP
见图 。1
的设计是基于面向连接的服务。协议体系结构图
OSI
接收端程序
数 据
发送端应用程序
文
件
传
输
短
信
传
输
其
它
缓冲区
SPCP 串 行 通
信协议
MSComm 控件
Windows API
串行口
文
件
传
输
短
信
传
输
其
它
缓冲区
SPCP 串 行 通
信协议
MSComm 控件
Windows API
串行口
1 SPCP
图协议体系结构图
(SPCP)
串口通信协议的设计
2
SPCP
的设计思想基于帧传输的方式,即在向串口发送
数据时是一帧一帧地发送。对于上层应用如文件传输 来
说,应用程序所发送和接收的都是流式数据,即如果应用程
序需要进行上层协议解释的话,这些流式数据将面临重新拼
)
(
—192—
/
/
装。为保证可靠的传输,在传输开始前,通过握手建立连接
类似协议;在每一帧的传输中采用发送应答重连
(TCP/IP)/
失败的方式进行。
2.1
帧格式
本传输协议中设计种帧:控制帧、数据帧、短语帧。
其中控制帧和数据帧用于文件传输,短语帧用于短消息发
送。每一帧分为帧头和负载两个部分,其中帧头占个 字6
节,前两个字节用于区分种帧,后个字节对于不同帧的意
义各不相同,负载长度不定。
2.1.1
数据帧
数据帧的帧头见图的前两个字节均为,第 、字节
(2)02 3
3
3
4
(AB)4 5
(MN)2
3
、部分表示负载数据的长度,用字节表示,第 、字节
、部分表示第 、字节的校验和。
序号
意义
0
1
1
0
2
A
3
B
4
M
5
N
图数据帧的帧头
2
规则:
·第 、字节为表示数据帧;
1200
·表示传输数据长度,
·表示校验,
负载数据的长度通常根据运行程序的输出缓冲区大小而
ABL=A*100+B
MNM*100+N=A+B
;
。
定,一般最多不超过输出缓冲区的一半。
2.1.2
控制帧
控制帧分为发送端控制帧和接收端控制帧,除发送端控
制帧中的“请求接收新文件”帧外,其余控制帧均不含负
载,控制帧头如图 。3
作者简介:王承君-,男,副教授,主研方向为网络编程与
(1966
网络通信、数据库应用
收稿日期:2004-08-10
E-mail wcj_sdwf@sina.com
:
)
序号
意义
0
1
1
0
2
A
3
B
4
M
5
N
图控制帧头
3
规则:
·第 、字节为表示控制帧,为请求表示,为附加
1210ABMN
表示。
·当时,表示描述字符串文件名子串的长度,表示
AB=11M
N
描述字串中文件大小的长度。
·时,通知放弃传输。
·时,通知文件传输完毕。
·时,请求对方发送数据。若,请求发送下一
AB=10
AB=00
AB=01mn=10
个,若,请求重发。
mn=00
信息短语 帧
2.1.3
(
短语帧的组成与数据帧相似,前两个字节均分别为 和0
)
)
,第 、字节、部分表示负载数据的长度,用字节表
123(AB
示。与数据帧不同的是短语帧没有校验,同时数据帧的负载
为二进制数据,而短语帧的负载为文本数据,见图 。4
序号
意义
0
0
1
1
2
A
3
B
4
X
5
X
图短语帧头
4
规则:
·第 、字节为表示信息帧。
1201
·表示数据长度,
·为配位字符,任意。
数据分帧与数据重组
应用程序发送来的数据作为一个流按协议进行分
ABL=A*100+B
XX
SPCP
2.2
帧,切割后为每帧加上帧头和校验和进行发送;在接收端,
分帧的数据去掉帧头后存入文件缓冲区,接收完成后写入磁
盘。整个过程如图、图 。
6
5
数据分帧:
加帧头、校验和
SPCP 发送缓冲区
应用数据
《〈〈〈〈〈〈发送
图发送5
》》》》》》》接收
SPCP 接收缓冲区
分析帧:去掉帧头、校验
SPCP 面向应用的数据缓冲区
3
传输过程
图接收6
在发送数据前,发送方将数据进行分帧包装,然后按发
送请求、数据传输、发送完成的步骤进行通信。
3.1
由发送端发“请求接收新文件”信号,等待反馈。
发送请求
(1)
(2)
(3)
(4)
数据传输
(1)
(2)
3.2
接收端收到请求信号后,向用户询问是否接收。
用户确认接收后,接收端发出“请求发送文件”信号。
发送端收到“请求发送文件”信号后,开始发送数据。
首先由发送端发出第一帧数据,然后等待反馈。
接收端收到一帧数据后,若帧长度校验和错误则发
出“请求重新发送帧数据”信号,如果正确,则发出“请求
发送下一帧数据”信号。
(3)
若发送端收到“请求重新发送帧数据”信号,则重
新发送先前发送的帧数据。
(4)
若发送端收到“请求发送下一帧数据”信号,则首
先检查已经发出的一帧数据是否是最后一帧,如果是则发出
“发送完毕”信号,否则,发送下一帧数据。
重复 、 、的步骤。
3.3
(5)(2)(3)(4)
发送完成
(1)
发送方发出“发送完毕”信号后,关闭文件,并提
示用户“发送完毕”。
(2)
接收端受到“发送完毕”信号后,则把文件缓冲区
中存储的数据写入磁盘,然后关闭文件,并向用户提示“接
收完毕”。
4 SPCP
4.1 MSComm
协议的实现
控件
本 通 信 协 议 的 底 层 数 据 接 口 采用控 件 。MSComm
控件是公司提供的简化下串行通
ActiveX
MSCommMicrosoftWindows
信编程的控件,它为应用程序提供了通过串行接口
收发数据的简便方法,在 、等编程环境下均可使用。
MSComm
询方式。
控件提供两种处理通信方式:事件驱动方式和查
VBVC
(1)
事件驱动通信是处理串行端口交互作用的一种非常
有效的方法。在许多情况下,在事件发生时需要得到通知,
例如,在或线上 Carrier Detect (CD)
一个字符到达或一个变化发生时。在这些情况下,可以利用
MSComm
OnComm
和通信错误都可通过属性获得
控件的事件捕获并处理这些通信事件。
OnComm
事件还可以检查和处理通信错误。所有通信事件
Request To Send (RTS)
CommEvent
。
(2)
在 程 序 的 每 个 关 键 功 能 之 后 , 可 以 通 过 检 查
控件的属性的值来查询事件和错误。
MSCommCommEvent
如果应用程序较小,并且是自保持的,这种方法可能是更可
取的。例如,如果写一个简单的电话拨号程序,则没有必要
对每接收一个字符都产生事件,因为唯一等待接收的字符是
调制解调器的“确定”响应。
每个使用的控件对应着一个串行端口。如果
MSComm
应用程序需要访问多个串行端口,必须使用多个MSComm
控件。可以在控制面板中改变端口地址和中断
地址。
4.2 SPCP
协议实现的主要算法设计
Windows
当通信控件接收到数据以后,触发
MSCommMSComm
控件的事件,从而对接收数据进行处理。图是当
OnComm
MSCommSPCP
通信控件接收到数据以后协议的处理逻辑。
7
关于文件接收管理的功能主要包括发送文件请求、发送
数据帧和发送完成信号功能,同样文件接收管理的功能主要
包括接收新文件、请求发送、请求重新发送和接收完成处理
等功能,限于篇幅,处理逻辑这里不在列出。
—193—
N
信息帧?
Y
数据帧?
Y
计算长度
计算长度
串口接收
串口接收
内容显示
N
校验正确?
Y
文件发送管理:重发
文件接收管理:新帧
文件发送管理:新帧
文件接收管理:重发
获取帧头
控制帧?
Y
读取控制标示
新文件?
N
请求数据?
N
传输完成?
N
放弃传输?
N
Y
Y
Y
Y
接收文件名
接收文件长度
文件接收管理:新文件
N
N
新帧数据?
Y
发送完成?
Y
文件发送管理:完成
文件发送管理:完成
串口等待
图7 处理逻辑
图 7
5
协议应用实例
双机互联程序通过串口将两台计算机连接起来,按照自
(SPCP)
8VB6.0
定义的串口通信协议进行信息交换,实现通过串口进
行聊天、文件收发的功能。图是用开发的程序主界
面。图中左半部分负责聊天功能,右半部分负责实现文件传
输功能。上方工具条上的个按钮分别完成打开串口、关闭
串口、配置串口参数功能。左部中央的编辑框显示聊天的信
息,左方下部的文本框完成短信息发送功能。界面的右半部
分负责文件的传输,如果需要发送文件,必须选中“发送文
3
图程序主界面
8
(
件”单选框,在其下的文本框中输入或选择文件,
然后单击开始传输;若要接收文件,选择“接收文
件”单选框,在其下的文本框中输入或选择保存路
径和文件名,单击开始传输进行文件接收。
6
结束语
)
(
)
本文以控件作为底层接口建立了一个
MSComm
(SPCP)
简单的串口通信协议。从中可以了解如何创建
简单的通信协议以及开发协议时遵循的技术。当然本
协议还有许多不完善之处,比如文件传输效率不高,
安全性没有考虑等,有待于以后进一步优化。
参考文献
. Visual C++.
李现勇串口通信技术与工程实践北京:人民邮电出
1 Stewart R R, Xie Qiaobing. Stream Control Transmission Protocol
(SCTP). A Reference Guide . Addison-Wesley Pub. Co., Bk&CD-
Rom Edition, 2001-12
2
版社,2002
3
版社,2003
4
谭思亮串口通信工程开发实例导航北京:人民邮电出
丸山修考日通信协议技术北京:科学出版社,
.Visual C++.
2004
().
.
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
)
上接第 页
(124
二元和三元的正确率相差不多,可见当词的距离变大后,词的
前后影响迅速减弱。
错误分析
(2)
标注错误可分为两类:未登录词性错误和兼类词错误。
以三元正向马尔可夫为例,总词数;标注正
: 122 276
确;标注错误
: 107 371
: 14 905
。
/n
/a
/n
/n
/u
/n
占
/n
/n
48.7%
其中,未登录词性占,兼类词错误
7 64451.3%7 261
。
未登录词性
天体 际空间 的极端现象
极端应当为极端
兼类词
通讯手段是电磁波辐射
辐射应当为极端
由于汉语语言中的词性活用现象,一个词可以以多种词
性使用,这给词性收录带来了很大的困难,从而产生未登录
词性错误。标注算法主要解决的是兼类词的错误,从结果来
看,其正确率一般,还需要进一步改进。
/n
/n
/v
/vl
/n
/n
/v
—194—
结语5
本文介绍了系统的设计思想、框架和实现。并
SEGPOS
(1)
对各种切分、标注算法进行了比较、评测和研究。通过研
究,为今后的研究提供了信息:未登录词是目前切分过
程中的主要困难之一,要提高切分的正确率,就是妥善解决
未登录词的问题。未登录词的组成复杂,有人名、地名专业
术语等,每种词都不同,需要有针对性地解决。词类活(2)
用现象在汉语中普遍存在,这给标注带来了很大困难,要提
高标注的正确率,就要对词类活用进行研究。不同的方
法能处理不同的错误,只有多种方法结合使用,才能不断提
高切分标注的正确率。
(3)
参考文献
路志英林孔元郭祺中文切分词典的最大匹配索引法天津大学
刘颖用隐马尔柯夫模型对汉语进行切分和标注排歧计算机工程
万建成杨春花书面汉语的全切分分词算法模型小型微型计算机
徐菁张辉陆汝占汉语语料的切分标注加工系统计算机工
屈刚陆汝占一个改进的汉语词性标注系统上海交通大学学报
,,
..
,..
1
..
学报,1999,(5)
2
与设计,2001,22(4)
3
系统,2003,24(7)
4
,..
程,2003,29(9)
5
2003,39(6)
,
,..,