C#中的串口通信

关于串行接口

串行接口(Serial port)又称“串口”,主要用于串行式逐位数据传输。常见的有一般电脑应用的RS-232(使用 25 针或 9 针连接器)和工业电脑应用的半双工RS-485与全双工RS-422。

串行接口按电气标准及协议来分,包括RS-232-C、RS-422、RS485、USB等。 RS-232-C、RS-422与RS-485标准只对接口的电气特性做出规定,不涉及接插件、电缆或协议。USB是近几年发展起来的新型接口标准,主要应用于高速数据传输领域。 
RS-232-C :也称标准串口,是目前最常用的一种串行通讯接口。它是在1970年由美国电子工业协会(EIA)联合贝尔系统、 调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”。传统的RS-232-C接口标准有22根线,采用标准25芯D型插头座。自IBM PC/AT开始使用简化了的9芯D型插座。至今25芯插头座现代应用中已经很少采用。电脑一般有两个串行口:COM1和COM2,9针D形接口通常在计算机后面能看到。现在有很多手机数据线或者物流接收器都采用COM口与计算机相连。

RS-422 :为改进RS-232通信距离短、速率低的缺点,RS-422定义了一种平衡通信接口,将传输速率提高到10Mb/s,传输距离延长到4000英尺(速率低于100kb/s时),并允许在一条平衡总线上连接最多10个接收器。RS- 422是一种单机发送、多机接收的单向、平衡传输规范,被命名为TIA/EIA-422-A标准。

RS-485 :为扩展应用范围,EIA又于1983年在RS-422基础上制定了RS-485 标准,增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围,后命名为 TIA/EIA-485-A标准。

Universal Serial Bus(通用串行总线) :简称USB,是目前电脑上应用较广泛的接口规范,由Intel、Microsoft、Compaq、IBM、NEC、Northern Telcom等几家大厂商发起的新型外设接口标准。USB接口是电脑主板上的一种四针接口,其中中间两个针传输数据,两边两个针给外设供电。USB接口速度快、连接简单、不需要外接电源,传输速度12Mbps,新的USB 2.0可达480Mbps;电缆最大长度5米,USB电缆有4条线:2条信号线,2条电源线,可提供5伏特电源,USB电缆还分屏蔽和非屏蔽两种,屏蔽电缆传输速度可达12Mbps,价格较贵,非屏蔽电缆速度为1.5Mbps,但价格便宜;USB通过串联方式最多可串接127个设备;支持热插拔。最新的规格是USB 3.0。

RJ-45接口 :是以太网最为常用的接口,RJ45是一个常用名称,指的是由IEC(60)603-7标准化,使用由国际性的接插件标准定义的8个位置(8针)的模块化插孔或者插头。

串口属性


 

1. PortName 串口名    默认值COM1

串口对于操作系统来说是一个文件,如果设置PortName为本机不存在的串口名(即文件名),如“COM7”或“COMK”,Open()打开串口将失败,提示“端口COM7不存在”。

2. BaudRate 获取或设置串行波特率bit/s    默认值9600

比特率=波特率X单个调制状态对应的二进制位数。

RS232是要用在近距离传输上最大距离为30M

RS485用在长距离传输最大距离1200M

3. DataBits 获取或设置每个字节的标准数据位长度    默认值8

当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准 ASCII码),那么每个数据包使用7位数据。每个包

是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。

4. StopBits 获取或设置每个字节的标准停止位数    默认值One

用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数

越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

5. Parity 获取或设置奇偶校验检查协议    默认值None

在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验

位为0,保证逻辑高的位数是偶数个。如果是奇校验,

校验位位1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收

串口(COM)读写操作的三种方式:

第1种方式是采用微软在.NET2.0推出了一个串口控件,SerialPort类,但必须是.NET2.0才可以。 
第2种方式是用API写串口通信,虽然难度高,但可以方便实现自己想要的各种功能。 
第3种方式是通过采用Visual Studio 6.0中原来的MSComm控件这是最简单的,最方便的方法,但需要注册。

 

时间: 2024-10-25 19:36:34

C#中的串口通信的相关文章

51单片机串口通信-51单片机中的串口通信发送10(16进制)以上显示不正确

问题描述 51单片机中的串口通信发送10(16进制)以上显示不正确 串口通信中,向单片机发送数据控制LED灯亮实验中 发01,02.04.08 依次是 第1 2 3 4 个灯亮 而发送 10 就成第5 6 个一起亮了,然后发20 .40 是第7 和 第 8 个: 发 80 就全灭了 , 这是啥情况啊. #include unsigned char a,flag; void init(); void main() { init(); while(1) { if(flag == 1) { ES =

vbnet-VB.NET中如何处理串口通信接收的数据?

问题描述 VB.NET中如何处理串口通信接收的数据? 现在上位机的代码如下: Private Sub comm_DataReceived(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs) Dim n As Integer = comm.BytesToRead Dim buf(n) As Byte comm.Read(buf, 0, n) builder.Length = 0 Invoke(Sub() If checkB

串口通信 动态曲线-MFC中串口通信获得数据画图问题

问题描述 MFC中串口通信获得数据画图问题 我在WM_PAINT的OnPaint函数中画出坐标系,在OnComm函数中获得串口通信数据,在成员函数OnPaint_Draw中画动态曲线,但是调试时发现程序一直在OnPaint函数和调用的OnPaint_Draw函数中运行,不会到达OnComm函数中,当去掉OnPaint函数时,才可以到达OnComm函数获得串口通信数据,怎样解决这个问题呢?

数据发送-C#中串口通信发送20字节的数据

问题描述 C#中串口通信发送20字节的数据 20字节数据是指160位二进制数吗?转换成整型怎么定义,最大也只有64位?还是指一个一个的数据,总共有20个? 解决方案 用byte[]发送.当然也可以用int[],一共需要5个int或者20个byte serialPort1.Write(字节数组)

数据帧-c#串口通信中上位机测试数据组帧

问题描述 c#串口通信中上位机测试数据组帧 测试 发送数据的参数,设置温度频率时延输出功率,,这些数据组成一帧并且发送,然后接收,,, 解决方案 参考:http://www.360doc.com/content/13/0829/09/7531335_310657574.shtml 解决方案二: 可以在串口使用modbus协议通讯. 或者根据modbus的思想自己弄一套协议. modbus有应答和校验机制,能够保证串口通讯的可靠性. 解决方案三: 上位机-串口通信-C#

c#-C#中串口通信发送数据问题

问题描述 C#中串口通信发送数据问题 串口通信数据发送,除了可用字节数组byte[],还可以用其他的什么吗? 解决方案 串口硬件就是一个字节一个字节发的. 你可以通过c#的convert和ASCII转一下格式, 把其它的数据转成字节数组. 解决方案二: C#下调用JustinIO的串口通信问题C#串口通信 解决方案三: 不清楚.我做过几个串口通信的例子,不过使用byte[]都能达到要求,不知道你的需求是什么

java-求大神帮忙,在Java串口通信中设置DTR_CONTROL_DISABLE如何实现?

问题描述 求大神帮忙,在Java串口通信中设置DTR_CONTROL_DISABLE如何实现? 写了简单一个串口调试助手的程序,用来与STM32单片机通信,但是 DCB.fDtrControl = DTR_CONTROL_ENABLE的参数不对,使用下载的调试助手可以实现通信其DCB.fDtrControl值为DTR_CONTROL_DISABLE,自己写的却是DTR_CONTROL_ENABLE?是这个原因影响通讯了吗?如果是要如何改进? 解决方案 http://gqdy365.iteye.c

在串口通信中,给设备发送命令,DataReceive为什么要分两次来接收数据

问题描述 在串口通信中,给设备发送命令不管我Send几次,DataReceive为什么要分两次来接收数据,而且每次接收数据的长度不一样,为什么?求大神指点,谢谢了privatevoidserialPort_DataReceived(objectsender,SerialDataReceivedEventArgse){try{byte[]buffer=newbyte[serialPort.BytesToRead];serialPort.Read(buffer,0,buffer.Length);st

JAVA编程中串口通信的方法介绍

以前经常用C语言操作串口,实现一些发送接收之类的小功能,最近项目中也用到了串口通信,不过语言变成了Java,这个搞起来略蛋疼. Java说起来就是各种库各种引用,所以得到某些需求先google搜一把~~比如之前搞半天的读取网页内容,自己边琢磨边写,又是 charset,又是proxy,又是什么browsertype的,晕头转向,最后拿Jsoup一会儿就搞定了--不过使用之前要充分考虑可扩展性和 API的丰富程度,不然后面程序体积变大集成起来很蛋疼.好了废话不说,讲讲串口的问题-- 总述 Java