遇到SerialPort打不开串口情况
昨天在现场遇到一个情况,电脑上所有的串口都打开失败。
当时的情况是这样的,现场有一个无线扫码枪,由于充电不及时突然断电,现场操作人员就用一个备用的替换,突然就发现备用的也用不了。经过远程指导,发现还是不行。但是用串口调试助手又能打得开串口,且能扫码,整个网络也是好的。查看日志,发现异常是“由于线程退出或应用程序请求,已中止IO操作”。几经折腾,现场操作员也搞不定。只能跑一趟了。
到现场后,尝试用测试程序打开串口,发现报异常“'PortName' cannot be set while the port is open”,所有的串口都打不开,都报异常,但是用串口助手打得开。
由于是第一次遇到这样的问题,查了好久的资料还是不晓得是什么原因。尝试过以下几个解决办法:
1.从另外可用的电脑拷贝程序运行(不行)
2.尝试重装NET运行环境(不行)
3.禁用和启用COM口(不行)
4.卸载COM后,重新扫描添加(不行)
5.一顿操作后,想着实在不行就把系统重装一遍不就完事了么(还是不行)
6.觉着电脑有问题...,换一台备用电脑(不行,ku!!!)
一直到换电脑大法之后还是同样的问题,就觉着不对劲了。回头想很有可能还是扫描枪的问题。然后去另外的工位拿一把好的扫描枪,结果就可以。但是前面的两把扫描枪就是不行(一把没电,一把备用的)。然后想着把备用的出厂化重新设置一下试试。诶,结果就好了。
回头想,可能是由于扫描枪是无线的,扫码枪和底座是通过蓝牙连接,底座通过串口连接电脑。扫码枪突然断电后,没有释放底层占用的串口资源,导致有残留的串口。而用SerialPort访问的时候还是访问的残留的串口,不能打开真正的串口。
后面请教了一个大佬,大佬说C#用SerialPort访问串口不靠谱,有几率会出现这样的问题,最好的方式是通过WinAPI的方式直接访问串口设备。大佬说这都是血泪史,看来大佬也被折腾的不清...
然后大佬给了我一张这样串口访问图。看来后面要换个方式访问串口才行了。


浙公网安备 33010602011771号