RS-232-C串行端口监控软件的程序实现

RS-232 通信程序设计 代码改自:https://msdn.microsoft.com/zh-cn/library/system.io.ports.serialport using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 阅读详情
RS-232-C串行端口监控软件的程序实现

  (一) 界面风格

  由于是实时监控软件,那就既要监测从外设传来的实时数据,又要通过串口向外设发送一些具体的指令以控制外设完成预先设定的动作。为了方便向串口发送命令可以在工具条上再加一个类似于"Internet Explorer 浏览器"风格的对话条,可以在初建工程时指定"Internet Explorer ReBars"风格,也可以通过添加Microsoft Visual C++ 6.0自带的"Dialog Bar"组件来实现。而要及时将从外部读取的数据显示给管理人员,并且留有相当记录以备查阅,可以选择列表视图来实现。

  (二) 串口的参数设置及打开 

  对RS-232-C串行端口进行参数配置是使用串口进行通讯的必要条件。而且由于场合不同、用途、功能的不同对串口也采取不同的配置方式,为了使本程序更灵活,适应面更广,采取将所有的可能参数都预先设置在几个组合框中,可以在程序运行后随时更改设置。自定义一个设置串口参数的数据结构:

typedef struct tagCOM_CONFIG
{
int nPort; file://端口号,从COM1到COM4
int nBaud; file://波特率,从1200bps到57600bps(对应的宏为CBR_1200到CBR_57600)
int nData; file://数据位个数,7位或是8位
int nStop; file://停止位个数,可以是1位、1.5位、2位。
int nParity;//采取的校验方式,有无校验(NOPARITY)、
file://奇校验(ODDPARITY)和偶校验(EVENPARITY)等。
}COM_CONFIG; 

  当选择好适当的参数后就可以根据设置好的端口配置情况打开通讯端口了。与以往DOS下串行通信程序不同的是,Windows操作平台下不提倡应用程序直接控制硬件(包括端口),也不让使用中断(除非打入到Ring0系统级),而是通过Windows操作系统提供的设备驱动程序来进行数据传递。在Windows操作系统下串行口和其他通讯端口一样是作为文件来进行处理的,而不是直接对端口进行操作,对于串行通信,Win 32 提供了相应的文件I/O函数与通信函数,通过了解这些函数的使用,可以编制出符合不同需要的通信程序。与通信设备相关的结构有COMMCONFIG ,COMMPROP,COMMTIMEOUTS,COMSTAT,DCB,MODEMDEVCAPS,MODEMSETTINGS共7个,与通信有关的Windows API函数共有26个,具体说明可参考MSDN帮助文件。下面是打开串口的部分关键代码:

//以创建文件的形式打开文件,并将返回的端口句柄保存于句柄idComDev之中。
idComDev =CreateFile( g_szCom_Port[g_com_config.nPort], 
GENERIC_READ | GENERIC_WRITE,
0, 
NULL, 
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL ); 
…… 
file://cfg为COMMCONFIG结构的实例对象,获取当前通讯口的状态。
cfg.dcb.DCBlength = sizeof( DCB ) ;
GetCommState( idComDev, &(cfg.dcb) ) ;
file://设置发送、接收缓存大小
SetupComm( idComDev, 4096, 4096 ) ;
// PurgeComm()是一个清除函数,它可以用来中止任何未决的后台读或写,并且可以冲掉I/O
file://缓冲区.其中:PURGE_TXABORT 用于中止后台写操作;PRUGE_RXABORT用于中止后台
file://读操作 ;PRUGE_TXCLEAR用于清除发送缓冲区;PRUGE_RXCLEAR用于清除接收缓冲区
PurgeComm(idComDev,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
file://根据设置的参数填充DCB结构对象dcb的各个数据成员变量
dcb.DCBlength = sizeof( DCB ) ;
GetCommState( idComDev, &dcb ) ;
file://设置端口通讯参数
dcb.BaudRate =g_Com_Baud[g_com_config.nBaud];
dcb.ByteSize =g_Com_ByteSize[g_com_config.nData];
dcb.Parity =g_Com_Parity[g_com_config.nParity] ;
dcb.StopBits =g_Com_StopBits[g_com_config.nStop];
file://硬件流控制
dcb.fDtrControl = DTR_CONTROL_DISABLE ;
dcb.fOutxCtsFlow = FALSE ;
dcb.fRtsControl = RTS_CONTROL_DISABLE ;
file://软件流控制
dcb.fInX = dcb.fOutX = FALSE ;
dcb.XonChar = (char)0xFF ;
dcb.XoffChar = (char)0XFF ;
dcb.XonLim = 100 ;
dcb.XoffLim = 100 ;
dcb.EvtChar=0x0d;
dcb.fBinary = TRUE ;
dcb.fParity = TRUE ;

file://超时控制的设置。超时有两种:区间超时:(仅对从端口中读取数据有用)它指定在读取两个字符之间要经历的时间;总超时: 当读或写特定的字节数需要的总时间超过某一阈值时,超时触发。计算超时可以根据公式:
file://ReadTotalTimeout = (ReadTotalTimeoutMultiplier * bytes_to_read)+ 
// ReadToTaltimeoutConstant
file://WriteTotalTimeout = (WriteTotalTimeoutMuliplier * bytes_to_write)+ 
// WritetoTotalTimeoutConstant
file://如果在设置超时时参数为0则为无限等待,即无超时。
CommTimeOuts.ReadIntervalTimeout =MAXDWORD;
CommTimeOuts.ReadTotalTimeoutMultiplier =0;
CommTimeOuts.ReadTotalTimeoutConstant = 0 ;
CommTimeOuts.WriteTotalTimeoutMultiplier =2*9600/dcb.BaudRate ;
CommTimeOuts.WriteTotalTimeoutConstant = 25 ;
SetCommTimeouts(idComDev , &CommTimeOuts ) ;
file://根据设置好的dcb结构设置好通讯口的状态,并开启用于侦听端口,监视从外设传来的数
file://据的线程COMReadThreadProc。
if (SetCommState( idComDev, &dcb ))
{
m_bComPortOpen=TRUE;
g_hCom=idComDev;
AfxBeginThread(COMReadThreadProc,NULL,THREAD_PRIORITY_NORMAL);
return;
RS-232-C端口实时监控软件的设计实现[VC++6] 作者:郎锐 更新时间: 2005-05-07       摘要:    本文介绍了在Microsoft Visual C++ 6.0环境下对RS-232-C串行端口进行编程,以及对后台监控程序所普遍涉及到的无阻塞后台运行、数据的实时接收和处理等问题的解决方法。    一、 引言    在实验室和工业应用中,受信道成本限制,串口常常作为计算机与外部串行设备之间的首选数据传输通道,而且由于串行通信方便 阅读详情

相关推荐

MC68HC11EVB开发板硬件架构与BUFFALO监控程序深度解析

在嵌入式系统开发中,微控制器评估板是连接硬件设计与软件调试的关键平台。其核心原理在于通过扩展总线与监控程序,为开发者提供可控的仿真与调试环境。这种技术方案的价值在于能够显著降低早期嵌入式开发的硬件门槛,实现高效的软硬件协同验证。经典应用场景包括8位/16位微控制器系统的原型开发、教学实验以及遗留系统的维护升级。本文聚焦于Motorola MC68HC11EVB这款经典开发板,深入剖析其通过MC68HC24端口替换单元(PRU)实现扩展模式下的I/O端口仿真,以及集成BUFFALO监控程序构建完整命令行调试生

ozzzzzz的专栏 461

[转][转]RS-232-C串行端口监控软件程序实现

三、 RS-232-C串行端口监控软件程序实现  (一) 界面风格  由于是实时监控软件,那就既要监测从外设传来的实时数据,又要通过串口向外设发送一些具体的指令以控制外设完成预先设定的动作。为了方便向串口发送命令可以在工具条上再加一个类似于"Internet Explorer 浏览器"风格的对话条,可以在初建工程时指定"Internet Explorer ReBars"风格,也可以通过添加Mic

2354

高效串口监控工具使用与实践

串口通信是一种常见的设备间通信方式,其全称为串行通信。在计算机系统中,串口主要用于与外部设备的通信,如打印机、调制解调器(Modem)等。由于其使用简单,成本低廉,加之多样的传输距离和速度,串口在工业控制、数据采集和通信领域中有着广泛的应用。串口监控软件是一类专业的计算机程序,用于监视和管理通过串行端口进行的数据通信。这些软件通常被用来调试串行设备,比如调制解调器、打印机、嵌入式系统以及其他串口设备。通过实时监控数据流,它们帮助开发者或IT支持人员检测数据传输的错误、异常情况或性能瓶颈。

weixin_30838971的博客 444

RS-232-C端口实时监控软件的设计实现

文章标题:RS-232-C端口实时监控软件的设计实现原 作 者:郎锐原 出 处:天极网发 布 者:loose_went发布类型:转载  摘要:   本文介绍了在Microsoft Visual C++ 6.0环境下对RS-232-C串行端口进行编程,以及对后台监控程序所普遍涉及到的无阻塞后台运行、数据的实时接收和处理等问题的解决方法。   一、 引言   在实验室和工业应用中,受信道成本限制,串口

老杨的专栏 1734

串行通信接口RS-232C

1、机械特性 RS-232C规定选择DB25结构作为其连接器。DB25由一个25针的插头和一个25孔的插座组成。通常,RTU(数据终端设备)采用DB25针式插头,Modem(数据电路端设备)采用DB25孔式插座。 2、电气特性 RS-232C接口采用负逻辑工作,即逻辑“1”用负电平(-5~-15V)表示;逻辑“0”用正电平(+5~15V)表示。通常使用时,其门限电平是正负3V,因此许多RS-

qq_35535992的博客 2496

转: RS-232-C端口实时监控软件的设计实现

RS-232-C端口实时监控软件的设计实现 2002-03-06· ·郎锐 ··来自yesky

panqy82的专栏 818

VC实现串行通信的动态链接库(DLL)

本文以实例方式介绍了用VC++编写DLL实现串行通信的方法,并给出了用其它语言调用该DLL的范例。虽然关于串口编程的资料很多,但由于工程上需求多种多样,需要根据不同的条件对串口进行灵活控制,在实际应用中,常用的方法有:(1)用汇编或标准通讯函数,往指定端口直接读写数据;(2)利用Visual Studio提供的MSComm控件;(3)使用Windows提供的API函数。本文用A

1519

VC++串口通讯程序

   WIN95界面下的VC++串口通讯程序在WIN32下是不建议对端口进行操作的,在WIN32中所有的设备都被看成是文件,串行口也不例外也是作为文件来进行处理的。这是我的一份关于串口编程的读书笔记,对于使 用VC进行编程的同行应该有一定的帮助。  1.打开串口:     在Window 95下串行口作为文件处理,使用文件操作对串行口进行处理。使用CreateFile()打开串口,CreateFi

1491

串口通信的基本概念

1,什么是串口? 2,什么是RS-232? 3,什么是RS-422? 4,什么是RS-485? 5,什么是握手? 1,什么是串口? 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal Serial Bus或者USB混淆)。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也

1342

多线程技术在VC++串口通信程序中的应用研究

  1 概述  在现代的各种实时监控系统和通信系统中,在Windows 9X/NT下利用VC++对RS-232串口编程是常用的手段。Windows 9X/NT是抢先式的多任务操作系统,程序对CPU的占用时间由系统决定。多任务指的是系统可以同时运行多个进程,每个进程又可以同时执行多个线程。进程是应用程序的运行实例,拥有自己的地址空间。每个进程拥有一个主线程, 同时还可以建立其他的线程。线程是操作系统

929

串行通信的基本原理及用MFC实现串口通信编程

             在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题。计算机和单片机(如MCS-51)都具有串行通信口,可以设计相应的串口通信程序,完成二者之间的数据通信任务。  实际工作中利用串口完成通信任务的时候非常之多。已有一些文章介绍串口编程的文章在计算机杂志上发表。但总的感觉说来不太全面,特别是介绍32位下编程的更少,且很不详细。笔者在实

810

串口一例

请教如何用pc104实现波特率为115200,端口为com2程序,要求用tc3。0,实施同步数据接受、显示和保存为文件。急!谢谢我用bc3.1试过的。#include   #include   #include   #include   #include   #define   RXD   0#define   TXD   0#define   LSB   0#define   MSB   1

778

VC++ 的串口通讯

在VC++中有两种方法可以进行串口通讯。一种是利用Microsoft公司提供的ActiveX控件 Microsoft Communications Control。另一种是直接用VC++访问串口。下面将简述这两种方法。  一、Microsoft Communications Control  Microsoft公司在WINDOWS中提供了一个串口通讯控件,用它,我们可以很简单的利用串口进行通讯。在

745

基于SpringBoot+Vue校园失物招领系统的设计与实现

校园失物招领系统的设计与实现前端采用了Vue框架,并结合ElementUI来实现界面的设计与布局。后端采用了SpringBoot框架进行开发设计,并结合了Java语言和MySQL数据库来实现。在功能上分为了前端用户模块和管理员模块。前端用户模块主要实现了招领物品信息的发布、查询与管理,失物信息的发布、管理以及自动匹配招领物品,查看校园相关通知公告。管理员模块主要实现了物品分类管理、校园通知管理以及物品招领信息的查询统计等功能。校园失物招领系统的实现优化失物招领的流程,提高了校园失物招领的效率,促进了校园文化的建设,营造了良好的诚信氛围。

上一篇: VC实现串行通信的动态链接库(DLL)
下一篇: 二叉树遍历
manplus
博客等级 码龄22年 6粉丝 160原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值