2020-01-12 17:25发布
zuu0 发表于 2016-7-6 15:10 上面明白了,,没错 if(addr_data < SUM_HoldingREG_WORD && (addr_data + reg_num)
blavy 发表于 2016-7-7 09:19 rbuf与tbuf就是做为接收或者发送的数组。只是限定的寄存器数量为120个,哪里有只能从0开始的。 if(bHost ...
zuu0 发表于 2016-7-7 09:48 谢谢你的解答 主要是这里
blavy 发表于 2016-7-7 13:35 读取回来的数据都是放在HoldingREGPara[120*2]这个数组里,每个寄存器对应其中的HoldingREGPara[2*addr_d ...
最多设置5个标签!
rbuf与tbuf就是做为接收或者发送的数组。只是限定的寄存器数量为120个,哪里有只能从0开始的。
if(bHost_protocol)//当做主机
{
reg_num = ModbusPara.tBuf[4]; //输出数量---利用发送的数据
reg_num <<= 8;
reg_num += ModbusPara.tBuf[5];
byteCount = reg_num *2; // 字节数= 输出数量*2
if(ModbusPara.rBuf[2] <= LENGTH_HoldingREG && byteCount == ModbusPara.rBuf[2])
。
。
}
else//当做从机
{
addr_data = ModbusPara.rBuf[2]; //起始地址
addr_data <<= 8;
addr_data += ModbusPara.rBuf[3];
reg_num = ModbusPara.rBuf[4];
reg_num <<= 8;
reg_num += ModbusPara.rBuf[5];
if(reg_num >= 1 && reg_num <= SUM_HoldingREG_WORD) //有读取寄存器,且数量在120个以内
{// 保持寄存器个数判断OK
if(addr_data < SUM_HoldingREG_WORD && (addr_data + reg_num) <= SUM_HoldingREG_WORD)
}
谢谢你的解答
主要是这里
if(addr_data < SUM_HoldingREG_WORD && (addr_data + reg_num) <= SUM_HoldingREG_WORD) 这个我是实在没看明白
addr_data 数据起始地址,SUM_HoldingREG_WORD寄存器数量 这二个的比较关系,没看明白,,,因为我以前这个起始地址都是乱来的,0x100,0x1000随便来
(addr_data + reg_num) <= SUM_HoldingREG_WORD
再加上这句,我就更不明白了 addr_data起始地址, reg_num实际的寄存器数量,,,SUM_HoldingREG_WORD 最大的寄存器数量
后面 ModbusPara.tBuf[k + 3] = HoldingREGPara[addr_data];//
addr_data++;
addr_data不应该是从0开始的么?所以我觉的,是不是约定了起始地址应该0开始的
哎啊,疯了,,能解释一下么
读取回来的数据都是放在HoldingREGPara[120*2]这个数组里,每个寄存器对应其中的HoldingREGPara[2*addr_data],HoldingREGPara[2*addr_data+1]这两字节,为什么addr_data要约定为0.
我主要做从机,主机这部分基本删了。。。主机这块也没怎么看,就是看到这个数组,下标 addr_data 一般情况这个地址我会比较任意的,只要双方对应好就可以了
这个地址可以0-fffff都随意,那这个数组得有多大啊
一周热门 更多>