modbus通信协议与程序示范

2020-01-12 17:25发布

RT.
MODBUS协议内通信,发送与回收格式。
另附stc12c5a60s2单片机上运行成功的modbus代码。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
78条回答
blavy
2020-01-20 08:53
zuu0 发表于 2016-7-6 15:10
上面明白了,,没错

if(addr_data < SUM_HoldingREG_WORD && (addr_data + reg_num)

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)
        }

一周热门 更多>