搜索
bottom↓
回复: 17

freemodbus动态修改串口波率

[复制链接]

出0入0汤圆

发表于 2014-4-14 10:45:53 | 显示全部楼层 |阅读模式
看在坛子里有人问这个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();
}

出0入0汤圆

发表于 2014-4-14 11:59:02 | 显示全部楼层
很高端的感觉

出0入0汤圆

发表于 2014-4-14 12:02:50 | 显示全部楼层
为什么要动态修改波特率呢?

出0入0汤圆

 楼主| 发表于 2014-4-15 09:14:12 | 显示全部楼层
y595906642 发表于 2014-4-14 12:02
为什么要动态修改波特率呢?

没有特别的为什么,要不就修改后重启机子,要不就不用重 启而已,如果你不想重启那就要动态修改,如果你觉得无所谓,我重启一下就行了,那不要动态修改也无所谓

出0入0汤圆

发表于 2014-4-15 09:17:37 | 显示全部楼层
那第一次用的时候 把波特率地址什么的信息改好存eeprom 不就不用改了吗?

出0入0汤圆

发表于 2014-4-15 09:18:05 来自手机 | 显示全部楼层
再改成主机模式就可以自动识别从机

出0入0汤圆

 楼主| 发表于 2014-4-15 09:23:46 | 显示全部楼层
y595906642 发表于 2014-4-15 09:17
那第一次用的时候 把波特率地址什么的信息改好存eeprom 不就不用改了吗?

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

出0入0汤圆

发表于 2014-4-15 09:27:45 | 显示全部楼层
hejiang177 发表于 2014-4-15 09:23
动态修改啊,机子在工作的时侯你设置了波特率要重启机子才能通信嘛,这动态修改就是指不用再启动机子,直 ...

明白了
我理解错误

出0入0汤圆

 楼主| 发表于 2014-4-15 09:28:00 | 显示全部楼层
boboo 发表于 2014-4-15 09:18
再改成主机模式就可以自动识别从机

这个没有时间弄了,等你弄好了我们来乘凉

出0入0汤圆

发表于 2014-4-15 10:02:12 | 显示全部楼层
这个其实是有用的;

出0入0汤圆

发表于 2014-4-16 11:49:17 | 显示全部楼层
   顶一下!

出0入12汤圆

发表于 2014-4-16 12:24:22 | 显示全部楼层
还要再加个地址为0,禁止通讯的功能。

出0入0汤圆

 楼主| 发表于 2014-4-16 15:47:49 | 显示全部楼层
waterx3 发表于 2014-4-16 12:24
还要再加个地址为0,禁止通讯的功能。

直接eMBDisable(); 就可以了

出0入0汤圆

发表于 2014-5-14 22:25:55 | 显示全部楼层
这个有点深了,顶一下!

出0入0汤圆

发表于 2016-8-6 09:30:17 | 显示全部楼层
还有一个办法就是不调用eMBInit修改,在自己的驱动程序里该串口配置,但是地址就没法改了。

出0入0汤圆

发表于 2016-11-24 13:06:52 | 显示全部楼层
本帖最后由 Shaopus 于 2016-11-24 14:45 编辑

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

不好意思,已经成功,自己程序问题。需要在数据返回完成后再修改。

出0入0汤圆

发表于 2017-9-17 23:00:46 | 显示全部楼层
这个不错,技术中。

出110入170汤圆

发表于 2017-9-17 23:05:44 来自手机 | 显示全部楼层
这个动态修改波特率的问题很好实现。

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

假如此次回复,主机没收到,又如何处理?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 12:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表