《基于VC++的串口数据采集系统设计.doc》由会员分享,可在线阅读,更多相关《基于VC++的串口数据采集系统设计.doc(60页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、题 目:基于VC+的串口数据采集系统设计基于VC+的串口数据采集系统设计摘 要随着现代信息技术的发展以及计算机网络的广泛使用,计算机通信技术已经日渐成熟,但串行通信作为一种灵活方便可靠的通信方式,仍不失为有效的通信手段,被广泛应用于工业控制中。,对波特率、数据位、停止位、奇偶校验位等串口参数进行设置,完成串口对数据的接收和发送。通过RS-232C串行接口接收外部设备传递的实时的结晶器振动信号数据,对采集到的振动信号进行分析和研究,并绘制结晶器振动实时曲线,采用PID算法进行参数整定,利用MODBUS编写串口通信协议来控制结晶器的振动,完成对结晶器振动的实时监测。关键词:VC+;串口通信;MSC
2、OMM;PID算法The serial data acquisition system based on the VC+AbstractWith the development of modern information technology, as well as the extensive use of computer networks, the computer communication technology have become more mature, but serial communication as a convenient and reliable means of
3、communication, is still an effective means of communication, and is widely used in industrial control.This article with the vibration signals of mold collected as the background, in the Windows platform ,using ,with baud rate, data bits, stop bits, parity bit, such as serial port parameters to set t
4、o complete the serial port to receive and send data. Through the RS-232C serial interface to external equipment to receive real-time transmission of mold vibration signal data, the vibration signals collected for analysis and research, and real-time rendering mold vibration curve, tuning the use of
5、PID algorithm parameter, using MODBUS serial communication protocol to control the mold vibration, to complete the mold of the real-time monitoring of vibration.Key words: VC+;Serial Communication;MSCOMM;PID Algorithm目 录摘 要IAbstractII第一章 绪论1 研究背景1 研究现状2 研究意义2第二章数据采集系统总体方案设计4系统的设计要求4系统的功能实现4第三章系统软件设计
6、5 开发软件选择53.2 串行通信系统6.1 串行通信概念63.2.2 串行通信的种类73.2.3 串行通信的传输方向93.2.4 串行通信接口9 MSComm串行通讯设计11添加MSComm控件11在SDI中使用MSComm控件12串口的初始化及打开串口133.3.4 MSComm接收数据处理153.4 通信协议设计173.4.1 Modbus协议17 Modbus协议的两种传输方式18两种协议的检验方式203.4.4 ModBus的功能码23数据图形显示25坐标轴的绘制25定时器的设置26第四章人机交互界面设计284.1 登陆界面设计28创建登陆界面28界面字体设计29界面背景色设计304
7、.1.4用户权限设置314.2 控制界面设计324.2.1 PID控制系统324.2.2 PID控制原理和特点344.2.3 PID参数整定方法354.2.4 PID算法的实现36设计总结38参考文献39附录 源程序40致谢54第一章 绪论1.1 研究背景随着计算机系统的应用和微机网络的发展,通信功能越来越显得重要。计算机与外界的信息交换称为通信。因此,通信既包括计算机与计算机之间,也包括计算机和外部设备之间、计算机与单片机之间的信息交换。基本的通信方式有并行通信和串行通信两种。人们为了更好地认识世界,尽可能多地获取自然界的各种信息,单纯依靠人类的感官已远远不能满足人们的愿望。由微处理器和各种
8、性能优良的器件构成的数据采集系统的应用日益广泛为人类获取各种信息提供了必要的手段,数据采集系统是模拟系统和数字系统之间的接口。为了能够采集快速变化的信号,例如,发动机的点火过程、机械的冲击振动等等,总是希望数据采集速率越快越好,所以,一个数据采集系统的优良与否直接关系到一个控制系统性能的好坏。应用上位机实现现场的采集与控制越来越被大家所重视,上位机提供良好的人机界面,使现场监控更直接、简洁可靠和稳定。在现代钢铁企业中,结晶器是连续铸钢中的铸坯成型设备,也是连铸机心脏设备和关键技术。最初的连铸机结晶器是静止的,在拉坯过程中极易与结晶器壁发生粘结,从而导致拉不动和拉漏事故。因此静止不振动的结晶器限
9、制了连铸生产的工业化。结晶器振动是使结晶器按给定的振动幅度、振动频率和波形偏斜特性沿连铸机外弧线运动。其目的是便于“脱模”,能有效地防止连铸坯在凝固过程中与结晶器铜壁发生粘结而出现粘挂拉裂和拉漏事故,提高连铸坯的表面质量。考虑到结晶器振动状况选择的不同对连铸坯表面质量好坏产生的重要影响,我们希望选择最佳的振动状况,保证炼出钢的质量最好,从而决定结晶器振动状况的参数包括结晶器的振动幅度和振动频率等,因此,对结晶器振动状况的控制其实就是来调整这些振动参数。1.2 研究现状在现存的工业通信中,串行通信技术依然有很大的生存空间。目前以太网基本上实现的是计算机设备与设备之间的互联,而在接入终端,很多设备
10、与计算机的连接是通过串行通信接口来实现的。在计算机刚刚出现的时候,设备连接问题就出现了。比如说银行最早的IBM大型机需要和终端连接,这个连接就是用串行通信技术来实现的。直到现在,串行通信技术被广泛地应用到IT和工业通信领域。随着互联网络技术的兴起,串行通信技术也得到新的发展空间。计算机常常通过串口连接Modem或其他可在PSTN公用 网上使用的通信设备(网络控制器等),采用拨号或租用专线的方式入网,与远程的终端服务器、POS机、ATM取款机等在广域网或城域网范围内通信。局域网LAN中也可采用串行通信技术,计算机将串口直接连接到终端服务器上。在网络中的以太网交换机、路由器设备等主要的数据传输设备
11、中,人们除了可以见到以太网接口、光纤接口以外,还可以见到一个控制口,即Console口,这个接口使用的也是串行通信技术。在连铸炼钢过程中,提高连铸机的生产率是国内外冶金界共同努力的方向。而加快浇铸速度是增加连铸机生产率的最有效途径。但浇铸速度的提高又会带来连铸机工作稳定性和铸坯表面质量下降的问题。最令人担心的是铸速提高会使结晶器内凝固壳厚度减薄,坯壳与结晶器之间摩擦力增大而引起的漏钢事故增加,严重影响连铸坯的表面质量。1.3 研究意义由于串行通信是在一根传输线上一位一位的传送信息,所用的传输线少,并且可以借助现成的 网进行信息传送,因此,特别适合于远距离传输。对于那些与计算机相距不远的人机交换
12、设备和串行存储的外部设备如终端、打印机、逻辑分析仪、磁盘等,上位机与下位机之间的通信,采用串行方式交换数据也很普遍。在实时控制和管理方面,采用多台微机处理机组成分级分布控制系统中,各CPU之间的通信一般都是串行方式。所以串行接口是微机应用系统常用的接口。串行通信广泛应用于Internet、电信、金融、工业控制、服务业、终端连线及其他应用领域,在不同的应用领域,串行通信可以与其他通信方式相结合、与Access或Mssql数据库相结合、与WinSock通信相结合,方便的与SMS模块、Modem、Rabbit 2000潜入式系统、PLC通信程序、MATLAB环境等进行通信,所以研究串口通信软件设计具
13、有很强应用价值。第二章 数据采集系统总体方案设计系统的设计要求在工业生产中,为了减少摩擦力,结晶器会按一定的振动模式相对铸坯做振动。而不同的振动对连铸坯表面质量好坏产生的重要影响。因此为了冶炼出钢的质量最好,就要对结晶器的振动情况进行监测和控制。对此提出以下设计要求:利用VC+编写的串口通信程序能够接收到单片机数据采集系统传递的结晶器振动数据并发送数据,通过PID控制算法和Modbus通信协议来控制结晶器的振动,使结晶器的振动达到工艺要求。系统的功能实现设计的主要思想是利用串行通信技术完成对结晶器振动的实时数据采集。则系统软件各部分的功能如下:1、为了对控制系统进行一定的安全防范,创建一个登陆
14、界面来进行用户权限控制。2、使用MSComm控件来进行串口通信设置,与下位机进行串口数据采集。3、使用软件定时器的方法来实现动态曲线的显示。4、采用PID控制算法来完成对结晶器振动参数控制。第三章 系统软件设计 开发软件选择VC+是微软公司开发的一个IDE(集成开发环境),就是使用C+的一个开发平台。VC主要由是MFC组成,是与系统联系非常紧密的编程工具,它兼有高级,和低级语言的双重性,功能强大,灵活,执行效率高,几乎可说VC在 Windows平台无所不能。MFC实际上是微软提供的,用于在C+环境下编写应用程序的一个框架和引擎。VC+应用程序的开发主要有两种模式,一种是WIN API方式,另一
15、种则是MFC方式,传统的WIN API开发方式比较繁琐,而MFC则是对WIN API再次封装,所以MFC相对于WIN API开发更具备效率优势。Visual Basic 是一种可视化的、面向对象和采用事件驱动方式的结构化高级程序设计语言,可用于开发 Windows 环境下的各类应用程序。VB作为开发工具而言它使用Basic这种面向过程的语言来进行工作,把一个项目或者说一套解决方案分成若干个模块每个过程完成相应的工作。而C+是一种面向对象的编程语言,它的思想更接近于人的思维,它认为万物皆对象,而每个对象既是独立存在具有主动思维的个体,又可以是互相作用相互制约的联系!VC编程的更注重效率,编译后得
16、到的程序可直接运行,VC是面向对象的,而VB则是基于对象的。因为VB只有封装的特性,却不支持继承和多态。开发一个使用在Windows下的软件,C+可以说是一个规范,现在的C+编译器或多或少都对它进行了扩充,集成了更多东西。其主要应用方面如下: VC主要是针对Windows系统,适合一些系统级的开发,可以方便实现一些底层的调用。在VC里边嵌入汇编语言很简单。 VC主要用在驱动程序开发。VC执行效率高,当对系统性能要求很高的时候,可用VC开发。 VC主要适用于游戏开发。VC多用于单片机,工业控制等软件开发。 VC可以开发优秀的基于通信的程序。 VC可以开发高效灵活的文件操作程序。 VC可以开发灵活
17、高效的数据库操作程序。 VC是编CAD软件的唯一选择!包括AUTOCAD的二次开发。 VC在多线程、网络通信、分布应用方面,VC+有不可比拟的优势。3.2 串行通信系统 串行通信概念CPU与外设之间信息交换的过程称为通信。根据CPU与外设之间连线结构和数据发送方式的不同,可将通信分为并行通信和串行通信两种基本方式3。在并行通信方式中,数据各位同时传送,如图所示,并行通信的优点是速度快,多用与同一设备内不同器件或模块之间的数据传输;缺点是需要传输线多,干扰大、可靠性差,线路架设困难,且成本高不适合进行长距离数据传输。 图并行通信 图 3.2 串行通信在串行通信方式中,数据位逐一传送,如图所示。串
18、行通信的优点是所需传输线少,适合远距离传输。假设并行传送8位二进制所需时间为T,在发送速率相同的情况下,串行传送至少需要8T。而在实用的串行通信系统中,还需要在数据位前、后分别插入起始位和停止位,以保证数据可靠接收,因此实际传输时间大于8T。 串行通信的种类根据数据传输方式的不同,可将串行通信分为同步通信和异步通信。同步通信是一种数据连续传输的串行通信方式。通信时,发送方把需要发送的多个字符节的数据和校验信息连接起来,形成数据块。发送时,发送方只需在数据块前面插入12个特殊的同步字符,然后按特定速率逐位输出数据块内的每一个数据位。显然,在这种通信方式中,数据块内各个字节数据之间没有间隙,传输效
19、率高,但发送、接收双方必须保持同步,且数据块的长度越大,对同步的要求就越高。因此,同步通信设备结构复杂(发送方要能自动插入同步字符,接收方要能自动检测出同步字符,且发送、接收时钟相同,即除了数据线和地线外,还需要时钟信号线)所示:表 3.1 同步通信数据帧同步字符1同步字符2n个字节的连续数据校验信息1校验信息2异步通信的特点是每次只传送一个字,每个字由起始位、数据位、奇偶校验位和停止位组成,典型的异步通信数据帧格式如图所示, 异步通信数据帧字符帧也叫数据帧,由起始位、数据位、奇偶校验位和停止位等四部分组成。起始位:位于字符帧开头,只占一位,为逻辑0低电平,用于向接收设备表示发送端开始发送一帧
20、信息。数据位:紧跟起始位之后,用户根据情况可取5位、6位、7位或8位,低位在前高位在后。奇偶校验位:位于数据位之后,仅占一位,用来表征串行通信中采用奇校验还是偶校验,由用户决定。停止位:位于字符帧最后,为逻辑1高电平。通常可取1位、1.5位或2位,用于向接收端表示一帧字符信息已经发送完,也为发送下一帧作准备。在串行通信中,两相邻字符帧之间可以没有空闲位,也可以有若干空闲位,这由用户来决定。波特率是异步通信的另一个重要指标。波特率是每秒钟传送二进制数码的位数,也叫比特数,单位为bit/s,即位/秒。波特率用于表征数据传输的速度,波特率越高,数据传输速度越快。但波特率和字符的实际传输速率不同,字符
21、的实际传输速率是每秒内所传字符帧的帧数,和字符帧格式有关。可见,异步通信与同步通信并没有本质的区别,只是在异步通信中数据块长度短(一般为一个字节),收发双方容易实现同步,但各数据块之间不连续(即插入了起、止位)。异步通信的过程可概述为:对于发送方来说,发送时,先输出底电平的起始位,然后按特定速率发送数据位,当最后一位数据发送完毕后,发送一个高电平的停止位,这样就完成了一帧数据的发送过程。如果不再需要发送新的数据或数据尚未准备就绪时,就将数据传输线置为高电平状态。对于接收方来说,要不断检测传输线路上的电平状态。当发现传输线由高电平变为低电平时,即认为有数据传入,进入接收准备状态,然后以相同速率检
22、测传输线的电平状态,接收随后送来的数据位、奇偶校验位和停止位。也就是说,在异步通信方式中,发送方通过控制数据线的电平状态来完成数据的发送,接收方通过检测数据线的电平状态确认是否有数据传入以及接收的数据位是0还是1,只要发送速率和接收检测速率相同,就能准确接收,发送、接收设备可以使用各自的时钟源完成数据的发送和接收,无需要使用同一时钟信号。可见,异步串行通信所需要传输线最少,一根数据线和一根地线就能实现数据的发送及其接收。 串行通信的传输方向根据串行通信数据的传输方向,如图所示,可将串行通信系统分为单工方式、半双工方式、和全双工方式3。如果两串行通信设备之间只有一根数据线,一方发送,另一方接收,
23、就构成了“单工”方式,如图(a)。如果两串行通信设备之间将依靠一根数据线分时收、发数据,就构成了,“半双工”通信方式,如图(b)。在这种方式中,在同一传输线上要完成数据的双向传输,因此通信双方不可能同时发送和接收,任何时候只能是一方发送,另一方在接收。如果在两通信设备之间能同时接受和发送,就构成了,“全双工” 通信方式,如图(c)。由于允许同时发送和接收,就需要两根数据线:A设备的发送端接B设备的接收端;B设备的发送端接A设备的接收端。图 通信方式 串行通信接口串行接口简称串口,也称串行通信接口(通常指COM接口),是采用串行通信方式的扩展接口。一条信息的各位数据被逐位按顺序传送的通讯方式称为
24、串行通讯。串行通讯的特点是:数据位传送,按位顺序进行,最少只需一根传输线即可完成。串口的出现是在1980年前后,数据传输率是115kbps230kbps。串口出现的初期是为了实现连接计算机外设的目的,初期串口一般用来连接鼠标和外置Modem以及老式摄像头和写字板等设备。串口也可以应用与由于两台计算机(或设备)之间的互联及数据传输。由于串口(COM)不支持热插拔及传输速率较低目前部分新主板和大部分便携电脑已开始取消该接口,目前串口多用于工控和测量设备以及部分通信设备中。RS-232也称标准串口,最常用的一种串行通讯接口。它是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计
25、算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”。传统的RS-232-C接口标准有22根线,采用标准25芯D型插头座(DB25),后来使用简化为9芯D型插座(DB9),现在应用中25芯插头座已很少采用。RS-232串行接口起初仅是用于IBM-PC中支持调制解调器与打印机的连接,迄今已广泛应用于支持不同的外部设备和PC之间的通信,它已被定义为一种在低速率(最高为20kbps)串行通信中增大通信距离的单端标准。多年以来,该项标准一直在修订,以适应速度更快驱动器的需求,比如MAX3225,其数据率高达1Mbp
26、s。RS-232串行接口信号在正负电平之间波动。虽然RS-232串行接口的数据是反相的,但从晶体管晶体管逻辑电路(TTL)电平至RS-232电平再返回到TTL电平的转换过程又恢复了初始的极性。RS-232串行接口传送距离不会超过100英尺,原因是发送电平(5V)和接收电平(3V)之差仅允许2V的共模抑制,电缆上的分布电容由于超过了规定的负载(2500pF),从而降低了摆率。因为RS-232串行接口的设计为点至点,并不是多点接口,其驱动器额定负载为单个37k。假如需要的话,采用菊花链原理则可实现多点连接。在菊花链配置中,RS-232串行接口信号先进入一个接收器,再送至一个发送器中驱动下一个单元。
27、对该种技术而言,电缆的断裂是一个主要问题。如发生在从机1和从机2之间的断裂将使得所有后续设备无法发送和接收数据。利用预缓冲或增强RS-232串行接口的输出驱动能力(让其能驱动多个并行的5K输入负载)、或切换输入负载亦可实现多点RS-232通信,此外,将RS-232串行接口的收信机(RX)和发信机(TX)信号转换成RS-422串行接口信号同样可实现RS-232串行接口的多点通信。 MSComm串行通讯设计添加MSComm控件Visual C+为我们提供了一种好用的ActiveX控件Microsoft Communications Control(即MSComm)来支持应用程序对串口的访问,在应用
28、程序中插入MSComm控件后就可以较为方便地实现对通过计算机串口收发数据。其添加方法如下:1、将MSComm控件添加到当前工程中。在Visual C+主界面中,单击Project | Add to Project中Components and Controls命令。打开Registered ActiveX Controls文件夹。2、弹出如图3.5所示的Components and Controls Gallery对话框,单击Microsoft Communications Control,version 6.0选项,然后单击Insert按钮。图 3.5 Components and Cont
29、rols Gallery对话框3、弹出如图所示的Microsoft Visual C+对话框,单击确定按钮。 图3.6 Microsoft Visual C+对话框然后弹出如图所示的Comfirm Classes 对话框。不需要修改窗口中的任何参数,单击OK按钮。然后单击所示对话框的Close按钮即完成控件的加载。此时,在Visual C+工具箱中可以看到名称为Microsoft Communications Control,的图标。在Visual C+主界面Workspace窗口中,单击Class View选项卡,可以看到在列表中增加了一个CMSComm类。表明MSComm控件已经加载到程序
30、中。控件名称为CMSComm。图3.7 Comfirm Classes 对话框在SDI中使用MSComm控件由于单文档接口程序在设计期间没有提供窗口,所以无法像基于对话框的程序那样将控件拖动到窗口上自动建立CMSComm控件的ID。所以,需使用程序来创建CMSComm类的实例。为使创建的控件实例在整个程序中都可以访问,一般将控件实例创建在CMainFrame类的实例中。具体创建过程应包括如下几个主要方面:1、在主框架头文件MainFrm.h中添加代码。#include “” /在应用区,加入对MSComm控件类头文件的引用class CMainFrame : public CFrameWndp
31、rotected:CMSComm myCom;/声明CMSComm类的对象myCommafx_msg void OnCommMscomm();/声明myComm控件事件的响应函数DECLARE_EVENTSINK_MAP();/声明myComm控件的事件引用宏;2、在主框架实现文件MainFrm.cpp中添加代码。BEGIN_EVENTSINK_MAP(CMainFrame,CFrameWnd) ON_EVENT(CMainFrame, IDC_MSCOMM1, OnCommMSComm,VTS_NONE) END_EVENTSINK_MAP() /myComm控件引用宏的实现代码在主框架类成
32、员函数OnCreate()函数中添加如下代码:int CMyComView:OnCreate(LPCREATESTRUCT lpCreateStruct) DWORD style=WS_VISIBLE|WS_CHILD;/声明样式变量styleif (!myComm.Create(NULL,style,CRect(0,0,0,0),this,IDC_MSCOMM1)AfxMessageBox(Failed to create OLE Communications Controln);return -1;/ 创建myComm对象的实例3、在手工定义资源文件中添加ID。串口的初始化及打开串口在使用
33、MSComm控件前,要对串口进行初始化,初始化只要完成对串口的参数进行设置,包括使用的端口、通信波特率、数据位、奇偶校验、停止位。如图,设置好参数后,就可以打开串口。图3.8 参数设置if(myComm.GetPortOpen()myComm.SetPortOpen(FALSE); /如果串口是打开的,则行关闭串口myComm.SetInBufferSize(1024);/指定接收缓冲区大小myComm.SetInBufferCount(0);/清空接收缓冲区myComm.SetInputMode(1);/设置数据获取方式myComm.SetInputLen(0);/设置每次读取长度myCom
34、m.SetRThreshold(1);/设置接收OnComm事件门限myComm.SetPortOpen(1);/设置打开端口号myComm.SetSettings(9600,n,8,1);串口接收数据事件的初始化还要在主框架cpp文件中加入以下事件驱动说明,BEGIN_EVENTSINK_MAP(CSDMSCom1View, CView)/AFX_EVENTSINK_MAP(CAboutDlg)ON_EVENT(CSDMSCom1View, IDC_MSCOMM1, 1 /* OnComm */, OnComm, VTS_NONE)/AFX_EVENTSINK_MAPEND_EVENTSIN
35、K_MAP() MSComm接收数据处理 该控件只有一个事件,即OnComm事件。当MSComm控件在接收到数据事件发生时能及时响应并获取缓冲区中的数据,由微机接收到从单片机数据采集系统传递的VARIANT类型的数据后,将VARIANT类型的数据转换成十进制数值再送到程序中去进行曲线显示。无论何时当CommEvent属性的值变化时,就会激发OnComm事件,这表明控件新发生了一个通信事件或一个错误。根据CommEvent属性值判断出发生了什么具体事件。通常在OnComm事件的响应代码段内使用Switch函数根据CommEvent值来分别执行各种情况下的处理程序5。使用MSComm控件时,其中一
36、个难点就是对输入缓冲区和输出缓冲区的数据进行处理。因为向输出缓冲区写入的数据及输入缓冲区读出的是数据都是VARIANT类型的数据,而程序中常用的通信数据既可能是文本型的字符串,又可能是二进制的数值。能否处理好字符串与VARIANT类型数据间的转换及二进制数据与VARIANT类型数据的转换,对能否成功应用通信至关重要。本设计对接收事件的处理具体代码如下,UpdateData(TRUE);/取控件的数据switch(myComm.GetCommEvent() case 2: VARIANT variant_inp;COleSafeArray safearray_inp;LONG len,k;BYT
37、E rxdata2048; /设置BYTE数组CString strtemp;variant_inp=myComm.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; k len; k+)/将数组转换为Cstring型变量BYTE bt = *(char*)
38、(rxdata + k); /字符型trtemp.Format(%02X , bt);/将字符送入临时变量strtemp存放 UpdateData(FALSE);UpdateData(FALSE);/更新编辑框内容break; UpdateData(FALSE);/更新控件 Format()第一个参数是格式化字符串,就像Printf()的第一个参数一样,后面的参数就是与格式化字符串中每个字段对应的类型变量。3.4 通信协议设计.1 Modbus协议当今世界,工业控制已从单机控制走向集中监控、集散控制。在进入网络时代的今天,工业控制器连网也为网络管理提供了方便。ModBus协议就是工业控制器的网
39、络协议中的一种。ModBus协议是Modicon公司于1978年发明的一种用于电子控制器进行控制和通讯的通讯协议。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以进行通信。它的开放性、可扩充性和标准化使它成为一个通用工业标准。有了它,不同厂商生产的控制设备可以简单可靠地连成工业网络,进行系统的集中监控,从而使它成为最流行的协议之一。ModBus协议包括ASCII,RTU等,并没有规定物理层。此协议定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。标准的ModBus是使用RS-232C兼容串行接口,RS-232C规定了连接器针脚、接线、信号电平、
40、波特率、奇偶校验等信息,ModBus的ASCII,RTU协议则在此基础上规定了消息、数据的结构、命令和应答的方式。ModBus控制器的数据通信采用Master/Slave方式(主/从),即Master端发出数据请求消息,Slave端接收到正确消息后就可以发送数据到Master端以响应请求;Master端也可以直接发消息修改Slave端的数据,实现双向读写。ModBus可以应用在支持ModBus协议的PLC和PLC之间、PLC和个人计算机之间、计算机和计算机之间、远程PLC和计算机之间以及远程计算机之间(通过Modem连接),可见ModBus的应用是相当广泛的。由于ModBus是一个事实上的工业
41、标准,许多厂家的PLC,HMI组态软件都支持ModBus,而且ModBus是一个开放标准,其协议内容可以免费获得,一些小型厂商甚至个人都可根据协议标准开发出支持ModBus的产品或软件,从而使其产品联入到ModBus的数据网络中。因此,ModBus有着广泛的应用基础。在实际应用中,可以使用RS232,RS485/422,Modem加 线、甚至TCP/IP来联网。所以,ModBus的传输介质种类较多,可以根据传输距离来选择。当在网络上通信时,Modbus协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成应答并使用Modbus协议发送给
42、询问方。 Modbus协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用LRC校验,RTU模式采用16位CRC校验,但TCP模式没有额外规定校验,因为TCP协议是一个面向连接的可靠协议。另外,Modbus采用主从方式定时收发数据,在实际使用中如果某Slave站点断开后(如故障或关机),Master端可以诊断出来,而当故障修复后,网络又可自动接通。因此,Modbus协议的可靠性较好。 Modbus协议的两种传输方式ModBus可分为两种传输模式:ASCII模式和RTU模式。使用何种模式由用户自行选择,包括串口通信参数(波特率、校验方式等)。在配置每个控制器的时候,同一个ModB
43、us网络上的所有设备都必须选择相同的传输模式和串口参数。1、ASCII模式当控制器设为在Modbus网络上以ASCII(美国标准信息交换代码)模式通信,在消息中的每个8Bit字节都作为两个ASCII字符发送。这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误。使用ASCII模式,如表所示,消息以冒号(:)字符(ASCII码3AH)作为起始位,以回车换行符(ASCII码0DH,0AH)作为结束符。传输过程中,网络上的设备不断侦测“:”字符,当有一个冒号接收到时,每个设备就解码下个位的地址域,来判断是否发给自己的。与地址域一致的设备继续接受其它域,直至接受到回车换行符。表3.2 ASCI
44、I模式的消息帧起始位设备地址功能代码数据LRC校验结束符1个字符2个字符2个字符N个字符 2个字符 2个字符除起始位和结束符外,其他域可以使用的传输字符是十六进制的09,AF,当然也要用ASCII码表示字符。当选用ASCII模式时,消息帧使用LRC(纵向冗长检测)进行错误检测。2、RTU模式当控制器设为在Modbus网络上以RTU(远程终端单元)模式通信,在消息中的每个8Bit字节包含两个4Bit的十六进制字符。如表,这种方式的主要优点是:在同样的波特率下,可比ASCII方式传送更多的数据。表 3.3 RTU模式的消息帧起始位设备地址功能代码数据CRC校验结束符T1-T2-T3-T48Bit8
45、BitN个Bit16BitT1-T2-T3-T4该模式下消息发送至少要以3.5个字符时间的停顿间隔开始。传输过程中,网络设备不断侦测网络总线,包括停顿间隔时间内。当第一个域(地址域)接收到,相应的设备就对接下来的传输字符进行解码,一旦有至少3.5个字符时间的停顿就表示该消息的结束。在RTU模式中整个消息帧必须作为一连续的流转输,如果在帧完成之前有超过1.5个字符时间的停顿时间,接收设备将刷新不完整的消息并假定下一字节是一个新消息的地址域。同样地,如果一个新消息在小于3.5个字符时间内接着前个消息开始,接收的设备将认为它是前一消息的延续。如果在传输过程中有以上两种情况发生的话,必然会导致CRC校
46、验产生一个错误消息,反馈给发送方设备。表 ASCII协议和RTU协议进行的比较协议开始标记结束标记校验传输效率程序处理ASCII:(冒号)CR,LFLRC低直观,简单,易调试RTU无无CRC高不直观,稍复杂通过比较可以看到,ASCII协议和RTU协议相比拥有开始和结束标记,因此在进行程序处理时能更加方便,而且由于传输的都是可见的ASCII字符,所以进行调试时就更加的直观,另外它的LRC校验也比较容易。但是因为它传输的都是可见的ASCII字符,RTU传输的数据每一个字节ASCII都要用两个字节来传输,比如RTU传输一个十六进制数0xF9,ASCII就需要传输“F”“9”的ASCII码0x39和0x46两个字节,这样它的传输的效率就比较低。所以一般来说,如果所需要传输的数据量较小可以考虑使用ASCII协议,如果所需传输的数据量比较大,最好能使用RTU协议。两种协议的检验方式1、LRC校验LRC域是一个包含一个8位二进制值的字节。LRC值由传输设备来计算并放到消息帧中,接收设备在接收消息的过程中计算LRC,并将它和接收到消息中LRC域中的值比较,如果两值不等,说明有错误。LRC校验比较简单,它在ASCII协议中使用,检测了消息域中除开始的冒号及结束的回车换行号外的内容。它仅仅是把每一个需要传输的