1 / 31

RS232 与 Modem 通信编程

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

Download Presentation

RS232 与 Modem 通信编程

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. RS232与Modem 通信编程

  2. 1.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 清除发送 • RT Ring Indicate 铃声指示器

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

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

  5. 2.1 MSComm控件的属性 (1) CommPort属性 该属性用于设置或返回连接的串口编号。(2) Setting属性该属性用于设置或返回通信参数,属性值用字符串表示,主要设定波特率、奇偶检验、数据位数,停止位等4个参数。组成格式为: “BBBB,P,D,S”, 例如设置为“9600,n,8,1”时表示数据传输速度为9600bits/s,没有奇偶校验,数据位是8位,停止位1位.

  6. 2.1 MSComm控件的属性 (3) Handshaking属性该属性用于设置或返回硬件握手协议,即PC机与通信设备(如Modem)之间为了控制流速而约定的内部协议,属性值可以设置为如下的值: 设定值 值 描述ComNone 0 默认值,无握手协议ComXOnOff 1 Xon/Xoff握手协议ComRTS 2 RTS/CTS握手协议comRTSXOnXOff 3 Xon/Xoff握手协议和RTS/CTS握手协议

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

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

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

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

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

  12. 2.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信号到连接的调制解调器,以请示允许发送数据。

  13. 2.2 MSComm控件的事件 MSComm控件只有一个事件,即OnComm事件。 事件驱动通信是处理串行端口交互作用非常有效的方法,在许多情况下,事件发生时需要得到通知。例如,当线路数据到达本端或CD线和RTS信号线状态发生变化时,要求我们使用相应的事件来跟踪和处理,在这些情况下,可以利用MSComm控件的OnComm事件捕获并处理这些通信事件。OnComm事件还可以检查和处理通信错误。常见的通信事件和通信错误如下: MSCO-ER-BREAK:收到一个Break Signal。 MSCO-ER-CDTO: CD 信号超时。 MSCO-ER-CD: CD 信号改变。

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

  15. 2)串口属性的设置

  16. 3)发送和接收数据

  17. Modem通信程序设计 • Modem的工作状态 • AT指令集 • Modem通信编程

  18. 1. Modem的工作状态 (1)状态转换 连接建立 离线命令状态 载波丢失 在线状态 ATH命令 ATO命令 在线命令状态 换码序列+++

  19. (1)状态转换 命令状态和在线状态可以进行相互转换。 离线命令状态到在线状态:当建立连接后,Modem由离线命令状态转为在线状态。 在线状态到在线命令状态:在通信过程中,如果DTE向Modem发送换码序列+++,在发送前后均有1秒钟的保护时间(即Modem空闲),Modem将由在线状态转为在线命令状态。

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

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

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

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

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

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

  26. (3) 应答呼叫 Modem可以设置成自动或手工应答呼叫方式。 手工应答:A命令用来手工应答呼叫。当电话铃响后,由操作员发出A命令,该命令指示Modem接管电话线,并向对方发应答音频,与对方连接。如果连接成功,Modem便会返回CONNECT结果码;如果不成功就会返回NO CARRIER结果码。 自动应答(S0=n)在自动应答方式下,首先把S0寄存器设一个非0值(ATS0=n;n=1–255。其中,n值表示Modem进入摘机应答之前的铃响个数。

  27. (4 ) 在线传送数据两个 Modem连接好后,就可以通过电话线传送数据。双方都可以接收和发送。如果通信配置成全双工的(full—duplex),则两个用户都可以同时发送和接收信息。如果通信连接是半双工的(half—duplex),则只能有一个用户发送,一个用户接收。 通信时,可能由于线路噪声,设备出问题或用户操作错误而中止连接,这时Modem会指示丢失了载波,返回NO CARRIER结果码。为了重新建立连接,必须重新拨号。

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

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

  30. 1)MSComn控件的添加 • 2)串口属性的设置:Modem通信使用RTS/CTS握手信号,须将串口的握手协议设置为comRTS,

  31. 3)Modem的初始化和状态转换,将要发送的AT命令写入发送缓冲区发送,对Modem状态进行转换设置:3)Modem的初始化和状态转换,将要发送的AT命令写入发送缓冲区发送,对Modem状态进行转换设置: • 4)数据的接收和发送:拨号成功后,modem处于工作状态,使用output发送数据,input属性来接收数据。

More Related