问题描述
最近在预装有windows7 SP1系统的工控机上,开发了一款modbus数据监听、处理的应用程序。主要功能就是监听485线上modbus通信数据,处理数据,并上报到中心平台,485数据通过USB串口转485信号转换模块获取。
调试过程中发现,工控机在接入被监听485信号的情况下启动,进入系统之后,采集程序会出现打不开串口设备的问题,并且,鼠标会不停的乱跳。
问题原因
起初怀疑是485数据发送频率太快,系统处理不及时导致的。之后,否定了这种猜测,因为串口设备和鼠标是两个不同的设备,设备应该不会相互干扰,唯一的可能就是U转485模块被系统识别成了“鼠标设备”。
果然,通过系统的“设备管理器”,证实了这种猜测,两个U转485模块被识别成了Microsoft serial BallPoing,而且位置就是那两个串口设备。
原来如此,由于串口上一直有485数据,系统启动时候,误认为这两个串口发送的数据是鼠标数据,从而把串口设备识别成了鼠标设备,这也解释了为什么应用程序打不开串口设备,因为这两个串口设备已经被占用了!
解决方法
知道了问题原因,解决办法就好说了,有以下几种:
- 不要在系统启动时,向串口发送数据,这样串口设备很容易会被识别成“串口鼠标设备”。
- 如必须发送串口数据,比如本案例,监听485数据,可以在系统启动之后,将“Microsoft serial ballpoing”设备禁用,下次系统再启动时候,就不会再将485串口识别成鼠标设备了;
- 禁用注册表中sermouse的启动项,打卡注册表,sermouse注册表的路径如下:
“计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\sermouse”
Start各种值得含义如下:文章来源:https://www.toymoban.com/news/detail-484469.html
- 0,则驱动由启动引导器加载,应该跟“随着开机,最先启动”是同一回事;
- 1,则驱动由操作系统的I/O子系统加载,即- 在系统内核初始化时加载;
- 2,则驱动/服务在启动后自动加载;
- 3,则驱动/服务就是按需手动加载;
- 4,驱动/服务就是被禁用的状态
这里将Start的值置位4,禁用Sermouser驱动服务。文章来源地址https://www.toymoban.com/news/detail-484469.html
- 还有一种不太建议的方法,就是找到Microsoft serial ballpoing的驱动程序,然后删掉,这样可以从根本上解决问题。但是,驱动程序毕竟是系统程序,直接删掉,可能会造成系统不稳定,所以,不太建议这么做。
到了这里,关于windows系统-串口设备导致鼠标乱跳的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!