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

老杨的专栏 1734

ObservableList

普通的List是“数据容器”,而是“数据源 + 广播电台”。添加的功能:监听器、精准变更报告、原子替换、实时过滤/排序视图。本质区别普通List是被动的(你问它才给)。是主动的(它变了就立刻告诉你,并且告诉你“哪里变了、怎么变的”)。正是因为它具备了这种“主动广播”的能力,JavaFX 才能实现数据驱动 UI的响应式编程模型。你之前在ComboBox源码中看到的监听器,正是依赖的机制才得以生效的。

qq_24992377的博客 329

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

890

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

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

panqy82的专栏 818

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

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

weixin_30838971的博客 444

知识库的构建 [ 3 ]

先按主题或段落初步划分,再对超长块递归细分,直至满足大小限制。递归分块融合了结构化与非结构化处理逻辑,与固定大小的分块不同,这种方法保持了语言的自然流畅性并保留了完整的内容语义。

Small_entreprene的博客 360

使用easyexcel导出数据

使用EasyExcel 2.1.4实现自定义监听器,校验表头(去除换行空格)及数据行:换实体,检查组合代码/类型、计划类型非空且合法,收集错误信息,返回有效数据列表。

feng_huilu_zhuan的博客 203

C语言实现带头双向循环链表

本人的技术笔记会优先发布在个人站点。

2501_93598028的博客 258

06-05-排序集合-综合对比-SortedSet-vs-SortedDictionary-vs-SortedList选型

<think>我们根据要求,生成一篇不超过150字的文章摘要。内容是关于SortedSet、SortedDictionary与SortedList的选择指南。需要提取核心要点:根据语义选择类型,树型与数组型实现差异,注意比较器、可变键、性能与内存,以及实验验证。摘要应精炼。</think>摘要:比较SortedSet、SortedDictionary与SortedList,应优先按语义选择:唯一元素用Set,键值映射按更新模式选Dictionary或List,后者支持位置索引。注意比

设计 AI 玩游戏🎮 727

Kubernetes 认证和授权:从身份认证到权限控制实战

创建 clusterrole 名称 cluster-pod-deploy-reader,能够查看pod和deployment赋予给 shaka 用户shaka 用户在 auth 命名空间中:查看pod、deploymentshaka 用户在 kube-system 命名空间中:查看pod、deployment删除集群角色绑定和集群角色Service Account,即服务账户,pod 使用 Service Account 身份运行容器。

2603_94950994的博客 221

苍穹批量下载附件

this.getView().showTipNotification("批量附件下载失败,请联系管理员");logger.error("批量下载失败", ex);String zipName = "批量下载附件.zip";//将批量下载附件上传到临时文件系统。1、设置批量附件文件信息。

yylyell的专栏 169

Guava——集合(一)

它解决了原生 Java 中 Map<K, List> 或 Map<K, Set> 维护繁琐的问题(如手动初始化集合、判空、移除元素等),将一个键对应多个值的逻辑封装为统一且简洁的接口。com.google.common.collect.BiMap 是 Guava 提供的双向映射(Bi-directional Map)接口。它继承自 Java 标准的 java.util.Map,核心特点是保证 键(Key)和值(Value)的双向唯一性。

吴声子夜歌的博客 349

MyBatis‑Plus Service 层常用自带方法

MyBatis‑Plus Service 层常用自带方法

pig_ning的博客 384
上一篇: [转][转]C++开源跨平台类库
下一篇: [转][转]__cdecl,__fastcall, __stdcall 什么区别
zeroless
博客等级 码龄22年 11粉丝 24原创
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值