rs232 与 modem 通信编程

31
RS232 与 Mode m 与与与与

Upload: hilel-bright

Post on 03-Jan-2016

70 views

Category:

Documents


0 download

DESCRIPTION

RS232 与 Modem 通信编程. 1.RS-232 接口物理层规范.  1. 1 RS232C 9 脚接头信号列表 引 脚 意 义 1. CD Carrier Detect 数据载波侦测 2. RD Receive Data 接收数据 3. TD Transmit Data 发送数据 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: RS232 与 Modem 通信编程

RS232 与 Modem

通信编程

Page 2: RS232 与 Modem 通信编程

1.RS-2321.RS-232 接口物理层规范接口物理层规范 1. 1 RS232C 9 脚接头信号列表 引 脚 意 义1. CD Carrier Detect 数据载波侦测2. RD Receive Data 接收数据3. TD Transmit Data 发送数据4. DTR Data Terminate Ready 数据终端准备好5. SG Singal Set Ready 地线6. DSR Data Set Ready 数据准备好7. RTS Request To Send 请求发送8. CTS Clear To Send 清除发送9. RT Ring Indicate 铃声指示器

Page 3: RS232 与 Modem 通信编程

1.2 1.2 信号时序信号时序 PC PC  DTR步骤 1 DSR 步骤 2 RTS步骤 3 DCD步骤 4 CTS步骤 5 TD步骤 6 RD步骤 7

Page 4: RS232 与 Modem 通信编程

2. MSComm2. MSComm 控件控件 MSComm 控件的通信功能实现,实际

上是调用了 API 函数,而 API 函数是由 Comm.Drv 解释并传给设备驱动程序执行的,对于应用程序开发者只需知道 MSComm 控件的属性和事件的用法即可以实现对串口的操作。

Page 5: RS232 与 Modem 通信编程

2.1 MSComm2.1 MSComm 控件的属性控件的属性 (1) CommPort 属性 该属性用于设置或返回连接的串口编号。

(2) Setting 属性 该属性用于设置或返回通信参数,属性值用字符串表示,主要设定波特率、奇偶检验、数据位数,停止位等 4 个参数。组成格式为: “ BBBB , P , D , S”,

例如设置为“ 9600 , n , 8 , 1” 时表示数据传输速度为 9600bits/s ,没有奇偶校验,数据位是 8 位,停止位 1 位 .

Page 6: RS232 与 Modem 通信编程

2.1 MSComm2.1 MSComm 控件的属性控件的属性(3) Handshaking 属性

该属性用于设置或返回硬件握手协议,即 PC 机与通信设备(如 Modem )之间为了控制流速而约定的内部协议,属性值可以设置为如下的值:

设定值 值 描述ComNone 0 默认值,无握手协议ComXOnOff 1 Xon/Xoff 握手协议ComRTS 2 RTS/CTS 握手协议comRTSXOnXOff 3 Xon/Xoff 握手协议和 RTS/CTS 握手协议

Page 7: RS232 与 Modem 通信编程

2.1 MSComm2.1 MSComm 控件的属性控件的属性( 4 ) PortOpen 属性 该属性用于打开或关闭端口。属性值为 Boo

lean 型。设为 True 可以打开端口;设为 False 可以关闭端口。( 5 ) OutBuffersize 属性 该属性用于设置或返回发送缓冲区大小,值为 Integer 型,表示传输缓冲区的字节数,缺省值为 512 字节。( 6 ) OutBufferCounter 属性 该属性用于返回发送缓冲区内等待发送的字符数,可用来清空缓冲区。

Page 8: RS232 与 Modem 通信编程

2.1 MSComm2.1 MSComm 控件的属性控件的属性( 7 ) OutPut 属性

该属性用于向发送缓冲区写数据

( 8 ) SThreshold 属性该属性为一阀值,当输出缓冲区字节个数小于该值后就产生 OnComm 事件,并且 CommEvent 属性会被设定为 ComEvSend 。如果该值为 0 (默认值),则数据传输事件不会产生 OnComm 事件。

Page 9: RS232 与 Modem 通信编程

2.1 MSComm2.1 MSComm 控件的属性控件的属性( 9 ) InBuffersize 属性

该属性用于设置或返回输入缓冲区大小,缺省值为 1024 字节。( 10 ) InBufferCount 属性该属性用于返回输入缓冲区内的等待读取的字节个数,可通过设置该属性为 0 来清除接收缓冲区。( 11 ) InputLen 属性该属性用于设置或返回接收缓冲区内用 Input属性命令读入的字节个数。若取 0 ,则 Input属性读取整个缓冲区中的内容。

Page 10: RS232 与 Modem 通信编程

2.1 MSComm2.1 MSComm 控件的属性控件的属性( 12 ) Input 属性

该属性表示从接收缓冲区移走一串字符,将缓冲区中收到的数据读入变量。( 13 ) RThreshold 属性 该属性为一阀值,当接收缓冲区内字节个数达到或超过该值后就产生 OnComm事件,并且 CommEvent 属性会被设定为ComEvReceive 。如果该值为 0 (默认值),则无论有多少数据输入缓冲区都不会产生 OnComm 事件。

Page 11: RS232 与 Modem 通信编程

2.1 MSComm2.1 MSComm 控件的属性控件的属性( 14 ) InputMode 属性

该属性用于设置或返回接收数据的类型。若取值为 0 ,则用 Input 属性接收文本型数据。取值为 1 ,则用 Input属性接收二进制数据。( 15 ) CommEvent 属性 如果在通信过程中发生错误或事件,将会引发 OnComm 事件并且改变其属性值。

Page 12: RS232 与 Modem 通信编程

2.1 MSComm2.1 MSComm 控件的属性控件的属性( 16 ) EOFEnable 属性

该属性若置为 TRUE ,则当输入中出现 EOF ,停止输入并产生 OnComm 事件。( 17 ) DTREnable 属性 该属性确定在通信时是否使 Data Terminal Ready ( DTR )线有效。 Data Terminal Ready 是计算机发送到调制解调器的信号,指示计算机在等待接受传输。( 18 ) RTSEnable 属性 该属性确定是否使 Request TO Send ( RTS )线有效。一般情况下,由计算机发送 Request TO Send 信号到连接的调制解调器,以请示允许发送数据。

Page 13: RS232 与 Modem 通信编程

2.2 MSComm2.2 MSComm 控件的事件控件的事件 MSComm 控件只有一个事件,即 OnComm 事件。 事件驱动通信是处理串行端口交互作用非常有效

的方法,在许多情况下,事件发生时需要得到通知。例如,当线路数据到达本端或 CD 线和 RTS 信号线状态发生变化时,要求我们使用相应的事件来跟踪和处理,在这些情况下,可以利用 MSComm 控件的 OnComm 事件捕获并处理这些通信事件。 OnComm事件还可以检查和处理通信错误。常见的通信事件和通信错误如下:

MSCO-ER-BREAK :收到一个 Break Signal 。MSCO-ER-CDTO : CD 信号超时。MSCO-ER-CD : CD 信号改变。

Page 14: RS232 与 Modem 通信编程

2.3 2.3 利用利用 MSCommMSComm 控件的通信步骤控件的通信步骤 通常按照下面的步骤来使用 VB,C# 的 MSComm 控

件进行通信控制 :加入 MSComm 对象; 设定通信端口号码(串口属性)即 Commport 属性; 设定通信协议,即 HandShaking 属性; 设定传输速度等参数,即 Settings 属性; 设定其他参数,若必要时再加上其他的属性设定; 开启通信端口,即将 portOpen 属性设为 TRUE ; 使用 Input 或 Output 属性,送出字符串或读入字符串; 使用完MSComm 通信对象后,将通信端口关闭。

Page 15: RS232 与 Modem 通信编程

2 )串口属性的设置

Page 16: RS232 与 Modem 通信编程

3 )发送和接收数据

Page 17: RS232 与 Modem 通信编程

ModemModem 通信程序设计通信程序设计Modem 的工作状态

AT 指令集

Modem 通信编程

Page 18: RS232 与 Modem 通信编程

(( 11 )状态转换)状态转换

离线命令状态

在线状态

在线命令状态

连接建立

载波丢失

ATH 命令

ATO 命令

换码序列 +++

1. Modem 的工作状态

Page 19: RS232 与 Modem 通信编程

(( 11 )状态转换)状态转换 命令状态和在线状态可以进行相互转换。 离线命令状态到在线状态:当建立连接后, Modem 由离线命令状态转为在线状态。

在线状态到在线命令状态:在通信过程中,如果 DTE 向 Modem 发送换码序列 +++ ,在发送前后均有 1秒钟的保护时间(即 Modem 空闲), Modem 将由在线状态转为在线命令状态。

Page 20: RS232 与 Modem 通信编程

(( 11 )状态转换)状态转换 在线命令状态到在线状态: DIE 向 Mode

m 发送 ATO 命令, Modem 将从在线命令状态重新进入在线状态。 在线命令状态到离线命令状态:如果 DTE向 Modem 发送 ATH 命令, Modem 将挂机,从而由在线命令状态转为离线命令状态。 在线状态到离线命令状态:如果由于远端Modem挂机或线路中断等原因导致载波信号丢失, Modem 则将由在线状态转为离线命令状态。

Page 21: RS232 与 Modem 通信编程

(( 22 )状态切换命令)状态切换命令 当通信双方建立通信链路之后,就从命令状态

进入在线状态,此时双方可通过电话线发送和接收数据。命令状态和在线状态之间的转换可以通过 AT 命令完成。

+++功能描述:从在线状态切换到在线命令状态。其实这是一个换码序列(转义序列),而不是一个 AT 命令,因而前面不加 AT ,后面也不用跟回车符。在发出 +++ 命令之前和之后应停顿一段时间,该时间由 S12寄存器指定(称为保护时间缺省为 1秒)以保证Modem 接收到该命令。否则, +++ 将被当作普通数据处理。

Page 22: RS232 与 Modem 通信编程

(( 33 ))挂机命令挂机命令在通信结束后,应挂机、拆除线路。. Hn缺省值 :0功能描述 : 挂机 /摘机控制。该命令相当于用手挂上 /提起时快时慢电话听筒的电子操作。 n=0挂机,并将 Modem 置于命令状态。 n=1摘机。例如: +++ : 首先切换到命令状态 ATH : 然后挂机

Page 23: RS232 与 Modem 通信编程

所有的 modem 命令都以一个特定的“命令前缀”开始,一个“命令 结束标志”结束。命令前缀通常由两个字符“ AT” 组成,命令结束标志是一个单字符,他的值存储于 S3存储器中 .

每个 AT 命令以一个单字符或一个“ &” 后跟一个字符定义组成。

2. Modem AT2. Modem AT 指令集指令集

Page 24: RS232 与 Modem 通信编程

( 1)拨号呼叫 为了建立连接,应当先拨号。拨号使用 D命令,如: ATDT9W5552368CR 它表示使用拨号音方式( T),拨号存储码为 9(外线),等待二个拨号音(W),所拨号码为 5552368。 拨号后, Modem 等待对方 Modem 发来的载波信号,如果在给定时间里(由 S7 寄存器定义)没有检测到载波,则 Modem会自动释放电话线并报告给 DTE结果为 NO CARRIER;如果载波检测到,则 Modem 会送结果码 CONNECT并进入在线状态,这样便可以与对方通信了。

Page 25: RS232 与 Modem 通信编程

2. Modem AT2. Modem AT 指令集指令集( 2)存储电话号码

Hayes Modem 可以存储 4个电话号码,每个电话号码达 36个字符。 AT命令 &Zn=x用来存储电话号码。其中表示存入位置( 0, 1, 2, 3), x是电话号码。 为了拨一个存储电话号码,可以简单地在D 命令后使用 S=n命令(如 ATDS=n),其中, S告诉Modem所拨的号码存放在位置 n。

Page 26: RS232 与 Modem 通信编程

( 3 ) 应答呼叫 Modem 可以设置成自动或手工应答呼叫方式。

手工应答: A 命令用来手工应答呼叫。当电话铃响后,由操作员发出 A 命令,该命令指示 Modem 接管电话线,并向对方发应答音频,与对方连接。如果连接成功, Modem便会返回 CONNECT结果码;如果不成功就会返回 NO CARRIER结果码。

自动应答( S0=n )在自动应答方式下,首先把S0寄存器设一个非 0 值( ATS0=n ; n=1–255 。其中, n 值表示 Modem 进入摘机应答之前的铃响个数。

Page 27: RS232 与 Modem 通信编程

( 4 ) 在线传送数据 两个 Modem 连接好后,就可以通过电话线传送数据。双方都可以接收和发送。如果通信配置成全双工的( full—duplex ),则两个用户都可以同时发送和接收信息。如果通信连接是半双工的( half—duplex ),则只能有一个用户发送,一个用户接收。

通信时,可能由于线路噪声,设备出问题或用户操作错误而中止连接,这时 Modem 会指示丢失了载波,返回 NO CARRIER结果码。为了重新建立连接,必须重新拨号。

Page 28: RS232 与 Modem 通信编程

( 5 )终止连接 通信结束后,要终止连接。这时可以发出 Hayes 的 AT+ + + 命令使 Modem 进入命令状态。然后,发出 AT 命令 H (挂断)。如果挂断成功,则 Modem 返回 OK 结果码,这样电话线便释放了。有些通信软件会临时将 DTR 信号关掉以挂断 Modem 。

Page 29: RS232 与 Modem 通信编程

3. Modem3. Modem 通信编程通信编程Modem 是与计算机的串口相连的,所以通信

程序的设计与 RS232 串口通信类似,主要差别在于需要通过 RS232 口发出 AT 命令对 Modem 进行状态设置和检测以及进行拨号和应答。在 Modem 处于工作状态后其通信过程与RS232 直连相同。

Page 30: RS232 与 Modem 通信编程

1 ) MSComn 控件的添加2 )串口属性的设置: Modem 通信使用

RTS/CTS 握手信号,须将串口的握手协议设置为 comRTS ,

Page 31: RS232 与 Modem 通信编程

3 ) Modem 的初始化和状态转换,将要发送的AT 命令写入发送缓冲区发送,对 Modem 状态进行转换设置:

4 )数据的接收和发送:拨号成功后, modem处于工作状态,使用 output 发送数据, input 属性来接收数据。