串口通信实验报告

2024-07-04

串口通信实验报告(共10篇)

串口通信实验报告 篇1

实验三

双机通信实验

一、实验目的

UART 串行通信接口技术应用

二、实验实现的功能

用两片核心板之间实现串行通信,将按键信息互发到对方数码管显示。

三、系统硬件设计

(1)单片机的最小系统部分

(2)电源部分

(3)人机界面部分

数码管部分

按键部分

(4)串口通信部分

四、系统软件设计

#include #define uchar unsigned char #define uint unsigned int void send();uchar code0[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9的数码管显示

sbit H1=P3^6;sbit H2=P3^7;sbit L1=P0^5;sbit L2=P0^6;sbit L3=P0^7;

uint m=0,i=0,j;uchar temp,prt;/***y延时函数***/ void delay(uint k){ uint i,j;

}

/***键盘扫描***/ char scan_key(){ H1=0;H2=0;

L1=1;L2=1;L3=1;if(L1==0){ delay(5);if(L1==0){ L1=0;H1=1;H2=1;if(H1==0)} //定义局部变量ij

//外层循环 for(i=0;i

{ m=1;return(m);} if(H2==0){ m=4;return(m);} } }

//KEY1键按下

//KEY4键按下

if(L2==0){ delay(5);if(L2==0){ L2=0;H1=1;H2=1;if(H1==0)

{ m=2;return(m);} if(H2==0){ m=5;return(m);} } }

//KEY5键按下 //KEY2键按下

if(L3==0){ delay(5);if(L3==0){ L3=0;H1=1;H2=1;if(H1==0){ m=3;

//KEY3键按下

}

return(m);} if(H2==0){ m=6;return(m);} } } return(0);

// KEY6键按下

/***主函数***/ main(){ P1M1=0x00;P1M0=0xff;

SCON=0x50;//设定串行口工作方式1 TMOD=0x20;//定时器1,自动重载,产生数据传输速率 TH1=0xfd;//数据传输率为9600 TR1=1;//启动定时器1 P0&=0xf0;while(1){

//如果有按键按下 if(scan_key()){ SBUF=scan_key();//发送数据 while(!TI);TI=0;}

if(RI){ RI=0;}

// //

等待数据传送 清除数据传送标志

//是否有数据到来

// 清除数据传送标志

temp=SBUF;

// 将接收到的数据暂存在temp中

P1=code0[temp];// 数据传送到P1口输出 delay(500);} } //延时500ms

五、实验中遇到的问题及解决方法

(1)串行口和定时器的工作方式设定是关键,本次是按需传输的是两位十六进制数,串行口为工作方式1,定时器为8位自动重载;(2)采用P0&=0xf0语句使4个数码管静态点亮;

(3)在发送和接受过程中,用标识位TI和RI来检测发送和接受是否完成;(4)在用电脑和单片机进行串口通信测试时,电脑的传世速率一定要和单片机的传输速率相等,否则显示会出现错误。

指导老师签字:

日期:

串口通信实验报告 篇2

随着科学技术的发展, 各种设备都趋向于人性化, 比如计算机上的Windows系统的引导提示, 智能手机上的Android系统的个性触屏。在技术研发方面, 各种提供方便的设备也层出不穷, 在硬件上有各种方便的测试设备, 它们有着直观的图像显示和人性化操作界面, 在软件上也有各种各样的模拟仿真, 测试和调试等工具。串行端口的本质功能是作为CPU 和串行设备间的编码转换器[1]。文中便是沿着这种趋势, 以一种通用的方式提出一种基于C#.NET的串口通信工具, 在此基础上可以对各种相应设备进行设置调整和获取数据及保存等操作。

1 需求分析

在网络实验室中, 实验管理计算机软件功能包含实验与管理服务器的更新、实验伺服方式、硬件控制与数据采集、实验日志记录[2]。文中以MODEM为范例, 使用Microsoft Visual Studio 2008作为开发工具, 在各种设备中的差异可自行调整, 使用VS2008 专门提供的串口通信类SerialPort, SerialPort 类极大的简化的串口编程的难度[3]。对于网络实验室来说, 如果开发一个软件对交换机和路由器等设备进行配置, 可以节省大量时间, 而且更加直观和简便。

如图1所示, 对MODEM的配置及信息获取需求如下。

2 串口通讯

2.1 配置MODEM

计算机与外设之间要共同遵守的某种约定, 这种约定称为物理接口标准[4], 使用RS232的9针串口进行配置。RS232 标准广泛应用于微型计算机系统和大型系统中, RS232 标准还具有连线简单、通讯距离长等优点[5]。配置需要对MODEM的串口发送和接受端进行对接, 如表1所示, 只需要对接2、3号针并把5号针接地即可。

2.2 串口开关

对设备进行配置, 正常都是需要先打开软件的串口检测, 再打开电源进行配置, 如果一直检测, 就会消耗系统资源, 因此需要设计串口打开和关闭按钮, 部分程序如下:

if (comm.IsOpen)

{

//打开时点击, 则关闭串口

comm.Close () ;txGet.AppendText ("串口已经关闭!" + Environment.NewLine) ;

}

else

{

//关闭时点击, 则设置好端口, 波特率后打开

comm.PortName = comboPortName.Text;

comm.BaudRate = int.Parse (comboBaudrate.Text) ;

try

{

comm.Open () ;

txGet.AppendText ("串口已经打开!" + Environment.NewLine) ;

}

catch (Exception ex)

{

//捕获到异常信息, 创建一个新的comm对象, 之前的不能用了。

comm = new SerialPort () ;

//现实异常信息给客户。

MessageBox.Show (ex.Message) ;

}

}

//设置按钮的状态

buttonOpenClose.Text = comm.IsOpen "关闭" : "打开";

//如果串口打开, 则打开数据发送按钮, 保存设备信息和载入设备信息按钮

buttonSend.Enabled = comm.IsOpen;

buttonSavecfg.Enabled = comm.IsOpen;

buttonLoadcfg.Enabled = comm.IsOpen;

}

2.3 发送和接收

2.3.1 数据发送

在串口打开之后, 在txSend窗口中写入命令, 点击发送则进行数据发送, 正常我们只需要直接发送ASCII码, 所以使用comm.WriteLine (txSend.Text) 命令即可完成, 在发送的时候, 对已经设置了int类型的变量n进行赋值, 如n=txSend.Text.Length+2, 以便用于发送流量的计算, 多加2是因为回车换行的字符占用。在利用以下程序进行流量显示

send_count+=n;//累加发送字节数

labelSendCount.Text="发送:"+send_count.ToString () ;//更新界面

2.3.2 数据接收

事件驱动方式是处理串行端口交互作用的一种非常有效的方法[6], 串口在接收脉冲之后, 便触发了事件, 使用void comm_DataReceived (object sender, SerialDataReceivedEventArgs e) , 在每次接收到数据时进行触发该函数, 在函数中进行字节整合, 由于每次接收的数据长短不同, 所以需要对缓存数据进行存储, 使用comm.Read (buf, 0, n) 对存数缓存数据, 其中buf为数据, n为数据长度。由于可能需要进行16进制, 所以要判断16进制查看按钮是否已经打开, 若是, 则以下程序进行16进制字符串拼接:

foreach (byte b in buf)

{

builder.Append (b.ToString ("X2") ;

}

若不是, 则直接使用ASCII码进行转换, 如果是中文配置设备, 需要识别编码是GBK还是UTF-8等编码, 才能进行转换。

要访问ui资源, 所以需要使用invoke方式同步ui, 所以在数据接受检测等等都在该函数this.Invoke ( (EventHandler) (delegate) 之中。

需要开发的程序的主要任务就是分析收到的数据包, 提取出这些有用数据[7]。在数据接收时, 为了得到一些特定数据, 还需要进行数据换行检测, 判断有”n”符号, 则对该符号之前数据进行储存且在buf中删除改行, 一行一行读取并检测, 则可以得到需要的数据。和发送数据时一样, 使用labelGetCount.Text = "接收:" + received_count.ToString () 进行流量统计。

3 实验结果及测试

使用WINDOWS XP系统安装Microsoft Visual Studio 2008, 再安装.NET平台, 使用C#进行开发, 该MODEM的原波特率为115200, 使用计算机的COM3串口, 与MODEM进行对接, 打开串口按钮后, 发送按钮、保存配置参数按钮及查看设备按钮被打开, 如图2所示。

输入cfg后, 点击发送则启动了配置模式, 如图3所示。

4 拓展应用

对于ADSL的MODEM, 接入点无须再设置, 而其他的MODEM, 如无线网络的所使用的设备, 需要加入接入点, 信息中心等等配置, 而对于网络实验室中的交换机, 需要配置VLAN和各个客户端的端口等, 路由器则需要设置路由表等, 原来网络实验室都是使用超级终端进行配置, 所有的命令需要自己输入。而现在使用串口工具, 即是将命令界面画化, 只要输入所要配置的IP, 端口等, 点击保存, 就能跳过繁琐的命令输入, 对于上文对MODEM的配置, 可以再进行拓展设计为各种设备的配置软件, 而软件的数据发送和数据接受, 能完全代替超级终端软件, 若有一些功能没有实现, 则还可以输入一些命令来进行完善。

摘要:网络实验室中的MODEM、交换机以及路由器需要使用超级终端连接后, 进行输入命令对其配置, 过程繁琐而且不够直观。描述了在C#.NET的环境下, 如何开发一种串口通信工具, 在对发送和接收的数据进行检测后, 再转换为所需编码, 实现对各种设备进行配置。

关键词:C#.NET,网络实验室,串口通信,数据检测

参考文献

[1]侯艳.VS2005中串口通信的实现[J].信息技术, 2009 (4) :15-20.

[2]江建军, 范少春, 刘继光, 等.基于虚拟仪器的分布式并行网络实验室[J].计算机工程与科学, 2007, 29 (4) :27-30.

[3]龚新文.串口通信在VS2008中的实现与应用[J].电脑与电信, 2011 (3) :47-51.

[4]钟原.网络通讯程序设计[J].信息与电脑, 2011 (4) :76.

[5]葛磊蛟, 毛一之, 李歧, 等.基于C语言的RS232串行接口通信实现[J].河北工业大学学报, 2008, 37 (6) :11-16.

[6]吉翔, 李永全.VC++下MSComm控件的串口通信方法[J].电脑开发与应用, 2009 (12) :34-38.

微机串口通信在实验仪器中的运用 篇3

关键词:单片机;串口通信;设计;实验仪器

中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)18-31498-02

The Microcomputer String Mouth Correspondence is Testing Theinstrument——Practice Discussion

ZENG Ling-qi

(Chengdu Railroad Police Station,Chengdu 610081)

Abstract:The elaboration through the miniature computer monolithicintegrated circuit string mouth and the computer string mouthcorrespondence way, realizes the computer to test the instrument thecontrol and the data acquisition method, take the concrete empiricaldatum as the example, the specify monolithic integrated circuit stringmouth correspondence design and the realization process, and make themultianalysis.

Key words:The monolithic integrated circuit;the string mouthcorrespondence;the design;tests the instrument

1 引言

由于其可编程、易扩展、成本低和体积小等优点,单片机早已被广泛应用于工业控制自动化中,越来越多的物理试验仪器中也使用了单片机进行自动控制,例如实现按键控制、数码管和液晶屏幕的显示、数据采集与模/数转换等等,这样大大方便了学生操作试验仪器。不过有些实验,如“光电效应测普郎克常量”、“夫兰克—赫兹实验”、“散热片的温度特性研究”等,需要读取大量的数据并从中找出这些数据间的相互关系,使得学生在上课时要花大量的时间去读数据,而不是进行逻辑推理和分析,如果能够用微机代替人工进行快速精准的数据采集,并通过计算机软件设计进行复杂的数据分析和处理,无疑对物理实验课是非常好的改进。

2 常用MCS-51芯片的结构与最小系统的硬件实现

以ATMEL公司的AT89S52为例进行说明,AT89S52芯片含有8K的 Flash型的内部 ROM 和 256B的内部 RAM ,对于不太复杂的开发场合,无需扩展外部 ROM,而且可在线编程,有利于进行开发调试,具体可参考读芯片的相关资料[1]。其内部结构如图1所示。

图1 单片机内部结构

图中,外部定时元件通常使用晶体振荡器;复位电路通常设计成上电复位形式或者按键复位形式,以便 CPU及其他功能部件都处于一个确定的初始状态,并开始工作;电源一般使用+5V。程序下载到 ROM 中运行。这样一个单片机的最小系统就实现了,可以通过其他引脚的硬件扩展,并进行软件编程就能响应外部中断、实现定时和外部脉冲计数、进行串并口I/O操作等。

图2是单片机的最小系统的硬件电路实现,其中复位采用上电复位方式,时钟电路采用外节晶体震荡器方式。另外,引脚 EA/VPP为低时访问外部ROM,为高时地址 0000H—0FFFH空间访问ROM,地址1000H-FFFFH空间访问外部ROM,因此这里应该按高,这一点往往是容易忽略的地方[2]。

图2 单片机最小硬件系统

3 串口通信的硬件实现

单片机的4个引脚多数都有第二功能,串口就是P3口的第二功能,其中,P3.0 是串口接收引脚,P3.1 是串图 2 单片机最小硬件系统口发送引脚。在一些实时性要求不太高的场合,将单片机的串口做输出扩展,与外围设备进行数据交换和控制也是一种常用的方法,但更常见在与计算机和其他单片机的通信中,而且硬件电路设计简单,易于开发。图3是单片机串口与计算机的 RS-232C 串口进行通信的一种常用电路连接方法[3]。

图3 单片机串口通信接口电路

进行串口收发时,理论上只需要把计算机串口的接收、发送引脚与单片机的接收引脚 (RXD)和发送引脚(TXD)相连接即可,就像单片机之间的串口通信一样,但是考虑到两者的信号电平标准不同,单片机中的信号使用 TTL 电平,即 >=2.4V 表示“ 1 ”, <=s.5V 表示 “0”,而 RS-232C 总线的电平标准是 -12V 表示“ 1 ”和 +12V 表示“ 0 ”。因此两者通信需要一个电平转换电路接口,图 3 中使用 MAX232 芯片实现这一功能,所接的 5 个电容均为0.1 ,具体可参看该芯片的相关资料[4]。也可以使用其它芯片实现电平转换功能,如MC1488和MC1489。

硬件电路设计好后,可以通过一些串口调试软件进行测试,查看是否能够正确的收发信息。在计算机方面有很多现成的应用程序,也可以用 VC++ 或 VB 等开发相应的软件,这里不详细讨论,接下来谈一谈单片机方面的软件开发。

4 串口通信的软件实现

8051系列单片机进行串口通信时,发送数据由 TXD 引脚送出,接收数据由 RXD 引脚输入。有两个缓冲器 SUBF,一个作发送缓冲器,一个作接收缓冲器,软件设计中可以用两种方式获知单片机发送或者接收了信息。一种是查询方式,程序反复查询发送标志和接收标志是否被硬件置位,若置位说明进行了发送和接收。用这种方式的缺点是 CPU 一直等待串口收发而不能及时响应和处理其他事件。另一种是中断方式,开启串口允许中断,每次单片机从串口收到或者发出信息,均会产生中断,转入中断服务程序进行相应的处理。

串口通信中“波特率”这个概念非常重要,所谓“波特率”也就是“比特率”,描述串口通信的速度,每秒发送或接收数据的二进制位数。在计算机与单片机通信时,双方的波特率必须相同,才能保证发送与接收的同步,进而获得完整的信息。

单片机进行串口通信时有 4 种工作方式,均与波特率的设定有关,波特率的计算也有相应的公式。另外不同的工作方式下通过串口进行异步传输的帧格式也不同。串口通信的收和发分别设置了一个中断标志住,若以中断方式进行串口通信,当发生收/发中断时,对应标志位被硬件置 1 ,可在程序中判断发生的串口通信中断是接收还是发送(因为单片机串口接收中断和发送中断只对应了一个中断向量入口地址)。中断标志位需要用户程序复0,通常在中断服务程序中执行。以上各项设置需要访问两个特殊功能寄存器 SCON(电源控制寄存器)和PCON (电源控制寄存器)[5] 。

5 实验仪器的改造

让我们看一下光电效应测普朗克常量这个实验。在图4 中,一定波长的光照射光电管的阴极K ,电子溢出向阳极A运动,在两极间加反向电压阻止电子向阳极运动,当检测到电流表读数为零时所加载的反向电压叫做截止电压队,对于不同的光照频率 ,有US=h/e(?酌-?酌0 ),其中 h为普朗克常量, e为电子电量,?酌0 为金属阴极 K 的红眼频率,只要找出 ?酌和 US 的线性关系,就可以计算 h 的大小。实验对每一种频率的光都需要改变电压采集电流值,描绘光电管图 4 光电效应原理图的伏安特性曲线,该曲线与电压轴的交点就是截止电压 U0 。

实验仪器的硬件原理框图可以参考图 5 的设计,通过按钮设置电压值,然后读取电流值,送显示屏显示并通过串口传递给计算机进一步处理。

参考文献:

[1]Atmel.DATA HANDBOOK AT89552- based 8—bit Microcontroller with 8K Bytes In-System Programmable Flash,2001.

[2]胡汉才.单片机原理及系统设计[J].清华大学出版版社,2002.

[3]吴金成. 8051单片机实践与与应用[J].清华大学出版社,2002.

[4]axim.DATA HANDBOOK,Max232—based +5V–Powered .Multichannel RS-232 Drivers/Recervers,2001.

[5]李华.MCS—5 系列单片机原理及系统设计[J].清华大学出版社,1997.

通信原理实验报告 篇4

1、实验名称:

2、实验目的:

3、实验步骤:(详细记录你的实验过程)

例如:(1)安装MATLAB6.5软件;

(2)学习简单编程,画图plot(x,y)函数等

(3)进行抽样定理验证:首先确定余弦波形,设置其幅度?、频率?和相位?等参数,然后画出该波形;进一步,设置采样频率?。。画出抽样后序列;再改变余弦波形的参数和抽样频率的值,改为。。。,当抽样频率?>=余弦波形频率2倍时,怎么样?否则的话,怎么样。。

具体程序及图形见附录1(或者直接放在这里,写如下。)

(4)通过DSP软件验证抽样定理

该软件主要有什么功能,首先点“抽样”,选取各种参数:a, 矩形波,具体参数,出现图形

B,余弦波,具体参数,出现图形

然后点击“示例”中的。。。。。。具体参数,图形。。

4、思考题

5、实验心得

6、附录1

消息队列通信实验报告 篇5

实验目的

1、了解什么是消息、消息队列

2、掌握消息传送的机理

实验内容

1、消息的创建、发送和接收。使用系统调用msgget(),msgsnd(),msgrev(),及msgctl()编制一长度为1k的消息发送和接收的程序。

Msgqid.c #include

#include

#include

#include

#define MSGKEY 75

/*定义关键词MEGKEY*/

struct msgform

/*消息结构*/

{

long mtype;

char mtext[1030];/*文本长度*/

}msg;

int msgqid,i;

void CLIENT()

{

int i;

msgqid=msgget(MSGKEY,0777);

for(i=10;i>=1;i--)

{

msg.mtype=i;

printf(“(client)sentn”);

msgsnd(msgqid,&msg,1024,0);/*发送消息msg入msgid消息队列*/

}

exit(0);

}

void SERVER()

{

msgqid=msgget(MSGKEY,0777|IPC_CREAT);/*由关键字获得消息队列*/

do

{

msgrcv(msgqid,&msg,1030,0,0);/*从msgqid队列接收消息msg */

printf(“(server)receivedn”);

}while(msg.mtype!=1);

/*消息类型为1时,释放队列*/

msgctl(msgqid,IPC_RMID,0);

exit(0);

}

main()

{

while((i=fork())==-1);

if(!i)SERVER();

while((i=fork())==-1);

if(!i)CLIENT();

wait(0);

wait(0);

}

实验结果:

2、选做实验:模拟从c/s通信

客户端client功能:

1)显示服务功能菜单

Enter your choice: 1.2.Save noney Take money 2)接收用户键入的功能号进行选择;3)将用户键入的功能号作为一条消息发送到消息队列,然后结束 服务端功能:

1)从消息队列接收client发送的一条消息; 2)根据消息作如下处理: 若消息为“1”,创建子进程1,子进程1加载服务模块save,该模块显示以下信息:Your money was saved!若消息为“2”,创建子进程2,子进程2加载服务模块take,该模块显示以下信息:

Please take your money!3)等待子进程终止后,server消息对列结束。

注意:1)save和take要事先编译连接好,放在同一目录下;

2)先运行客户端进程,再运行服务端进程。

1、client.c #include #include #include #include #include #define MSGKEY 75 struct msgform

{ long mtype;

char mtext[1000];}msg;int msgqid;

void client(){

int i;msgqid=msgget(MSGKEY,0777);

/*打开75#消息队列*/ for(i=20;i>=1;i--){ msg.mtype=i;printf(“(client)sent %dn”,i);sleep(3);msgsnd(msgqid,&msg,1024,0);

/*发送消息*/ } exit(0);} main(){

client();} server.c #include #include #include #include #include #define MSGKEY 75 struct msgform

{ long mtype;

char mtext[1000];}msg;int msgqid;

void server(){

msgqid=msgget(MSGKEY,0777|IPC_CREAT);/*创建75#消息队列*/ do

{ msgrcv(msgqid,&msg,1030,0,0);

/*接收消息*/

printf(“(server)received %ldn”,msg.mtype);sleep(3);}while(msg.mtype!=1);msgctl(msgqid,IPC_RMID,0);/*删除消息队列,归还资源*/ exit(0);}

main(){

server();}

移动通信原理的实验报告 篇6

1、掌握用数字环提取位同步信号的原理及对信息代码的要求。

2、掌握位同步器的同步建立时间、同步保持时间、位同步信号同步抖动等概念。

二、实验内容

1、观察数字环的失锁状态和锁定状态。

2、观察数字环锁定状态下位同步信号的相位抖动现象及相位抖动大小与固有频差的关系。

3、观察数字环位同步器的同步保持时间与固有频差之间的关系。

三、实验器材

1、移动通信原理实验箱 2、20M双踪示波器

一台 一台

四、实验步骤

1、安装好发射天线和接收天线。

2、插上电源线,打开主机箱右侧的交流开关,再按下开关POWER301、POWER302、POWER401和POWER402,对应的发光二极管LED301、LED302、LED401和LED402发光,CDMA系统的发射机和接收机均开始工作。

3、发射机拨位开关“信码速率”、“扩频码速率”、“扩频”均拨下,“编码”拨上,接收机拨位开关“信码速率”、“扩频码速率”、“跟踪”均拨下,“调制信号输入”和“解码”拨上。此时系统的信码速率为1Kbit/s,扩频码速率为100Kbit/s。将“第一路”连接,“第二路”断开,这时发射机发射的是第一路信号。将拨码开关“GOLD3置位”拨为与“GOLD1置位”一致。

4、根据实验四中步骤8~11的方法,调节“捕获”和“跟踪”旋钮,使接收机与发送机GOLD码完全一致。

5、根据实验五中步骤6~7的方法,调节“频率调节”旋钮,恢复出相干载波。

6、用示波器双踪同时观察“整形前”和“整形电平”,并将双通道置于直流耦合,零电平、电压设为一致。调节“整形”旋钮,使整形电平置于“整形前”波形上部凸出部分。用示波器观察“整形后”的波形,并与“整形前”比较,如完全相同,则整形电平调节正确。

7、用示波器观察接收机“BS”信号,该点即为接收机恢复出的位同步信号,将其与发射机的“S1-BS”进行比较。

8、改变系统的信码速率,按“发射机复位”和“接收机复位”键,通过与发射机的“S1-BS”对比观察“BS”信号的.变化。

9、将“第一路”断开,再连接,通过与发射机的“S1-BS”对比观察接收机“BS”信号的变化。

五、实验思考题

1、设数字环固有频差为△f,允许同步信号相位抖动范围为码元宽度Ts的η倍,求同步保持时间tc及允许输入的NRZ码的连“1”或“0”个数最大值。

答:同步保持时间t c =1/△f K,允许输入的NRZ 码的连“1”或连“0”个数的最大值为η 。

2、数字环同步器的同步抖动范围随固有频差增大而增大,试解释此现象。

答:由公式t c =1/△f K,当固有频差增大时,同步保持时间减小,那么抖动范围就增大。

3、若将AMI码或HDB3码整流后作为数字环位同步器的输入信号,能否提取出位同步信号?为什么?对这两种码的连“1”个数有无限制?对AMI码的信息代码中连“0”个数有无限制?对HDB3码的信息代码中连“0”个数有无限制?为什么?

答:可以提取位同步信号,因为整流后的AMI 码或HDB 3 码为NRZ 码,自然可以

提取。对这两种码连 “1”个数有限制,对 AMI 码的信息代码中连“0”个数有限制,对HDB 3码的信息代码中连“”个 数无限制,因为其连零个数不超过4 个。

远程维护系统串口通信协议研究 篇7

1 分析并建立串口通讯协议

1.1 分析

整体上来看, 串口通讯协议设计主要是在面向连接服务的基础之上的。任何装备对于通信协议的标准都是不同的, 这是因为各个研制装备的单位往往都会结合自身的需求以及实际设计型号来制定的, 对于信息帧结构也有较多不同的种类, 同时在通讯协议中, 各个部分内容当中位数也有一定的差异, 对数据进行编码的方式自然也不一样。所以, 并不能实现不同装备之间信息共享的操作。另外, 还有一部分装备并没有设置信息接口, 导致设备数据无法进行传输, 自然就无法实现远程控制设备。

1.2 建立

结合装备运行的实际情况, 制定通讯协议需要令其能够实现对远程设备进行控制以及维护的功能, 还要在此基础之上确保空间充足, 以便设备进行功能扩展, 在通讯协议当中, 还需要拥有控制设备、监视参数、设置参数等有一定关联的内容。对现有装备所拥有的通讯协议进行分析和设计的基础之上, 构建出能够满足装备的实际情况的一个通讯协议规范, 它可以比较严格地对信息帧格式和其他的帧格式之间位数展开规定, 按照协议, 可以将其分成五类不同的帧结构, 不同的帧结构设计类型都会和硬件间优化融合综合起来进行考虑。

2 设计分析五种帧结构

2.1 握手类

这种帧结构直接将设备和接口连接起来, 信息接口会定时传送询问帧到设备当中, 假如此时装备处于开启状态, 装备就会将回应帧传输给接口, 在接口收到回应帧之后, 双帧联动, 就能够实现数据的传输, 达到远程控制的目的。

2.2 控制类

这种帧结构将控制功能的实现作为主要目的, 它可以对设备进行诸如开机或者关机等控制操作, 在进入到这种状态下的时候, 接口需要先向整个设备输送控制帧, 在设备收到之后, 就可以立刻执行这些控制类帧当中的指定命令, 并且发送回应帧给接口, 待接口收到之后, 就可以标记这项操作任务已经完成了。

2.3 检测类

这种帧结构能够很好地实现检测类的相关功能, 正确利用检测帧, 我们能够对设备的各项系统参数以及运转状态展开系统的检测, 在被控制的设备收到接口所传输的监测帧之后, 结合信息帧当中的请求, 向信息接口传输拥有监测内容的对应帧。在设备接收了这一对应帧之后就会在短时间内立刻进行信息整合, 与此同时对其进行分析, 保证数据信息高度的安全以及稳定。

2.4 维护类

这种帧结构针对的是拥有维护性能的设备所适用的, 它能够对受到控制的设备参数进行必要的设置, 进而实现远程维护设备。其具体的操作流程如下:信息接口先向对应设备传输要进行读取的设备参数的信息帧, 设备收到了信息帧后, 结合信息帧当中所涵盖的内容, 传输响应帧到接口当中, 这一过程当中, 响应帧当中包括信息帧当中全部消息内容, 在接口收到了响应帧之后, 结合响应帧当中的消息, 对消息进行适当的修改以及设置, 全部完成之后, 可以向设备传输维护类的帧, 在设备收到维护帧后, 就可以依照维护帧当中的一些信息来对设备进行适当的维护以及设置操作。

2.5 补充类

通常来说这种帧结构都是在设备以及接口间进行信息帧传输的过程当中, 结合传输的信息帧长度、帧结构以及数据的字节数来进行精准判断。不过, 假如数据长度太大, 不能通过一帧来进行传输的时候, 就需要借助补充帧结构的作用。先发送并没有进行校验的帧, 随后自动传送, 在接口收到包含在补充信息帧当中的命令后, 就可以标记这次数据通讯活动完毕。

3 传输数据和远程维护系统具体实现

3.1 传输数据的流程

微机传输请求信息, 到达设备之后, 被控制的设备会先对信息帧进行解码处理, 结合协议当中的有关规范, 在存储器当中适当地抽取需要的消息, 再通过ARM来进行适当的处理, 结合规定当中的格式, 借助串口, 通过信息帧的形式来发送需要的数据信息, 到达微机之后, 微机接收信息帧, 借助其中远程维护软件和协议当中所规定的格式来解码信息帧, 从中提取有效的信息, 在相应的区域当中显示指定的数据信息。

3.2 实现远程维护系统

整体上来说, 远程维护控制这一系统的主要结构包括远程维护中心、网络组成软件以及设备接口信息终端这样的三个部分所组成, 它可以很好地实现对各个被控制的设备进行监视以及维护的目的, 通过信息之间的相互传输以及对彼此信息进行破解的过程来实现信息分析, 进而能够及时且有效地实现对被控设备进行远程监控的目的, 继而对已经有的问题进行适当的预警和提示, 继而实现远程维护设备和远程控制设备的最终目的, 这一系统的组成可以用图1 来展示。

4 结语

设计串口通讯协议, 可以起到规范化通讯协议, 并统一提供理论支持的作用, 可以将装备当中的串口通讯协议进行统一, 与此同时, 还给装备远程维护的控制系统打造了比较理想的理论平台, 针对装备使用和发挥正常效能来说拥有比较现实的意义和价值。

参考文献

[1]杨光, 雷志雄.远程维护控制系统串口通信协议研究[J].电子技术, 2009 (01) .

[2]张海滨.浅谈远程维护控制系统的串口通信协议[J].硅谷, 2010 (24) .

[3]何先波, 钟乐海, 芦东昕.远程串口调试通信协议在嵌入式软件调试器设计中的应用[J].西华师范大学学报:自然科学版, 2004 (01) .

[4]耿铁柱.基于GPRS的控制与保护的远程监控系统的研究[D].沈阳工业大学, 2012.

串口通信实验报告 篇8

关键词:Java;串口通信;计算机;PLC

中图分类号:TN91 文献标识码:A 文章编号:1674-7712(2012)20-0020-01

Java是一种面向对象的,支持网络通信的程序设计语言,该语言不仅具有C++和Smalltalk语言的诸多优点,还能够进行网络通信、实现并发程序设计、对多媒体数据进行控制等,这些特点都决定了Java语言具有强健的鲁棒性。再者,Java对不同平台具有良好的支持性能,可以通过一次编译实现跨平台通信和数据传输。这个特性几号了解决了控制程序移植困难的问题,减少了开发周期,降低了开发难度。

PLC的抗干扰能力强、可靠性高、便于应用和集成,因此被应用在许多领域。通过PLC在分布式系统和数据采集系统中实现串行通信已经得到了广泛的应用。

本文就利用Java语言实现计算机与PLC的串口通信进行了研究。

一、基于Java的串口通信技术

(一)Java本地调用技术。将Java与硬件系统进行关联需要使用Java本地调用技术,也就是JNI技术。该技术通过Java虚拟机实现与用其他语言编写的应用程序和库的相互操作,其作用可以表示为两者之间的中介。

(二)Javax.comm类库。串口通信是计算机与其他外部设备进行数据传输的主要方式,但是不能直接利用Java语言实现串口通信的编程控制,因此需要借助其他语言如汇编、C/C++等实现对硬件的控制,在此之上利用JNI技术实现对串行通信的控制。虽然过程可能比较繁琐,但是SUN公司提供了javax.comm类库,通过该库调用合适的API即可通过Java实现串口的通信。该库提供有四个接口,六个类,三个层次。

其中上层类中的CommPortIdentifier可以使应用程序用方法和驱动器对可用的通信端口进行查找,选择某一端口后打开该端口利用通过其他类库,如底层类库等,进行通信。

类CommPort则是一个用来描述底层系统定义的有效通讯端口抽象类,通过该类可以控制通信端口实现传输的方法。

底层类中的两个类库分别提供串行或并行通讯接口,分别定义通信所需的基本功能的方法。

由于驱动层类不直接提供使用,故本文不做讨论。

具体通信流程为:搜索系统中的可用端口,选中其中一个可用端口创建传输对象,然后将该对象投射到某一类型的物理通讯设备中,标注该端口打开,就可以通过调用不同的方法进行数据的读写和传递,使用完毕后关闭该端口。

二、PLC串行通信

(一)通信协议。上位机与PLC之间的通信需要使用到通信协议,实现一次数据或命令的传输被称为一个数据帧或者命令帧,PLC接收到相应的帧后对上位机进行反馈。

一个完整的帧结构包含如下几个部分:协议帧结构标志、PLC判别节点号、识别码、正文、FSC帧检查码、终止符等。

(二)通信顺序。具体的通信顺序如下:首先上位机完成定界符的设定后对其控制的PLC设备发送控制帧,然后PLC在接收到定界符后向上位机进行反馈确定两者之间开始通信,上位机接收到PLC发送的反馈定界符后开始传输数据帧;当PLC向上位机发送数据时,同样需要先发送定界符并确认返回定界符,然后才能开始进行数据传输,数据传输完毕后以终止符结尾。

三、网络中的基于Java控制技术的多PLC通信技术

本文使用一台上位机同时对多个PLC设备进行控制,鉴于上位机只有RS-232接口,故在硬件配置中需要使用RS-232与RS-485的转换器,通过该转换器实现利用RS-485网络对PLC设备的远程控制。

系统的软件部分流程为首先进行程序初始化工作,然后与控制设备进行连接,连接成功后通过命令帧或者数据帧实现上位机与不同PLC之间的数据通信和远程控制。

打开串口代码为:

try{

PortId=CommPortIdentifier.getPortIdentifiers(PortName);

try{

serialPort=().portld.open(“Serial_Communication”,2000);

}catch(PortInUseException e)

{return InitFail};

}try{

In=SerialPort.getInputStream();

Out=SerialPort.getOutputStream();

}catch(IOException e)

{return InitFail};

串口配置代码为:

try

{serialPort.setSerialPortParams(9600,//传输波特率为9600

SerialPort.DATABITS_16,//数据位为16位

SerialPort.STOPBITS_2,//停止位为2位

SerialPort.PATITY_NONE);//无数据校验

}catch(UnsupportedCommOperation Exception e)

{return InitFail};

本系统使用监听的方式实现数据传递,该方式的好处在于响应速度快、实时性高。监听法是缓存区存储了新的数据时,端口会根据存储状态的改变而产生变化,监听器将监听结果传递给应用程序,应用程序对不同数据进行相应的处理,完成数据的传输和状态的监控。

四、结语

应用Java实现计算机与PLC的串行通信具有非常广泛的应用,其对分布式控制系统设计、现场设备的数据采集与远程控制等都具有现实指导意义。这种通信方式简单可靠,投资少,速度快,具有可观的应用前景。

参考文献:

[1]吴兴军,胡汉春.Java实现计算机与OMRON PLC串口通信[J].工业仪表与自动化装置,2010,1.

串口通信实验报告 篇9

伪随机序列产生实验

一、实验目的

给实验箱加电,通过键盘和液晶选择“菜单”中的“一.伪随机序列产生”

二、实验内容

1.m序列产生实验

在伪随机序列产生中选择“1.m序列产生”(1)(2)在测试点TP201测试数据输出的时钟;

在测试点TP202测试输出的周期为15的m序列码。CH1连接到TP201;CH2连接到TP202; 按下示波器的“AUTO”键;

分别将CH1和CH2的电压档设为“2.0V”,时间档设为“100us”; 将CH1向移动,CH2向下移动。按“RUN/STOP”键停止波形采样。

和CH1始终波形对照,CH2波形从最宽的高电平开始读取,15位的m序列码测量操作与测量结果:

(1)(2)(3)(4)(5)(6)

为:***,如图1-1-TP202。

图1-1-TP202 2.GOLD序列产生实验

在伪随机序列产生中选择“2.GOLD序列产生”

(3)(4)(5)在测试点TP201测试数据输出的时钟;

在测试点TP202、TP203测试用于产生GOLD序列的周期为31的m序列优选; 在TP204测试输出的周期为31的Gold序列码。CH1连接到TP201;CH2连接到TP202; 按下示波器的“AUTO”键;

分别将CH1和CH2的电压档设为“2.0V”,时间档设为“200us”; 将CH1向移动,CH2向下移动。按“RUN/STOP”键停止波形采样。

时间档设为“100us”,和CH1始终波形对照,CH2波形从最宽的高电平开始读测量操作与测量结果:

(1)

(2)(3)(4)(5)(6)

取,m序列优选:******0,如图1-2-TP202:

图1-2-TP202 CH2连接到TP203,同样可以测得另一组m序列优选为:******0,如图1-2-TP203;(7)

三、实验小结

实验二

直扩编解码(DS)实验

一、实验内容

(1)(2)(3)(4)(5)(6)(7)通过键盘和液晶选择实验“1.直扩编解码”; 从观测点TP201观测时钟信号; 从测试点TP202观测发送数据的波形; 从TP203观测扩频PN码的波形; 从TP204观测扩频后的数据波形; 从TP205观测解扩出来的数据; 从TP206观测解扩方的PN码。

CH1连接到TP202;CH2连接到TP205; 按下示波器的“AUTO”键;

分别将CH1和CH2的电压档设为“2.0V”,时间档设为“500us”; 将CH1向移动,CH2向下移动。按“RUN/STOP”键停止波形采样。

CH1为原始数据波形,CH2为解扩数据波形。比较可以看出:CH2波形除了时测量操作与测量结果:

(1)(2)(3)(4)(5)(6)

间上有一定延迟外(约300us),形状和CH1波形完全一致,这说明CH2解扩数据和CH1数据完全一致。如图3-1-TP202~ TP205

图3-1-TP202~TP205 注意:TP202的原始数据在随机变化,所以TP202的波形和TP205的波形始终在变化。因此实际测的波形和图3-1-TP202~TP205的波形可能不一致,但CH2波形除了时间上有一定延迟外,形状和CH1波形完全一致。

(7)CH1连接到TP203,CH2连接到TP206,电压档设置保持为“2.0V”,时间档设为“100us”。同样可以测得扩频PN码波形和接收PN码的波形完全一致。如图3-1-TP203~ TP206

图3-1-TP203~TP206 CH1连接到TP201,CH2连接到TP203,电压档设置保持为“2.0V”,时间档设为“50us”。可以观测时钟和扩频PN码波形,比较时钟可以读出扩频PN码数据为:***0。如图3-1-TP201~ TP203(8)

图3-1-TP201~TP203(9)CH1连接到TP203,CH2连接到TP204,电压档设置保持为“2.0V”,时间档设为“100us”。可以观测扩频PN码波形和扩频后的数据波形。如图3-1-TP203~ TP204

图3-1-TP203~TP204 注意:TP202的原始数据在随机变化,因此TP204的扩频波形可能和上面波形不一致。

实验三 BPSK调制解调

一、实验目的

通过键盘和液晶选择“1 BPSK”。(1)(2)(3)

二、实验内容

测量操作与测量结果: 在测试点TP202测试发送方数据; 在测试点TP308测试BPSK调制后的波形; 在测试点TP204测试解调后的数据波形。

(1)(2)(3)(4)(5)(6)CH1连接到TP202;CH2连接到TP308; 按下示波器的“AUTO”键;

分别将CH1和CH2的电压档设为“2.0V”,时间档设为“200us”; 将CH1向移动,CH2向下移动。按“RUN/STOP”键停止波形采样。

CH1为原始数据波形,CH2为BPSK调制后的波形,仔细观察可以原始数据和调制波的对应关系。如图5-1-TP202~ TP308。原始数据1个周期128位。

图5-1-TP202~ TP308(7)CH1连接到TP202,CH2连接到TP204,电压档设置保持为“2.0V”,时间档设为“500us”。CH1为原始数据波形,CH2为解调数据波形。注意:TP202的原始数据在随机变化,所以TP202的波形和TP204的波形始终在变化。因此实际测的波形和图5-1-TP202~TP204的波形可能不一致,但CH2波形除了时间上有一定延迟外(约300us),形状和CH1波形完全一致。如图5-1-TP202~ TP204

三、实验小结

实验四 GSM/GPRS 接入实验

一、实验目的 1.理解GSM/GPRS相关的AT命令集。2.了解主机通过GSM/GPRS模块访问有线网的配置流程。3.了解如何通过GSM/GPRS模块让设备终端之间建立TCP连接以传输用户数据。4.理解短消息协议。5.理解GSM/GPRS信令流程。

二、实验内容 1.硬件连接。2.配置无线模块。3.配置主机。4.网络服务。5.AT命令。6.GSM/GPRS信令仿真。

三、实验环境

1、系统环境

2、硬件环境

每个实验组配置2套设备,每套设备硬件由一台计算机、一个SEMIT TTP 6606硬件模块(已配置开通GPRS业务的SIM卡)、一根串口电缆、一副耳机话筒、一个稳压电源组成。

注意:本软件系统需要移动网络的支持,实验所在地的移动网络需要支持GPRS业务并且用户已申请开通。在网络资源不够或者信号很差的情况下,实验也有可能无法正常进行。(由于软件界面显示的信息较多,本软件必须在1024*768以上的分辨率下运行)

3、软件环境

Windows2000 Professional操作系统。操作系统中已配置TCP/IP协议栈。

五、实验步骤

1、配置主机和GSM/GPRS硬件模块

1)用串口电缆将SEMIT TTP 6606和计算机串口相连,接通稳压直流电源,打开开关。(注意保证天线接触良好,切忌带电插拔串口电缆)2)配置无线模块(此时串口应处于打开状态)(1)初始化串口

(2)点击界面上的“附着GPRS”按钮,显示附着成功

(3)点击界面上的“配置网络参数”按钮,显示配置网络参数成功(4)点击界面上的“激活场景”按钮,显示激活场景成功 3)配置主机(如串口未关闭,请先关闭串口)

图1 配置界面

(1)安装标准modem驱动

点击 “装载Modem驱动” 弹出界面如图2所示。勾上复选框,选择不检测调制解调器,单击“下一步”。

图2 添加/删除硬件向导

选择“标准33600bps调制解调器”,单击下一步,如图3所示。

图3 选择modem型号

选择将modem驱动装载在与GSM/GPRS模块有物理连接的端口上,单击“下一步”,如图4所示。

图4 选择端口

最后单击“完成”,完成调制解调器的安装。(2)新建GPRS连接

点击 “连接管理”弹出界面如图5所示,分别在其中输入“连接名称”,“用户名”,“密码”(此三项可根据用户需要随意填写),“连接时使用”选择“标准33600bps调制解调器(modem)” 并输入“国家号”和“区号”。“电话号码”中输入“*99***1#”。点击“新建连接”,新建立的连接名将出现在连接列表中。选中连接列表中的连接名,点击“删除连接”将删除选中的连接。

图5 连接管理

(3)拨号建立PPP链路

点击 “网络连接”弹出界面如图6所示,如果你建的连接没出现在列表中,请点击“更新”。在连接列表中选中你所建的连接,点击 “拨号”(拨号前要关毕Semit 6606所用的串口),在状态栏中会显示出拨号的状态。不用连接时点击“挂断”。

图6 PPP拨号

2.网络服务 1)话音服务(1)拨打电话

输入对方电话号码,点击“拨号”按钮进行拨号,拨通后点击“接听”按钮进行通话,通话结束后点击“挂机”按钮结束通话。(2)接听电话

出现来电提示后,点击“接听”按钮进行通话,通话结束后点击“挂机”按钮结束通话。2)短消息服务(1)发送短消息

输入对方手机号点击“确定”按钮,会出现“短信服务中心号码”对话框,填入当地服务中心号码,点击“确定”,并关闭该对话框,如图8所示。

填入短信内容单击“发送”按钮发送,提示栏中会出现短消息发送信息。(2)阅读短消息

输入要读的短消息号,点击“读短信息”按钮,短消息内容或提示信息会出现在信息栏中。(3)删除短消息

输入要删除的短消息号,点击“删除短信”按钮,提示信息会出现在信息栏中。点击“清除”按钮能清空信息栏中所有信息。3)WAP服务

打开WAP浏览器,可通过GPRS浏览WAP网站。(在此之前要配置好,主机和无线模块,并打开连接)4)聊天服务 服务器端配置:

点击“服务器配置”,在“服务器配置”界面中,输入连接端口号,并选择连接方式“TCP”,点击“确定”。如图9所示 客户端配置:

点击“客户端配置”,在“客户端配置”界面中,输入服务器的IP地址和服务器的连接端口号,并选择连接方式“TCP”,点击“确定”。如图10所示。客户端点击“连接”按钮,建立“TCP”连接。

服务器端和客户端可在“聊天内容”中,输入聊天信息,并点击“发送”,发送聊天信息。点击“断开连接”断开TCP连接。

图7 网络服务界面

图8

图9

图10

3.AT命令

在页面左侧输入AT命令,通过AT命令来操作GPRS模块。

前面提到的无线模块配置工作,可在此处通过相应的AT命令来完成。也可通过AT命令来实现短消息服务和话音服务,并从中观察短消息协议和相应的编解码方法。页面右侧有详细的AT命令描述。

图11 AT命令界面

4.GSM/GPRS信令仿真

1)先选中GSM或GPRS仿真 2)再选择所要仿真的信令流程

3)最后选择正确的信令和信道进行仿真 4)右面会相应给出仿真结果

图12 信令仿真界面

串口通信实验报告 篇10

摘要:通过多串口通信技术在金刚石合成控制系统中的应用,讨论了32位Windows操作系统下,VC多串口通信技术的设计与实现方法,并运用面向对象方法和多线程技术设计了一个比较完善的串口通信类。阐述了用VC开发上位机与PLC之间的串口通信程序设计方法和实现技术。

关键词:串口通信;面向对象方法;多线程;PLC

1引言

传统的金刚石合成机控制系统是由一个PLC和一个可显示终端构成。这种传统的控制系统一般具有如下缺点:

(1)系统所有的工作都由PLC完成,其控制精度较差,致使合成的金刚石质量较差;

(2)显示终端的平面尺寸过小,这一方面使得操作人员观察系统的状态很不方便,另一方面?也常常会引起误操作;

(3)金刚石合成工艺复杂,需控制的参数很多,但原控制系统不能对参数进行保存,这样在根据不同产品和工艺要求对部分参数进行调整时,每次都必须重新设置所有的参数,操作非常麻烦;

(4)界面不友好;

(5)不能通过控制系统自动考核操作人员的工作质量。

为了提高控制精度、方便操作,开发新的控制系统迫在眉睫。笔者针对以上问题,将IPC与PLC有机结合在一起,开发了一套新的控制系统。通过该系统可在上位机(IPC)和PLC之间通过RS-232与RS-485进行大量串口通信。

2VC串口通信分析

在32位Windows系统下使用VC开发串口通信程序通常有如下4种方法:

(1)使用Microsoft公司提供的名为MSCOMM的通信控件;

(2)直接使用Windows应用程序接口(API);

(3)自行设计一个串口通信类;

(4)通过开发一个ActiveX控件来实现串口通信功能。

在上述几种方法中,实际上还是使用WindowsAPI函数,然后把串口通信的细节给封装起来,同时提供给用户几个简单的接口函数。上述几种方法各有优缺点,但在实际情况下,大多数编程人员喜欢使用API函数自行设计串口通信类。

用WindowsAPI函数进行串口通信的编程流程如图1所示。其中打开串口是确定串口号与串口的打开方式;初始化串口用于配置通讯的波特率、每字节位数、校验位、停止位和读写超时等;读写串口用于向串口进行发送数据和从串口接收数据;关闭串口用于将串口关闭并释放串口资源(Windows系统下串口是系统资源)。

由于绝大多数控制系统中串口通信是比较费时的,而且监控系统还要进行数据处理和显示等,所以一般采用多线程技术,并用AfxBeginThread函数创建辅助线程来管理串口通信,这样,主进程就能在进行串口读写的同时,处理数据并完成用户指令的响应,但是设计时一定要处理好数据的共享问题。

串口读写既可以选择同步、异步方式,也可以选择查询、定时读写和事件驱动方式。由于同步方式容易造成线程阻塞,所以一般采用异步方式;而查询方式要占用大量的CPU时间,所以一般采用定时读写或者事件驱动方式,事件驱动方式相关文献较多,故此重点讨论定时读写方式。定时读写方式就是上位机向下位机发送固定格式的数据,在下位机收到后向上位机返回状态信息数据。由于数据的传输需要时间,所有上位机发送数据后就调用_sleep()函数进行休眠,休眠的时间可根据需要进行不同的设置。这样,可以节省CPU时间,以使系统能够很好地进行监控工作和处理其它事务。

3VC串口通信的设计与实现

笔者在Windows系统下,采用面向对象的方法和多线程技术,并使用VisualC6.0作为编程工具开发了一个通用串口通信类CSerialPort,该CSerialPort类封装了串口通信的基本数据和方法,下面给出CSerialPort类的简单介绍。

CSerialPort类头文件中的主要成员变量和成员函数如下:

ClassCSerialPort

{

private:

HANDELm_hPort;

DCBm_Dcb;

COMMTIMEOUTSm_TimeOuts;

DWORDm_Error;

Public:

CSerialPort;??//构造函数

virtual~CSerialPort();??//析构函数

//InitPort()函数实现初始化串口

BOOLInitPort(

char*str=“com1”,

UINTBaudRate=9600,

UINTParity=0,

UINTByteSize=8,

UINTStopBits=1,

UINTReadMultiplier=0,

UINTReadConstant=0,

UINTWriteMultiplier=10,

UINTWriteConstant=1000);

DCBGetDCB();?//获得DCB参数

//SetDCB()函数实现设置DCB参数

BOOLSetDCB(

UINTBaudRate=9600,

UINTParity=0,

UNITByteSize=8,

UINTStopBits=1);

//GetTimeOuts()函数获得超时参数

COMMTIMEOUTSGetTimeOuts();

//SetTimeOuts()函数设置超时参数

BOOLSetTimeOuts(

UINTReadMultiplier=0,

UINTReadConstant=0,

UINTWriteMultiplier=10,

UINTWriteConstant=1000);

//WritePort()函数实现写串口操作

voidWritePort(HANDLEport,CString);

CStringReadPort(HANDLEport);//读串口操作

BOOLClosePort();?//关闭串口

};

下面对该类的重要函数作以说明:

(1)在构造函数CSerialPort()中已对该类的数据成员进行了初始化操作。

(2)初始化串口函数InitPort()函数用于完成串口的初始化工作,包括打开串口、设置DCB参数、设置通信的超时时间等。

打开串口使用CreateFile()函数,其中InitPort()函数中的第一个参数为要打开的串口,通常将该参数赋给CreateFile()函数中的第一个参数;设置DCB参数应调用该类中的SetDCB()函数,并将InitPort()函数中的第2至第5参数赋给SetDCB()函数;设置通信的超时时间应调用该类中的SetTimeOuts()函数,并将InitPort()函数中的第6至第9参数赋给SetTimeOuts()函数。另外,该串口是系统资源,应该根据不同要求对其安全属性进行设置。

(3)SetDCB()函数用于设置DCB参数,包括传输的波特率、是否进行奇偶校验、每字节长度以及停止位等。

(4)SetTimeOuts()函数用于设定访问的超时值,根据设置的值可以计算出总的超时间隔。前面两个参数用来设置读操作总的超时值,后面两个参数用来设置写操作总的超时值。

(5)WritePort()函数用来完成向串口写数据。由于该系统需要对多个串口进行通信,所以首先应把串口号作为参数传递给该函数;接着该函数把按参数传递过来的、要发送的数据进行编码(也就是加入校验,这样能减少误码率),然后再调用WindowsAPI函数WriteFile()并把数据发送到串口。

(6)ReadPort()函数用来完成从串口读数据,由于有多个串口,所以应把串口作为参数传递进来,然后调用API函数ReadFile(),并把下位机发送到串口,数据读出来放到缓存里面,接着对数据进行处理以将其变换成字符串

(CString)类型并返回。

(7)GetDCB()函数主要用于获得串口的当前配置,可通过调用API函数GetCommState()来实现,然后再进行相应的处理。

(8)GetTimeOuts()函数用于获得访问超时值。

(9)ClosePort()函数可用来关闭串口。因为在Windows系统中串口是系统资源,因而在不用时,应将其释放掉,以便于其它进程对该资源的使用。

4基于串口通信的金刚石合成控制

金刚石合成控制系统采用主从式控制方式,上位机为微机、下位机为PLC。上位机的主要功能是对系统进行实时监控,下位机的主要功能是对系统进行实时控制。上位机采用Windows98操作系统,其监控程序可用VC开发,上、下位机之间通过RS-232与RS-485串口进行通信,它们之间采用的通信波特率为9600bps,无奇偶校验,每字节8位,并有1位停止位。上、下位机之间传送的数据格式可自己定义。由于传输数据时可能会引起错误,所以加入了校验算法。该系统通过上位机向下位机发送数据,下位机收到后就把当前系统的状态参数返回给上位机。由于该系统中所控制的参数具有迟滞性,所以应采用定时发送数据的方法来采集现场状态信息。

上位机编程时,可用VC6.0生成一个对话框类型的`程序框架,然后将自己编写的CSerialPort类加入到该工程中,并在主界面类?CCrystal?中添加一个CSerialPort类的成员变量serial。当监控系统开始工作时,可用AfxBeginThread??函数创建辅助线程来管理串口通信,当调用CSerialPort类中的WritePort??函数向串口发送数据后,可调用_sleep??函数使辅助线程休眠一段时间,以便使PLC有充分的时间返回数据;接着再调用CSerialPort类中的ReadPort()函数并从串口读数据,然后再调用_sleep()函数使辅助线程再休眠一定的时间。这样设计后,当进行串口通信时,主线程就能继续完成监控功能和处理其他事务。辅助线程函数的主要代码如下:

UINTSerialPro(void*param)

{

Ccrystal*mdlg=(Ccrystal*)param?

CStringstr;

intflag=1;

//如果初始化串口失败返回

if(!InitPort(“com2”))

{AfxMessageBox(“打开串口2失败”);

return0;

}

//循环读写串口,直到结束

while(flag)

{

//这里把要发送的数据传送给变量str

……

//向串口写数据

mdlg->serial.WritePort(hport,str);

//让辅助线程休眠100ms

_sleep(100);

//从串口读数据并赋给变量str

str=mdlg->serial.ReadPort(hport);

//这里把从串口得到的数据进行处理

……

5结束语

上一篇:企业军训的心得下一篇:体温单漏项的原因分析