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();
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
y595906642
1楼-- · 2019-12-24 15:07
hejiang177 发表于 2014-4-15 09:23
动态修改啊,机子在工作的时侯你设置了波特率要重启机子才能通信嘛,这动态修改就是指不用再启动机子,直 ...

明白了
我理解错误
hejiang177
2楼-- · 2019-12-24 19:49
 精彩回答 2  元偷偷看……
kinsno
3楼-- · 2019-12-25 01:00
这个其实是有用的;
huangxiaowei
4楼-- · 2019-12-25 03:03
   顶一下!
waterx3
5楼-- · 2019-12-25 08:32
还要再加个地址为0,禁止通讯的功能。
hejiang177
6楼-- · 2019-12-25 13:28
waterx3 发表于 2014-4-16 12:24
还要再加个地址为0,禁止通讯的功能。

直接eMBDisable(); 就可以了

一周热门 更多>