FreeModbus 移植--REG_INPUT_START 各种寄存器起始地址

来源:互联网 发布:java api中文版下载 编辑:程序博客网 时间:2024/06/01 09:29

   

实际上modbus协议原本是用在plc上的,plc的第一个数据起始地址就是1。

如果起始地址为0,会导致第一个寄存器数据无法读出,因为你从modbusPoll发出去看上去是从0开始读取的,但是freemodbus转换后起始地址是1,读取数据函数里读取哪个地址使用的地址是

iRegIndex = ( int )( usAddress - REG_INPUT_START );

而usAddress,追溯程序发现:

usRegAddress = ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_ADDR_OFF] << 8 );        

usRegAddress |= ( USHORT )( pucFrame[MB_PDU_FUNC_WRITE_ADDR_OFF + 1] );       

 usRegAddress++;

所以导致第一个(0号)数据无法读取,如果改成REG_INPUT_START = 1,那么其实地址就是寄存器数值组的buf[0]数据了。


原创粉丝点击