本文介绍一个触摸屏在485通信时遇到数据延时的一个解决方法。
前段时间做单片机系统、电路板、控制器、仪器、物联网、工控、电子产品、软件开发项目(Q:2531二六3726)时“接诊”了一个“病人”:是一台装置,它的主控板实现了控制3台泵,采集传感器信息,主控板的一个串口用TTL电平与自带的一个触摸屏A通信,主控板的另一个串口用485 & Modbus RTU协议与触摸屏B通信,触摸屏B带2台装置,出现问题是其中一台装置的一个数据在触摸屏B上显示延迟。
1、 系统详细信息
主控板处理器是STC单片机,触摸屏A是淘晶驰7寸屏,触摸屏B是昆仑通态10寸屏,泵是直流12V/13W的隔膜泵,系统电源用的是12V/5A的电源适配器。
2、 出现了什么问题?
在启动装置后,各个装置与自带的触屏A参数显示与控制正常,各个装置与连接的触摸屏B控制功能正常,但是在触摸屏B上参数显示有一个装置(如装置2)的一个数据不正常,出现很长时间数据不更新的情况。
3、 可能的原因
怀疑泵的电机导致485信号干扰:
由于在每一台装置里布置了3台12V直流电机,电机在运行时可能产生电磁干扰导致485电平错误。
那么,先采取的解决方法是将装置内外的485电缆由并线改为双绞线,并串磁珠,这在理论上是可以降低电磁干扰对485信号的影响。
那就试一试,不过尽管采取了换双绞线串磁珠的的措施,但是数据不更新的现象依然存在,那么把485芯片和单片机也换了,但是问题也没解决。
既然不是硬件问题,那么看看程序:
由于在昆仑通态触摸屏组态Modbus RTU协议时数据更新是查询反馈法,就是触摸屏发送读指令,主控板需根据要求反馈数据。
是不是在主控板里触摸屏的读指令多了被覆盖了?那么在主控板的程序里除了收到触屏的读指令后反馈之外,再加个定时发送数据给触屏。但是经测试,触屏上数据长时间不更新的现象还是存在,看来这也不是主要问题。
最后到触屏组态界面,发现“通讯等待时间”为200毫秒,疑似有点问题,“通讯等待时间”是触屏发送指令后收到返回帧的允许等待时间,超过这个时间数据会被丢弃。
而在本案里主控板里收到触屏的读指令之后可能不会马上反馈数据,要等到while循环到了处理触屏指令时才会向触屏发送数据,这里在while循环里执行的代码还有点多,有可能会超过200毫秒才会回复数据。
那么把“通讯等待时间”改为600试一试:见证奇迹的时刻到来了,把触屏的这个参数改了之后,触屏B与两个装置之间通信无比“丝滑”,触屏上数据响应非常及时,问题解决,那么这个系统就“治好了”。
其实这真是一个小细节,“通讯等待时间”200是默认值一般无需修改,但是在不同的通信对应方可能会有不同的情况,这个参数也要根据系统情况做修改设置。这虽小,但也够折腾,难在意想不到,项目经验就是一步一步积累的。
一点小总结分享,全文完。
沙鸥 成都 2024年3月13日