硬汉嵌入式论坛

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

[其它] 请问ModBus教程里面MODH_Send10H函数为啥不需要将从机应答标志位置为0

[复制链接]

0

主题

22

回帖

22

积分

新手上路

积分
22
发表于 2024-3-20 18:39:40 | 显示全部楼层 |阅读模式
本帖最后由 bricle 于 2024-3-20 18:42 编辑

[C] 纯文本查看 复制代码
/*
*********************************************************************************************************
*        函 数 名: MODH_Send10H
*        功能说明: 发送10H指令,连续写多个保持寄存器. 最多一次支持23个寄存器。
*        形    参: _addr : 从站地址
*                          _reg : 寄存器编号
*                          _num : 寄存器个数n (每个寄存器2个字节) 值域
*                          _buf : n个寄存器的数据。长度 = 2 * n
*        返 回 值: 无
*********************************************************************************************************
*/
void MODH_Send10H(uint8_t _addr, uint16_t _reg, uint8_t _num, uint8_t *_buf)
{
        uint16_t i;
        
        g_tModH.TxCount = 0;
        g_tModH.TxBuf[g_tModH.TxCount++] = _addr;                /* 从站地址 */
        g_tModH.TxBuf[g_tModH.TxCount++] = 0x10;                /* 从站地址 */        
        g_tModH.TxBuf[g_tModH.TxCount++] = _reg >> 8;        /* 寄存器编号 高字节 */
        g_tModH.TxBuf[g_tModH.TxCount++] = _reg;                /* 寄存器编号 低字节 */
        g_tModH.TxBuf[g_tModH.TxCount++] = _num >> 8;        /* 寄存器个数 高字节 */
        g_tModH.TxBuf[g_tModH.TxCount++] = _num;                /* 寄存器个数 低字节 */
        g_tModH.TxBuf[g_tModH.TxCount++] = 2 * _num;        /* 数据字节数 */
        
        for (i = 0; i < 2 * _num; i++)
        {
                if (g_tModH.TxCount > H_RX_BUF_SIZE - 3)
                {
                        return;                /* 数据超过缓冲区超度,直接丢弃不发送 */
                }
                g_tModH.TxBuf[g_tModH.TxCount++] = _buf[i];                /* 后面的数据长度 */
        }
        
        MODH_SendAckWithCRC();        /* 发送数据,自动加CRC */
}




这是ModBus例程里面的16功能码对应的发送代码,其余功能码的发送函数都有类似下面这条语句,很好奇为啥这条功能码不用加。
[C] 纯文本查看 复制代码
g_tModH.fAck06H = 0;                /* 如果收到从机的应答,则这个标志会设为1 */



其他功能码发送函数

其他功能码发送函数
回复

使用道具 举报

3

主题

255

回帖

264

积分

高级会员

积分
264
发表于 2024-3-21 08:36:42 | 显示全部楼层
估计是漏了没加上去,看到有写g_tModH.fAck10H的判断逻辑
回复

使用道具 举报

0

主题

22

回帖

22

积分

新手上路

积分
22
 楼主| 发表于 2024-3-21 15:44:08 | 显示全部楼层
skyshine 发表于 2024-3-21 08:36
估计是漏了没加上去,看到有写g_tModH.fAck10H的判断逻辑

应该是,不然想不清楚为啥
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
发表于 2024-3-22 08:54:09 | 显示全部楼层
要加上,谢谢楼主指出问题。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-1 07:27 , Processed in 0.239061 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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