单位让我做Modbus通讯程序,我用了03,06两个功能,PC机做上位机(主机),我们的产品变频器是从机。1台主机,3台从机。我调试有一段时间了,06的功能我加上了,03的功能我也加了,可是会丢数,即便是读一个地址,也是会丢的。大家能帮我分析分析原因吗?
1.06不丢,03丢。
2.03功能如果是手动发送,回数据正常,如果是自动发送,3台里就丢1台的数据。
具体现象:手动发送,先1#机读一个地址,1#机回复。再2#机读一个地址,2#机回复,3#机读一个地址,3#机回复。从读一个地址到10个地址,都是可以的。
自动发送:轮流读3台从机的一个地址,一开始都有回复,一段时间后(十分钟吧)就只有2台了。有一台就好像是死机了是的,怎么发指令都不管用。而且这两台回复的数据也有丢失。读一个地址是这样,读多个地址也这样,指令间隔从200ms到1000ms都这样。
3.我们的程序是PWM的中断级别最高,通讯是在定时器中断里的。CPU是DSP2808,没用通讯自己的中断(以前用过,通讯丢数,后来不用了),用的是FIFO,在定时器中断中查询FIFO接收的个数,够1帧就处理。
现在我想不出原因,是CRC校验码程序耗时太长,导致一部分指令没收到,所以就不能回复,导致丢失?还是硬件有局限,导致这样?好烦啊,领导老催我,好像我是万能的,什么问题都能解决。