硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4427|回复: 3
收起左侧

[有问必答] V6板子modbus主机例子疑问

[复制链接]

23

主题

101

回帖

170

积分

初级会员

积分
170
发表于 2017-8-9 16:23:03 | 显示全部楼层 |阅读模式
关于读线圈寄存器01H,代码中发送的是MODH_ReadParam_01H(REG_D01, 4),参数4应该是指访问4个线圈寄存器吧,但是对应的解析是

static void MODH_Read_01H(void)
{
    uint8_t bytes;
    uint8_t *p;
    if (g_tModH.RxCount > 0)
    {
        bytes = g_tModH.RxBuf[2];    /* êy¾Y3¤¶è ×Ö½úêy */               
        switch (g_tModH.Reg01H)
        {
            case REG_D01:
                if (bytes == 8)
                {
                    p = &g_tModH.RxBuf[3];   
                    g_tVar.D01 = BEBufToUint16(p); p += 2;    /* ¼Ä′æÆ÷ */   
                    g_tVar.D02 = BEBufToUint16(p); p += 2;    /* ¼Ä′æÆ÷ */   
                    g_tVar.D03 = BEBufToUint16(p); p += 2;    /* ¼Ä′æÆ÷ */   
                    g_tVar.D04 = BEBufToUint16(p); p += 2;    /* ¼Ä′æÆ÷ */

                    g_tModH.fAck01H = 1;
                }
                break;
        }
    }
}
这里面判断的是if (bytes == 8),按我的理解访问4个线圈寄存器,返回字节数1个就可以了吧,为什么是8?不懂
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2017-8-9 16:27:20 | 显示全部楼层
例子是由工程项目代码修改过来的,实际数据的处理,有些没有做修正,这些根据自己的项目需要做修改就行。
回复

使用道具 举报

23

主题

101

回帖

170

积分

初级会员

积分
170
 楼主| 发表于 2017-8-10 08:42:44 | 显示全部楼层

回 eric2013 的帖子

eric2013:例子是由工程项目代码修改过来的,实际数据的处理,有些没有做修正,这些根据自己的项目需要做修改就行。 (2017-08-09 16:27) 
恩,了解
回复

使用道具 举报

32

主题

298

回帖

394

积分

高级会员

积分
394
发表于 2017-8-18 22:05:30 | 显示全部楼层

回 eric2013 的帖子

eric2013:例子是由工程项目代码修改过来的,实际数据的处理,有些没有做修正,这些根据自己的项目需要做修改就行。 (2017-08-09 16:27) 
那个MODBUS代码确实写的非常好,这里感谢一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-17 06:49 , Processed in 0.038691 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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