求教使用C#serialPort串口控件打开一个硬件串口在关闭之后的问题

591320277 2016-06-11 08:24:57
在使用C#serialPort制作的串口调试器过程中发现的问题,希望能够描述清楚也希望有人能知道为什么会这样,
假设使用C#串口调试助手打开COM1之后再关闭com1之后直接使用com1口为单片机写程序,这样问题就来了,
只是能够正常打开串口但是却永远显示等待单片机响应,只有拔掉USB串口再重插或者使用网上下载的串口调试助手重新打开一次COM1在关闭才可以给单片机写入程序,不知道是什么问题,补充说明下如果不给单片机写程序的话只是使用串口测试收发那一切都正常,无论怎么打开关闭再打开都可以收发数据,
个人水平有限不知道为什么只是感觉上是C#serialPort控件打开再关闭之后没有彻底释放资源还有占用,我能想到的关闭方法只有下面这些了 试过关闭代码如下:
serialPort1n.Close();
serialPort1n.Dispose();
GC.Collect();
GC.WaitForPendingFinalizers();
只是仍然是有问题,实际试了从网上下载的串口调试助手就没有我说的这个问题,下面是我打开串口的代码了:
serialPort1n.Open();
if (serialPort1n.IsOpen)
{
}
最后补充一句就是我想请教各位大神的问题就是C# serialPort打开后应该怎样关闭才能不出现我说的问题
...全文
1117 15 打赏 收藏 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
墙角无名氏 2016-12-27
  • 打赏
  • 举报
回复
我发现 使用CreateFile来打开串口,再关闭就OK,使用SerialPort,打开串口再关闭就不行了
墙角无名氏 2016-12-27
  • 打赏
  • 举报
回复
楼主,我也遇到你的问题,你是怎么解决的?
zmidl 2016-12-09
  • 打赏
  • 举报
回复
引用 12 楼 zmidl 的回复:
[quote=引用 11 楼 Saleayas 的回复:] C# 的 SerialPort 的 Close 仅仅是关闭内部流。 而且她不立即关闭端口的。 文档上说需要等待一会儿再 Open。
我也遇到相同的问题,我打开一个COM7然后关闭这个COM7再用串口助手打开这个COM7的话就提示 该串口被占用 不知道如何才能释放这个串口。[/quote] 问题是我的串口根本没有关闭 当串口关闭后 没有发生被占用的情况。
zmidl 2016-12-06
  • 打赏
  • 举报
回复
引用 11 楼 Saleayas 的回复:
C# 的 SerialPort 的 Close 仅仅是关闭内部流。 而且她不立即关闭端口的。 文档上说需要等待一会儿再 Open。
我也遇到相同的问题,我打开一个COM7然后关闭这个COM7再用串口助手打开这个COM7的话就提示 该串口被占用 不知道如何才能释放这个串口。
雪狼孤竹 2016-06-16
  • 打赏
  • 举报
回复
个人感觉,不像是关闭串口的问题。 你的串口设备,是否是正常的? 你说你只有在对设备进行处理后,才会导致串口的占用。 那你就找你对设备处理时候的程序都做了什么?与设备的协议是否都正常?
Saleayas 2016-06-16
  • 打赏
  • 举报
回复
C# 的 SerialPort 的 Close 仅仅是关闭内部流。 而且她不立即关闭端口的。 文档上说需要等待一会儿再 Open。
龍过鸡年 2016-06-15
  • 打赏
  • 举报
回复
引用 7 楼 tys591320 的回复:
[quote=引用 5 楼 龍过鸡年的回复:]其实,只要程序运行,serialport 根本不需要关闭, 也就是说 sp open 以后,直接把连接设备拔掉,再插上,直接就能通信 你出现的情况,可能是因为写完程序之后,连接设备端的信号出现异常导致的 你试试,不要关闭 sp 直接插拔设备,看看能不能继续通信
拔掉再插肯定好使了 但是问题就是用网上下载的串口助手不拔也好使 自制的必须拔掉 或者使用网上下载的助手打开一次 所以问题一定在程序上 还是我未知的想不到的地方[/quote] 你的关闭方式是不是用的 Close() 如果是的话,你下次再打开,直接 new 一个,不要 Open()
拜一刀 2016-06-15
  • 打赏
  • 举报
回复
没遇到过,我只知道用.net的串口类打开串口然后直接拔下usb再插会很蛋疼
591320277 2016-06-15
  • 打赏
  • 举报
回复
引用 5 楼 龍过鸡年的回复:
其实,只要程序运行,serialport 根本不需要关闭, 也就是说 sp open 以后,直接把连接设备拔掉,再插上,直接就能通信 你出现的情况,可能是因为写完程序之后,连接设备端的信号出现异常导致的 你试试,不要关闭 sp 直接插拔设备,看看能不能继续通信
拔掉再插肯定好使了 但是问题就是用网上下载的串口助手不拔也好使 自制的必须拔掉 或者使用网上下载的助手打开一次 所以问题一定在程序上 还是我未知的想不到的地方
591320277 2016-06-15
  • 打赏
  • 举报
回复
看来还是我没说明白 问题现象 问题现象是 假设使用我用c#制作的调试助手打开com1 之后再关闭com1,之后在不拔出usb串口的情况下 直接使用com1就会出现我说的问题 说明下因为使用的是单片机开发版 所以usb串口和单片机再同一块板子上,写完这个回复突然之间想到了一种可能性需要试试
龍过鸡年 2016-06-15
  • 打赏
  • 举报
回复
其实,只要程序运行,serialport 根本不需要关闭, 也就是说 sp open 以后,直接把连接设备拔掉,再插上,直接就能通信 你出现的情况,可能是因为写完程序之后,连接设备端的信号出现异常导致的 你试试,不要关闭 sp 直接插拔设备,看看能不能继续通信
human_2000 2016-06-15
  • 打赏
  • 举报
回复
不会吧,你简单写个程序试试,关闭了应该是释放资源了的
591320277 2016-06-14
  • 打赏
  • 举报
回复
引用 1 楼 以专业开发人员为伍的回复:
不管底层有没有抛出事件(或者你根本没有捕获事件),你都可以从高层设计一个心跳机制,来真正检测所有你需要检测的状态。例如你可以每隔10秒钟轮询一次注册的所有设备,对于那些超时未响应的设备以后就不再做请求,如过所有设备都没有响应则可以关闭串口了。
说的有点道理 我只想解决实际问题 又或者为什么会有问题 很希望知道为什么缺又根本无思路 这就是菜鸟的悲哀了
  • 打赏
  • 举报
回复
不要纠缠“怎样关闭”这类低级的技术问题。网络本来就是时断时通的,如果对方没有“关闭”而只是“死掉”了,你又如何处理?
  • 打赏
  • 举报
回复
不管底层有没有抛出事件(或者你根本没有捕获事件),你都可以从高层设计一个心跳机制,来真正检测所有你需要检测的状态。例如你可以每隔10秒钟轮询一次注册的所有设备,对于那些超时未响应的设备以后就不再做请求,如过所有设备都没有响应则可以关闭串口了。
内容概要:本文聚焦于“基于中间电容应力分担机制的三阶立方体双向DC-DC变换器”的建模与优化设计,系统阐述其在dq域下的动态建模方法与控制策略优化,涵盖变频与移相协同控制、高电压增益实现、降频软启动、多模式平滑切换等核心技术。结合Matlab、Simulink及PSCAD仿真平台,深入实现全桥LLC、双三相LLC等谐振变换器的混合控制与动态响应分析,并拓展至飞轮储能系统、混合储能平抑风电波动、直流母线电压稳定控制等实际应用场景,构建了从器件级建模到系统级集成的完整仿真体系。同时包含多项高水平期刊论文的复现内容,强化科研可重复性与工程实用性。; 适合人群:电力电子、电气工程及其自动化等相关专业的研究生、科研人员及从事新能源发电、储能系统、电动汽车、智能电网等领域研发的工程技术人员;具备电路拓扑分析、控制系统设计及仿真基础者更佳。; 使用场景及目标:①掌握高频双向DC-DC变换器的精确建模与先进控制方法;②复现并验证权威期刊论文中的关键仿真案例,提升科研创新能力与仿真技术水平;③应用于储能系统能量管理、新能源并网调控、电动汽车充放电模块等高性能电源变换系统的优化设计与动态性能分析。; 阅读建议:建议按照文档目录结构循序渐进学习,优先理解主拓扑的工作原理与控制逻辑,结合所提供的仿真模型进行实操复现,重点关注不同工况下的动态响应、稳定性边界及模式切换过程,深化对电力电子系统协同控制与多时间尺度动态特性的理解。
内容概要:本文系统研究了基于序贯蒙特卡洛模拟法的配电网可靠性评估方法,并通过Matlab代码实现了算法的仿真与复现。文章深入阐述了该方法在电力系统可靠性分析中的理论基础,通过模拟电力元件的故障与修复过程的时间序列,对配电网的关键可靠性指标(如系统平均停电频率SAIFI、平均停电持续时间SAIDI等)进行精确统计评估。研究结合IEEE标准测试系统,详细展示了状态转移抽样、时序仿真流程设计及可靠性指标计算等关键技术环节的实现方法。该方法能够有效处理复杂配电网络中元件的随机性、相关性与时序特性,为电网的规划、运行维护及风险评估提供了科学、可靠的决策依据。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及从事电力系统可靠性分析的工程技术人员。; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在配电网可靠性评估中的应用原理与实现技巧;②学习如何通过时序仿真评估SAIFI、SAIDI等核心可靠性指标;③为电网规划、故障风险分析和运维策略制定提供量化分析工具; 阅读建议:此资源以Matlab代码为核心载体,强调理论与实践的紧密结合,建议读者在学习过程中仔细研读算法原理,动手运行并调试所提供的代码,深入理解状态抽样、时序推进和指标统计的每一个细节,以达到融会贯通的目的。

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧