电脑桌面
添加盘古文库-分享文档发现价值到电脑桌面
安装后可以在桌面快捷访问

omronplc串行通信

来源:漫步者作者:开心麻花2025-09-191

omronplc串行通信(精选10篇)

omronplc串行通信 第1篇

串行通信这里所说的通信是指计算机与计算机之间或计算机与外部设备之间的数据通信,基本的通信方式有两种:并行通信和串行通信。并行通信是多位数据同时传送,传送速度快,但需要较多的传输线,通信成本高,只适用于近距离的传送。串行通信是数据逐位顺序传送,从单纯传送数据的角度来说只需2~3根线,因而可以大大节省传输线。距离越长,这个优点越突出。显然串行通信的速度比并行通信慢,但是成本是系统构成的一个重要指标,因此长距离的数据传输都采用串行通信方式,

本章首先简要介绍数据通信的有关基础知识,接着要重点讨论属于外部总线的RS-232C串行通信总线以及PC系列机的串行通信,然后从应用角度介绍RS-422总线和RS-485总线,最后简要介绍一下通信协议。对于曾在PC/XT机中以单独芯片出现,并作为串行通信接口电路的核心在高档机中的逻辑或类似逻辑被集成到SuperI/0芯片中的Intel8250,这里仅从编程角度出发,介绍它的内部可编程寄存器以及初始化步骤。对于PC系列机串行通信的编程,这里考虑了汇编语言、DOS平台上的Turbo_c以及windows平台上的VisualC++和VisualBasic,给出了部分程序示例或程序片段

omronplc串行通信 第2篇

与传统的有线串行(RS232)通信不同,无线串行通信具有设备移动方便(特别在通信设备空间相互隔离不便连线的情况下)、通信距离远(可达几十km)等特点。

无线串行通信应用领域非常广,常用的有:无线抄表;工业遥控、遥测;无线数据传输;银行POS系统;无线数据采集;楼宇自动化、无线监控、门禁系统;智能家居、工业控制;汽车检测设备;无线LED显示屏系统。

目前,比较常用的无线串行通信技术有红外、蓝牙、ZigBee和无线数传等四种。四种方式都有不少公司推出了标准模块,价廉物美,特别适用于嵌入式系统及PC机之间的串行通信。

1、红外串行通信,符合IrDA1.x标准,利用950 nm近红外波段的红外线作为传递信息的载体,通过红外光在空中的传播来传递信息,由红外发射器和接收器实现。其最大优点是:不易被人发现和截获,保密性强;几乎不会受到电气、天电、人为干扰,抗干扰性强。此外,红外线通信机体积小、重量轻、结构简单、价格低廉。不足之处在于它必须在视距内通信,且收发端必须是直线对射。

红外转RS232模块有武汉波士电子的IR232、北京水木行的SMH-IR220等,波特率可达115.2Kbps,通信距离在1m以上。

2、蓝牙串行通信,符合蓝牙协议(BlueTooth)V1.x,使用2.4GHz的ISM(工业、科学、医学)频段。频道共用23个或79个,频道间隔均为 1MHz,采用时分双工方式,调制方式为BT= 0.5的GFSK。蓝牙的数据传输率可达1Mbs,与红外一样,蓝牙的传输距离也较短。

生产蓝牙转RS232模块的公司也有不少,例如:南京国春电气设备有限公司的GC-232-1,深圳蓝色飞舞科技的BF10等。

3、ZigBee串行通信,Zigbee是IEEE 802.15.4协议的代名词,这个协议规定的技术是一种短距离、低功耗的无线通信技术。其特点是近距离、低功耗、低成本。主要适合用于无线测控、无线抄表、智能家电、安防报警等领域,可以嵌入各种设备。其最高波特率可达384K,传输距离在1000m以内。

ZigBee转RS232典型产品有:赫立讯科技(北京)公司的IP-Link 2220H,深圳市鼎泰克电子有限公司的DTK系列等。

双机串行通信设计 第3篇

单片机技术作为计算机技术的一个重要分支, 由于单片机体积小, 系统运行可靠, 数据采集方便灵活, 成本低廉等优点, 在通信中发挥着越来越重要的作用。但能在一些相对复杂的单片机应用系统中, 仅仅一个单片机资源是不够的, 往往需要两个或多个单片机系统协同工作。这就对单片机通信功能的要求不断增加。因此, 单片机通信功能是否满足设计要求是设计中的一个关键问题。

单片机之间的通信可以分为两大类:并行通信和串行通信。串行通信传输线少, 长距离传输时成本低, 且可以利用电话网等现成的设备, 所以本系统采用串行通信来实现单片机之间可靠的, 有效的数据交换。

一、概述

1、系统概述

MCS-51单片机系列是Intel公司推出的功能强、速度快的8位高档单片微型计算机系列产品, 是当前工业测试系统中较理想的一种, 内部有一个可编程的全双工的串行通信口, 即串行通信和发送缓冲器 (SBUF) , 这两个在物理上是独立的接收发送器, 既可以发送数据, 也可以接收数据。全双工的串行通信只需要一根输出线 (发送数据TXD) 和一根输入线 (接收数据RXD) 。串行通信中主要有两种技术问题, 一个是数据传送, 另一个是数据转换。具体说, 在发送端, 要把并行数据转换为串行数据;而在接收端, 则要把接收到的串行数据转换为并行数据。

串行数据传送是将构成字符的每个二进制数据按一定的顺序进行传送的方式,

串行通信协议规定字符数据的传送格式如图1所示, 每个串行数据由起始位、数据位、奇偶校检位和停止位组成。本系统就是利用单片机的串行口, 以串行通信方式, 实现两单片机之间的数据交换, 信息共享。

2、方案设计

本系统利用单片机的串行口, 由软件和硬件两部分协调实现两单片机的串行数据传输。硬件电路以AT89C51单片机为核心, 外围电路包括键盘电路 (数据的输入) , 显示电路 (数据的输出) 。工作在硬件电路基础上的软件主要完成数据的输入, 存储, 显示, 发送和接收。由于两单片机相距很近, 可以直接将其串行口相连。系统整体电路图如图2所示。

3、研究方向和技术关键

本系统主要研究两单片机之间的串行数据传输, 实现两单片机之间的信息共享。将P1口连接2个键盘, 作为输入数据控制端。利用单片机的定时/计数器T1来设定P2口的数据显示, 并通过传输线把数据发送给另外一个单片机。本系统的技术关键在于准确的, 高效率的传输信息。主要技术指标: (1) 比特吞吐特性 (2) 有效性 (3) 数据的安全性

二、设计原理

此设计以AT89C51单片机为核心, 利用其内部的串行口, 通过硬件与软件相结合的方式, 实现双机的全双工的串行通信。硬件电路包括键盘电路, 显示电路, 单片机主控电路, 串行通信线和电源电路。软件包括键盘扫描程序, 显示程序, 发送程序和接受程序。发送和接收都采用

中断方式。硬件电路的组成如图3所示。

由于两个单片机应用系统相距很近, 近程通信时 (通信距离小于15米) , 可以

不使用调制解调器, 将它们的串行口直接相连就可以实现全双工的串行通信。

1、硬件设计

(1) 系统组成

下面就以1号机为例, 介绍硬件。硬件电路包括AT89C51单片机, 共阳性LED数码管以及传输线。

AT89C51是一个低电压, 低功耗, 高性能CMOS 8位单片机, 40个引脚, 32个外部双向输入/输出 (I/O) 端口, 同时内含2个外设中断口, 2个16位可编程定时计数器, 2个全双工串行通信口。AT89C51可以按照常规的方法进行编程, 也可以在线编程。片内含4k bytes的可反复擦写的Flash只读程序存储器和128 bytes的随机存取数据存储器 (RAM) , 器件采用ATMEL公司的高密度、非易失性存储技术生产, 兼容标准MCS-51指令系统。

共阳极七段LED数码管见图4所示。

(2) 单片机主控电路

AT89C51是片内有ROM/EPROM的单片机, 用其构成最小应用系统时, 只要将单片机接上时钟电路和复位电路即可。

(1) 晶振电路

AT89C51单片机的时钟信号通常有两种形式:一种是内部时钟方式, 另外一种是外部时钟方式。内部时钟方式是在单片机的XTAL1和XTAL2引脚外接石英晶体, 就构成了自激震荡并在单片机内部产生时钟脉冲信号。本设计采用内部时钟方式, 可以不受设备条件的影响。

(2) 复位电路

当在AT89C51单片机的RST引脚引入高电平并保持两个机器周期时, 单片机内部就执行复位操作。在实际应用中, 复位操作有两个基本形式:一种是上电复位, 另一种是上电与按键均有效的复位。本系统采用上电与按键均有效的复位。

开机瞬间RST引脚获得高电平, 随着电容C的充电, RST引脚的高电平将获得下降。RST引脚的高电平只能保持足够的时间 (2个机器周期) , 单片机就可以进行复位操作。另外在单片机运行期间, 还可以利用按键完成复位操作。

(3) 键盘电路

按键实际上就是简单的开关, 当按键按下时, 相当于开关闭合;当按键松开时, 相当于开关断开。操作员通过键盘输入数据或命令, 实现简单的人机对话。

按键有独立式按键和行列式按键。独立式按键的各个按键相互独立, 每一个按键独立地与一根数据输入线相连。独立式按键配置灵活, 软件结构简单, 但每个按键必须占用一根口线, 在按键数量多时, 口线占用多。所以, 独立式按键常用于按键数量不多的场合。由于此系统所用的按键较少, 故选用独立式按键。

(4) 显示电路

显示器是单片机应用系统常用的设备, 主要包括LED和LCD。LED显示器由若干个发光二极管组成。当发光二极管导通时, 相应的一个笔画或一个点就发光, 控制相应的二极管导通, 就能显示出对应字符。七段LED通常构成字型“8”, 还有一个发光二极管用来显示小数点。由于LED显示器成本低廉, 配置灵活, 并且与单片机接口方便, 所以本系统选用七段LED显示器 (共阳极) 。

(5) 总体硬件电路图

本设计总体硬件电路图如图5所示。

2、系统软件设计

(1) 总体方案

此系统欲实现双机的全双工的串行通信。甲乙两机的内部软件是完全相同的, 1号机和2号机都能发送和接收数据信息, 能同时进行数据交换。

假设1号机为发送方, 2号机为接收方。当按下发送按键时, 1号机开始发送数据, 存储在R7中并通过显示器显示。按下2号机的接收按键, 2号机开始接收数据, 每接收一个数值就直接送到显示器显示。本设计通过键盘输入数据。利用软件控制键盘进行加1或者减1操作, 可以使其输入0~F之间的任意一个数。

(2) 模块说明

(1) 串行口工作方式

单片机的串行通信口是可编程的, 在工作之前应该初始化, 对它初始化编程只需将两个控制字分别写入特殊功能寄存器SCON[98H]和电源控制寄存器PCON[97H]即可。

串行控制寄存器SCON是一个特殊功能寄存器, 用以设定串行口的工作方式、发送/接收控制以及设置控制状态标志。字节地址为98H, 可进行位寻址, SM0和SM1 (SCON.7和SCON.6) :串行口工作方式选择位, 可选择4种工作方式 (见表1)

本系统采用串行口方式1 (SM0置0, SM1置1) 进行通信, 一帧信息为10位, 其中有1个起始位, 8个数据位和1个停止位。

(2) 中断口设定

AT89C51单片机有5个中断源, 在应用之前应该初始化。

本系统用到外部中断, 外部中断, 作为发送中断, 入口地址是0003H。当此键按下, 转到中断服务程序 (执行发送程序) 。作为接收中断, 入口地址是0013H。当此键按下, 转到中断服务程序 (执行接收程序) 。

中断控制寄存器TCON中IT0位, IT1位应置0, 采用电平触发方式。中断允许控制寄存器IE中EX0、EX1、ES位应置1, 允许中断。

(3) 键盘工作设定

本系统采用独立式按键结构。对于是否有按键按下的信息输入方式有中断方式和查询方式, 本系统采用查询方式。

本系统的键盘控制程序分为以下几个部分:

(1) 判断有无键按下;

(2) 用软件编程的方式控制键盘的输入数值;

(3) 可靠的逻辑处理方法。

(4) 显示工作设定

显示程序用查表法显示, 七段数码管 (共阳性) 显示段选码如表2所示。

三、调试

本设计采用软件和硬件结合的方式进行串行数据传送。在电路板检查完好的前提下, 重在软件的调试。程序写好后, 用Keil C编译软件进行编译检查, 没有语法错误。再用Keil C调试软件对程序进行单步运行, 通过各窗口观察程序每一步的执行结果, 程序工作正常, 程序调试结束。

四、结论

omronplc串行通信 第4篇

关键词:串行通信;RS-232串口;LabVIEW

中图分类号:TP273 文献标识码:A文章编号:1007-9599 (2011) 11-0000-01

Double Computer Serial Communication Based on LabVIEW

Xu Qiujing1,Zhao Qiuying2,Song Yi1

(1.Harbin Huade University,Harbin150025,China;2.Northeast Petroleum University Huarui Institute,Harbin150028,China)

Abstract:When Terminal and computer orbetween computers exchanging information,in addition to the use of parallel means of communication,often uses serial communication mode.The paper used LabVIEW as a programming language,introducing in the LabVIEW programming environment,how to realize the double computer serial communication.

Keywords:Serial communication;RS-232 serial port;LabVIEW

一、串行通信

串行通讯是我们最容易接触到的一种通讯方式。终端与计算机之间或者计算机与计算机之间进行交换信息时,除了采用并行通讯方式之外,还经常采用串行通讯方式。串行通讯是指数据一位一位地按顺序传送,当两台串口设备通信距离较近时,可以直接连接,最简单的情况,在通信中只需三根线(发送线、接收线、信号地线)便可实现全双工异步串行通信。当两台RS-232串口设备通信距离较近时(一般在十米左右),可以用电缆线直接将两台设备的RS-232端口连接;若通信距离较远时,需附加调制解调器。

在实际使用中常使用串口通信线将两个串口设备连接起来。串口线的制作方法非常简单:准备两个9针的串口接线端子(因为计算机上的串口为公头,因此连接线为母头),准备3根导线(最好采用3芯屏蔽线),按图1所示将导线焊接到接线端子上。

图1.串口通信线的制作

图1所示的2号接收脚与3号发送脚交叉连接是因为在直连方式时,把通信双方都当作数据终端设备看待,双方都可发也可收。在这种方式下,通信双方的任何一方,只要请求发送RTS有效和数据终端准备好DTR有效就能开始发送和接收。

二、LabVIEW

LabVIEW是一种程序开发环境,由美国国家仪器(NI)公司研制开发的,类似于C和BASIC开发环境,但是LabVIEW与其他计算机语言的显著区别是:其他计算机语言都是采用基于文本的语言产生代码,而LabVIEW使用的是图形化编辑语言G编写程序,产生的程序是框图的形式。

LabVIEW中有关串口的函数选板它位于函数→仪器I/O→串口,主要包括VISA配置串口、VISA写入、VISA读取、VISA关闭、VISA串口字节数、VISA串口中断、VISA设置I/O缓冲区大小、VISA清空I/O缓冲区八个函数构成。注意:在LabVIEW需安装VISA的驱动程序才能正常使用串口。

三、LabVIEW主要程序面板设计如图2

图2.LabVIEW程序面板设计

四、LabVIEW前面板设计及运行

在两台计算机上分别运行此程序,运行结果如图3所示:

图3.LabVIEW前面板设计及运行结果

参考文献:

[1]马秀龙,董浩斌.基于LabVIEW串口通讯的多路数据采集系统[J].工业控制计算机,2008,21(5):14-15

[2]张桐,陈国顺.精通LabVIEW程序设计[M].北京:电子工业出版社,2008

串行口通信技术开题报告 第5篇

姓 名班 级学号

SCADA系统中串行通信接口程序设计

题目

一、背景、概况及意义

监控系统运行的可靠性,取决于远动装置本身的可靠性和数据传输的可靠性,所以说,通信的质量是关键。为此,我们在通信硬件的配置上选用当今世界上流行的成熟的产品,监控系统通常采用异步串行通信。异步串行通信因为其诞生时间早,使用简单方便,成本低廉,可以适应大规模长距离传输等多种特点,一直得到各个领域的广泛应用,尤其在工业自动化领域,大量的设备和系统采用串行通信方式进行信息交换。

二、研究主要内容

监控系统通常采用异步串行通信,而通用异步收发器(UART)在其中起着至关重要的作用。本课题就是就是针对UART的特点,利用C语言设计异步串行通信接口程序,在硬件调试中达到双方通信的目的。通信软件上运用开放式设计的思想,采用模块化、组合化设计方法。能确保系统的正常安全运行。在监控系统通信中,数据的传输是以报文的形式进行传输的。

三、课题研究的步骤和思路。

1..研究异步串行通信适配器的工作原理。

异步串行通信适配器的关键是通用异步收发器(UART)。常见的UART为INS8250,因此通过研究INS8250来了解异步串行通信适配器的工作原理。通过了解INS8250的外部引脚,UART内部结构和采用UART的异步通信适配器硬件结构逻辑,为接下来的串行通信程序设计做准备。

2.分析和探讨监控系统通信中串行通信工作原理。

通过学习串行通信的基本概念、数据传送方式、波特率和收|发时钟、信号调制解调、差错控制、信道复用和串行通信的基本方式来掌握串行通信的工作原理。

3.设计串行通信接口的初始化程序。

作为系统的外设,异步通信适配器和中断控制器都有其对应的I/O 口地址,本次设计采用 C 语言函数库对芯片进行读写。确定数据传输帧格式(包括数据位长度、停止位长度及有无奇偶校验和校验的类型)、确定传输波特率以及确定INS8250的操作方式。

4.分析和探讨常用的异步串行通信协议。

查阅相关书籍学习异步串行通信协议。

5.尝试设计基于异步串行通信协议的程序。

完成中断服务程序、收发字符程序和主函数的设计。

6.调试、测试通信软件

单机测试、近距离两台通信设备测试、采用MODEM方式调试和无线电台方式调试

7.完成毕业设计说明书一份。

8.完成英文资料的翻译。

四、参考文献

钱清泉.电气化铁道微机监控技术.中国铁道出版社.2011

杨全胜.现代微机原理与接口技术.电子工业出版社2002

omronplc串行通信 第6篇

一、实验目的及要求

1、了解掌握RS-232接口标准以及 DB9的主要引脚功能;

2、了解掌握串口通信的基本原理;

3、学习掌握RS-232电缆的制作和测试方法;

4、学习掌握使用串口调试程序进行串口之间的通信实验。

二、实验原理

1、异步串行通信原理

在计算机系统中,每个字符一般使用一个 8 位二进制代码表示。在数据通信中,通常将 传送的每个字符的二进制代码按照由低位到高位的顺序依次发送的方式称为串行通信。图 2-1 是串行通信的示意图。由于串行通信只需在发送方和接收方之间建立一条通信信道,因 此可以减小通信系统的造价。在远程通信中,一般采用串行通信方式。

图 1-1 串行通信示意图

同步是数据通信中必须解决的一个重要问题。所谓同步就是要求通信的收发双方在时间基准上保持一致。在串行通信中,“异步”是同步收发双方通信的重要方式。在异步串行通信中,每个字符作为一个独立的整体进行发送,字符之间的时间间隔可以是任意的。为了实现同步,需要在每个字符的第一位前加 1 位起始符(逻辑 1),并在字符的最后一位后加 1位、1.5 位或 2 位停止位(逻辑 0)。异步串行传输的比特流结构如图 2-2所示。

图 1-2 异步串行传输的比特流结构

常用的串行通信接口标准包括RS-232、RS-449、V.24、V.35等。其中,RS-232是最常 用的串行通信标准之一。个人计算机及终端系统中配备的串行接口几乎都符合 RS-232 标准。

2、RS-232 接口标准

串行口是一种最基本的通信接口,基本上所有的个人计算机及通信终端设备都配有这种接口。RS-232 的主要内容就 是定义数据终端设备DTE(data terminal equipment)和数据通信设备DCE(data circuit equipment)之间的接口标准。RS-232 是美国电子工业协会 EIA 推荐使用的串行通信标准。其初衷是为了促进利用电话网进行数据通信应用的发展,现在也普遍应用于各类计算机或终端设备之间的短距离连接。

RS-232 使用的连接器包括 DB-

25、DB-15 和 DB-9 等几种类型,不同类型连接器使用的引脚定义也各不相同。

计算机 RS-232 串行通信的基本过程。图 1-4 异步串行通信实验总体结构示意图

三、实验过程与实验步骤

1、使用制作的 RS-232电缆将 2台计算机的可用 COM 口连接起来。

2、复制串口调试助手到硬盘上。

3、直接双击 “串口调试助手 3.0”运行软件。检查串口线是否连接到计算机和设备上。确定串口(本机为com1)。在串口调试助手中打开串口:com1。

4、使用字符串收发

5、使用文件传输功能

使用文件传输功能,在 2 台电脑上传输文件,这对于某些特定场合可以用到该功能。首先由接收一端在打开串口后,按下接收文件按钮。

之后会弹出一个对话框,等待对方发送文件。

发送一端在打开串口后,先选择发送文件(如下图)

选择文件后,按下发送按钮,文件开始传输中,这时 2 端都可以看到发送的进度条。发送完毕后,软件会提示!

四、实验结果与分析:串口(com1)

1、正常发送:

(1)A机:波特率相同(9600)、校验位相同(none)、数据位相同(8)、停止位相同(1)

B机:波特率相同(9600)、校验位相同(none)、数据位相同(8)、停止位相同(1)结果:A机发“你好”,B机收“你好”,(图1); B机发“哈哈”,A机收“哈哈”,(图2);

图1

图2(2)、A机:波特率相同(19200)、校验位相同(ODD)、数据位相同(8)、停止位相同(2)

B机:波特率相同(19200)、校验位相同(ODD)、数据位相同(8)、停止位相同(2)结果:A机发“我很好”,B机收“我很好”;图3); B机发“你呢”,A机收“你呢”;图4);

图3

图4

2、波特率不同

A机:波特率相同(4800)、校验位相同(ODD)、数据位相同(8)、停止位相同(1)B机:波特率相同(9600)、校验位相同(ODD)、数据位相同(8)、停止位相同(1)结果:A机发“01 02 03”,B机收“胉”;(图5); B机发“yjw”,A机收“?”;(图6); 分析: 图6

图5 波特率控制采样时间间隔,波特率不相同,收发双方在 相等时间内接收和发送数据 不一致。

3、数据位不同

A机:波特率相同(9600)、校验位相同(ODD)、数据位相同(6)、停止位相同(1)B机:波特率相同(9600)、校验位相同(ODD)、数据位相同(8)、停止位相同(1)结果:A机发“040506”,B机收“?”,(图7); B机发“lys”,A机收“,9>”,(图8); 分析:数据位不相同,收发双方在相等时间内接收和发送数据不一致,所以结果不相同

图7

图8

4、奇偶校检不同

(1)A机:波特率相同(9600)、校验位相同(EVE)、数据位相同(8)、停止位相同(1)

B机:波特率相同(9600)、校验位相同(ODD)、数据位相同(8)、停止位相同(1)结果:A机发“54 85 96 75”,B机收“54 85 96 75”;(图9)B机发“第五种”,A机收“第五种”;(图10)分析:因为校验位用于检验 接收和发送的数据的正确性的,在最终转换时会去除校验位,所以接收到的有效数据和发送的有效数据相同,发送与接收结果一样。

图9

图10(2)A机:波特率相同(9600)、校验位相同(NONE)、数据位相同(8)、停止位相同(1)

B机:波特率相同(9600)、校验位相同(ODD)、数据位相同(8)、停止位相同(1)结果:A机发“54 85 96 75”,B机收“

”;(图11)

B机发“第六种”,A机收“第六种”;(图12)

分析:由于A机无校验位,B机有校验位,所以B机在收到数据并校检,后会自动去除校检位以致发双方的有校数据不一致,结果不一样。

相反的。当A机为接收方时,虽然A机无检验位,但是因为A机已接收到8位数据故不接收B机发送的校检位。结果一样。

图11

图12

5、停止位不同

A机:波特率相同(9600)、校验位相同(ODD)、数据位相同(8)、停止位不同(1)B机:波特率相同(9600)、校验位相同(ODD)、数据位相同(8)、停止位不同(2)

图13

结果:A机发“B机收“B机发“

”,A机收“

”,”;(图13)”;(图14)

图14 分析:

5、发送文件

A机:波特率相同(9600)、校验位相同(NONE)、数据位相同(8)、停止位相同(2)B机:波特率相同(9600)、校验位相同(NONE)、数据位相同(8)、停止位相同(2)结果分析:

当有校检位时,不可以接收文件;波特率不同、校验位不同、数据位同或停止位不同时,文件无法接收;即唯有当波特率相同、数据位相同、停止位相同且无校检位时,方可以正确接收文件。

五、思考并回答以下问题:

(1)在本实验中,RS—232 串口电缆处于 OSI 参考模型的什么位置?它的作用是什么?

答:处于OSI 参考模型的物理层,其作用是作为传输介质,连接通信的网络节点,实现比特流的透明传输,为数据链路层提供数据传输服务。

(2)在本实验中,数据和信号分别体现在 OSI参考模型的什么位置?两者之间有何区别?

答:数据体现在数据链路层,信号体现在物理层。两者区别在:数据链路层:为网络层提供服务的,解决两个相邻结点之间的通信问题,传送的协议数据单元称为数据帧。物理层:OSI模型的最底层。它提出了网络的物理特性,比如连接的电缆类型。这里是二进制值0和1的世界,也就是数据以信号的电特性(高低电平)来表示。

(3)什么是波特率?为何两台 PC 的波特率不同就不能正常通信?

答:波特率又称调制速率、传码速率,记为Nbd,是指在数据通信系统中,每秒钟传输信号码元个数,单位是波特。

omronplc串行通信 第7篇

(1)打开和关闭串行端口

CreateFile函数用于打开串行口。

hPort=CreateFile(TEXT(“COM1:”),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL)。注意COM1后要有一个冒号。最后一个参数dwFlagsAndAttributes必须为0,因为Windows CE只支持非重叠I/O。第3个参数dwShareMode也必须为0,通信端口不能像文件一样被共享。这个函数的返回值是已打开的串行端口的句柄或者是INVALID_HANDLE_VALUE。

关闭串行口可以调用CloseHandle(hPort)。

(2)配置串行端口

配置串行口主要是用DCB结构配置端口设置,包括波特率、停止位、数据位长度、校验位、流量控制等等,还有配置超时值。

首先打开串行端口,用GetCommState函数获得当前打开串口配置,然后根据需要修改DCB成员,最后用SetCommState函数设置新的串口配置。

DCB PortDCB; //创建DCB变量

Port.DCB.DCBlength=sizeof(DCB);

GetCommState(hPort,&PortDCB); //获取当前串口配置修改DCB成员

PortDCB.BaudRate=9600; //波特率

PortDCB.Parity=NOPARITY; //校验位

PortDCB.StopBits=ONESTOPBIT; //停止位

PortDCB.ByteSize=8;

.

.

.

SetCommState(hPort,&PortDCB); //设置新的串口配置

对串行端口来说,必须配置超时值,否则程序可能陷入到一个循环来等待来自串口的字符。这对采用Windows CE的设备来说,将大大减少设备电池的使用时间,所以超时值是需要配置的。另外一种解决办法就是采用多线程。多线程将在下一部分讲述。

通常,配置超时值和配置串口类似。首先用GetCommTimeouts函数获得当前串口的超时值。然后可以修改COMMTIMEOUT成员,最后用SetCommTimeouts函数设定超时值。

COMMTIMEOUTS CommTimeouts; //定义COMMTIMEOUTS结构

GetCommTimeouts(hPort,&CommTimeouts); //获得当前的超时值

//修改COMMTIMEOUT成员

CommTimeouts.ReadIntervalTimeout=MAXDWORD;

CommTi

meouts.ReadTotalTimeoutMultiplier=0;

CommTimeouts.ReadTotalTimeoutConstant=0;

CommTimeouts.WriteTotalTimeoutConstant=1000;

CommTimeouts.WriteTotalTimeoutMultiplier=10;

SetCommTimeouts(hPort,&CommTimeouts); //设定超时值

(3)读写串行端口

用ReadFile和WriteFile函数读写串行口。

int rc;

DWORD cBytes;

BYTE ch;

Rc=ReadFile(hPort,&ch,1,&cBytes,NULL);

其中第一个参数是串口句柄,第2个参数是读回的字符,第3个参数是要读取的字符数量,第4个参数返回实际读取到的字符数量。

Int rc;

DWORD cBytes;

BYTE ch=TEXT(“a”);

Rc=WriteFile(hPort,&ch,1,&cBytes,NULL);

其中第一个参数是串口句柄,第2个参数是要写入的字符,第3个参数是要写入的字符数量,第4个参数返回字符写入的字符数量。

需要注意的是Windows CE不支持重叠I/O,所以如果在主线程进行大量读写串口操作时,有可能使整个程序陷入缓慢的串口等待中去,因此一般都采用多线程来进行读写串口操作。

(4)通信事件

在Windows CE编程中,除了可以采用单独的线程来处理读写串口操作外,还可以采用利用通信事件的方法。通信事件就是当发生重要事件时,Windows CE向应用程序发送的通知。利用WaitCommEvent函数阻塞线程,直到特定的事件发生。一般的使用方法是:先用SetCommEvent函数指定要查找的一个或多个事件,然后,调用WaitCommEvent函数,并指定导致这个函数返回的事件。当WaitCommEvent函数返回后,循环调用ReadFile函数,读回所有接收到的字符。最后再次调用SetCommEvent函数,指定下次要查找的事件。

3 Windows CE下的多线程

Windows CE是一个完全的多任务、多线程的操作系统。Windows CE同时最多可以运行32个进程。每个进程有一个主线程,而且可以有多个附加线程。附加线程的多少仅受可用内存和线程堆栈的进程地址空间的限制。

Windows CE是以抢先方式调度线程的。线程以时间片为单位来运行,通常是25ms。线程拥有优先级,所有高优先级的线程都将在低优先级的线程之前运行。在可以调度被设定为特定优先级的线程之前,所有拥有高优先级的线程都必须被阻塞。同等优先级的线程以循环方式来调度。如果高优先级的线程停止阻塞,而低优先级的线程目前正在运行,则低优先级的线程会立刻被挂起,同时去调度高优先级的线程。低优先级的线程永远不会抢占高优先级的线程,当然也有例外:一种是线程具有优先级THREAD_PRIORITY_TIME_CRITICAL,它永远不会被抢占;另一种就是低优先级的线程拥有高优先级的线程正在等待的`资源,出现优先级倒置。在Windows CE中,线程可以有8种优先级。

下面是一个创建线程和线程函数的例子:

HANDLE hThread;

DWORD dwThreadID=0;

Int nParameter=5;

HThread=CreateThread(NULL,0,Thread,nParameter,0,&dwThreadID); //创建线程

CloseHandle(hThread); //关闭线程

//线程函数

DWORD WINAPI Thread (PVOID pArg)

{

int nParam=(int)pArg;

.

.

.

return 0x15;

}

CreateT

hread函数在许多参数在Windows CE下都不支持,所以被设为NULL或0。第3个参数指向线程函数的开始,第4个参数是CreateThread函数传到线程函数的唯一参数。CreateThread函数返回线程句柄,当这个句柄不需要时,调用CloseHandle函数关闭它。线程函数在被终止之前一直运行,调用ExitThread函数可终止线程的执行。

对于在系统中运行的多个线程,需要协调它们的活动,也就是实现同步。在Windows CE中,采用的方法是使用同步对象。一个线程等待一个同步对象,当用信号通知该对象时,解除阻塞正在等待的线程并调度该线程。同步对象包括事件和互斥体。在这里我们只介绍事件。

事件对象就是一种有两种状态――有信号和元信号的同步对象。事件被创建后自动被置为信号状态。事件可以被命名,从而被不同进程共享。采用下面的函数创建事件:

HANDLE CreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes,BOOL bManualReset,BOOL bInitialState,LPTSTR lpName);

函数的第1个参数应为0,第2个参数表示事件成为有信号后应该人工重置或自动重置为无信号状态,第3个参数表示创建时事件是有信号还是无信号状态,最后一个参数指向事件名。被命名的事件可以被进程共享,否则就设为NULL。创建事件后,就可以采用SetEvent函数或者是PulseEvent函数用信号通知该事件。

SetEvent函数是自动重置事件,只释放一个线程来运行;PulseEvent函数是人工重置事件,释放所有等待那个事件的线程。最后可以用CloseHandle函数破坏事件对象。

事件的用法通常是,线程使用了下列函数中的一个来等待事件:WaitForSingleObject、WaitForMultipleObjects、MsgWaitForMultipleObjects或MsgWaitForMultipleObjectsEx。当线程被这些函数的其中一个阻塞时,线程只消耗少量的电能和CPU处理能力。需要注意的是:应用程序的主线程不能被WaitForSingleObject或WaitForMultipleObjects阻塞,否则主线程无法处理消息循环。通常的做法是采用多线程,主线程处理消息循环,附加线程处理需要在事件上阻塞的共享资源。

4 实际应用

在车载定位系统中,导般计算机需要接受多种传感器的数据输入,其中最常用到的就是GPS数据。通常GPS接收机的通信方式是串行RS232接口,所以导航程序的GPS模块的功能就是接收从串口收到的数据,然后进行处理。

程序采用多线程,主线程负责消息处理,另外还有读写两个附加线程,使用一个事件触发。读线程负责从串口读回GPS数据,写线程由事件触发。在网络补充版(收集整理)中给出GPS数据接收程序的代码。

串行口通信技术应用探究 第8篇

计算机与外部设备的连接,不是通过并行口就是通过串行口。并行口编程很简单,相对而言,串行口的编程就要复杂得多了。为了进行可靠的串行通信,标准串行口必须具有握手信号和状态信息。但由于串行口通信是为相距一定距离的两台或两台以上设备提供彼此连接的最方便的办法,尽管编程较复杂,但应用得还是相当广泛。下面针对串口通信进行探究。

1 数据异步串行的发送和接收

数据异步串行的发送和接收具有异步和串行两个特点。所谓“串行”是指一次一个数据位,而并行是一次一个字节。所谓“异步”,是指相邻两个字节之间的停顿时间是长短不一的,尽管同一个字节内各位的定时和顺序是非常严格的。很容易想到有异步串行就会有同步串行,但是为了简单起见,这里把异步串行口就简称为“串行口”。在串行口中收发的每一个字节数据是由以下4个部分按顺序组成的:1个起始位,8个数据位(在某些情况下是7个),奇偶校验位(可有可无,可奇可偶),1个或2个停止位。在每两个字节之间,可以停顿任意长时间。

数据收发线的空状态是高电平。起始位标志着一个新字节传送的开始,与一个数据位占用同样的时间宽度,低电平。起始位之后是奇偶校验位,在奇偶校验位之后就是停止位,它可以占一位或两位数据位的时间宽度。停止位是低电平,它表示一个字节传送的结束。在停止位之后,可以接着又是下一个字节的起始位,也可以在停顿任意长时间之后,才是下一个字节的起始位。

2 RS-232标准

2.1 RS-232标准信号

大部分串行口的结构都是在发送和接收双方都装有一个25针插座,都不很严格地遵循RS-232标准。制造厂家最经常提供的RS-232信号是:针号为3的TXD(发送数据);针号为2的RXD(接收数据);针号为5的GRD(地)。这些信号中许多是为支持Modem而定义,在计算机和Modem之间建立硬件规约,以便在Modem可以接收数据之前计算机不会向它发送数据,在Modem准备好数据之前计算机不会从它那儿接收数据。

如果控制通信双方串行口的内部时钟彼此不一样,则可能引起所谓的“帧错”(framing error)。容易想到,接收方的串行口一旦检测一个起始位,它就会周期性地去对传输线进行取样,得到每一位的信号。这个周期的长短是由波特率计算出来的。然而,每次取样的实际时刻却是由系统内部的主时钟决定的,在传输线上并没有这样一个取样时钟信号。因此,如果双方的波特率不一致,或者系统内部的主时钟发生了偏差,都可能造成发送和接收双方不协调一致,从而发生“帧错”。

2.2 硬件握手

通过串行口发送数据的正确做法是不断地监视接收口上的CTS信号。只有当CTS信号表明可以安全发送数据时才去发送数据。因此,当使用了硬件握手信号时,伪C码描述的发送程序如下所示:

如果通信双方都支持RS-232标准,并且彼此之间的电缆连接也是正确的,那么显然应该使用握手信号。但是,实际情况两者大都不能同时满足。

3 通信问题

如果通信是在计算机之间进行,则也可以只使用GND,TXD和RXD三个信号线就能解决问题。如果两台同样类型的计算机彼此进行通信,当一台准备好发送数据时,在理论上另一台一定准备好接收这个数据,这样可以省略掉RTS、CTS这些信号了。但是省略掉这些信号之后,却可能招来很多其他麻烦,其中最糟糕的就是“过冲”(Overrun)错。

当连接两个串行口的电缆线只有三根(GND,RXD,TXD)时,发送方根本无法知道接收方什么时候可以接收数据,所以只好造一个假信号去愚弄发送对方,使它误以为接收方任何时候都准备好了接收数据。具体做法是把25针插座中的针6(DSR),针8(CD)和针20(DTR)直接连接在一起。但这样一来却很容易引起“过冲”错。例如,假设计算机A比计算机B速度快,由于没有任何硬件握手信号,计算机A误以为计算机总是可以接收数据的,结果在计算机B可以来得及读取计算机A发送来的第一个字节之前,计算机A又发送来了第二个字节,这就引起了“过冲”错。即使计算机B的速度比计算机A快,但计算机B的软件速度太慢也可能引起这类“过冲”错。

4 通过BIOS调用存取PC的串口

4.1 串行口的初始化

在使用串行口之前,需要首先对它进行初始化,以便设置与缺省设置不一样的串行口参数。第一个串行口的缺省设置是1200波特率,偶校验,7个数据位,1个停止位。中断14H的子功能号0就是用来初始化串行口的,其入口参数是:寄存器AH等于0,AL为初始化参数,DX为串行口号。一个字节的初始化参数分为4个部分:位7至位5说明波特率的大小,位4和位3说明有无校验位和什么样的校验,位2说明停止位的位数,位1和位0说明数据位的位数,其格式如图1所示。

比如某个串行口的波特率为9600,偶校验,1个停止位,8个数据位,则AL寄存器中的值是11111011,即十进制251。

在一台标准的PC机上,最多可以有7个串行口。在一些较新的计算机上,串行口的数目还要多。在使用BIOS调用时,需要在DX寄存器内说明初始化哪一个串行口。串行口的编号是从0开始。下面的int_port函数就是对串行口进行初始化的。

4.2 发送一个字节

中断14H中的子功能号1是用来通过串行口发送一个字节的,其入口参数是:AH寄存器含有状态信息。如果返回时AH寄存器的位7是1,则表明发送有错。错误的具体原因和性质还必须通过读串行口的状态才能断定。下面就是通过指定串行口发送一个字节的函数sport。

4.3 检查串行口的状态

中断14H中的子功能号3是用来检查串行口的状态的,其入口参数是:寄存器AH等于3,DX是串行口号。返回时,AH和AL寄存器含有串行口的状态信息,当某一位置1时,其相应的含义如下:

从上面的表可以看出,这些状态大部分是针对Modem的。如果使用串行口的目的是为了把计算机和非调制解调器设备相连接,则可以忽略其中大部分状态信息。然而有一个状态信息在此种情况下却是至关重要的,这就是AH寄存器位0的“数据准备好”信息。借助于这个信息就可以知道串行口是否接到一个字节可以被CPU读取。下面就是通过串行口读取一个字节的函数rport。

应该注意,如果串行口当前无数据可读,中断14H的子功能号2是一直等待的,直到接收到一个字节才返回。但采用这个办法后,当遇到某些串行口错误时,例如,忘记插电缆,就可能使计算机“死机”。为了避免这个问题的发生,函数rport首先读取指定串行口的状态,检查“数据准备好”这一位。如果没有准备好,则还调用kbhit函数去检查用户是否打入了一个键。如果没有击键,则继续循环检查“数据准备好”位。如果击了一键,则去读取这个键值并退出。

5 在计算机之间传送文件

当多个型号不同计算机要共享数据或程序,若硬件上已经提供了硬件握手信号,则应尽量利用。但实际环境常常不提供这些信号或提供的不准确,这时为避免文件传送过程中发生“过冲”错的唯一办法就是实现软件握手,即发送方发送一个字节后,就一直等待着从接收方收到一个“认可”字节,只有在收到这个“认可”字节以后,发送方才发送第二个字节,并接着等待接收方收到第二个“认可”字节,这个过程一直持续到整个文件发送完毕。如果使用伪C码来表示,可以把发送和接收程序过程描述如下:

尽管软件握手的办法会降低文件传送速度,但却提供了传输的可靠性办法。

6 结束语

采用软件握手以后,不管两台计算机的速度相差多远,发送方永远也不会超前于接收方。传送文件的每一个字节,在传送线上要来回传送两次,因此降低了速度,却实现了可靠性。

参考文献

[1]李牧,何明星,汤波,胡训强.微机系统与接口[M].北京:冶金工业出版社,2007.

[2]王效华,张咏梅.单片机原理与应用[M].北京:北京交通大学出版社,2007.

[3]串口通信协议[EB/OL].http://baike.baidu.com/view/2459734.htm

串行通信与重叠I/O 第9篇

关键词:串行通信;RS232;重叠;I/O;Win API

中图分类号:TN914文献标识码:A文章编号:1007-9599 (2010) 06-0000-02

Serial Communication and Overlapping I/O

Yu Lu,Li Qing

(PLA 91550 Troop,Dalian116023,China)

Abstract:The serial communication to facilitate easy,widely used in both military and civilian.In combination with the hardware described in detail in the Windows environment,use the Win API for asynchronous serial communication method.

Keywords:Serial communication;RS232;Overlap;I/O;Win API

一、前言

串行通讯在通讯领域被广泛应用,标准的RS232接口已成为计算机、计算机外设、交换机和许多通讯设备的标准接口。微机与微机、微机与外设、微机与程控交换机等都可以通过RS232接口进行方便的连接,以实现控制外设和传输数据等目的。

在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题。笔者在实际工作中积累了一些经验,现结合硬件、软件,及需要注意的要点作一番探讨。希望对各位需要编写串口通信程序的朋友有一些帮助。

二、RS232串口标准

EIA-RS-232是美国电子工业协会正式公布的串行总线标准,也是目前最常用的串行接口标准。该标准规定:直接连接的最大物理距离为15m,通讯速率低于20kbps。

由于RS232并未定义连接器的物理特性,因此,出现了DB-25、DB-15和DB-9各种类型的连接器,其引脚的定义也各不相同。表1介绍了其中两种连接器(DB-25,DB-9)。

RS232标准接口有25条线,4条数据线、11条控制线、3条定时线、7条备用和未定义线,但常用的只有9根。

目前较为常用9针串口和25针串口,当通信距离较近时,可以用电缆线直接连接,若距离较远,须附加Modem。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连。表2列举了RS232串口通信接线方法。

EIA-RS-232对电气特性、逻辑电平和各种信号线功能都作了规定。

在TxD和RxD上:

逻辑1(MARK)=-3V~-15V。

逻辑0(SPACE)=+3V~+15V。

在RTS、CTS、DSR、DTR和DCD等控制线上:

信号有效:(接通,ON状态,正电压)=+3V~+15V。

信号无效:(断开,OFF状态,负电压)=-3V~-15V。

三、Win32串口应用程序

(一)打开串口

Win32系统把文件的概念进行了扩展。无论是文件、通信设备、命名管道、邮件槽、磁盘、还是控制台,都是用API函数CreateFile来打开或创建的。该函数的声明为:HANDLE CreateFile(LPCTSTR lpFileName,//文件名DWORD dwDesiredAccess,//访问模式DWORD dwShareMode,//共享模式LPSECURITY_ATTRIBUTES lpSecurityAttributes,//通常为NULL

DWORD dwCreationDistribution,//创建方式

DWORD dwFlagsAndAttributes,//文件属性和标志

HANDLE hTemplateFile // 临时文件的句柄,通常为NULL

);

如果调用成功,那么该函数返回文件的句柄,如果调用失败,则函数返回INVALID_HANDLE_VALUE。

(二)串口配置和串口属性

在打开通信设备句柄后,常常需要对串口进行一些初始化工作。这需要通过一个DCB结构来进行。DCB结构包含了诸如波特率、每个字符的数据位数、奇偶校验和停止位数等信息。在查询或配置串口的属性时,都要用DCB结构来作为缓冲区。

调用GetCommState函数可以获得串口的配置,该函数把当前配置填充到一个DCB结构中。一般在用CreateFile打开串口后,可以调用GetCommState函数来获取串口的初始配置。要修改串口的配置,应该先修改DCB结构,然后再调用SetCommState函数用指定的DCB结构来设置串口。

除了在DCB中的设置外,程序一般还需要设置I/O缓冲区的大小和超时。Windows用I/O缓冲区来暂存串口输入和输出的数据,如果通信的速率较高,则应该设置较大的缓冲区。调用SetupComm函数可以设置串口的输入和输出缓冲区的大小。

(三)串口读写

在用ReadFile和WriteFile读写串口时,既可以同步执行,也可以重叠(异步)执行。在同步执行时,函数直到操作完成后才返回。这意味着在同步执行时线程会被阻塞,从而导致效率下降。在重叠执行时,即使操作还未完成,调用的函数也会立即返回。费时的I/O操作在后台进行,这样线程就可以干别的事情。例如,线程可以在不同的句柄上同时执行I/O操作,甚至可以在同一句柄上同时进行读写操作。“重叠”一词的含义就在于此。

ReadFile函数只要在串口输入缓冲区中读入指定数量的字符,就算完成操作。而WriteFile函数不但要把指定数量的字符拷入到输出缓冲中,而且要等这些字符从串口送出去后才算完成操作。

ReadFile和WriteFile函数是否为执行重叠操作是由CreateFile函数决定的。如果在调用CreateFile创建句柄时指定了FILE_FLAG_OVERLAPPED标志,那么调用ReadFile和WriteFile对该句柄进行的读写操作就是重叠的,如果未指定重叠标志,则读写操作是同步的。

函数ReadFile和WriteFile的参数和返回值很相似。这里仅列出ReadFile函数的声明:

BOOL ReadFile(

HANDLE hFile,//文件句柄

LPVOID lpBuffer,//读缓冲区

DWORD nNumberOfBytesToRead,//要求读入的字节数

LPDWORD lpNumberOfBytesRead,//实际读入的字节数

LPOVERLAPPED lpOverlapped//指向一个OVERLAPPED结构

);//若返回TRUE则表明操作成功

需要注意的是如果该函数因为超时而返回,那么返回值是TRUE。参数lpOverlapped在重叠操作时应该指向一个OVERLAPPED结构,如果该参数为NULL,那么函数将进行同步操作,而不管句柄是否是由FILE_FLAG_OVERLAPPED标志建立的。

当ReadFile和WriteFile返回FALSE时,不一定就是操作失败,线程应该调用GetLastError函数分析返回的结果。例如,在重叠操作时如果操作还未完成函数就返回,那么函数就返回FALSE,而且GetLastError函数返回ERROR_IO_PENDING。

在使用重叠I/O时,线程需要创建OVERLAPPED结构以供读写函数使用。OVERLAPPED结构最重要的成员是hEvent,hEvent是一个事件对象句柄,线程应该用CreateEvent函数为hEvent成员创建一个手工重置事件,hEvent成员将作为线程的同步对象使用。如果读写函数未完成操作就返回,就那么把hEvent成员设置成无信号的。操作完成后(包括超时),hEvent会变成有信号的。

如果GetLastError函数返回ERROR_IO_PENDING,则说明重叠操作还为完成,线程可以等待操作完成。有两种等待办法:一种办法是用象WaitForSingleObject这样的等待函数来等待OVERLAPPED结构的hEvent成员,可以规定等待的时间,在等待函数返回后,调用GetOverlappedResult。另一种办法是调用GetOverlappedResult函数等待,如果指定该函数的bWait参数为TRUE,那么该函数将等待OVERLAPPED结构的hEvent事件。GetOverlappedResult可以返回一个OVERLAPPED结构来报告包括实际传输字节在内的重叠操作结果。

如果规定了读/写操作的超时,那么当超过规定时间后,hEvent成员会变成有信号的。因此,在超时发生后,WaitForSingleObject和GetOverlappedResult都会结束等待。WaitForSingleObject的dwMilliseconds参数会规定一个等待超时,该函数实际等待的时间是两个超时的最小值。注意GetOverlappedResult不能设置等待的时限,因此如果hEvent成员无信号,则该函数将一直等待下去。

在调用ReadFile和WriteFile之前,线程应该调用ClearCommError函数清除错误标志。该函数负责报告指定的错误和设备的当前状态。

调用PurgeComm函数可以终止正在进行的读写操作,该函数还会清除输入或输出缓冲区中的内容。

(四)超时设置

在用ReadFile和WriteFile读写串口时,需要考虑超时问题。如果在指定的时间内没有读出或写入指定数量的字符,那么ReadFile或WriteFile的操作就会结束。要查询当前的超时设置应调用GetCommTimeouts函数,该函数会填充一个COMMTIMEOUTS结构。调用SetCommTimeouts可以用某一个COMMTIMEOUTS结构的内容来设置超时。

有两种超时:间隔超时和总超时。间隔超时是指在接收时两个字符之间的最大时延,总超时是指读写操作总共花费的最大时间。写操作只支持总超时,而读操作两种超时均支持。用COMMTIMEOUTS结构可以规定读/写操作的超时,该结构的定义为:

typedef struct_COMMTIMEOUTS {

DWORD ReadIntervalTimeout;//读间隔超时

DWORD ReadTotalTimeoutMultiplier;//读时间系数

DWORD ReadTotalTimeoutConstant;//读时间常量

DWORD WriteTotalTimeoutMultiplier;//写时间系数

DWORD WriteTotalTimeoutConstant;//写时间常量

} COMMTIMEOUTS,*LPCOMMTIMEOUTS;

COMMTIMEOUTS结构的成员都以毫秒为单位。总超时的计算公式是:总超时=时间系数×要求读/写的字符数+时间常量

例如,如果要读入10个字符,那么读操作的总超时的计算公式为:读总超时=ReadTotalTimeoutMultiplier×10+ReadTotalTimeoutConstant

可以看出,间隔超时和总超时的设置是不相关的,这可以方便通信程序灵活地设置各种超时。

如果所有写超时参数均为0,那么就不使用写超时。如果ReadIntervalTimeout为0,那么就不使用读间隔超时,如果ReadTotalTimeoutMultiplier和ReadTotalTimeoutConstant都为0,则不使用读总超时。如果读间隔超时被设置成MAXDWORD并且两个读总超时为0,那么在读一次输入缓冲区中的内容后读操作就立即完成,而不管是否读入了要求的字符。

在用重叠方式读写串口时,虽然ReadFile和WriteFile在完成操作以前就可能返回,但超时仍然是起作用的。在这种情况下,超时规定的是操作的完成时间,而不是ReadFile和WriteFile的返回时间。

四、结束语

以上给出了用Win32 API设计串行通信的基本思路,这个重叠(异步)I/O操作的串行通信程序,曾多次应用于大型任务,表现出良好的性能。在实际应用中,可以以此为模型稍加改造,设计出满足需要的各种串行通信程序。

参考文献:

[1]李现勇.Visual C++串口通信技术与工程实践[M].人民邮电出版社,2004,7

PLC和PC机间的串行通信 第10篇

HG-2003型温升测控装置是笔者与我国北京某科学研究联联合开发的一套专门用于高压晶闸管阀温升检测试验的测控装置。考虑到PLC及其网络已被公认为现代测控装置开发的几大支柱之一,而且从近几年的统计数字来看,PLC产品在世界范围内的产量、销量高居各测控器件榜首,因此笔者决定本测控系统的核心器件采用可编程控制器(PLC),其基本功能可通过软件编程实现。PLC的三大亮点是:(1)集电控、电传、电仪三电于一体;(2)网络的性能价格比高;(3)可靠性高。这些亮点就使得整个测控设备结构简单、可靠性高,同时也为实现系统控制功能的二次开发奠定了良好的技术基础。本文主要讨论设备中所采用的西门子公司的S7-200型PLC和PC机之间的串行通信问题。

1、温升测控系统整体介绍

1.1 HG-2003测控装置的测控对象及结构

先来介绍一下该温升试验测控装置的基本工作流程。10kV电源进线经过进线框中的高压断路器CB和高压隔离开关柜中的隔离开关G(用于在设备检修或维护时形成一个明显的断点)后,加在10kV转换变压器T1上。该变压器将三相电转化为单相电。这主要是由于做实验时负载电流很大,如果使用三相电源,容易造成负荷电流的不平衡从而造成试验故障。在转换变压器的输出端(二次侧)连接单相温升试验变压器T2。该温升变压器的一次侧应加装用于无功功率补偿的电容柜,二次侧则通过有载分接开关直接连接试验品(即高压晶闸管阀)进行温升试验。

从基本工作流程不难知道测控装置的测控对象,本装置的具体测控对象如表1所示。

表1 测控对象表

测控装置的物理结构分为两部分:操作控制台和试区控制箱。其中,试区控制箱即PLC控制箱被安装在试验区的隔离开关框内。操作控制台即PC机人机办是非曲直操作台则安装在控制室内。由于二者之间相距约40m,所以采用PC/PPI电缆传输测控信号时需加装中继器。

1.2 HG-2003测控装置的基本功能

本测控系统的基本功能包括:开关分合控制指示功能;设备和试品的过流、过压、过热报警及保护功能;各种操作连锁功能,如电源开关柜内10kV电源断路器和隔离开关柜内的手动隔离开关、控制室门触点、试验大厅门触点间的连锁保护功能等,并设有相关的报警提示画面。这些功能可以避免操作顺序出错。

2、S7-200通信程序的设计与实现 2.1 PC机与S7-200的通信方式

西门子S7-200 PLC的通信功能较强,有多种通信方式可供用户选择,如:单主站方式、多主站方式以及使用调制解调器的远程通信方式等。在本测控装置中,笔者采用单主站方式。在运行Windows或Windows NT操作操作的个人计算机(PC机)上安装STEP 7-Micro/WIN32编程软件后,PC机就可作为通信中的主站。它可与一个或多个从站相连,STEP 7-Micro/WIN 32每次和一个S7-200 CPU通信,但可以访问网络上的所有CPU。该通信方式的硬件配置为PLC到PC机通信口的电缆连接器,即带RS-232口的隔离型PC/PPI电缆,用五个DIP开关设置波特率和其它配置项。它支持的波特率为9.6kbps或19,2kbps,支持的协议为PPI协议。这里并没有使用PPI协议,而是使用PC/PPI电缆和自由端口通信功能来实现S7-200 CPU与PC机间的通信。自由端口模式是计算机或其它带有串行通信接口的设备与S7-200 CPU之间通信的一种廉价和灵活的方法。它以用户定义的通信协议为基础,通过使用相关的中断指令和专用的通信指令控制S7-200 CPU通信口的操作模式,实现与多种智能设备的连接。

具体地说,所谓自由通信端口模式是指CPU的串行通信接口可由用户程序控制的一种通信操作模式,其梯形图程序可以使用接收完成中断、字符接收中断、发送完成中断、发送指令(XMT)和接收指令(RCV)等控制通信过程。在该模式下,通信协议完全由用户程序控制。

CPU处于STOP模式时,自由通信端口模式被禁止,CPU重新建立使用其它协议的通信,例如与编程设备的通信。只有当CPU处于RUN模式时,才能使用自由通信端口模式。通过将特殊寄存器字节SM30或SM130的协议选择域(mm)置1可以将通信端口设置为自由端口模式,处于该模式时不能与编程设备通信。

可以用反映CPU模块上的工作方式开关当前位置的特殊存储器位SM0.7来控制自由端口模式的进入。当SM0.7为1时,工作方式开关处于RUN位置,可选择自由端口模式;当SM0.7为0时,工作方式开关处于TEM位置,应选择PC/PPI协议模式,以便用于编程设备监视或控制CPU模块的操作。

2.2 自由端口模式下PLC串行通信程序的编程要点

计算机与可编程控制器通信时,为了避免通信中的各方争用通信线,一般采用主从工作方式,即计算机为主机,可编程控制器为从机;只有主机才有权主动发送请求报文,从机收到后返回响应报文。下面主要谈一谈编程过程中应注意的几个问题。

首先是电缆切换时间的处理。因为使用了PC/PPI电缆,所以在S7-200 CPU的用户程序中应考虑电缆的切换时间。S7-200 CPU接收到RS232设备的请求报文到它发送响应报文的延迟时间必须大于等于电缆的切换时间。波特率为9600bps和19200bps,电缆的切换时间分别为2ms和1ms。在梯形图程序中可用定时中断实现切换延时。

其次就是通信可靠性的处理,校验码的采用是提高通信可靠性最常用的措施之一。用得较多的是异或校验,即将每一帧中的第一个字符(不包括起始字符)到该帧中正文的最后一个字符作异或运算,并将异或的结果(展品或校验码)作为报文的一部分发送到接收端。接收方接收到数据后计算出所接收到的数据的展品或校验码,再与发送方传过来的校验码比较,如果不同,可以判断通信有误。

最后需注意的是防止起始字符、结束字符与数据字符的混淆。因为报文的起始字符和结束字符只有8位,接收到的报文数据区内出现与起始字符或结束字符相同的数据字符的机率很大,这可能会引起字符混淆。可以在发送前对数据作某种处理,例如选择起始字符和结束字符为某些特殊的值,而将数字字符转化为BCD码或ASCII码后再发送,这样可以避免出现上述的情况,但是会增加编程的工作量和数据传 送的时间。2.3 通信程序中关键指令的使用与说明

发送指令XMT(Transmit)用于启动自由端口模式下数据缓冲区(TBL)数据的发送,指令格式如图1所示。通过指定的通信端口(PORT),将存储在数据缓冲区(TBL)中的信息发送。使ENO=0的错误条件:SM4.3(运行时间),0006(间接寻址),009(在端口0同时XMT/RCV),000B(在端口1同时XMT/RCV)。

XMT指令可以方便地发送1~255个字符,如果有中断程序连接到发送结束事件上,在发送完缓冲区中的最后一个字符时,端口0会产生中断事件9,端口1会产生中断事件26。可以监视发送完成状态位SM4.5和SM4.6的变化,而不是用中断进行发送。数据缓冲区中的起始字符和结束字符是可选项,第一个字节的“字符数”是要发送的字节数,它本身并不发送出去。

接收指令RCV(Receive)可以方便地接收一个或多个字符,最多可接收255个字符。通过指令的通信端口(PORT),将接收信息存储在数据缓冲区(TBL)中。数据缓冲区中的第一个字节用来累计接收到的字节数,它本身不能接收到,起始字符和结束字符是可选项。如果有中断程序连接到接收结束事件上,在接收完最后一个字符时,端口0产生中断事件23,端口1产生中断事件24。

使ENO=0的错误条件:SM86.6和SM186.6(RCV参数错误),SM4.3(运行时间),0006(音接寻址),009(在端口0同时XMT/RCV),000B(在端口1同时XMT/RCV)。CPU不是在自由端口模式。

可以监视SM86.6或SM186.6的变化,而不是用中断进行报文接收。SM86.6或SM186.6为非零时,RCV指令未被激活或接收已经结束。正在接收报文时,它们为0。

当超时或校验错误时,要自动中止报文接收功能。必须为报文接收功能定义一个启动条件和一个结束条件。

RCV指令允许通过参数设定选择报文开始条件和报文结束条件,即设定特殊存储器字节SM86~SM94(用于端口0)和SM186~SM194(用于端口1)。

另外两个比较重要的指令是获取与设置通信口地址指令。获取通信口地址指令(GET ADDR指令)用来读取PORT指定的CPU口的站地址,并将数值放入ADDR指定的地址中。设置通信口地址指令(SET ADDR指令)用来将通信口(PORT)站地址设置为ADDR指定的数值。设置的新地址不能永久保存,断电后又上电,通信口地址将恢复为上次的地址值(用系统块下载的地址)。图2为使用RCV指令和接收完成中断接收数据的通信程序流程图。

3、计算机通信程序的设计与实现

3.1 Windows环境下的PC机通信程序 在Windows环境下,操作系统通过驱动程序控制各硬件资源,不允许用户像在DOS环境下那样直接对串口进行底层的操作。为此,Visual Basic提供了一个串行通信控件:MSComm控件。程序员只需设置和监视MSComm控件的属性和事件,就可以劲易而易举地实现串行通信。

3.2 MSComm控件的属性

MSComm控件主要属性如下:(1)Comm Port:设置并返回通信端口号。(2)Settings:以字符的形式设置并返回波特率、奇偶校验位、数据位和停止位。其中字符n、o、e分别代表无校验、奇校验、偶校验。(3)Port Open:设置并返回通信端口状态。设置为Ture时,打开端口;设置为Flase时,关闭端口。另外,还有Input、Output、Input Mode、In Buffer Count等属性,这里不再一一介绍。3.2 MSComm控件处理接收信息的方式

MSComm控件提供两种处理方式:(1)事件驱动方式:RTHreshold属性非0时,收到字符或传输线发生变化时就会产生串口事件On Comm。通过查询CommEvent属性可以捕获并处理这些通信事件。(2)查询方式:通过查询Iuput Buffer Count(接收缓冲区的字节数)属性值,处理接收到的信息。本装置中采用事件驱动方式。

用Visual Basic语言设计串行通信程序简单实用,关键是如何形成一个友好的用户界面。编程的细节这里不再详述。

omronplc串行通信

omronplc串行通信(精选10篇)omronplc串行通信 第1篇串行通信这里所说的通信是指计算机与计算机之间或计算机与外部设备之间的数据通信,...
点击下载文档文档内容为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部