PC机串口通信几种编程方法探究与实现

2017-11-17 02:14
微处理机 2017年5期
关键词:清华大学出版社PC机字符

赵 冲

(湖北纵横科技有限责任公司,宜昌443003)

PC机串口通信几种编程方法探究与实现

赵 冲

(湖北纵横科技有限责任公司,宜昌443003)

串口通信技术简单成熟,性能可靠,价格低廉,所要求的软硬件开发环境都很低,广泛应用于计算机、自动控制及相关领域。PC机开发图形界面软件现阶段主要使用VC6.0、C++Builder(C++)或者Vistual studio(C#)等开发软件,其中,VC6.0历史悠久,早期使用人数比较多,资料也相对丰富,但只适合比较有经验的开发者。使用C#开发界面,软件上手更快,相比VC来说也更简单,更适合于初学者。针对实际开发过程中使用的两种开发环境,对相应的串口通信所采用的不同的处理方法做了整理归纳,此类方法都经过验证和长期测试,具有很强的实践借鉴意义。

串口通信;编程;软件

1 引言

串口通讯(Serial Communication),是指外设和计算机间,通过数据信号线、地线等,按位进行传输数据的一种通讯方式。

串口是一种接口标准,它规定了接口的电气标准,没有规定接口插件电缆以及使用的协议。串口通信是一个字符一个字符地进行传输,每个字符一位一位地传输,并且传输一个字符时,总是以“起始位”开始,以“停止位”结束,字符之间没有固定的时间间隔要求。

每一个字符的前面都有一位起始位(低电平),字符本身由7位数据位组成,接着字符后面是一位校验位(检验位可以是奇校验、偶校验或无校验位),最后是一位或一位半或二位停止位,停止位后面是不定长的空闲位,停止位和空闲位都规定为高电平。实际传输时每一位的信号宽度与波特率有关,波特率越高,宽度越小,在进行传输之前,双方一定要使用同一个波特率设置。

2 串口通信常用的软件及编程方法

在工作中使用PC机和其他设备进行串口通信,开发串口通信软件较常使用的编程工具和语言主要有 VC6.0(使用 C 语言或者 C++)、VS2008(C#、VB、C语言、C++)等。在几年的工作实践中,根据这些编程工具和语言,开发了相应的图形界面软件,运行比较稳定,有一定的参考价值,现在将具体的实现细节分享给大家,希望对大家在串口编程方面有所启发。

3 VS2008(C#)使用 SerialPort类实现串口通信

使用SerialPort类实现串口通信的方法很简单,SerialPort类提供了具体的函数来进行串口操作。具体的细节可以参考VS2008 MSDN。这里主要阐述如何进行串口接收。当串口缓冲区有数据来临时,就调用DataReceived事件。而在这里它不会像单片机或者ARM进行串口通信时,串口接收缓冲区有一个字节就可以触发一次中断,有可能数个字节才会调用DataReceived事件。

1.首先定义了List对象buffer222来存放接收的数据。Private Listbuffer222=new List(1024);

2.在接收过程中,考虑到不知道什么时候触发DataReceived事件,每次读取时都先获取串口缓冲区可读取的字节数,然后将这些数据全部读取出来并添加到buffer222中。

3.查找一帧数据的帧头和帧尾并进行处理。具体的实现细节如下:

此种方法还适用于VB.NET、VC++.NET编写Windows窗体应用程序。

4 VC6.0使用第三方串口类CSerialPort串口编程

多线程串口编程工具CserialPort类是由Remon Spekreijse提供的免费串口类,它也封装了一些函数来对串口进行操作。具体的函数网上都可以搜到,不再一一罗列。

用CserialPort类进行串口接收首先要进行WM_COMM_RXCHAR消息映射以及添加消息处理函数OnComm()。使用CserialPort类进行串口通信可以做到逐个字节进行接收,当串口接收缓冲区内有一个字符时,就会产生一个WM_COMM_RXCHAR消息,触发OnComm()函数。

此方法具体操作步骤是:

1.找到连续的帧头(可以是数个字节);

2.接收剩余数据并将数据存储在数组或者结构体中;

3.接收完成后对一帧数据进行校验和帧头帧尾判断,如果校验正确以及帧头帧尾正确说明接收数据正确,此时再做后续处理。

具体代码如下所示:

5 C#利用线程接收处理串口数据

在很多485通信场合中,一般应用的是“一问一答”式的通信方式,即:主机呼叫从机,主机等待从机应答,主机下达指令。在这里使用C#中线程来实现这一过程。

1.利用SerialPort类初始化相应串口并打开串口;

2.创建AutoResetEvent对象等待串口数据就绪:

3.创建线程并启动线程,使用线程需要添加System.Threading命名空间;

4.借助DataReceived事件获取串口数据来临:

5.编写线程循环执行:

6 结束语

以上阐述的各种方法是经过长期工作实践测试的,具有稳定可靠的优点,分享给读者希望给从事这方面工作的人提供一条思路。

[1]龚建伟,熊光明.Visual C++/Turbo C串口通信编程实践[M].北京:电子工业出版社,2004.Gong Jianwei,Xiong Guangming.Visual C++/Turbo C serial communication programming practice[M].Beijing:Publishing House of electronics industry,2004.

[2]明日科技.C#从入门到精通[M].北京:清华大学出版社,2012.tomorrow technology.C#from entry to mastery[M].Beijing:Tsinghua University press,2012.

[3]Christian Nagel.C#高级编程[M].北京:清华大学出版社,2006.Christian Nagel.C#advanced programming[M].Beijing:Tsinghua University press,2006.

[4]谭浩强.C++程序设计[M].北京:清华大学出版社,2015.Tan Haoqiang.C++programming[M].Beijing:Tsinghua U-niversity press,2015.

[5]Stephen Prata.C++Primer Plus(第6版中文版)[M].北京:人民邮电出版社,2012.Stephen Prata.C++Primer Plus(sixth edition Chinese version)[M].Beijing:Posts&Telecom Press,2012.

[6]明日科技.Visual C++从入门到精通[M].北京:清华大学出版社,2012.tomorrow technology.Visual C++from entry to mastery[M].Beijing:Tsinghua University press,2012.

[7]孙鑫,余安萍.VC++深入详解[M].北京:电子工业出版社,2006.Sun Xin,Yu Anping.VC++in-depth explanation[M].Beijing:Publishing House of electronics industry,2006.

[8]马克·米凯利斯(Mark Michaelis),埃里克·利珀特(Eric Lippert).C#6.0 本质论[M].北京:人民邮电出版社,2017.Mark Michaelis,Eric Lippert.ESSENTIAL C#6.0[M].Beijing:People's Posts and Telecom Press,2017.

Research and Implementation of Several Programming Methods for Serial Communication of PC

Zhao Chong
(Hubei 710 Cross Tech Co.Ltd.,Yichang 443003,China)

Serial communication technology is simple,mature,reliable and low cost,and the hardware and software development environment required is very low.It is widely used in computers,automatic control and related fields.At this stage,graphical interfaces software such as VC6.0,c++Builder(c++)or Vistual studio(c#)are mainly used in the PC development,among them,the VC6.0 has a long history,early users are more,and the data are relatively abundant,but is only suitable for experienced developers.Using c#development interface,the software can be mastered quickly and is easier than VC,so it is better for beginners.In view of the two kinds of development environment in the actualdevelopmentprocess,differentprocessing methods adopted by the corresponding serial communication are arranged and summarized.Such methods are validated and long-term tested,and has strong practical significance.

Serial communication; Programming; Software

事件编程的步骤如下:

10.3969/j.issn.1002-2279.2017.05.012

A

1002-2279-(2017)05-0044-03

赵冲(1985—),男,湖北宜昌人,工程师,主研方向:自动化和软件开发。

猜你喜欢
清华大学出版社PC机字符
清华大学出版社期刊中心
字符代表几
一种USB接口字符液晶控制器设计
图片轻松变身ASCⅡ艺术画
HBM电子称与西门子S7-200系列PLC自由口通讯
Desperate Love towards the Dark Lady in Shakespeare’s Sonnets
基于三菱FXPLC的感应淬火机床与PC机的串行通信实现
《秘书工作手记》
VC.NET下实现dsPIC单片机与PC机的通信
基于单片机与PC机的电气量采集系统设计