本篇文章主要介绍了”RS-232/RS-485/RS-422 接口简介与编程”,主要涉及到RS-232/RS-485/RS-422 接口简介与编程方面的内容,对于RS-232/RS-485/RS-422 接口简介与编程感兴趣的同学可以参考一下。
一、什么是RS-232 接口?

(1) RS-232 的历史和作用

在串行通讯时,要求通讯双方都采用一个标准接口,使不同的设备可以方便地连接起来进行通讯。 RS-232-C接口(又称EIA RS-232-C)是目前最常用的一种串行通讯接口。 (“RS-232-C”中的“-C”只不过表示RS-232的版本,所以与“RS-232”简称是一样的)它是在1970 年由美国电子工业协会(EIA)联合贝尔 系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。 它的全名是”数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”该标准规定采用一个25 个脚的DB-25 连接器,对连接器 的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。 后来IBM的PC 机将RS-232 简化成了DB-9 连接器,从而成为事实标准。 而工业控制的RS-232 口一般只使用RXD、TXD、GND 三条线。

(2)RS-232 接口的电气特性

在RS-232-C 中任何一条信号线的电压均为负逻辑关系。 即:逻辑”1”为-3 到-15V;逻辑”0”为+3 到+15V 。 RS-232-C 最常用的9 条引线的信号内容如下所示

DB-9 1 2 3 4 5 6 7 8 9

DB-25 8 3 2 20 7 6 4 5 22

定义DCD RXD TXD DTR GND DSR RTS CTS RI

(3) RS-232 接口的物理结构

RS-232-C 接口连接器一般使用型号为DB-9 插头座,通常插头在DCE端,插座在DTE端.

PC 机的RS-232 口为9 芯针插座。 而波士RS-232/RS-485转换器的RS-232 为DB-9 孔插头。 一些设备与PC 机连接的RS-232 接口,因为不使用对方的传送控制信号,只需三条接口线,即”发送数据TXD”、”接收数据RXD”和”信号地GND”。 RS-232 传输线采用屏蔽双绞线。

(4)RS-232 传输电缆长度

由RS -232C标准规定在码元畸变小于4%的情况下,传输电缆长度应为50 英尺,其实这个4%的码元畸变是很保守的,在实际应用中,约有99%的用户 是按码元畸变10-20%的范围工作的,所以实际使用中最大距离会远超过50英尺,美国DEC公司曾规定允许码元畸变为10%而得出下面实验结果。 其中1 号电缆为屏蔽电缆,型号为DECP.NO.9107723 内有三对双绞线,每对由22# AWG 组成,其外覆以屏蔽网。 2 号电缆为不带屏蔽的电缆。 型号为DECP.NO.9105856-04是22#AWG 的四芯电缆。

DEC 公司的实验结果

波特率bps 1号电缆传输距离(米) 2号电缆传输距离(米)

110 1500 900

300 1500 900

1200 900 900

2400 300 150

4800 300 75

9600 75 75

经过许多年来RS-232 器件以及通信技术的改进,RS-232 的通信距离已经大大增加。 波士电子的RS-232 增强器可以将普通的RS-232 口的通信距离直接延长到1000米。

二、什么是RS-485 接口?

  1. RS-485 的电气特性:

发送端:逻辑”1”以两线间的电压差为+(2 至6) V 表示;逻辑”0”以两线间的电压差为-(2 至6)V 表示。 接收端:A比B高200mV以上即认为是逻辑”1”,A 比B 低200mV 以上即认为是逻辑”0”。

  1. RS-485(或 RS-422)的接线:

RS -485(或RS-422)通信建议一定要接地,因为RS-485(或RS-422)通信要求通信双方的地电位差小于1V。 即:半双工通信接3根线(+A、-B、地),全双工通信接5根线(+发、-发、+收、-收、地)。 为了安全起见,建议通信机器的外壳接大地。 RS-485(或RS-422)光隔转换器的所有外接电源的“地”必须全部连在一起但不要与计算机外壳地相连,因为电源“地”同时也是RS-485或RS-422的信号 “地”。 当通信距离超过100米时建议最好使用光电隔离的通信接口转换器。

  1. RS-485 的数据最高传输速率为10Mbps。 但是由于RS-485 常常要与PC 机的RS-232口通信,所以实际上一般最高115.2Kbps。 又由于太高的速率会使RS-485 传输距离减小,所以往往为9600bps 左右或以下。

  2. RS-485 接口是采用平衡驱动器和差分接收器的组合,抗噪声干扰性好。

  3. RS-485接口的最大传输距离标准值为1200米(9600bps时),实际上可达3000米,RS-485 接口在总线上是允许连接多达128个收发器、即RS-485 具有多 机通信能力,这样用户可以利用单一的RS-485 接口方便地建立起设备网络。 因RS-485 接口具有良好的抗噪声干扰性,长的传输距离和多站能力等上述优点就使其成为首选的串行接口。 因为RS485 接口组成的半双工网络,一般只需二根信号线,所以RS485 接口均采用屏蔽双绞线传输。 RS-485 的国际标准并没有规定RS485 的接口连接器标准、所以采用接线端子或者DB-9、DB-25 等连接器都可以。 波士RS-485 接口是事实工业标准。

  4. 采用RS485 接口时,传输电缆的长度如何考虑?

在使用RS485 接口时,对于特定的传输线经,从发生器到负载其数据信号传输所允许的最大电缆长度是数据信号速率的函数,这个长度数据主要是受信号失真及噪声等影响所限制。 最大电缆长度与信号速率的关系曲线是使用24AWG 铜芯双绞电话电缆(线径为0。51mm),线间旁路电容为52。5PF/M,终端负载电阻为100 欧时所得出。 (引自GB11014-89附录A)。 当数据信号速率降低到90Kbit/S 以下时,假定最大允许的信号损失为6dBV 时,则电缆长度被限制在1200M。 实际上,在实用时是完全可以取得比它大的电缆长度。 当使用不同线径的电缆。 则取得的最大电缆长度是不相同的。 例如:当 数据信号速率为600Kbit/S

时,采用24AWG 电缆,最大电缆长度是200m,若采用19AWG 电缆(线径为0.91mm)则电缆长度将可以大于200m; 若采用28AWG 电缆(线径为0.32mm)则电缆长度只能小于 200m。 RS-485的远距离通信建议采用屏蔽电缆,并且将屏蔽层作为地线。

三、什么是RS-422 接口?

RS-422 的电气性能与RS-485完全一样。 主要的区别在于:

RS-422 有4 根信号线:两根发送(Y、Z)、两根接收(A、B)。 由于RS-422 的收与发

是分开的所以可以同时收和发(全双工)。 RS-485 有2 根信号线:发送和接收都是A 和B。 由于RS-485 的收与发是共用两根线所以不能够同时收和发(半双工)。 能否将RS-422 的YA 短接作为RS-485 的A、将RS-422 的ZB 短接作为RS-485 的B呢? 回答:不一定。 条件是RS-422 必须是能够支持多机通信的。 波士电子的所有接口转换器的RS-422 口都能够支持全双工多机通信,所以可以这样简单转换为RS-485。

四、RS-485 比RS-232接口相比有何特点?

由于RS-232 接口标准出现较早,难免有不足之处,主要有以下四点:

(1) 接口的信号电平值较高,易损坏接口电路的芯片,又因为与TTL 电平不兼容故需使用电平转换电路方能与TTL 电路连接。

(2) 传输速率较低,在异步传输时,波特率为20Kbps。 现在由于采用新的UART 芯片16C550 等,波特率达到115.2Kbps。

(3) 接口使用一根信号线和一根信号返回线而构成共地的传输形式, 这种共地传输容

易产生共模干扰,所以抗噪声干扰性弱。

(4) 传输距离有限,最大传输距离标准值为50 米,实际上也只能用在15米左右。

(5)RS-232 只允许一对一通信,而RS-485 接口在总线上是允许连接多达128个收发器。

五、串口通信功能的实现

利用VC++实现串口通信的方法有多种,我们采取直接调用Window API中的一系列标准的串口通信函数,直接用这些标准函数来完成Windows下面的串口通信编程[11]。 利用WindowsAPI函数控制利用API 函数实现对RS232串口通信的访问,在实现控制通信中,我们必定要调动3个函数来实现对串口的控制:

CreatFile()函数实现串口初始化并打开串口;

ReadFile()函数接收串口传递过来的二进制流并返回数据到接收缓冲区中

WriteFile()把应用程序发出的指令送到发送缓冲区以供串口接收1. 打开串口

以下程序用于以同步方式打开串口COM1;

HANDLE hCom;
DWORD dwErrorHcomm=CreateFile(“COM1”,GENERIC_READ|GENERIC_WRITE
,0, NULL,OPEN_EXISTING, 0, NULL);
if (hComm==(HANDLE)0Xffff)
{dwError=GetLastError();MessageBox(dwError);
}
  1. 配置串口

配置串口是通过改变设备控制块DCB(Device Control Block)的成员变量值来实现的,程序实现如下:

DCB dcb;
dcb.BaudRate=9600;//波特率为9600bps
dcb.ByteSize=8;//数据位8位
dcb.Parity=EVENPARTTY;//有校验
dcb.StopBits=ONESTOPRTT; //一个停止位
SetCommState(hCom,&dcb);
  1. 数据读写

对串口进行读写与对文件进行读写所用的函数相同,具体为可采用查询、同步、异步或事件驱动等方法对串口进行读写所用函数如下所示:

bReadStatus=ReadFile(hCom,buffer,length,&length &m_lpOverlapped);
if(!bReadStatus)
{if(GetLastError()=ERROR_IO_PENDING){WaitForSingleObject(m_lpOverlapped,hEvent,1000);return((char)length);}return 0;
}

//写入函数程序为:

bWriteStatus=WriteFile(hCom,buffer,length,&length,&m_lpOverlapped)
if(!bWriteStatus)
{if(GetLastError()=ERROR_IO_PENDING){WaitForSingleObject(m_lpOverlapped, hEvent,1000);return((char)length);}return 0;
}
  1. 程序的编制

用VC++进行程序的编制首先要对串口进行初始化,设定端口,通信速率和校验方式,并在使用前打开串口,程序部分如下:

Cdialog::OnInitDialog();//TODO: Add extra initialization here
m_comm.SetCommPort(1);//选择串口1
if(! m_comm.GetPortOpen())
m_comm.SetPortOpen(TRUE);//打开串口1
m_comm.SetSettings(“9600,n,8,1”); //设置串口参数
m_comm.SetRThreshold(1);
m_comm.SetInputMode(1);//设置二进制模式

除了串口的位置和基本串口参数(数据传输速率9600bps,1位开始位,8位数据位,1位停止位,一位奇偶校验)设置外,为了实现实时数据采集功能,接受数据的读写 要尽可能的快速,则设置RTHreshold=1即接收缓冲区收到一个字节产生OnComm事件InputLen=1每次读取一个字节。 如果PC上位机在一定时间内不能将数据处理完,接收缓冲区会滞留数据,数据会产生丢失现象,我们必须对接受缓冲区进行适当的设置。 我们利用API函数实现串口通信的方法,实现了罗经及发射机对上位机串行通信的功能。

MFC 串口通信编程相关推荐

  1. 【转载】MFC实现串口通信编程nbsp;-nbsp;yu…

    MFC实现串口通信编程 vc++.c#专题     2009-10-08 22:32 在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题.计算机和单片机(如MCS-51)都具 ...

  2. VC串口通信编程-2

    VC串口通信编程 (2009-07-08 13:48:40) 转载▼ Win32串口编程(转:韩耀旭) 在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信.串口通信 ...

  3. C#中串口通信编程 收藏

    C#中串口通信编程 收藏 本文将介绍如何在.NET平台下使用C#创建串口通信程序,.NET 2.0提供了串口通信的功能,其命名 空间是System.IO.Ports.这个新的框架不但可以访问计算机上的 ...

  4. Visual C++串口通信编程---多线程异步方式

    Visual C++串口通信编程---多线程异步方式 1. 串口通信基础 提到串口让人想起并口,它们是计算机中两个比较重要的通信方式. 串口:也叫COM口,把字节的二进制位按位列队进行传输,每个字节占 ...

  5. 单片机与PC机串口通信编程

    单片机与PC机串口通信编程 实验目的 利用PROTUES仿真软件.串口调试助手.虚拟串口,搭建单片机与PC通信仿真平台,熟悉单片机串口的配置及与PC机的通信方法. 实验目的 1.PROTUES仿真软件 ...

  6. C#上位机开发串口通信编程——倒计时器开发

    C#上位机开发串口通信编程--倒计时器开发 一.介绍 这是我按照B站上的一个上位机开发视频教程开发的倒计时器开发,本来只有开始计时功能,没有停止计时功能,停止计时功能后面我自己添加了. 视频网址:C# ...

  7. STC系列芯片的串口通信编程

    STC系列芯片的串口通信编程 本人使用的是基于STC15F2K60S2芯片的开发板. 开发板上有关串口通讯的有:TMOD(定时器寄存器).CSON(串口通信寄存器).PCON(开发板电源控制寄存器)以 ...

  8. 树莓派与电脑之间的串口通信编程

    树莓派与电脑之间的串口通信编程 数据通信的三个方式介绍 单工通信 半双工通信 全双工通信 串口通信 编程步骤 数据通信的三个方式介绍 单工通信 只支持数据在一个方向上传输,又称为单向通信.如无线电广播 ...

  9. 用python实现串口通信编程

    实现串口通信编程,需要使用到第三方库 pyserial. 下面是一个简单的示例代码: import serialser = serial.Serial("COM3", 9600)w ...

最新文章

  1. linux存储--inode与block详解(七)
  2. 从零实现一个3D目标检测算法(2):点云数据预处理
  3. Java 线程之间通信
  4. php自学建议_如何高效自学PHP?
  5. Asp.Net中global.asax文件的描述
  6. 三分钟上手openldap帐号系统
  7. 全网首发:为什么依赖库编译时加了-fPIC,还是提示依赖库要使用-fPIC?
  8. LINUX下载编译ncurses
  9. HTTP的REST服务简介
  10. .NET 语音转文字 文字转语音
  11. 百练4083我爱北大 解析
  12. 在本地搭建Discuz!论坛
  13. 对数学规划软件 CPLEX 等读取 MPS 文件的理解
  14. Oracle数据库下的DDL、DML、DQL、TCL、DCL
  15. #物联网感知实验#proteus仿真入门
  16. RC滤波器:一阶无源、二阶无源、二阶有源
  17. SSH无密码登录失败之DSA算法问题
  18. 初窥构建之法——记2020BUAA软工个人博客作业
  19. Word 2010 自定义首行缩进的快捷键
  20. 近世代数 笔记和题型连载:第一章(代数系统引入)

热门文章

  1. 登录页面自动刷新验证码,并校验输入验证码和后台生成的验证码是否一致
  2. 如果提升,成为一个优秀的工程师!
  3. Android Studio实现远程服务
  4. 中考计算机试题ppt判断,信息技术中考试题之ppt基本操作一
  5. 小红伞误报病毒。误删了userinit.exe。使用USB启动技术修复。
  6. 在 Vue 中实现 sticky 鼠标上滑显示、下滑隐藏的效果
  7. 字符、字节、位等之间的转换(自我收集,欢迎指教)
  8. MFC Windows 程序设计[108]之取色器(附源码)
  9. 浏览器遭劫持的处理办法
  10. Makefile中的常用函数——wildcard,patsubst,filter