串口通讯.docx

上传人:b****5 文档编号:7876032 上传时间:2023-01-26 格式:DOCX 页数:50 大小:265.08KB
下载 相关 举报
串口通讯.docx_第1页
第1页 / 共50页
串口通讯.docx_第2页
第2页 / 共50页
串口通讯.docx_第3页
第3页 / 共50页
串口通讯.docx_第4页
第4页 / 共50页
串口通讯.docx_第5页
第5页 / 共50页
点击查看更多>>
下载资源
资源描述

串口通讯.docx

《串口通讯.docx》由会员分享,可在线阅读,更多相关《串口通讯.docx(50页珍藏版)》请在冰豆网上搜索。

串口通讯.docx

串口通讯

2012年5月22日

目录

目录1

摘要3

ABSTRACT4

第一章前言5

1.1概述5

第二章串行口通信概述6

2.1接口的方式6

2.1.1并行接口6

2.1.2串行接口8

2.2串行接口的标准

第三章Modbus通信协议10

3.1Modbus协议简介10

3.2Modbus协议中两种传输方式的帧格式11

3.2.1传输方式11

3.2.2RTU模式中每个字节的格式11

3.2.3Modbus协议报文RTU帧11

3.2.4地址域设置12

3.2.4功能域12

3.2.5数据域14

3.3RTU差错校验域14

3.3.1CRC校验域的次序14

3.3.2选择CRC生成器多项式14

3.3.3Modbus通信协议CRC算法15

3.3.4CRC表的生成15

3.4PC机上实现Modbus通信的方法18

第四章智能仪表——PMM2000系列19

4.2PMM2000智能仪表硬件总体设计20

4.3PMM2000智能仪表数据通信规约20

4.3.1开关量输入20

4.4.3读取电力参数21

第五章VisualC++的软件界面设计23

5.1VisualC++编程工具23

5.1.1VisualC++6.0编程工具简介23

5.1.2VisualC++中MFC编程环境简介24

5.1.3MFC的对话框应用25

5.1.4MFC中控件的应用26

5.2通信测试软件与智能仪表的通信27

5.2.1串行异步通信协议27

5.2.2通信串口初始化流程27

5.3仪表与软件实现通信的方法29

5.3.1使用MSComm控件的串行通信30

5.3.2在单线程中实现自定义的串口通信类32

5.3.3多线程下实现串行通信35

5.4通信测试软件界面开发过程36

5.4.1界面开发36

参考文献43

致谢44

摘要

该毕业设计论文主要介绍了基于Modbus通信协议的在VisualC++6.0集成编译环境下实现的智能仪表与计算机进行通信的测试软件系统的简单开发过程,同时介绍了利用VisualC++6.0进行简单软件设计的方法。

本文简要介绍了常见的的通信方式(如RS232、RS485等)和其基本工作原理,同时本文详细阐述了Modbus通信协议、通信流程和CRC错误校验,进一步以实例的形式对Modbus通信协议和CRC错误校验进行详解。

详细介绍了在VisualC++6.0中实现智能仪表与智能仪表通信测试软件之间进行串行通信的三种方法:

利用VisualC++6.0提供的MSComm通信控件建立串口连接,在单线程中用自定义的串口通信类实现串口连接和多线程下用自定义类实现串口连接。

简单介绍了VisualC++语言及其开发环境,详细讲述了利用它实现界面设计的过程和步骤。

 

关键词:

智能仪表;VisualC++;人机界面;MSComm;串口通信

ABSTRACT

ThispapermainlyintroduceshowtodesignasoftwarebyusingtheenvironmentofVisualC++basedonModbuscommunicationprotocoltotestthecommunicationbetweentheintelligentinstrumentsandcomputer.Atthesametime,thispaperalsointroducestheuseofVisualC++6.0softwaretodesign.

Thispaperbrieflyintroducesthecommonwayofcommunications(suchasRS232andRS485,etc)andthebasicworkingprinciple,andatthesametimethispaperexpoundstheModbuscommunicationprotocol,communicationprocessandtheCRCerrorcheckingmethod.WealsomakesomeexamplesofModbuscommunicationsprotocolandCRCerrorcalibrationforfurtherexplanation.Alsoitintroducesthedesignprincipleanddesignmethodsofthehuman-computerinterface.Itdiscussesthreemethodsoftheintelligentinstrumentandcomputer’sserialcommunicationindetail.Theyareasfollows:

theMSCommcontrolprovidedbyVisualC++offersthelinkofserialcommunicationandself-definedclasscanrealizeserialcommunicationundersingle-threadandmulti-thread.Besides,itsimplyintroducesthelanguageofVC++anditsdevelopingenvironment.Andfinallyittellstheprosessofmydesigninghuman-computerinterfaceforintelligentcommunicationindetail.

 

KEYWORDS:

intelligentinstrument;human-computerinterface;MSComm;serialcommunication

 

前言

1.1概述

进入21世纪以来,伴随着我国电力电子技术和变频设备在工业领域的广泛应用,随之而来的电网谐波问题已经严重影响的现代电力设备、电力用户和通信线路的正常运行。

谐波对电网的危害正在逐步加深,例如:

谐波会使电力设备过负荷和发热,增加介质应力和过电压,增加电机和线路的附加损耗,甚至有可能对电力设备造成严重的损坏。

与此同时,我国高新技术产业高速发展与国外高新技术公司纷纷进驻中国,这些企业对供电的质量提出了更为苛刻的要求,比如,对电网电压的中断、闪变和电网谐波的含量。

由此可见国家电网质量得到了前所未有的关注。

因此研究高质量的电力网络参数监测设备已经是市场的迫切需求,智能智能仪表应运而生。

智能网络电力仪表是针对电力系统、工矿企业、公共设施、智能大厦的电力监控需求而设计的。

它能测量所有的常用电力参数,如电压、三相电流,有功、谐波、无功功率,电度等。

智能网络电力仪表具有很高的性能价格比,可以直接取代常规电力变送器及测量仪表。

作为一种先进的智能化、数字化的前端采集元件,该系列网络仪表已广泛应用于各种控制系统中。

智能电力仪表国外知名品牌有美国电气控制QP系列、法国施耐德PM系列,国内知名品牌有上海安科瑞ACR系列、珠海派诺PMAC等。

对于生产高性能的网络电力仪表,仪表的测试软件开发至关重要,只有有了相对应的仪表测试软件才能校正网络仪表的参数,进一步提高仪表的精度和可靠性。

智能仪表的测试软件系统应包含以下几点:

1、鉴于该软件主要用于公司的仪表测试人员,软件应操作简单,易学,易掌握。

2、鉴于智能仪表的实时监控的重要性,测试软件应快速反应,响应合理。

3、其次为了提高电力仪表的测试精度,测试软件的测试精度应该高于仪表1~2个数量级。

第二章.串行口通信概述

串行接口简称串口,也称串行通信接口(通常指COM接口),是采用串行通信方式的扩展接口。

一般说来。

计算机都有一个或多个串行串口,它们依次为COM1,COM2,COM3,COM4。

这些串口提供了外部设备与计算机进行数据传输和通信的通道。

串行口通信是指外设和计算机间使用三根数据线进行数据的传送。

这三根信号线分别是数据信号线,地线和控制线。

2.1接口的方式

CPU与外部设备﹑存储器的连接和数据交换是通过接口实现的,前者称为I/O接口,后者称为存储器接口。

习惯上接口都是指I/O接口。

I/O接口通常分为串行接口,并行接口,USB接口等几种。

下面介绍并行接口和串行接口。

2.1.1并行接口

并行接口是指8位数据同时通过并行线进行传输,这样数据传输速度能得到极大提高,但并行传送的线路长度因为长度的增加,干扰就会增加,容易出错,因此会受到限制。

2.1.2串行接口

串行口也是计算机的一种标准接口,串行口一般不同于并行口之处在于,它的数据及控制信息是一位接一位串行地传送下去,这样,虽然速度会慢一些,但传送距离比并行口更长,。

由于并行传输线路比较复杂,连线较多而且对干扰比较敏感,在我们的测试软件与仪表的通信中选择串行通信方式。

2.2串行接口的标准

串行通信接口的标准经过使用和发展,目前已有RS-232C、RS-485等几种不同的标准。

2.1.1RS-232通信

目前RS-232C是PC机与通信工业中应用最为广泛的一种串行接口。

RS-232C被定义为一种在低速率串行通信中增加通信距离的单端标准。

RS-232C的连接插头用25针或9针的EIA连接插头座,其主要端子分配如表2-1所示。

表2-1RS-232C主要端子

端脚

方向

符号

功能

25针

9针

2

3

输出

TXD

发送数据

3

2

输入

RXD

接收数据

4

7

输出

RTS

请求发送

5

8

输入

CTS

为发送清零

6

6

输入

DSR

数据设备准备好

7

5

GND

信号地

8

1

输入

DCD

数据信号检测

20

4

输出

DTR

22

9

输入

RI

信号含义如下:

(1)从计算机到MODEM的信号

DTR——数据终端(DTE)准备好:

告诉MODEM计算机已接通电源并准备好。

RTS——请求发送:

告诉MODEM现在要发送

(2)从MODEM到计算机的信号

DSR——数据设备(DCE)准备好:

告诉计算机MODEM已接通电源并准备好。

CTS——为发送清零:

告诉计算机MODEM已做好了接收数据的准备。

DCD——数据信号检测:

告诉计算机MODEM已与对端的MODEM建立连接了。

RI——振铃指示器:

告诉计算机对端电话已在振铃了。

(3)数据信号

TXD——发送数据。

RXD——接收数据。

RS-232的电气线路连接方式如图2-2所示。

 

图2-2RS-232的电气线路连接

 

在使用RS-232进行通信时我们需要注意,RS-232使用的是负逻辑。

在“-5~-15V”表示的逻辑“1”;在“+5~+15V”表示的是逻辑“0”。

这样采用5V电源供电的TTL和CMOS通信接口电路和RS-232C不能直接连接,需进行电平转换。

由于RS-232C采用电平传输,在通信速率为19.2Kbits/s时,其通信距离只有15m,若要延长通信距离,必须以降低通信速率为代价。

2.1.2RS-485通信

RS-485的接口信号电平与TTL电平兼容,可方便与TTL电路连接;采用平衡发送和差分接收,因此具有抑制共模干扰的能力,加上总线收发器具有高灵敏度,能检测低至200mV的电压,故传输信号能在千米以外得到恢复;采用半双工工作方式,任何时候只能有一点处于发送状态,因此,发送电路须由使能信号加以控制。

RS-485的内部和外部结构图如图2-3和2-4所示。

 

图2-3RS-485的内部结构图

 

 

图2-4RS-485的外部结构图

RS-485(主要端子如表2-5)可以采用二线与四线方式,二线制可实现真正的多点双向通信。

因此RS-485用于多点互连时非常方便,可以省掉许多信号线。

应用RS-485可以联网构成分布式系统,其允许最多并联32台驱动器和32台接收器。

RS-485最大传输距离约为1219米,最大传输速率为10Mbps。

平衡双绞线的长度与传输速率成反比,在100Kbps速率以下,才可能使用规定最长的电缆长度。

只有在很短的距离下才能获得最高速率传输。

一般100米长双绞线最大传输速率仅为1Mbps。

通过比较RS-232与RS-485通信的优缺点,我们采用RS-485作为测试软件与智能仪表的通信连接。

表2-5RS-485主要端子

端脚

方向

符号

功能

1

输入

R

接收端

2

输入

接收使能,低电平有效

3

输出

DE

发送使能,高电平有效

4

输出

D

发送端

5

GND

6

输入

A

差分正输入端

7

输入

B

差分负输入端

8

Vcc

+5V电源

 

第三章Modbus通信协议

3.1Modbus协议简介

Modbus协议是Modicon公司在1979年发明的是全球第一个真正用于工业现场的总线协议。

Modbus协议是应用于电子控制器上的一种通用语言。

通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。

此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。

它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。

它制定了消息域格局和内容的公共格式。

它已经成为一通用工业标准。

Modbus协议具有以下几个特点:

Modbus协议是一个开放的协议,用户可以免费使用;Modbus协议是面向报文的协议,因此它可以支持多种电气接口,如RS-232,RS-485等;Modbus的帧格式是最简单、最紧凑的协议,简单高效、通俗易懂。

Modbus协议将通信参与者规定为“主站”(master)和“从站”(slave),主站可向从站发送通信请求,每个从站都有自己的地址编号,数量最多可达247个。

它通过多达24种的总线命令实现主站和从站之间的信息交换。

应众多设备制造商的要求,Modicon公司将协议完全公开,成为了“事实上的工业标准”。

Modbus协议提供了使用解析(parsing)消息的Modicon控制器的内在标准。

在Modbus网络上通时,此协议要求每个控制器必须知道它们的设备地址,识别按地址发来的消息,决定要产生何种动作,并提取包含在消息中的所有数据和其它信息。

如果需要回应,控制器将生成反馈信息,并用Mobus协议发出。

如果要在其它的网络上传输信息,则需要将Modbus协议的消息转换为此网络上使用的帧或包结构。

例如,Modbusplus网络上的Modicon网络控制器,与应用软件库和驱动器有关。

提供了转换的Modbus消息协议和特定帧协议之间的转换。

那些网络是使用这些帧协议在它们的节点设备之间通信的。

这种转换也扩展了根据具体网络解决节点地址,路由路径和错误检测的方法。

例如,包含在Modbus协议中的Mobus设备地址将会在消息传输之前转化为节点位置错误检测域也将应用于消息包中,与每一网络协议相一致。

在发送的最后,采用Modbus协议书写的控制器转换消息的内容决定了要执行的动作。

从功能上看,Modbus协议可看成是一种现场总线,不同厂商生产的控制设备通过Modbus接口可以相互连成工业网络,进行整个系统的集中监控,因而得到了广泛应用。

Modicon可编程控制器既可以在它们之间,也可以和各种网络上的其它的设备间进行数据传输。

所支持的网络包括Modbus和ModbusPlus工业网络,还有标准网络,如MAP和Ethernet。

网络通过控制器的接入线或者网络适配器和Modicon可利用的出口相连。

在消息转换中,转换到每个网络包结构中的Modbus协议提供了公用语言,设备将通过它来交换数据。

3.2Modbus协议中两种传输方式的帧格式

3.2.1传输方式

Modbus协议有两种传输方式:

ASCII和RTU(远程终端单元)。

在ASCII方式中,用2个ASCII字符发送报文中的一个8位字节,其优点是允许字符的传输间隔达到1秒而不产生错误;在RTU方式,报文中每个8位字节包含2个4位的十六进制字符,其优点是,在同样的波特率下,可比ASCII方式传送更多的数据,但每个消息必须以连续的流传输。

3.2.2RTU模式中每个字节的格式

RTU模式中每个字节由11位二进制数组成:

1个起始位;8个数据位(首先发送最低有效位);1个奇偶校验位;1个停止位。

如图3-1和3-2所示。

起始

1

2

3

4

5

6

7

8

校验

停止

图3-1有奇偶校验

起始

1

2

3

4

5

6

7

8

停止

停止

图3-2有奇偶校验

在RTU模式中,消息开始于一个默认的至少3.5字符时间的间隔。

在网络波特率多样的情况下,字符时间是最容易实现的,它显示为T1-T2-T3-T4,如表3-1所示。

然后被发送的第一个域是设备地址,联网的设备不断的监控网络总线,包括在“默认”间隔期间。

当第一个域(地址域)被接收到时,每台设备解释它去查找该地址的设备。

在最后一个传送的字符后面,一个类似的至少3.5字符时间间隔标志着消息的结束。

一个新的消息在这个间隔之后开始。

整个消息帧必须作为一个连续的数据流被传送。

如果超过3.5字符时间的默认间隔在帧结束前发生,接收设备删除不完全的消息并且假设下一个字节就是一条新消息的地址域。

一个典型的消息帧如表3-3所示。

表3-3RTU消息域

开始标志

地址域

功能域

数据域

CRC校验域

结束标志

T1-T2-T3-T4

(>3.5字符)

8bit

8bit

n×8bit

16bit

T1-T2-T3-T4

(>3.5字符)

3.2.4地址域设置

信息框架的地址领域包括2个字符的ASCII或8个比特的RTU,有效可利用的设备地址是从1到247。

一个主地址通过信息地址域安排从属地址。

当从属地址发送响应时,它设置自己的地址在响应领域地址中,让主地址知道从地址在工作。

地址0被用在通信地址中,这个通信地址所有的从地址都认识。

当Modbus协议被用在高级的网络上时,通信不能进行,也不能用别的方法代替。

例如,Modbus升级版能用一个被全球共享的数据库。

这个数据库能被任意更改。

3.2.4功能域

信息框架的功能域包括两个字符的ASCII或8个比特的RTU。

有效代码范围从1到255(十进制)。

当然,一些代码能适用所有的Modicon控制器,但是一些代码只可用于某种模式,并且还有一些被保留供以后使用。

各信息传送到各子设备时,功能代码域告诉子设备所要进行哪种运行类别。

例如,写指定线圈或寄存器;读一组寄存器的内容;读一组不连续线圈或输入端的开、关状态;或者。

当子设备反应给主设备时,要用代码域功能显示其正常反应和一些错误发生(称为异常反应)。

作为正常反应,子设备简单应答原来的功能代码。

作为异常反应,子设备返回一个代码,这个代码等价于原先的功能代码(在字节中最有效的设置)。

读线圈流程图如图3-4所示。

图3-4读线圈流程图

3.2.5数据域

数据域是由两个十六进制集合构成的,范围是00~FF。

根据网络传输模式,这可以是由一对ASCII字符组成或由RTU字符组成。

主设备发给从设备消息的数据域包含了附加的信息:

如寄存器地址,要处理项的数目,域中实际数据字节等。

从设备必须执行由功能代码所定义的请求。

如果没有错误发生,从设备返回的数据域包含请求的代码。

如果有错误发生,此域包含一异议代码,主设备应用程序可以用来判断以采取下一步行动。

3.3RTU差错校验域

3.3.1CRC校验域的次序

RTU模式包含一个差错校验字段,该字段是基于循环冗余校验(CRC)方法对全部报文内容执行的。

CRC字段检验整个报文的内容,无论单个字符报文使用何种奇偶校验均应这个校验。

CRC包含两个8位字节组成的一个16位值,CRC字段作为报文最后的附加字段添加到报文中。

CRC域内低字节被附加在先,CRC高字节被设置为信息的最后。

3.3.2选择CRC生成器多项式

有两种通用的16位CRC多项式。

第一种是由CCITT规定的。

经由信息段内各字符连接而成的信息位串对应信息多项式的系数,信息多项式共有n-16项,即从Xn-1到X16(n=信息块或信息段总位数)。

这个多项式要生成多项式作模2除法运算。

校验位串对应于上述除法最终得到的余数多项式的X15到X0项的系数。

这个多项式简称为CRC-CCITT:

X16+X12+X5+1。

最先由IBM用在第一个软盘控制器(Model3770)上,很快便成为了微计算机软盘控制器的标准。

它也用在IBM有名的同步协议HDLC/SDLC(高级数据连接控制、同步数据连接控制)中。

另一种广为使用的CRC生成多项式是CRC-16:

X16+X15+X2+1。

这种多项式尽管在捕捉错误时不如CRC-CCITT有效,但它仍然得以流行,其原因是它有着长久的历史(在IBM的BYSYNC-二进制同步通信协议一中使用)。

Modbus中CRC校验算法就是采用的CRC-16生成多项式。

3.3.3Modbus通信协议CRC算法

Modbus中生成CRC的步骤如图3-5所示,具体步骤为:

(1)预置一个16位寄存器为十六进制数FFFF(全为1),该寄存器称为CRC寄存器。

(2)把第一个8位数据与16位CRC寄存器的低八位相异或,将结果放于CRC寄存器中。

(3)把寄存器的内容右移一位(向最低有效位方向),用0填补最高位,并检查最低位。

(4)如果最低位为0,重复步骤3(再次移位)。

如果最低位为1,CRC寄存器与多项式码0XA001进行异或。

(5)重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理。

(6)重复步骤2到5,进行下一个8位数据的处理;直到所要的字节被处理。

(7)最后得到的CRC寄存器内容即为CRC码。

必须注意,当CRC寄存器值被置入消息时,它的高位和低位必须交换。

当16位CRC(两个8位字节)在消息中被传送时,低位字节将先被传送,随后传送高位字节,如表3-5所示。

表3-5CRC字节序列

地址

功能码

数据

计算

数据

数据

数据

数据

CRC

低位

CRC

高位

3.3.4CRC表的生成

根据CRC的校验原理可知每次参与CRC计算的信息为一个字节,但对该8位信息进行CRC计算时,只有累加器的高8位或低8位与信息字节相异或,异或的结果记为组合值,那么累加器中的新值等于组合值加上累加器中未改变的那一半即为新的CRC值。

组合值只有256种可能,因此可利用硬件模拟算法先算好它们的CRC值预先填入一张表中,该表的每一单元对应相对值的CRC。

这样就可以通过查表法来计算CRC值,以便大大提高CRC运算的速度。

以下为

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1