freemodbus动态修改串口波率

2019-12-23 18:35发布

看在坛子里有人问这个freemodbus动态修改串口波率的问题,本人在实际过程中稍作修改,只增加一个函数清除MODBUS的一个状态标志即可,具体方法如下:
1.直接调用eMBInit(MB_RTU, sysParameter.address, 1, sysParameter.baudRate, MB_PAR_NONE);是不能动态修改从机地址,波物率的,需要清除一个发送状态全局标志eSndState
2.在mbrtu.c文件中增加函数
void xMBRTUClearSendState(void)
{
      eSndState = STATE_TX_IDLE;
}
然后在mb.c文件中的eMBEnable( void )函数中,增加上面这个xMBRTUClearSendState();调用,如下示例:       
eMBErrorCode    eMBEnable( void )
{
    eMBErrorCode    eStatus = MB_ENOERR;
        xMBRTUClearSendState();                        //2013-11-28 hejiang修改,原因是为了动态修改波特率和从机地址
    if( eMBState == STATE_DISABLED )
    {
        /* Activate the protocol stack. */
        pvMBFrameStartCur(  );
        eMBState = STATE_ENABLED;
    }
    else
    {
        eStatus = MB_EILLSTATE;
    }
    return eStatus;
}
3.在应用程序中,如果修改波特率等配置,调用如下:
if(设置标志){
//清标志
eMBDisable(); //重新初始化 FreeModbus 为RTU模式 从机地址为1 Uart1 9600 无校验
eMBInit(MB_RTU, sysParameter.address, 1, sysParameter.baudRate, MB_PAR_NONE);
eMBEnable();
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。