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条回答
larry.wong
1楼-- · 2019-12-25 19:22
 精彩回答 2  元偷偷看……
单飞
2楼-- · 2019-12-25 22:09
还有一个办法就是不调用eMBInit修改,在自己的驱动程序里该串口配置,但是地址就没法改了。
Shaopus
3楼-- · 2019-12-25 23:36
本帖最后由 Shaopus 于 2016-11-24 14:45 编辑

试了下。用06功能码,返回指令格式同发送指令格式不一致,但是修改成功了。

不好意思,已经成功,自己程序问题。需要在数据返回完成后再修改。
dulala
4楼-- · 2019-12-26 05:25
这个不错,技术中。
18161319737
5楼-- · 2019-12-26 09:56
这个动态修改波特率的问题很好实现。

只是纠结于一点,当前命令修改波特率,究竟用新波特率还是老的波特率回复此次命令?

假如此次回复,主机没收到,又如何处理?

一周热门 更多>