搜档网
当前位置:搜档网 › (c#2.0)serialPort串口通讯

(c#2.0)serialPort串口通讯

(c#2.0)serialPort串口通讯
(c#2.0)serialPort串口通讯

using System;

using System.Collections.Generic;

using https://www.sodocs.net/doc/fd15907952.html,ponentModel;

using System.Data;

using System.Data.SqlClient;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Configuration;

using System.IO;

using System.IO.Ports;

namespace WindowsApplication2

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

int iCount;

int numbers;

byte rlenth;

bool bRLenth;

int bRStart;

bool bRParam;

byte Rchk;

int LParam;

byte[] RParam;

bool brcmd;

byte RCmd;

bool bRchk;

bool bfinish;

private void Form1_Load(object sender, EventArgs e) {

//Form1 Form1 = new Form1();

try

{

if (this.serialPort1.IsOpen)

{

serialPort1.Close();

}

else

{

serialPort1.PortName = "COM1"; //选择串口COM1

serialPort1.BaudRate = 9600; //设置通信口参数

serialPort1.DataBits = 8; //数据位

serialPort1.Parity = System.IO.Ports.Parity.None;//校验位无校验

serialPort1.StopBits =

System.IO.Ports.StopBits.One;//停止位1位

serialPort1.ReadBufferSize =

1024; //接收缓冲区大小

serialPort1.WriteBufferSize =

1024; //发送缓冲区大小

serialPort1.Open();

serialPort1.ReadExisting(); //设置Input从接收缓冲读取全部数据

serialPort1.ReceivedBytesThreshold =

1; //设置引发OnComm事件的字节长度

serialPort1.DiscardInBuffer() ; //清除接收缓冲区

serialPort1.DiscardOutBuffer() ; //清除发送缓冲区

}

string connstr =

System.Configuration.ConfigurationManager.AppSettings["myConnectionSt ring"];

SqlConnection conn = new SqlConnection(connstr);

conn.Open();

string sql = "select name as 时间,price,card from test01";

SqlDataAdapter da = new SqlDataAdapter(sql, conn); DataSet ds = new DataSet();

da.Fill(ds, "baomin");

ultraChart1.DataSource = ds.Tables[0].DefaultView; dataGridView1.DataSource = ds.Tables[0].DefaultView; ultraChart1.Axis.Y.LogBase = 1000;

ultraChart1.Axis.Y.RangeMax = 30000;

ultraChart1.Axis.Y.RangeMin = 0;

Application.EnableVisualStyles();

Application.DoEvents();

}

catch (Exception ex)

{

MessageBox.Show("dd",ex.Message,MessageBoxButtons.OK ,MessageBoxIcon.Error);

}

//ultraChart1.

}

///

/// 取前后存储器两个值对比,应付电脑异常退出

///

/// XOR异域校验

///

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)

{

try

{

//Byte[] dataread = new Byte[8] ;

//serialPort1.Read(dataread, 0, dataread.Length);

//int productline=dataread[0]; //接口号

//iCount=dataread[5];

string connstr =

System.Configuration.ConfigurationManager.AppSettings["myConnectionSt ring"];

SqlConnection conn = new SqlConnection(connstr);

conn.Open();

//if (dataread[0] == 0xAA)

//{

// // MessageBox.Show(productline.ToString(), "ddd", MessageBoxButtons.OK, MessageBoxIcon.Error);

// numbers = 0;

// numbers = Convert.ToInt32(dataread[4]) * 256 ^ 1 + Convert.ToInt32(dataread[5]);

// numbers = Convert.ToInt32(dataread[4]) * Convert.ToInt32(System.Math.Pow(256, 1)) +

Convert.ToInt32(dataread[5]);

// SqlCommand cmd = new

SqlCommand("SP_SC_IN_AUTONUMBER", conn);

// https://www.sodocs.net/doc/fd15907952.html,mandType = CommandType.StoredProcedure; // cmd.Parameters.Add("@quantity",

SqlDbType.Int);

// cmd.Parameters["@quantity"].Value = numbers; // cmd.Parameters.Add("@ports", SqlDbType.Int); // cmd.Parameters["@ports"].Value = dataread[3]; // cmd.ExecuteNonQuery();

//}

byte[] DataRead;

int bytData ;

int bytnum;

//bytnum = serialPort1.ReadByte; ;

// TODO: NotImplemented statement:

ICSharpCode.SharpRefactory.Parser.AST.VB.OnErrorStatement

if (serialPort1.ReceivedBytesThreshold ==

serialPort1.ReceivedBytesThreshold)

{

bytnum = serialPort1.BytesToRead;

DataRead = new byte[bytnum];

// TODO: NotImplemented statement: ICSharpCode.SharpRefactory.Parser.AST.VB.ReDimStatement

for (int k = 0; k <= (bytnum - 1); k++)

{

bytData= serialPort1.ReadByte();

DataRead[k] =(byte) bytData;

bfinish = RFJ(DataRead[k]);

if (bfinish)

{

//System.Convert.ToInt32(RCmd)为端口号

iCount = 0;

for (int j = 0; j <= 1; j++)

{

iCount +=

System.Convert.ToInt32(RParam[j]) * Convert.ToInt32(Math.Pow(256, j)); }

SqlCommand cmd = new

SqlCommand("SP_SC_IN_AUTONUMBER", conn);

https://www.sodocs.net/doc/fd15907952.html,mandType =

CommandType.StoredProcedure;

cmd.Parameters.Add("@quantity", SqlDbType.Int);

cmd.Parameters["@quantity"].Value = iCount;

cmd.Parameters.Add("@ports", SqlDbType.Int);

cmd.Parameters["@ports"].Value = System.Convert.ToInt32(RCmd);

cmd.ExecuteNonQuery();

}

}

}

}

catch (IOException ex)

{

throw (ex);

}

}

private void timer1_Tick(object sender, EventArgs e)

{

//this.Opacity -= -0.1;

//if (this.Opacity==0)

//{

// timer1.Enabled = false;

// this.Close();

//}

}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)

{

Win32.AnimateWindow(this.Handle, 2500, Win32.AW_SLIDE | Win32.AW_HIDE | Win32.AW_BLEND);

// e.Cancel = true;

//timer1.Enabled = true;

}

private void Btn_OK_Click(object sender, EventArgs e) {

popupNotifier1.Popup();

}

private bool RFJ(byte Data)

{

bool result=false;

if (bRStart == 0)

{

if (Data == 0xAA)

{

bRStart = 1;

}

}

else if (bRStart == 1)

{

if (Data == 0x55)

{

bRStart = 2;

}

else if (Data == 0xAA)

{

bRStart = 1;

}

else

{

bRStart = 0;

}

}

else if (bRLenth == false)

{

if (Data < 20)

{

bRLenth = true;

rlenth = Data;

Rchk = Data;

LParam = (int)(rlenth) - 3;

RParam = new byte[2];

}

else

{

bRStart = 0;

}

}

else if (brcmd == false)

{

brcmd = true;

RCmd = Data;

Rchk = (byte)(Rchk ^ Data);

}

else if (bRParam == false)

{

if (LParam >= 0)

{

RParam[LParam] = Data;

Rchk = (byte)(Rchk ^ Data); LParam = LParam - 1;

}

if (LParam < 0)

{

bRParam = true;

}

}

else if (bRchk == false)

{

if (Rchk == Data)

{

result = true;

}

else

{

bRStart = 0;

bRLenth = false;

brcmd = false;

bRParam = false;

}

}

return result;

}

}

}

serialport使用方法

上位机和单片机通信用16进制比较多,下面是16进制通信的例子,数据发送用Write,数据接收用ReadByte。 Imports System.IO.Ports '使用SerialPort所引用的命名空间 Public Class Form1 Dim fx() As Byte '待发送数据数组 Dim Rc() As Byte '接收数据数组 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If Button1.Text = "打开串口" Then SerialPort1.PortName = "COM1" SerialPort1.Open() '串口打开与关闭 Button1.Text = "关闭串口" Button2.Enabled = True Timer1.Enabled = True Else If SerialPort1.IsOpen Then SerialPort1.Close() Button1.Text = "打开串口" Timer1.Enabled = False Button2.Enabled = False End If End Sub '待发送数据处理与发送 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim i As Integer Dim n As Integer Dim Cmd As String = TextBox1.Text n = Len(Cmd) \ 2 ReDim fx(n)

电脑--电子秤通信 连接线制作方法

电脑--电子秤通信连接线制作方法 一.准备工作: 1.按电子秤(地磅表头)说明书制作好数据通讯线. PS:一般电子秤数据通讯线的制作连接方法: ①一般电子秤采用的RS232通信.其数据通讯线只使用3根线. ②如果电子秤端采用9芯连接头,则使用2,3,5三根线.那么其与电脑COM口9芯连接头的连接方式对应是:2-2,3-3,5-5(如采集不到数据请修改为:2-3,3-2,5-5再试) ③如果电子秤端采用15芯连接头,则使用6,7,8三根线,那么其与电脑COM口9芯连接头的连接方式对应是:6-2,7-3,8-5(如采集不到数据请修改为:6-3,7-2,8-5再试) ④如果电子秤端采用25芯连接头,则使用2,3,7三根线,那么其与电脑COM口9芯连接头的连接方式对应是:2-2,3-3,5-7(如采集不到数据请修改为:2-3,3-2,5-7再试) 2.电子秤(地磅表头)通讯参数设置. 一般电子秤(地磅表头)均可由操作者自行设置通讯参数.包括:波特率设置.数据传输方式. 其中波特率一般均支持:1200,2400,4800,9600. 数据传输方式:根据电子秤生产厂家的设定不同而不同. PS:一般电子秤数据传输入方式: ①连续传送:当电子秤开机并且稳定,不论当前称重情况,电子秤每100ms传送一笔称重数据至COM口.

②稳定传送:当电子秤开机并且稳定,且当前电子秤过磅中,且电子秤稳重后.系统自动传送一笔称重数据至COM口.(电子秤零点不传送.未稳定时不传送.每称重一次只传送一次.下一次电子秤必须回到零点后再次称重.) ③按键传送:当电子秤开机并且稳定,且当前电子秤过磅中,能过电子秤的K/B(按键)上某一特定按键后,系统自动传送一笔称重数据至COM口.(具体说明请参见电子秤说明书或咨询电子秤供应商.)

串口通讯

串口通信的基本知识概念(232 422 485) 串口通信的基本概念: 1,什么是串口? 2,什么是RS-232? 3,什么是RS-422? 4,什么是RS-485? 5,什么是握手? 1,什么是串口 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线 Universal Serial Bus或者USB混淆)。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。 串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte) 的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它 很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总 常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。 典型地,串口用于ASCII码字符的传输。通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配: a,波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如 300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采 样率为4800Hz。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。 b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准 ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。 c,停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在 传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现 了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同

SerialPort控件

SerialPort常用属性、方法和事件 名称说明 BaseStream获取SerialPort对象的基础Stream对象。BaudRate获取或设置串行波特率。 BreakState获取或设置中断信号状态。 BytesToRead获取接收缓冲区中数据的字节数。 BytesToWrite获取发送缓冲区中数据的字节数。 CDHolding获取端口的载波检测行的状态。 Container 获取IContainer,它包含Component。 (从Component继承。) CtsHolding获取“可以发送”行的状态。 DataBits获取或设置每个字节的标准数据位长度。 DiscardNull获取或设置一个值,该值指示Null 字节在端口和接收缓 冲区之间传输时是否被忽略。 DsrHolding获取数据设置就绪(DSR) 信号的状态。 DtrEnable获取或设置一个值,该值在串行通信过程中启用数据终端 就绪(DTR) 信号。 Encoding获取或设置传输前后文本转换的字节编码。Handshake获取或设置串行端口数据传输的握手协议。 IsOpen获取一个值,该值指示SerialPort 对象的打开或关闭状 态。 NewLine获取或设置用于解释ReadLine和WriteLine方法调用 结束的值。 Parity获取或设置奇偶校验检查协议。 ParityReplace获取或设置一个字节,该字节在发生奇偶校验错误时替换 数据流中的无效字节。

PortName获取或设置通信端口,包括但不限于所有可用的COM 端 口。 ReadBufferSize获取或设置SerialPort 输入缓冲区的大小。 ReadTimeout获取或设置读取操作未完成时发生超时之前的毫秒数。 ReceivedBytesThreshold获取或设置DataReceived事件发生前内部输入缓冲区 中的字节数。 RtsEnable获取或设置一个值,该值指示在串行通信中是否启用请求 发送(RTS) 信号。 Site 获取或设置Component 的 ISite。 (从 Component 继承。) StopBits获取或设置每个字节的标准停止位数。WriteBufferSize获取或设置串行端口输出缓冲区的大小。WriteTimeout获取或设置写入操作未完成时发生超时之前的毫秒数 代码例程 1、串口配置代码 Sub PortStart() 'SerialPort1.PortName = COMX'计算机串口设置X,是串口号。可以使用下列列表框选择。 SerialPort1.BaudRate = 9600 …波特率设置 SerialPort1.DataBits = 8 '数据位设置 SerialPort1.StopBits = StopBits.One '停止位设置 SerialPort1.Encoding = Encoding.UTF8 SerialPort1.DtrEnable = True SerialPort1.ReadTimeout = 500 '超时时间 SerialPort1.NewLine = vbCrLf '行结束符合 End Sub 2、计算机串口读取

串口通信基本接线方法要点

串口通信基本接线方法 龚建伟2001.6.20 目次:1.DB9和DB25的常用信号脚说明 2.RS232C串口通信接线方法 3.串口调试中要注意的几点 目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口(RS422,RS485较远),若距离较远,需附加调制解调器(MODEM)。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连,本文只涉及到最为基本的接法,且直接用RS232相连,以回答前段网友的咨询。 1.DB9和DB25的常用信号脚说明 2.RS232C串口通信接线方法(三线制) 首先,串口传输数据只要有接收数据针脚和发送针脚就能实现:同一个串口的接收脚和发送脚直接用线相连,两个串口相连或一个串口和多个串口相连 ?同一个串口的接收脚和发送脚直接用线相连对9针串口和25针串口,均是2与3直接相连; ?两个不同串口(不论是同一台计算机的两个串口或分别是不同计算机的串口)

上面表格是对微机标准串行口而言的,还有许多非标准设备,如接收GPS数据或电子罗盘数据,只要记住一个原则:接收数据针脚(或线)与发送数据针脚(或线)相连,彼些交叉,信号地对应相接,就能百战 百胜。 3.串口调试中要注意的几点: ?不同编码机制不能混接,如RS232C不能直接与RS422接口相连,市面上专门的各种转换器卖,必须通过转换器才能连接; ?线路焊接要牢固,不然程序没问题,却因为接线问题误事; ?串口调试时,准备一个好用的调试工具,如串口调试助手、串口精灵等,有事半功倍之效果; ?强烈建议不要带电插拨串口,插拨时至少有一端是断电的,否则串口易损坏。

用SerialPort类设计串口通讯程序

使用SerialPort类设计串口通讯程 一.概述 输送带控制模块的核心技术是与PLC的串口通讯,在Visual Studio 6.0中编写串口通讯程序,一般都使用Microsoft Communication Control(简称MSComm)的通讯控件,只要通过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。但在https://www.sodocs.net/doc/fd15907952.html,技术广泛应用的今天,Visual https://www.sodocs.net/doc/fd15907952.html,没有将此控件加入控件库,所以人们采用了许多方法在Visual https://www.sodocs.net/doc/fd15907952.html,来编写串口通讯程序:第一种方法是通过采用Visual Studio 6.0中原来的MSComm控件这是最简单的,最方便的方法,但需要注册;第二种方法是采用微软在.NET推出了一个串口控件,基于.NET的P/Invoke调用方法实现;第三种方法是自己用API写串口通信,虽然难度高,但可以方便实现自己想要的各种功能。 现在微软推出了最新版本的Visual Studio 2005开发工具,可以不再采用第三方控件的方法来设计串口通讯程序。NET Framework 2.0类库包含了SerialPort类,方便地实现了所需要串口通讯的多种功能,为了使MSComm编程方法快速转换到以SerialPort类为核心的串口通讯的设计方法,这里着重讨论了Visual Studio 6.0的MSComm控件和SerialPort类设计方法的异同点。 二.SerialPort常用属性、方法和事件 1.命名空间 System.IO.Ports命名空间包含了控制串口重要的SerialPort类,该类提供了同步I/O 和事件驱动的I/O、对管脚和中断状态的访问以及对串行驱动程序属性的访问,所以在程序代码起始位置需加入Using System.IO.Ports。 2.串口的通讯参数 串口通讯最常用的参数就是通讯端口号及通讯格式(波特率、数据位、停止位和校验位),在MSComm 中相关的属性是CommPort和Settings。SerialPort类与MSComm有一些区别: 通讯端口号 [PortName]属性获取或设置通信端口,包括但不限于所有可用的COM 端口,请注意该属性返回类型为String,不是https://www.sodocs.net/doc/fd15907952.html,mPort的short类型。通常情况下,PortName正常返回的值为COM1、COM2……,SerialPort类最大支持的端口数突破了CommPort控件中CommPort 属性不能超过16的限止,大大方便了用户串口设备的配置。 通讯格式 SerialPort类对分别用[BaudRate]、[Parity] 、[DataBits]、[StopBits]属性设置通讯格式中的波特率、校验位、数据位和停止位,其中[Parity]和[StopBits]分别是枚举类型Parity、StopBits,Parity 类型中枚举了Odd(奇)、Even(偶)、Mark、None、Space,Parity枚举了None、One、OnePointFive、Two。 SerialPort类提供了七个重载的构造函数,既可以对已经实例化的SerialPort对象设置上述相关属性的值,也可以使用指定的端口名称、波特率和奇偶校验位数据位和停止位直接初始化SerialPort 类的新实例。

串口通信的接线方法

目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口(RS422、RS485较远),若距离较远,需附加调制解调器(MODEM)。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连,本文只涉及到最为基本的接法,且直接用RS232相连。 1、DB9和DB25的常用信号脚说明 2、RS232C串口通信接线方法(三线制) 首先,串口传输数据只要有接收数据针脚和发送针脚就能实现:同一个串口的接收脚和发送脚直接用线相连,两个串口相连或一个串口和多个串口相连同一个串口的接收脚和发送脚直接用线相连对9针串口和25针串口,均是2与3直接相连; 两个不同串口(不论是同一台计算机的两个串口或分别是不同计算机的串口) 图2 上面表格是对微机标准串行口而言的,还有许多非标准设备,如接收GPS数据或电子罗盘数据,只要记住一个原则:接收数据针脚(或线)与发送数据针脚(或线)相连,彼些交叉,信号地对应相接,就能百战百胜。 3、串口调试中要注意的几点: 不同编码机制不能混接,如RS232C不能直接与RS422接口相连,市面上专门的各种转换器卖,必须通过转换器才能连接; 线路焊接要牢固,不然程序没问题,却因为接线问题误事;

串口调试时,准备一个好用的调试工具,如串口调试助手、串口精灵等,有事半功倍之效果; 强烈建议不要带电插拨串口,插拨时至少有一端是断电的,否则串口易损坏。 RS232C标准串口接线方法 (第二版) 检验仪器与微机的通讯主要是以RS232C标准接口为主,而串口的接线方法也有一定的标准,在此谈谈几种常用的串口接法,仅作参考: 一、标准接法 1、9对9(包括9针对9孔,9孔对9孔,9针对9针): 说明:以下的孔、针指串口线两端的串口,不过2、3有可能不交换 2-------------3 3-------------2 4-------------6 5-------------5 6-------------4 7-------------8 8-------------7 2、9对25(包括9孔对25孔,9孔对25针) 2-------------3 (备注:2、3有可能不交换) 3-------------2 4-------------6 5-------------7 6-------------20 7-------------5 8-------------4

各类光纤接口类型的区别与图示

各类光纤接口类型的区别与图示 光纤的接口比较复杂,在项目的过程中有时候确实很容易弄错,为了方便自己和大家的工作,特整理了以下资料: 光纤接头类型主要可以分为以下几种: FC 圆型带螺纹(配线架上用的最多) ST 卡接式圆型 SC 卡接式方型(光纤收发器用的较多) LC 卡接式方形,比SC略小(光纤交换机用的较多) MT-RJ 方型,一头光纤收发一体 如下图所示: 光纤模块主要分为以下两种,一般都支持热插拔: GBIC(Giga Bitrate Interface Converter)使用的光纤接口多为SC或ST型 SFP小型封装GBIC,使用的光纤为LC型 光纤单模和多模的标识: L:表示单模,波长1310纳米; LH:表示单模长距,波长1310纳米,1550纳米; SM:表示多模,波长850纳米;

SX/LH :表示可以使用单模或多模光纤; 单模光纤的传输距离要比多模光纤远。 下面,是一些接线图,方便大家查看: 另外,如下图所示,在表示尾纤接头的标注中,我们常能见到“FC/PC”,“SC/APC”等,其含义如下:

“/”前面部分表示尾纤的连接器型号: “SC”接头是标准方型接头,采用工程塑料,具有耐高温,不容易氧化优点。传输设备侧光接口一般用SC 接头 “LC”接头与SC接头形状相似,较SC接头小一些。 “FC”接头是金属接头,一般在ODF侧采用,金属接头的可插拔次数比塑料要多。 “/”后面表明光纤接头截面工艺,即研磨方式: “PC” 微球面研磨抛光,在电信运营商的设备中应用得最为广泛,其接头截面是平的,。 “UPC”的衰耗比“PC”要小,一般用于有特殊需求的设备,一些国外厂家ODF架内部跳纤用的就是FC/UPC,主要是为提高ODF设备自身的指标。 “APC”呈8度角并做微球面研磨抛光,可改善电视信号的质量。 版权所有? mcsrainbow,保留所有原创日志的权利。转载请注明出处:https://www.sodocs.net/doc/fd15907952.html, 。 这篇文章发表于2010/01/25 15:49,属于Network分类。你可以通过RSS 2.0来跟踪这篇文章。你还可以对它进行评论。

串口通信MSComm控件和SerialPort

一.概述 输送带控制模块的核心技术是与PLC的串口通讯,在Visual Studio 6.0中编写串口通讯程序,一般都使用Microsoft Communication Control(简称MSComm)的通讯控件,只要通过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。但在https://www.sodocs.net/doc/fd15907952.html,技术广泛应用的今天,Visual S https://www.sodocs.net/doc/fd15907952.html,没有将此控件加入控件库,所以人们采用了许多方法在Visual https://www.sodocs.net/doc/fd15907952.html,来编写串口通讯程序:第一种方法是通过采用Visual Studio 6.0中原来的MSComm控件这是最简单的,最方便的方法,但需要注册;第二种方法是采用微软在.NET推出了一个串口控件,基于.NET的P/Invoke调用方法实现;第三种方法是自己用API写串口通信,虽然难度高,但可以方便实现自己想要的各种功能。 现在微软推出了最新版本的Visual Studio 2005开发工具,可以不再采用第三方控件的方法来设计 串口通讯程序。NET Framework 2.0类库包含了SerialPort类,方便地实现了所需要串口通讯的多种功能,为了使MSComm编程方法快速转换到以SerialPort类为核心的串口通讯的设计方法,这里着重讨论了Visu al Studio 6.0的MSComm控件和SerialPort类设计方法的异同点。 二.SerialPort常用属性、方法和事件 1.命名空间 System.IO.Ports命名空间包含了控制串口重要的SerialPort类,该类提供了同步I/O 和事件驱动的I/ O、对管脚和中断状态的访问以及对串行驱动程序属性的访问,所以在程序代码起始位置需加入Using Sys tem.IO.Ports。 2.串口的通讯参数 串口通讯最常用的参数就是通讯端口号及通讯格式(波特率、数据位、停止位和校验位),在MSComm 中相关的属性是CommPort和Settings。SerialPort类与MSComm有一些区别: ?通讯端口号 [PortName]属性获取或设置通信端口,包括但不限于所有可用的COM 端口,请注意该属性返回类型为String,不是https://www.sodocs.net/doc/fd15907952.html,mPort的short类型。通常情况下,PortName正常返 回的值为COM1、COM2……,SerialPort类最大支持的端口数突破了CommPort控件中CommPor t属性不能超过16的限止,大大方便了用户串口设备的配置。 ?通讯格式 SerialPort类对分别用[BaudRate]、[Parity] 、[DataBits]、[StopBits]属性设置通讯格式中的波特率、校验位、数据位和停止位,其中[Parity]和[StopBits]分别是枚举类型Parity、StopBits,Parit y类型中枚举了Odd(奇)、Even(偶)、Mark、None、Space,Parity枚举了None、One、OnePointFi ve、Two。 SerialPort类提供了七个重载的构造函数,既可以对已经实例化的SerialPort对象设置上述相关属性的值,也可以使用指定的端口名称、波特率和奇偶校验位数据位和停止位直接初始化Seri alPort 类的新实例。 3.串口的打开和关闭 SerialPort类没有采用MSComm.PortOpen=True/False设置属性值打开关闭串口,相应的是调用类的Op en()和Close()方法。 4. 数据的发送和读取 SerialPort类调用重载的Write和WriteLine方法发送数据,其中WriteLine可发送字符串并在字符串末尾加入换行符,读取串口缓冲区的方法有许多,其中除了ReadExisting(读取SerialPort对象的流和输入缓冲区中所有立即可用的字节)和ReadTo(一直读取到输入缓冲区中的指定value 的字符串),其余的方法

RS232串口通信基本知识与实例

1,RS232串口通信基本知识 (1)目前较为常用的串口是9针串口(DB9。通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口;若距离较远,需附加调制解调器(MOD EM)。 (2)RS232C串口通信接线方法(三线制) 接收数据针脚(或线)与发送数据针脚(或线)相连,彼些交叉,信号地对应相接 (3)DB9接口三线引脚定义 2 ---- RXD 接收数据 3 ---- TXD 发送数据 5 ---- GND 信号地 (4)串行通信方式 1)单工:信息只能单向传送 2)半双工:信息可双向传送但不能同时进行 3)全双工:信息可同时进行双向传送 (5)RS232逻辑电平 逻辑0电平规定为+5 ~ +15V之间;逻辑1是电平为-5 ~ -15V之间,因此在与单片机进行通信时需要进行电平转换 (6)RS232串行通信接口电路设计 (7)51单片机串行通信接口软件设计 1)两个重要指标:可靠性和速度,可靠性是第一位。 2)与串口通信相关的几个寄存器和控制位 TMOD:可以用它来设置定时器工作方式(如果在MCU中使用的是定时器来产生波特率,就需要对这个寄存器进行设置,通常设为0x20,即设置定时器1为8位自动重装定时器,即工作方式1) TH1和TL1:定时器1初始值(可通过波特率计算软件获得) TR1:开启定时器1 SCON:串口控制寄存器,通常设为0x50,即10位异步传输,由定时器1

产生波特率,无奇偶校验位,允许接收 PCON:这个寄存器主要用到它的最高位SMON,当最高位设为1时,原波特率加倍 ES:串口中断使能位 EA:全局中断使能位 3)波特率计算方法(使用一个名为“51波特率初值计算.exe”的小软件)第1步:选择定时器工作方式(方式2) 第2步:输入晶振值(11.0592) 第3步:选择波特率(9600) 第4步:设置SMOD值(0) 第5步:点击确定 第6步:将软件上显示值赋给TH1和TL1 4)串口初始化程序 void Initial_RS232(unsigned char rate) { //默认晶振值为11.0592MHz unsigned char Reload1; switch(rate) //根据拨码器设置波特率 { case 0: Reload1 = 0xE8; //2400bps break; case 1: Reload1 = 0xF4; //4800bps break; case 2: Reload1 = 0xFA; //9600bps break; case 3: Reload1 = 0xFD; //19200bps break; default: Reload1 = 0x00; break; } PCON = PCON|0x80; //SMOD = 1 ;波特率加倍 TMOD = 0x20; //0011,00010设置定时器1为8位自动重装计数器 SCON = 0x50; //0101,0000 8位可变波特率,无奇偶校验位 TH1 = Reload1; //设置定时器1自动重装数 TL1 = Reload1; TR1 = 1; //开定时器1 ES = 1; //允许串口中断 EA = 1; //开总中断 }

四大类插孔接口详解

四大类插孔接口详解 编辑整理—王兆贵 在平板电视市场高速发展的同时,电视背部接口也引起了消费者的广泛关注。作为数字电视,现在不仅仅是用来观看电视,很多用户都开始用它与数码相机、硬盘、电脑、微软Xbox 360、索尼的PS3和任天堂Wii游戏机等设备进行链接,这时对接口就有一些要求,像HDMI接口、USB接口都成为了高清平板电视的主流接口。到底哪些为目前液晶、等离子电视的必备接口呢?下面笔者就从必备、使用、可选、趋势四大方面对接口进行了简单解析,一起来看看吧。 平板电视四大类接口详解-王兆贵 四大类接口 ● 必备接口: ·HDMI接口:是最新的高清数字音视频接口,收看高清节目,只有在HDMI通道下,才能达到最佳的效果,是高清平板电视必须具有的基本接口。 ·DVI接口:是数字传输的视频接口,可将数字信号不加转换地直接传输到显示器中。(王兆贵1157440560) ·色差分量接口:是目前各种视频输出接口中较好的一种。 ·AV接口:AV接口实现了音频和视频的分离传输,避免了因音/视频混合干扰而导致的图像质量下降。

·RF输入接口:是接收电视信号的射频接口,将视频和音频信号相混合编码输出,会导致信号互相干扰,画质输出质量是所有接口中最差的。 ● 实用接口:(王兆贵1157440560) ·光纤接口:使用这种接口的平板电视不通过功放就可以直接将音频连接到音箱上,是目前最先进的音频输出接口。 ·RS-232接口:是计算机上的通讯接口之一,用于调制解调器、打印机或者鼠标等外部设备连接。带此接口的电视可以通过这个接口对电视内部的软件进行维护和升级。 ·VGA接口:是源于电脑显卡上的接口,显卡都带此种接口。VGA就是将模拟信号传输到显示器的接口。 ·S端子:是AV端子的改革,在信号传输方面不再对色度与亮度混合传输,这样就避免了设备内信号干扰而产生的图像失真,能够有效地提高画质的清晰程度。 ● 可选接口: ·USB接口:是目前使用较多的多媒体辅助接口,可以连接U盘、移动硬盘等设备。 ·蓝牙接口:是一种短距的无线通讯技术,不需要链接实现了无线听音乐,无线看电视。 ·耳机接口:使用电视无线耳机可在电视静音的情况下,自由欣赏精彩节目。 ● 趋势接口: ·DisplayPort接口:可提供的带宽就高达10.8Gb/s,也允许音频与视频信号共用一条线缆传输,支持多种高质量数字音频。 ● 必备接口:什么是HDMI接口?(王兆贵1157440560) HDMI是新一代的多媒体接口标准,全称是High-Definition Multimedia Interface,中文意思为高清晰多媒体接口,该标准由索尼、日立、松下、飞利浦、东芝、Silicon image、Thomson (RCA)等7家公司在2002年4月开始发起的。其产生是为了取代传统的DVD碟机、电视及其它视频输出设备的已有接口,统一并简化用户终端接线,并提供更高带宽的数据传输速度和数字化无损传送音视频信号。

串口基本常识

串口引脚图.jpg 串口通信的基本概念 1,什么是串口? 2,什么是RS-232? 3,什么是RS-422? 4,什么是RS-485? 5,什么是握手? 1,什么是串口 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal Serial Bus或者USB混淆)。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。 串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。 典型地,串口用于ASCII码字符的传输。通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配: a,波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置

串口通信的连线方法

转载:目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口(RS422,RS485较远),若距离较远,需附加调制解调器(MODEM)。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连,本文只涉及到最为基本的接法,且直接用RS232相连。 1.DB9和DB25的常用信号脚说明 9针串口(DB9) 25针串口(DB25[被屏蔽广告]) 针号功能说明缩写针号功能说明缩写 1 数据载波检测 DCD 8 数据载波检测 DCD 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 振铃指示 DELL 22 振铃指示 DELL 2.RS232C串口通信接线方法(三线制) 首先,串口传输数据只要有接收数据针脚和发送针脚就能实现:同一个串口的接收脚和发送脚直接用线相连,两个串口相连或一个串口和多个串口相连 · 同一个串口的接收脚和发送脚直接用线相连对9针串口和25针串口,均是2与3直接相连; · 两个不同串口(不论是同一台计算机的两个串口或分别是不同计算机的串口) 上面表格是对微机标准串行口而言的,还有许多非标准设备,如接收GPS数据或电子罗盘数据,只要记住一个原则:接收数据针脚(或线)与发送数据针脚(或线)相连,彼此交叉,信号地对应相接,就能百战百胜。 3.串口调试中要注意的几点: 串口调试时,准备一个好用的调试工具,如串口调试助手、串口精灵等,有事半功倍之效果;强烈建议不要带电插拨串口,插拨时至少有一端是断电的,否则串口易损坏。 单工、半双工和全双工的定义 如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工。 如果在任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方向上的传输存在,称为半双工传输。 如果在任意时刻,线路上存在A到B和B到A的双向信号传输,则称为全双工。 电话线就是二线全双工信道。由于采用了回波抵消技术,双向的传输信号不致混淆不清。双工信道有时也将收、发信道分开,采用分离的线路或频带传输相反方向的信号,如回线传输。 奇偶校验 串行数据在传输过程中,由于干扰可能引起信息的出错,例如,传输字符‘E’,其各位为:0100,0101=45H D7 D0 由于干扰,可能使位变为1,这种情况,我们称为出现了“误码”。我们把如何发现传输中的错误,叫“检错”。发现错误后,如何消除错误,叫“纠错”。 最简单的检错方法是“奇偶校验”,即在传送字符的各位之外,再传送1位奇/偶校验位。可采用奇校验或偶校验。

接口和抽象类的区别

.Net提供了接口,这个不同于Class或者Struct的类型定义。接口有些情况,看似和抽象类一样,因此有些人认为在.Net可以完全用接口来替换抽象类。其实不然,接口和抽象类各有长处和缺陷,因此往往在应用当中,两者要结合来使用,从而互补长短。 接下来先说说抽象类和接口的区别。 区别一,两者表达的概念不一样。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于“是”的关系;而接口是定义行为规范,因此对于实现接口的子类来说,相对于接口来说,是“行为需要按照接口来完成”。这些听起来有些虚,举个例子。例如,狗是对于所有狗类动物的统称,京哈是狗,牧羊犬是狗,那么狗的一般特性,都会在京哈,牧羊犬中找到,那么狗相对于京哈和牧羊犬来说,就属于这类事物的抽象类型;而对于“叫”这个动作来说,狗可以叫,鸟也可以叫。很明显,前者相当于所说的是抽象类,而后者指的就是接口。 区别二,抽象类在定义类型方法的时候,可以给出方法的实现部分,也可以不给出;而对于接口来说,其中所定义的方法都不能给出实现部分。 例如: public abstract class AbsTest { public virtual void Test() { Debug.WriteLine( "Test" ); } public abstract void NewTest(); } public interface ITest {

void Test(); void NewTest(); } 区别三,继承类对于两者所涉及方法的实现是不同的。继承类对于抽象类所定义的抽象方法,可以不用重写,也就是说,可以延用抽象类的方法;而对于接口类所定义的方法或者属性来说,在继承类中必须要给出相应的方法和属性实现。 区别四,在抽象类中,新增一个方法的话,继承类中可以不用作任何处理;而对于接口来说,则需要修改继承类,提供新定义的方法。 知道了两者的区别,再来说说,接口相对于抽象类的优势。 好处一,接口不光可以作用于引用类型,也可以作用于值类型。而抽象类来说,只能作用于引用类型。 好处二,.Net的类型继承只能是单继承的,也就是说一个类型只能继承一个类型,而可以继承多个接口。其实,我对于这一点也比较赞同,多继承会使继承树变的混乱。 好处三,由于接口只是定义属性和方法,而与真正实现的类型没有太大的关系,因此接口可以被多个类型重用。相对于此,抽象类与继承类的关系更紧密些。 好处四,通过接口,可以减少类型暴露的属性和方法,从而便于保护类型对象。当一个实现接口的类型,可能包含其他方法或者属性,但是方法返回的时候,可以返回接口对象,这样调用端,只能通过接口提供的方法或者属性,访问对象的相关元素,这样可以有效保护对象的其他元素。

VC++串口编程(基本概念)

在PC机的主板上,有一种类型的接口可能为我们所忽视,那就是RS-232C串行接口,在微软的Windows系统中称其为COM。我们可以通过设备管理器来查看COM的硬件参数设置,如图1。 图1 在Windows上查看PC串口设置 迄今为止,几乎每一台PC都包含COM。本质而言,COM是PC为和外界通信所提供的一种串行数据传输的接口。作为一种物理通信的途径和设备,它和目前风靡的另一种串行接口――USB所提供的功能是一致的。不过RS-232C显然已经开始被后起之秀USB赶超,因为USB的传输速率已经远远超过了RS-232C。 尽管如此,RS-232C仍然具有非常广泛的应用,在相对长的一段时间里,难以被USB 等接口取代。RS-232C接口(又称EIA RS-232C),1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定,全名是"数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准"。 本文将对这一接口进行硬件原理的介绍,随后我们将逐章学习DOS平台的串口编程,及Windows平台下基于API、控件和第三方类的串口编程,最后本文将给出一个综合实例。 在本文的连载过程中,您可以通过如下方式联系作者(热忱欢迎读者朋友对本文的内容提出质疑或给出修改意见): 作者email:21cnbao@https://www.sodocs.net/doc/fd15907952.html,(可以来信提问,笔者将力求予以回信解答,并摘取其中的典型问题,在本系列文章最后一次连载的《读者反馈》中予以阐述); 硬件原理 众所周知,CPU与存储芯片和I/O芯片的通信是并行的(并行传输的最大位数依赖于CPU的字长、数据总线的宽度),一种叫做UART(通用异步收发器,Universal Asynchronous

SerialPort控件的使用

ms-help://MS.VSCC.v80/MS.MSDN.v80/https://www.sodocs.net/doc/fd15907952.html,DEVFX.v20.chs/cpref8/html/T_System_IO_P orts_SerialPort_Members.htm//串口控件 一.概述 在Visual Studio 6.0中编写串口通讯程序,一般都使用 Microsoft Communication Control(简称MSComm)的通讯控件,只要通过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。但在https://www.sodocs.net/doc/fd15907952.html,技术广泛应用的今天,Visual https://www.sodocs.net/doc/fd15907952.html,没有将此控件加入控件库,所以人们采用了许多方法在Visual https://www.sodocs.net/doc/fd15907952.html,来编写串口通讯程序:第一种方法是通过采用Visual Studio 6.0中原来的MSComm控件这是最简单的,最方便的方法,但需要注册;第二种方法是采用微软在.NET推出了一个串口控件,基于.NET的P/Invoke调用方法实现;第三种方法是自己用API写串口通信,虽然难度高,但可以方便实现自己想要的各种功能。 现在微软推出了最新版本的Visual Studio 2005开发工具,可以不再采用第三方控件的方法来设计串口通讯程序。NET Framework 2.0 类库包含了SerialPort 类,方便地实现了所需要串口通讯的多种功能,为了使MSComm编程方法快速转换到以SerialPort类为核心的串口通讯的设计方法,本文着重讨论了Visual Studio 6.0的MSComm控件和SerialPort 类设计方法的异同点。 二.SerialPort常用属性、方法和事件 1.命名空间 System.IO.Ports命名空间包含了控制串口重要的SerialPort类,该类提供了同步I/O 和事件驱动的I/O、对管脚和中断状态的访问以及对串行驱动程序属性的访问,所以在程序代码起始位置需加入Using System.IO.Ports。 2.串口的通讯参数 串口通讯最常用的参数就是通讯端口号及通讯格式(波特率、数据位、停止位和校验位),在MSComm中相关的属性是CommPort和Settings。SerialPort类与MSComm有一些区别: a.通讯端口号

光模块接口区分

三、光纤接口的主要类型: 光纤接口是用来连接光纤线缆的物理接口,通常有SC、LC、FC、ST等几种类型。不同的光模块对应的光纤接口不尽相同。1×9及GBIC光模块通常采用SC光纤接口,而SFP 和XFP封装形式的光模块通常采用LC光纤接口。 LC、SC、FC等均指外形尺寸,PC、APC、UPC都是指光纤连接器的插针端面。 装置在光纤末端使两根光纤实现光信号传输的连接器,光信号通过时只引入很低衰减的装置。 光纤连接器,是光纤与光纤之间进行可拆卸(活动)连接的器件,它把光纤的两个端面精密对接起来,以使发射光纤输出的光能量能最大限度地耦合到接收光纤中去,并使由于其介入光链路而对系统造成的影响减到最小,这是光纤连接器的基本要求。在一定程度上,光纤连接器影响了光传输系统的可靠性和各项性能。 分类 光纤连接器按传输媒介的不同可分为常见的硅基光纤的单模、多模连接器,还有其它如以塑胶等为传输媒介的光纤连接器;按连接头结构形式可分为:FC、SC、ST、LC、D4、DIN、MU、MT等等各种形式。其中,ST连接器通常用于布线设备端,如光纤配线架、光纤模块等;而SC和MT连接器通常用于网络设备端。按光纤端面形状分有FC、PC(包括SPC 或UPC)和APC;按光纤芯数划分还有单芯和多芯(如MT-RJ)之分。光纤连接器应用广泛,品种繁多。在实际应用过程中,我们一般按照光纤连接器结构的不同来加以区分。以下是一些目前比较常见的光纤连接器: FC型光纤连接器 这种连接器最早是由日本NTT研制。FC是Ferrule Connector的缩写,表明其外部加强方式是采用金属套,紧固方式为螺丝扣。最早,FC类型的连接器,采用的陶瓷插针的对接端面是平面接触方式(FC)。此类连接器结构简单,操作方便,制作容易,但光纤端面对微尘较为敏感,且容易产生菲涅尔反射,提高回波损耗性能较为困难。后来,对该类型连接器做了改进,采用对接端面呈球面的插针(PC),而外部结构没有改变,使得插入损耗和回波损耗性能有了较大幅度的提高。 SC型光纤连接器 这是一种由日本NTT公司开发的光纤连接器。其外壳呈矩形,所采用的插针与耦合套筒的结构尺寸与FC型完全相同。其中插针的端面多采用PC或APC型研磨方式;紧固方式是采用插拔销闩式,不需旋转。此类连接器价格低廉,插拔操作方便,介入损耗波动小,

相关主题