收藏 分销(赏)

RS-232C详解.doc

上传人:xrp****65 文档编号:6985643 上传时间:2024-12-24 格式:DOC 页数:22 大小:167.58KB 下载积分:10 金币
下载 相关 举报
RS-232C详解.doc_第1页
第1页 / 共22页
RS-232C详解.doc_第2页
第2页 / 共22页


点击查看更多>>
资源描述
串口通讯—RS-232-C详解(一)   串列通信界面标准经过使用和发展,目前已经有几种。但都是在RS-232标准的基础上经过改进而形成的。所以,以RS-232C为主来讨论。RS-323C标准是美国EIA(电子工业联合会)与BELL等公司一起开发的1969年公布的通信协议。它适合于数据传输速率在0~20000b/s范围内的通信。这个标准对串列通信界面的有关问题,如信号线功能、电器特性都作了明确规定。由于通行设备厂商都生产与RS-232C制式兼容的通信设备,因此,它作为一种标准,目前已在微机通信界面中广泛采用。 在讨论RS-232C界面标准的内容之前,先说明两点: 首先,RS-232-C标准最初是远程通信连接数据终端设备DTE(Data Terminal Equipment)与数据通信设备DCE(Data Communication Equipment)而制定的。因此这个标准的制定,并未考虑计算机系统的应用要求。但目前它又广泛地被借来用于计算机(更准确的说,是计算机界面)与终端或外设之间的近端连接标准。显然,这个标准的有些规定及和计算机系统是不一致的,甚至是相矛盾的。有了对这种背景的了解,我们对RS-232C标准与计算机不兼容的地方就不难理解了。 其次,RS-232C标准中所提到的“发送”和“接收”,都是站在DTE立场上,而不是站在DCE的立场来定义的。由于在计算机系统中,往往是CPU和I/O设备之间传送信息,两者都是DTE,因此双方都能发送和接收。 一、RS-232-C RS-232C标准(协议)的全称是EIA-RS-232C标准,其中EIA(Electronic Industry Association)代表美国电子工业协会,RS(ecommeded standard)代表推荐标准,232是标识号,C代表RS232的最新一次修改(1969),在这之前,有RS232B、RS232A。。它规定连接电缆和机械、电气特性、信号功能及传送过程。常用物理标准还有有EIA�RS-232-C、EIA�RS-422-A、EIA�RS-423A、EIA�RS-485。 这里只介绍EIA�RS-232-C(简称232,RS232)。 例如,目前在IBM PC机上的COM1、COM2界面,就是RS-232C界面。 1.电气特性 EIA-RS-232C对电器特性、逻辑电平和各种信号线功能都作了规定。 在TxD和RxD上:逻辑1(MARK)=-3V~-15V               逻辑0(SPACE)=+3~+15V 在RTS、CTS、DSR、DTR和DCD等控制在线: 信号有效(接通,ON状态,正电压)=+3V~+15V 信号无效(断开,OFF状态,负电压)=-3V~-15V 图1 以上规定说明了RS-323C标准对逻辑电平的定义。对于数据(信息码):逻辑“1”(传号)的电平低于-3V,逻辑“0”(空号)的电平告语+3V;对于控制信号;接通状态(ON)即信号有效的电平高于+3V,断开状态(OFF)即信号无效的电平低于-3V,也就是当传输电平的绝对值大于3V时,电路可以有效地检查出来,介于-3~+3V之间的电压无意义,低于-15V或高于+15V的电压也认为无意义,因此,实际工作时,应保証电平在±(3~15)V之间。 EIA-RS-232C与TTL转换:EIA-RS-232C是用正负电压来表示逻辑状态,与TTL以高低电平表示逻辑状态的规定不同。因此,为了能够同计算机界面或终端的TTL器件连接,必须在EIA-RS-232C与TTL电路之间进行电平和逻辑关系的变换。实现这种变换的方法可用分立元件,也可用集成电路芯片。目前较为广泛地使用集成电路转换器件,如MC1488、SN75150芯片可完成TTL电平到EIA电平的转换,而MC1489、SN75154可实现EIA电平到TTL电平的转换。MAX232芯片可完成TTL←→EIA双向电平转换,图1显示了1488和1489的内部结构和引脚。MC1488的引脚(2)、(4,5)、(9,10)和(12,13)接TTL输入。引脚3、6、8、11输出端接EIA-RS-232C。MC1498的14的1、4、10、13脚接EIA输入,而3、6、8、11脚接TTL输出。具体连接方法如图2所示。图中的左边是微机串列界面电路中的主芯片UART,它是TTL器件,右边是EIA-RS-232C连接器,要求EIA高电压。因此,RS-232C所有的输出、输入信号都要分别经过MC1488和MC1498转换器,进行电平转换后才能送到连接器上去或从连接器上送进来。 图2 2、、连接器的机械特性: 连接器:由于RS-232C并未定义连接器的物理特性,因此,出现了DB-25、DB-15和DB-9各种类型的连接器,其引脚的定义也各不相同。下面分别介绍两种连接器。 (1)DB-25: PC和XT机采用DB-25型连接器。DB-25连接器定义了25根信号线,分为4组: ①异步通信的9个电压信号(含信号地SG)2,3,4,5,6,7,8,20,22 ②20mA电流环信号 9个(12,13,14,15,16,17,19,23,24) ③空6个(9,10,11,18,21,25) ④保护地(PE)1个,作为设备接地端(1脚) 图3 DB-25型连接器的外形及信号线分配如图3所示。注意,20mA电流环信号仅IBM PC和IBM PC/XT机提供,至AT机及以后,已不支援。 (2)DB-9连接器 在AT机及以后,不支援20mA电流环界面,使用DB-9连接器,作为提供多功能I/O卡或主板上COM1和COM2两个串列界面的连接器。它只提供异步通信的9个信号。DB-25型连接器的引脚分配与DB-25型引脚信号完全不同。因此,若与配接DB-25型连接器的DCE设备连接,必须使用专门的电缆线。 电缆长度:在通信速率低于20kb/s时,RS-232C所直接连接的最大物理距离为15m(50英尺)。 最大直接传输距离说明:RS-232C标准规定,若不使用MODEM,在码元畸变小于4%的情况下,DTE和DCE之间最大传输距离为15m(50英尺)。可见这个最大的距离是在码元畸变小于4%的前提下给出的。为了保証码元畸变小于4%的要求,界面标准在电气特性中规定,驱动器的负载电容应小于2500pF。 3、RS-232C的界面信号 RS-232C规标准界面有25条线,4条数据线、11条控制线、3条定时线、7条备用和未定义线,常用的只有9根,它们是: (1)联络控制信号线: 数据装置准备好(Data set ready-DSR)——有效时(ON)状态,表明MODEM处于可以使用的状态。 数据终端准备好(Data set ready-DTR)——有效时(ON)状态,表明数据终端可以使用。 这两个信号有时连到电源上,一上电就立即有效。这两个设备状态信号有效,只表示设备本身可用,并不说明通信链路可以开始进行通信了,能否开始进行通信要由下面的控制信号决定。 请求发送(Request to send-RTS)——用来表示DTE请求DCE发送数据,即当终端要发送数据时,使该信号有效(ON状态),向MODEM请求发送。它用来控制MODEM是否要进入发送状态。 允许发送(Clear to send-CTS)——用来表示DCE准备好接收DTE发来的数据,是对请求发送信号RTS的响应信号。当MODEM已准备好接收终端传来的数据,并向前发送时,使该信号有效,通知终端开始沿发送数据线TxD发送数据。 这对RTS/CTS请求应答联络信号是用于半双工MODEM系统中发送方式和接收方式之间的切换。在全双工系统中作发送方式和接收方式之间的切换。在全双工系统中,因配置双向通道,故不需要RTS/CTS联络信号,使其变高。 接收线信号检出(Received Line detection-RLSD)——用来表示DCE已接通通信链路,告知DTE准备接收数据。当本地的MODEM收到由通信链路另一端(远地)的MODEM送来的载波信号时,使RLSD信号有效,通知终端准备接收,并且由MODEM将接收下来的载波信号解调成数字两数据后,沿接收数据线RxD送到终端。此线也叫做数据载波检出(Data Carrier dectection-DCD)线。 振铃指示(Ringing-RI)——当MODEM收到交换台送来的振铃呼叫信号时,使该信号有效(ON状态),通知终端,已被呼叫。 (2)数据发送与接收线: 发送数据(Transmitted data-TxD)——通过TxD终端将串列数据发送到MODEM,(DTE→DCE)。 接收数据(Received data-RxD)——通过RxD线终端接收从MODEM发来的串列数据,(DCE→DTE)。 (3)地线 有两根线SG、PG——信号地和保护地信号线,无方向。 上述控制信号线何时有效,何时无效的顺序表示了界面信号的传送过程。例如,只有当DSR和DTR都处于有效(ON)状态时,才能在DTE和DCE之间进行传送操作。若DTE要发送数据,则预先将DTR线置成有效(ON)状态,等CTS在线收到有效(ON)状态的回答后,才能在TxD在线发送串列数据。这种顺序的规定对半双工的通信线路特别有用,因为半双工的通信才能确定DCE已由接收方向改为发送方向,这时线路才能开始发送。 2个数据信号:发送TXD;接收RXD。 1个信号地线:SG。 6个控制信号: DSR-----数传机(即modem)准备好,Data Set Ready. DTR------数据终端(DTE,即微机界面电路,如Intel8250/8251,16550)准备好,Data Terminal Ready。 RTS------DTE请求DCE发送(Request To Send)。 CTS------DCE允许DTE发送(Clear To Send),该信号是对RTS信号的回答。 DCD------数据载波检出,Data Carrier Detection当本地DCE设备(Modem)收到对方的DCE设备送来的载波信号时,使DCD有效,通知DTE准备接收, 并且由DCE将接收到的载波信号解调为数字信号, 经RXD线送给DTE。 RI��振铃信号 Ringing当DCE收到交换机送来的振铃呼叫信号时,使该信号有效,通知DTE已被呼叫。   第二章 串列通讯控制理论   2.1 前言 由于研发上的需要,我们可以发现很多的仪器被用来作实验或分析,而这些仪器通常也都具有与外界通讯的能力;透过仪器提供的通讯界面,仪器使用者可以利用计算机与仪器作连线,而从仪器上取得数据或设定,甚至直接控制仪器的功能,而达到自动化的目的。 一般仪器的对外通讯界面有RS-232、RS-485、AC Output、DC Output等等;而所使用的对外(当然我们所指的是计算机)传输连接线则除了标准的线材之外(这也是一般最常见的),有些厂商基于特别的考量,也自行制造特殊的连接线,并配上自行发展的通讯软件,让使用者可以连接上计算机,而不必自行撰写监控界面的程序,不过这个部份通常是使用者另外选购的,而不是标准的配备。至于如何搭配使用,就完全看使用者的需求。在系统控制的应用里面,RS-232串列通讯是使用相当久且相当重要的一个界面;我们可以在PLC可程序逻辑控制器看到,也可以在仪器的IO界面上看到,甚至在时下流行的WWW所需的调制解调器(Modem)也是用RS-232为媒介。由于RS-232的方便性及便宜的价格,使得仪器厂商乐于使用它做为与计算机或打印机的传输界面,因此有提供对外传输界面的仪器几乎都有提供RS-232的传输界面。 就如同前面所说的,通讯传输的双方必须有相同的传输协定及资料格式,每个厂商对于本身的仪器设备所提供的传输协定及资料格式均不相同,每部支援RS-232的传输的仪器,其使用手册或传输界面手册都会针对RS-232的指令作详细的介绍与说明,一般最常使用的传输字符格式及协定为“9600,n,8,1”、NoHandShaking,这也是VB的电话盒控制里面的预设值;当然了,我们使用计算机上的RS-232与仪器连线时,必须将VB里的电话盒控制项设定与仪器所设定的要维持相同;各种仪器在传输上或多或少都会有一些差异,但它们之间相同的地方则是一律使用字符串的传输方式(尤其是命令的传送,这也是RS-232受人欢迎的地方,因为只要使用字符串就可以搞定了),另外也会有字节的资料传送方式,以加速资料的传输速度。  2.2 通讯的种类及比较 通常通讯的型式可以区分为两种,其一为并列传输式的通讯(Parallel Communication),另一种则为串列传输式的通讯(Serial Communication)。这两种不同的通讯模式以下图表示。 图2-1 并列传输   图2-2 串列传输 由图中可以了解,所谓的并列通讯,即是一次的传输量为8个位元(1个位元组);而串列通讯则是一次只传输1个位元;它们两者之间的资料传输量就相差了8倍之多,但并不是说串列通讯不好,它之所以存活这幺久的时间,自然有它长处;并列通讯虽然可以在一次的资料传输中就传输了8个位元,但是因为资料电压传送的过程中,容易因线路的因素而使得电压准位发生变化(最常见的是电压衰减问题,以及讯号间相干扰问题(CrossTalk),因而使得传输的资料发生错误,如果传输线比较长的话,电压衰减效应及CrossTalk问题会更加明显,资料的错误也就会常常发生;相较之下,串列通讯一次只传1个位元,相对上来说,处理的资料电压只有一个准位,因此比较不容易把资料漏失,再加上一些防范的措失后,要漏失就更不容易了。以下就针对几种串列通讯加以说明。   (1) RS-232通讯 串列通讯埠(Serial Communication Port)在系统控制的范畴中一直占有极重要的角色,不仅没有因为时代的进步而被淘汰,反而是在规格上愈来愈向其极限挑战。现在,计算机上的串列通讯埠(RS-232)是标准配备,用途上则以连接调制解调器(Modem)作通讯传输(尤其是网际网络成为潮流趋势后,接上WWW取得资料是相当重要的一个收集管道)最为常见,当然了,它的重要性还不只如此呢! RS-232的通讯埠是每部计算机上的必要配备,通常含有COM1与COM2两个通道,一般的计算机将COM1以9Pin的接头接出,而以25 Pin的接头将COM2接出,新一代的计算机均以9Pin的接头接出所有的RS-232通讯埠。在计算机上的RS-232均是公头,即使是25Pin也是公头,千万不要与其他的设备弄糊涂了(打印机连接埠也是25Pin,不过它是母头,请仔细分别)。通常与计算机连接的设备,最简单的沟通界面就是RS-232,不仅实作简单,而且价格上也便宜很多;在市面可见的数位相机、调制解调器……均是使用RS-232作为与计算机沟通的界面。RS-232的讯号传输模式是如下图所示:  传送端 接收端   接地端1 接地端2 图2-3 RS-232的讯号传输模式   由图可知,RS-232的讯号准位乃是参考到地线而来的,传送端参考到接地端1而据以传送资料;接收端则参考接地端2而还原出送端的讯号准位;在二个接地端同电位的前提下,传送与接收端的讯号准位会呈现一样的结果。如果有噪声进到传输线路中的话,可能会如图所示。 接地端1 接地端2 图2-4 RS-232有噪声的传输模式 干扰的噪声讯号在地线及讯号上均会产生影响,原始讯号在加上噪声后依然是传送到接收端;而地线部份的讯号则被地准位给平均掉了,因此,讯号便发生了扭曲,当然讯号是整个都不对了。 (2) RS-485通讯 由于串列通讯的简单易用,使得工业上也使用了串列通讯来作为资料的流通之用;可是工业环境通常会有噪声干扰传输线路,在以RS-232作为传输时就经常会受到外界的电气干扰而使得讯号发生错误。为了要解决这个问题,RS-485的通讯方式就应运而生了。  (3) USB界面 由于时代的进步,串列通讯也朝向高速化发展,近年来个人计算机的快速发展下,使串列通讯开发出USB(Universal Serial Bus,通用串列总线),此种规格的目的在于整合一般计算机所使用的周边产品的连接方式。  (4) IEEE 1394界面 IEEE 1394(也称为FireWall,火墙)与USB都可随插既用的功能,均是为了解决计算机与周边产品复杂的连接问题,也有容易使用与便利等优点;但不一样的是,IEEE 1394在高速传输上占尽了优势,所以在过不久会发现IEEE 1394应用在卫星的传输、通讯数据、等用途上。   2.3 RS-232之脚位意义及方向 串列通讯的方式可以分为同步式(Synchronous)及异步式(Asynchronous)两种。同步式在通讯的两端使用同步讯号作为通讯的依据;而异步式则使用起始位元(Start Bit)及停止位元(Stop Bit)作为通讯的判断,现在则是以使用异步传输较多。异步传输只要9支脚就够了;如困要采用同步传输则需使用到25支脚。 由另一个角度看来,如果传送的一方无法以一定的时间间隔传送资料,接收方就不可能准确地接收每个字符,因此传送方必须加上起始及终止位元,这就是异步;而若传送方的传送速率是固定的,则为同步。 脚 位 简 写 意 义 Pin 1 CD 载波侦测 (Carrier Detect) Pin 2 RXD 接收字符 (Receive) Pin 3 TXD 传送字符 (Transmit) Pin 4 DTR 资料终端备妥 (Data Terminal Ready) Pin 5 GND 地线 (Ground) Pin 6 DSR 资料设备备妥 (Data Set Ready) Pin 7 RTS 要求传送 (Request to Send) Pin 8 CTS 清除以传送 (Clear To Send) Pin 9 RI 响铃侦测 (Ring Indicator) 表2-1 计算机上的RS-232其9支脚位的定义表 9针RS-232 25针RS-232 1: CD 8: CD 2: RXD 3: RXD 3: TXD 2: TXD 4: DTR 20: DTR 5: GND 7: GND 6: DSR 6: DSR 7: RTS 4: RTS 8: CTS 5: CTS 9: RI 22: RI 表2-2  一般仪器上的RS-232之25针和9针之对应表 RS-232的每一支脚位都有它的功用,也有它讯号流动的方向;原来的RS-232设计之初是用来连接调制解调器作传输之用的,也因此它的脚位意义通常也和数据机传输有关,以下是这9支脚位的相关说明:  (1) CD脚位 此脚位是由调制解调器控制,当传送的讯号是载在载波讯号上面,调制解调器利用此脚位通知计算机有载波被侦测到;而当载波被侦测到时才可保证是处于连线状态。  (2) RXD脚位 此脚位会将远端所传送过来的资料接收进来;在接收的过程中,由于资料是以数位(Digit)型式传送,所以可以在Modem的RXD灯号上看到明灭交错,此既为0、1交替所产生的现象,也就是电位高低所产生的现象。 (3) TXD脚位    此脚位会将计算机所欲传送出来的资料传送出去;在传送的过程中,由于资料是以数位(Digit)型式传送,所以可以在Modem的TXD灯号上看到明灭交错,此既为0、1交替所产生的现象,也就是电位高低所产生的现象。  (4) DTR脚位    此脚位由计算机控制,用以通知Modem可以进行传输。高电位表示计算机已准备就绪,随时可以接收资料。  (5) GND脚位     此脚位为地线,作为计算机与Modem之间的准位参考。两端设备的地线准位必须一样,否则会使讯号因准位的不同而产生偏移,而参考的地线准位乃是电压准位而来,所以传输双方的地线必须连接在一起,以避免准位的不同而造成资料的错误。  (6) DSR脚位     此脚位由Modem控制,Modem用着支脚位的高电位通知计算机一切准备就绪,可以传送资料过来。   (7)RTS脚位     此脚位由计算机控制,用以通知Modem马上传输资料至计算机;而当Modem收到此讯号后,便将它由电话线上收到的资料传送给计算机。  (8) CTS脚位     此脚位由 Modem控制,用以通知计算机将欲传输的资料至Modem;而当计算机收到此脚位之讯号后,便将准备送出之资料送至Modem,而Modem则将计算机送过来的资料由电话线路送出。   (9) RI脚位   Modem通知计算机有电话进来,是否接听电话则由计算机决定。 2.4 RS-232之接线方法 计算机设备上的RS-232脚位必定是公头,当然连接线就母头了;部份的计算机上也有25脚的RS-232,与打印机连接埠的25脚是一样的脚位,不过,只要是RS-232,其于计算机上的脚位必定是公头,不管是9脚或是25脚,此规则是不变的,打印机的接头必是母头;因此,即使是25脚接头,我们也可以轻易地辨别出何者是RS-232,何者是打印机连接埠了。 当使用RS-232与调制解调器作连线时,我们只需将调制解调器上所附的RS-232连接线把计算机上的RS-232与调制解调器上的D型接头连接起来就可以了,也不需要考虑太多,可是当我们希望以RS-232与一般的设备或是其他的个人计算机作通讯实验时,就必须先作跳线的工作。一般所谓的NULL Modem,其实就是为了欺骗计算机,让计算机以为它所连接的是一部调制解调器,而能够顺利地进行数据传输;因此NULL Modem就是将RS-232另一端与Modem相连的部份作一些线路变更,而能让另一部计算机连接,成为一部虚拟的Modem。 若只是欲将资料从一个地方传送至另一个地方,其实只要使用到第2脚、第3脚与第5脚就可以形成一个最简单的通讯线路了。至于硬件线路是否须要跳线,必须是所使用的硬件中的通讯规定,若硬件已经将跳线的部份作好在里面,使用者就不必再作跳线的工作了。就如同图所示的,厂商已经将热像仪的RS-232跳线。     跳线的实际意义就是一个传送的讯号必须到达对方的接收脚位,如此才能形成一个完整的通路,所以通路的形成就是将一方的传送与接收的脚位作对调;如此一来,甲方的传送资料必定到达乙方的接收通道;而乙方的传送资料则会到达甲方的接收通道,双方的送收形成一个完整的回路,而这也才是用来作跳线的实质意义。 2.5 通讯埠之初始化参数的介绍     既然是通讯,双方当然得说明白到底是如何传送资料或命令的,否则双方没有一套共同的译码方式,恐怕无法了解对方所传过来资料的意义。因此,双方为了可以沟通起见,必须遵守一定的通讯规则,这个共同的规则就是通讯埠的初始化。通讯埠的初始化有以下数项须设定: (1) 资料的传送单位     串列通讯埠所传送的资料是字符型态,工业界使用到的有ASCII字符码及JIS字符码。ASCII码使用了8个位元形成一个字符,而JIS 码则以7个位元形成一个字符;我们可以发现,欧美的设备多使用8个位元的资料组,而日本的设备则多使用7个位元为一个资料组。以实际的RS-232传输上看来,由于工业界常使用的PLC 大多只是传送文字码,因此只要7位元就可将ASCII的0~127号字码表达出来(27=128共有128种组合方式),所有的可见字符也落在此范围内,所以只要7个资料位元数就够了。不同的情形下,会使用到不同的传送单位。使用了多少个位元合成一个字节必须先行确定。 (2) 起始位元及停止位元     当双方准备要开始传送资料时,发送端会在所送出的字符前后分别加上低电位的起始位元及高电位的停止位元,接收端会依起始位元及停止位元的设定确实地接收到字符;当加入了起始位元及停止位元也才比较容易达到多字符的接收能力。起始位元固定为1个位元,而停止位元则有1、1.5、2个位元等多种选择,只要通讯双方协议通过即可。 (3) 同位位元的检查     同位位元是用来检查所传送资料的正确性的一种核对码,这其中又分成奇同位(Odd Parity)及偶同位(Even Parity)两种,分别是检查字符码中1的数目是奇数或偶数。以偶同位为例,A的ASCII码是41H(16进位),将它以2进位表示时,是01000001其中1的数目是2,因此同位位元便是0,使1的数目保持偶数。同样的,同位位元是奇同位时,A的同位位元便是1,使1的数目保持在奇数,我们可以图表示之:     将传送字符依上述的说明组合起来之后,就形成了传输的资料格式,在串列通讯上的资料格式如下表示: 起始位元+传送字符+同位位元+停止位元 (Start bits+Data bits+Parity+Stop bits) 因此,假设在传输时用了1个起始位元,传送字符为8个位元,1个停止位元,不使用同位位元检查,这时,每次所传输的资料位元格式为: 1个起始位元+8个资料位元+0个同位位元+1停止位元     总共有10个位元,所以此时最小的传输单元是以10位元为单位。如果采用不同的资料位元数、同位位元检查、停止位元、则每次传输的字节中的位元数也不相同。 另外,我们也可以从传输速度算出实际上的传输字符数;假设资料格式为以下的格式: 1个起始位元+8个资料位元+0个同位位元+1停止位元 总共有10个位元。若我们采用19200bps的传输速度,每一秒便可以传输19200/10=1920(Byte)的资料。一般容易弄混淆的地方就是:一个字节是8个位元,所以19200bps的传输速率每秒可以传送2400个位元组的(19200/8=2400)资料;可是我们从上面的讨论中己经很清楚地了解到实际的传输速率是每秒钟1920个位元组,这个数字就是一个不小的差异了。 那幺这样子的差异有任何值得我们重视的地方吗?试想,如果我们今天使用RS-232的传输技术建立一个控制系统,我们如何告诉别人系统的效能在那里?因为任何的传输都需要时间.一个命令下到机器或控制器后,在其执行结果回应到主控站前的传输时间就是我们所谓的系统效能,时间愈短,愈能显示出系统的卓越性能,所以这种时间的计算在我们评估系统的效能时相当地重要。 用VB开发Windows环境下的串列通信程序   随着Windows在国内的普及,特别是Windows95的推出,越来越多的微机用户转向了Windows操作系统。不过Windows应用软件的开发对于一般工程技朮领域的技朮人员来说并非易事,不但Windows的消息循环机制不易理解,而且要开发一个功能强、界面美观的应用软件,其编程和调试的工作量是非常大的。许多并非搞软件出身的工程技朮人员对Windows编程望而生畏。然而使用微软的VisualBasic来开发这些方面的Windows应用软件就十分方便,一般工程技朮人员易于掌握,设计软件界面非常方便,编程工作量相对较小,只需进行主要应用功能的编程和少量界面控制的编程。本文介绍了笔者使用VB在串列通信编程方面的一些收获,由于在报刊杂志上对Windows下串列通信编程的介绍多为用MicrosoftC++或BorlandC++,故笔者愿意就VB在该方面的应用与大家探讨。对于采用了RS-232界面进行串列通信的计算机测控系统软件的开发,具有一定的参考价值。   在该系统中使用了80C31单片机作为下位机采集惯性敏感部件的测量数据,经过一定的预处理后通过RS-232串列口将数据传送给上位PC机。在PC机上Windows环境下运行检测软件,接受串列口传来的数据,进行数据处理、显示、存盘等。数据处理结果以表格形式打印输出。 在VB3.0中,有许多专业厂商提供用户定制的控制项(Customcontrol),这些控制项以.VBX为后缀,其中MSCOMM.VBX即是用于串列通信的控制项。对于VB3.0,启动后该控制项就包含于控制项工具箱(toolbox)内,否则可以通过File|AddFile将该控制项加入控制项工具箱。然后就可以利用该控制项进行串列通信的程序设计。 下面举一个简单的例子,说明了如何进行串列通信的程序设计,该程序在Windows95环境下,使用VB3.0已经实现: 1.先建立一个项目档,其控制项如下表所示: 2.代码如下: SubForm_Load() comm1.CommPort=1‘使用串列口1 '串列传输速率9600,偶校验,8个数据位,1个停止位。 comm1.Settings=“9600,E,8,1” 当使用Comm1.Input时,每次从接收缓冲区取一个字节。 comm1.InputLen=1 timer1.interval=20‘定时器的中断间隔为20ms,用于更新显示时间。 EndSub SubcmdComm_Click() Dimechoch%‘命令变量 Staticmaxf01&,maxf02&,minf01&,minf02&‘最大值,最小值 OnErrorResumeNext‘简单的错误处理 maxf01&=maxf02&=0‘初始化变量 minf01&=32767 minf02&=32767 label2.Caption=comm1.Settings‘显示串列口的设置。 Ifcmdcomm.Caption=“通信”Then‘若当前命令按扭的提示为“通信”则开始发送和 cmdcomm.Caption=“停止”‘接受数据,并将命令按扭提示改为“停止”,以 cmdexit.Enabled=False‘允许停止通信。使退出命令在通信中失效。 IfNotcomm1.PortOpenThen‘若串列口没有打开,则打开串列口 comm1.PortOpen=True EndIf Ifcomm1.PortOpenThen Ifecho.Text<>“”Then‘若命令输入框不空,则将其转换为十六进制数值 echoch%=Val(“&H”+echo.Text) Else echoch%=&HF0‘否则确省命令为F0H EndIf comm1.Output=Chr(echoch%)‘向串列口写入一字节命令,由WINDOWS自 EndIf‘动将命令发出 label3.Caption=Hex(echoch%)‘显示刚发出的命令 DoWhilecomm1.PortOpen Ifcomm1.InBufferCount>0Then‘若comm1.InBufferCount>0表示接受缓冲 ch$=comm1.Input‘区有数据,并读出一个字符, IfAsc(ch$)=echoch%Then‘若与发出的命令相同,则退出当前循环 ExitDo‘进入下一循环 EndIf Else comm1.Output=Chr(echoch%)‘否则继续向下位机发命令,通知下位机 EndIf‘送数据 dummy=DoEvents()‘让系统处理其他消息 Loop ‘下位机接受到正确的命令,并回发命令正确时,进入下面循环 i=1 DoWhilecomm1.PortOpen Ifcomm1.InBufferCount>5Then ch$=comm1.Input DoWhileAsc(ch$)<>echoch%‘以命令字节同步测试数据 ch$=comm1.Input Loop ch1$=comm1.Input‘从WINDOWS串列数据接受缓冲区读测试数据 ch2$=comm1.Input ch3$=comm1.Input ch4$=comm1.Input newf01&=CLng(CLng(Asc(ch2$))*16*16+Asc(ch1$))‘合并为一个整数 newf02&=CLng(CLng(Asc(ch4$))*16*16+Asc(ch3$)) ifnewf01&>maxf01&Then‘判断最大值,最小值 maxf01&=newf01& EndIf Ifnewf01&<minf01&Then minf01&=newf01& EndIf Ifnewf02&>maxf02&Then maxf02&=newf02& EndIf Ifnewf02&<minf02&Then minf02&=newf02& EndIf labf01.Caption=Str(newf01&)‘显示数据 labf02.Caption=Str(newf02&) labmaxf01.Caption=Str(maxf01&) labminf01.Caption=Str(minf01&) labmaxf02.Caption=Str(maxf02&) labminf02.Caption=Str(minf02&) Else comm1.Output=Chr(echoch%) EndIf dummy=DoEvents() Loop Else‘在通讯过程中,按下cmdCOMM按钮则停止通信,发出停止测试 cmdcomm.Caption=“通信”‘命令,关闭串列口,使退出按钮有效。 comm1.Output=Chr(&H5F) comm1.PortOpen=False cmdexit.Enabled=True EndIf EndSub SubcmdExit_Click() Ifcomm1.PortOpenThen‘确认关闭串列口 comm1.PortOpen=False EndIf End‘终止整个程序 EndSub SubTimer1_Timer()‘更新显示时间 Iflabtime.Caption<>Time&Then labtime.Caption=Time$ EndIf EndSub 3.程序说明: a.上述程序的通信协议为:串列传输速率9600,偶校验,8个数据位,1个停止位。由上位机发送开始测试命令,下位机接收到命令后每隔500ms向上位机发送检测到的数据。每次发送5个字节,第一个字节为下位机接受到的命令,第二三字节为16Byte的值,第四五字节为16Byte的值。上位机循环接受并处理和显示数据; b.由于在控制软件中,串列通讯发送和接受的数据多为十六进制,故在命令输入时为十六进制数,在程序中通过echoch%=Val(“&H”+echo.Text)将输入的echo.Text转换为十六进制数,并赋给变量echoch%。而在通过串列口发送时comm1.Output要求接受字符型变量,故通过语句comm1.Output=Chr(echoch%)实现; c.接受数据时,每次要判断第一个字节是否为发出的命令,只有是后面4个字节才为正确的数据,否则查看下一字节。通过设置COMM1.InputLen=1来实现每次从接受缓冲区内读取一个字节; d.当退出程序时,一定要关闭串列口,通过comm1.PortOpen=False完成; e.如果需要上位机定时
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服