大家好,我现在调试modbus程序。接线是用的RS485,连了2台从机,在485的通讯线上跑modbus协议。只用了03,06两个功能。轮流给从机发写指令06,发现会丢指令,关掉一台,还是会丢。到底是程序哪里有问题呢?想不明白,请高手指教。cpu是dsp2808。
附c程序:
FIFO_num = ScibRegs.SCIFFRX.bit.RXFFST; //读取FIFO 内部数据量
if(FIFO_num>=8)
{
for(i=0;i<16;i++)
{
rdataB【i】=ScibRegs.SCIRXBUF.all; // Read data
}
if((sta_num!=rdataB【0】)&&(rdataB【0】!=0x0))
{
clear_uart_buf();
SCIFIFO_FLAG=0;
//ScibRegs.SCIFFRX.bit.RXFFST=0;
EALLOW;
ScibRegs.SCIFFRX.bit.RXFIFORESET = 0;
ScibRegs.SCIFFRX.bit.RXFIFORESET = 1;
EDIS;
}
if(rdataB【0】==0x0) modbus_scib();
else if(rdataB【0】==sta_num)
{
temp=rdataB【7】<<8;
temp= temp|rdataB【6】;
//Recdata=&rdataB【0】;
Rec_num=6;
CRC_code= CRC16(rdataB,Rec_num);
if(temp!=CRC_code) SendError(0x02); //0x02:CRC错误
else modbus_scib();
//SendData(rdataB,FIFO_num);
}
}
for(i=0;i<16;i++)
{
rdataB【i】=ScibRegs.SCIRXBUF.all; // Read data
}
clear_uart_buf();
SCIFIFO_FLAG=0;
EALLOW;
ScibRegs.SCIFFRX.bit.RXFFOVRCLR = 1; // 清楚溢出标志位
ScibRegs.SCIFFRX.bit.RXFIFORESET = 0;
ScibRegs.SCIFFRX.bit.RXFIFORESET = 1;
EDIS;