实际的程序是流程是这样的:
主站是固定的发送读,每隔50ms读一次从站,无论有没有收到数据,主站都是每隔50ms发送一次读从站的数据,从站是被动的,如果没有收到主站的数据,就一直处于静默的状态,从站收到正确的读(必须通过modbus校验)后马上返回数据至主站。如果说主站收到的数据有问题或者未收到数据,就要报错,现在把RX_DATA_TIME这个变量由原来在定时器中断中减改为加,把提前返回数据的问题解决了,可是又出现了一个新问题,会偶尔的出现数据错误,用逻辑分析仪监测了,时序是百分百没有问题的,但是数据是错误的,差了一位,从站明明返回的数据是14位,主站却只读到13位,少了一位,并且数据中有错误的,监测的结果如下:
从站实际返回:0xb3,0x61,0x64,0xe3,0x63,0xea,0x8e,0x44,0x1e,0x96,0x01,0x9c,0x43,0x75
主站实际收到:0xb3, 0x58,0xd6,0x63,0xea,0x8e,0x44,0x1e,0x96,0x01,0x9c,0x43,0x75
|