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条回答
金牛AKI
1楼-- · 2019-12-23 20:51
很高端的感觉
y595906642
2楼-- · 2019-12-23 22:19
为什么要动态修改波特率呢?
hejiang177
3楼-- · 2019-12-23 23:22
 精彩回答 2  元偷偷看……
y595906642
4楼-- · 2019-12-24 04:00
那第一次用的时候 把波特率地址什么的信息改好存eeprom 不就不用改了吗?
boboo
5楼-- · 2019-12-24 09:12
再改成主机模式就可以自动识别从机
hejiang177
6楼-- · 2019-12-24 14:06
y595906642 发表于 2014-4-15 09:17
那第一次用的时候 把波特率地址什么的信息改好存eeprom 不就不用改了吗?

动态修改啊,机子在工作的时侯你设置了波特率要重启机子才能通信嘛,这动态修改就是指不用再启动机子,直接修改后,这个协议休就使用了新的波特率,或者地址

一周热门 更多>