||||
DTU模块的性能参数中要求发送数据的时间间隔要大于1.5秒。但是在系统运行过程中,上位机可能在向控制器发送完数据后,马上又需要向发送机发送数据,或者同时又接收到下位机发送的数据,需要立即反馈,如果对串口发送数据的时间不加以限制,DTU会将两次的数据当成一个数据发送出去。
针对以上情况,程序中需要保证写两次串口的时间间隔大于1.5S。
解决方法为:
在程序中设置了一个数据发送队列str_WaitSend[3]和一个串口是否可写标志位m_bWriteCom(为1时表示可写,为0时表示不可写,初始化为1)。str_WaitSend用来存储需等待发送的数据(经计算等待发送的数据不会超过3个)。
在向串口写数据时先判断m_bWriteCom是否为1。为1则写串口,并置m_bWriteCom为0,设置1.5S定时器;为0则将要写的数据加入队列尾,等待发送。在1.5S到时的消息响应函数中先置m_bWriteCom为1,然后判断发送队列中是否有数据,有数据则取出发送队列首部的数据写入串口,无数据则取消定时器。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-6-3 04:20
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社