最近在移植modbus协议到自己的系统中,在网上下载了freemodbus协议的源代码,但有两个地方一直觉得很困惑: 1.关于从地址的设置问题: 在函数eMBErrorCode eMBRTUInit( UCHAR ucSlaveAddress, UCHAR ucPort, ULONG ulBaudRate, eMBParity eParity )中,我们看到已经代入了从地址参数"UCHAR ucSlaveAddress",但是函数中只是"( void )ucSlaveAddress;"一行调用了该参数,我不理解这句是什么意思,难道这样就算设置好了从设备的地址了吗?感觉怪怪的,找了很多资料都没有找到答案; 2.关于定时器的问题: 也是在这个初始化函数中,我们可以看到这样的一段代码: /* If baudrate > 19200 then we should use the fixed timer values * t35 = 1750us. Otherwise t35 must be 3.5 times the character time. */ if( ulBaudRate > 19200 ) { usTimerT35_50us = 35; /* 1800us. */ } else { /* The timer reload value for a character is given by: * * ChTimeValue = Ticks_per_1s / ( Baudrate / 11 ) * = 11 * Ticks_per_1s / Baudrate * = 220000 / Baudrate * The reload for t3.5 is 1.5 times this value and similary * for t3.5. */ usTimerT35_50us = ( 7UL * 220000UL ) / ( 2UL * ulBaudRate ); } if( xMBPortTimersInit( ( USHORT ) usTimerT35_50us ) != TRUE ) { eStatus = MB_EPORTERR; } 其中"usTimerT35_50us"就是3.5个字节的延时时间,让我感觉困惑的是,为什么用公式usTimerT35_50us = ( 7UL * 220000UL ) / ( 2UL * ulBaudRate );计算??其中Ticks_per_1s 是什么东西?是不是所有的系统这个3.5字节的延时都是这样定义的啊?
希望用过MODBUS的朋友能帮我解释以下,没有做项目的朋友也能一同讨论一下这两个问题,非常感谢!
|