C# 关于COm1口的问题(或者是串口)在线等,来着有分!来者不拒。

美丽大道 2010-04-22 10:04:17
问题1: 在设备管理器中,能到看到一个端口的,这个端口里面的 COm1 ,Com2,等等的是不是常说的串口。
问题2:能否编程来实现,对某个Com口的禁用和启用。 有否例子或者给写提示。
问题3: 能否检测到某个设备,比如某个短信猫插在哪个com口,并可以更改他的Com口。











问题完了:希望高手指点。
...全文
494 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
alian_1126 2011-11-02
  • 打赏
  • 举报
回复
楼主同学,你那个串口禁用和启用如何实现?给指导下吧
美丽大道 2010-04-23
  • 打赏
  • 举报
回复
自己再顶下 期待高手来到。
A_A66 2010-04-22
  • 打赏
  • 举报
回复
支持一个!
美丽大道 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 unstopable 的回复:]
引用 11 楼 llsus 的回复:
引用 8 楼 unstopable 的回复:
我现在遇到的情况是,我有个短信猫,硬件方面他不是很稳定,有时候会出问题,这个时候会出现个状态是Com被占用,无法继续使用。必须手动重启下这个端口,所以我希望能实现自动的禁用启用。
另外貌似这个驱动程序虚拟出来的com口在con口出问题后某些情况下会自己变。所以我希望我能指定他一个。


WindowsX……
[/Quote]


问题: 怎么知道一个com口是打开的还是关闭的。程序方面 还有 设备管理器里面。。

如果被占用了怎么关闭呢。
美丽大道 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 llsus 的回复:]
引用 8 楼 unstopable 的回复:
我现在遇到的情况是,我有个短信猫,硬件方面他不是很稳定,有时候会出问题,这个时候会出现个状态是Com被占用,无法继续使用。必须手动重启下这个端口,所以我希望能实现自动的禁用启用。
另外貌似这个驱动程序虚拟出来的com口在con口出问题后某些情况下会自己变。所以我希望我能指定他一个。


WindowsXP以后的系统,串口的端口号码是可以手动修……
[/Quote]
哦 是么? 非常感谢。那我试试吧。 在什么情况下他可能出现com口改变呢。
是驱动控制的么?
qqiuzaihui 2010-04-22
  • 打赏
  • 举报
回复
问题1: 在设备管理器中,能到看到一个端口的,这个端口里面的 Com1 ,Com2,等等的是不是常说的串口。

如果这个Com口不是虚拟串口的话, 那么这个串口是的确存在的有的, 只不过是主板中没有跟具体的串口硬件连接罢了. 你可以买一个串口转接线, 找个懂主板的人, 让他帮你跳个线, 就可以把这个Com1,Com2引出来了.
水哥阿乐 2010-04-22
  • 打赏
  • 举报
回复
我来接分
llsus 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 unstopable 的回复:]
我现在遇到的情况是,我有个短信猫,硬件方面他不是很稳定,有时候会出问题,这个时候会出现个状态是Com被占用,无法继续使用。必须手动重启下这个端口,所以我希望能实现自动的禁用启用。
另外貌似这个驱动程序虚拟出来的com口在con口出问题后某些情况下会自己变。所以我希望我能指定他一个。
[/Quote]

WindowsXP以后的系统,串口的端口号码是可以手动修改的(在设备管理器中找到对应串口,在高级属性中),不需要用程序指定。你说的那种情况串口不能继续使用,只要关闭再打开即可,不用禁用再启用。
zhenonline 2010-04-22
  • 打赏
  • 举报
回复
是串口
你可以直接调用API函数,来操作操作系统
llsus 2010-04-22
  • 打赏
  • 举报
回复
端口占用无非两个情况:1,你自己的程序打开了端口没关,你自己关一下即可
2,其它程序打开了端口,没办法,只能换口。
如果你的设备不稳定,那就谈不起来了,换一个吧。
美丽大道 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 llsus 的回复:]
1、那就是串口,但不一定是物理端口,有可能是驱动程序虚拟的
2、可以实现,给你推荐个网页 http://msdn.microsoft.com/en-us/library/ff552122.aspx
3、检测设备在哪个端口是可以的,你需要一个一个串口去尝试,直到正确应答。端口号也是可以修改的,参考上面的网页,但是你这么做的意义是什么呢?你程序里用System.IO.Ports.SerialPor……
[/Quote]

我现在遇到的情况是,我有个短信猫,硬件方面他不是很稳定,有时候会出问题,这个时候会出现个状态是Com被占用,无法继续使用。必须手动重启下这个端口,所以我希望能实现自动的禁用启用。
另外貌似这个驱动程序虚拟出来的com口在con口出问题后某些情况下会自己变。所以我希望我能指定他一个。

shashengduguzhe 2010-04-22
  • 打赏
  • 举报
回复
1.有些事虚拟的串口,并不都是物理串口。
2.可以使用编程方式来打开或关闭某个串口。
3.可以检测到硬件设备及接口,如果要更改接口,需要使用底层的API函数。但只是虚拟的改变。
litgle 2010-04-22
  • 打赏
  • 举报
回复
我来接分.
wuzhicheng5 2010-04-22
  • 打赏
  • 举报
回复
设备管理器中,能到看到一个端口的,这个端口里面的 COm1 ,Com2

这个就是串口,一般台式机都有,但现在的好多笔记本都没有了,
l13873666736 2010-04-22
  • 打赏
  • 举报
回复
這個好像沒有什么特別的方法,
很多軟件都是要手工設定要走哪個端口的,如果自動檢測好做,別人就不用那樣了。
不過你的問題可不可以這樣做,給COM1,COM2,.....都發信號,如果設備可以有回應的信號,就能達到你的需求
沒用過短信貓,不知道有沒有回應???
lee_b 2010-04-22
  • 打赏
  • 举报
回复
我来了。。。分分。。
llsus 2010-04-22
  • 打赏
  • 举报
回复
1、那就是串口,但不一定是物理端口,有可能是驱动程序虚拟的
2、可以实现,给你推荐个网页 http://msdn.microsoft.com/en-us/library/ff552122.aspx
3、检测设备在哪个端口是可以的,你需要一个一个串口去尝试,直到正确应答。端口号也是可以修改的,参考上面的网页,但是你这么做的意义是什么呢?你程序里用System.IO.Ports.SerialPort.GetPortNames返回所有串口让他选不就完了?
myhope88 2010-04-22
  • 打赏
  • 举报
回复
api函数估计应该可以实现得了吧
codeingsky 2010-04-22
  • 打赏
  • 举报
回复
问题1答案:正确,就是串口
问题2答案:可以,你程序启动后立即一直占用就相当于锁定了它
SerialPort port = new SerialPort(“COM1”, 9600, Parity.None, 8, StopBits.One);
port.Open();//一直不关闭就是一直锁定了它

问题3答案:循环读串口,哪个打不开就是被占用了(一般电脑没有扩展的话最多就两个串口)
美丽大道 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 llsus 的回复:]
串口通讯,你从来没搞过吧?

串口和设备是没有什么设置关系的。

你的设备接在哪个串口上,就打开哪个串口,至于怎么操作串口,我上面告诉你了,看看System.IO.Ports.SerialPort类就明白了。
[/Quote]
是啊。没做过。 这个设备接到串口上以后,我能不能换换?比如连上去是Com1,我给他指定成Com3
加载更多回复(10)
C#介绍以及简单通信程序设计实现 源代码和程序介绍连接:https://www.cnblogs.com/JiYF/p/6618696.html 本站积太贵,自己变得。。直接到连接地址下载代码 周末,没事干,写个简单的通信工具,也算是本周末曾来过,废话不多,直接到主题 介绍   串行接简称,也称串行通信接或串行通讯接(通常指COM),是采用串行通信方式的扩展接。(至于再详细,自己百度) 应用:   工业领域使用较多,比如:数据采集,设备控制等等,好多都是用通信来实现!你要是细心的话,你会发现,目前家用国网智能电能表就具备RS485通信总线(串行总线的一种)与RS232可以相互转化(当然一般,非专业的谁也不会闲的蛋疼,趴电表上瞎看,最多也就看看走了多少度电) RS232 DB9介绍: 1.示意图 2.针脚介绍: 载波检测(DCD) 接受数据(RXD) 发出数据(TXD) 数据终端准备好(DTR) 信号地线(SG) 数据准备好(DSR) 请求发送(RTS) 清除发送(CTS) 振铃指示(RI) 3.实物图: 以下是我购买XX公司的一个usb转线:这个头就是一个公头,另一端是一个usb 笨小孩工具运行图: 1.开启程序 2.发送一行字符串HelloBenXH,直接将针脚的发送和接收链接起来就可以测试了(针脚2 接受数据(RXD) 和3 发出数据(TXD))直接链接, C#代码实现:采用SerialPort 1.实例化一个SerialPort [csharp] view plain copy 在CODE上查看代码片派生到我的代码片 private SerialPort ComDevice = new SerialPort(); 2.初始化参数绑定接收数据事件 [csharp] view plain copy 在CODE上查看代码片派生到我的代码片 public void init() { btnSend.Enabled = false; cbbComList.Items.AddRange(SerialPort.GetPortNames()); if (cbbComList.Items.Count > 0) { cbbComList.SelectedIndex = 0; } cbbBaudRate.SelectedIndex = 5; cbbDataBits.SelectedIndex = 0; cbbParity.SelectedIndex = 0; cbbStopBits.SelectedIndex = 0; pictureBox1.BackgroundImage = Properties.Resources.red; ComDevice.DataReceived += new SerialDataReceivedEventHandler(Com_DataReceived);//绑定事件 }

110,549

社区成员

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

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

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