上下位机所处位置不同作用也就不同,二者通过一些通信方式相连接。多数情况下位机应用于数据的测量、控制等;上位机则用来数据的“管理”处理。下位机被上位机控制,也就是执行上位机的一些指令,除此以外它还可以管理一些数据采集过程中的具体过程。上位机则不能控制具体的测控过程、只用来进行数据的管理,例如储存、打印、显示等方面。一般来说的DCS系统,是下位机分散、上位机集中的系统,也称作集散系统[1] 。
原理上上位机居于一个领导者的位置,下位机被其领导。就好比做为主机和从机的关系。但上下位机是能够互相转换的。二者的连接方式依照下位机而定,下位机情况多变[16]。
2.3 串口通信的工作原理
串口是比较常用的设备通信方式,对于电脑而言有两个rs232串口,这样的通信准则同样也适用于各种下位机设备,大部分gpib允许的机器富有rs232。串口通信的原理就在于rs232等串口依靠每个bit交换数据,虽然如果依靠byte传会快些,但串口的这种方式可以有效地进行数据同时双向互换,大大提高了通信的效率。它非常简洁且可以实现长距离的通信,相比较其他方式对于传输距离的限制对串口而言传输距离能够达到1.2km[17]。
串口实际上发送接受的就是ascii编码,整个过程需要地线,接受,发出三根线。因为串口通信是异步的,端口能够同时进行数据的双向交换。其他线的作用则是握手,但并非必须的。对于正在工作的端口而言,为了通信能够顺利进行,它们的一些基本设置必须相容,例如数据位,停止位等等[2]。
2.4 相关VC++串口编程及其方法
2.4.1 串口通信实现过程
通常情况串口通信的实现需要以下四步的完成:a.首先需要将串行口根据相关协议内容初始设置并且打开;b.串口的具体参数配置c.一边进行串口上数据的往返传输,一边验证相关内容c.停止使用之后,串口则需要得到关闭和释放,为了下一次的使用做准备。将所有过程整理汇表得到图2-4,而具体VC如何实现该流程将在后文一一解析。
图2-4 串口编程设计流程图
2.4.2 基于VC++ 实现串口通信的两种方法
现在有很多串口通信实现方法,很多软件都提供了相关的函数,该文专门对于上位机VC++实现串口通信方法加以论述,一共有两种。
2.4.2.1 利用MFC进行编程来实现串口通信
在W in32系统当中,将file的定义做了极大的扩宽,将所有文件、通信设备等都看作文件。这样一来CFILE类就可以得到应用,可以用其实现对串口操作,再者重叠式输入输出对于W in32中的I /O 函数是支持的, 进而加强了系统内部的时效性。在W in32API中 一般通信资源的查询与读取需要用到相关的函数。下面阐述具体用MFC实现串口通信编程的5步:
(1)在M ainFrm. cpp中定义出全局变量
HANDLE hCom; //为打开的串口的句柄作准备
(2)串口的打开
CreateFile()是用来打开串口的函数,在CreateFile()处程序指定好要用的串口并且预定好操作参数,这样通信就正式开始了,且将一个句柄返回,而这个将会涉及到数据传输的后续设定和安排。
(3)初始化串口 (串口参数的设置和串口的超时设置)
当通信设备句柄被打开之后,就要开始还原串口,也就是将数据位数、波特率、停止位数、握手协议和奇偶校验和流控协议这些参数进行一一设定, 这个过程通常利用改变数据结构---- DCB Device Control Block(设备控制块)来实现。在DCB 结构当中有将近30个数据成员, 如果确定是3线方式的串行, 只要设置关键参数即可,分别是检验位,数据位,停止位。除此之外还有种很精简的方案,就是用Bu ildCommDCB()函数来设置DCB, 再用函数SetCommState()达成配置通信接口。这样的设置通信参数不需要了解DCB的具体内部情况。 C++数据采集系统打印软件设计(4):http://www.751com.cn/tongxin/lunwen_10965.html