modbus 关于数字量的源码 点击:483 | 回复:0



w8380800

    
  • 精华:0帖
  • 求助:1帖
  • 帖子:2帖 | 2回
  • 年度积分:0
  • 历史总积分:10
  • 注册:2011年3月15日
发表于:2013-07-15 22:54:55
楼主

//开关输入寄存器,可读


eMBErrorCode

eMBRegDiscreteCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNDiscrete )

{

//错误状态

eMBErrorCode eStatus = MB_ENOERR;

//操作寄存器个数

int16_t iNDiscrete = ( int16_t )usNDiscrete;

//偏移量

uint16_t usBitOffset;


//判断寄存器时候再制定范围内

if( ( (int16_t)usAddress >= REG_DISCRETE_START ) &&( usAddress + usNDiscrete <= REG_DISCRETE_START + REG_DISCRETE_SIZE ) )

{

//获得偏移量

usBitOffset = ( uint16_t )( usAddress - REG_DISCRETE_START );


while( iNDiscrete > 0 )

{

*pucRegBuffer++ = xMBUtilGetBits( ucRegDiscreteBuf, usBitOffset,( uint8_t)( iNDiscrete > 8 ? 8 : iNDiscrete ) );

iNDiscrete -= 8;

usBitOffset += 8;

}


}

else

{

eStatus = MB_ENOREG;

}

return eStatus;

}



其中这一段怎么解释呢*pucRegBuffer++ = xMBUtilGetBits( ucRegDiscreteBuf, usBitOffset,( uint8_t)( iNDiscrete > 8 ? 8 : iNDiscrete ) );


还有我对应用层数量,01 02 03 04 05 06等等功能码在哪里定义的呢



热门招聘
相关主题

官方公众号

智造工程师