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