欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

拔出usb线,重新插上之后串口数据无法读取

更新时间: 2014-01-05 03:15:19 责任编辑: Author_N1

 

拔掉USB线,重新插上之后串口数据无法读取
是这样的,硬件是由USB转232连接的DTU。程序可以读取设备从服务器发送过来的数据。但是拔下电脑端USB线再插上后,读不到串口数据。serial的IsOpen也返回true。不过呢,重启一下读取数据的程序就可以正常读取数据,请问一下高手们,怎么做才可以让设备重新连接上电脑之后,能正常从串口读出数据来。谢谢了,这个问题急待解决。
--参考方法--
需要 PC 端的程序监测 OnDeviceChange 消息。当设备拔掉时,关闭串口。设备重新插入后,重新打开串口。
--参考方法--
这个应该和Windows的设备管理有关系,因为串口是非即插即用设备,而USB是即插即用设备,拔掉USB设备时如果对应的虚拟串口处于打开状态,导致串口设备无法删除,从而导致USB再次插入后映射串口设备错误,从而无法正常通信。可以用下面方式解决:

利用SetupApi枚举USB设备,检测该USB设备的插入或拔出,在检测到USB拔出的时刻把串口关掉。

不过需要注意的是,打开或关闭串口设备的设备名不能使用"COM1"之类的设备名,而应使用全路径名如"\\\\.\\COM1",否则是不行的.

--参考方法--
我用别人写的一个C#库, 里面是有个设备注册的,必须在每次指定VID/PID设备插入后注册一下,不然就很可能出现第一次能用,但重新插拔一次后就不能用了
--参考方法--
引用:
Quote: 引用:

我用别人写的一个C#库, 里面是有个设备注册的,必须在每次指定VID/PID设备插入后注册一下,不然就很可能出现第一次能用,但重新插拔一次后就不能用了
感觉你说的很接近真相了,但是能具体告诉我一下怎么做吗?



        public Form1()
        {
            InitializeComponent();
            OnHandleCreated(null);
        }
        protected override void OnHandleCreated(EventArgs e)
        {
            base.OnHandleCreated(e);
            usb.RegisterHandle(Handle);
        }
        //指定设备插入事件响应
        private void usb_OnSpecifiedDeviceArrived(object sender, EventArgs e)
        {
            OnHandleCreated(null);
        }

对于C#我现在只会照着别人的程序改,初始化时调用OnHandleCreated(null)一次,后面每次重新插拔一次后也调用一次.什么原理我也不清楚,你找找你那边有没有对应的函数
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:15:19
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20178/
本文WWW.DOC100.NET DOC100.NET版权所有。