成都电路板研发:细节也容易搞si人,一个触摸屏485通信数据延迟的“治疗”

[复制链接]
16298|12
手机看帖
扫描二维码
随时随地手机跟帖
yonko|  楼主 | 2024-3-13 20:23 | 显示全部楼层 |阅读模式
本文介绍一个触摸屏在485通信时遇到数据延时的一个解决方法。
前段时间做单片机系统、电路板、控制器、仪器、物联网、工控、电子产品、软件开发项目(Q:2531二六3726)时“接诊”了一个“病人”:是一台装置,它的主控板实现了控制3台泵,采集传感器信息,主控板的一个串口用TTL电平与自带的一个触摸屏A通信,主控板的另一个串口用485 & Modbus RTU协议与触摸屏B通信,触摸屏B带2台装置,出现问题是其中一台装置的一个数据在触摸屏B上显示延迟。
1.png
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毫秒才会回复数据。
2.png
那么把“通讯等待时间”改为600试一试:见证奇迹的时刻到来了,把触屏的这个参数改了之后,触屏B与两个装置之间通信无比“丝滑”,触屏上数据响应非常及时,问题解决,那么这个系统就“治好了”。
其实这真是一个小细节,“通讯等待时间”200是默认值一般无需修改,但是在不同的通信对应方可能会有不同的情况,这个参数也要根据系统情况做修改设置。这虽小,但也够折腾,难在意想不到,项目经验就是一步一步积累的。
一点小总结分享,全文完。
沙鸥 成都 2024年3月13日


使用特权

评论回复

相关帖子

田舍郎| | 2024-3-13 22:00 | 显示全部楼层
有质量

使用特权

评论回复
田舍郎| | 2024-3-13 22:00 | 显示全部楼层
有质量

使用特权

评论回复
很强

使用特权

评论回复
商周| | 2024-3-14 08:48 | 显示全部楼层
实际工程调试确实是这样,很多的技术细节

使用特权

评论回复
lihui567| | 2024-3-14 08:53 | 显示全部楼层
按说200ms时间足够了,代码执行很快的,说明STC执行代码还是慢,或者代码中有长延时了

使用特权

评论回复
评论
chenyong123 2024-4-3 16:54 回复TA
代码时序没搞好,工控行业很多都是100ms内一周期,当然具体看应用需求 
yueguang3048| | 2024-3-14 09:00 | 显示全部楼层
一般关键参数不开放给用户  这帮开发的也是6

使用特权

评论回复
qintian0303| | 2024-3-14 09:08 | 显示全部楼层
没申请个原创啊

使用特权

评论回复
full_stack| | 2024-3-18 10:51 | 显示全部楼层
还是程序的问题啊

使用特权

评论回复
zy16816888| | 2024-3-19 09:47 | 显示全部楼层
这个还是考研经验的,你要是做过类似工业类485,很快就判断出来了,经验也是这样来的

使用特权

评论回复
Happy猪小翔| | 2024-3-19 09:56 | 显示全部楼层
这个还是要优化下程序,按理说200ms时间不短了

使用特权

评论回复
qinlu123| | 2024-4-11 10:11 | 显示全部楼层
我之前用NRF24L01做四轴飞行器通信的时候也遇到过类似情况,用A单片机调好的参数移植到B单片机上就通信失败原因就是B单片机性能差一些即使代码全部都是非阻塞式写法但依然没有及时切换收发状态和主机擦肩而过。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

116

主题

229

帖子

0

粉丝