硬汉嵌入式论坛

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

[技术讨论] 我发现在modbus主站历程中有一个错误

[复制链接]

15

主题

24

回帖

69

积分

初级会员

积分
69
发表于 2024-8-2 14:52:42 | 显示全部楼层 |阅读模式

bytes == 2 才是对的,前面那个3应该是多打了。

回复

使用道具 举报

15

主题

24

回帖

69

积分

初级会员

积分
69
 楼主| 发表于 2024-8-2 14:54:23 | 显示全部楼层
等于4才对
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-8-2 15:42:31 | 显示全部楼层
楼主图片没上传成功
回复

使用道具 举报

15

主题

24

回帖

69

积分

初级会员

积分
69
 楼主| 发表于 2024-8-2 16:56:34 | 显示全部楼层
重新上传图片
屏幕截图 2024-08-02 144430.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-8-2 17:05:26 | 显示全部楼层

实际上这个不是错误,这个是你的从机发32个字节数据就可以了,这里只是读取了4个字节

现在HAL版的改成了4个字节数据了。

[C] 纯文本查看 复制代码
/*
*********************************************************************************************************
*	函 数 名: MODH_Read_03H
*	功能说明: 分析03H指令的应答数据,读取保持寄存器,16bit访问
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
void MODH_Read_03H(void)
{
	uint8_t bytes;
	uint8_t *p;
	
	if (g_tModH.RxCount > 0)
	{
		bytes = g_tModH.RxBuf[2];	/* 数据长度 字节数 */				
		switch (g_tModH.Reg03H)
		{
			case REG_P01:
				if (bytes == 4)
				{
					p = &g_tModH.RxBuf[3];	
					
					g_tVar.P01 = BEBufToUint16(p); p += 2;	/* 寄存器 */	
					g_tVar.P02 = BEBufToUint16(p); p += 2;	/* 寄存器 */	
		
					g_tModH.fAck03H = 1;
				}
				break;
		}
	}
}
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-26 07:10 , Processed in 0.464443 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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