2019-07-14 20:31发布
meimengxing2014 发表于 2016-8-16 12:29 可以把代码贴上来,把不懂得地方标注下,然后大家一起讨论
jianfeii 发表于 2016-8-16 15:50 串口助手可以用啊,你就是把串口助手当主机,单片机下面跑从机程序,串口发送查询命令,或者修改寄存器的值,然后看从机返回的数据对不对.
最多设置5个标签!
有乱码的地方是注释汉字,显示不出来,这是我网上看别人移植完的程序,main函数里都有这些函数,不写会报错,里面也没有校验什么的,看不懂啊看不懂,我是不是太菜了,本人大二
eMBErrorCode
eMBRegCoilsCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNCoils,
eMBRegisterMode eMode )
{
//´íÎó״̬
eMBErrorCode eStatus = MB_ENOERR;
//¼Ä´æÆ÷¸öÊý
int16_t iNCoils = ( int16_t )usNCoils;
//¼Ä´æÆ÷Æ«ÒÆÁ¿
int16_t usBitOffset;
//¼ì²é¼Ä´æÆ÷ÊÇ·ñÔÚÖ¸¶¨·¶Î§ÄÚ
if( ( (int16_t)usAddress >= REG_COILS_START ) &&
( usAddress + usNCoils <= REG_COILS_START + REG_COILS_SIZE ) )
{
//¼ÆËã¼Ä´æÆ÷Æ«ÒÆÁ¿
usBitOffset = ( int16_t )( usAddress - REG_COILS_START );
switch ( eMode )
{
//¶Á²Ù×÷
case MB_REG_READ:
while( iNCoils > 0 )
{
*pucRegBuffer++ = xMBUtilGetBits( ucRegCoilsBuf, usBitOffset,
( uint8_t )( iNCoils > 8 ? 8 : iNCoils ) );
iNCoils -= 8;
usBitOffset += 8;
}
break;
//д²Ù×÷
case MB_REG_WRITE:
while( iNCoils > 0 )
{
xMBUtilSetBits( ucRegCoilsBuf, usBitOffset,
( uint8_t )( iNCoils > 8 ? 8 : iNCoils ),
*pucRegBuffer++ );
iNCoils -= 8;
}
break;
}
}
else
{
eStatus = MB_ENOREG;
}
return eStatus;
}
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;
}[/code]
问题是我只是移植了modbus,功能码还有接受发送函数都没写啊,不知道代码是怎样的,从机程序没写好没法跑呢,我在想modbus是不是有专门的发送接收函数,不像485这样写个USART_SendData();就可以,网上的资料貌似也不多啊,你有没有测试成功的代码呢
我从网上下了好多modbus的代码,有些有crc校验,有些没有,有点无助了,代码都不一样,函数是自己定义的,还是modbus协议里自带的呢,本来想用来传输ds18B20的温度的,但是测试代码都不会啊大哥
一周热门 更多>