最近几天,客户使用WiFi无线控制器时出现了一些问题,我们紧急进行了详细的分析。
并快速给出解决方案,客户非常满意。
问题描述
1.通过无线控制器的热点或者是station访问模块的内置网页,高概率提示忙,无法下载网页。
2.有一定概率出现上位机无法通过模块的http接口控制模块的情况。
3.把无线控制器安装在控制箱里面,关上箱门之后,信号比较差,出现无法连接的情况。
4.无线控制器的AP热点不能隐藏或者关闭。
原因分析
TCP服务端的长期可靠工作没有监控机制,缺少实际验证
说明:
无线控制器内部有一个TCP服务端和TCP客户端,其中TCP服务端用于实现HTTP服务器,以提供内置网页。
其中连接TCP服务端的客户端是随机未定的,无法通过定时心跳监测服务端的可靠性。
而TCP客户端采用与服务端的定时心跳实时监测可靠性,一旦监测到异常,WiFi模块将复位。
在目前的应用中,长期的控制连接通过TCP客户端连接,而TCP服务端仅用于编程、设置等短时间使用。
对于TCP服务端在多并发等的情况下的长期可靠工作,目前没有非常充分的实际验证。
可能存在的问题:
当TCP服务端存在bug等原因导致无法连接时,无线控制器无法自动检测到异常,从而复位恢复。
建议措施:
上位机设计TCP服务端,将无线控制器的TCP客户端接连到该服务端(上位机端代码,已提供了.net的demo程序);
通过消息缓存限制并发(上位机端代码,需新设计);
通过定时心跳保证稳定性(无线控制器端功能,已实现)。
超过一个TCP连续会出现通信中断情况
说明:
在设计无线控制器时考虑其功能比较简单,为了保证可靠性,消息队列,应答 机制等以保证一个TCP连接来设计
在存在多个TCP连接时,仅保证在恢复到一个连接时,功能可自动恢复正常,在并发时,会出现通信中断情况。
可能存在的问题:
当上位机在定时通过http接口与无线控制器通信时,存在无法打开网页的情况。
当打开网页时,上位机与无线控制器的通信存在中断的情况。
建议措施:
需要打开网页设置时,先停止上位机与无线控制器的定时查询。
正常工作时,关掉该 无线控制器的所有内置网页, 同时上位机需要采用一定的机制避免与无线控制器出现多个连接。
无线控制器采用板内的PCB天线
说明:
目前的无线控制器采用的是天线为PCB走线的WiFi模块。
可能存在的问题:
当无线控制器与其连接的AP比较远,有障碍物,或者无线控制器被放于金属控制箱内时,无线信号比较差,出现无线连接失败,无线连接不稳定等问题。
建议措施:
增加WiFi中继,特别是无线控制器放置于控制箱时,可在控制箱内增加一个可连接外置吸盘天线的WiFi中继,天线置于控制箱外。
改进措施
1.使用时注意网页和上位机定时通信的相互错开
2.对于上位机,新设计WebClent类,增加连接超时时间的设置,并将超时时间设置为3s左右
3.对于上位机,与无线控制器的TCP连接,应该进行统一管理,确保与只有一个连接(可根据测试情况再决定)
4.对于上位机,可考虑设计TCP服务端,无线控制器作为TCP客户端与之通信(可根据测试情况再决定)
5.对于无线控制器需要重新上电才能恢复正常的问题,目前没有测试到,暂不处理,根据测试情况再决定是否进一步分析。
后续措施
1.将WiFi模块改为IPEX天线接口的模块,从而可以采用外置的吸盘天线
2.增加AP热点隐藏或者关闭的功能
3.修改影响多并发的代码,改善无线控制器连接并发的性能
4.采用两个WiFi模块的冗余设计,增加可靠性
处理以及验证过程
修改WiFi模块的TCP server和TCP client代码,将主控MCU的串口通信由中断收发改成DMA。
WiFi模块代码
用visual studio开发简易的自动测试软件,用多线程创建10个左右的TCP客户端,以 100ms的时间间隔定时与无线控制器通信。
经过几天几夜的连续测试,丢包概率低,没有发生卡死现象。
自动测试