问题描述
最近在预装有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各种值得含义如下:
- 0,则驱动由启动引导器加载,应该跟“随着开机,最先启动”是同一回事;
- 1,则驱动由操作系统的I/O子系统加载,即- 在系统内核初始化时加载;
- 2,则驱动/服务在启动后自动加载;
- 3,则驱动/服务就是按需手动加载;
- 4,驱动/服务就是被禁用的状态
这里将Start的值置位4,禁用Sermouser驱动服务。
- 还有一种不太建议的方法,就是找到Microsoft serial ballpoing的驱动程序,然后删掉,这样可以从根本上解决问题。但是,驱动程序毕竟是系统程序,直接删掉,可能会造成系统不稳定,所以,不太建议这么做。
版权声明:本文为CSDN博主「奔跑的码仔」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/linux_embedded/article/details/122542846
暂无评论