打印

如何确定帧与帧之间的间隔

[复制链接]
1382|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dingy|  楼主 | 2019-9-15 10:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Modbus是我们最常用的协议之一,如何确定帧与帧之间的间隔呢,大家讨论下。

使用特权

评论回复
沙发
yinxiangh| | 2019-9-15 10:42 | 只看该作者
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
板凳
dingy|  楼主 | 2019-9-15 10:48 | 只看该作者
TIMSK &= ~(1<<TOIE2);
    TIFR |= (1<<TOV2);
#if 1
    switch(RxMode)
    {
        case 1: /* receive Addr only */
            //ErrorDisplay(ERRCODE_OnlyReceiveAddr);
            break;
        case 2: /* receive Addr and FunCode only */
            //ErrorDisplay(ERRCODE_ReceiveDataErr);
            break;
        case 3: /* receive All */
            if(RxFrame.Len < 2){
                //ErrorDisplay(ERRCODE_ReceiveDataErr);
                RxFrame.Data = RxArrayTemp + 2;
                break;
            }
            RxFrameComplete = 1;
            RxFrame.CRCL = *(RxFrame.Data - 2);
            RxFrame.CRCH = *(RxFrame.Data - 1);
            RxFrame.Data = RxArrayTemp + 2;
            break;
        default :
                    break;
            //ErrorDisplay(ERRCODE_ReceiveDataErr);


这是我见过的一种,大家可以看看。

使用特权

评论回复
地板
ousj| | 2019-9-15 10:51 | 只看该作者
还有人接收一大堆数据,然后在其中找帧头,再算CRC这种方法,这种方法很浪费资源。

使用特权

评论回复
5
zyf部长| | 2019-9-15 10:54 | 只看该作者
硬件资源比较紧张的情况下,可以用楼上所说的第二种方法,比如说定时器不够用时,可以考虑,牺牲了运行速度。

使用特权

评论回复
6
zyf部长| | 2019-9-15 10:57 | 只看该作者
硬件资源比较紧张的情况下,可以用楼上所说的第二种方法,比如说定时器不够用时,可以考虑,牺牲了运行速度。

使用特权

评论回复
7
kangzj| | 2019-9-15 11:29 | 只看该作者
常用的还是通过定时器进行定时,即楼主代码所显示的方法,通过每收到一个字符后,就进行定时,根根定时器的中断程序来确定帧与帧的间隔,Modbus规定帧与帧的间隔是每个字符发送时间的3.5倍,即:大于3.5倍一个字符的发送时间就为帧间隔的时间。

使用特权

评论回复
8
kangzj| | 2019-9-15 11:33 | 只看该作者

这是我对Modbus的理解,不知道其他人还有更好的办法吗,希望大家踊跃讨论

使用特权

评论回复
9
chuxh| | 2019-9-15 11:59 | 只看该作者
学习了,楼上说的那种方法确实不错,只用到一个定时器就可以完成,而且也比较的合理,学习了。

使用特权

评论回复
10
juventus9554| | 2019-9-15 12:01 | 只看该作者
Modbus有好多种,有RTU Modbus  ASCII码的Modbus每一种Modbus协议都有它独有的魅力。

使用特权

评论回复
11
supernan| | 2019-9-15 12:11 | 只看该作者
modbus帧与帧之间的间隔时间是固定的,我记得是2.5ms

使用特权

评论回复
12
stly| | 2019-9-15 12:47 | 只看该作者

确实是这样,我在写Modbus的时候,也很纠结,不像其它的协议,人家包头和包尾,可以根据包头和包尾进行数据的解析分析,Modbus没有包头和包尾

使用特权

评论回复
13
pengf| | 2019-9-15 12:50 | 只看该作者

学习了,这种方法确实好用,而且不会影响主程序的判断,可以类似于不用管理的方式进行Modbus的收发。

使用特权

评论回复
14
dingy|  楼主 | 2019-9-15 12:53 | 只看该作者


结贴了,多谢大家讨论这么多哈,呵呵

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

745

主题

10920

帖子

6

粉丝